4.4. User Stories schreiben

Vor dem Schreiben der User Stories steht die Entscheidung, welcher User Story Parser eingesetzt werden soll. Je nach gewählten Parser kann sich das Format, in dem die User Stories verfasst werden, stark unterscheiden. Das checkerberry-atdd-maven-plugin bietet sowohl die Möglichkeit auf den bestehenden Standard-Parser zurückzugreifen als auch die Verwendung einer eigenen Parser-Implementierung. Wird eine eigene Implementierung gewählt, kann der Benutzer beispielsweise selbst bestimmen, in welchem Format die User Stories gespeichert werden.

Im Folgenden wird zunächst die Verwendung des Jira- und Standard-Parsers erläutert und anschließend auf die Implementierung eigener Parser genauer eingegangen.

4.4.1. Verwendung des Jira-UserStory-Retrievers

Atlassian Jira ist ein Projektverfolgungstool für Teams. In diesem können Einträge (sogenannte Vorgänge) hinterlegt werden, die eine Aufgabe für den Entwickler beschreiben. Die Vorgänge bestehen unter anderem aus einem Vorgangstyp zur besseren Klassifizierung, einer Priorität für die Entwicklung, einer Beschreibung was entwickelt werden soll und benutzerbezogene Daten wie z.B. wer hat den Vorgang erstellt und wer soll ihn bearbeiten (siehe Abbildung 4.13, „Ein Vorgang in Jira“).

Abbildung 4.13. Ein Vorgang in Jira

Ein Vorgang in Jira


Der Jira Userstory Retriever kann die User Story Informationen, die für checkerberry business view benötigt werden, direkt aus den Jira Vorgängen auslesen.

Um den Jira Userstory Retriever nutzen zu können, muss Jira installiert sein und der Jira-REST-Service muss aktiv sein. Desweiteren benötigt man einen Benutzer in Jira, welcher Zugriff zu den benötigten Vorgängen besitzt. Es wird empfohlen, dass dieser Benutzer nur lesenden Zugriff auf Jira hat. Da der Jira-UserStory-Retriever seine Konfiguration während des build-Vorgangs von Maven bekommt, ist die Verwendung von Maven zwingend erforderlich.

Die nächsten Abschnitte beschreiben wie der Jira-UserStory-Retriever konfiguriert und eingesetzt wird.

4.4.1.1. Konfiguration des Maven-Projekts

Der Jira-UserStory-Retriever bezieht seine Konfigurationsdaten während des build-Vorgangs aus der pom.xml von Maven. Um ihn in das Projekt einzubinden, muss er über ein neues Plugin in der pom.xml konfiguriert werden (siehe Beispiel Maven-Konfiguration). Dort ist zu sehen wie das neue Plugin eingefügt wird. Es handelt sich dabei um ein checkerberry-atdd-maven-plugin welches in der Phase analyze-tests ausgeführt wird. Als Abhängigkeit wird der checkerberry-atdd-jira-userstory-retriever angegeben. In dem Konfigurationsblock wird der JiraUserStoryRetriever als Parserklasse definiert. Konfiguriert wird dieser dann in dem properties-Block. Abschnitt 4.4.1.2, „Konfiguration des Jira-UserStory-Retriever“ geht näher auf die Konfiguration des Jira-UserStory-Retrievers ein. Für nähere Informationen zur pom.xml-Konfiguration, siehe auch Abschnitt 4.3, „Konfiguration“.

Beispiel 4.4. Beispiel

<plugin>
  <groupId>de.conceptpeople.checkerberry</groupId>
  <artifactId>checkerberry-atdd-maven-plugin</artifactId>
  <version>3.2.x</version>
  <executions>
    <execution>
      <id>analyze-tests</id>
      <goals>
        <goal>analyze-tests</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>de.conceptpeople.checkerberry</groupId>
      <artifactId>checkerberry-atdd-jira-userstory-retriever </artifactId>
      <version>3.2.x</version>
    </dependency>
  </dependencies>
  <configuration>
    <parsers>
      <parser>
        <parserClass>
          de.conceptpeople.checkerberry.atdd.jira.JiraUserStoryRetriever
        </parserClass>
        <properties>
          […]
        </properties>
      </parser>
    </parsers>
  </configuration>
</plugin>


4.4.1.2. Konfiguration des Jira-UserStory-Retriever

Die Konfiguration des Jira-UserStory-Retriever teilt sich in zwingend erforderliche Elemente und optionale Elemente. Die zwingend erforderlichen Elemente werden für eine erfolgreiche Verbindung zu Jira benötigt, die optionalen Elemente erlauben die Anpassung des Verhaltens. Fehlen die optionalen Werte, wird der Jira-UserStory-Retriever auf ein Standardverhalten zurückgreifen. Im Detail lassen sich folgende Elemente konfigurieren:

NameErforderlichkeitBeschreibung
urlZwingendDie Url des laufenden Jira-Servers, z.B. http://localhost:8080.
NameZwingendEin Jira-Benutzername, der zumindest lesende Rechte besitzt, z.B. user1
PasswordZwingendDas Passwort des Jira-Benutzers, z.B. password1
projectNamesOptionalEine Liste von Jira-Projektnamen, die beim Auslesen der Vorgänge berücksichtigt werden sollen. Mehrere Projektnamen werden mit einem Komma voneinander getrennt z.B. project1,project2,project3. Fehlt dieses Feld, werden alle Projekte berücksichtigt.
backlogSprintOptionalDieses Feld wird nur bei Jira-Agile benutzt. Wird die Sprint-Information aus Jira-Agile ausgelesen und der Vorgang besitzt keinen zugeordneten Sprint, so wird der Vorgang dem virtuellen Sprint Backlog zugeordnet. Der Name dieses virtuellen Sprints kann hier angepasst werden, z.B. NichtZugewiesen.
unknownSprintOptionalLiegt kein Jira-Agile vor und es wurden keine Sprint-Informationen im Beschreibungstext hinterlegt, so wird der Vorgang dem virtuellen Sprint Unbekannt zugeordnet. Der Name dieses virtuellen Sprints kann hier angepasst werden, z.B. NichtZugewiesen.
issueTypeOptionalLegt fest welche Vorgangstypen als User Stories interpretiert werden. Standardmäßig werden alle Vorgänge die den Jira-Vorgangstyp Story besitzen berücksichtigt. Das Verhalten kann an dieser Stelle angepasst werden, indem man z.B. den Typ Feature konfiguriert.

Die entsprechenden Konfigurationseinträge werden in der pom.xml des Projektes als properties-Unterpunkte des plugins vorgenommen (siehe Abschnitt 4.4.1.1, „Konfiguration des Maven-Projekts“.).

Die Konfiguration Jira-UserStory-Retriever zeigt eine Beispielkonfiguration in dem alle Elemente gesetzt werden. Neben den Zugangsdaten wird das Verhalten so angepasst, dass nur die beiden Projekte ScrumDemo1 und ScrumDemo2 ausgelesen werden. Vorgänge, die in Jira Agile Sprint-Informationen besitzen, aber zu keinem Sprint zugeordnet wurden, werden automatisch dem Sprint Noch zu erledigen zugeteilt. Vorgänge welche keine Sprint-Informationen besitzen, werden dem Sprint Unzugeordnet zugeteilt. Als User Stories werden nur Vorgänge betrachtet, welche den Vorgangstyp Feature besitzen.

Beispiel 4.5. Konfiguration Jira-UserStory-Retriever

<plugin>
  […]
  <configuration>
    <parsers>
      <parser>
        <parserClass>
          de.conceptpeople.checkerberry.atdd.jira.JiraUserStoryRetriever
        </parserClass>
        <properties>
          <url>http://localhost:8081/</url>
          <name>testUser</name>
          <password>testPassword</password>
          <projects>ScrumDemo1,ScrumDemo2</projects>
          <backlogSprint>Noch zu erledigen</backlogSprint>
          <unknownSprint>Unzugeordnet</unknownSprint>
          <issueType>Feature</issueType>
        </properties>
      </parser>
    </parsers>
  </configuration>
</plugin>


4.4.1.3. Jira User Story Format

Der Jira UserStory Retriever benötigt für eine User Story eine Id, einen Namen, eine Priorität und Informationen über die Akzeptanztests. Beim Einlesen eines Jira-Vorgangs übernimmt der Jira UserStory Retriever die Id, den Namen und die Priorität vom Vorgang. Weiterhin wird die Information benötigt in welchem Sprint sich der Vorgang befindet. Liegt Jira Agile vor, kann diese Information aus dem Sprint-Feld des Vorgangs ausgelesen werden. Andernfalls muss diese Information im Beschreibungstext angegeben werden. Fehlt die Sprint-Information gänzlich, so wird der Vorgang einem virtuellen Sprint (Unbekannt) zugeordnet.

Der Jira UserStory Retriever liest standardmäßig alle Vorgänge eines Projekts ein, die den Jira-Typ Story besitzen (zur Anpassung dieses Verhaltens siehe Abschnitt 4.4.1.2, „Konfiguration des Jira-UserStory-Retriever“). Aus diesen wird dann der Beschreibungstext interpretiert. Finden sich in dem Beschreibungstext Informationen zu der Id, dem Namen, dem Sprint oder der Priorität, so haben diese Vorrang vor den Informationen die direkt aus dem Jira-Vorgang erhalten werden. Dies erlaubt es, die im Vorgang befindlichen Informationen zu überschreiben. Im Beschreibungstext können alle Informationen des Jira Vorgangs für checkerberry business view angepasst werden. Insbesondere sind dies:

  • Die User Story Id (@UserStory(“…“))

  • Der User Story Name (@UserStoryName(“…“))

  • Die Priorität (@Priority(“…”))

  • Der Sprint (@Sprint(“…”))

Auch werden hier dann die für die User Story nötigen Akzeptanzkriterien definiert. Das Format der Akzeptanzkriterien folgt dabei dem des Standardparsers. Für nähere Informationen dazu siehe Abschnitt 4.4.1.1, „Konfiguration des Maven-Projekts“.

Ein Beispielhafter Vorgang ist in Abbildung 4.14, „Wichtige Felder eines Jira Vorgangs“ zu sehen. Dort sieht man den Jira Vorgang mit der Id SD-2 und dem Namen Zweite Demo-Story. Der Vorgangstyp ist Story und die Priorität Kritisch. Für die User Story von checkerberry business view wird im Beschreibungstext der Name der User Story allerdings durch einen neuen Namen überschrieben (Ich möchte mich an dem System anmelden können). Außerdem wird dort der User Story ein Sprint zugeordnet (Der erste). Danach folgen die Akzeptanzkriterien. Dem Akzeptanzkriterium 2 (Hinzufügen eines Benutzers) ist dabei ein Akzeptanztest (AT2) zugeordnet.

Abbildung 4.14. Wichtige Felder eines Jira Vorgangs

Wichtige Felder eines Jira Vorgangs


Abbildung 4.15, „checkerberry ATDD Hudson Plugin“ zeigt unter anderem das Aussehen des in Abbildung 4.14, „Wichtige Felder eines Jira Vorgangs“ zu sehenden Vorgangs im checkerberry business view Plugin für Hudson. Aus dem Vorgang wurde die Story Id übernommen. Der zugeordnete Sprint und der Story Name wurden ebenso wie das Akzeptanzkriterium aus dem Beschreibungstext ausgelesen. In dem Beispiel gibt es in Jira insgesamt fünf Vorgänge, von denen drei in Jira als Story markiert sind und somit vom System erkannt wurden. Zwei davon wurden implementiert (Stories SD-1 und SD-2), der dritte (SD-4) muss noch implementiert werden.

Abbildung 4.15. checkerberry ATDD Hudson Plugin

checkerberry ATDD Hudson Plugin