View
320
Download
1
Category
Preview:
DESCRIPTION
Die Qualitätsanforderungen an Individualsoftware sind hoch. Sie soll funktional, zuverlässig, benutzerfreundlich und wartbar sein. Nicht zuletzt muss die Kosten-Nutzen-Relation stimmen.
Citation preview
Seite 2 / 59 Team Clean Coding: Gemeinsam besser programmieren
Team Clean Coding:
Gemeinsam besser programmieren
iks Thementag
„Mehr Softwarequalität – Ausgewählte Themen“
22.05.2014
Autor:
Dr. Reik Oberrath
Was ist das Ziel der Softwareentwicklung?
Ein Produkt, das
den Auftraggeber
zufrieden stellt!
Und einen zuverlässigen, effektiven Herstellungsprozess!
Seite 6 / 59 Team Clean Coding: Gemeinsam besser programmieren
Das Produkt (Finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess (Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
Seite 7 / 59 Team 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
Qu
alitä
t
Seite 8 / 59 Team 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
Qu
alitä
t
Der Faktor
„Mensch“
Architektur und
Implementation Tools
&
Technologien
Was beeinflusst den Entwicklungsprozess?
Seite 10 / 59 Team 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
Seite 11 / 59 Team 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.
Seite 13 / 59 Team 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“)
www.iks-gmbh.com
Pri
nzip
ien
P
rakti
ken
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)
Weiss Gelb Orange Rot Schwarz
Pri
nzip
ien
P
rakti
ken
Das - Grade-System:
Seite 15 / 59 Team 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
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!
www.iks-gmbh.com
Ein Organismus verträgt nur ein begrenztes Maß an Schadstoffen.
Durch kontinuierliche Arbeit wird dieses Maß klein gehalten.
www.iks-gmbh.com
Wichtig sind Funktionsfähigkeit, Stabilität, Wartbarkeit und Erweiterbarkeit.
Dazu braucht man keinen Clean Code!
Clean Code ist was für Spießer – wichtig ist nur, dass es läuft!
Seite 19 / 59 Team 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.
Seite 20 / 59 Team Clean Coding: Gemeinsam besser programmieren Unter Zeitdruck wird dann sowieso wieder „Quick & Dirty“ gearbeitet!
Seite 21 / 59 Team 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
Clean Code kostet zusätzliche Zeit
in der Entwicklung!
Clean Code spart Zeit
in der Wartung!
Seite 23 / 59 Team Clean Coding: Gemeinsam besser programmieren
Langlebigkeit
Kritikalit
ät
Seite 24 / 59 Team 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
Seite 25 / 59 Team 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
Seite 26 / 59 Team 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
Seite 27 / 59 Team 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
Seite 28 / 59 Team Clean Coding: Gemeinsam besser programmieren
TC
C-Ü
be
rsic
ht
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Seite 29 / 59 Team 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“).
Seite 30 / 59 Team 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
Seite 31 / 59 Team 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
Seite 32 / 59 Team 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)
Seite 33 / 59 Team 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“?
Seite 34 / 59 Team Clean Coding: Gemeinsam besser programmieren
TC
C-Ü
be
rsic
ht
Initialisierung
Def. der
Legislative
Grund-
gesetz
Executive
Parla-
ment
Legislative
Judikative
Verfass.-
schutz
Konsti-
tution
Optimierung Anwendung
Basiskonsens
Methode der
Entscheidungsfindung
Projekt-
unspezifische
Regeln
Seite 35 / 59 Team 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
Seite 36 / 59 Team 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)
Seite 37 / 59 Team Clean Coding: Gemeinsam besser programmieren
TC
C-Ü
be
rsic
ht
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
Projektalltag Projekt-
spezifische
Regeln
Seite 38 / 59 Team 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.
Seite 39 / 59 Team 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.
Seite 40 / 59 Team Clean Coding: Gemeinsam besser programmieren
TC
C-Ü
be
rsic
ht 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
Projektalltag Projekt-
spezifische
Regeln
4 -
Review
Seite 41 / 59 Team 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
Seite 42 / 59 Team Clean Coding: Gemeinsam besser programmieren
TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Haufen Gruppe Team
Seite 43 / 59 Team 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
Seite 44 / 59 Team 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
Seite 45 / 59 Team 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
Seite 46 / 59 Team 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
Seite 47 / 59 Team 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
Qu
alitä
t
Seite 48 / 59 Team 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
Seite 49 / 59 Team Clean Coding: Gemeinsam besser programmieren Gegen Schmutz muss regelmäßig gearbeitet werden!
Sauberer Code – Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Rückblick
Rückblick
Rückblick
Rückblick
Seite 50 / 59 Team Clean Coding: Gemeinsam besser programmieren
Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
Seite 51 / 59 Team Clean Coding: Gemeinsam besser programmieren
www.iks-gmbh.com
Pri
nzip
ien
P
rakti
ken
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)
Weiss Gelb Orange Rot Schwarz
Pri
nzip
ien
P
rakti
ken
Das - Grade-System:
Rückblick
Rückblick
Rückblick
Rückblick
Seite 52 / 59 Team 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
Seite 53 / 59 Team Clean Coding: Gemeinsam besser programmieren
TC
C-Ü
be
rsic
ht 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
Projektalltag Projekt-
spezifische
Regeln
4 -
Review
Rückblick Rückblick
Rückblick Rückblick
Seite 54 / 59 Team 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
Seite 55 / 59 Team 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
Seite 56 / 59 Team 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!
Seite 57 / 59 Team 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
Seite 58 / 59 Team 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/
Seite 59 / 59 Team 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/
Fragen?
www.iks-gmbh.com
Recommended