Mehr Softwarequalität: Team Clean Coding

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