18. Jänner 2018 von Markus Wagner
Clean Code Developer - Teil 1
Die Möglichkeit, durch das Wertesystem in kleinen Schritten über eine saubere Code-Architektur zu Fachwissen zu gelangen, kann für euch sehr hilfreich sein, um ein Wertegefühl für eine gute Code-Qualität zu entwickeln. Der Clean Code Developer stellt dabei eine hilfreiche Methode dar. Im Folgenden möchte ich euch zunächst erklären, warum CCD eine sinnvolle Methode ist und was es damit genau auf sich hat. Als Grundlage meiner Ausführungen dient dabei die Bewegung „Clean Code Developer“.
Warum CCD?
Weshalb solltet ihr innerhalb eures Entwicklungsteams Prinzipien und Praktiken benötigen, um qualitativ hochwertige Softwaresysteme zu erstellen? Ganz einfach: Sämtliche Prozessmodelle − seien es klassische Modelle wie beispielsweise V- oder Wasserfall-Modelle, agile Modelle wie Scrum und Kanban oder auch skalierte Modelle wie LeSS und SAFe − werden erst durch die richtigen Entwicklungsmethoden zu effizienten Entwicklungsmodellen. Meist ist die Code-Basis allerdings schon nach kurzer Zeit in sich selbst verstrickt und reagiert deshalb fragil und unberechenbar auf Änderungen und neue Anforderungen. Obwohl ich betonen möchte, dass Clean Code unabhängig vom jeweiligen Prozessmodell effizient eingesetzt werden kann, beziehe ich mich in meinem Blog-Beitrag vor allem auf agile Prozessmethoden.
Da ihr in Softwareprojekten mit den verschiedensten Vorgehensmodellen konfrontiert werdet, ist es umso wichtiger, dass ihr − unabhängig vom gewählten Modell − eine hohe Qualität der Software sicherstellt. Welchen Platz Clean Code als Entwicklungsmethode in der agilen Softwareentwicklung einnimmt, zeigt die folgende Abbildung.
Wie ihr sehen könnt, gibt es nur eine Stelle, an der tatsächlich das eigentliche System produziert wird. Während die umliegenden Ebenen entweder die Grundlagen oder die unterstützenden Rahmenbedingungen für die Produktion des Systems bereitstellen, ist das Generieren des Codes der Kern der Softwareentwicklung. Ihr könnt dies sehr gut mit dem Prozess in einem Restaurant vergleichen: Auch wenn das Restaurant schön eingerichtet ist, die Preise günstig sind und das Servicepersonal freundlich und kompetent ist, werdet ihr nicht zufrieden sein, wenn das Essen nicht schmeckt. Und so wie ein Koch seine Rezepte und Erfahrungen nutzt, um ein gutes Essen zuzubereiten, solltet ihr als Entwickler eben eure „Rezepte“ und Erfahrungen einsetzen, um eine hohe Qualität eurer programmierten Software sicher zu stellen. Die Prinzipien und Praktiken des Clean Code Developer könnt ihr also als eine Art „Rezept“ betrachten.
Wie könnte jedoch ein Versuch aussehen, die Code-Qualität zu definieren? Im CCD-Wertesystem werden euch mit Sicherheit einige der nachfolgenden Eigenschaften wiederbegegnen:
- Evolvierbarkeit bei stabiler Aufwandskurve
- Korrektheit
- Testbarkeit (Qualität)
- Robustheit (d.h. neue Features führen nicht zu neuen Bugs)
- Lesbarkeit
Ihr fragt euch, wieso ein Code diese Eigenschaften aufweisen sollte? Ganz einfach: Eine gute Code-Qualität ist das Fundament einer flexiblen und stabilen Software! Unabhängig vom gewählten Vorgehensmodell ist die Code-Qualität die Grundlage für den Erfolg eures Entwicklungsprojektes. Sie stellt sicher, dass die Vorteile eines Architekturentwurfs auch tatsächlich im Code vorhanden sind. Um dies zu erreichen, ist es für euer Entwicklungsteam notwendig, ein gemeinsames Vorgehen bezüglich der Qualitätsziele zu definieren. In der Softwareentwicklung hat sich noch kein gemeinsames Verständnis für diese Eigenschaften herausgebildet. Daher führen unterschiedliche Erfahrungen auch zu verschiedenen Auffassung bezüglich der Code-Qualität. An CCD lassen sich deshalb folgende Ansprüche ableiten:
- Iterative Verbesserung der Code-Qualität in Bezug auf die vorherigen genannten Eigenschaften.
- Synchronisierung und Erweiterung des technischen Know-hows im Entwicklungsteam.
- Kleine, aber beständige Fortschritte im gesamten Team.
- Laufendes Monitoring des Fortschritts.
- Transparente Darstellung von bereits erreichten und noch zu erreichenden Zielen.
- Intuitives Einhalten von Entwicklerregeln, ohne dass für die tägliche Arbeit viel Dokumentation notwendig ist.
- Spaß am „Handwerk“ der Softwareentwicklung!
Was ist CCD?
Was ist nun das Clean Code Developer System? Kurz zusammengefasst: Es handelt sich um eine Sammlung von Prinzipien und Praktiken, die in unterschiedliche Grade unterteilt sind. Diese Grade werden schrittweise und getreu der agilen Vorgehensweise iterativ durchwandert. Grundlage der Bewegung ist die Publikation „Clean Code: A Handbook of Agile Software Craftsmanship“ von Robert C. Martin. Der Autor ist Mitbegründer der Software-Craftsmanship-Bewegung – sie fordert unter anderem, die Tätigkeit des Softwareentwickelns als Handwerkskunst anzusehen. Zudem gehört Martin zu den Unterzeichnern des «Agile Manifesto», das bekanntlich die Grundlage von agilen Vorgehensmodellen ist. In aktuellen Definitionen von agiler Entwicklung taucht Clean Code aber eher selten als grundlegende Entwicklungsmethode auf. Daher möchte ich euch diese Methode wieder ins Bewusstsein zu rufen.
Stefan Lieser und Ralf Westphal − Gründer des Clean Code Developer – bringen diese Methode mit der folgenden Formel auf den Punkt: Professionalität = Bewusstheit + Prinzipien. Damit ist Folgendes gemeint:
- Ein professioneller Softwareentwickler setzt sich mit dem Metier bewusst auseinander. Dies bedeutet, er reflektiert über sein Produkt, seine Arbeitsweise, seine Materialien und Werkzeuge. Ein professioneller Softwareentwickler ist nicht einfach zufrieden, wenn sein Chef oder Kunde zufrieden ist. Er ist auch nicht einfach mit dem zufrieden, was ein Hersteller ihm empfiehlt. Stattdessen beobachtet und prüft er ständig seine Ergebnisse und bemüht sich um seine Weiterentwicklung und die seines Metiers.
- Ein professioneller Softwareentwickler hat ein inneres Wertesystem, anhand dessen er seine Ergebnisse und Handlungen überprüft. Nur wenn seine Arbeit diesem Wertesystem entspricht, empfindet er sie zufriedenstellend. Sein Streben ist es daher, auch unter Druck von Kunden oder Herstellern, diesem Wertesystem treu zu sein.
CCD ist also eine Lernmethode, die sich an das agile «inspect and adapt» anlehnt, aber auch eine Sammlung von bestimmten Werten einschließt, wozu Evolvierbarkeit, Korrektheit, Produktionseffizienz und eine kontinuierliche Verbesserung zählen. Ihr könnt erkennen, dass sich diese Werte in den zuvor beschriebenen Anforderungen an die Code-Qualität wiederfinden.
Beginnen wir mit einer Übersicht über die Grade des CCD-Systems. In der folgenden Abbildung seht ihr den iterativen Kreislauf, den diese Grade durchlaufen. Die Grade bauen in Schwierigkeit, aber auch in ihrem Nutzen aufeinander auf. Auch wenn euch die ersten Graden trivial erscheinen sollten, stellen sie einen Grundbaustein für euer weiteres Vorgehen dar.
In jedem Grad befinden sich verschiedene Bausteine, die diesen Werten entsprechen. Sehen wir uns das am Beispiel des „roten Grades“ in der folgenden Abbildung einmal etwas genauer an.
Hier weist das DRY-Prinzip (Don´t Repeat Yourself) folgende Eigenschaften auf:
- Es kann individuell beachtet werden.
- Es sichert einen hohen Grad an Evolvierbarkeit.
- Es sichert einen hohen Grad an Korrektheit.
- Es sichert die Produktionseffizienz.
- Es ist leicht zu reflektieren und die Einhaltung des Prinzips ist prüfbar.
Es gibt aber auch Prinzipien oder Praktiken, die eventuell einige Vorarbeiten oder Abklärungen auf Teamebene oder in seltenen Fällen auf anderen Ebenen eines Unternehmens erfordern – etwa wie die im „roten Grad“ dargestellte Versionskontrolle. Hier solltet ihr unbedingt bereits im Vorfeld abklären, ob es Auswirkungen auf eure bestehende Infrastruktur gibt. Bis auf wenige Ausnahmen könnt ihr die Prinzipien oder Praktiken aber ohne weitere Aufwände einsetzen.
Fazit
So wie das DRY-Prinzip, berühren auch alle weiteren Prinzipien und Praktiken der verschiedenen Grade auf unterschiedliche Weise die Werte des CCD-Systems. Sie unterstützen somit die Sicherstellung der zuvor erwähnten Eigenschaften der Code-Qualität. CCD bietet euch daher die Möglichkeit, diese Eigenschaften in kleinen Schritten zu erreichen. Durch ständiges Iterieren der verschiedenen Grade verankern sich diese Prinzipien und Praktiken in den Handlungen eurer Teammitglieder. Dadurch entsteht innerhalb eures Entwicklungsteams ein Qualitätsbewusstsein, das auch über eine Projektgrenze hinaus dem Unternehmen zur Verfügung steht. Hier ist es so, wie mit dem Lernen in der Schule: Nur wer täglich übt, wird dieses Wissen in entscheidenden Momenten intuitiv abrufen können.
Ihr fragt euch nun, wie funktioniert CCD eigentlich? Im zweiten Teil meiner Blog-Serie verrate ich es euch. Ich werde euch zeigen, wie ihr CCD in der Praxis einsetzen könnt und wie es möglich ist, Clean Code in eurem Entwicklungsteam zu etablieren.