Clean Code Development: Das Wertesystem
Das Wertesystem von Clean Code Development umfasst die Werten Evolvierbarkeit, Korrektheit, Produktionseffizienz und Kontinuierliche Verbesserung.
Bei Flow Design handelt es sich um eine Entwurfsmethode für Software, das heißt, dass hierbei keine Objektkonstruktionen bekannt sind und ausschließlich Funktionseinheiten integriert werden. Am Ende folgt die Implementation, bei der der Entwurf nach Flow Design in eine Sprache (z.B. C#) übersetzt wird.
Flow Design agiert über Datenflussdiagramme. Auftretende Probleme werden nach dem Divide und Conquer Prinzip so lange untergliedert und in Unterprobleme aufgeteilt, bis einfache Funktionseinheiten zur Lösung entstehen. Flow Design bietet aufgrund der grafischen Darstellung eine Möglichkeit, Software gemeinsam im Team zu konzipieren, und zwingt die Entwickler ihre Gedanken, in Form von Datenflusszeichnungen zu formulieren.
Die Funktionseinheiten im Flow Design lassen sich in zwei verschiedene Aufgaben unterteilen. Dabei können die Einheiten entweder Logik ausführen oder mehrere Methoden integrieren ohne dabei jedoch selbst Logik auszuführen. Dabei ist zu beachten, dass die Funktionseinheiten immer nur jeweils eine der beiden Aufgaben erfüllen können.
Unter Logik wird Code bezeichnet, der Verhalten herstellt. Das heißt, Code der Veränderungen von Zuständen herbeiführt. Dazu werden die folgenden Konstrukte zur Definition von Logik herangezogen: Expressions, da diese Werte von Input- zu Output-Werten umwandeln, API-Calls und Control Statements wie z.B. If-then-else, for, while etc.. Logik im Kontext des Flow Designs entsteht über Verzweigungen im Programmfluss, Schleifen und Wertzuweisungen.
Integrationsmethoden hingegen rufen lediglich andere Methoden auf, die Logik ausführen oder selber Methoden integrieren. Bei der Integration werden Methoden in einer bestimmten Reihenfolge aufgerufen und verwalten so den Datenfluss.
Im Coding Dojo haben wir eine Kata der Clean Code Developer School bearbeitet. Unter Function Katas versteht man kleine Aufgaben. Die Problemstellung der Katas ist ein Algorithmus, die Lösung wiederum besteht aus einer Funktion. Außerdem sind eventuelle Refaktorisierungen zu beachten (vgl. Clean Code Developer School). Ziel des Coding Dojos ist es, bei der Entwicklung die Prinzipien und Praktiken des CCD zu beachten und zu verinnerlichen.
Die konkrete Aufgabenstellung bei unserem Coding Dojo war wie folgt:
Schreibe eine Funktion, die Römische Zahlen [1] in Dezimalzahlen übersetzt.
Beispiele:
„I“ –> 1
„II“ –> 2
„IV“ –> 4
„V“ –> 5
„IX“ –> 9
„XLII“ –> 42
„XCIX“ –> 99
„MMXIII“ –> 2013
Die Römischen Zahlen bewegen sich im Bereich von „I“ bis „MMM“.
Nimm an, dass die Römischen Zahlen korrekt sind.
Zu Beginn der Aufgabe hat man die ein oder andere Idee, wie man an dieses Problem herangehen kann und welche Lösungen anzusetzen sind. Allerdings sollte man sich im ersten Schritt zunächst folgende Fragen stellen:
Bei Flow Design geht es darum, die Lösung eines Problems an sich zu modellieren und nicht darum, wie es technisch umgesetzt werden soll. Es ist unabhängig von einer bestimmten Programmiersprache, weshalb auch keine Schlüsselwörter oder konkreten Datentypen in der Notation verwendet werden. Setzt man Flow Design konsequent um und trennt Integrationsmethoden von Operationen, wird automatisch das IOSP (Integration Operation Segregation Principle) erfüllt.
Was war nun genau die Herausforderung bei der Aufgabenstellung? Es geht darum, Römische Zahlen in Dezimalzahlen umzurechnen. Im Flow haben wir dafür die Methode „int FromRomanNumerals (string romanNumber)“ deklariert. Auf dieser Ebene haben sich bei dem Problem die 3 Punkte „Übersetzen der römischen Ziffern in dezimale Ziffern“, „Ausgewählte Ziffern mit Vorzeichen versehen“ und „Summieren der Ziffern“ ergeben, die in entsprechenden Methoden implementiert wurden. Wie in einem Team üblich entstehen hier immer wieder Uneinigkeiten und unterschiedliche Lösungswege oder Ideen. Daher wurden, wo nötig, die Methoden nochmal im Detail entworfen bzw. diskutiert.
Flow Design ist ein sehr gutes Mittel für ein Team, um ein gemeinsames Verständnis eines Problems zu erarbeiten und Aufgaben daraus abzuleiten. Diese können dann vom Team parallel abgearbeitet werden. Durch eine konsequente Umsetzung des IOSP Prinzips hat man schon per Design leicht testbare Methoden. So kann die Implementierung auch nach TDD (Test Driven Development) umgesetzt werden.
Über den Autor:
Julian ist Softwareentwickler, spezialisiert auf Web- und .NET-Technologien. Um Clean Code tatsächlich entwickeln zu können, ist ihm, neben rein technischer Entscheidungen, besonders die Kommunikation mit dem gesamten Team wichtig. Clean Code Development ist für ihn ein Teamsport und kann nicht allein gemeistert werden.
Das Wertesystem von Clean Code Development umfasst die Werten Evolvierbarkeit, Korrektheit, Produktionseffizienz und Kontinuierliche Verbesserung.
Clean Code Development ist in verschiedenen Graden unterteilt, die man als Entwickler eine nach der anderen erklimmt und in einem ewigen Kreislauf wiederholt
Um Clean Code Developer zu werden, gilt es eine Reihe von Tugenden zu verinnerlichen: Schätze Variation, Tue nur das Nötigste, Isoliere Aspekte etc.
Wie man Software entwickelt, die sich flexibel und langfristig an neue Markt- und Kundenanforderungen anpassen lässt