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. Seite 6 / 59Team Clean Coding: Gemeinsam besser programmieren
Das Produkt
(Finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
6. Seite 7 / 59Team Clean Coding: Gemeinsam besser programmieren
Architektur
Design
Technologie
Code
Architektur
Design
Technologie
Code
Funktionalität
Testbarkeit
Wartbarkeit
Usability Zuverlässigkeit
Prüfbarkeit Installierbarkeit
Änderbarkeit
Performanz
Sicherheit
extern
intern
Quelle : http://www.dadalos-d.org/frieden/images/eisberg-modell.jpg
Qualität
7. Seite 8 / 59Team Clean Coding: Gemeinsam besser programmieren
Das Produkt
(Finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
extern
intern
Produkt und Prozess
sind gleich wichtig
Qualität
9. Seite 10 / 59Team Clean Coding: Gemeinsam besser programmieren
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
10. Seite 11 / 59Team Clean Coding: Gemeinsam besser programmieren
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.
Was heißt clean?
Def. 3: Clean ist alles, was effizient ist, also alles, was
die Softwareentwicklung beschleunigt.
11.
12. Seite 13 / 59Team Clean Coding: Gemeinsam besser programmieren
Kernaussagen der
Clean-Code-Developer-Bewegung
Disziplin Ständige Selbstkontrolle („Bewusstsein“)
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
(„Professionalität“)
13. www.iks-gmbh.com
PrinzipienPraktiken
Continuous
Integration I
Statische
Codeanalyse
(Metriken)
Inversion of
Control Container
Erfahrung
weitergeben
Messen von
Fehlern
Open Closed
Principle
Tell, don´t ask
Law of Demeter
Grün
Continuous
Integration II
Iterative
Entwicklung
Komponenten-
orientierung
Test first
Entwurf und
Implementation
überlappen nicht
Implementa-
tion spiegelt
Entwurf
You Ain´t
Gonna Need It
(YAGNI)
Blau
Automatisierte
Unit Tests
Mockups
(Testattrappen)
Code Coverage
Analyse
Teilnahme an
Fachveranstal-
tungen
Komplexe Re-
faktorisierungen
Issue Tracking
Automatisierte
Integrationstests
Lesen, Lesen,
Lesen (LLL)
Reviews
Die Pfadfinderregel
beachten
Root Cause
Analysis
Ein Versionskon-
trollsystem einsetzen
Einfache Refakto-
risierungsmuster an-
wenden (ER)
Täglich reflektieren
Interface
Segregation
Principle
Dependency
Inversion Principle
Liskov
Substitution
Principle
Principle of
Least
Astonishment
Information
Hiding Principle
Single Level of
Abstraction
(SLA)
Single
Responsibility
Principle (SRP)
Separation of
Concerns (SoC)
Source Code
Konventionen
Don´t Repeat
Yourself (DRY),
Keep it simple,
stupid (KISS)
Vorsicht vor
Optimierungen
(VvO)
Favour
Composition over
Inheritance (FCoI)
WeissGelbOrangeRotSchwarz
PrinzipienPraktiken
Das - Grade-System:
14. Seite 15 / 59Team Clean Coding: Gemeinsam besser programmieren
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
15. www.iks-gmbh.com
Clean Code ist gut, man kann es aber leicht übertreiben!
Clean Code ist gut, aber praxisfern – eher etwas für Ästheten!
18. Seite 19 / 59Team Clean Coding: Gemeinsam besser programmieren
Sauberer Code – Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Schmutz akkumuliert von alleine.
Schmutz stellt eine reale Gefahr für die Entwicklung dar.
19. Seite 20 / 59Team Clean Coding: Gemeinsam besser programmieren
Unter Zeitdruck wird dann sowieso wieder „Quick & Dirty“ gearbeitet!
20. Seite 21 / 59Team Clean Coding: Gemeinsam besser programmieren
CCD-Professionalität
leben und seinen Prinzipien
treu bleiben.
Technische Schulden
bewusst eingehen und
bewusst wieder begleichen.
Termine
Termine
Qualität
Qualität
Kosten
Kosten
21. Clean Code kostet zusätzliche Zeit
in der Entwicklung!
Clean Code spart Zeit
in der Wartung!
22. Seite 23 / 59Team Clean Coding: Gemeinsam besser programmieren
Langlebigkeit
Kritikalität
23. Seite 24 / 59Team Clean Coding: Gemeinsam besser programmieren
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
24. Seite 25 / 59Team Clean Coding: Gemeinsam besser programmieren
Zusammenhang zwischen CCD und TCC
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
Prinzipien,
Praktiken,
Selbstkontrolle
Teamarbeit,
Kommunikation,
Teamkontrolle
25. Seite 26 / 59Team Clean Coding: Gemeinsam besser programmieren
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
26. Seite 27 / 59Team Clean Coding: Gemeinsam besser programmieren
Das Team Clean Coding: Übersicht
Initialisierung
Anwendung
Optimierung
Kontrolle
Def. der
Legislative
Grund-
gesetz
Konsti-
tution
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
27. Seite 28 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Übersicht
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
28. Seite 29 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC: „Verfassung/Konstitution“
Notwendiger Basis-Konsens
§1.1 ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich,
Regeln und Prozesse anzuerkennen, die für ALLE gleicher-
maß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“).
29. Seite 30 / 59Team Clean Coding: Gemeinsam besser programmieren
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
30. Seite 31 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC: „Verfassung/Grundgesetz“
Basisregeln (Projekt-unspezifische Regeln)
§3.1 Wie wollen wir Information festhalten? → Dokumentation
§3.2 Was bedeutet für uns „fertig“? → Definition Of Done
31. Seite 32 / 59Team Clean Coding: Gemeinsam besser programmieren
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)
32. Seite 33 / 59Team Clean Coding: Gemeinsam besser programmieren
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“?
33. Seite 34 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Übersicht
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Optimierung Anwendung
Basiskonsens
Methode der
Entscheidungsfindung
Projekt-
unspezifische
Regeln
34. Seite 35 / 59Team Clean Coding: Gemeinsam besser programmieren
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
35. Seite 36 / 59Team Clean Coding: Gemeinsam besser programmieren
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)
36. Seite 37 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Übersicht
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Optimierung Anwendung
Basiskonsens
Methode der
Entscheidungsfindung
Projekt-
unspezifische
Regeln
Kontrolle
Diskussions-
forum
ProjektalltagProjekt-
spezifische
Regeln
37. Seite 38 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC: „Verfassungsschutz“
4 - Review
Am Ende der Entwicklung eines Software-Tasks 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.
38. Seite 39 / 59Team Clean Coding: Gemeinsam besser programmieren
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.
39. Seite 40 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Übersicht
1€-Regeln
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Optimierung Anwendung
Basiskonsens
Methode der
Entscheidungsfindung
Projekt-
unspezifische
Regeln
Kontrolle
Diskussions-
forum
ProjektalltagProjekt-
spezifische
Regeln
4 -
Review
40. Seite 41 / 59Team Clean Coding: Gemeinsam besser programmieren
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
41. Seite 42 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Haufen Gruppe Team
42. Seite 43 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Bewusste Teamzusammenstellung
Retrospektive-Meetings / gemeinsames Essengehen
Bei Bedarf Teamzusammenstellung ändern
Organisationsstruktur des Teams ändern
• Hierarchisch
• Parlamentarisch
• Selbstorganisiert
43. Seite 44 / 59Team Clean Coding: Gemeinsam besser programmieren
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
44. Seite 45 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Zeit für Kommunikation im Team einplanen
Fortbildung der Teammitglieder unterstützen
Akzeptanz signalisieren und Infrastruktur bereitstellen
45. Seite 46 / 59Team Clean Coding: Gemeinsam besser programmieren
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
46. Seite 47 / 59Team Clean Coding: Gemeinsam besser programmieren
Das Produkt
(Finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess
(Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
extern
intern
Produkt und Prozess
sind gleich wichtig
Rückblick
Rückblick
Rückblick
Rückblick
Qualität
47. Seite 48 / 59Team Clean Coding: Gemeinsam besser programmieren
CCD-Professionalität
leben und seinen Prinzipien
treu bleiben.
Technische Schulden
bewusst eingehen und
bewusst wieder begleichen.
Termine
Termine
Qualität
Qualität
Kosten
Kosten
Rückblick
Rückblick
Rückblick
Rückblick
48. Seite 49 / 59Team Clean Coding: Gemeinsam besser programmierenGegen Schmutz muss regelmäßig gearbeitet werden!
Sauberer Code – Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Rückblick
Rückblick
Rückblick
Rückblick
49. Seite 50 / 59Team Clean Coding: Gemeinsam besser programmieren
Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
50. Seite 51 / 59Team Clean Coding: Gemeinsam besser programmieren
www.iks-gmbh.com
PrinzipienPraktiken
Continuous
Integration I
Statische
Codeanalyse
(Metriken)
Inversion of
Control Container
Erfahrung
weitergeben
Messen von
Fehlern
Open Closed
Principle
Tell, don´t ask
Law of Demeter
Grün
Continuous
Integration II
Iterative
Entwicklung
Komponenten-
orientierung
Test first
Entwurf und
Implementation
überlappen nicht
Implementa-
tion spiegelt
Entwurf
You Ain´t
Gonna Need It
(YAGNI)
Blau
Automatisierte
Unit Tests
Mockups
(Testattrappen)
Code Coverage
Analyse
Teilnahme an
Fachveranstal-
tungen
Komplexe Re-
faktorisierungen
Issue Tracking
Automatisierte
Integrationstests
Lesen, Lesen,
Lesen (LLL)
Reviews
Die Pfadfinderregel
beachten
Root Cause
Analysis
Ein Versionskon-
trollsystem einsetzen
Einfache Refakto-
risierungsmuster an-
wenden (ER)
Täglich reflektieren
Interface
Segregation
Principle
Dependency
Inversion Principle
Liskov
Substitution
Principle
Principle of
Least
Astonishment
Information
Hiding Principle
Single Level of
Abstraction
(SLA)
Single
Responsibility
Principle (SRP)
Separation of
Concerns (SoC)
Source Code
Konventionen
Don´t Repeat
Yourself (DRY),
Keep it simple,
stupid (KISS)
Vorsicht vor
Optimierungen
(VvO)
Favour
Composition over
Inheritance (FCoI)
WeissGelbOrangeRotSchwarz
PrinzipienPraktiken
Das - Grade-System:
Rückblick
Rückblick
Rückblick
Rückblick
51. Seite 52 / 59Team Clean Coding: Gemeinsam besser programmieren
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
52. Seite 53 / 59Team Clean Coding: Gemeinsam besser programmieren
TCC-Übersicht
1€-Regeln
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Optimierung Anwendung
Basiskonsens
Methode der
Entscheidungsfindung
Projekt-
unspezifische
Regeln
Kontrolle
Diskussions-
forum
ProjektalltagProjekt-
spezifische
Regeln
4 -
Review
Rückblick Rückblick
Rückblick Rückblick
53. Seite 54 / 59Team Clean Coding: Gemeinsam besser programmieren
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
Rückblick
Rückblick
Rückblick
54. Seite 55 / 59Team Clean Coding: Gemeinsam besser programmieren
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
55. Seite 56 / 59Team Clean Coding: Gemeinsam besser programmieren
Take-Home-Message
CCD und TCC führen zu Qualität und Effizienz,
benötigen aber Unterstützung aus dem Umfeld!
56. Seite 57 / 59Team Clean Coding: Gemeinsam besser programmieren
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
57. Seite 58 / 59Team Clean Coding: Gemeinsam besser programmieren
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/
58. Seite 59 / 59Team Clean Coding: Gemeinsam besser programmieren
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/