Mehr Softwarequalität: TeamCleanCoding
-
Upload
iks-gesellschaft-fuer-informations-und-kommunikationssysteme-mbh -
Category
Technology
-
view
832 -
download
0
description
Transcript of Mehr Softwarequalität: TeamCleanCoding
Seite 2 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Team Clean Coding:
Sauber programmieren – Effizienz steigern
iks Thementag
„Mehr Softwarequalität – Ausgewählte Themen“
23.04.2013
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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Das Produkt (finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess (Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
Seite 7 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Das Produkt (finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess (Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
extern
intern
Produkt und Prozess
sind gleichwichtig
Qu
alitä
t
Der Faktor
„Mensch“
Architektur und
Implementation Tools
&
Technologien
Was beeinflusst den Entwicklungsprozess?
Seite 10 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Seite 11 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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.
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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern Gegen Schmutz muss regelmäßig gearbeitet werden!
Sauberer Code - Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Seite 20 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern Unter Zeitdruck wird dann sowieso wieder „Quick & Dirty“ gearbeitet!
Seite 21 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
CCD-Professionalität
leben und seinen Prinzipien
treu bleiben.
Technische Schulden
bewußt eingehen und
bewußt 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 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Langlebigkeit
Kritika
litä
t
Seite 24 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Seite 25 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 & Werte-
system
Teamarbeit,
→ Kommunikation &
Teamkontrolle
Seite 26 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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
Seite 27 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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“).
Seite 28 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 29 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
TCC: „Verfassung/Grundgesetz“
Projekt-unspezifische Grundregeln
Wie wollen wir Information festhalten? → Dokumentation
Was bedeutet für uns „fertig“? → Definition Of Done
Seite 30 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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)
Seite 31 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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“?
Seite 32 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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
Seite 33 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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!
Seite 34 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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.
Seite 35 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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“
Seite 36 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Seite 37 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
TCC-Rahmenbedingungen
Teamstimmung beachten und fördern
Haufen Gruppe Team
Seite 38 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 39 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 40 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 41 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Agenda
Einleitung
Die Clean-Code-Developer-Bewegung
Meinungen zu Clean-Code
Das Team Clean Coding (TCC)
TCC-Rahmenbedingungen
Take-Home-Message
Seite 42 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Das Produkt (finales Ziel mit
Selbstzweck)
Der Entwicklungs-
prozess (Zwischenziel, nur
Mittel zum Zweck)
Was ist wichtiger?
extern
intern
Produkt und Prozess
sind gleichwichtig
Rückblick
Rückblick
Rückblick
Rückblick
Qu
alitä
t
Seite 43 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
CCD-Professionalität
leben und seinen Prinzipien
treu bleiben.
Technische Schulden
bewußt eingehen und
bewußt wieder begleichen.
Termine
Termine
Qualität
Qualität
Kosten
Kosten
Rückblick
Rückblick
Rückblick
Rückblick
Seite 44 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern Gegen Schmutz muss regelmäßig gearbeitet werden!
Sauberer Code - Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Rückblick
Rückblick
Rückblick
Rückblick
Seite 45 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Take-Home-Message
Herstellungsprozess und Produkt sind gleich wichtig –
technische Schulden müssen zurückgezahlt werden!
Seite 46 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 47 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 48 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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
Rückblick
Rückblick
Rückblick
Seite 49 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 50 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 51 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
Take-Home-Message
Sauber programmieren führt zu Qualität und Effizienz,
benötigt aber Unterstützung aus dem Umfeld!
Seite 52 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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
Fragen?
Seite 54 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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 55 / 52 Team Clean Coding: Sauber programmieren – Effizienz steigern
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/
www.iks-gmbh.com