Software-Test

Traceability everywhere – vom Unit- bis zum Systemtest

Wie gut wissen Sie über die Unit-Tests in Ihrem Projekt Bescheid? Kennen Sie das genaue Ausmaß der Unit-Tests und wissen Sie, wie sich diese über die Features verteilen?
Wenn Sie die Antwort auf diese Fragen nicht kennen, lernen Sie in diesem Beitrag, wie die Rückverfolgbarkeit von Unit-Tests zu Anforderungen sichergestellt werden kann – um diese im Anschluss in ein Test-Management-System zu integrieren.

Titelbild zum Artikel Traceability everywhere – vom Unit- bis zum Systemtest

Zu Beginn stellen Sie sich vielleicht die Frage nach dem Warum – schließlich existieren strukturbasierte Metriken, welche die Abdeckung des Programmes auf Code-Ebene messen, wie zum Beispiel die Anweisungs- und Entscheidungsüberdeckung. Diese Metriken geben zwar genau Auskunft, wie gut die Abdeckung des Codes durch Unit-Tests ist, jedoch nicht, wie sich diese auf die einzelnen Features und Anforderungen verteilen. Genau dieses Problem kann durch Unit-Test-Traceability gelöst werden. Diese neuen Informationen können von Testern, Test-Managern und Projektleitern verwendet werden, um zu ermitteln, wie gut ein Feature bereits durch Unittests abgedeckt ist. So können Diskrepanzen zwischen Unit-Tests und Systemtests aufgedeckt werden. Wenn zum Beispiel der Großteil aller Unit-Tests ein bestimmtes Feature abdecken, aber nur ein geringer Anteil der Systemtests, kann dies ein Hinweis sein, dass möglicherweise zu wenig Aufwand seitens Systemtest investiert worden ist, und demzufolge noch ein zu hohes Restrisiko seitens des Systemtests in diesem Feature besteht. Dasselbe gilt natürlich auch vice versa – viele Systemtests pro Feature, aber nur wenig Unit-Tests.

 

Wie funktioniert Unit-Test-Traceability?

In einem agilen Softwareentwicklungsprojekt werden zu Beginn Epics definiert, welche für ein Feature oder einen Teil eines Features repräsentativ sind. Im nächsten Schritt werden User Storys definiert und auf Basis dieser Tasks abgeleitet. Die Entwicklung implementiert diese Tasks und daraus resultiert der eigentliche Programm-Code und natürlich Unit-Tests, welche den Code auf Herz und Nieren prüfen.

Wenn Sie sich diese Struktur nun aufzeichnen, sehen Sie, dass es sich um einen Baum handelt, aber keine Sorge, diesen Schritt habe ich bereits vorweggenommen und das Ergebnis sehen Sie etwas weiter unten. Charakteristisch bei einem Baum ist, dass man von einem Blatt-Knoten zurück zu seinen Vorgängern traversieren kann. Genau durch diese Eigenschaft ist es möglich, von unserem Blatt (Programm-Code und Unit-Tests) auf einen Task, eine User-Story und in weiterer Folge auf ein Epic zurückzuschließen. Somit sind alle Informationen, welche wir für eine Traceability brauchen, gegeben und können verwertet werden.
Falls Sie noch nicht auf den agilen Zug aufgesprungen sind, machen Sie sich keine Sorgen, dasselbe Modell ist auch auf ein nicht-agiles Softwareentwicklungsmodell anwendbar.

 

Traceability von Programm-Code

Abb. Traceability von Programm-Code

 

Unit-Tests und ihre Traceability

Als nächstes wollen wir diese neue Entdeckung sichtbar machen und am besten eignet sich dazu ein Test-Management-System, welches bereits die Möglichkeit bietet, Testfällen Anforderungen zuzuordnen. Dieses Vorhaben haben wir bereits bei einem unseren Kunden realisiert, welcher JIRA für das Projektmanagement und Polarion als Test-Management-Werkzeug einsetzt.

Um dies zu bewerkstelligen sind drei wesentliche Schritte notwendig:

  • Extrahieren der Unit-Tests
  • Ermitteln der Traceability
  • Integration in ein Test-Management-System

 

Extrahieren der Unit-Tests

Als Quelle für die Unit-Tests eignet sich das Versionsmanagement-Repository der Entwicklung. Dies beinhaltet einerseits die Unit-Tests, als auch im Idealfall bereits Referenzen, welcher Code, demzufolge auch welcher Unit-Test, zu welchem Task gehört. Diese Information ist bereits gegeben, wenn der Entwickler bei einem Commit angibt, an welchem Task er gearbeitet hat, indem er die ID des Tasks in der Commit-Message mit angibt. Diese Form des Commits wird bereits in vielen Softwareentwicklungsprojekten eingesetzt und ist eine Form von Good Practice. Und nebenbei wird die Basis einer Unit-Test-Traceability geschaffen.

 

Commit-Dialog mit der ID eines Tasks als Teil der Commit-Message

Abb. Commit-Dialog mit der ID eines Tasks als Teil der Commit-Message

 

Ermitteln der Traceability

Im nächsten Schritt wird anhand der extrahierten Task-Referenzen der Unit-Tests auf dessen ursprüngliche Anforderung zurückgeschlossen. Diese können, wie bereits beschrieben, z.B. anhand von Epics im Projektmanagement-Tool repräsentiert werden. Viele Tools stellen eine eigene API zur Verfügung, welche benutzt werden kann um Tasks zu Anforderungen zurückzuverfolgen. Im Fall von JIRA handelt es sich um eine REST-API.

Tasks, Storys und Epics anhand von JIRA

Abb. Tasks, Storys und Epics anhand von JIRA

 

Integration in ein Test-Management-System

Der letzte Schritt ist die Integration der Unit-Tests und ihrer Traceability in ein Test-Management-System. Ähnlich wie bei dem Ermitteln der Traceability kann hier wieder die API des Test-Management-Systems benutzt werden um die Unit-Tests in das System zu integrieren. Allerdings könnten die Ergebnisse auch in ein drittes System wie zum Beispiel eine Datenbank geschrieben werden. Ein weiterer Vorteil für die Integration in ein Test-Management-System ist, dass auch integrierte Reporting-Funktionalitäten verwendet werden können. Somit stehen diese nicht mehr nur für Systemtests, sondern auch für Unit-Tests zur Verfügung.

Wie eine Unit-Test-Integration in ein Test-Management-System aussehen kann, sehen Sie hier anhand einer Anforderung in Polarion. Im Bereich „Linked Work Items“ lässt sich erkennen, welche Elemente dieser Anforderung zugeordnet sind, hier die Unit-Tests der Klasse ShoppingCartTests, welche im ersten Schritt mit der ID eines Tasks als Teil der Commit-Message in das Versionsmanagement eingecheckt wurden.

 

Unit-Test-Integration anhand von Polarion

Abb. Unit-Test-Integration anhand von Polarion

 

Last but not least …

Haben Sie bereits ein ähnliches Vorhaben in Ihrem Projekt oder in Ihrer Firma durchgeführt? Welche Erfahrung haben Sie gemacht und wie konnten Sie diese neuen Informationen rund um Unit-Tests benutzen? Hinterlassen Sie einen Kommentar oder schreiben Sie mir eine Mail an patrick.holzer@anecon.com.

Passende Artikel

Kommentare gesperrt.