Test DrivenDevelopment und...
Transcript of Test DrivenDevelopment und...
3
Qualitätskrise
© 2017 iPoint-systems gmbh
Software wird zur Benutzung freigegeben, nicht wenn sie nachweislich korrekt ist, sondern wenn die Häufigkeit, mit der neue Fehler entdeckt werden, auf ein für die Geschäftsleitung
akzeptables Niveau gesunken ist.- David L. Parnas
5
Grundproblem
© 2017 iPoint-systems gmbh
• Komplexe Modell• Komplexe Interaktionen• Viele Anforderungen• Wenig Zeit• Viel Konkurrenz• Fehler sind kostspielig
6
Formale Verifikation
© 2017 iPoint-systems gmbh
• Beweistechniken• Semantikdefinitionen• Zeit aufwändig• Schlecht Abdeckung
Nur bei kleinen Programmen anwendbar
8
Testing - Definition
© 2017 iPoint-systems gmbh
IEEE Std. 610.12-1990:(1) An activity in which a system or component is executed under
specified conditions, the results are observed or recorded, and an evaluation is made of some aspect of the system or component.
(2) To conduct an activity as in (1).
11 © 2017 iPoint-systems gmbh
Testen kann immer nur die Anwesenheit aber nie die Abwesenheit von Fehlern zeigen. - Edsger Dijkstra
17 © 2017 iPoint-systems gmbh
Durchführung
Ausgangszustand herstellen
Testfalls ausführen
Soll-Ist-Vergleich
18 © 2017 iPoint-systems gmbh
Durchführung
Ausgangszustand herstellen
Testfalls ausführen
Soll-Ist-Vergleich
Dokumentation
24 © 2017 iPoint-systems gmbh
Testebenen
Integration Tests
Unit Tests
Level 1
Level 2
Level 3
Level 4
25 © 2017 iPoint-systems gmbh
Testebenen
System Tests
Integration Tests
Unit Tests
Level 1
Level 2
Level 3
Level 4
26 © 2017 iPoint-systems gmbh
Testebenen
User Acceptance Tests
System Tests
Integration Tests
Unit Tests
Level 1
Level 2
Level 3
Level 4
27
Tools
© 2017 iPoint-systems gmbh
• Unit Test Framework: JUnit 4 + Hamcrest• Mocking Framework: Mockito• Code Quality: PMD, Findbugs, Checkstyle• Code Coverage: Atlassian Clover, JaCoCo
29
Black-Box Tests
© 2017 iPoint-systems gmbh
Component under Test
(cut)
Spezifikation
Eingaben
Erwartete AusgabenAusgabe
31
Glass-Box Tests
© 2017 iPoint-systems gmbh
Component under Test
(cut)
Spezifikation + Metriken
Eingaben
Erwartete AusgabenAusgabe
32
Anweisungsüberdeckung (C0)
© 2017 iPoint-systems gmbh
• Mind. Einmal pro Anweisung• Wirksamkeit:
• Probleme- Kontrollflußfehler- Dead Code
P1
P2
A1
A2
NeinJa
e
bc
d
a
NeinJa
Anzahl der ausgeführten AnweisungenAnzahl der aller Anweisungen
33
Zweigüberdeckung (C1)
© 2017 iPoint-systems gmbh
• Mind. Einmal pro Zweig• Wirksamkeit:
• Probleme- Abhängigkeiten werden ignoriert- Schleifen- Komplexe Entscheidungen
P1
P2
A1
A2
NeinJa
d
bc
c
a
NeinJa
Anzahl der ausgeführten ZweigeAnzahl der aller Zweige
34
Pfadüberdeckung (C2)
© 2017 iPoint-systems gmbh
• Mind. Einmal pro Pfad• Wirksamkeit:
• Probleme- Unerreichbare Pfade
P1
P2
A1
A2
NeinJa
d
bc
c
a
NeinJa
Anzahl der ausgeführten PfadeAnzahl der aller Pfade
36
Wie unterscheidet sich TDD?
© 2017 iPoint-systems gmbh
• TDD beschäftigt sich mit Design• Gibt Sicherheit• Ermöglicht Veränderung• Validiert Design• Gibt schnelles Feedback• Benötigt Diszipline
37
Ergebnisse
© 2017 iPoint-systems gmbh
• Gesteigerte Qualität• Lesbarkeit• Wartbarkeit• Simplizität• Qualität bleibt erhalten• Gutes Design
38
3 Grundregelen
© 2017 iPoint-systems gmbh
1. Kein Produktionscode ohne eine scheiternden Test2. Nicht mehr Testcode schreiben als zum scheitern nötig ist3. Nicht mehr Producktionscode schreiben als nötig ist um den Test zu
bestehen
41 © 2017 iPoint-systems gmbh
Ablauf
1. Test schreiben
2. Testergebnisseprüfen
3. Code schreiben
Test ist erfolgreich
Test scheitert
42 © 2017 iPoint-systems gmbh
Ablauf
1. Test schreiben
2. Testergebnisseprüfen
3. Code schreiben
4. Testergebnisseprüfen
Test ist erfolgreich
Test scheitert
Test scheitert
43 © 2017 iPoint-systems gmbh
Ablauf
1. Test schreiben
2. Testergebnisseprüfen
3. Code schreiben5. Refactor
Code
4. Testergebnisseprüfen
Test ist erfolgreich
Test scheitert
Test scheitert
Test ist erfolgreich
44 © 2017 iPoint-systems gmbh
Ablauf
1. Test schreiben
2. Testergebnisseprüfen
3. Code schreiben5. Refactor
Code
6. Testergebnisseprüfen
4. Testergebnisseprüfen
Test ist erfolgreich
Test scheitert
Test scheitert
Test ist erfolgreich
Test scheitert
45 © 2017 iPoint-systems gmbh
Ablauf
1. Test schreiben
2. Testergebnisseprüfen
3. Code schreiben5. Refactor
Code
6. Testergebnisseprüfen
4. Testergebnisseprüfen
Test ist erfolgreich
Test scheitert
Test scheitert
Test ist erfolgreich
Test ist erfolgreich
Test scheitert
46
TDD und Design
© 2017 iPoint-systems gmbh
• Loose Kopplung, Hoher Zusammenhalt• Single Responsibility Principle• Streben nach Einfachheit• Modularisierung• Encapsulation• Duplikate vermeiden
47
TDD und Architektur
© 2017 iPoint-systems gmbh
• Ersetzt nicht Architektur• Design bleibt erforderlich, aber nicht im großen Stil• Validiert Design Entscheidungen• Deckt schwächen auf
48
Vorteile
© 2017 iPoint-systems gmbh
• Besserer Vorschritt• Besseres Design• Bessere Entwickler• Geringere Langzeitkosten
49
Best Practices
© 2017 iPoint-systems gmbh
• Sofortiges Feedback• Tests müssen schnell sein- In-Memory Datenbanken (H2, HSQL)
• Generierte Testdaten• Testnamen sollten Zweck ausdrücken• Unabhängige Tests• Ein Konzept pro Test• Ein Assert pro Test• Augenscheinlich triviale Tests sind wichtig
50
Herausforderungen
© 2017 iPoint-systems gmbh
• Disziplin• Learning Curve• Schlechte Angewohnheiten• Wenig Rückenhalt
52
Ohne CI…
© 2017 iPoint-systems gmbh
• Selten Commits• Schwierige Integration• Viele Bugs• Seltene Releases• Spätes Testen
53
Bausteine von CI
© 2017 iPoint-systems gmbh
• Zentrales Source Code Management• Regelmäßige Commits• Build Server• Automatisierter Build• Automatisierte Tests• Codemetriken• Zentrales Repository• CI Tool
59
Entwicklung mit CI
© 2017 iPoint-systems gmbh
v1
v2
v3St
able
c1
c2
Feat
ure
Bran
ch
v1
v2
v3
Mas
ter
Pull-Request
60
Entwicklung mit CI
© 2017 iPoint-systems gmbh
v1
v2
v3St
able
c1
c2
Feat
ure
Bran
ch
v1
v2
v3
Mas
ter
c1
c2
61
v1
v2
v3St
able
c1
c2
Entwicklung mit CI
© 2017 iPoint-systems gmbh
c1
c2
Feat
ure
Bran
ch
v1
v2
v3
Mas
ter
c1
c2
62
Pro
© 2017 iPoint-systems gmbh
• Schnelle Reaktionsfähigkeit• Vertrauen in Software• Bessere Zusammenarbeit• Höhere Qualität
63
Contra
© 2017 iPoint-systems gmbh
• Stabilität hängt von Testabdeckung ab• Zeitinvestment• Kulturschock• Metriken und Monitoring erforderlich
iPoint Weltweit
ipoint-systems.com
USAiPoint Inc.Ann Arbor255 East Liberty, Suite 287Ann Arbor, MI 48104Tel. +1 248 282-4085Fax +1 248 [email protected]
Los Angeles25350 Magic Mountain Parkway, Suite 300Valencia, CA 91355T +1 [email protected]
DeutschlandiPoint-systems gmbh Reutlingen, HeadquartersLudwig-Erhard-Straße 5872760 ReutlingenTel. +49 7121 14489-60Fax +49 7121 [email protected]
MünchenTherese-Giehse-Platz 682110 GermeringTel. +49 89 800 6588-18Fax +49 89 800 [email protected]
UKiPoint Ltd.ManchesterUnit 10135PO Box 4336Manchester, M61 0BWTel. +44 1204 819051Fax +44 1942 [email protected]
ChinaiPoint Software and Information Technology (Shanghai) Ltd.ShanghaiRoom No. 331, Catering Part 2, 3F Huadu Building,Zhangyang Road 828 – 838,China (shanghai) Free Trade Pilot ZoneShanghai, [email protected]
KoreaiPoint KoreaSuwonBoeun bldg 304, 1029-8 Yeongtong 1-dongYeongtong-gu443 815 Suwon-si, Gyeonggi-doTel. +82 [email protected]
JapaniPoint Japan Co LtdToiyoOak Minami-Azabu Building 2F3-19-23 Minami-Azabu, Minato-kuTokio, Japan 106-0047Phone +81 3 4580 [email protected]
ÖsterreichiPoint-Austria GmbHWienIgnaz-Köck-Straße 10Top 3.041210 WienTel. +43 1 2720370-10Fax +43 1 [email protected]
Schweden iPoint-systems ABVäxjöFramtidsvägen 16SE-351 96 VäxjöTel. +46 (70) [email protected]
Frankreich & BeneluxiPoint-systems gmbhParisTel. +33 788 919 985 [email protected]
66
• No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of iPoint-systems gmbh. The information contained herein may be changed without prior notice.
• Some software products marketed by iPoint-systems gmbh and its distributors contain proprietary software components of other software vendors.
• Microsoft, Windows, Excel, Outlook, and PowerPoint are registered trademarks of Microsoft Corporation.
• Oracle is a registered trademark of Oracle Corporation.
• HTML, XML, XHTML and W3C are trademarks or registered trademarks of W3C®, World Wide Web Consortium, Massachusetts Institute of Technology.
• SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP Business ByDesign, and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries.
• All other product and service names mentioned are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary. These materials are subject to change without notice.
• These materials are provided by iPoint-systems gmbh and its affiliated companies (“iPoint Group”) for informational purposes only, without representation or warranty of any kind, and iPoint Group shall not be liable for errors or omissions with respect to the materials. The only warranties for iPoint Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warrant.
Copyright 2017 iPoint-systems gmbh All Rights Reserved
© 2017 iPoint-systems gmbh