Test / Behavior Driven Development
Testautomatisierung für Code, Benutzeroberfläche, Integration und mehr
Richtig eingesetzt, erzwingen Tests guten und verifizierbaren Code zu schreiben. Guter Code ist die Grundlage sauberer Architektur – gleich von Anfang an. Das Risiko, durch Veränderungen am Code Fehler zu verursachen, wird fortlaufend und schnell reduziert, z. B. durch automatisierte Oberflächentests. Der Einsatz von Behavior-Driven Design (BDD) macht Tests aussagekräftiger und spezifischer für die fachliche Domäne. Fachabteilungen können Tests bzw. Spezifikationen interpretieren ohne eine Programmiersprache verstehen zu müssen.
Ein praktisches BDD-Tool ist das Framework Machine.Specifications (MSpec) für .NET. MSpec ist Open Source, per NuGet verfügbar und in ReSharper integrierbar. Cucumber ist ein plattformübergreifendes Open-Source-Tool das „Gherkin“ als domänenspezifische Sprache für Spezifikationen einsetzt und mit allen gängigen Programmiersprachen integrierbar ist. Außerdem erlauben viele Testing-Frameworks, wie z. B. Jest und RSpec, Unit-Tests im BDD-Style zu schreiben.
Einführung ins Testen / Unit Testing
- Typen von Softwaretests
- Unit Tests
- Akzeptanztests
- UI-Tests
- Integrationstests
- Datenbanktests
- Performancetests
- Die Testpyramide nach Martin Fowler
- Vorgehensweisen
- Blackbox-Testing
- Whitebox-Testing
- Tests als Investition in die Zukunft einer Software
- Tests als Verifikation der Spezifikation
- Verbesserung der Kommunikation mit der Fachabteilung
Vom Test zum Produktivcode
- Was ist ein Unit Test und wie verhält sich dieser im Test Driven Development
- Unterschiede zwischen Test-First und testgetriebener Softwareentwicklung
- Tests als Treiber für gutes Softwaredesign
- Outside-In und Inside-Out als zwei Ansätze, Funktionalität zu entwickeln
- Muss man alles testgetrieben entwickeln
- XP-Techniken wie Pair Programming und deren Einsatz bei testgetriebener Softwareentwicklung
- Mocks und andere Arten von Test Doubles
- Testen zeitkritischer Funktionalität
- Wann sind Abstraktionen für Dateisystemzugriff oder externe Ressourcen sinnvoll
- Wie das Testen die „Definition of Done“ in der agilen Softwareentwicklung beeinflusst
- Metriken und deren Kosten / Nutzen: Code Coverage, Coupling, Dependency Matrix
- Was testet man und wie intensiv sollte getestet werden
- Tests als Qualitätssicherungsmaßnahme
Brownfield-Softwareentwicklung und „minimalinvasives“ Testen
- Wie bekommt man bestehenden Code „under test“
- Aufbrechen von Komponenten
- Testbasierte Unterstützung von Refactoring
- Patterns für das Refactoring und Modularisierung von Tests
- Umgang mit Testdaten
- Object Mother, Builder Pattern
- Named Test Data Sets (Personas)
- Bezugnahme auf User Stories und die Erstellung von Spezifikationen und Szenarios
- Langfristiger Nutzen von Tests für Qualität und Architektur
Behavior Driven Development (BDD)
- Ist BDD nur „Test Driven Development (TDD) done right“
- Abgrenzung zu Domain Driven Design
- Vorteile von BDD in Bezug auf die Kommunikation im Team und zwischen Team und Stakeholdern
- Die Stile Context / Specification und Given-When-Then
- Frameworks für BDD
Oberflächentests und Weiteres
- Test-Frameworks für Java, JavaScript und Ruby
- Frameworks für das Testen von Oberflächen im Web und auf dem Client
- Tests mit und in PowerShell