Unit Testing Deep Dive
Das Thema Unit-Testing und Test Driven Development (TDD) ist in nahezu jedem Softwareprojekt von Bedeutung. Diese Schulung vermittelt kurz das notwendige Grundlagenwissen, um dann tiefer in die verschiedenen Fragestellungen einzutauchen, die für das erfolgreiche Unit-Testing relevant sind. Test Driven Development hilft dabei – auch aus didaktischen Gründen – ein besseres Bewusstsein für die Schwierigkeiten und Herausforderungen zu entwickeln. Es wird eine Vielzahl an Techniken, wie explanation tests, learning tests oder triangulation, vermittelt und geübt, welche später auch außerhalb des TDD-Kontext angewendet werden können.
Die Teilnehmerinnen und Teilnehmer lernen dabei, wie man durch die Unit-Tests zu einem guten Design im Produktivcode kommt. Sie werden in die Lage versetzt sich bewusst mit Seams, Enabling- und Interception-Punkten in ihrem Programmcode auseinanderzusetzen. Dadurch entsteht flexiblerer Code, welcher nicht nur leichter zu testen, sondern auch wartbarer und besser verständlich ist.
Neben der reinen Wissensvermittlung üben die Teilnehmenden die Inhalte aktiv an Beispielaufgaben ein. Um dabei möglichst nah am Entwicklungsalltag zu bleiben, verwenden sie dazu ihre bevorzugte Programmiersprache und Testumgebung. Während den Übungen steht es den Teilnehmerinnen und Teilnehmern frei, das Erlernte auch im eigenen Projekt anzuwenden und sofern möglich, Erkenntnisse daraus zu diskutieren.
Abgerundet wird die Schulung mit einem speziellen Blick auf die Problematik des Unit-Testing im Legacy-Code Umfeld. Während TDD am liebsten ohne existierenden Code startet, stellen die großen Mengen an existierendem Quellcode im Alltag oft eine zusätzliche Herausforderung dar. Dieser lässt sich häufig schwer testen, ist komplex und Änderungen daran bergen ein hohes Fehlerrisiko. Die größte Schwierigkeit dabei ist die hohe Kopplung, d.h. Abhängigkeiten zu vielen anderen Teilen des Quellcodes, welche einer Isolation des zu testenden Codes entgegenwirken. Um diese in den Griff zu bekommen, vermittelt die Schulung hilfreiche Dependency-Breaking-Techniken und grundlegende Vorgehensweisen für dieses Umfeld.
Teilnehmerinnen und Teilnehmer bekommen durch die Schulung das notwendige Wissen über Techniken und Methodiken, um wartbare und wertvolle Unit-Tests entwickeln zu können. Sie erleben das Zusammenspiel zwischen Unit-Tests und gutem Design und sind gerüstet, um auch bestehenden Legacy-Quellcode testen zu können.
Die Teilnehmerinnen und Teilnehmer benötigen für die Übungen einen eigenen Rechner mit funktionierender Unit-Testing-Umgebung. (Tests und Produktiv-Code erstellen, Tests ausführen, Ergebnisse sehen). Für die Übungen werden auch die eigene Projektumgebung und Quellcode verwendet und die Teilnehmenden sind dabei angehalten, die Inhalte der Schulung bereits in diesem Rahmen auf ihren Alltag zu übertragen. Dabei entstehende Fragen oder Hilfestellungen durch die Trainerinnen und Trainer können allerdings nur erfolgen, wenn dies gemäß der projektspezifischen Vereinbarungen (NDA) erlaubt ist. Die Teilnehmenden sollten daher vor der Schulung ihre projektspezifischen Grenzen in Erfahrung bringen.
Die Schulung richtet sich primär an Softwareentwicklerinnen und Softwareentwickler, aber auch an interessierte Testerinnen und Tester, die mehr über den Zusammenhang zwischen Unit-Tests und Codedesign erfahren möchten.
-
Vor- und Nachteile von Unit-Tests
-
Wichtige Begrifflichkeiten (coverage, seams, dependency breaking)
-
Test Driven Development (Definition und Techniken)
-
TDD-Patterns (Explanation test, self shunt, crash test dummy, …)
-
Dependency-Breaking-Techniken
-
Testen von Legacy-Code
-
Best Practices