Table of Contents

17. Testautomatisierung und testgetriebene Entwicklung

Themen
Grundüberlegungen zur Testautomatisierung
Grundregeln testgetriebener Entwicklung
Auswirkungen testgetriebener Entwicklung
Wichtige Aspekte von Tests
Folien
PDF
Glossar
PDF


Zentrale Aspekte

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, werden aber nicht separat in der Vorlesung besprochen.

Weiterführende Literatur

Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.

Testautomatisierung ist ein vergleichsweise altes Thema und als solches unabhängig vom verwendeten Programmierparadigma. Gute allgemeine Hinweise finden sich in Kapitel 6 in {[kernighan-bw-17.9]}. Auch Whittaker {[whit-ieeesw-17-1-70]} diskutiert Testautomatisierung in einem breiteren Kontext. Hunt und Thomas {[hunt-a-17.9]} (Abschnitt 43) führen die Bedeutung der Automatisierung von Tests sehr deutlich vor Augen.

Eine sehr lesbare Einführung mit dem Fokus auf Programmierung in der Wissenschaft, Python und ein einfach nutzbares Test-Framework findet sich in Kapitel 18 von {[scopatz-a-2015]}.

Das vielleicht einflussreichste Buch über testgetriebene Entwicklung ist Kent Becks flammendes Plädoyer inklusive praktischer Beispiele {[beck-k-2003]}. Aber auch Robert C. Martin betont dessen Bedeutung immer wieder, u.a. in {[martin-rc-2008]} (Kapitel 9) und {[martin-rc-2003]} (Kapitel 4). Eine sehr kurz gefasste, lesbare und ausgewogene Beschreibung ist {[mart-ieeesw-24-3-32]}. Ein sehr schönes, ausformuliertes Beispiel einer Pair-Programming-Sitzung und der testgetriebenen Entwicklung eines Spiels liefert Kapitel 6 in {[martin-rc-2003]}.

Die Qualität des Testcodes ist mindestens genauso wichtig wie die von Produktivcode. Allerdings gelten für Testcode zumindest teilweise unterschiedliche Kriterien. Eine gute und eher kurze Einführung in die Kunst, gute Unittests zu schreiben, ist {[osherove-r-2014]}. Sehr viel ausführlicher ist {[meszaros-g-2007]}.

Einen guten Überblick über die Erstellung komplexer (realer) Systeme mittels testgetriebener Entwicklung neben sehr vielen wertvollen Tipps zum Entwurf objektorientiert programmierter Systeme liefert {[freeman-s-2010]}. Das weit verbreitete Problem, mit einer Codebasis arbeiten zu müssen, die nicht (ausreichend) getestet ist (legacy code), wird im Detail von {[feathers-mc-2005]} diskutiert, inklusive entsprechender Lösungsansätze.

Für eine detaillierte Diskussion von Gleitkommazahlen und ihrer Repräsentation in Hard- und Software, die insbesondere für den Vergleich numerischer Werte in automatisierten Tests von Belang ist, vgl. den Artikel von Goldberg {[gold-acmcs-23-5]}. Eine etwas kürzere Einführung liefert Moler: {[moler-cb-2004]}, Kapitel 1.

<bibtex bibliography> sort=true </bibtex>

Numerische Genauigkeit

Die heute von vielen Programmiersprachen verwendete Variante, Gleitkommazahlen darzustellen, ist in der Norm IEEE 754 (ANSI/IEEE Std. 754-17.5) spezifizert. Jede Zahl wird durch 64 Bit (8 Byte) repräsentiert, was auch als „doppelte Genauigkeit“ bezeichnet wird. Ein paar Details zur doppelten Genauigkeit und zur Norm IEEE 754 finden sich in der (deutschsprachigen) Wikipedia.

Weitere Details und Beispiele, die die generelle Art der Codierung von Gleitkommazahlen beschreiben, finden sich im Buch Numerical Computing with MATLAB von Cleve Moler, dem Gründer von MathWorks (der Firma hinter Matlab). Die entsprechenden Passagen finden sich im ersten Kapitel des Buches. Auch wenn Moler sein Buch insgesamt aus der Sicht von Matlab schreibt, sind seine Ausführungen von allgemeinem Nutzen und auf andere Programmiersprachen übertragbar.