© Mertsaloff/Shutterstock.com
Teil 3: Applikation mit den ersten Features programmieren

Strukturiertes DevOps


Bei der Entwicklung von Enterprise-Anwendungen treten häufig Keywords wie Jenkins, Docker oder DevOps auf. Man hört dabei von tollen Werkzeugen, die den Quellcode analysieren und zentral Artefakte für die jeweiligen Projektbeteiligten bereitstellen. Dass dieses Szenario nicht nur im Umfeld von Programmiersprachen wie Java gelebt werden kann, wird in dieser Artikelreihe dargestellt.

In den vergangenen Teilen dieser Serie wurde auf Atlassians Webapplikationen Jira und Stash eingegangen, und diese wurden grundlegend eingerichtet. Des Weiteren haben wir anhand eines Beispiels (Einkaufszettel) die grundlegenden Stories innerhalb eines neuen Projekts angelegt, und in der auf Git basierenden Versionsverwaltung Stash wurde ein Repository mit dem GitFlow-Prinzip zur Verfügung gestellt. Ebenso ist mithilfe von Jenkins ein grundlegender Deployment-Server eingerichtet und die benötigten Plug-ins für die Quelltextanalyse und das Unit Testing sind installiert worden. Zusätzlich wurden innerhalb der IDE NetBeans Phing und Composer installiert und die Verbindung zum Task-Repository Jira und dem Sourcecode-Managementsystem wurde bereitgestellt. Auf den hier angewandten Entwicklungsprozess bin ich ebenfalls eingegangen: Er wurde mit der testgetriebenen Entwicklung festgelegt. Dementsprechend haben wir in den letzten zwei Teilen der Artikelserie bereits alle Vorbereitungen für die tatsächliche Implementierung getroffen.

Ziel dieses Artikels ist es, die theoretischen Grundlagen der letzten beiden Artikel und das Zusammenspiel der eingerichteten Werkzeuge zu demonstrieren und auszuwerten. Dafür wird die geplante Beispielapplikation mit den ersten Features programmiert, sodass sie in den jeweiligen Develop Branch hinzugefügt werden kann. Nachdem dies geschehen ist, wird der Jenkins-Server seine Aufgaben innerhalb des Build-Prozesses abarbeiten und die jeweiligen Artefakte liefern. Diese werden anschließend ausgewertet und dargestellt.

Die Jira-Stories

Im ersten Teil dieser Artikelserie wurden die Stories für das Beispielprojekt definiert. Nachfolgend werden sie noch einmal aufgelistet und dann in Tasks zerlegt. Folgende Stories wurden erstellt:

  • Der Benutzer möchte einen oder mehrere Einkaufszettel erstellen, bearbeiten und löschen.

  • Der Benutzer möchte auf dem Einkaufszettel Produkte hinzufügen, anpassen und löschen.

  • Der Benutzer möchte sich anmelden, einloggen, ausloggen und seinen Account entfernen können.

  • Der Benutzer möchte beim Einkauf selbst die genommenen Produkte auf dem ausgewählten Einkaufszettel bestätigen können.

Stories in Tasks slicen

Das Slicing – oder auf Deutsch: das Zerlegen der Stories in Tasks – erzeugt die tatsächlichen Programmieraufgaben der Entwickler. Dabei ist darauf zu achten, dass eine Story immer einer funktionierenden Version entspricht. Das bedeutet, dass man in den jeweiligen Branches abgeschlossene Stories in den Master-Branch laden kann. Eine Story muss dabei immer unabhängig sein und einer Funktion entsprechen.

Beim Zerlegen der Stories gibt es mehrere Ansätze; am häufigsten findet das sogenannte horizontale Splitting (Zerlegen) Anwendung. Dabei wird die jeweilige Story in die Arbeitsschritte ihres architektonischen Aufbaus zerlegt, zum Beispiel in Web Services, Interfaces, Datenbank sowie Front- und Backend. Nach dieser Gruppierung werden daraus einzelne Sub-Tasks erstellt und man kann mit der Entwicklung beginnen. Die zweite Methode zum Zerlegen der Stories in Aufgaben ist das vertikale Splitting. Das vertikale Zerlegen der User Stories ist bei einer agilen Entwicklung, wie wir sie hier einsetzen, wesentlich sinnvoller, da man dabei die Story in kleinere Stories zerlegt. Allerdings bringt hier jede kleine Story wieder einen kleinen, funktionsfähigen Part der gesamten Story zusammen. In diesem Beispiel werden die Stories mit der Methode des Vertical Splittings in folgende Funktionen und Methoden zerlegt:

  • Story 1: Der Benutzer möchte einen oder mehrere Einkaufszettel erstellen, bearbeiten und löschen.

    • Der Benutzer möchte einen Einkaufszettel erstellen.

    • Der Benutzer möchte einen Einkaufszettel bearbeiten.

    • Der Benutzer möchte einen Einkaufszettel löschen.

    • Der Benutzer möchte mehrere Einkaufszettel löschen.

  • Story 2: Der Benutzer möchte auf dem Einkaufszettel Produkte hinzufügen, anpassen und löschen.

    • Der Benutzer möchte auf einem gegebenen Einkaufszettel Produkte hinzufügen.

    • Der Benutzer möchte auf einem gegebenen Einkaufszettel die Anzahl oder den Namen eines Produkts anpassen.

    • Der Benutzer möchte auf einem gegebenen Einkaufszettel vorhandene Produkte entfernen.

  • Story 3: Der Benutzer möchte sich anmelden, einloggen, ausloggen und seinen Account entfernen können.

    • Der Benutzer möchte einen Account einrichten können.

    • Der Benutzer möchte sich mit seinem gegebenen Usernamen und dem Passwort in seinen Account einloggen können.

    • Der Benutzer möchte sich, wenn er bereits eingeloggt ist, wieder ausloggen können.

    • Der Benutzer möchte, wenn er sich in seinem Account befindet, diesen entfernen können.

  • Story 4: Der Benutzer möchte beim Einkauf selbst die genommenen Produkte auf dem ausgewählten Einkaufszettel bestätigen können.

    • Der Benutzer möchte einen Einkaufszettel auswählen können.

    • Der Benutzer möchte die Produkte bestätigen können.

Resultierende Feature...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang