Warum brauchen wir Throw-Away-Prototyping?

9

Was ist ein Wegwerf-Prototyping-Modell in der Softwareentwicklung und warum brauchen wir es? Wie unterscheidet es sich vom evolutionären Prototyping?

Asmat Ali
quelle
5
Es gibt einen alten Witz / eine alte Richtlinie, die alle Software bis Version 3 nervt. Die erste Version findet heraus, was Sie brauchen, die zweite findet heraus, wie es geht (gut).
Telastyn
2
Sie können mehr darüber in einem Buch namens "Rapid Development", Steve McConnell, lesen. Und vielleicht "Mythical Man Month", wenn Sie die Geschichte der Softwareentwicklung interessiert.
andrew.fox
2
@ andrew.fox "Build One to Throw Away" ist nützlich im Kontext ( wired.com/2010/07/ff_fred_brooks ) - "Als ich 1975 den Mythical Man-Month schrieb, riet ich Programmierern," den ersten zu werfen " Version entfernt, "dann bauen Sie eine zweite."
@ MichaelT, ja, soweit ich mich erinnere, steht es im Anhang des Buches (die neueste Ausgabe).
andrew.fox
1
@ Telastyn Ich denke nicht, dass das ein Witz ist.
RubberDuck

Antworten:

21

Wegwerfprototyping

Beim Throw-Away-Prototyping geht es darum, so schnell wie möglich einen Teil der zukünftigen Anwendung zu erstellen, um entweder sicherzustellen, dass eine Funktion technisch machbar ist, oder um die Funktion Stakeholdern oder potenziellen Benutzern zu zeigen, um Feedback von ihnen zu erhalten.

Da der Quellcode dieses Prototyps später bei der Entwicklung der Anwendung selbst nicht wiederverwendet wird, handelt es sich um einen Wegwerfprototyp. Wenn Sie wissen, dass es sich um einen Wegwerfcode handelt, können Sie sich auf die eigentliche Funktion konzentrieren und Aspekte wie Wartbarkeit des Codes, Stil, Entwurfsmuster oder Tests außer Acht lassen. Dies ermöglicht es, den Prototyp sehr schnell fertigzustellen, ohne die technische Verschuldung des Endprodukts negativ zu beeinflussen.

Das Wegwerfprototyping unterscheidet sich vom Skizzieren . Das Skizzieren ist grafischer und auf Benutzeroberflächen und Benutzererfahrung ausgerichtet und besteht nicht aus dem Schreiben von Programmcode. Einweg-Prototyping wird normalerweise verwendet, wenn das Skizzieren nicht ausreicht (z. B. wenn Sie zeigen müssen, wie eine Funktion auf verschiedenen Smartphones funktioniert, oder wenn Sie die tatsächliche Leistung und Reaktionsfähigkeit zeigen müssen).

Einweg-Prototyping kann ein Risiko darstellen, wenn Sie mit Stakeholdern ohne technischen Hintergrund und in einem Kontext enger Fristen und sehr begrenzter Ressourcen umgehen: Stakeholder versuchen möglicherweise, Sie davon zu überzeugen, den Quellcode des Prototyps im Endprodukt wiederzuverwenden. Es ist natürlich zu glauben, dass dies die für die Freigabe des Produkts erforderliche Zeit verkürzt, aber tatsächlich nur das Versanddatum verzögert. Eine Möglichkeit, dies zu verhindern, besteht darin, für den Prototyp eine Sprache zu verwenden, die in der Produktion nicht verwendet werden kann (verwenden Sie beispielsweise C #, wenn Sie wissen, dass das Endprodukt auf Linux-Servern gehostet wird, auf denen nur Python installiert ist).

Geben Sie hier die Bildbeschreibung ein

Abb. 1: Wegwerfen von Prototypen und Skizzieren : Prototypen helfen dabei, frühzeitig Feedback zu erhalten, bevor Sie mit der Entwicklung des eigentlichen Features beginnen.

Evolutionäres Prototyping

Evolutionäres Prototyping besteht aus der Erstellung eines Prototyps, der dann auf der Grundlage des regelmäßigen Feedbacks der Stakeholder oder potenziellen Benutzer verfeinert wird.

Hier zählt die Wartbarkeit von Code, Stil, Entwurfsmustern oder Tests von Anfang an, wodurch der Prototyp zu einem voll funktionsfähigen Produkt für Unternehmen weiterentwickelt werden kann. Die früheren Schritte des Prototyps enthalten nur den Kern des zukünftigen Produkts. Anschließend werden die Funktionen schrittweise hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Abb. 2: Evolutionäres Prototyping : Features werden zum Prototyp zusammengefasst, um das Endprodukt zu erstellen.

Evolutionäres Prototyping unterscheidet sich vom inkrementellen Prototyping . Inkrementelles Prototyping besteht darin, mehrere Prototypen zu erstellen, die jeweils einen Teil des zukünftigen Systems darstellen, und diese dann zu kombinieren. Evolutionäres Prototyping ist näher an Agile: Oft können Sie frühzeitig ein funktionierendes Produkt mit eingeschränkten Funktionen erhalten und es erweitern, bis die Stakeholder Geld haben. Inkrementelles Prototyping hingegen eignet sich besser für große Projekte mit vielen beitragenden Teams, wobei jedes Team an einem separaten Prototyp arbeitet.

Geben Sie hier die Bildbeschreibung ein

Abb. 3: Inkrementelles Prototyping : Mehrere Prototypen werden zum Endprodukt kombiniert.

Evolutionäres Prototyping unterscheidet sich auch von agilen Methoden . Bei Agile geht es um Iterationen und häufige Meilensteine, bei denen ein voll funktionsfähiges Produkt für die Fertigung freigegeben werden kann. Wenn Sie jeden Donnerstag ein funktionierendes Produkt haben, machen Sie Agile. Beim evolutionären Prototyping erweitern Sie den Prototyp, aber nichts zwingt Sie dazu, regelmäßig ein voll funktionsfähiges Produkt zu haben. Sie können zwei Monate damit verbringen, den ersten Prototyp zu erstellen, ihn dann in zwei bzw. drei Tagen um einige Funktionen zu erweitern und dann drei Monate mit einer anderen Funktion zu verbringen. Sie können diese Art von unregelmäßigen Mustern in Agile nicht haben.

Bestimmte agile Methoden erzwingen zusätzliche Regeln. Wenn Sie beispielsweise keine Paarprogrammierung durchführen, können Sie nicht behaupten, dass Sie Extreme Programming ausführen. Wenn Ihr Team keine täglichen Besprechungen hat, machen Sie kein Scrum.

Arseni Mourzenko
quelle
Der Hauptunterschied zwischen agilem und evolutionärem Prototyping besteht also darin, dass bei agilen Prototypen der Release-Zyklus mit einer festen Länge folgt?
Giorgio
@Giorgio: Wie ich in meiner Antwort erklärt habe, sind die Unterschiede: (1) Release-Zyklus mit fester Länge, (2) kurze Iterationen, (3) voll funktionsfähiges Produkt am Ende jeder Iteration und (4) zusätzliche Regeln für spezifische agile Methoden. IMO, es gibt keinen "Hauptunterschied" zwischen diesen vier.
Arseni Mourzenko
Da zusätzliche Regeln nur für bestimmte agile Methoden gelten, charakterisiert (4) Agile nicht. Beispielsweise kennzeichnet die Paarprogrammierung Agile nicht. Darüber hinaus scheint mir (1) zu implizieren (3): Wenn Sie etwas veröffentlichen, muss es ein voll funktionsfähiges Produkt sein, oder ist es möglich, einen nicht voll funktionsfähigen Prototyp im evolutionären Prototyping freizugeben? (2) ist ebenfalls wichtig: Iterationen sollten kurz sein, während ich denke, dass es beim evolutionären Prototyping die Freiheit gibt, lange oder kurze Iterationen zu wählen. Es scheint mir also, dass (1) und (2) Agile charakterisieren (ich hatte (2) in meinem vorherigen Kommentar vergessen).
Giorgio
Aber vielleicht irre ich mich, weil ich (3) und (4) falsch interpretiert habe.
Giorgio
@Giorgio: "Wenn Sie etwas veröffentlichen, muss es ein voll funktionsfähiges Produkt sein" Nicht unbedingt. Wenn Sie einen Prototyp veröffentlichen, handelt es sich nicht um ein voll funktionsfähiges Produkt, da einige Funktionen, die Endbenutzern tatsächlich zur Verfügung stehen, möglicherweise vollständig beschädigt sind. Was (4) betrifft, stimme ich Ihnen zu, es charakterisiert Agile selbst nicht.
Arseni Mourzenko
4

Prototyping wird aus vielen Gründen verwendet. Vielleicht möchten Sie die Benutzererfahrung an einer neuen Anwendung messen, um abzuschätzen, ob es sich lohnt, sie zu erstellen, ohne die Kosten für die eigentliche Erstellung zu verursachen . Möglicherweise benötigen Sie etwas, das mit einem vorhandenen Programm über das Netzwerk kommuniziert, um Integrations- oder Auslastungstests in Ihrem Netzwerk durchzuführen, bevor Sie Zeit hatten, die auf Ihrem Knoten ausgeführte Software fertigzustellen. Vielleicht müssen Sie Ihren Anlegern etwas zeigen, das fast wie ein abgeschlossenes Programm aussieht , damit sie eher bereit sind, die tatsächlich erforderlichen Investitionen zu tätigenBeenden Sie das Programm. (Dies hat nichts mit Täuschung zu tun. Benutzer und Manager beurteilen Software ausschließlich anhand ihrer Benutzeroberfläche. Daher ist es wichtig, ihnen eine gute Benutzeroberfläche zu präsentieren, damit sie glauben, dass das Projekt so weit fortgeschritten ist, wie es tatsächlich ist.)

Ein Wegwerfprototyp ist einfach einer, der nicht schrittweise in die eigentliche Lösung umgewandelt, sondern durch einen neu geschriebenen ersetzt wird. Natürlich ist das Wegwerfen von Code mit einer gewissen Verschwendung verbunden, die zumindest einen Teil der gewünschten Aufgaben erfüllt , aber die bessere architektonische Integrität des richtigen Codes kann diesen Nachteil leicht ausgleichen.

Kilian Foth
quelle