Inhaltsverzeichnis

Prozessmodelle

Der Software- (Engineering-) Prozess ist eine Aneinanderreihung von Aktivitäten und damit verbundenen Ergebnissen, die ein Softwareprodukt erzeugen.

Anforderungsspezifikation

Software- (Engineering-) Prozessmodelle sind vereinfachte und abstrakte Beschreibungen eines Software-Prozesses, der einen Abschnitt vom Ganzen darstellt.

Prozessmodelle

Prozessmodelle können Aktivitäten enthalten, die Teil der Software sind Softwareprodukte wie beispielsweise Architekturbeschreibungen, den ganzen Quellcode, Code-Fragmente oder Benutzerdokumentation so wie die Rollen der beteiligten Personen bei der Softwareentwicklung. Die gängigsten Prozessmodelle sind hierbei:

Dabei können große Projekte auch aus unterschiedlichen, so wie mehreren Modellen in verschiedenen Abschnitten des Entwicklungsprozesses bestehen.

Das Wasserfallmodell

Das Wasserfallmodell eines in der Vergangenheit am meisten Benutzte Modell kann als ein generisches Prozessmodell betrachtet werden.

Quelle: Wikipedia

  1. Anforderungsanalyse und Definition: Die Anforderungen werden in Absprache mit dem vom Benutzer verwendeten System festgelegt. Danach werden diese detailliert definiert und dienen als Systemspezifikation für die Software.
  2. System- und Software-Entwurf: Nachdem die Systemarchitektur definiert ist, beginnt die grundlegend Abstraktion und Identifikation der Software.
  3. Implementierung und Unit-Tests: Das Software-Design wird hierbei als ein Abschnitt, der Programmierung dargestellt, eben so das Testen / Überprüft, ob die Teilabschnitte der Software ihren Spezifikationen entsprechen.
  4. Integration und Systemtests: Die Software wird als Gesamtsystem integriert und getestet.
  5. Betrieb und Instandhaltung: Das installierte System wird nun an den Kunden / Benutzer ausgeliefert. Dieser Abschnitt beinhaltet die Wartung so wie die Korrektur von Fehlern die erst bei der Nutzung entdeckt wurden. Ebenso wie die Weiterentwicklung der Software bei neuen Anforderungen.

Wichtiges Merkmal ist dabei, dass man bei jedem Prozessabschnitte wieder eine „Stufe“ oder mehrere „Stufen“ zurück gehen kann um dann diese Teilabschnitte oder diesen Teilabschnitt erneut durchlaufen kann. Eine Überspringen einer „Stufe“ oder mehrer „Stufen“ ist möglich.

Zusammenfassung

Das Ergebnis jeder Phase ist eine Reihe von genehmigten Artefakten. • Die folgende Phase beginnt, nachdem die vorherige Phase abgeschlossen ist. (In der Praxis kann es aber auch zu Überschneidungen kommen.) • Im Fehlerfall müssen vorherige Prozessschritte wiederholt werden. • Passt zu anderen (Hardware-) Engineering-Prozessmodellen. (Auch die Hardwareentwicklung bewegen sich seit neustem in die Richtung agiler Methoden!)

Agile Entwicklung

Agile Softwareentwicklung – Prinzipien, Muster und Praktiken bauen auf iterativen Ansätzen auf.

Ziel ist es, Software schneller zu entwickeln, um schneller auf neue Anforderungen reagieren zu können. Ursprünglich ist die Agile Entwicklung nur für kleine und mittlere Teams konzipiert worden, um Agilität zu erreichen. Hierfür werden Praktiken angewendet, welche die notwendige Disziplin bieten und schnell Feedback geben. Es wurde ein Designprinzip entwickelt, dass die Software flexibel und wartbar macht. Dazu muss man die Designmuster genau kennen, um spezifische Probleme auszugleichen zu können.

Die Verwendung einer agilen Methode bedeutet nicht, dass die Stakeholder immer das bekommen, was sie wollen. Es bedeutet vielmehr, dass die Stakeholder das Team leichter steuern können, um den höchsten geschäftlichen Nutzen bei geringsten Kosten zu erzielen.

Der Stakeholder

Als Stakeholder wird der Project Manage oder eine von Ihm ernannte Person bezeichnet, die ein berechtigtes Interesse am Verlauf des Prozesses oder Projektes hat.

Das Manifest der agilen Softwareentwicklung

Prinzipien

Unsere oberste Priorität ist es, den Kunden frühzeitig und zufrieden zu stellen. Durch kontinuierliche Software-Lieferungen unterstützen Sie diesen wertvollen Prozess. Liefern Sie dabei regelmäßig funktionsfähige Software. Je nach Projekt und Kunde sollte dies Wochenweise bis Monatsweise erfolgen. Kürz gehaltene Abstände zeigen dabei auch kleinere Details. Lange Abstände zeigen oft keinerlei Veränderung der Software.

Funktionierende Software ist das wichtigste Maß für den Fortschritt. Denn wenn 30% der Funktionalität implementiert sind, sind auch 30% des Projekts abgeschlossen. Nichtfunktionale Software oder teilfunktionale Software ist nicht repräsentierbar und somit nicht fertig.

Ständige Aufmerksamkeit für technische Exzellenz und gutes Design erhöht die Beweglichkeit Ihres Projektes. Sie können schneller auf den Kunden reagieren. Und sind besser Vorbereitet, wenn der Kunde Änderungen in Erwägung zieht.

Einfachheit – Es ist keine Kunst, die Menge der nicht geleisteten Arbeit zu maximieren. Kleine Abschnitte, dafür kontinuierlich voranzuschreiten ist besser als schwierige Probleme in großen Team zu lösen.

Seien Sie offen für Änderungen und neue Projekt-Anforderungen, auch wenn Ihr Projekt in der Entwicklung weit voran geschritten ist. Der Agile Prozesse erlaubt es Veränderungen für Ihre Wettbewerbsfähigkeit gegenüber dem Kunden als Vorteil zu nutzen.

Ziehen Sie Ihr Team in regelmässig Abständen zu Verbesserungsvorschlägen heran, Ihr Team ist näher am Projekt wie Sie. Ihr Team weiss wie es mehr erreichen und wie es effektiver arbeiten kann, stimmen Sie dann Ihr Team entsprechend ab.

Die besten Architekturen, Anforderungen und Designs entstehen in selbstorganisierten Teams, wo jeder seiner Fähigkeit genau da einbringen kann, wo diese gebraucht werden. Falsch organisierte Teams, bei denen die persönlichen Präferenzen ausser Acht gelassen werden bremsen Ihr Projekt.

Unternehmer/Geschäftsleute und Entwickler während des gesamten Projekts zusammenarbeiten. Nicht jedem sind alle Aspekte der Software plausibel.

Projekte um motivierte Einzelpersonen herum aufbauen. Geben Sie Ihrem Team die Umgebung und Unterstützung, die sie brauchen. Dadurch bauen Sie Vertrauen auch Sicherheit auf. In einem Guten Arbeitsklima werden Jobs leichter und somit schneller erledigt.

Agile Prozesse fördern eine nachhaltige Entwicklung. Versuchen Sie bei der Entwicklung ein ein konstantes Tempo aufrecht zuhalten, dadurch entsteht weniger Stress und der Unterschied zwischen weniger stressigen zu stressigen Phasen ist nicht so Markant.

SCRUM

Einheitlicher Prozess – Phasen (im Projektmanagement)

  1. Inception (~ dt. Konzeption): Machbarkeitsphase, in der gerade genug Nachforschungen angestellt werden, um mit dem Projekt fortzufahren oder es zu stoppen. Bekennen Sie sich zu einer Seite und unterstützen eine Entscheidung.
  2. Ausarbeitung oder Entwurf: Die Kernarchitektur wird iterativ implementiert. hohe Risiken sind abzuschwächen um das Projekt fortzusetzen.
  3. Konstruktion: Fortführung der iterativen Implementierung unter geringerem Risiko und Implementierung einfacher Elemente so wie Vorbereitung für die Bereitstellung für den Kunden.
  4. Transition (~ dt. Übergabe): Betatests und Bereitstellung für den Kunden.

Quelle: redbooth.com

Allgemeine Durchführung

Extreme Programming

Extreme Programming besteht aus einer Reihe von einfachen, voneinander abhängigen Verfahrensregeln.

User Stories

Anforderungen werden mit dem Kunden besprochen und in wenigen Worten niedergeschrieben. (Eine Karteikarte für eine Anforderung.

Kurze Zyklen

Liefern Sie alle zwei Wochen oder nach jeder Iteration eine funktionale Software an den Kunden. Die gelieferte Software kann, muss aber nicht direkt in Produktion gehen. Iterationen sind zeitgesteuert – Verspätungen sind illegal, wenn Sie nicht liefern können, schließen Sie alle anderen, für diese Iteration geplanten Aufgaben ab.

Iterationsplan

Bei jeder Wiederholung sind die User Stories und deren Prioritäten festgelegt. Der Kunde wählt die User Storys aus, die er umgesetzt haben möchte. Die Anzahl der User Stories ist durch das wurde von den Entwicklern festgelegte Budget begrenzt.

Release Plan

Eine Karten besteht aus ca. sechs Iterationen. Jede Karte kann jederzeit geändert werden.

The Planning Game

Aufgabenteilung zwischen Kunden und Entwickler. Der Kunde entscheidet, wie wichtig eine Funktion ist und die Entwickler entscheiden, wie viel diese Funktion zu implementieren kostet.

Initial Exploration (Projektstart)

Oft wird deswegen auch ein Prototyp im Vorfeld entwickelt, um die Velocity besser abschätzen zu können. Dies wird dann als „Spike“ bezeichnet.

Iterationsplanung oder Iteration Planning

Aufgabenplanung oder Task Planning

The Planning Game oder “Planning Poker”

Weitere Informationen zu diesem Thema finden Sie auf Wikipedia.

Schätzen Sie den Aufwand für die Implementierung anhand der Funktionalität ab. Erstellen Sie dazu eine Annotations-Datei in der jedes Objekt eine kommentierte Zeile bekommt. In dieser wird das Objekt genau spezifiziert. Dabei kann die Zeile entweder leer sein oder mit einem „#“ beginnen. Wenn es sich um einen Kommentar handelt, muss das zu verwendende Muster wie folgt aussehen:

'['<TYPE>']'<KEY>'='<VALUE>

Wenn beim Analysieren einer Zeile ein Fehler auftritt, wird die Zeile ignoriert und die Analyse fährt mit der nächsten Zeile fort. Nach dem Analysieren der vollständigen Datei wird eine Karte mit den validierten Rückgabewerten und Eigenschaften erstellt. Alle Zeilen, die nicht analysiert werden konnten oder die Validierung fehlschlug, werden ebenfalls zurückgegeben.

Extreme Programming – Umsetzung

Akzeptanztests

Details der User Storys werden in Form von Akzeptanztests erfasst. Diese Akzeptanztests sind üblicherweise Black-Box-Tests und werden vor oder gleichzeitig mit der Implementierung einer jeden User Story geschrieben. Wenn ein Akzeptanztests bestanden ist, wird dieser dem „Set of Passing“ hinzugefügt. Bestandene Akzeptanztests dürfen nie wieder fehlschlagen.

Pair Programming

Der Code wird von einem „Programmierer-Paar“ geschrieben, dabei implementiert einer von beiden einen Code-Abschnitt und das andere Mitglied überprüft dann den implementierten Code-Abschnitt. Bestenfalls ändern sich die Paarungen nach einem oder einem halben Tag, um sicherzustellen, dass Wissen verbreitet wird und dass es zu keiner „Betriebsblindheit“ oder Gewohnheit kommt.

Eine Erweiterung dieser Art ist “Mob-Programmierung

Umgestaltung oder Refactoring

Führen Sie häufig Refactorings beim Hinzufügen von neuen Funktionen durch, um dadurch „rots“ im Code zu vermeiden.

„Rots“ bedeutet, dass unter ständiger Aktualisierung, Erweiterung und Änderungen Code „unschön“ wird. Da der vorhandene Code nicht 100% passt, wird dieser im Laufe der Zeit immer wieder abgeändert und dadurch kommen mehr Fehler in den Code. Im Schlimmsten Fall kann es auch passieren, dass der alte Code nicht mehr „korrekt“, oder zu sehr hässlichem „hacking“ Code wird. Dies reduziert die Integrität des Codes und „verrottet“ diesen, bis er schließlich unbrauchbar wird.

Umgestaltung oder Refactoring bedeutet Verbesserung der (Code-) Struktur ohne das eigentliche Verhalten zu ändern.

Test-Driven Development

Hiebei stehen die Testes (Unit-Tests) im Vordergrund. Diese werden zuerst von den Entwicklern implementiert und dienen dann als Grundstruktur des Projektes. Dabei wird der gesamte Code um die (Unit-)Tests zu bestehen geschrieben. Wurden zu einem Abschnitt alle Testfälle vollständig bestanden, wird das Refactoring durchgeführt dies führt dazu, dass es zu weniger gekoppelten Code kommt.

Refactoring implizit weniger gekoppelten Code.

Continuous Integration

Programmierer überprüfen ihren Code und integrieren diesen mehrmals am Tag. Dazu wird „non-blocking Source Control“ oder „Nicht blockierende Quellcodeverwaltung“ verwendet. Das bedeutet nach dem „check-in“, „Einchecken“ oder „Push to Master“ durchläuft der Code mehrere Test, besteht der Codeabschnitt alle diese Tests wird er in das System gebaut oder ausgeliefert.

Einfaches Design

Halten Sie das Design so einfach und ausdrucksstark wie nur möglich. Konzentrieren Sie sich auf die aktuellen User Stories und machen Sie sich dabei keine Sorgen über anstehende User Stories und deren Kompatibilität. Z.B. Fügen Sie die Änderung nur dann durch, wenn eine User Story sie dazu zwingt und es keine andere Möglichkeit gibt. Jede User Story wird als ein einzelner Block betrachtet.

Suchen Sie nach der einfachsten Möglichkeit die Funktion umzusetzen! Dazu suchen Sie die einfachste Entwurfsoption für die aktuelle User Story.

You aren’t going to need it! Rechnen Sie immer mit der Möglichkeit, dass Sie mit Voranschreiten des Projektes die aktuelle User Story nicht mehr benötigen werden. Verlieren Sie darum nicht unnötige Zeit bei der Umsetzung. Fügen Sie eine Code-Erweiterung nur hinzu, wenn ein Sicherheit oder mindestens ein überzeugender Beweise für die Notwendigkeit vorliegt.

Einmal ist ausreichend! Dulden Sie keine Code-Duplizierung. Beseitigen Sie redundanten Code durch Abstraktionen. Entfernen Sie Muster vor der Entfernung des redundanten Codes.

User Stories

Beispiel

User Stories für eine Web Application

Eine nicht implementierbare Anforderung:  nicht implementierbare Anforderung Eine große Anforderung, welche dann mehrere Kleine unterteilt wird:  Eine große Anforderung, welche dann mehrere Kleine unterteilt wird.

Aufgeteilte Anforderung:  1.Teil der 1. Anforderung von oben  2.Teil der 1. Anforderung von oben

Leitfaden für gute Anforderungen

INVEST:

Etablierte Vorlagen für User Storys

Beschreiben von User Storys

ID 3
Name Login
Beschreibung Als Administrator muss ich mich am System mit Benutzername und Passwort authentifizieren, um Änderungen vornehmen zu können
Akzeptanzkriterium Der Dialog zum Einloggen wird korrekt angezeigt und es muss möglich sein, sich als Administrator zu authentifizieren. Ungültige Eingaben sollen ignoriert werden und normale Nutzer erhalten die Rolle als „Benutzer“ und nicht die Rolle des “Administrator”
Geschätzter Aufwand 3 Story Points
Entwickler Raffael
Umgesetzt in Iteration 2
Tatsächlicher Aufwand (Std.) 6 Stunden
Velocity (Std./Story Point) 2
Bemerkungen

Scrum (kurze Übersicht)

Scrum vs Wasserfall

Quelle: infoq.com

Das Problem bei der Wasserfall Methode ist, dass Sie fast immer erst am Schluss des Projektes ein vorzeigbares Produkt haben. Zum Schluss kommt dann immer die „heisse Phase“, in der ein Produkt dann fertig wird oder schlimmstenfalls auch scheitern kann. Bei SCRUM oder einer vergleichbaren agilen Methode, haben Sie etappenweise kleine vorzeigbare Produkte. Sie laufen weniger Gefahr, dass Ihr Projekt zum Ende hin noch scheitern kann. Ihr Produkt wächst stetig und kann auch durch seine modulare Bauweise leichter angepasst werden.

Scrum Rollenverteilung

Product Owner

Development Team / Entwickler

Scrum Master

Scrum Events

Sprint

Sprint-Planung oder Planungsphase

Daily Scrum (oder Jour fix)

Sprint Review oder Sprint-Überprüfung

Rückblick oder Retroperspective

Scrum Begriffe

Product Backlog

Sprint Backlog

Anpassungsfähigkeit

Different types of systems need different development processes! Bleiben Sie anpassungsfähig!

Software, die in einem Flugzeug verwendet wird, muss anders entwickelt werden als eine Software für eine E-Commerce-Webseite. Ein Betriebssystem wird anders anders entwickelt als ein Prozessor. In großen Projekten können verschiedene Teile unter Verwendung verschiedener Prozessmodelle entwickelt werden.

Es gibt nicht den einen richtigen Weg, für alle Entwicklungen

Ziel

Ziel ist es systematisch kleinere (Software-) Pakete, mit maximaler Qualität einfach zu produzieren.

Um systematisch Software zu entwickeln, müssen Sie einem genau definierten Prozess folgen. Dieser entspricht den Bedürfnissen des in der Entwicklung befindlichen Projekts. Vergessen Sie niemals, es ist praktisch unmöglich, alle Anforderungen gleich zu Beginn einer Projektes zu kennen. Ein Projekt entwickelt sich durch neue Erkenntnisse in der Entwicklung und neue Anforderungen des Kunden.