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
5. Was ist wichtiger?
Das Produkt
(finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 6 / 52
6. Funktionalität extern
Usability Zuverlässigkeit
Performanz
Sicherheit
Prüfbarkeit Installierbarkeit
Wartbarkeit
Qualität
Änderbarkeit
Testbarkeit
Architektur
Architektur Technologie
Design
Code Technologie
Design
Code intern
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 7 / 52
Quelle : http://www.dadalos-d.org/frieden/images/eisberg-modell.jpg
7. Was ist wichtiger?
Produkt und Prozess
sind gleichwichtig
extern
Das Produkt
(finales Ziel mit
Selbstzweck)
Qualität
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
intern
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 8 / 52
8. Was beeinflusst den Entwicklungsprozess?
Der Faktor Architektur und
„Mensch“ Tools Implementation
&
Technologien
9. Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 10 / 52
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: Sauber programmieren – Effizienz steigern Seite 11 / 52
11.
12. Kernaussagen der
Clean-Code-Developer-Bewegung
Disziplin Ständige Selbstkontrolle („Bewusstsein“)
(„Professionalität“) durch konsequente Anwendung („gegen
widrige Umstände“) des inneren Werte-
systems („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: Sauber programmieren – Effizienz steigern Seite 13 / 52
13. Das - Grade-System:
Schwarz Rot Orange Gelb Grün Blau Weiss
Don´t Repeat Single Level of Interface Open Closed Entwurf und
Yourself (DRY), Abstraction Segregation Principle Implementation
Keep it simple, (SLA) Principle Tell, don´t ask überlappen nicht
stupid (KISS) Single Dependency Law of Demeter Implementa-
Prinzipien
Prinzipien
Vorsicht vor Responsibility Inversion Principle tion spiegelt
Optimierungen Principle (SRP) Liskov Entwurf
Separation of Substitution You Ain´t
(VvO) Principle
Concerns (SoC) Gonna Need It
Favour
www.iks-gmbh.com
Composition over
Inheritance (FCoI)
Source Code
Konventionen
Principle of
Least
Astonishment
(YAGNI)
Information
Hiding Principle
Die Pfadfinderregel Issue Tracking Automatisierte Continuous Continuous
beachten Automatisierte Unit Tests Integration I Integration II
Root Cause Integrationstests Mockups Statische Iterative
Praktiken
Analysis Lesen, Lesen, (Testattrappen) Codeanalyse Entwicklung
Ein Versionskon- Lesen (LLL) Code Coverage (Metriken) Komponenten-
trollsystem einsetzen Reviews Analyse Inversion of orientierung
Einfache Refakto- Teilnahme an Control Container Test first
risierungsmuster an- Fachveranstal- Erfahrung
wenden (ER) tungen weitergeben
Täglich reflektieren Komplexe Re- Messen von
faktorisierungen Fehlern
14. Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 15 / 52
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
Gegen Schmutz muss regelmäßig gearbeitet werden!
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 19 / 52
19. Unter Zeitdruck programmieren – Effizienz steigern wieder „Quick & Dirty“ gearbeitet! / 52
Team Clean Coding: Sauber
wird dann sowieso Seite 20
20. Kosten
Qualität
Termine
Kosten
Termine
Qualität
CCD-Professionalität Technische Schulden
leben und seinen Prinzipien bewußt eingehen und
treu Clean Coding: Sauber programmieren – Effizienz steigern
Team bleiben. bewußt wieder begleichen. / 52
Seite 21
21. Clean Code kostet zusätzliche Zeit Clean Code spart Zeit
in der Entwicklung! in der Wartung!
22. Kritikalität
Langlebigkeit
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 23 / 52
23. Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 24 / 52
24. Zusammenhang zwischen CCD und TCC
Prinzipien & Praktiken, Teamarbeit,
→ Selbstkontrolle & Werte- → Kommunikation &
system 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: Sauber programmieren – Effizienz steigern Seite 25 / 52
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)
Wechselseitige Kontrolle auf Augenhöhe
Motivation durch wortlose Anerkennung
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 26 / 52
26. TCC: „Verfassung/Konstitution“
Notwendiger Basis-Konsens
§1 ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich,
Regeln und Prozesse anzuerkennen, die für ALLE gleicher-
maßen bindend sind.
§2 Diese Regeln und Prozesse können bei Bedarf jederzeit
angepasst werden.
§3 Zuerst wird ein Verfahren zur Entscheidungsfindung festgelegt
(Definition der „Legislative“).
§4 Die „Legislative“ legt einen Satz von Basisregeln fest
(das „Grundgesetz“).
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 27 / 52
27. 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: Sauber programmieren – Effizienz steigern Seite 28 / 52
29. Ein Fall läuft
Die guten Fälle laufen
Fehlerfälle wurden untersucht
„Alle“ Fehler berücksichtigt
Unit-Tests
Integrationstests
Systemtests
Automatische Code-Analysen (Metriken)
Menschliche Code-Analysen (Review)
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 30 / 52
30. TCC: „Verfassung/Grundgesetz“
Projekt-unspezifische Grundregeln
Wie wollen wir Information festhalten? → Dokumentation
Was bedeutet für uns „fertig“? → Definition Of Done
Was heißt für uns „clean“? → CCD-Regeln
Wie gehen wir mit unfertigem Code um? → Code Tagging
Wie ist unser Umgang mit „fremdem Eigentum“?
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 31 / 52
31. TCC: „das Parlament“
Forum für Informationsaustausch und Diskussionen sowie
Verabschiedung weiterer (Projekt-spezifischer) Regeln
Daily Standups (Scrum-ähnlich)
Regelmäßige Team-Reviews
Retrospektiven
Coding-Notes kommunizieren (z.B. E-Mail an Team-Verteiler)
Pair-Programming
4 - Reviews
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 32 / 52
32. TCC: „das Ordungsamt“
4 -Review
Am Ende der Entwicklung eines Software-Teils sucht der Autor nach
einem Teammitglied, das als Reviewer dient. Dieser prüft:
Funktionelle Korrektheit
Ausreichende Testabdeckung
FIXME- / TODO-Einträge
Einhaltung der im Team abgestimmten Clean-Code-Maßnahmen
Erst nach dem OK des Reviewers gilt der Teil offiziell als FERTIG!
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 33 / 52
33. TCC: „die Judikative“
Die 1€-Regel
Ein Euro wird eingezogen bei Vergehen gegen zuvor abgestimmte Regeln,
deren Verstoß von der „Legislative“ 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: Sauber programmieren – Effizienz steigern Seite 34 / 52
34. Das Team Clean Coding: Zusammenfassung
Basis-Konsens „Verfassung/Konstitution“
Definition der Entscheidungsfindung „Verfassung/Legislative“
Festlegung Projekt-unspezifischer Regeln „Verfassung/Grundgesetz“
Diskussionsforum „das Parlament“
4 - Review „das Ordnungsamt“
1€-Regel „die Judikative“
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 35 / 52
35. Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 36 / 52
36. TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Haufen Gruppe Team
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 37 / 52
37. 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: Sauber programmieren – Effizienz steigern Seite 38 / 52
38. 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: Sauber programmieren – Effizienz steigern Seite 39 / 52
39. 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: Sauber programmieren – Effizienz steigern Seite 40 / 52
40. Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 41 / 52
41. Rückblick Rückblick
Was ist wichtiger?
Produkt und Prozess
sind gleichwichtig
extern
Das Produkt
(finales Ziel mit
Selbstzweck)
Qualität
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
intern
Rückblick
Team Clean Coding: Sauber programmieren – Effizienz steigern
Rückblick
Seite 42 / 52
42. Rückblick Rückblick
Kosten
Qualität
Termine
Kosten
Termine
Qualität
CCD-Professionalität Technische Schulden
leben und seinen Prinzipien bewußt eingehen und
Rückblick
treu Clean Coding: Sauber programmieren – Effizienz steigern
Team bleiben.
Rückblick
bewußt wieder begleichen. / 52
Seite 43
43. Rückblick Rückblick
Sauberer Code - Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Gegen Schmutz muss regelmäßig gearbeitet werden!
Rückblick
Team Clean Coding: Sauber programmieren – Effizienz steigern
Rückblick
Seite 44 / 52
44. Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 45 / 52
45. Rückblick Rückblick
Das - Grade-System:
Schwarz Rot Orange Gelb Grün Blau Weiss
Don´t Repeat Single Level of Interface Open Closed Entwurf und
Yourself (DRY), Abstraction Segregation Principle Implementation
Keep it simple, (SLA) Principle Tell, don´t ask überlappen nicht
stupid (KISS) Single Dependency Law of Demeter Implementa-
Prinzipien
Vorsicht vor Responsibility Inversion Principle tion spiegelt
Prinzipien
Optimierungen Principle (SRP) Liskov Entwurf
Separation of Substitution You Ain´t
(VvO) Principle
Concerns (SoC) Gonna Need It
Favour
www.iks-gmbh.com
Composition over
Inheritance (FCoI)
Source Code
Konventionen
Principle of
Least
Astonishment
(YAGNI)
Information
Hiding Principle
Die Pfadfinderregel Issue Tracking Automatisierte Continuous Continuous
beachten Automatisierte Unit Tests Integration I Integration II
Root Cause Integrationstests Mockups Statische Iterative
Praktiken
Analysis Lesen, Lesen, (Testattrappen) Codeanalyse Entwicklung
Praktiken
Ein Versionskon- Lesen (LLL) Code Coverage (Metriken) Komponenten-
trollsystem einsetzen Reviews Analyse Inversion of orientierung
Einfache Refakto- Teilnahme an Control Container Test first
risierungsmuster an- Fachveranstal- Erfahrung
wenden (ER) tungen weitergeben
Täglich reflektieren Komplexe Re- Messen von
faktorisierungen Fehlern
Rückblick Team Clean Coding: Sauber programmieren – Effizienz steigern
Rückblick
Seite 46 / 52
46. 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: Sauber programmieren – Effizienz steigern Seite 47 / 52
47. Rückblick Rückblick
Das Team Clean Coding: Zusammenfassung
Basis-Konsens „Verfassung/Konstitution“
Definition der Entscheidungsfindung „Verfassung/Legislative“
Festlegung Projekt-unspezifischer Regeln „Verfassung/Grundgesetz“
Diskussionsforum „das Parlament“
4 - Review „das Ordnungsamt“
1€-Regel „die Judikative“
Rückblick
Team Clean Coding: Sauber programmieren – Effizienz steigern
Rückblick
Seite 48 / 52
48. 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: Sauber programmieren – Effizienz steigern
Rückblick
Seite 49 / 52
49. 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: Sauber programmieren – Effizienz steigern Seite 50 / 52
50. Take-Home-Message
Sauber programmieren führt zu Qualität und Effizienz,
benötigt aber Unterstützung aus dem Umfeld!
Team Clean Coding: Sauber programmieren – Effizienz steigern Seite 51 / 52
51. 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: Sauber programmieren – Effizienz steigern Seite 52 / 52
53. 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: Sauber programmieren – Effizienz steigern Seite 54 / 52
54. 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: Sauber programmieren – Effizienz steigern Seite 55 / 52