Eigentlich sollte jeder, doch kaum jemand tut es: Testen, Testen, Testen. Zeit- und Gelddruck, Unwissenheit oder schlichtweg Ignoranz sorgen dafür, dass Fehler zu Beginn, im Verlauf und nach einem Projekt nicht Rechtzeitig gefunden und ausgemerzt werden. Zumindest Unwissenheit und fehlende Methoden kann man nach der Lektüre von Uwe Vigenschows Testanleitungsbuch nicht mehr als Grund für ein gescheitertes Projekt vorschieben.
Mit einem pragmatischen Ansatz fokussiert sich Uwe Vigenschow auf aktuelle Probleme und Herausforderungen im Rahmen einer "Gut-genug-Strategie" und fordert zum Test des Tests in realistischer und konkreter Umgebung auf. Los geht es mit der Klärung der Frage, warum Testen überhaupt notwendig ist. Darauf folgen Verfahren des Softwaretests, die Umsetzung in der Praxis sowie Möglichkeiten und Herausforderungen. Im Anhang ein umfangreiches Verzeichnis mit Beispielen und einem Glossar. Fehler, weitere Informationen und Diskussionen zum Thema findet man dann auf der Website zum Buch unter www.oo.testen.de.
Teilweise nichts Neues, aber definitiv neue Zusammenhänge. Objektorientiertes Testen und Testautomatisierung in der Praxis bringt neuen Wind in eine alte Diskussion. --Wolfgang Treß
Teil I begründet, warum wir Tests benötigen: Kommunikationsprobleme, unser Gedächtnis, Fachlichkeit und Komplexität der Software. Die kompakte und aktuelle Sammlung von Definitionen rund um die Themen Qualität, Qualitätsmerkmale, Anforderungen, Fehler und Testen sticht besonders hervor.
Teil II behandelt sechs Themenkomplexe: Technisches, Analytik, Methodik und Organisation. Wer auf wenigen Seiten Ideen zur Umsetzung einer Coding Style, eine kompakte Behandlung des Debugging Prozesses sowie der Ableitung von Testfälle für die jeweilige Testart - Unit-Testfälle, Klassenmethoden, Kettentests - und Systemtestfälle unterteilt, sucht, findet dies hier. Drei Kapitel widmen sich dem Erstellen von Testfällen. Da Entwickler ?Nebenbei"-Tester sind, wirkt die Vielzahl an Testmethoden abschreckend. Der Autor beschreibt die wesentlichen Testmethoden - Grenz-/Extremwerte, Äquivalenzklassen, Pfad-/Bedingungstests, Rekursion, Nebenläufigkeit, zustandsraumbasiertes Testen - anhand kurzer, prägnanter Beispiele. Die ?Testtechnik" Codereviews, als asynchrones Pair Programming bezeichnet, wird mit pragmatischen Durchführungshinweisen vorgestellt.Das Kapitel zum Test objektorientierter Software behandelt die Reihenfolge der Tests in der Hierarchie, den Umfang von Vererbungstests (?Flattening"), sieben typische Vererbungsfehler und drei Testmuster nach Binder - Modale Klassen, modale Hierarchie, nicht-modaler polymorpher Server. Eine schlüssig aufbereitete Anleitung zur Priorisierung von Tests für spezielle Klassenarten auf Basis der Designleitlinie Entity-Control-Boundary (ECB) rundet das Thema ab.Zur Lösung organisatorischer Probleme stellt der Autor Wasserfall- und V-Modell, die Prinzipien des eXtreme Programming und das inkrementell-iterative Vorgehen gegenüber. Sehr praktikabel ist der Vorschlag der Verbindung von V-Modell und inkrementell-iterativem Vorgehen ?Innen inkrementell-iterativ, außen V-Modell". In weiterer Folge werden testgetriebenes Design und Refactoring vorgestellt, wobei automatisierte Tests die Basis für erfolgreiches Refactoring liefern. Aufschlussreich sind die Argumente, testgetriebenes Vorgehen auch unter Zeitdruck beizubehalten, die anhand zweier positiver ?Feldversuche" begründet werden.
Teil III stellt das Konzept der xUnit-Familie mit Beispielen anhand von JUnit, CppUnit und NUnit (JUnit unter .NET) vor. Auf ein wesentliches Element zur erfolgreichen Implementierung von Unit-Tests wird intensiver eingegangen, die Stellvertreterobjekte - Stub, Dummy, Mock. Das Plädoyer für ein ?mittelmäßiges, eher pragmatisches QS-Konzept das erfolgreich umgesetzt von deutlich größerem praktischen Nutzen ist, als ein optimiertes Konzept, dessen Umsetzung nicht gelingt." und die Entwicklung einer pragmatischen Entwicklertest-Strategie mit Verweis auf die im Buch behandelten Themen sind gelungen. Besonders lesenswert sind die Ausführungen zur ?Fehlerkultur": Nur eine sachliche, ergebnisorientierte Atmosphäre führt zum Erfolg, daher ist das Fördern einer konstruktiven Fehlerkultur ?aus Fehlern lernen" für die kreative Entwicklung von Lösungen entscheidend.
Teil IV liefert vertiefende Anregungen zum ?Test von Realtime und Embedded Systems" und eine Gegenüberstellung von ?UML 1.5 vs. UML2".
Der Anhang enthält alle Beispiele, 37 objektorientierte Testmuster, Glossar, Abbildungs-, Tabellen- und ein exzellenten Literaturverzeichnis zum Thema Testen.
ResümeeEin sehr gelungenes Buch, in erster Linie für Entwickler geschrieben, bietet es aber auch für langjährige Qualitätssicherer und Tester eine Fülle an Informationen, Gedanken und Anregungen für die Praxis.