SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Testgetriebene Softwareentwicklung Fachhochschule Heilbronn 10. November 2006 Johannes Link E-Mail:  [email_address] Internet:  johanneslink.net Weblog: jlink.blogger.de
Qualität ,[object Object],[object Object],[object Object]
Dr. Seltsam oder wie ich lernte, die Bombe zu lieben „ General Turkidson, Als Sie die so genannten  Zuverlässigkeitstests  einführten, versicherten Sie mir, es sei völlig unmöglich, dass so etwas jemals eintreten könne.“ „ Ich muss sagen, dass ich es nicht sehr gerecht finde, ein ganzes Programm zu verdammen wegen eines kleinen Versehens, Sir.“
Softwarequalität ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lessons Learned in  Software Testing... ,[object Object],[object Object],[object Object],[object Object],[object Object]
Was ist testgetriebene Entwicklung? ,[object Object],[object Object],[object Object]
Warum testgetriebene Entwicklung? ,[object Object],[object Object],[object Object],[object Object]
Zwei „Testgranularitäten“ ,[object Object],[object Object]
Testgetriebene Entwicklung  im Kleinen...
Entwickler schreiben Unit Tests ,[object Object],[object Object],[object Object],[object Object],[object Object]
Effizientes Testen ,[object Object],[object Object],[object Object],[object Object],[object Object]
JUnit - Testframework für Java ,[object Object],[object Object],[object Object]
Testcode = Quellcode ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Testrunner
Test/Code/Refactor – Zyklus (1)
Test/Code/Refactor – Zyklus (2) ,[object Object],[object Object],[object Object]
Wir überlegen uns erste Testfälle ,[object Object],[object Object],[object Object],[object Object],Auswahl des nächsten Testfalls
Wir entwerfen einen Test, der zunächst fehlschlagen sollte ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Wir schreiben gerade soviel Code, dass sich der Test übersetzen lässt ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Wir prüfen, ob der Test fehlschlägt
Wir schreiben gerade soviel Code, dass der Test erfüllt sein sollte ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Make it work!
Wir prüfen, ob der Test durchläuft
Wir entfernen Duplikation –  Aber wo ist sie? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],public   class  AccountTest  extends  TestCase { public   void  testCreateAccount() { Account account =  new  Account( "Customer" ); assertEquals( "Customer" , account.getCustomer()); assertEquals(0, account.getBalance()); } }
Wir entfernen Duplikation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Make it right!
Wir prüfen, ob der Test weiterhin läuft
Tests und Code im Wechselspiel ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Auswahl des nächsten Testfalls
Nächster Test: Einzahlen public   class  AccountTest ... @Test public   void  deposit() { Account account =  new  Account( "Customer" ); account.deposit(100); assertEquals(100, account.getBalance()); account.deposit(50); assertEquals(150, account.getBalance()); } public   class  Account... private   int  balance = 0; public   int  getBalance() { return  balance; } public   void  deposit( int  amount) { balance += amount; }
Rolle der Unit Tests ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Evolutionäres Design ,[object Object],[object Object],[object Object],[object Object]
Refactoring erhält strukturelle Qualität ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Refactoring-Ziel: Einfache Form ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Übelriechender Code ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Refactoring - Vorgehen ,[object Object],[object Object],[object Object],[object Object],[object Object]
Eclipse: Eingebaute Refactorings ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Häufige Integration ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Integrationszüge ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CruiseControl
Testgetriebene Entwicklung im Großen...
Systemtests / Akzeptanztests ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FIT -  Framework for Integrated Test ,[object Object],[object Object],[object Object],[object Object],[object Object]
FIT... ,[object Object],[object Object],[object Object],[object Object]
FIT: Funktionsweise
Angriffspunkte Business Facade UI Controller View Domain Kunde Dispo Konto Persistence
Angriffspunkte Business Facade UI Controller View Domain Kunde Dispo Konto Persistence
FIT: Business Facade
Angriffspunkte Business Facade UI Controller View Domain Kunde Dispo Konto Persistence
FIT: User Interface
Angriffspunkte Business Facade UI Controller View Domain Kunde Dispo Konto Persistence
FIT: Geschäftsregeln
Angriffspunkte Business Facade UI Controller View Domain Kunde Dispo Konto Persistence
FIT: Hintertür
Die Sprache des Kunden
FitNesse: Wiki-Server mit FIT-Bridge
Warum FIT? ,[object Object],[object Object],[object Object],[object Object]
Testgetriebene Entwicklung  in der Praxis ,[object Object],[object Object],[object Object]
Probleme (1) - Technik ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Probleme (2) - Akzeptanz ,[object Object],[object Object],[object Object]
Zahlen  1 > 90 % ca. 3 min ca. 1 : 1 ca. 250 / 830 ca. 600 Anbindung Kasse an Filialsoftware - 25  10 Bugs in Produktion > 95 % > 70 % > 75 % Testabdeckung ca. 12 sec ca. 10 min ca. 30 min Laufzeit aller Tests ca. 1,5 : 1 ca. 1 : 3 ca. 1 : 2 Testcode : Anwendungscode 80 / 305 108 / 534 114 / 582 Testklassen / Testfälle 115 623 172 Projektgröße (Klassen) Inhouse-Portal-Framework Intranet-Anwendung Internet-Brokerage
Fazit ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Referenzen (1) ,[object Object],[object Object],[object Object],[object Object]
Referenzen (2) ,[object Object],[object Object],[object Object],Frank Westphal: Testgetriebene Entwicklung mit JUnit und FIT,  dpunkt.verlag 2006
XP-Days Germany http:// xpdays .de   Hamburg, 23. + 24. November 2006 Konferenz für Extreme Programming und Agile Softwareentwicklung
http://johanneslink.net/pdf/fh-heilbronn-2006.pdf

Weitere ähnliche Inhalte

Andere mochten auch

Ein interaktives Schulbuch für den Geschichtsunterricht
Ein interaktives Schulbuch für den GeschichtsunterrichtEin interaktives Schulbuch für den Geschichtsunterricht
Ein interaktives Schulbuch für den Geschichtsunterrichtakoenig
 
De Mees 2
De Mees 2De Mees 2
De Mees 2elke
 
Kinder
KinderKinder
Kinderdokeos
 
Slidecasting und "digitales Storytelling"
Slidecasting und "digitales Storytelling"Slidecasting und "digitales Storytelling"
Slidecasting und "digitales Storytelling"akoenig
 
Wuestenabenteuer
WuestenabenteuerWuestenabenteuer
Wuestenabenteuerdokeos
 
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen Welt
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen WeltMuss die Freiheit grenzenlos sein? Über Toleranz in der digitalen Welt
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen WeltWolfgang Luenenbuerger-Reidenbach
 
Willkommen in der Hölle George Bush.
 Willkommen in der Hölle George Bush. Willkommen in der Hölle George Bush.
Willkommen in der Hölle George Bush.dokeos
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 

Andere mochten auch (20)

Renaissance der Corporate Blogs
Renaissance der Corporate BlogsRenaissance der Corporate Blogs
Renaissance der Corporate Blogs
 
Employee Blogging - to do or taboo
Employee Blogging - to do or tabooEmployee Blogging - to do or taboo
Employee Blogging - to do or taboo
 
Ein interaktives Schulbuch für den Geschichtsunterricht
Ein interaktives Schulbuch für den GeschichtsunterrichtEin interaktives Schulbuch für den Geschichtsunterricht
Ein interaktives Schulbuch für den Geschichtsunterricht
 
De Mees 2
De Mees 2De Mees 2
De Mees 2
 
Kinder
KinderKinder
Kinder
 
Wer spricht mit wem?
Wer spricht mit wem?Wer spricht mit wem?
Wer spricht mit wem?
 
Empfehlungen
EmpfehlungenEmpfehlungen
Empfehlungen
 
Social Media ist für eine missionarische Kirche notwendig
Social Media ist für eine missionarische Kirche notwendigSocial Media ist für eine missionarische Kirche notwendig
Social Media ist für eine missionarische Kirche notwendig
 
Bruges
BrugesBruges
Bruges
 
Game based Flow
Game based FlowGame based Flow
Game based Flow
 
Slidecasting und "digitales Storytelling"
Slidecasting und "digitales Storytelling"Slidecasting und "digitales Storytelling"
Slidecasting und "digitales Storytelling"
 
Wuestenabenteuer
WuestenabenteuerWuestenabenteuer
Wuestenabenteuer
 
Gruppenarbeit ausbilderrolle
Gruppenarbeit ausbilderrolleGruppenarbeit ausbilderrolle
Gruppenarbeit ausbilderrolle
 
Hallo
HalloHallo
Hallo
 
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen Welt
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen WeltMuss die Freiheit grenzenlos sein? Über Toleranz in der digitalen Welt
Muss die Freiheit grenzenlos sein? Über Toleranz in der digitalen Welt
 
Willkommen in der Hölle George Bush.
 Willkommen in der Hölle George Bush. Willkommen in der Hölle George Bush.
Willkommen in der Hölle George Bush.
 
Filter setzen. Überleben in Informationsfluten
Filter setzen. Überleben in InformationsflutenFilter setzen. Überleben in Informationsfluten
Filter setzen. Überleben in Informationsfluten
 
Gruppenarbeit lernerfolg
Gruppenarbeit lernerfolgGruppenarbeit lernerfolg
Gruppenarbeit lernerfolg
 
Gruppenarbeit zur Zukunft der Arbeit
Gruppenarbeit zur Zukunft der ArbeitGruppenarbeit zur Zukunft der Arbeit
Gruppenarbeit zur Zukunft der Arbeit
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 

Ähnlich wie Testgetriebene Softwareentwicklung

Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Toolsgedoplan
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessRalf Abramowitsch
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascriptjoergreichert
 
Agile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous DeliveryAgile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous Deliverypingworks
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumBenjamin Schmid
 
Die nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDie nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDaniel Lehner
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes QAware GmbH
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Florian Wolters
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnMartin Seibert
 
Software-Tests in PHP-Anwendungen
Software-Tests in PHP-AnwendungenSoftware-Tests in PHP-Anwendungen
Software-Tests in PHP-AnwendungenGjero Krsteski
 
Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Stephan Hochdörfer
 

Ähnlich wie Testgetriebene Softwareentwicklung (20)

Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
 
Agile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous DeliveryAgile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous Delivery
 
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetproTest-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
Test-Alternativen
Test-AlternativenTest-Alternativen
Test-Alternativen
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Die nächste Generation des Unit Testing
Die nächste Generation des Unit TestingDie nächste Generation des Unit Testing
Die nächste Generation des Unit Testing
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
 
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
Automatisiertes Testen von Software in C++ (mit dem Test Framework Google Test)
 
Continous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickelnContinous Deployment - Schneller entwickeln
Continous Deployment - Schneller entwickeln
 
Software-Tests in PHP-Anwendungen
Software-Tests in PHP-AnwendungenSoftware-Tests in PHP-Anwendungen
Software-Tests in PHP-Anwendungen
 
Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11
 

Mehr von jlink

Mein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-EntwicklerMein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-Entwicklerjlink
 
Java Script Ist Anders
Java Script Ist AndersJava Script Ist Anders
Java Script Ist Andersjlink
 
Agile08: Test Driven Ajax
Agile08: Test Driven AjaxAgile08: Test Driven Ajax
Agile08: Test Driven Ajaxjlink
 
Behaviour-Driven Development
Behaviour-Driven DevelopmentBehaviour-Driven Development
Behaviour-Driven Developmentjlink
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachenjlink
 
Mehr Dynamik Mit Groovy
Mehr Dynamik Mit GroovyMehr Dynamik Mit Groovy
Mehr Dynamik Mit Groovyjlink
 
Von Java Zu Groovy
Von Java Zu GroovyVon Java Zu Groovy
Von Java Zu Groovyjlink
 
Automated Web 2.0 Testing
Automated Web 2.0 TestingAutomated Web 2.0 Testing
Automated Web 2.0 Testingjlink
 
XP Day Germany 2006 - Keynote
XP Day Germany 2006 - KeynoteXP Day Germany 2006 - Keynote
XP Day Germany 2006 - Keynotejlink
 

Mehr von jlink (9)

Mein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-EntwicklerMein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-Entwickler
 
Java Script Ist Anders
Java Script Ist AndersJava Script Ist Anders
Java Script Ist Anders
 
Agile08: Test Driven Ajax
Agile08: Test Driven AjaxAgile08: Test Driven Ajax
Agile08: Test Driven Ajax
 
Behaviour-Driven Development
Behaviour-Driven DevelopmentBehaviour-Driven Development
Behaviour-Driven Development
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachen
 
Mehr Dynamik Mit Groovy
Mehr Dynamik Mit GroovyMehr Dynamik Mit Groovy
Mehr Dynamik Mit Groovy
 
Von Java Zu Groovy
Von Java Zu GroovyVon Java Zu Groovy
Von Java Zu Groovy
 
Automated Web 2.0 Testing
Automated Web 2.0 TestingAutomated Web 2.0 Testing
Automated Web 2.0 Testing
 
XP Day Germany 2006 - Keynote
XP Day Germany 2006 - KeynoteXP Day Germany 2006 - Keynote
XP Day Germany 2006 - Keynote
 

Testgetriebene Softwareentwicklung