Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter...

29
Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik Rapperswil Oberseestrasse 10, CH-8640 Rapperswil www.ifsoftware.ch Bessere Software – Einfach, Schneller

Transcript of Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter...

Page 1: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

Lohnt sich testbasierte Software-EntwicklungiX Konferenz 2005: Bessere Software

Prof. Peter SommerladIFS Institut für SoftwareHSR Hochschule für Technik RapperswilOberseestrasse 10, CH-8640 Rapperswilwww.ifsoftware.ch

Bessere Software – Einfach, Schneller

Page 2: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 2

Peter [email protected]

• Arbeitsgebieteo Modernes Software

Engineeringo Patterns

Pattern-oriented Software Architecture (POSA)

Security Patternso Programmiereno Test-Infiziert seit 1998

• Backgroundo Diplom-Informatiker (Univ.

Frankfurt/M)o Siemens Corporate Research

- Müncheno itopia corporate information

technology, Zürich (Partner)o Professor für Informatik HSR

Rapperswil, Leiter IFS

Credo:

• Menschen machen Softwareo Kommunikationo Feedbacko Mut

• Erfahrung durch Praxiso Programmieren ist Handwerko Patterns aus der Praxis

kapseln Erfahrung

• Pragmatisches Programmieren

o Test-Driven Developmento Entwicklungsautomationo Einfachheit: Kampf gegen

Komplexität

Page 3: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 3

Agenda

•Was ist testbasierte Entwicklung?o Pragmatische Praktiken

•Fallbeispiel aus der Industrieo C++ Framework für Web Applikationeno Historische Betrachtung

•Vorteile und Risiken testbasierter Entwicklungo Entwickler, Kunden, Anbieter

•Zusammenfassung, Ausblick, Appell

Page 4: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 4

Was ist testbasierte Entwicklung?Automatisierte Tests stellen die Software Qualität sicher

• Unit Testingo Für jede Komponente/Klasse/Methode, die eine nicht-triviale

Implementerung hat, werden eine oder mehrere Testmethoden implementiert.

o Die Tests sollten isoliert ablaufen. Benötigte Umfeld-Objekte werden mittels sog. „mock-objects“ simuliert, um Abhängigkeiten zu vermeiden.

o Oft werden Tests für Grenzfälle und das Normalverhalten erstellt.o Überprüfen der technischen Qualität der Implementierung.

• Functional Testingo Relevantes externes Verhalten wird auf Systemebene getestet.o Testbarkeit durch Isolation von Teilsystemen mittels mock-objects

verbesserbar.o Überprüfen der fachlichen Qualität.

• Idealerweise: Test-Firsto Zuerst Test und Schnittstelle realisieren, dann implementieren.

Page 5: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 5

Unit Tests

•Test eines Moduls (Übersetzungseinheit, = Quell-Datei)o oder kleinere Einheit...

•Test durch Programmierer selbst

•automatisch, wiederholbar

•vorausgesetzte Ergebnisse - Assertions

Unit Testing Frameworks:

•JUnit, NUnit (C#), CppUnit(C++), etc.o www.junit.orgo http://www.xprogramming.com/software.htm

Page 6: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 6

JUnit Beispiel

•Zu testende Klasse

•JUnit Testcode (ein paar Testfälle)

heute in Eclipse (JUnit) oder Visual Studio (NUnit) eingebaut

Page 7: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 7

JUnit Aufbau

import junit.framework.*;

public class EuroTest extends TestCase {

public void testAmount() { Euro two = new Euro(2.00); assertTrue(two.getAmount() == 2.0); }

public static void main(String[] args) { junit.swingui.TestRunner.run(EuroTest.class); }}

(plus die zu testende Klasse "Euro")

Page 8: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 8

Pragmatische Prinzipien beim Unit Testing

•Test anything that might breako keine Tests für "funktionslosen" Code

•Test everything that does breako bei Fehler zuerst einen Test schreiben, der den

Fehler reproduziert, dann korrigieren

•New code is guilty until proven innocent

•Write at least as much test code as production code

•Run local tests with each compileo nicht weitermachen bevor Tests 100% laufen

•Run all tests before check-in to repository

Page 9: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 9

Was wie Testen?Use your Right-BICEP

•Are the results right?o assertEquals(42,7*6)

•Are all boundary conditions CORRECT?o 0, 1, 0xfffffff

•Can you check inverse relationships?o sqrt(x)*sqrt(x) == x

•Can you cross-check results using other means?

•Can you force error conditions to happen?o y/x, x=0

•Are performance characteristics within bounds?o siehe JUnitPerf (www.clarkware.com)

Page 10: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 10

CORRECT Boundary Conditions

•Conformanceo z.B. email Adresse prüfen: [email protected]

•Orderingo Ist Reihenfolge relevant? Was passiert wenn falsch?

•Rangeo Stimmt der Wertebereich der Ergebnisse

•Referenceo Annahmen über Umfeld prüfen

•Existenceo Ist etwas da? Nicht null/nil?

•Cardinalityo off-by one errors, 0,1,viele

•Timeo Reihenfolge in der etwas passiert, Concurrency

Page 11: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 11

Projektautomationkurzer Überblick

•Prinzip:

•Eine IDE ersetzt nicht die Automation!

•Build beinhaltet immer alle automatischen Testso nur OK, wenn Tests 100% Ok

Alle Tätigkeiten, die im Projekt mehr als einmal (manuell) ausgeführt werden (müssen), sind automatisiert!

Page 12: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 12

Automation Road Map

•Quelle: Pragmatic Project Automation

•Versionsmanagement ist selbstverständlich, oder?

o cvs, svn, etc.o alles, das nicht

automatisch generiert werden kann, liegt im Repository!

•Build Prozess auf separatem Build Server setzt auf das Repository auf (next slide)

Page 13: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 13

Automatisierung mit Build-Server

So soll es sein!

OOPS, File vergessen einzuchecken

Page 14: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

Fallbeispiel aus der Praxis

Grosses hochperformantes Framework für Web-Applikationen mit mehreren Kunden und Produktivsystemen aus den 90ern

Page 15: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 15

Geschichtsbetrachtung1997

•Web Application Framework in C++ o Internet Banking Schweizer Grossbanko Online Game mit ca. 10000 userno Finanzinformationsportal mit 5 – 10000

gleichzeitig aktiven professionellen usern noch heute im Einsatz und aktiv weiterentwickelt

•1997 – keine automatischen Unit Testso jeder Entwickler/Applikation hat eigene Versiono Korrektur von Kernabstraktionen und

Infrastruktur notwendig, aber zu riskanto Refactoring-Stau

Page 16: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 16

Ursachen1997

•Furcht vor Änderungen am Frameworko Risiko: Destabilisierung existierenden Codeso Risiko: Change Propagation in „fertige“ Applikationeno Risiko: Mehraufwand für wiederholtes Testeno Risiken sind schwer einzuschätzen

•Qualitätsmängel im Frameworko FIXME Kommentare: quick hacks, trial and erroro Verwendung von C-legacy considered harmful: sscanf,

vprintf, char *o Teilweise unsauberes Verhalten im Multi-threaded Fallo Teilweise unsauberes Memory Management

Änderungen erfordern zu viel Mut und Angstschweiss, dass etwas kaputt geht

Page 17: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 17

Vision 1998

1998: Demo von Test-first Programming von Kent Beck und Erich Gamma

„Das müssten wir auch machen!“

•Wenn das Framework mit automatischen Tests abgestützt wäre, dann sollten Änderungen am Framework ohne Probleme machbar sein.

•Technische Varianten könnten gegeneinander abgewägt werden.

•Technische Verbesserungen könnten idealerweise ohne Implikation auf Applikationen erfolgen.

• Impakt-Abschätzung von (Schnittstellen-) Änderungen wäre möglich.

•Daily Build mit automatischen Tests verbinden.

Page 18: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 18

Was hat es gebracht? (1) 2000

•Stabilitäto Grenzfälle besser abgedeckt

z.b. 0, 1, viele, ganz viele, negativ ?

•Refactoring im Framework wurde möglicho z.B. Reduktion von unnötigem Locking,

optimiertes Memory Mgmt

•Portabilität auf andere Plattformen abgesichert o AIX, Windows NT, Teilbereiche auf exotisches IBM

Host OS (TPF)

•Nachträgliche Implementierung von Tests teilweise aufwändigo erste Tests teilweise zu umfangreich

Page 19: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 19

Was hat es gebracht? (2) 2000•Austauschbarkeit von (ungünstigen)

Implementierungen o Elimination von C-Legacy und FIXMEs

•Besseres Interface Design von neuen Dingeno Test-first und Testability sind gute Ratgeber fürs

Schnittstellendesign

•Einfachere Flexibilisierung

•Vertrauen in „fremden“ Code bei Entwicklern gestiegeno Konsolidierung von Codeo reduziertes Risiko, bzw. Risiko einschätzbar, indem man

Testcase schreibt, bevor man Änderung macht

Page 20: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

Vorteile und Risikentestbasierter Entwicklung

anhand eigener Erfahrungen

Page 21: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 21

Vorteile testbasierter Entwicklung (Entwickler)

•Qualität des Codes gesteigerto bei guten Testfällen, Grenzfälle abdecken

•sicheres Refactoring wird ermöglichto kein Domino-Effekt bei Änderungen

•gut testbarer Code hat besseres, einfacheres Designo hohe Kohäsion, niedrigere Kopplung

•Testcode macht Entwickler zum "Opfer" seines Schnittstellendesigns

o bessere und einfacher nutzbare Interfaces

•Testcode dokumentiert Anforderungeno Test-First macht das explizit: zuerst die Anforderung als

Test kodieren

•Debugger wird verzichtbaro Bug wird im Testcase manifestiert, tritt nie wieder auf

Page 22: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 22

Schwierigkeiten für Entwickler

• Zeit, Coaching und Erfahrung nötig für gute Testso Support durch Kollegen und Führung!

• Tests sind auch Codeo brauchen Refactoring

• unnötige Tests behinderno Plattformtests, "false positives" behinderno zu viele "Normalfälle" getestet

• Tests müssen rasch ablaufeno so oft wie möglich ausführen

• Tests müssen isoliert seino keine Abhängigkeiten von anderen Tests und Infrastruktur

Mock-Objekts einsetzen

• Tests für existierenden Code schreiben ist schwerero oft zu viele Abhängigkeiten im Code -> schlechtes Design

aber essentiell für Refactoring von "Altcode"

• schlechte Tests sind Hinweis auf schlechtes DesignHeute gibt es gute Literatur zum Thema.

Page 23: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 23

Vorteile für Kunden

•Qualität der Lösung ist bessero oft schnellere, kostengünstigere Ergebnisseo keine lange Test- und Integrationsphase

notwendig

•Änderungswünsche können ohne Qualitätsrisiko rasch umgesetzt werdeno inkrementelle Entwicklung ist einfacher

•Wartung und Weiterentwicklung günstigero Fehler treten nur einmal aufo Fehler werden durch Tests erkannt und nicht erst

durch Anwender

•Lebensdauer der Software ist länger

Page 24: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 24

Risiken für Kunden

•Auf den ersten Blick sieht testbasierte Entwicklung teurer auso mehr Code zu schreibeno Refactoring bedeutet funktionierenden Code zu

ändern

•Qualtiät kann "zu gut" seino interne QA Abteilung "überflüssig"o "Reifezeit" in QA/Systemintegration unnötig

rasches häufiges Deployment nicht üblich

•Einfachheit von Änderungen kann zu Oszillation in den Anforderungen führeno innere Konflikte kommen heraus

Page 25: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 25

Vorteile für Anbieter

•Hohe Qualität führt zu anerkannten Lösungeno Kundenzufriedenheit

•Zufriedene Entwicklero weniger Stress durch Sicherheitsnetz aus Tests

•Leichtere Einarbeitung neuen Personalso Tests verhindern "kaputtmachen"

•innere Qualtität des Codes kann verbessert werdeno Zukunftssicherung

•Portierbarkeit auf andere Plattformen

Page 26: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 26

Risiken für Anbieter

•Qualität geschätzt aber Preis nicht gezahlto Kunde erkennt Agilität und nutzt Anbieter aus

•zufriedene Kunden kündigen Support & Wartungsverträgeo zu gute Qualität rächt sicho speziell bei Quellcodelieferung inkl. Testcases

•Schlechtere Softwarequalität führt zu mehr Kundenkontakteno bessere Kundenbindung, Projektpotential

•Neue Kunden sind schwer von Vorteilen zu überzeugeno Qualtiätsniveau ist (noch) nicht marktüblich

Page 27: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 27

Zusammenfassung, Ausblick

•Ich bin "test-infiziert"o bereue jede eigene Entwicklung ohne Testso fordere konsequent von Studenten und

Mitarbeitern automatisierte Testso kenne Chancen aber auch mögliche Risiken und

Gegenmassnahmen

•Testbasierter Entwicklung gehört die Zukunfto Eclipse macht es vielen vor

auch wenn es selbst nur relativ wenige Testcases hat

o Bestandteil unserer Ausbildung an der HSRo gute Applikationstest tw. noch schwierig

Page 28: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 28

Appell

•Lernen Sie, selbst testbasiert zu entwickelno unterstützen Sie Ihre Entwickler dabeio Praxis ist notwendigo Literatur unterstützt

•Erlauben Sie ihren Entwicklern testbasierte Entwicklung zu erlerneno beachten Sie die Lernkurve zum

Erfahrungsaufbau, es braucht Zeito Ausbildung, Übung, Literaturo einfach Anfangen, nicht Abwarten

•Fragen?

Page 29: Lohnt sich testbasierte Software-Entwicklung iX Konferenz 2005: Bessere Software Prof. Peter Sommerlad IFS Institut für Software HSR Hochschule für Technik.

IFS: Bessere Software - Einfach, Schneller 29

Literatur

• Andy Hunt, Dave Thomas, Mike Clark: Pragmatic Starter Kit: http://pragmaticprogrammer.com

o Pragmatic Unit Testing with JUnit/NUnit

• J.B. Rainsberger: JUnit Recipes

• Kent Beck: Test-driven Development by Example

• Dave Astels: Test-driven Development

• Lisa Crispin, Tip House: Testing Extreme Programming

• Johannes Link: Unit Tests mit Java

Werbung :-)

• Pattern-oriented Software Architecture: A System of Patterns(Buschmann,Meunier,Rohnert,Sommerlad,Stal)

• Security Patterns (2005, M. Schumacher et al)

• Fragen zu Patterns, etc.: [email protected]