Hauptsache, es läuft? Entwicklung Wartung Test iks Thementag Mehr Softwarequalität Best practices für alle Entwicklungsphasen 19.06.2012 Autor: Dr. Reik Oberrath
Agenda Begriffserklärung: Entwicklung, Wartung, Test Sieben Einflussgrößen der Softwarequalität in Entwicklung und Wartung Best practices im Einsatz Zusammenfassung Seite 3 / 42
Agenda Begriffserklärung: Entwicklung, Wartung, Test Sieben Einflussgrößen der Softwarequalität in Entwicklung und Wartung Best practices im Einsatz Zusammenfassung Seite 4 / 42
Was ist Entwicklung, was Wartung und was Test? Entwicklung Software- Erweiterung Release Build Software-Erweiterung, Fehlerbehebung, Entwicklungstests Test Enwicklungstests Freigabetests Release Build & Test Freigabe Wartung Fehlerbehebung Produktionsunterstützung Produktionsunterstützung Seite 5 / 42
Agenda Begriffserklärung: Entwicklung, Wartung, Test Sieben Einflussgrößen der Softwarequalität in Entwicklung und Wartung Best practices im Einsatz Zusammenfassung Seite 6 / 42
7. Produktionsunterstützung 1. Entwicklungstools Entwicklung im engeren Sinn 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 7 / 42
7. Produktionsunterstützung 1. Entwicklungs- tools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 8 / 42
1. Entwicklungstools: Best practices Entwicklungsumgebung (IDE): Java: Eclipse, NetBeans, IntelliJ.NET: Visual Studio AS/400: RDP Versionsverwaltung: Java:.NET: AS/400: TD/OMS Issue Tracker: CVS, SVN, Mercurial, GIT Team Foundation Server Jira, Mantis, Bugzilla, Trac Seite 9 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 10 / 42
2. Clean Code: Was ist das? Codequalität Interne / Strukturelle Qualität des Produkts Effiziente Software-Entwicklung Merkmale: Leicht verständlich Einfach änderbar Gut testbar flexibel wartbar Seite 11 / 42
2. Clean Code: Best practices Patterns so ist s gut Allgemeine Prinzipien Clean-Code-Developer [1]: DRY-Prinzip, KISS-Prinzip, SOLID-Prinzipien, Softwaremetriken, Sprachen-spezifische Prinzipien Buch-Tipp: Effektive Java [2] Antipatterns so nicht! Vortrag: Clean Code: Von der Lehre in den Alltag von Jörg Vollmer & Reik Oberrath Buch-Tipp: Bug Patterns in Java [3] Code-Inspection-Tools: Findbugs, Checkstyle, PMD, Eclipse Seite 12 / 42
2. Clean Code: Softwaremetriken Messbar sind Umfang, Komplexität, Koppelung, Lesbarkeit, Abstraktion, Bsp. 1: Lines of Code (LOC) pro Quelltextdatei Bsp. 2: Cyclomatische Komplexität (CCN) bzw. McCabe-Metrik Tools: Checkstyle, Sonar Seite 13 / 42
Anz. Quelltextdateien 2. Clean Code: Softwaremetriken im Einsatz I 60 50 40 30 20 10 0 1 2 3 4 5 6 7 Zyklomatische Komplexität Seite 14 / 42
Anz. Quelltextdateien mit einer Zyklomatischen Komplexität > 4 2. Clean Code: Softwaremetriken im Einsatz II 6 5 4 3 2 Akzeptanzgrenze Sollwert 1 0 1 2 3 4 5 6 7 8 9 10 11 Release Candidate Seite 15 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 16 / 42
3. Entwicklungstest: Testtypen End-To-End-Tests Integrationstests, Komponententests, Servicetests schnell in der Ausführung aufwändige Testumgebung nötig Systemtests Modultests Programmzeilentest Unittests Seite 17 / 42
Informationsmenge 3. Entwicklungstest: Aussagekraft Externe Qualität Interne Qualität Nach [4] Unittests Modultests Systemtests Seite 18 / 42
3. Entwicklungstest: Teststrategie Testabdeckung ca. 10 % Testausführung täglich bis wöchentlich Systemtests ca. 50 % möglichst oft Modultests möglichst hoch (>90%) nach jeder Änderung Unittests Seite 19 / 42
3. Entwicklungstest: Best practices Automatisierung aller Testtypen (Unit-, Modul- und Systemtests) Regelmäßige Ausführung durch CI-Tools Tools für CI (Continuous Integration): Hudson Jenkins Teamcity Team Foundation Server (.NET) Seite 20 / 42
3. Entwicklungstest: CI - Funktionsweise Versionskontrollsystem Prüft Aktualität Neuer Stand Continuous Integration Server Führt Build & Test aus Neuer Stand benachrichtigt Prüft Testergebnisse Entwickler Seite 21 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 22 / 42
4. Kommunikation im Entwicklerteam: Wichtigkeit Wissensaustausch (Tools, Technologien, Clean Code, Teststrategie ) Einigung auf gemeinsame Ziele (Teststrategie, Clean Code, Definition of Done, ) Arbeitsteilung ( aufeinander zu arbeiten ) Seite 23 / 42
4. Kommunikation im Entwicklerteam: Vorrausetzungen Kluge Teamzusammenstellung: Gute Stimmung im Team, hohe Motivation zur Kommunikation Soft-Skill Kommunikationsfähigkeit : Buch-Tipp: Soft-Skills für Softwareentwickler [5] Seite 24 / 42
4. Kommunikation im Entwicklerteam: Best practices Pairprogramming Regelmäßige Code-Review-Meetings Einsatz von Tools - Dokumentation: Wiki, Confluence - Issue-Tracking: Jira, Bugzilla - Sonstige: RE-Tools, EMail Seite 25 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 26 / 42
5. Release Build & Test: Best practices Automatischer Build ( Auf-Knopfdruck ) Regelmäßige Durchführung (Continuous Delivery) Java-Tools: Ant, Maven, Gradle Automatische (System-)Tests & Manueller Anlauftest Seite 27 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 28 / 42
6. Freigabe: Hochstufungsprozess Produktionsumgebung Abnahmeumgebung Integrationsumgebung Seite 29 / 42
6. Freigabe: Best practices Dreistufiger Hochstufungsprozess Automatische Freigabetests (Akzeptanztests) Manuelles freies Testen Seite 30 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 31 / 42
7. Produktionsunterstützung: Best practices Gute Produkteinführung für die Benutzer Guter Informationsaustausch zwischen Entwicklern und Betrieb (technische Administration): DevOps Guter Informationsaustausch zwischen Entwicklern und Fachseite (fachliche Administration): DevBus Guter Informationsaustausch zwischen Entwicklern und Benutzern: DevUse Seite 32 / 42
7. Produktionsunterstützung 1. Entwicklungstools 6. Freigabe Softwarequalität 2. Clean Code 4. Kommunikation im Team 5. Release Build & Test 3. Entwicklungstests Seite 33 / 42
Agenda Begriffserklärung: Entwicklung, Wartung, Test Sieben Einflussgrößen der Softwarequalität in Entwicklung und Wartung Best practices im Einsatz Zusammenfassung Seite 34 / 42
Die best practices im laufenden Projekt Symptom betrifft Abhilfe Entwickler findet seinen Code nicht 1. Entwicklungstools Bessere Tools Fehlerbehebung dauert zu lange 2. Clean Code Strukturelle Codequalität verbessern Zu viele Fehler im Release 3. Entwicklungstests Teststrategie verbessern Entwickler: Das ist nicht von mir, ich kenne mich da nicht aus. 4. Kommunikation im Team Mehr Wissensaustausch unter den Entwicklern Release Build dauert zu lange 5. Release Build & Tests Höhere Automatisierung, häufigere Builds Zu viele Fehler in der Produktion 6. Freigabe Hochstufungsprozess einführen, intensivere Freigabetests System ist technisch zu instabil 7. Produktionsunterstützung Bessere Kommunikation mit dem Betrieb (tech. Admin.) Zu viele Fehler in der Abnahmeumgebung 3. Entwicklungstests 5. Release Build & Tests Intensivere Entwicklertests Intensivere Releasetests Entwickler: It s a feature, not a bug 7. Produktionsunterstützung Bessere Produkteinführung Seite 35 / 42
Die best practices für ein neues Projekt 1. Entwicklungstools Eclipse, GIT 2. Clean Code DRY, KISS, SOLID, Automatische Softwaremetriken, 3. Entwicklungstests 4. Kommunikation im Team 5. Release Build & Tests Automatische Unit- Tests, CI Issue Tracker Automatischer Build Automatische Integrationstests Reviews, Pairprogramming, Doku-Tools Automatische Systemtests Automatische Systemtests Vieraugenprinzip im Definition of Done 6. Freigabe - Abnahmeumgebung Dreistufiger Hochstufungsprozess 7. Produktionsunterstützung Produkteinführung DevOps, DevUse, DevBus Billig Einfach Kurzweilig Ungefährlich Mausklick Kritikalität Teuer Komplex Langfristig Lebensgefährlich Seite 36 / 42
Wie wirkt sich die Anwendung der best practices aus? 1 0 011 01 00 1 1 100 01 1 01 10 1 10 0 001 11 11 0 00 10 10 01 0 01 00 011 0 1 111 01 01 010 10 1 00 11 01 1001101 0011100 0110011 1010110 0110110 1100001 1010010 1111000 0100011 0111101 1000011 1001010 0101010 1001101 ERROR Seite 37 / 42
Agenda Begriffserklärung: Entwicklung, Wartung, Test Sieben Einflussgrößen der Softwarequalität in Entwicklung und Wartung Best practices im Einsatz Zusammenfassung Seite 38 / 42
Hauptsache, es läuft? Nicht-funktionale Qualitätsmerkmale von Software Das Produkt (finales Ziel mit Selbstzweck) korrekt, skalierbar, performant, stabil, effizient, sicher (Security), zuverlässig, gesetzeskonform, gut bedienbar Der Entwicklungsprozess (Zwischenziel, nur Mittel zum Zweck) wirtschaftlich, testbar, erweiterbar, veränderbar, analysierbar, wartbar Seite 39 / 42
Zusammenfassung In Entwicklung und Wartung hat die SQ 7 Einflussgrößen Für jede Einflussgröße gibt es eine Reihe von best practices SQ kostet und zahlt sich u.u. erst langfristig aus Ein guter Entwicklungsprozess ist der Schlüssel zu einem guten Produkt Produkt und Herstellungsprozess sind gleich wichtig Seite 40 / 42
Referenzen [1] Die Clean Code Developer www.clean-code-developer.de/ [2] Effective Java: A Programming Language Guide Joshua Bloch, 2. Auflage, 2008 [3] Bug Patterns in Java Eric Allen, 2002 [4] Growing Object-Oriented Software, Guided By Tests Steve Freeman & Nat Pryce, 2010 [5] Soft Skills für Softwareentwickler Uwe Vigenshow, Björn Schneider & Ines Meyrose, 2. Auflage, 2011 Seite 41 / 42
Weiterführende Literatur Growing Object-Oriented Software, Guided By Tests Steve Freeman & Nat Pryce, 2010 Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code Robert C. Martin, 2009 Der Pragmatische Programmierer David Thomas, Andrew Hunt, Steffen Gemkow und Andreas Braig, 2003 Clean Coder: Verhaltensregeln für professionelle Programmierer Robert C. Martin, 2011 Seite 42 / 42
Fragen?
www.iks-gmbh.com