Test Driven Development

Werbung
Test Driven Development
ƒ
ƒ
ƒ
ƒ
Definition & Motivation
Demo [~10min]
Stubs & Mocks [~15min]
Übliche Fehler [~5min]
[~15min]
© Edorex Informatik AG
10.05.2012
Folie 1
TDD
[Kent Beck]
ƒ Schreibe keine Zeile Code ohne einen
fehlschlagenden (roten)
automatisierten Test
ƒ Eliminiere Duplizität
© Edorex Informatik AG
10.05.2012
Folie 2
TDD Prozess
1. Schreibe den Test Code
2. Kompiliere den Test Code Æ Fehler
Make it work!
3. Implementiere das Minimum an Code um zu Kompilieren
4. Lass den Test laufen Æ Rot
5. Implementiere das Minimum an Code damit Test erfolgreich
ist
6. Lass den Test laufen Æ Grün
Make it right!
7. Refactor Code (Duplizität eliminieren / Verständlichkeit
erhöhen)
8. GOTO 1.
© Edorex Informatik AG
10.05.2012
Folie 3
© Edorex Informatik AG
10.05.2012
Folie 4
so einfach wie möglich
- aber nicht einfacher…
Der Code
1. erfüllt alle Tests
2. hat keine Duplizität
3. ist geeignet für das Zielpublikum
4. kommuniziert alles Nötige
5. hat die kleinstmögliche Anzahl Entitäten
(Klassen, Methoden, etc.)
© Edorex Informatik AG
10.05.2012
Folie 5
Fehlerentstehung
Quelle: Test-driven Development aus dem Open Source Regal
© Edorex Informatik AG
10.05.2012
Folie 6
1:10:100
Quelle: http://www.riceconsulting.com/public_pdf/STBC-WM.pdf
© Edorex Informatik AG
10.05.2012
Folie 7
Wieso TDD?
ƒ Höhere Qualität Æ kleinere Kosten
o Weniger Bugs
o Besseres Design
o Sauberer Code
ƒ Professionalität Æ höhere Qualität
o Qualitätsfokus im gesamten Entwicklungszyklus
o Beweis das Code funktioniert
o Rückmeldung wenn Code nicht mehr funktioniert
ƒ Seiteneffekte
o Wartbarkeit wird erhöht / Änderungen «ohne» Risiko
o Tests helfen Code zu dokumentieren
© Edorex Informatik AG
10.05.2012
Folie 8
Fall Studie
Team
IBM
drivers
Microsoft
Windows
MS MSN
MS
Visual
Studio
Team Grösse
9
6
5-8
7
Source KLOC
41
6
26
155
Test KLOC
29
4
23
60
Kein TDD
w
x
y
z
TDD
0.61w
0.38x
0.24y
0.09z
Zusatzaufwand
15-20%
25-35%
15%
20-25%
Defect / LOC
Quelle: http://maximilien.org/publications/papers/2007/Nagappan+07.pdf
© Edorex Informatik AG
10.05.2012 Folie 9
Unit Test Frameworks (xUnit)
Sprache
xUnit
C#
NUnit, MSTest
Java
JUnit
JavaScript
JSUnit
PL/SQL
utPLSQL, PLUTO
Transact-SQL
TSQLUnit, utTSQL
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
© Edorex Informatik AG
10.05.2012
Folie 10
Stack Demo
IsEmpty
ƒ Test Liste erstellen
ƒ 1. Test wählen
ƒ Red/Green Refactor
ƒ Mehr Tests?
ƒ 2. Test wählen
ƒ Red/Green Refactor
ƒ…
© Edorex Informatik AG
10.05.2012
Folie 11
Einfach (die Beispiele) & Komplex (die Realität)
© Edorex Informatik AG
10.05.2012
Folie 12
© Edorex Informatik AG
10.05.2012
Folie 13
Test Objekte
SUT = System Under Test = Objekt welches getestet wird
Test Doubles (Stereotypen)
dummy = passed but not used
Zustand verifizieren
fake = «shortcut» implementation
stubs = only pretends to work, returns pre-defined answer
spy = captures sent messages for later verification
mocks = tests expectations, requires behavior verification
Verhalten verifizieren
© Edorex Informatik AG
10.05.2012
Folie 14
Beispiel
(Fowler)
ƒ Eine Order muss aus dem Warehouse befüllt
werden
ƒ Falls das Warehouse genügend Inventory hat
wird die Order befüllt und das Inventory um
die entsprechende Quantität reduziert
ansonsten kann die Order nicht befüllt werden
© Edorex Informatik AG
10.05.2012
Folie 15
Stubs
Warehouse
Order
IWarehouse
Warehouse
Stub
© Edorex Informatik AG
10.05.2012
Folie 16
Mocks
© Edorex Informatik AG
10.05.2012
Folie 17
Übliche Test Fehler
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
k)
l)
m)
(Ben Day)
RED / GREEN / Refactor Æ Ich entwickle wirklich so
Schlechte Namensgebung
Unklarer Absicht
Unit Code ist nicht Sauber
Unit vs. Integration Test
Kein Abdeckung für Exceptions
GUI Tests sind zu schwierig
Bug Fixes ohne Unit Test
Nur auf Test Abdeckung fixiert
Mock Mania
Legacy Systeme sind nicht testbar
Dependency Injection wird nicht verwendet
Test Suite zu langsame
© Edorex Informatik AG
10.05.2012
Folie 18
Referenzen
ƒ Basic WCF Unit Testing Brian Laird
ƒ Clean Code Robert C. Martin
ƒ Extreme Programming Explored William Wake
ƒ IoC Containers and the DI pattern Martin Fowler
ƒ Mocks Aren't Stubs Martin Fowler
ƒ Test Driven Development Kent Beck
ƒ Test-Driven Development in Microsoft .NET James W. Newkirk
& Alexei A. Vorontsov
ƒ Top 10 Mistakes in Unit Testing Ben Day
ƒ Realizing Quality Improvement through TDD Nagappan,
Maximilien, Bhat
© Edorex Informatik AG
10.05.2012
Folie 19
Präsentation & Source Code
Foliensatz und Source Code download…
http://www.edorex.ch/tdd
Herzlichen Dank für Ihr Interesse
© Edorex Informatik AG
10.05.2012
Folie 20
Herunterladen