Agon Newsletter Ausgabe 02 / 2012.

Zurück

Fachthema - Clean Code in der Praxis: Putzen alleine reicht nicht aus

Seit einiger Zeit macht in Entwicklerkreisen der Begriff des sauberen Codes (engl. clean code auch CC) die Runde. Dabei geht es, ausgehend von Robert C. Martins gleichnamigem Buch - wieder einmal - darum, die allseits bekannten Mängel in der Softwareproduktion zu beseitigen. So gesehen könnte man denken, na schön, ein neuer Versuch, nach strukturierter, objektorientierter, aspektorientierter und sonstiger Programmierung jetzt also sauberer Code. Es wäre aber leichtfertig, nicht genauer hinzusehen. Tatsächlich sind die Regeln und Methoden nicht völlig neu. Bemerkenswert ist aber der Ansatz, den Code nicht als etwas einmal (möglichst fachgerecht) Erstelltes zu betrachten. Das Schreiben und Verbessern von Code wird als fortwährende Aufgabe verstanden, die auch in der Wartungsphase noch nicht beendet ist. Dementsprechend lautet das Credo der Bewegung: Sauberen Code kann man nicht schreiben. Sauberer Code entsteht durch ständiges Verbessern.

Eine wichtige Erkenntnis ist die Tatsache, dass trotz aller Architekturen, Tools und Modellierungs-Frameworks die Qualität eines Softwareprojekts ganz wesentlich durch den Code, d. h. eine exakte und vollständig formalisierte Beschreibung, bestimmt wird. Das wird auch in Zukunft so bleiben. Durch die Verwendung domänenspezifischer Sprachen kann das Niveau der Codierung möglicherweise angehoben werden, aber am Fakt, dass Code matters, ändert sich nichts. Dies muss immer wieder in Erinnerung gerufen werden. Entwickler müssen daran denken, dass ihr Produkt nicht nur das laufende Programm ist, sondern, mit wachsender Bedeutung, gerade auch der Code, und dass dieser mit handwerklicher Sorgfalt geschrieben und gepflegt und immer wieder geputzt werden muss. Auf der anderen Seite müssen die für das Projekt Verantwortlichen dem abgelieferten Code die gleiche Wertschätzung geben. „Code matters" darf kein Lippenbekenntnis bleiben, sondern muss im Projektalltag gelebt werden. Das ist nicht einfach, vorrangig deshalb, weil der Nutzen aus besserer Codequalität nicht kurzfristig sichtbar wird. Er zeigt sich erst, wenn in fortgeschrittenem Entwicklungsstadium neue Entwickler eingearbeitet werden müssen oder die stets auftretenden späten Spezifikationsänderungen einzuarbeiten sind. Und der größte Vorteil ist nur auf ganz lange Sicht erkennbar, wenn nämlich das schleichende Verkommen der Codebasis im Laufe der Programm-Lebenszeit und damit die sonst unweigerlich erforderliche Neuimplementierung vermieden werden kann.

Fortlaufendes Putzen heißt auch fortlaufende Veränderung des Codes in vielen kleinen Schritten. Die CC-Regeln helfen zwar dabei, Fehler zu vermeiden, doch vollständig ausschließen kann man sie nicht. Um in diesem Prozess die dauerhafte Funktionsfähigkeit der Software gewährleisten zu können, ist eine möglichst weite Testabdeckung unverzichtbar. Anders gesagt, Testen ist integraler Bestandteil des Clean Code-Konzepts, wobei es essentiell ist, daran zu denken, dass die Qualität des Testcodes ebenso wichtig ist. Denn Refactorings des Produktionscodes ziehen häufig Anpassungen des Testcodes nach sich, der deshalb genauso gut wartbar sein muss.

Der wichtigste Impuls der CC-Bewegung wird durch das Gewicht gegeben, das den Namen im Code zugemessen wird. Gute Bezeichnungen wurden schon lange gefordert, aber doch eher beiläufig. Das Neue und Richtige ist, dass die Namensgebung als gleichgewichtig zu Entscheidungen über die Struktur des Codes gesehen wird. Das stellt für die Entwickler eine große Herausforderung dar, denn das Finden prägnanter Bezeichnungen ist im konkreten Fall, wo es häufig um recht abstrakte Strukturen geht, die sich wenig unterscheiden, alles andere als einfach. Die publizierten Beispiele arbeiten stets mit gut bekannten Objekten, helfen also wenig. Man muss die Namen ebenso wie den Code ernst nehmen, an ihrer Verbesserung arbeiten und vor allem im Entwicklerteam immer wieder darüber diskutieren und gemeinsam nach Lösungen suchen.

Mit der Aufwertung der Namen geht eine Abwertung der Kommentare einher. Idealerweise sollen im sauberen Code alle Namen so sprechend sein, dass Kommentare überflüssig sind. Natürlich wird diese externe Position sofort wieder abgeschwächt, es bleibt aber die richtige Feststellung, dass zu formal gehandhabte Regeln, wie etwa Javadoc-Kommentare zu jeder simplen Set- und Get-Methode, die Lesbarkeit des Codes erheblich verschlechtern können, ohne einen echten Nutzen zu bringen.

Selbstverständlich erfordert sauberer Code auch die Einhaltung der bereits länger bekannten und bewährten Regeln des Software Engineering. Die Erfahrung zeigt, dass gute Richtlinien allein nicht reichen. Es kommt darauf, an die Motivation der Entwicklerinnen und Entwickler im Projektalltag zu erhalten. Das Putzen des Codes wird oft herausfordernd und schwierig, in Einzelfällen sogar unmöglich sein. Anstrengend und fehleranfällig bleibt das Entwickeln trotzdem. Das lässt sich mit Bergsteigen vergleichen. Gute Ausrüstung, körperliche Übung und Ratschläge oder Regeln helfen, aber das Erreichen des Gipfels garantieren sie nicht. Trotzdem sollte niemand darauf verzichten, so gut wie möglich ausgerüstet eine solche Aufgabe anzugehen.

So wie man sauberen Code nur durch beständiges Putzen erhält, lernt man das Putzen nur durch praktische Übung. Übung und Erfahrungsaustausch über Code funktioniert vor allem über Code-Reviews. Diese sollten möglichst regelmäßig und mit positiver Stimmung stattfinden. Wesentlich ist, sarkastische und kränkende Bemerkungen zu verhindern und Selbstdarsteller in die Schranken zu weisen. Eine offene Atmosphäre wird dadurch erreicht, dass nur Personen, die selbst Codes schreiben, daran teilnehmen dürfen, aber keine Vorgesetzten.

Die Ziele eines Code-Reviews können in Abhängigkeit von den anstehenden Problemen unterschiedlich sein. Im einfachsten Fall erläutert der Schreiber seinen Code und wird durch Fragen auf Fehler und Schwachstellen aufmerksam gemacht. Eine andere Form ist die vorbereitete Kritik einzelner Codefragmente und eine Diskussion, wie diese in gewissen Belangen, z. B. Sauberkeit, Benennung aber auch Performance verbessert werden können.

Für die Agon Solutions ist Clean Code ein wesentliches Mittel, um in Kundenprojekten hochwertige Software zu erstellen. Zudem werden in regelmäßigen firmeninternen Workshops die Prinzipien verinnerlicht und die Praktiken anhand konkreter Beispiele trainiert. Wenn Sie dieses Thema auch interessiert, können wir gerne eine Einführung durchführen. Daneben können wir Sie ebenfalls bei Code-Reviews mit besonderem Fokus auf die Sauberkeit des Codes unterstützen.

Bei Fragen wenden Sie sich bitte an it-solutions@agon-solutions.de