SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Von der Lehre in den Alltag

von Jörg Vollmer
und Reik Oberrath             26.06.2012
Moderne Architekturen
Design Patterns
Der Code
Wofür steht                            ?

             &
 Software-            Effektive
  qualität       Softwareentwicklung
Agenda

 Einleitung

 Ursachen von Dirty Code

 Die Clean Code Developer Bewegung

 Das Team Clean Coding

 Meinungen zu Clean Code und zum Team Clean Coding
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
Häufige Unsitten

         Kommunikations-               Konformitäts-                Schlechte
            probleme                     brüche                    Infrastruktur
                            Magie im
 Workarounds                 Code                     Code-
   anstatt                                        Verdopplungen
  Behebung
                      Unglückliche                                     Fehlende
                     Namensgebung                                        Tests
Unzureichendes                                Frühzeitiges
   Logging                 Toter              Fertigmelden
                           Code                                      Keine
                                                                   Kommentare
      Verweiste               Schlechte
       TODOs               Fehlerbehandlung
                                                             (Zu) komplizierte
                                                             Implementierung
               Fehlende
          Konsistenzprüfungen
                                         Unvollständige                Spaghetti-
                                          Refactorings                   Code
Grund 1:
Unvollständige
 Umsetzung
Unvollständige Umsetzung

Projektleiter: „Wie sieht‘s aus? Kann man denn schon etwas zeigen?“

Entwickler: „Ja, aber erst mal nur ein Schnellschuss, das kann nicht
             so bleiben…“

Kunde & Projektleiter: „…sieht doch gut aus! Mehr brauchen wir doch
                        gar nicht!“



Welcher Entwickler hat da den Mut, sich durchzusetzen?
Unvollständige Umsetzung

Projektleiter A: „Stell‘ mir mal deinen aktuellen Stand zur Verfügung,
                  Projektleiter B braucht den, damit sein Team weiter-
                  arbeiten kann!“



 Stimmt nicht (mehr), denn es gibt Mocks!

 Interface Segregation Principle (ISP)
 Dependency Inversion Principle (DIP)
 Inversion of Control Container (ICC)
 Test First (TF)
Unvollständige Umsetzung

„Lass gut sein, das ziehen wir später gerade. Hauptsache, es läuft!“



Die Erfahrung zeigt:
   Nachträgliches Refactoring funktioniert nur sehr selten, weil
    …es zu mühsam ist (erneutes Hineindenken)
    …das Risiko ist groß ist, Fehler einzubauen
    …größere Maßnahmen zeitlich kaum abschätzbar sind
    …es (deswegen) Widerstand bei der Projektleitung gibt
Unvollständige Umsetzung

Entwickler: „Fertig, es läuft!“
Projektleiter: „Prima, dann können wir endlich liefern!“
Ein Fall läuft

                     Die guten Fälle laufen
Definition of Done


                     Fehlerfälle wurden untersucht

                     „Alle“ Fehlerfälle wurden berücksichtigt

                     Unit-Tests

                     Integrationstests

                     Systemtests

                     Metriken (statistische Code-Analysen)

                     Verständlichkeit (menschliche Code-Analyse)
Grund 2:
Mangelnde Motivation
Mangelnde Motivation: Broken Window
Entwickler: „Ich hab damit nichts zu tun, das ist nicht von mir!“
            „Darauf kommt es jetzt auch nicht mehr an!“
            „Warum soll ich anfangen, hier sauber zu implementieren?“
Mangelnde Motivation: Die x-te Änderung
Entwickler: „Das war so gar nicht spezifiziert!“
            „Wie oft muss ich da noch ran?“
Grund 3:
Unlogische Realisierung
Unlogische Realisierung: Die Gasfabrik

Entwickler: „Das muss auch noch rein, denn so wird das richtig gut!“
Unlogische Realisierung: Konformitätsbrüche

„Ich mach das aber anders als die anderen!“
„Was interessiert mich, was die anderen gemacht haben?“
Grund 4:
    Schlechte
Rahmenbedingungen
Schlechte Rahmenbedingungen:
Menschliche Defizite

Fortbildungsdefizite
 Mangelndes Interesse



Kommunikationsprobleme
 Sender-Empfänger-Probleme
 Schlechtes Team-Klima



Motivationsprobleme
 Kein Bewertungssystem für Lob und Tadel
Schlechte Rahmenbedingungen:
Organisatorische Defizite

Unzureichende Weiterbildungsmöglichkeiten
Unklare Rollen,
Unklare Prozesse,
Unklare Richtlinien
…
Grund 5:
Termine
Termine


Dilemma:
- Termine wird es immer geben,
- Anzahl von Issues/Tickets direkt messbar,
  Qualität aber nicht.
- Entwickler sind gehemmt,
  die Wahrheit zu sagen.
Ursachen für Dirty Code

  Unvollständige Umsetzung

  Mangelnde Motivation

  Unlogische Realisierung

  Schlechte Rahmenbedingungen

  Termine




Moment mal !!!
Sind wir etwa faul, feige und unfähig???
Nein! Aber wir können besser werden!
Agenda

 Einleitung

 Ursachen von Dirty Code

 Die Clean Code Developer Bewegung

 Das Team Clean Coding

 Meinungen zu Clean-Code
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 Verfahren, die
          die Softwareentwicklung beschleunigen.
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
Kernaussagen der
Clean-Code-Developer-Bewegung


    Disziplin                 Ständige Selbstkontrolle („Bewusstsein“) durch
   („Professionalität“)       konsequente Anwendung des
                              inneren Wertesystems („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
Die Clean Code Grade:
             Schwarz
             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-
                                                Responsibility      Inversion Principle                       tion spiegelt
Prinzipien




                        Vorsicht vor
                       Optimierungen            Principle (SRP)      Liskov                                  Entwurf
                                                 Separation of     Substitution                               You Ain´t
                       (VvO)                                        Principle
                        Favour                 Concerns (SoC)                                                Gonna Need It
                                                                     Principle of                            (YAGNI)
                       Composition over          Source Code       Least
                       Inheritance (FCoI)       Konventionen        Astonishment
                                                                     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
Was heißt Clean Code noch?

Def. 4:   Clean Code ist ein Buch mit
          einem umfassenden Regelwerk,
          das als Sprachen über-
          greifendes Wertesystem (Best
          Practices) gelten kann.




Def. 5:   Clean Code ist die mentale Einstellung, das
          gemeinsame Wertesystem im Programmier-
          alltag bewusst anzuwenden (der „Geist“ der
          Clean-Code-Developer-Bewegung).
Was bewirkt Clean Code?

Code                             Entwicklung

Leicht verständlich
                      flexibel
Einfach änderbar
                                 wartbar
Gut testbar


                                 effektiv
Agenda

 Einleitung

 Ursachen von Dirty Code

 Die Clean Code Developer Bewegung

 Das Team Clean Coding

 Meinungen zu Clean Code und zum Team Clean Coding
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
Das Team Clean Coding

Warum?

 Gute Vorsätze schwinden schnell  Verrottung

 Unterschiedliche Meinungen  Wildwuchs

 Mittel gegen die „Durchsetzungsstarken“ (die Stillen sind oft besser)

 Motivation durch Anerkennung, Kontrolle auf Augenhöhe
Das Team Clean Coding

Basis-Konsens

§1     ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich,
       Prozesse anzuerkennen, die für ALLE gleichermaßen bindend sind.


§2     Diese Prozesse können bei Bedarf jederzeit angepasst werden.


§3     Als erstes muss ein effizientes Verfahren zur Entscheidungsfindung
       etabliert werden.
Das Team Clean Coding

Methoden zur Entscheidungsfindung

   Vorgabe des Projektleiters

   Mehrheitsbeschluss

   Minimierung des durchschn. Widerstands

    – Vetoabfrage

    – Konsensrunde

    – Thumb-Voting


„Konsens bedeutet die Übereinstimmung von Menschen hinsichtlich einer
Thematik ohne verdeckten oder offenen Widerspruch.“ - Wikipedia
Das Team Clean Coding (Legislative)

Was muß entschieden werden?

  Was bedeutet für uns die
  Definition of Done?

  Wie gehen wir mit unfertigem Code um?
Code Tagging: Umgang mit „fremdem Eigentum“?
  Wie ist unser

  Was ist für uns clean? REFACTORE_MEs:
    FIXMEs, TODOs und
     FIXME jvo von rob 20.02.2011: Fall kunde == null fehlt
     DONE  FIXMEs raus, TODOs raus oder in den Issue-Tracker
Das Team Clean Coding

Wege zur Einigung im Team

  Daily Standups (Scrum-ähnlich)

  Regelmäßige Team-Reviews

  Retrospektiven

  Coding-Notes kommunizieren (z.B. E-Mail an Team-Verteiler)

  Pair-Programming von Erfahrenen und Unerfahrenen

  4   -Reviews
Das Team Clean Coding

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 als DONE!
Das Team Clean Coding(Judikative)

Die 1€-Regel
   Ein Euro wird eingezogen bei Vergehen gegen zuvor abgestimmte Regeln.

Beispiele:
 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.
Was hilft wann?
Dirty Code Ursachen     Clean Code Dev.         Team Clean Coding
Unklare DOD                                     DOD definieren
Hauptsache, es läuft!   Test first              DOD anwenden, 4iReviews
Gasfabrik               KISS, YAGNI, VvO        Team-Reviews, 4iReviews
X-te Änderung                                   Code Tagging
Broken Windows          Pfadfinderregel         Code Tagging
Konformitätsbrüche      Reviews, ER, SCC        4iReviews
Fortbildung             LLL, TAF                Team-Reviews, Pairprogramming
Kommunikation           Erfahrung weitergeben   Wege zur Einigung im Team
Organisation                                    Rollen & Prozesse definieren
Motivation              Bewusstsein             Anerkennung, 1€-Regel
Termine                 Mentale Einstellung     DOD anwenden
Agenda

 Einleitung

 Ursachen von Dirty Code

 Die Clean Code Developer Bewegung

 Das Team Clean Coding

 Meinungen zu Clean Code und zum Team Clean Coding
Clean-Code ist ist gut, man kann es – eher etwas für Ästheten!
  Clean-Code gut, aber praxisfern aber leicht übertreiben!
Ein Organismus verträgt nur ein begrenztes Maß an Schadstoffen.
Wichtig sind Funktionsfähigkeit, Stabilität, Wartbarkeit und Erweiterbarkeit.
      Clean-Code ist was für Spießer – wichtig ist nur, dass es läuft!
                   Dazu braucht man kein Clean Code!
Sauberer Code - Hohe Testabdeckung


Produktionscode




Testabdeckung




Testcode




                  Schmutz im Code stellt eine reale Gefahr dar!
Clean Code kostet zusätzliche Zeit   Clean Code spart Zeit
in der Entwicklung!                        in der Wartung!
Wie wirkt sich die Anwendung
   der Best practices aus?




                                       1 0 011 01 00 1 1 100       1001101   0011100
                                                                   0110011   1010110
                                        01 1 01 10 1 10 0 001      0110110   1100001
                                                      11 11 0 00   1010010   1111000
                                       10 10 01 0
                                        01 00 011 0 1 111 01       0100011   0111101
                                                                   1000011   1001010
                                       01 010 10 1 00 11 01        0101010   1001101




                               ERROR
Wofür steht                            ?

             &
 Software-            Effektive
  qualität       Softwareentwicklung
Nicht-funktionale
                       Qualitätsmerkmale von Software




 Das Produkt           korrekt, skalierbar, performant,
  (finales Ziel mit    stabil, effizient, sicher (Security),
    Selbstzweck)       zuverlässig, gesetzeskonform,
                       gut bedienbar




Der Entwicklungs-      wirtschaftlich, testbar, erweiterbar,
     prozess           veränderbar, analysierbar, wartbar
  (Zwischenziel, nur
  Mittel zum Zweck)
Take-Home-Message

Möchten wir…

   …lesbaren & langlebigen Code?  Clean-Code-Prinzipien anwenden

   …effektiv & effizient arbeiten?    Clean-Code-Praktiken anwenden

   …effektiv & effizient bleiben?   Clean-Code-Controlling anwenden
Selbstkontrolle und Wertesystem konsequent anzuwenden, ist schwer!
Fragen?
iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag
Weiterführende Literatur

  Effective Java (2nd Edition), Joshua Bloch, Addison-Wesley, 2008

  Der Weg zum Java-Profi, dpunkt-Verlag, 2011

  Bug-Patterns in Java, Eric Allen, Apress, 2002

  More Java Pitfalls, Wiley, 2003
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
Diskussion

  Worin siehst Du Probleme in der Anwendung?

  Welche Art von Unterstützung brauchst Du im Programmier-Alltag?

  Ist diese Selbstkontrolle so schwer, dass man ein Team Clean
  Codingbenötigt?
Bildernachweise

Die in diesem Vortrag verwendeten Bilder stammen von folgenden Quellen:
Folie 6:    http://www.flickr.com/photos/pringels/3139474250/sizes/l/in/photostream/

Folie 7:    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 8:    http://www.flickr.com/photos/buridansesel/6163446452/sizes/l/in/photostream/

Folie 9:    http://office.microsoft.com/en-us/images
            http://officeimg.vo.msecnd.net/en-us/images/MB900443111.jpg
            http://officeimg.vo.msecnd.net/en-us/images/MB900443251.jpg

Folie 10:   http://office.microsoft.com/en-us/images

Folie 11:   http://photos.signonsandiego.com/album55/mud02

Folie 13:   http://www.sxc.hu/browse.phtml?f=download&id=1099152

Folie 14:   http://upload.wikimedia.org/wikipedia/commons/9/91/22_West_-_view_from_window.jpg
Bildernachweise
Folie 16:   http://www.clker.com

Folie 18:   http://www.sxc.hu/browse.phtml?f=download&id=866819

Folie 26:   http://www.sxc.hu/browse.phtml?f=download&id=544619

Folie 27:   http://commons.wikimedia.org/wiki/File:Change.jpg

Folie 30:   http://www.flickr.com/photos/ionics/6338284584

Folie 31:   http://www.f1online.de
            http://www,flickr.com

Folie 33:   http://www.clker.com

Folie 35:   http://www.clker.com

Folie 36:   http://www.clean-code-developer.de

Folie 38:   http://photos.signonsandiego.com/album55/mud02
Bildernachweise
Folie 41, 43, 45: http://www.clean-code-developer.de

Folie 58:       http://www.flickr.com/photos/oskay/437341603/

Folie 60, 61:   http://www.clker.com

Folie 62:       http://openclipart.org/people/DooFi/DooFi_Piggybank.png
                http://openclipart.org/people/lolonene/1309969161.png

Folie 65:       http://freepostermaker.com/uploads/saved_posters/free-poster-dnxeoi88fg-WILLIES-WASH.jpg

Folie 69:         http://office.microsoft.com/de-de/images/results.aspx?qu=frau+computer&ex=1&ctt=1#ai:MP900430491|
        http://office.microsoft.com/de-de/images/results.aspx?ex=2&qu=frau%20b%C3%BCro%20stress#ai:MP900422409|mt:2|

Folie 72:       http://www.hborchert.de/medihumor.htm
                http://hdfreewallpaper.info/fishy-ubuntu-1920-x-1080.html

Folie 76:       http://www.clker.com



Hinweis: Sämtliche hier nicht aufgeführte Bilder (z.B. auf Folie 28) wurden von den Autoren selbst erstellt.
Eclipse-IDE
Infrastruktur Entwicklung

                                   Build-System




                  SCM
                                   Deployment



 Entwickler-PC



                            Ent   Abn      Ref    Prod
Continuous Build / Integration

1. Diese Tools ermöglichen einen automatischen Build der
   eingecheckten Sourcen
2. Getriggert: Zeitgesteuert, per Hand, Einchecken
3. ANT / Maven / Skript-Integration
4. Automatisches Deploy-
   ment möglich

   TeamCity
    – Ab einer Größe
      kostenpflichtig

   Hudson, Jenkins
    – Open Source
Qualitätssicherung

  Sonar
   – Open Source
   – Zusätzliches Tool zum Continuous Build
   – Berechnet zahlreiche Code-Metriken
   – Erzeugt schöne Grafiken
   – (Eigene) Plugins möglich
t.addCell (new Phrase(formatDateString(
sd.date == null || "".equals (sd.date) ?
sh.date.substring (0, 4) : sd.date), f));




Date datum = strukturDaten.date;
if (datum == null) {
    datum = strukturHelper.date;
}
String datumFormatiert = formatDate(datum);
Phrase phrase = new Phrase(datumFormatiert, format);
table.addCell(phrase);
www.iks-gmbh.com

Más contenido relacionado

Andere mochten auch

ASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerJürgen Gutsch
 
ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2Jürgen Gutsch
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentroelofr
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Codemtoppa
 
Continuous Integration and the Data Warehouse - PASS SQL Saturday Slovenia
Continuous Integration and the Data Warehouse - PASS SQL Saturday SloveniaContinuous Integration and the Data Warehouse - PASS SQL Saturday Slovenia
Continuous Integration and the Data Warehouse - PASS SQL Saturday SloveniaDr. John Tunnicliffe
 
Continuous integration eine Einführung für Unkundige
Continuous integration   eine Einführung für UnkundigeContinuous integration   eine Einführung für Unkundige
Continuous integration eine Einführung für Unkundigeabuwipp
 
Clean code erfolgreich einführen
Clean code erfolgreich einführenClean code erfolgreich einführen
Clean code erfolgreich einführenDaniel Rietmüller
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code SmellsMario Sangiorgio
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean ArchitectureBadoo
 
Lean Startup und agile Methodiken – Hype oder Fortschritt ?
Lean Startup und agile Methodiken – Hype oder Fortschritt ?Lean Startup und agile Methodiken – Hype oder Fortschritt ?
Lean Startup und agile Methodiken – Hype oder Fortschritt ?Heico Koch
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean ArchitectureRoc Boronat
 
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...marcus evans Network
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summaryJan de Vries
 
Mobile Games mit Windows Azure
Mobile Games mit Windows AzureMobile Games mit Windows Azure
Mobile Games mit Windows AzureJürgen Gutsch
 
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...Jürgen Gutsch
 
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...Ulf Brandes
 
Strato Vortrag agile-hr_conference_2016
Strato Vortrag agile-hr_conference_2016Strato Vortrag agile-hr_conference_2016
Strato Vortrag agile-hr_conference_2016nicol dierkes
 
Clean code in ABAP
Clean code in ABAPClean code in ABAP
Clean code in ABAPCadaxo GmbH
 

Andere mochten auch (20)

ASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & docker
 
Html 5 magic
Html 5 magicHtml 5 magic
Html 5 magic
 
ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Code
 
Continuous Integration and the Data Warehouse - PASS SQL Saturday Slovenia
Continuous Integration and the Data Warehouse - PASS SQL Saturday SloveniaContinuous Integration and the Data Warehouse - PASS SQL Saturday Slovenia
Continuous Integration and the Data Warehouse - PASS SQL Saturday Slovenia
 
Continuous integration eine Einführung für Unkundige
Continuous integration   eine Einführung für UnkundigeContinuous integration   eine Einführung für Unkundige
Continuous integration eine Einführung für Unkundige
 
Clean code erfolgreich einführen
Clean code erfolgreich einführenClean code erfolgreich einführen
Clean code erfolgreich einführen
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Lean Startup und agile Methodiken – Hype oder Fortschritt ?
Lean Startup und agile Methodiken – Hype oder Fortschritt ?Lean Startup und agile Methodiken – Hype oder Fortschritt ?
Lean Startup und agile Methodiken – Hype oder Fortschritt ?
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean Architecture
 
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...
Die agile Organisation: Inhalt, Wege und Hürden aus Sicht eines CEO – der Fal...
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
 
Mobile Games mit Windows Azure
Mobile Games mit Windows AzureMobile Games mit Windows Azure
Mobile Games mit Windows Azure
 
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...
Agile Entwicklungsumgebung mit DVCS, Jenkins und Trello - Agile Bodensee Konf...
 
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...
Wie wird das management team agil - ulf brandes, #manage-agile - 18. oktober ...
 
Strato Vortrag agile-hr_conference_2016
Strato Vortrag agile-hr_conference_2016Strato Vortrag agile-hr_conference_2016
Strato Vortrag agile-hr_conference_2016
 
Das Agile Team
Das Agile TeamDas Agile Team
Das Agile Team
 
Clean code in ABAP
Clean code in ABAPClean code in ABAP
Clean code in ABAP
 

Ähnlich wie iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag

Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.Stephan Schmidt
 
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...Socialbar
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerPatrick Baumgartner
 
Continuous Integration für PHP
Continuous Integration für PHPContinuous Integration für PHP
Continuous Integration für PHPSebastian Bauer
 
JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerDennis Wilson
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Florian Bosselmann
 
Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuCédric Hüsler
 
Testgetriebene Entwicklung
Testgetriebene EntwicklungTestgetriebene Entwicklung
Testgetriebene EntwicklungGjero Krsteski
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenOdilo Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenPatrick Baumgartner
 

Ähnlich wie iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag (20)

Mehr Softwarequalität: TeamCleanCoding
Mehr Softwarequalität: TeamCleanCodingMehr Softwarequalität: TeamCleanCoding
Mehr Softwarequalität: TeamCleanCoding
 
Mehr Softwarequalität: Team Clean Coding
Mehr Softwarequalität: Team Clean CodingMehr Softwarequalität: Team Clean Coding
Mehr Softwarequalität: Team Clean Coding
 
Design OOA OOD
Design OOA OODDesign OOA OOD
Design OOA OOD
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
 
Mehr Softwarequalität: Team-Cleancoding
Mehr Softwarequalität: Team-CleancodingMehr Softwarequalität: Team-Cleancoding
Mehr Softwarequalität: Team-Cleancoding
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...
Markus Schranner: "Das Lean Startup Prinzip - Potentiale für NGOs und soziale...
 
Advanced Continuous Integration
Advanced Continuous IntegrationAdvanced Continuous Integration
Advanced Continuous Integration
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
Das Pfadfinderprinzip in DevOps
Das Pfadfinderprinzip in DevOpsDas Pfadfinderprinzip in DevOps
Das Pfadfinderprinzip in DevOps
 
Continuous Integration für PHP
Continuous Integration für PHPContinuous Integration für PHP
Continuous Integration für PHP
 
JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem Softwerker
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
 
Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neu
 
Testgetriebene Entwicklung
Testgetriebene EntwicklungTestgetriebene Entwicklung
Testgetriebene Entwicklung
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
2011 07-07 activiti
2011 07-07 activiti2011 07-07 activiti
2011 07-07 activiti
 

Mehr von IKS Gesellschaft für Informations- und Kommunikationssysteme mbH

Mehr von IKS Gesellschaft für Informations- und Kommunikationssysteme mbH (20)

Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingtEs wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
 
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
 
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdf
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdfThementag 2023 04 Lindern, heilen oder gar fit machen.pdf
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdf
 
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
 
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdfThementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
 
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdf
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdfThementag 2023 03 Einführung in die Softwaremodernisierung.pdf
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdf
 
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdfThementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
 
Thementag 2022 04 ML auf die Schiene gebracht.pdf
Thementag 2022 04 ML auf die Schiene gebracht.pdfThementag 2022 04 ML auf die Schiene gebracht.pdf
Thementag 2022 04 ML auf die Schiene gebracht.pdf
 
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdfThementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
 
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdfThementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
 
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
 
Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?
 
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
 
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
 

iks auf der gearconf 2012: Clean Code - Von der Lehre in den Alltag

  • 1. Von der Lehre in den Alltag von Jörg Vollmer und Reik Oberrath 26.06.2012
  • 5. Wofür steht ? & Software- Effektive qualität Softwareentwicklung
  • 6. Agenda Einleitung Ursachen von Dirty Code Die Clean Code Developer Bewegung Das Team Clean Coding Meinungen zu Clean Code und zum Team Clean Coding
  • 8. Häufige Unsitten Kommunikations- Konformitäts- Schlechte probleme brüche Infrastruktur Magie im Workarounds Code Code- anstatt Verdopplungen Behebung Unglückliche Fehlende Namensgebung Tests Unzureichendes Frühzeitiges Logging Toter Fertigmelden Code Keine Kommentare Verweiste Schlechte TODOs Fehlerbehandlung (Zu) komplizierte Implementierung Fehlende Konsistenzprüfungen Unvollständige Spaghetti- Refactorings Code
  • 10. Unvollständige Umsetzung Projektleiter: „Wie sieht‘s aus? Kann man denn schon etwas zeigen?“ Entwickler: „Ja, aber erst mal nur ein Schnellschuss, das kann nicht so bleiben…“ Kunde & Projektleiter: „…sieht doch gut aus! Mehr brauchen wir doch gar nicht!“ Welcher Entwickler hat da den Mut, sich durchzusetzen?
  • 11. Unvollständige Umsetzung Projektleiter A: „Stell‘ mir mal deinen aktuellen Stand zur Verfügung, Projektleiter B braucht den, damit sein Team weiter- arbeiten kann!“ Stimmt nicht (mehr), denn es gibt Mocks! Interface Segregation Principle (ISP) Dependency Inversion Principle (DIP) Inversion of Control Container (ICC) Test First (TF)
  • 12. Unvollständige Umsetzung „Lass gut sein, das ziehen wir später gerade. Hauptsache, es läuft!“ Die Erfahrung zeigt: Nachträgliches Refactoring funktioniert nur sehr selten, weil …es zu mühsam ist (erneutes Hineindenken) …das Risiko ist groß ist, Fehler einzubauen …größere Maßnahmen zeitlich kaum abschätzbar sind …es (deswegen) Widerstand bei der Projektleitung gibt
  • 13. Unvollständige Umsetzung Entwickler: „Fertig, es läuft!“ Projektleiter: „Prima, dann können wir endlich liefern!“
  • 14. Ein Fall läuft Die guten Fälle laufen Definition of Done Fehlerfälle wurden untersucht „Alle“ Fehlerfälle wurden berücksichtigt Unit-Tests Integrationstests Systemtests Metriken (statistische Code-Analysen) Verständlichkeit (menschliche Code-Analyse)
  • 16. Mangelnde Motivation: Broken Window Entwickler: „Ich hab damit nichts zu tun, das ist nicht von mir!“ „Darauf kommt es jetzt auch nicht mehr an!“ „Warum soll ich anfangen, hier sauber zu implementieren?“
  • 17. Mangelnde Motivation: Die x-te Änderung Entwickler: „Das war so gar nicht spezifiziert!“ „Wie oft muss ich da noch ran?“
  • 19. Unlogische Realisierung: Die Gasfabrik Entwickler: „Das muss auch noch rein, denn so wird das richtig gut!“
  • 20. Unlogische Realisierung: Konformitätsbrüche „Ich mach das aber anders als die anderen!“ „Was interessiert mich, was die anderen gemacht haben?“
  • 21. Grund 4: Schlechte Rahmenbedingungen
  • 22. Schlechte Rahmenbedingungen: Menschliche Defizite Fortbildungsdefizite  Mangelndes Interesse Kommunikationsprobleme  Sender-Empfänger-Probleme  Schlechtes Team-Klima Motivationsprobleme  Kein Bewertungssystem für Lob und Tadel
  • 23. Schlechte Rahmenbedingungen: Organisatorische Defizite Unzureichende Weiterbildungsmöglichkeiten Unklare Rollen, Unklare Prozesse, Unklare Richtlinien …
  • 25. Termine Dilemma: - Termine wird es immer geben, - Anzahl von Issues/Tickets direkt messbar, Qualität aber nicht. - Entwickler sind gehemmt, die Wahrheit zu sagen.
  • 26. Ursachen für Dirty Code Unvollständige Umsetzung Mangelnde Motivation Unlogische Realisierung Schlechte Rahmenbedingungen Termine Moment mal !!! Sind wir etwa faul, feige und unfähig??? Nein! Aber wir können besser werden!
  • 27. Agenda Einleitung Ursachen von Dirty Code Die Clean Code Developer Bewegung Das Team Clean Coding Meinungen zu Clean-Code
  • 28. 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 Verfahren, die die Softwareentwicklung beschleunigen.
  • 30. Kernaussagen der Clean-Code-Developer-Bewegung Disziplin Ständige Selbstkontrolle („Bewusstsein“) durch („Professionalität“) konsequente Anwendung des inneren Wertesystems („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
  • 31. Die Clean Code Grade: Schwarz 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- Responsibility Inversion Principle tion spiegelt Prinzipien  Vorsicht vor Optimierungen Principle (SRP)  Liskov Entwurf  Separation of Substitution  You Ain´t (VvO) Principle  Favour Concerns (SoC) Gonna Need It  Principle of (YAGNI) Composition over  Source Code Least Inheritance (FCoI) Konventionen Astonishment  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
  • 32. Was heißt Clean Code noch? Def. 4: Clean Code ist ein Buch mit einem umfassenden Regelwerk, das als Sprachen über- greifendes Wertesystem (Best Practices) gelten kann. Def. 5: Clean Code ist die mentale Einstellung, das gemeinsame Wertesystem im Programmier- alltag bewusst anzuwenden (der „Geist“ der Clean-Code-Developer-Bewegung).
  • 33. Was bewirkt Clean Code? Code Entwicklung Leicht verständlich flexibel Einfach änderbar wartbar Gut testbar effektiv
  • 34. Agenda Einleitung Ursachen von Dirty Code Die Clean Code Developer Bewegung Das Team Clean Coding Meinungen zu Clean Code und zum Team Clean Coding
  • 36. Das Team Clean Coding Warum?  Gute Vorsätze schwinden schnell  Verrottung  Unterschiedliche Meinungen  Wildwuchs  Mittel gegen die „Durchsetzungsstarken“ (die Stillen sind oft besser)  Motivation durch Anerkennung, Kontrolle auf Augenhöhe
  • 37. Das Team Clean Coding Basis-Konsens §1 ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich, Prozesse anzuerkennen, die für ALLE gleichermaßen bindend sind. §2 Diese Prozesse können bei Bedarf jederzeit angepasst werden. §3 Als erstes muss ein effizientes Verfahren zur Entscheidungsfindung etabliert werden.
  • 38. Das Team Clean Coding Methoden zur Entscheidungsfindung Vorgabe des Projektleiters Mehrheitsbeschluss Minimierung des durchschn. Widerstands – Vetoabfrage – Konsensrunde – Thumb-Voting „Konsens bedeutet die Übereinstimmung von Menschen hinsichtlich einer Thematik ohne verdeckten oder offenen Widerspruch.“ - Wikipedia
  • 39. Das Team Clean Coding (Legislative) Was muß entschieden werden? Was bedeutet für uns die Definition of Done? Wie gehen wir mit unfertigem Code um? Code Tagging: Umgang mit „fremdem Eigentum“? Wie ist unser Was ist für uns clean? REFACTORE_MEs: FIXMEs, TODOs und FIXME jvo von rob 20.02.2011: Fall kunde == null fehlt DONE  FIXMEs raus, TODOs raus oder in den Issue-Tracker
  • 40. Das Team Clean Coding Wege zur Einigung im Team Daily Standups (Scrum-ähnlich) Regelmäßige Team-Reviews Retrospektiven Coding-Notes kommunizieren (z.B. E-Mail an Team-Verteiler) Pair-Programming von Erfahrenen und Unerfahrenen 4 -Reviews
  • 41. Das Team Clean Coding 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 als DONE!
  • 42. Das Team Clean Coding(Judikative) Die 1€-Regel Ein Euro wird eingezogen bei Vergehen gegen zuvor abgestimmte Regeln. Beispiele:  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.
  • 43. Was hilft wann? Dirty Code Ursachen Clean Code Dev. Team Clean Coding Unklare DOD DOD definieren Hauptsache, es läuft! Test first DOD anwenden, 4iReviews Gasfabrik KISS, YAGNI, VvO Team-Reviews, 4iReviews X-te Änderung Code Tagging Broken Windows Pfadfinderregel Code Tagging Konformitätsbrüche Reviews, ER, SCC 4iReviews Fortbildung LLL, TAF Team-Reviews, Pairprogramming Kommunikation Erfahrung weitergeben Wege zur Einigung im Team Organisation Rollen & Prozesse definieren Motivation Bewusstsein Anerkennung, 1€-Regel Termine Mentale Einstellung DOD anwenden
  • 44. Agenda Einleitung Ursachen von Dirty Code Die Clean Code Developer Bewegung Das Team Clean Coding Meinungen zu Clean Code und zum Team Clean Coding
  • 45. Clean-Code ist ist gut, man kann es – eher etwas für Ästheten! Clean-Code gut, aber praxisfern aber leicht übertreiben!
  • 46. Ein Organismus verträgt nur ein begrenztes Maß an Schadstoffen.
  • 47. Wichtig sind Funktionsfähigkeit, Stabilität, Wartbarkeit und Erweiterbarkeit. Clean-Code ist was für Spießer – wichtig ist nur, dass es läuft! Dazu braucht man kein Clean Code!
  • 48. Sauberer Code - Hohe Testabdeckung Produktionscode Testabdeckung Testcode Schmutz im Code stellt eine reale Gefahr dar!
  • 49. Clean Code kostet zusätzliche Zeit Clean Code spart Zeit in der Entwicklung! in der Wartung!
  • 50. Wie wirkt sich die Anwendung der Best practices aus? 1 0 011 01 00 1 1 100 1001101 0011100 0110011 1010110 01 1 01 10 1 10 0 001 0110110 1100001 11 11 0 00 1010010 1111000 10 10 01 0 01 00 011 0 1 111 01 0100011 0111101 1000011 1001010 01 010 10 1 00 11 01 0101010 1001101 ERROR
  • 51. Wofür steht ? & Software- Effektive qualität Softwareentwicklung
  • 52. Nicht-funktionale Qualitätsmerkmale von Software Das Produkt korrekt, skalierbar, performant, (finales Ziel mit stabil, effizient, sicher (Security), Selbstzweck) zuverlässig, gesetzeskonform, gut bedienbar Der Entwicklungs- wirtschaftlich, testbar, erweiterbar, prozess veränderbar, analysierbar, wartbar (Zwischenziel, nur Mittel zum Zweck)
  • 53. Take-Home-Message Möchten wir… …lesbaren & langlebigen Code?  Clean-Code-Prinzipien anwenden …effektiv & effizient arbeiten?  Clean-Code-Praktiken anwenden …effektiv & effizient bleiben?  Clean-Code-Controlling anwenden Selbstkontrolle und Wertesystem konsequent anzuwenden, ist schwer!
  • 56. Weiterführende Literatur Effective Java (2nd Edition), Joshua Bloch, Addison-Wesley, 2008 Der Weg zum Java-Profi, dpunkt-Verlag, 2011 Bug-Patterns in Java, Eric Allen, Apress, 2002 More Java Pitfalls, Wiley, 2003
  • 57. 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
  • 58. Diskussion Worin siehst Du Probleme in der Anwendung? Welche Art von Unterstützung brauchst Du im Programmier-Alltag? Ist diese Selbstkontrolle so schwer, dass man ein Team Clean Codingbenötigt?
  • 59. Bildernachweise Die in diesem Vortrag verwendeten Bilder stammen von folgenden Quellen: Folie 6: http://www.flickr.com/photos/pringels/3139474250/sizes/l/in/photostream/ Folie 7: 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 8: http://www.flickr.com/photos/buridansesel/6163446452/sizes/l/in/photostream/ Folie 9: http://office.microsoft.com/en-us/images http://officeimg.vo.msecnd.net/en-us/images/MB900443111.jpg http://officeimg.vo.msecnd.net/en-us/images/MB900443251.jpg Folie 10: http://office.microsoft.com/en-us/images Folie 11: http://photos.signonsandiego.com/album55/mud02 Folie 13: http://www.sxc.hu/browse.phtml?f=download&id=1099152 Folie 14: http://upload.wikimedia.org/wikipedia/commons/9/91/22_West_-_view_from_window.jpg
  • 60. Bildernachweise Folie 16: http://www.clker.com Folie 18: http://www.sxc.hu/browse.phtml?f=download&id=866819 Folie 26: http://www.sxc.hu/browse.phtml?f=download&id=544619 Folie 27: http://commons.wikimedia.org/wiki/File:Change.jpg Folie 30: http://www.flickr.com/photos/ionics/6338284584 Folie 31: http://www.f1online.de http://www,flickr.com Folie 33: http://www.clker.com Folie 35: http://www.clker.com Folie 36: http://www.clean-code-developer.de Folie 38: http://photos.signonsandiego.com/album55/mud02
  • 61. Bildernachweise Folie 41, 43, 45: http://www.clean-code-developer.de Folie 58: http://www.flickr.com/photos/oskay/437341603/ Folie 60, 61: http://www.clker.com Folie 62: http://openclipart.org/people/DooFi/DooFi_Piggybank.png http://openclipart.org/people/lolonene/1309969161.png Folie 65: http://freepostermaker.com/uploads/saved_posters/free-poster-dnxeoi88fg-WILLIES-WASH.jpg Folie 69: http://office.microsoft.com/de-de/images/results.aspx?qu=frau+computer&ex=1&ctt=1#ai:MP900430491| http://office.microsoft.com/de-de/images/results.aspx?ex=2&qu=frau%20b%C3%BCro%20stress#ai:MP900422409|mt:2| Folie 72: http://www.hborchert.de/medihumor.htm http://hdfreewallpaper.info/fishy-ubuntu-1920-x-1080.html Folie 76: http://www.clker.com Hinweis: Sämtliche hier nicht aufgeführte Bilder (z.B. auf Folie 28) wurden von den Autoren selbst erstellt.
  • 63. Infrastruktur Entwicklung Build-System SCM Deployment Entwickler-PC Ent Abn Ref Prod
  • 64. Continuous Build / Integration 1. Diese Tools ermöglichen einen automatischen Build der eingecheckten Sourcen 2. Getriggert: Zeitgesteuert, per Hand, Einchecken 3. ANT / Maven / Skript-Integration 4. Automatisches Deploy- ment möglich TeamCity – Ab einer Größe kostenpflichtig Hudson, Jenkins – Open Source
  • 65. Qualitätssicherung Sonar – Open Source – Zusätzliches Tool zum Continuous Build – Berechnet zahlreiche Code-Metriken – Erzeugt schöne Grafiken – (Eigene) Plugins möglich
  • 66. t.addCell (new Phrase(formatDateString( sd.date == null || "".equals (sd.date) ? sh.date.substring (0, 4) : sd.date), f)); Date datum = strukturDaten.date; if (datum == null) { datum = strukturHelper.date; } String datumFormatiert = formatDate(datum); Phrase phrase = new Phrase(datumFormatiert, format); table.addCell(phrase);