Was ist der Unterschied zwischen dem inkrementellen und dem iterativen Ansatz bei der Softwareentwicklung?

16

Der inkrementelle Ansatz ist eine Methode der Softwareentwicklung, bei der das Modell inkrementell entworfen, implementiert und getestet wird (jedes Mal wird etwas mehr hinzugefügt), bis das Produkt fertig ist. Es beinhaltet sowohl Entwicklung als auch Wartung. Das Produkt gilt als fertig, wenn es alle Anforderungen erfüllt

Das iterative Design ist eine Entwurfsmethode, die auf einem zyklischen Prozess des Prototyping, Testens, Analysierens und Verfeinerns eines Produkts oder Prozesses basiert. Basierend auf den Testergebnissen der letzten Iteration eines Designs werden Änderungen und Verfeinerungen vorgenommen. Dieser Prozess soll letztendlich die Qualität und Funktionalität eines Designs verbessern. Beim iterativen Entwurf wird die Interaktion mit dem entworfenen System als eine Form der Recherche zum Informieren und Entwickeln eines Projekts verwendet, wenn aufeinanderfolgende Versionen oder Iterationen eines Entwurfs implementiert werden.

Bei beiden Methoden geht es anscheinend darum, einen Teil des Systems zu erstellen, es zu verfeinern, um alle Testfälle zu bestehen, eine weitere Komponente des Systems hinzuzufügen und es erneut zu verfeinern. Diese werden wiederholt, bis das System fertig ist.

Was ist der eigentliche Unterschied zwischen diesen beiden Möglichkeiten, Software zu entwerfen?

Wie ist es möglich, diese beiden Methoden zu kombinieren, um einen iterativen und inkrementellen Entwurfsansatz zu bilden ?

Computerfreak
quelle

Antworten:

13

Der inkrementelle Ansatz verwendet eine festgelegte Anzahl von Schritten und die Entwicklung verläuft von Anfang bis Ende in einem linearen Verlauf.

Die inkrementelle Entwicklung erfolgt in Schritten von Design, Implementierung, Test / Verifikation bis hin zur Wartung. Diese können weiter in Unterschritte unterteilt werden, aber die meisten inkrementellen Modelle folgen demselben Muster. Das Wasserfallmodell ist ein traditioneller inkrementeller Entwicklungsansatz.

Der iterative Ansatz hat keine festgelegte Anzahl von Schritten, vielmehr erfolgt die Entwicklung in Zyklen.

Bei der iterativen Entwicklung geht es weniger darum, den Fortschritt einzelner Features zu verfolgen. Stattdessen liegt der Schwerpunkt darauf, zuerst einen funktionierenden Prototyp zu erstellen und Features in Entwicklungszyklen hinzuzufügen, in denen die Schritte für die inkrementelle Entwicklung für jeden Zyklus ausgeführt werden. Agile Modeling ist ein typischer iterativer Ansatz.


Das inkrementelle Modell wurde ursprünglich entwickelt, um dem in Fabriken verwendeten traditionellen Fließbandmodell zu folgen. Leider haben Softwaredesign und -entwicklung wenig mit der Herstellung physischer Güter zu tun. Code ist die Blaupause, nicht das fertige Produkt der Entwicklung. Gute Designentscheidungen werden häufig während des Entwicklungsprozesses "entdeckt". Das Einschließen der Entwickler in eine Reihe von Annahmen ohne den richtigen Kontext kann im besten Fall zu schlechten Designs oder im schlimmsten Fall zu einer vollständigen Entgleisung der Entwicklung führen.

Der iterative Ansatz ist mittlerweile allgemein üblich, da er besser zum natürlichen Fortschritt in der Softwareentwicklung passt. Anstatt viel Zeit und Mühe in die Suche nach dem „perfekten Design“ zu investieren, geht es beim iterativen Ansatz darum, etwas zu entwickeln, das „gut genug“ ist, um anzufangen und es an die Bedürfnisse des Benutzers anzupassen.

tl; dr - Wenn Sie einen Aufsatz nach dem inkrementellen Modell schreiben würden, würden Sie versuchen, ihn von Anfang an perfekt zu schreiben, um jeweils einen Satz zu beenden. Wenn Sie es unter dem Iterativen Modell schreiben würden, würden Sie schnell einen groben Entwurf erstellen und daran arbeiten, ihn durch eine Reihe von Überarbeitungsphasen zu verbessern.


Aktualisieren:

Ich habe meine Definition für "Incremental Approach" geändert, um sie einem praktischeren Beispiel anzupassen.

Wenn Sie sich jemals mit Vertragsabschlüssen befassen mussten, werden die meisten Verträge (insbesondere für das Militär) nach dem inkrementellen Ansatz ausgeführt. Trotz der vielen subtilen Variationen des typischen "Wasserfallmodells" werden die meisten von ihnen in der Praxis auf die gleiche Weise angewendet.

Die Schritte gehen wie folgt vor sich:

  • Auftragsvergabe
  • Vorläufige Entwurfsprüfung
  • Kritische Designprüfung
  • Spezifikation Einfrieren
  • Entwicklung
  • Fielding / Integration
  • Nachprüfung
  • Zuverlässigkeitstests

In PDR und CDR wird die Spezifikation erstellt und überarbeitet. Sobald die Spezifikation vollständig ist, sollte sie eingefroren werden, um ein Kriechen des Oszilloskops zu verhindern. Die Integration erfolgt, wenn die Software zur Erweiterung eines vorhandenen Systems verwendet wird. Mit der Überprüfung wird überprüft, ob die Anwendung der Spezifikation entspricht. Die Zuverlässigkeit ist ein Test, um zu beweisen, dass die Anwendung auf lange Sicht zuverlässig ist. Dies kann ähnlich wie bei einer SLA (Service Level Agreement) angegeben werden, bei der das System einen bestimmten Prozentsatz der Betriebszeit aufrechterhalten muss (ex 99% Betriebszeit für 3 Monate) ).

Dieses Modell eignet sich hervorragend für Systeme, die auf Papier einfach zu spezifizieren, aber schwer herzustellen sind. Es ist sehr schwierig, Software auf Papier mit einem nennenswerten Detaillierungsgrad (ex UML) zu spezifizieren. Die meisten Geschäftsarten "verantwortlich für Management / Auftraggeber nicht erkennen , dass - wenn es um Software - Entwicklung kommt - der Code selbst ist die spec. Papierspezifikationen benötigen zum Schreiben oft mindestens so viel Zeit und Mühe wie der Code selbst und erweisen sich in der Praxis normalerweise als unvollständig / minderwertig.

Inkrementelle Ansätze versuchen, die verschwendete Zeit / Ressourcen zu nutzen, indem der Code selbst als Spezifikation behandelt wird. Anstatt die Papierspezifikation durch mehrere Revisionsschritte zu führen, durchläuft der Code selbst mehrere Revisionszyklen.

Evan Scholle
quelle
+1 für schönes Beispiel, obwohl inkrementelle Beschreibung für mich falsch aussieht
Basilevs
@Basilevs Ist das besser?
Evan Plaice
6
Der Wasserfall ist nicht inkrementell. Inkrementell bezieht sich speziell auf das Erstellen (Design durch Test) von Software Stück für Stück. Im traditionellen Wasserfallmodell führen Sie den gesamten Entwurf, die gesamte Implementierung und anschließend alle Tests durch. Es ist überhaupt nicht inkrementell. Es gibt verschiedene Wasserfallvarianten, z. B. die Vorgehensweise beim Anforderungs-Engineering im Vorfeld. Anschließend wird das Projekt in Inkremente unterteilt, in denen jedes Inkrement entworfen, implementiert, getestet (und mit anderen Inkrementen integriert und getestet) wird. Dies ist jedoch nicht traditionell Wasserfall.
Thomas Owens
0

Wie bei jedem Adjektiv und den meisten Dingen in der Softwareentwicklung kommt es darauf an!

Es hängt vom Kontext ab und davon, wie der Begriff verwendet wird. Sie fragen also nach dem Unterschied zwischen inkrementellen und iterativen Ansätzen bei der Softwareentwicklung, aber Ihr Zitat befasst sich mit iterativem Design, was eine andere Sache ist (obwohl ähnlich).

Antworten speziell als Ansatz für die Softwareentwicklung.

Die Frage ist falsch gestellt. Es ist nicht das eine oder andere. Sie können sie nicht direkt vergleichen, da sie sich auf verschiedene Teile des Prozesses beziehen.

Die iterative Softwareentwicklung ist von Natur aus inkrementell. Inkrementelle Softwareentwicklung muss nicht iterativ sein.

Ein Inkrement ist eine kleine Bewegung, hoffentlich vorwärts. Es ist eine Art, sich auf jeden Schritt der ausgeführten Arbeit zu beziehen.

Eine Iteration ist ein Arbeitszyklus.

Eine Iteration bezieht sich also auf den gesamten verwendeten Entwicklungszyklus. Ein Inkrement bezieht sich auf jeden einzelnen Arbeitsschritt. Eine Iteration erzeugt ein Inkrement, das sich aus einem oder mehreren tatsächlichen Inkrementen für die Software zusammensetzt (normalerweise mehrere).

Abschließend...

Die iterative Softwareentwicklung ist ein spezifischer Ansatz für die Softwareentwicklung, der im Gegensatz zu einem herkömmlichen Wasserfallansatz in Iterationen arbeitet. Scrum ist ein gutes Beispiel.

Die inkrementelle Softwareentwicklung ist allgemeiner und bezieht sich auf die schrittweise Weiterentwicklung der Arbeit, die für die meisten (vielleicht alle?) Ansätze kennzeichnend ist. Trotzdem wird der Begriff häufiger in Bezug auf moderne, agile Ansätze verwendet, was wahrscheinlich die Verwechslung zwischen den beiden sehr ähnlichen Begriffen erklärt.

Und schließlich kommt es natürlich darauf an, wie der Begriff bei der Verwendung gemeint ist, was oft erheblich von Sprecher, Monatszeit usw. abhängt!

Interessanter ist die Frage, in welche Richtung ein empirischer Ansatz zur Softwareentwicklung passt. Das Schöne an einem iterativen Ansatz ist, dass er Empirismus ermöglicht, wo die Magie geschieht.

Hoffe das hilft.

Dieser Artikel beschreibt es gut mit Beispielen.

Nigel B. Peck
quelle