Die Qualitätsanforderungen an Individualsoftware sind hoch. Sie soll funktional, zuverlässig, benutzerfreundlich und wartbar sein. Nicht zuletzt muss die Kosten-Nutzen-Relation stimmen.
Weitere Vorträge, die wir auch gern in Ihrem Unternehmen halten, finden Sie unter: https://www.iks-gmbh.com/impulsvortraege
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Mehr Softwarequalität: Team-Cleancoding
1. Team Clean Coding:
Gemeinsam besser programmieren
iks Thementag
„Mehr Softwarequalität – Ausgewählte Themen“
12.11.2013
Autor:
Dr. Reik Oberrath
Team Clean Coding: Gemeinsam besser programmieren
Seite 2 / 59
5. Was ist wichtiger?
Das Produkt
(Finales Ziel mit
Selbstzweck)
Der Entwicklungsprozess
(Zwischenziel, nur
Mittel zum Zweck)
Team Clean Coding: Gemeinsam besser programmieren
Seite 6 / 59
7. Was ist wichtiger?
Produkt und Prozess
sind gleich wichtig
extern
Das Produkt
(Finales Ziel mit
Selbstzweck)
Qualität
Der Entwicklungsprozess
(Zwischenziel, nur
Mittel zum Zweck)
intern
Team Clean Coding: Gemeinsam besser programmieren
Seite 8 / 59
8. Was beeinflusst den Entwicklungsprozess?
Der Faktor
„Mensch“
Tools
&
Technologien
Architektur und
Implementation
10. Was heißt clean?
Def. 1:
Clean ist alles, was intuitiv verständlich ist, also
(Quellcode-) Dokumente, Datenstrukturen,
Konzepte, Regeln, Verfahren ....
Def. 2:
Intuitiv verständlich ist, was mit wenig Spezialwissen
in kurzer Zeit richtig verstanden wird.
Def. 3:
Clean ist alles, was effizient ist, also alles, was
die Softwareentwicklung beschleunigt.
Team Clean Coding: Gemeinsam besser programmieren
Seite 11 / 59
11.
12. Kernaussagen der
Clean-Code-Developer-Bewegung
Disziplin
(„Professionalität“)
Ständige Selbstkontrolle („Bewusstsein“)
durch konsequente Anwendung („gegen
widrige Umstände“) des inneren Wertesystems („Prinzipien“).
Wertesystem
Das Buch „Clean Code“ ist wert, als
allgemeingültiges Wertesystem anerkannt
zu werden.
Programmieralltag
Das CCD-Grade-System hilft, das innere
Wertesystem aktiv einzusetzen und die
mentale CCD-Einstellung zu verinnerlichen.
www.clean-code-developer.de
Team Clean Coding: Gemeinsam besser programmieren
Seite 13 / 59
13. Das
Praktiken
Prinzipien
Prinzipien
Schwarz
- Grade-System:
Rot
Orange
Gelb
Grün
Blau
Don´t Repeat
Yourself (DRY),
Keep it simple,
stupid (KISS)
Vorsicht vor
Optimierungen
(VvO)
Favour
Composition over
Inheritance (FCoI)
Single Level of
Abstraction
(SLA)
Single
Responsibility
Principle (SRP)
Separation of
Concerns (SoC)
Source Code
Konventionen
Interface
Segregation
Principle
Dependency
Inversion Principle
Liskov
Substitution
Principle
Principle of
Least
Astonishment
Information
Hiding Principle
Open Closed
Principle
Tell, don´t ask
Law of Demeter
Entwurf und
Implementation
überlappen nicht
Implementation spiegelt
Entwurf
You Ain´t
Gonna Need It
(YAGNI)
Die Pfadfinderregel
beachten
Root Cause
Analysis
Ein Versionskontrollsystem einsetzen
Einfache Refaktorisierungsmuster anwenden (ER)
Täglich reflektieren
Issue Tracking
Automatisierte
Integrationstests
Lesen, Lesen,
Lesen (LLL)
Reviews
Automatisierte
Unit Tests
Mockups
(Testattrappen)
Code Coverage
Analyse
Teilnahme an
Fachveranstaltungen
Komplexe Refaktorisierungen
Continuous
Integration I
Statische
Codeanalyse
(Metriken)
Inversion of
Control Container
Erfahrung
weitergeben
Messen von
Fehlern
www.iks-gmbh.com
Continuous
Integration II
Iterative
Entwicklung
Komponentenorientierung
Test first
Weiss
17. www.iks-gmbh.com
Clean-Code ist was für Spießer – wichtig ist nur, dass es läuft!
Wichtig sind Funktionsfähigkeit, Stabilität, Wartbarkeit und Erweiterbarkeit.
Dazu braucht man keinen Clean-Code!
18. Sauberer Code – Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Schmutz akkumuliert von alleine.
Schmutz stellt eine reale Gefahr für die Entwicklung dar.
Team Clean Coding: Gemeinsam besser programmieren
Seite 19 / 59
19. Unter Zeitdruck wird dann sowieso wieder „Quick & Dirty“ gearbeitet! / 59
Team Clean Coding: Gemeinsam besser programmieren
Seite 20
24. Zusammenhang zwischen CCD und TCC
Prinzipien,
Praktiken,
Selbstkontrolle
Teamarbeit,
Kommunikation,
Teamkontrolle
Unterschiede:
Es gibt zusätzliche Regeln, die das Teamplay betreffen
z.B. 1€-Regel oder Code-Tagging
Appell an die Vernunft der Entwickler zu schwach,
eine soziale Form von Kontrolle ist nötig
Team Clean Coding: Gemeinsam besser programmieren
Seite 25 / 59
25. Das Team Clean Coding
Warum TCC?
Gute Vorsätze schwinden schnell Verrottung
Unterschiedliche Meinungen Wildwuchs
Mittel gegen die „Durchsetzungsstarken“
(Die Stillen sind nicht automatisch schlechter)
Eine soziale, wechselseitige Kontrolle auf Augenhöhe
Motivation durch wortlose Anerkennung
Team Clean Coding: Gemeinsam besser programmieren
Seite 26 / 59
26. Das Team Clean Coding: Übersicht
Konstitution
Judikative
Kontrolle
Def. der
Legislative
Initialisierung
Grundgesetz
Ordnungsamt
Executive
Legislative
Anwendung
Parlament
Optimierung
Team Clean Coding: Gemeinsam besser programmieren
Seite 27 / 59
28. TCC: „Verfassung/Konstitution“
Notwendiger Basis-Konsens
§1.1
ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich,
Regeln und Prozesse anzuerkennen, die für ALLE gleichermaßen bindend sind.
§1.2
Diese Regeln und Prozesse können bei Bedarf jederzeit
angepasst werden.
§2
Zuerst wird ein Verfahren zur Entscheidungsfindung festgelegt
(Definition der „Legislative“).
§3
Die „Legislative“ legt einen Satz von Basisregeln fest
(das „Grundgesetz“).
Team Clean Coding: Gemeinsam besser programmieren
Seite 29 / 59
29. TCC: „Verfassung/Legislative“
Methoden zur Entscheidungsfindung
Vorgabe durch Projektleiter / Chefentwickler / Architekt
Mehrheitsbeschluss
Minimierung des durchschn. Widerstands
– Vetoabfrage
– Konsensrunde
– Thumb-Voting
„Konsens bedeutet die Übereinstimmung von Menschen hinsichtlich einer
Thematik ohne verdeckten oder offenen Widerspruch.“ - Wikipedia
Team Clean Coding: Gemeinsam besser programmieren
Seite 30 / 59
31. Ein Anwendungsfall läuft
Die guten Anwendungsfälle laufen
Fehlerfälle wurden untersucht
Alle Anwendungsfälle laufen
Unit-Tests
Integrationstests
Systemtests
Automatische Code-Analysen (Metriken)
Menschliche Code-Analysen (Review)
Team Clean Coding: Gemeinsam besser programmieren
Seite 32 / 59
32. TCC: „Verfassung/Grundgesetz“
Projekt-unspezifische Grundregeln
§3.1 Wie wollen wir Information festhalten?
→ Dokumentation
§3.2 Was bedeutet für uns „fertig“?
→ Definition Of Done
§3.3 Was heißt für uns „clean“?
→ CCD-Regeln
§3.4 Wie gehen wir mit unfertigem Code um? → Code Tagging System
§3.5 Wie ist unser Umgang mit „fremdem Eigentum“?
Team Clean Coding: Gemeinsam besser programmieren
Seite 33 / 59
34. TCC: „Exekutive“
Programmieralltag (Anforderungen analysieren,
implementieren, Qualität sichern, …)
CCD- und TCC-Regeln im Bewusstsein halten
Seinem Berufsethos auch unter widrigen Umständen treu bleiben
Team Clean Coding: Gemeinsam besser programmieren
Seite 35 / 59
35. TCC: „Parlament/Legislative“
Forum für Informationsaustausch und Diskussionen sowie
Verabschiedung weiterer (Projekt-spezifischer) Regeln
Daily Standups (Scrum-ähnlich)
Regelmäßige Team-Reviews
Retrospektiven
Pair-Programming
Coding-Notes kommunizieren (z.B. E-Mail an Team-Verteiler)
Team Clean Coding: Gemeinsam besser programmieren
Seite 36 / 59
37. TCC: „Ordnungsamt“
4
- Review
Am Ende der Entwicklung eines Software-Teils sucht der Autor nach
einem Teammitglied, das als Reviewer dient. Dieser prüft:
Funktionelle Korrektheit
DoD erfüllt, z.B.
– Ausreichende Testabdeckung
– Einhaltung der abgestimmten Clean-Code-Maßnahmen
FIXME- / TODO-Einträge (Code Tagging System)
Erst nach dem OK des Reviewers gilt der Teil offiziell als FERTIG.
Team Clean Coding: Gemeinsam besser programmieren
Seite 38 / 59
38. TCC: „Judikative“
Die 1€-Regel
Ein Euro wird eingezogen bei Vergehen gegen zuvor abgestimmte
Regeln, deren Verstoß von der „Legislativen“ als „strafbar“ gewertet wurde.
Beispiele:
CI-Build brechen und nach Hause gehen,
Tests brechen und sich nicht um deren Behebung bemühen,
Backend-Änderungen ohne Client-Anpassung,
Domain-Änderungen ohne DB-Skript-Anpassung,
etc.
Team Clean Coding: Gemeinsam besser programmieren
Seite 39 / 59
42. TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Bewusste Teamzusammenstellung
Retrospektive-Meetings / gemeinsames Essengehen
Bei Bedarf Teamzusammenstellung ändern
Organisationsstruktur des Teams ändern
•
Hierarchisch
•
Parlamentarisch
•
Selbstorganisiert
Team Clean Coding: Gemeinsam besser programmieren
Seite 43 / 59
43. TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Zeit für Kommunikation im Team einplanen
Tägliche Standup-Meetings
Wöchentliche Code-Review-Meetings
Monatliche Retrospektive-Meetings
Team Clean Coding: Gemeinsam besser programmieren
Seite 44 / 59
44. TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Zeit für Kommunikation im Team einplanen
Fortbildung der Teammitglieder unterstützen
Akzeptanz signalisieren und Infrastruktur bereitstellen
Team Clean Coding: Gemeinsam besser programmieren
Seite 45 / 59
46. Rückblick
Rückblick
Was ist wichtiger?
Produkt und Prozess
sind gleich wichtig
extern
Das Produkt
(Finales Ziel mit
Selbstzweck)
Qualität
Der Entwicklungsprozess
(Zwischenziel, nur
Mittel zum Zweck)
intern
Rückblick
Team Clean Coding: Gemeinsam besser programmieren
Rückblick
Seite 47 / 59
48. Rückblick
Sauberer Code – Hohe Testabdeckung
Rückblick
Produktionscode
Testabdeckung
Testcode
Gegen Schmutz muss regelmäßig gearbeitet werden!
Rückblick
Team Clean Coding: Gemeinsam besser programmieren
Rückblick
Seite 49 / 59
50. Rückblick
Das
Praktiken
Praktiken
Prinzipien
Prinzipien
Schwarz
Rückblick
- Grade-System:
Rot
Orange
Gelb
Grün
Blau
Don´t Repeat
Yourself (DRY),
Keep it simple,
stupid (KISS)
Vorsicht vor
Optimierungen
(VvO)
Favour
Composition over
Inheritance (FCoI)
Single Level of
Abstraction
(SLA)
Single
Responsibility
Principle (SRP)
Separation of
Concerns (SoC)
Source Code
Konventionen
Interface
Segregation
Principle
Dependency
Inversion Principle
Liskov
Substitution
Principle
Principle of
Least
Astonishment
Information
Hiding Principle
Open Closed
Principle
Tell, don´t ask
Law of Demeter
Entwurf und
Implementation
überlappen nicht
Implementation spiegelt
Entwurf
You Ain´t
Gonna Need It
(YAGNI)
Die Pfadfinderregel
beachten
Root Cause
Analysis
Ein Versionskontrollsystem einsetzen
Einfache Refaktorisierungsmuster anwenden (ER)
Täglich reflektieren
Issue Tracking
Automatisierte
Integrationstests
Lesen, Lesen,
Lesen (LLL)
Reviews
Automatisierte
Unit Tests
Mockups
(Testattrappen)
Code Coverage
Analyse
Teilnahme an
Fachveranstaltungen
Komplexe Refaktorisierungen
Continuous
Integration I
Statische
Codeanalyse
(Metriken)
Inversion of
Control Container
Erfahrung
weitergeben
Messen von
Fehlern
www.iks-gmbh.com
Rückblick
Team Clean Coding: Gemeinsam besser programmieren
Weiss
Continuous
Integration II
Iterative
Entwicklung
Komponentenorientierung
Test first
Rückblick
Seite 51 / 59
51. Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
Die CCD-Regeln sind bewährte Mittel zur Steigerung von
Qualität und Effizienz
Team Clean Coding: Gemeinsam besser programmieren
Seite 52 / 59
53. Rückblick
Rückblick
Das Team Clean Coding
Warum TCC?
Gute Vorsätze schwinden schnell Verrottung
Unterschiedliche Meinungen Wildwuchs
Mittel gegen die „Durchsetzungsstarken“
(Die Stillen sind nicht automatisch schlechter)
Wechselseitige Kontrolle auf Augenhöhe
Motivation durch wortlose Anerkennung
Rückblick
Team Clean Coding: Gemeinsam besser programmieren
Rückblick
Seite 54 / 59
54. Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
Die CCD-Regeln sind bewährte Mittel zur Steigerung von
Qualität und Effizienz
TCC fördert die Kommunikation im Team und die konsequente
Anwendung der CCD-Regeln
Rahmenbedingungen für TCC müssen stimmen
Teamstimmung beachten und fördern
Zeit für Kommunikation im Team einplanen
Fortbildung der Teammitglieder unterstützen
Akzeptanz signalisieren und Infrastruktur bereitstellen
Team Clean Coding: Gemeinsam besser programmieren
Seite 55 / 59
55. Take-Home-Message
CCD und TCC führen zu Qualität und Effizienz,
benötigen aber Unterstützung aus dem Umfeld!
Team Clean Coding: Gemeinsam besser programmieren
Seite 56 / 59
56. Weiterführende Literatur
Clean Code, Robert C. Martin, Prentice Hall, 2008
The Clean Coder, Robert C. Martin, Prentice Hall, 2011
Clean Coder: Verhaltensregeln für professionelle Programmierer,
Robert C. Martin, Addison-Wesley, 2011
The Pragmatic Programmer, Addison-Wesley, 1999
Soft Skills für Softwareentwickler, dpunkt-Verlag, 2010
http://www.clean-code-developer.de
http://de.wikipedia.org/wiki/Clean_Code
http://www.clean-code.info
Team Clean Coding: Gemeinsam besser programmieren
Seite 57 / 59
57. Bildernachweise
Die in diesem Vortrag verwendeten Bilder stammen von folgenden Quellen:
Folie 3:
http://www.flickr.com
Folie 4:
http://www.flickr.com/photos/23313526@N07/4948442428/sizes/l/in/photostream/
http://www.flickr.com/photos/29747502@N03/2784238062/sizes/l/in/photostream/
Folie 5:
http://www.flickr.com/photos/buridansesel/6163446452/sizes/l/in/photostream/
Folie 7,8,9:
http://officeimg.vo.msecnd.net/en-us/images/MB900443111.jpg
http://officeimg.vo.msecnd.net/en-us/images/MB900443251.jpg
http://www.dadalos-d.org/frieden/images/eisberg-modell.jpg
Folie 11:
http://www.hborchert.de/medihumor.htm
http://hdfreewallpaper.info/fishy-ubuntu-1920-x-1080.html
Folie 12:
http://photos.signonsandiego.com/album55/mud02
Folie 16:
http://freepostermaker.com/uploads/saved_posters/free-poster-dnxeoi88fg-WILLIES-WASH.jpg
Folie 28:
http://www.flickr.com/photos/oskay/437341603/
Team Clean Coding: Gemeinsam besser programmieren
Seite 58 / 59
58. Weitere Bildernachweise
1.
Die meisten nicht separat aufgeführten Icons stammen von
http://office.microsoft.com/en-us/images und http://office.microsoft.com/de-de/images.
2.
Andere nicht aufgeführte Bilder (z.B. auf Folie 17) wurden von den Autoren selbst erstellt.
3.
CCD-Logo http://www.clean-code-developer.de
4.
Wasserrad http://www.wasserrad-drews.de/
Team Clean Coding: Gemeinsam besser programmieren
Seite 59 / 59