Wie die Digitalisierung den Fachbereichstest ändert – OOP 2017

Umfrage auf der OOP 2017

Ein wesentlicher Erfolgsbaustein eines jeden Dienstleistungsunternehmens ist es, die Zielgruppe Ihrer Services zu kennen. Nicht nur um seine Leistungen bestmöglich zu platzieren, sondern auch um den Kunden eine möglichst optimal auf sie zugeschnittene Lösung zu bieten. Schon seit Langem setzen wir als Saxonia Systems AG (seit 03/2020 ZEISS Digital Innovation) daher nicht nur auf eine möglichst enge und partnerschaftliche Zusammenarbeit mit unseren Kunden, sondern führen auf verschiedenen Konferenzen Umfragen durch. Ziel ist es dabei die Herausforderungen – mit denen Fachbereich und IT täglich zu kämpfen haben – besser kennen zu lernen.

Auf der OOP in München vom 30.01. – 03.02.2017 nutzten wir so wieder die Gelegenheit, um im Testing & Quality Forum eine kleine aber doch recht heterogene Menge an Personen zu befragen. Die Teilnehmer unserer Umfrage waren in unterschiedlichsten Rollen an der Softwareentwicklung in Unternehmen beteiligt – wir befragten Project Owner, Architekten, Testmanager, Entwickler, Projektleiter, Anwendungsmanager, Gruppenleiter, […] und konnten dadurch einige Erkenntnisse gewinnen.

Als Einstieg in unsere Befragung wollten wir von den Teilnehmern wissen, wie viele IT-Teil-Systeme in der Firma in der sie arbeiten zum Einsatz kommen. Wie sich herausstellte, sind die meisten Systemlandschaften durchaus sehr komplex. Mehr als 50% der Befragten gaben dabei 30 oder mehr Teil-Systeme an. Der nächst größere Anteil (22,6%) gab an, immerhin mehr als 15 Teil-Systeme im Einsatz zu haben.

Wie viele IT-Teil-Systeme werden in Ihrer Firma genutzt? - Diagramm
Abbildung 1: Wie viele IT-Teil-Systeme werden in Ihrer Firma genutzt?

Die nächste Frage behandelte den Integrationsgrad der Systeme, das heißt zwischen wie vielen der vorhandenen Systeme ein Datenaustausch stattfindet, bzw. wie viele der vorhandenen Systeme sich gegenseitig Daten liefern. Hier hielten sich die Meinungen ungefähr die Waage. Das heißt der Integrationsgrad der Systeme wurde nahezu durchgehend mit mittel (die Hälfte der vorhandenen Systeme tauscht Daten aus bzw. liefert Daten) bis hoch ([fast] alle Systeme kommunizieren miteinander, bzw. liefern Daten) bewertet.

Wie schätzen Sie den Integrationsgrad der Systeme ein? - Diagramm
Abbildung 2: Wie schätzen Sie den Integrationsgrad der Systeme ein?

Als erschwerender Faktor bei Softwareentwicklungsprojekten kommt meist hinzu, dass unterschiedliche Akteure an der Entwicklung der Systemlandschaft beteiligt sind. Wir stellten dazu die Frage: „Wer entwickelt bei Ihnen?“, wobei eine Mehrfachauswahl der Antworten (eigene Entwicklungsabteilung, externer Dienstleister vor Ort, externer Dienstleister anderswo) möglich war. Lediglich ein Viertel der Befragten gaben an, das nur die firmeneigene Entwicklungsabteilung für den Ausbau der Systeme verantwortlich ist. Die restlichen 74% werden durch externe Dienstleister entweder vor Ort oder anderswo (32% sogar beides) unterstützt. Die entsprechende Entwicklung erfolgt dabei zum Großteil agil (80%), dicht gefolgt von klassischen Vorgehensmodellen (48%). Aber auch eine „chaosgetriebene“ Entwicklung kommt in 16% der Fälle durchaus noch vor.

Wie wird bei Ihnen bzw. für Sie entwickelt? - Diagramm
Abbildung 3: Wie wird bei Ihnen bzw. für Sie entwickelt?

Gerade die letzte Form der Entwicklung neigt dabei natürlich zu einer gewissen Fehleranfälligkeit, weswegen unsere letzte Frage sich vor allem auf die Qualität der Software, bzw. das Testen, bezog. Wir wollten also von den Interviewten wissen, ob bei Ihnen überhaupt Tests durchgeführt werden, und wenn ja, wer diese durchführt. Auch hier war eine Mehrfachauswahl der Antworten möglich.

Welch großen Stellenwert Tests bei der Softwareentwicklung einnehmen, zeigte sich an dieser Stelle noch einmal deutlich. Bei allen Befragten wurden Tests (welche Art des Testens war dabei nicht Bestandteil der Umfrage) realisiert. Fast alle (96%) setzten dabei auf Entwicklertests, weitere 71% auf Tests durch den Fachbereich. 67,7 % der Teilnehmer gaben sogar an die Tests durch ein dediziertes Testteam bzw. eine Testorganisation durchführen zu lassen. Immerhin noch 38% führten außerdem die Anwender als testende Instanz auf. Wobei man hier sicher mit einem Schmunzeln sagen kann, dass der Anwender im Endeffekt ja ohnehin immer den letzten Praxistest der Software durchführt.

Wer führt bei Ihnen Tests durch? - Diagramm
Abbildung 4: Wer führt bei Ihnen Tests durch?

Zusammenfassend kann man also sagen, dass sich bei unserem „Markttest“ folgendes Mehrheitsbild darstellte: Der Großteil der Befragten hat es mit komplexen Systemlandschaften zu tun, die durch eine hohe Komplexität durch sehr viele IT-Teil-Systeme und einen mittleren bis hohen Integrationsgrad charakterisiert sind. Des Weiteren sind in den meisten Fällen externe Dienstleister einbezogen, die sich an klassischen oder agilen Vorgehen orientieren. Die agilen Vorgehensmodelle sind dabei die Basis für ein Großteil der Entwicklungsprojekte. Außerdem spielen Tests eine sehr große Rolle. Die Durchführenden sind dabei sehr unterschiedlich, grundsätzlich ist man sich aber darüber einig, das Softwaretests bei der Entwicklung nicht weg zu denken ist.

Wir sind uns dabei durchaus bewusst, dass dies keine repräsentative Studie darstellt und die Besucher des Testing & Quality Forums mit Sicherheit von Haus aus ein gewisses Interesse an Softwarequalität mitbringen. Trotzdem sind die Ergebnisse für uns doch recht aussagekräftig und interessant.

Aus dem Leben eines Testers

Während des Projektalltags stellt man sich manchmal die Frage, was mache ich eigentlich hier bzw. wissen die anderen im Team was ich tatsächlich tue? Als Tester habe ich mir diese Frage auch schon gestellt und einige Gedanken zusammengefasst. Daher findet man im Weiteren ein paar Ausschnitte aus meinem Alltag als Tester.

Daily

Wieder ist Daily und ich frage mich als Tester wie ich denn heute die Spezifikation von Testfällen attraktiv als getane, jetzige sowie zukünftige Arbeit verkaufen kann. Im Grunde vollzieht sich das ganze meist mit den Worten “Habe Testfälle für User Story xyz spezifiziert und mache damit weiter.”  Etwas eintönig und meist etwas belächelt, aber nun mal die Hauptaufgabe in den ersten Tagen eines Sprints. Schließlich setze ich als Tester doch den Grundstein aktuelle User Stories ordentlich zu testen.

Spannender wird es dann schon, wenn ich mitteile, dass ich nun auch Testfälle durchführe und voller Stolz den ein oder anderen Fehler verifiziert habe. Wobei von Stolz nicht die Rede sein kann. Kommt halt auf die Entwickler, die aktuelle Stimmung im Team, die Priorität des Fehlers oder der Selbstbewusstseinswahrnehmung des Testers (mir) an. Also kann es auch vorkommen, dass vor mich gemurmelt das Wort “Bug” fällt und schnell das Wort an andere übergeben wird. Warum eigentlich diese Zurückhaltung?

Ich als Tester habe die Verantwortung darauf aufmerksam zu machen, wenn etwas in der Software nicht so funktioniert wie definiert. Und das ist auch gut so. Denn wie will man qualitative Software liefern, wenn Fehler nicht akzeptiert sind und zu Stresssituationen oder Konflikten führen. Also nur Mut – der Fehler verschwindet nicht, wenn man ihn nicht anspricht (ganz im Gegenteil, er wächst, umso später er gefixt wird) und schnell ist er auch einmal im Wust der täglichen Entwicklungsarbeit in Vergessenheit geraten, wenn er nur in schriftlicher Form am Taskboard zwischen den großen User Storys hängt.

Regressionstests/Testautomatisierung

Apropos Taskboard – dies ist ein gutes Hilfsmittel die User Storys mit darin enthaltenen Aufgaben und deren Fortschritt im aktuellen Sprint im Auge zu behalten. Wenn man sich die Zeit nimmt, um innezuhalten und die Arbeit im Team mit Hilfe des Taskboards über Wochen oder auch Monate hinweg zu betrachten, könnte man zu folgender Behauptung gelangen: Die Entwickler arbeiten mit glänzenden, neuen Sachen und die Tester wühlen im Dreck der Vergangenheit mit Sicht auf den Glanz des Neuen. Dies bedeutet nicht, dass mir als Tester nicht bewusst wäre, dass Entwickler auch an bestehendem Code Anpassungen vornehmen müssen, und auch mal Bugs fixen. Aber ich als Tester habe eine ganz andere Sicht. Trotz all der automatisierten Tests, die unsere Entwickler schreiben, muss ich den Überblick darüber behalten was alles von Änderungen betroffen ist – ein kontinuierliches Zurückblicken auf Altlasten, während der Programmierer voranstürmt.

Damit sind wir dann auch bei der größten Herausforderung meines Alltags – Regressionstest. Den kann man zwar auch automatisieren, leider sind die Tools dafür aber nicht immer sehr freundlich zu mir. Werden sie nicht von Beginn an eingesetzt, bin ich kontinuierlich damit beschäftigt hinter den Änderungen der Entwickler her zu rennen. Aber selbst wenn ich sie gleich von Anfang an einsetze muss ich sie, um meine eigenen Aufgaben zu erfüllen, auf UI Ebene einsetzen und das ist langwierig und dummerweise eben selbst auch fehleranfällig. Dazu folgende Gedanken:

Testautomatisierungs-Tools suggerieren mir, dass ich durch einfaches Aufzeichnen von Testschritten Testautomatisierung machen kann. Leider wird mir nach anfänglichem Enthusiasmus klar, dass es damit nicht getan ist, da meine Testaufzeichnungen meist keinen Tag überlebt haben. Also auf zu neuen Ufern – diesmal programmieren und Aufzeichnungs-Tools verbannen. Da tauchen auch schon die nächsten Hindernisse auf. Denn ich bin kein guter Programmierer und muss mich nun mit kryptischen Sachen beschäftigen. Doch schon wird die nächste Idee geboren: Die Erfahrung der Entwickler zu Nutze machen. Auch da werden Grenzen gesetzt, denn das geht meist nur so lange gut, wie der Entwickler Zeit dafür hat bzw. gewillt ist, dies zu machen. Verständlich, denn der Entwickler will ja neue Sachen schaffen.

Ich stecke also in einem Zwiespalt: Schreibe ich automatisierte Tests oder mache ich alles manuell. Regressionstest sollte ich auf alle Fälle einplanen. Wie diese nun aussehen – automatisiert, manuell oder explorativ – kommt auf die verschiedensten Rahmenbedingungen an. Für mich ist Testfallautomatisierung jedenfalls kein Allheilmittel. Ich sehe den Mehrwert automatisierter Testfälle, die zu jedem Sprint ausgeführt werden können – größerer Testabdeckung, weniger manuelles Testen von vorgegebenen Workflows. Aber eine reine Testfallautomatisierung ist kein Allheilmittel, denn dies wird meine Testererfahrung und das damit verbundene Verfahren “Über-den-Tellerrand-Hinausblicken” nicht ersetzen.

Fazit

Auf alle Fälle sollte das Testen an sich – egal ob manuelles Testen, Regressionstests oder Testautomatisierung – im Team anerkannt sein und zusammen an der Qualitätssicherung gearbeitet werden. Denn schnell fühlt sich der Tester nicht mehr als Teil des Teams sondern Fremdkörper, wenn seine Arbeit nicht ernst genommen wird.

Der Agile Testmanager – ein Oxymoron? (Teil 3)

Im ersten Teil und zweiten Teil wurden die Aufgaben des Testmanagers erfolgreich einer agilen Transition unterzogen und für kleine Scrum-Teams nachgewiesen, dass kein Testmanager mehr benötigt wird. Eine andere Herausforderung ergibt sich bei mehreren Scrum-Teams, die gemeinsam an einem Produkt arbeiten. Lassen sich die beschriebenen Überlegungen, welche sich alle auf ein kleines Scrum-Projekt mit einem Team beziehen, auch auf die großen Projekte übertragen?

Benötigen wir für große Scrumprojekte wieder einen Testmanager?

In vielen Unternehmen, die Scrum einsetzten, arbeiten mehrere Teams gemeinsam an der Entwicklung eines Produkts. Es gibt bereits Überlegungen zu skalierten Scrum auf Unternehmensebene und wie die agilen Prinzipien trotz wachsender Komplexität eingehalten werden können. Boris Gloger sieht dabei zwei Problemfelder: “Einhaltung des skalierten Scrum Frameworks” und “Skalierung des Anforderungsprozesses”. Als Lösung führt er weitere Rollen ein: den Company Scrum Master und den Company Product Owner, die übergreifend die Scrum Master bzw. Product Owner des Projektes begleiten. Beide Rollen stimmen sich mit ihren Gegenstücken in den einzelnen Scrum-Teams ab und verwalten die Scrum-Werkzeuge auf Unternehmensebene wie Company Product Backlog und Company Scrumboard.

Lässt sich dieses Konzept auch auf den Test übertragen: Benötigen wir quasi einen Company Test Owner oder Company QA Master? Aufgabe dieses neuen Werkzeuges wäre die Abstimmung und Verantwortung für den übergreifenden und integrativen Testprozess, das Aufsetzen der notwendigen gemeinsamen Test-Strukturen sowie die Befüllung des Backlogs mit Stories, Tasks und Incidents rum um das Thema QA.

Abbildung 1: Abstimmungsmeeting zu QA-Fragen

Für Projekte mit einer übersichtlichen Anzahl (2 bis 8) von Scrum-Teams lassen sich diese Koordinationsaufgaben innerhalb des übergreifenden Abstimmungsmeeting, dem Scrum of Scrums, bewerkstelligen. Sollten die Abstimmungen testspezifischer und langwieriger werden, dann sollte bei Bedarf ein eigenes Test Meeting aufgesetzt werden. Dazu wird von jedem Team ein Teammitglied mit dem notwendigen Testwissen entsandt. Ist die Anzahl der Teams größer oder müssen Abstimmungen zwischen mehreren Projekten zu QA-Themen durchgeführt werden, dann können auch hier die Gilden zum Einsatz kommen. Die Gilden sammeln Best Practice Beispiele, die Sie allen Projekten zur Verfügung stellen oder benennen Coaches, die neuen Projekten agiles Testvorgehen näherbringen. Die Gildenmeister koordinieren wichtige Entscheidungen und moderieren die Scrum Teams, sofern die Definition von gemeinsamen Regeln und Lösungen notwendig ist.

Es lässt sich festhalten, dass ein Testmanager in agilen Unternehmen auch für große Projekte nicht mehr benötigt wird. Erreicht wird dies aber nur durch die vollständige Agile Transition der Aufgaben eines Testmanagers. Denn es ist notwendig jeder Aufgabe des Testmanagers speziell auch in der Kommunikation und Abstimmung ein agiles Werkzeug gegenüberzustellen.

Der Agile Testmanager – ein Oxymoron? (Teil 2)

Im ersten Teil wurden die operativen Aufgaben des Testmamagers erfolgreich einer agilen Transition unterzogen und für kleine Scrum Teams nachgewiesen, dass kein Testmanager mehr benötigt wird. Doch funktioniert das auch mit den strategischen Aufgaben eines Testmanagers bzw. Wer übernimmt die strategischen Aufgaben des Testmanagers?

Wer übernimmt die strategischen Aufgaben des Testmanagers in agilen Unternehmen?

Das strategische Aufgabenfeld eines Testmanagers ist das Qualitätsmanagement (QM), welches laut DIN ISO 8402 „alle Tätigkeiten der Gesamtführungsaufgabe, welche die Qualitätspolitik, Ziele und Verantwortungen festlegen sowie diese durch Mittel wie Qualitätsplanung, Qualitätslenkung, Qualitätssicherung und Qualitätsverbesserung im Rahmen des Qualitätsmanagements verwirklichen“ umfasst.

Aufgaben des Testmanagers (nach ISTQB)
Abbildung 1: Aufgaben des Testmanagers (nach ISTQB)

Ob eine Firma nach klassischen oder agilen Methoden entwickelt, das Qualitätsmanagement bleibt in der Verantwortung der Geschäftsführung des Unternehmens. Dieser Aufgabenbereich kann, sollte und darf nicht vom Scrum Team übernommen werden. Auf den ersten Blick ändert sich grundsätzlich nichts in Organisation und Aufgabenteilung. Auf dem zweiten Blick ergibt sich eine Problemstelle für agile Firmen. In der klassischen Welt diente der Testmanager als Schnittstelle zwischen operativer und strategischer Ebene. Er verteilte die Informationen zwischen dem Management und der operativen Ebene, übermittelte strategische Vorgaben und Methoden in die Testteams oder spielte Entwicklungen und Verbesserungen in Richtung Management.

Aber wie kommen Informationen im agilen Umfeld von der strategischen Ebene in die operative und zurück? Die Antwort ist: Die agile Transition ist nicht mit der Zuordnung der operativen Tasks des Testmanagers an das Scrum Team abgeschlossen. Die Lösung für die agile Transition der „Schnittstelle“ zwischen den Ebenen ist gleich der agilen Transition der operativen Aufgaben des Testmanagers. Für die vorhandenen Aufgaben der Unternehmenskommunikation stehen neue Konzepte und Werkzeuge bereit.

Eines der neuen Konzepte ist die sogenannten Gilde. Gilden (oder in unserem Unternehmen Kompetenzteams genannt) sind ein Werkzeug, welches das Wissens- und Informationsmanagement in geordnete Bahnen lenkt. Sie sind als Matrixorganisation aufgebaut und stehen neben der normalen Unternehmensstruktur. Die Gilden haben die Aufgabe die Knowhow-Träger des Unternehmens zu bündeln und bieten den Mitarbeitern einen Platz zum Austausch von Wissen oder der Umsetzung von Weiterbildungsmaßnahmen oder stimmen übergreifende Projektentscheidungen wie Testumgebungsaufbau oder Codequalitätsregeln ab. Je nach Zielsetzung des Unternehmens können der Aufbau und die Gliederung der Gilden unterschiedlich sein: So können die Gilden sich nach Kompetenzfeldern aufteilen wie Java-Entwicklung, .NET-Entwicklung, Test oder Prozessanalyse. Es können aber auch komplette Scrum Teams in Gilden zusammengefasst werden, die sich im Projekt gemeinsam einem bestimmten Thema widmen wie QA, Datenbankanbindung, GUI oder Schnittstellen (siehe Abbildung 1).

Beispiel für die Einordnung und Aufbau der Gilden nach Kompetenzfeldern
Abbildung 2: Beispiel für die Einordnung und Aufbau der Gilden nach Kompetenzfeldern

Die Gilden arbeiten nach folgenden Muster: Für jeden Mitarbeiter wird seine primäre Rolle (zum Beispiel Entwickler, Tester (QAlas), Product Owner und Scrum Master), die er im täglichen Arbeitsleben wahrnimmt, ermittelt. Mit dieser Rolle wird er einer passenden Gilde zugeordnet. Hier tauschen sich die Mitglieder nach Aufgabenfeldern aus, führen interne Schulungen durch, sammeln das vorhandene Wissen in Portalen oder tauschen sich über Best Practice in einzelnen Projekten aus. Die Moderation und Koordination innerhalb der Gilde übernimmt ein Gildenmeister. Er besitzt nach dem Motto „primus inter pares“ keine höheren Rechte als seine Gildenkollegen und wird aus dem Kreis der Gildenmitglieder gewählt. Der Gildenmeister ist zentraler Ansprechpartner für seine Gildenmitglieder, die anderen Gildenmeister und das Management. Dies ist notwendig, da die Gilden sich aktiv interdisziplinär austauschen, aber auch Feedback aus der operativen Ebene wie neue Entwicklungen oder Technologien an den Vertrieb weitergeben oder Hinweise für Schulungen an das Personal geben sollen.

Im letzten Teil gehen wir der Frage nach, was passiert, wenn mehrere Scrum Teams an einem Projekt gemeinsam arbeiten und der Abstimmungsaufwand auch für den Bereich QA zunimmt.

Test Driven Development am Beispiel

Bezieht man sich bei der testgetriebenen Entwicklung nur auf die blanke Theorie, so bleiben die eigentlichen Vorteile häufig zu abstrakt. An dieser Stelle helfen Code Katas. Dies sind einfache Aufgaben, die es uns ermöglichen Dinge zu üben, die für die alltäglichen Probleme oft viel zu komplex sind.

Im nachfolgenden Video wird deshalb die sehr einfache Code Kata “FizzBuzz” gelöst. Die damit verbundene Aufgabe ist, Zahlen in Zeichenketten zu wandeln. Ist die eingegebene Zahl dabei durch 3 teilbar, so soll statt der Zahl ein “Fizz” zurück gegeben werden. Ist sie hingegen durch 5 teilbar, so erfolgt die Rückgabe des Wortes “Buzz”. Wenn die Zahl hingegen durch 3 und 5 teilbar ist, so ist das Konvertierungsergebnis “FizzBuzz”. Auf diese Weise soll gezeigt werden wie produktiv man mit den entsprechenden Werkzeugen arbeiten kann und wie sehr die so entstandene Testabdeckung bei der Refaktoriserung des Quellcodes hilft.

Der Agile Testmanager – ein Oxymoron? (Teil 1)

Ein Kollege stellte mir vor einiger Zeit die Frage, ob wir im agilen Entwicklungsprozess wie Scrum noch einen Testmanager benötigen. Meine erste Antwort war nein, da das Agile Manifest und das Scrum Framework nur drei Rollen kennt: Product Owner, Entwicklungsteam und Scrum Master. Im Scrum Team – der Gesamtheit der drei genannten Scrum-Rollen – ist also kein Testmanager vorgesehen. Aber auf den zweiten Blick ergab sich die Frage, wer aus dem Scrum Team übernimmt die Aufgaben des Testmanagers in und um den Sprint herum?

Studien wie der ASQF Branchenreport 2014[1] und Standish Chaos Report 2011 zeigen, dass agile Methoden bereits in den Unternehmen ein fester Bestandteil sind. Außerdem zeigt der Standish Chaos Report auf, dass Projekte in denen agile Verfahren zum Einsatz kommen, höhere Erfolgschancen haben als „klassische Projekte“.  Grundlage dieser Entwicklung war das Agile Manifest von Ken Schwaber und Jeff Sutherland. In ihm wurden Grundregeln und Vorgaben definiert, die „bessere Wege auf[zeigen], Software zu entwickeln, indem [die Prozessbeteiligten] es selbst tun und anderen dabei helfen, es zu tun“[²].

Scrum Prozess und Beteiligte
Abbildung 1: Scrum Prozess und Beteiligte

Die wichtigsten Grundsätze aus dem Agilen Manifest sind:

  • Menschen und Interaktionen sind wichtiger als Prozesse und Werkzeuge.
  • Funktionierende Software ist wichtiger als umfassende Dokumentation.
  • Zusammenarbeit mit dem Kunden ist wichtiger als die ursprünglich formulierten Leistungsbeschreibungen.
  • Eingehen auf Veränderungen ist wichtiger als Festhalten an einem Plan.

Unternehmen, die ihre Entwicklung auf die agile Arbeitsweise umstellen, haben einen Wettbewerbsvorteil gegenüber Firmen, die nach klassischen Vorgehen arbeiten. Aber die Umstellung der Prozesse auf Entwicklungsmethoden, wie Scrum – auch agile Transition genannt – stellt eine große Herausforderung dar. Agilität erreicht man nicht mit der Aufteilung der Entwicklungsmeilensteine in Sprints und der Benennung eines Product Owners (siehe Abbildung 1). Es müssen umfangreiche Änderungen der Organisation, hin zu einer agilen Arbeits- und Lebensweise, stattfinden.

Am Beispiel des Testmanagers lässt sich die Herausforderung der agilen Transition sehr schön nachvollziehen. Die Frage lautet: Wenn wir in Scrum keinen Testmanager benötigen, wer übernimmt seine Aufgaben? Der Product Owner? Der Scrum Master? Das Team?

Nach der Scrum Alliance ist der Product Owner die Person, die für die punktgenaue und pünktliche Erstellung des Produktes verantwortlich ist. Der Product Owner füllt und verfeinert das Product Backlog und stellt sicher, dass jeder weiß was darin enthalten und mit welcher Priorität es versehen ist. Damit ist er in der Regel am nächsten an der “Business-Seite” des Projekts. Scrum erfordert, dass das Entwicklungsteam eine nach Funktionen gemischte Gruppe ist – die alle notwendigen Fähigkeiten vereint – die für die Entwicklung des Produktes notwendig sind. Das Team organisiert sich selbst: das heißt es wählt selbständig den umzusetzenden Inhalt des Sprints und kümmert sich um die Planung, Steuerung und Umsetzung. Der Scrum Master ist der “Lotse” durch die Untiefen des Scrum Frameworks. Er hilft dem Rest des Scrum Teams bei der Einhaltung der Scrum-Regeln. Eine weitere Aufgabe des Scrum Masters ist es, Hindernisse für den Fortschritt des Teams aus den Weg zu räumen.

Auch nach Studium der Rollen von Scrum ist nicht ersichtlich: Wer die Aufgaben des Testmanagers übernimmt? bzw. Wie sie verteilt werden? Um die Fragen zu beantworten, ist es notwendig erst einmal festzustellen, welche Aufgaben ein Testmanager im klassischen Test- und Qualitätssicherungsprozess wahrnimmt. Laut dem International Software Testing Qualifications Board (ISTQB), der Zertifizierungsstelle für Tester, gehen die Aufgaben und Einsatzgebiete des Testmanagers über die Steuerung des Testprojektes hinaus. Er leitet die Testabteilung oder das Testteam und damit die Ressourcen für die Tests. Er erstellt Berichte, eskaliert in Richtung Entwicklung, Fachabteilung und Projektleitung, schätzt Testprojekte, setzt die Einhaltung der Qualitätsprozesse und -verfahren des Unternehmens durch, beschafft die Testing-Tools für die Organisation und überprüft die Testpläne, sowie die Testfälle.

Die Aufgabenebenen lassen sich in zwei Felder aufteilen: strategisch und operativ (siehe Abbildung 2). Die operative Ebene beschäftigt sich mit der Planung und Konzeption der Testfälle und Tests, der Steuerung der Testdurchführung, sowie der Kommunikation innerhalb des Projektes. Die strategische Ebene beinhaltet die Aufgaben des Qualitätsmanagements.

Aufgaben des Testmanagers (nach ISTQB)
Abbildung 2: Aufgaben des Testmanagers (nach ISTQB)

Die operativen Aufgaben können nicht vom Scrum Master oder Product Owner übernommen werden. Der Product Owner mischt sich nicht in die Umsetzung ein und der Scrum Master nicht in die Entwicklung. Die Testaufgaben werden in der agilen Entwicklung durch das Team übernommen. Und nach der Definition und Aufteilung der Aufgaben des Testmanagers ist es nun möglich zu untersuchen wie diese in den agilen Prozess eingebracht werden können. Es ergibt sich aber ein Problem: Eine klare Zuordnung zu einer Person ist nicht möglich, da in Scrum alle Aufgaben auf das agile Team verteilt werden.

Die Lösung des Problems liegt im Framework Scrum selbst. Es stellt ein umfangreiches Paket an Werkzeugen und Artefakten bereit. Und diese lassen sich den Aufgaben des Testmanagers gegenüberstellen. Wir haben in unseren Scrum Teams eine vollständige agile Transition der Aufgaben durchgeführt und festgestellt, dass Scrum jeder Aufgabe des Testmanagers ein Werkzeug oder Artefakt gegenüberstellen lässt.

Agile Transition des Testmanagers – Testkoordination
Abbildung 3: Agile Transition des Testmanagers – Testkoordination

So erfolgen die Überlegungen zur Teststrategie und die im Vordergrund stehenden Qualitätsmerkmale im Planning des Sprints und Backlog Grooming. Die Pass-Fail-Kriterien, also die Kriterien ob ein Sprint erfolgreich bzw. der Test abgeschlossen ist, werden in der Definition of Done definiert (siehe Abbildung 3).

Agile Transition des Testmanagers – Testumsetzung
Abbildung 4: Agile Transition des Testmanagers – Testumsetzung

Im Sprint Review wird die Umsetzung der Anforderungen verifiziert und validiert (siehe Abbildung 4).

Agile Transition des Testmanagers – Testkoordination
Abbildung 5: Agile Transition des Testmanagers – Testkoordination

Zusätzlich ermöglichen die Stories bzw. ihre Repräsentation am Scrum Board und in den Backlogs eine Dokumentation des Fortschritts sowie der Qualitätsgradbemessung (siehe Abbildung 3).

Jeder Aufgabe des Testmanagers lässt sich also ein agiles Werkzeug oder Artefakt gegenüberstellen. Damit ist die vollständige agile Transition der Aufgaben eines Testmanagers erreicht. Unter der Voraussetzung, dass das Scrum Team das notwendige Testwissen für die Umsetzung der anstehenden Entwicklungs- und Testaufgaben besitzt, wird für kleine Projekte kein Testmanager benötigt. Steht das Wissen noch nicht zur Verfügung muss das Team ausreichend gecoacht werden.

Im nächsten Teil wird beleuchtet wer die Aufgaben der strategischen Ebene übernehmen kann und was in Projekten mit mehreren Scrum Teams passiert, die gemeinsam an einem Produkt arbeiten.

Test Driven Development

Die Nutzung von agilen Methoden ist kein uneingeschränkter Garant für bessere Software. Der Grund dafür ist, dass viele der klassischen Verfahrensweisen zur Qualitätssicherung im agilen Kontext vor einer Bewährungsprobe stehen. Denn wie soll in einem System mit häufigen Änderungen auf Dauer sichergestellt werden, dass die bereits als funktionstüchtig geltenden Bestandteile nicht durch zukünftige Nachbesserungen wieder in einen undefinierten Zustand verfallen?

Während das Wasserfallmodell den Test erst zu Projektende vorsieht und auch im vielfach eingesetzten V-Modell (siehe Abbildung 1) eine zeitlich klar definierte Abfolge vorliegt, ist es im agilen Umfeld unabdingbar, dass Tests aufgrund der Häufigkeit in der sie ausgeführt werden, tunlichst immer unter den exakt gleichen Bedingungen und mit möglichst geringem Aufwand durchgeführt werden können. Darüber hinaus sollten sie nach Möglichkeit zeitnahe zur Umsetzung der zu testenden Funktionalität bereit stehen. Denn nur so kann gewährleistet werden, dass sie mit dem steten Wandel schritthalten.

Das V-Modell und die testgetriebene Entwicklung
Abbildung 1: Das V-Modell und die testgetriebene Entwicklung

Test Driven Development

Das größte Problem des klassischen Testens ist in diesem Zusammenhang also, dass es in aller Regel nachgelagert geschieht. Es wird erst dann ausgeführt, wenn es auch etwas zu testen gibt. Dies scheint auf den ersten Blick trivial, denn soll etwas getestet werden ist vermeintlich auch ein entsprechender Testgegenstand von Nöten.

Zwar können die Testfälle und ihre Daten aus der Spezifikation abgeleitet werden, ohne eigentlichen Testgegenstand gibt es bei der Ausführung aber scheinbar kein auswertbares Ergebnis. Genau dieses Dogma gilt für automatisierte Tests  nicht. Während die ständige manuelle Ausführung auf Dauer unbezahlbar würde, können automatisierte Tests getrost auch kurz vor der eigentlichen Implementierung verfasst, sowie ausgeführt werden und prüfen dann vorrübergehend nur eine Hülle des späteren Testgegenstandes. Eine Hülle wie sie beispielsweise von einer Schnittstellenbeschreibung vorgegeben ist.

In diesem Fall stellt der Test eine Art automatisierter Spezifikation dar, der Anforderungen zunächst nicht erfüllt werden (roter Beriech in Abbildung 2). Der Entwickler kann während der Implementierungsphase seinen Code gegen diese prüfen und erhält damit sofort ein Feedback ob seine Arbeit den Anforderungen entspricht. Ist dieser Status erreicht (grüner Bereich), hat er einen gesicherten Zustand des Quellcodes und kann jenen umstrukturieren (gelber Bereich). Bei neuen Anforderungen oder tiefgreifenden Änderungen schlagen die Tests erneut fehl (erneut roter Bereich) und müssen zunächst wieder korrekt erfüllt werden (erneut grüner Bereich).

Aus dieser einfachen Handlungsreihenfolge ergeben sich feingranulare Strukturen. Diese führen zu einer sehr hohen Testabdeckung, mit welcher Fehler frühzeitig gefunden und deren Behebung vereinfacht wird. Darüber hinaus werden Schnittstellen und deren Implementierung robuster als bei klassischen Verfahren definiert. Dies erlaubt erst die hohe Anpassungsfähigkeit des Quellcodes, welche für agile Softwareprojekte so essentiell wichtig ist.

Der Ablauf der testgetriebenen Arbeitsweise
Abbildung 2: Der Ablauf der testgetriebenen Arbeitsweise

Als eine der wichtigsten Eigenschaften von automatisierten Tests gilt darüber hinaus deren Lesbarkeit. Denn sie können im Grunde nicht nur als Prüfung der Funktionalität, sondern auch als eine Art Dokumentation der selbigen verstanden werden. Durch ihre Nähe zur Funktionalität die sie prüfen und ihrem klar strukturierten Aufbau, schildern sie das Verhalten des zu testenden Codes auf eine Weise wie es normal geschriebener Text nicht könnte. Da ihr eigenes Ergebnis überdies vollkommen abhängig vom Testgegenstand ist, teilen sie dem Betrachter automatisch mit wenn sie nicht mehr aktuell sind.

Behavior Driven Development

Diese Lesbarkeit erstreckt sich bei Komponententests jedoch einzig auf den Personenkreis der auch die entsprechende Programmiersprache versteht und das verwendete Testframework kennt. Domänenfremde Personen wie zum Beispiel Testmanager, Projektleiter oder sogar Endanwender können der feinen Granularität und Detailgenauigkeit nur wenig abgewinnen.

Eine zweite Unzulänglichkeit wird bei der Betrachtung des gesamten Entwicklungsprozesses offenbar. Mit TDD verfasste Tests sind hervorragend geeignet um Teile der Software anhand ihrer Spezifikation zu verifizieren, nicht aber um sie gegen die Akzeptanzkriterien zu validieren. Gerade diese sind es aber die befriedigt werden wollen und somit bei einer Überprüfung noch vor der Implementierung kommen sollten.

Aus diesen Gründen ist aus dem bekannten Test Driven Development das sogenannte Behavior Driven Development oder auch Acceptance Test Driven hervor gegangen. Bei diesem verschmelzen Tests und Spezifikation dank der Nutzung bestimmter Werkzeuge und Schlüsselworte so miteinander, dass die Testergebnisse in klarsprachlicher Weise ausgewertet werden können. Dazu wird insgesamt von der Beschreibung einzelner Funktionalitäten weg und zur Schilderung eines erwarteten Verhaltens (Behavior) hin gegangen. Auf diese Weise bedarf die Definition der einzelnen Testfälle keines Hintergrundwissens mehr zur Architektur des Programms, wodurch sie auch von Nichtentwicklern nachvollzogen werden kann und führt sogar soweit, dass häufig nicht einmal mehr von Testfällen sondern von Spezifikationen gesprochen wird.

Behaviour Driven Develoment kann nicht als eine Konkurrenz zum Test Driven Development verstanden werden. Denn ersteres dient vor allem der Validierung der Software sowie der Prüfung der Systemintegration, während letzteres der Verifikation  und damit der Sicherung von funktionaler Korrektheit dient. Demnach ist es durchaus sinnvoll beides in Kombination zu verwenden.

Aufwand

Durch die Besonderheit, dass neben der eigentlichen Produktentwicklung von Entwicklern auch das Schreiben der Tests erwartet wird, führt die testgetriebene Entwicklung zunächst zu einem höheren Aufwand, als dies bei klassischen Verfahren üblich ist. So muss eine entsprechende Infrastruktur geschaffen, weitere Werkzeuge erlernt und zusätzlicher Code geschrieben werden, der nicht sofort in nutzbaren Features mündet. Dies mag zunächst abschrecken, zeigt aber im Grunde nur den Aufwand, der andernfalls viel später im Projekt anfällt. Statt der Aufwände für lange Test- und Bugfixingphasen gegen Ende des Projekts, wird ein Großteil der Qualitätssicherung bereits zu einem Zeitpunkt vorbereitet, indem ein Projektteam durchaus noch komfortabel handeln kann. Dieser Aufwand wiederum sinkt mit zunehmendem Projektverlauf, da die Infrastruktur häufig nur einmal grundlegen erstellt und anschließend nur noch punktuell angepasst werden muss.

Ab wann lohnt sich TDD?
Abbildung 3: Ab wann lohnt sich TDD?

Fazit

Der Einsatz der in diesem Artikel vorgestellten Methoden stellt teilweise einen erheblichen Bruch mit den klassischen Vorgehensweisen in der Softwareentwicklung dar, ermöglicht jedoch eine Qualitätssicherung und Dokumentation wie sie sonst nur schwer möglich ist. So verrät die Software im Grunde selbst ihren aktuellen Ist-Stand ohne dass externe Ressourcen gepflegt werden müssen, die unter Umständen schnell veralten. Durch die Kombination der unterschiedlichen Ansätze kann dabei die Qualität und ein umfassendes Projektverständnis über alle Abstraktionsebenen hinweg sichergestellt werden.