Teststrategie – den richtigen Fokus setzen

Nehmen wir an, ein Test-Team in einem Softwareprojekt ist hochmotiviert, es produziert Unit Tests in beeindruckender Menge und erzeugt so ein äußerst stabiles System, aber der Kunde bleibt dennoch unzufrieden, weil Features nicht so funktionieren, wie er sich das vorstellt. Oder das Team testet pingelig genau kleinste Layoutfehler und der Projektmanager verzweifelt an dem ausufernden Aufwand. Oder noch schlimmer: eine Software wurde intensiv getestet, aber Kernfunktionen wurden vergessen oder die Kompatibilität zu einer wichtigen Zielplattform nicht verifiziert. Oder noch viel schlimmer: der Test hat kritische Fehler nicht gefunden, da die verwendete Methodik ungeeignet war.

All dies sind Beispiele eines nicht effektiven Tests. Kaum ein Testansatz wird perfekt sein, jedoch kann man solche Probleme deutlich reduzieren, wenn man vor dem Start des Tests diesen etwas plant und dafür eine sogenannte Teststrategie verfasst.

Gerade wenn man so eine Teststrategie zum ersten Mal verfasst, ist ein Grundgerüst hilfreich. Ich verwende mittlerweile seit Jahren folgende Punkte zur Orientierung:

Teststrategie

  • Was (Testgegenstand)
  • Wieso
  • Wann
  • Wo
  • Wie
  • Womit
  • Wer
  • Akzeptanzkriterien

Für manche Projekte kann das Festlegen einer Strategie einfach sein, üblicherweise wenn man ein ähnliches Projekt bereits absolviert hat. Jedoch sollte man beim Erstellen der Strategie die einzusetzenden Methodiken gründlich durchdenken, hinterfragen was sie bringen und welche für den konkreten Kontext gut passen.

Beispiel Entity Framework Sync

Entity Framework Sync ist eine Library, die Entity Framework um Synchronisationsfeatures erweitert. Folgende Teststrategie habe ich dafür verwendet:

Man kann hier sehr viele Projekt-Spezifika erkennen. Anders als eine Website oder eine Anwendung wird diese Library dafür entworfen, in vielen Anwendungen verbaut zu werden.

Da es sich um eine Komponente im Datenzugriff handelt, ist diese für die Anwendung durchaus kritisch, da durch Fehler z.B. Datenverlust entstehen kann. Daher muss diese Komponente grundstabil sein, wobei hier hauptsächlich Unit Tests zum Prüfen der Einzelfunktionen eingesetzt werden.

Dadurch ist aber beileibe noch nicht die Einsetzbarkeit in realen Anwendungen gesichert. Hierfür müssen Testanwendungen konstruiert werden. Falls möglich sollte die Library direkt mit vorhandenen realen Anwendungen geprüft werden.

Für den Test dieser Library habe ich außerdem eine Risiko-basierte Analyse durchgeführt. Soetwas habe ich noch in keinem anderen Projekt gemacht. Dies ist eine sehr trockene, aber enorm strukturierte Herangehensweise, die in diesem Projekt wunderbar funktioniert und wichtige Schwächen herausgefunden hat, aber auch recht aufwendig ist.

Zusätzlich zur eigentlichen Teststrategie finde ich persönlich den Einsatz einer visuellen Darstellung sinnvoll, die so ein Zwischending zwischen Teststrategie und Testplan ist.

Für diese Library ist es wichtig, sich die Kernaspekte des Tests präsent zu machen.

Entity Framework bietet z.B. mehrere “Stile” an, wie man es programmieren kann. Daher muss die Funktionalität im Endeffekt für jeden “Stil” geprüft werden.

Auch nützt es nichts, wenn die Funktionalität in einem primitiven Datenmodell läuft, aber nicht in einem Datenmodell welches alle Möglichkeiten von Entity Framework nutzt.

Beispiel Quality Spy

Quality Spy selbst kann auch als gutes Beispiel für eine Teststrategie dienen. Da es sich um eine Desktop-Anwendung handelt, ist ein völlig anderer Testansatz sinnvoll als bei einer Basiskomponente wie EF Sync.

Hier erfolgt der Haupttest manuell. Es ist wichtig, dass die GUI auf verschiedenen Betriebssystemen getestet wird. Unter Windows 8 muss sogar die Funktionalität noch einmal vollständig getestet werden, da dort die Anwendung statt auf .NET 4 unter .NET 4.5 läuft, was im Detail Unterschiede aufweist.

Natürlich soll die Anwendung nicht buggy sein, aber auf Stabilität muss hier nicht so intensiv getestet werden, wie bei EF Sync. Stattdessen ist hier wichtig, die Eignung für verschiedene Szenarien zu überprüfen.

Auch für Quality Spy habe ich eine Skizze angefertigt, welche den Test zusammenfasst:

Fazit

Ein gesunder Anteil Planung ist beim Testen genauso wichtig, wie bei der Entwicklung insgesamt. Eine sinnvolle Teststrategie legt das Fundament für einen effektiven Softwaretest.