Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:lehre:programmierkonzepte:ws2017:19:index

19. Testautomatisierung und testgetriebene Entwicklung

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


Zentrale Aspekte

  • Automatisierung ist Voraussetzung für häufiges Testen.
  • Testautomatisierung hat tiefgreifenden Einfluss
    auf den Entwurf des zu testenden Codes.
  • Testgetriebene Entwicklung stellt die Reihenfolge auf den Kopf
    und sorgt für hohe Testabdeckung.
  • Hohe Testabdeckung durch automatisierte Tests
    erhöht das Vertrauen in Software.
  • Testgetriebene Entwicklung führt zu Tests,
    die den Code und seine Spezifikationen dokumentieren.

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, 1999Kernighan, Brian W.; Pike, Rob (1999): The Practice of Programming, Addison Wesley, Boston]. Auch Whittaker [Whittaker, 2000Whittaker, James A. (2000): What is software testing? And why is it so hard?, IEEE Software 17:70-79] diskutiert Testautomatisierung in einem breiteren Kontext. Hunt und Thomas [Hunt, 1999Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston] (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, 2015Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol].

Das vielleicht einflussreichste Buch über testgetriebene Entwicklung ist Kent Becks flammendes Plädoyer inklusive praktischer Beispiele [Beck, 2003Beck, Kent (2003): Test-Driven Development By Example, Addison-Wesley, Boston]. Aber auch Robert C. Martin betont dessen Bedeutung immer wieder, u.a. in [Martin, 2008Martin, Robert C. (2008): Clean Code. A Handbook of Agile Software Craftmanship, Prentice Hall, Upper Saddle River, New Jersey] (Kapitel 9) und [Martin, 2003Martin, Robert C. (2003): Agile Software Development. Principles, Patterns, and Practices, Prentice Hall, Upper Saddle River, New Jersey] (Kapitel 4). Eine sehr kurz gefasste, lesbare und ausgewogene Beschreibung ist [Martin, 2007Martin, Robert C. (2007): Professionalism and test-driven development, IEEE Software 24:32-36].

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, 2014Osherove, Roy (2014): The Art of Unit Testing, Manning, Shelter Island]. Sehr viel ausführlicher ist [Meszaros, 2007Meszaros, Gerard (2007): xUnit Test Patterns, Addison-Wesley, Boston].

  • Beck, Kent (2003): Test-Driven Development By Example, Addison-Wesley, Boston
  • Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston
  • Kernighan, Brian W.; Pike, Rob (1999): The Practice of Programming, Addison Wesley, Boston
  • Martin, Robert C. (2003): Agile Software Development. Principles, Patterns, and Practices, Prentice Hall, Upper Saddle River, New Jersey
  • Martin, Robert C. (2007): Professionalism and test-driven development, IEEE Software 24:32-36
  • Martin, Robert C. (2008): Clean Code. A Handbook of Agile Software Craftmanship, Prentice Hall, Upper Saddle River, New Jersey
  • Meszaros, Gerard (2007): xUnit Test Patterns, Addison-Wesley, Boston
  • Osherove, Roy (2014): The Art of Unit Testing, Manning, Shelter Island
  • Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol
  • Whittaker, James A. (2000): What is software testing? And why is it so hard?, IEEE Software 17:70-79

Numerische Genauigkeit

Die heute von vielen Programmiersprachen verwendete Variante, Gleitkommazahlen darzustellen, ist in der Norm IEEE 754 (ANSI/IEEE Std. 754-1985) 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.

de/lehre/programmierkonzepte/ws2017/19/index.txt · Zuletzt geändert: 2020/09/30 21:35 von 127.0.0.1