Der Alltag vieler Entwickler wird häufig von schwer lesbarem, schlecht nachvollziehbarem Code dominiert. Sie bemühen sich, “Clean Code” zu schreiben, der Prinzipien wie z.B. Single Responsibility, Kapselung und Kohärenz folgt, finden es aber insbesondere bei Legacy Code oft schwer, diese Prinzipien im Code umzusetzen. Sie spüren das Bedürfnis, Teile der Anwendung massiv umzubauen, haben aber keine Idee, wie sie das umsetzen können. Eventuell fehlt ihnen sogar die Vision, wie der resultierende Code aussehen soll. Während es genügend Informationen für die Durchführung kleiner Refactorings gibt, existiert so gut wie keine Hilfestellung für den Umbau bestehender Designs in Anwendungen.
Die vorgestellte Restrukturierung behandelt ein von uns häufig vorgefundenes Muster: Attribute eines Objektes werden von außen berechnet und gesetzt, und oft finden diese Berechnungen an mehreren Stellen im Code statt. Dadurch ist es unklar, welchen Wert ein Attribut zu einem spezifischen Zeitpunkt enthält; die Algorithmik ist über diverse unzusammenhängende Codestellen verteilt und dadurch schwer zu verstehen, da es keine isolierte gekapselte Stelle im Code gibt, die für einen Wert verantwortlich ist. Wir nennen dieses Muster “Push”, da der Attributwert in das Attribut gedrückt wird. Die Ermittlung des Wertes erfolgt prozedural und sequentiell; der Code ist fragil und fehleranfällig. Erweiterungen und Änderungen sind schwer und enden üblicherweise in sogenannten “Shotgun Surgeries” mit über viele Codestellen verteilten Änderungen.
Anstelle dieses “Push”-Stils kann man die Ergebniswerte auch bei Bedarf ermitteln, nämlich genau dann, wenn sie beötigt werden. Dadurch entstehen klar erkennbare, sehr deskriptive Algorithmen. Wir nennen einen solchen Stil “Pull”, weil der Ergebniswert quasi aus dem Objekt “gezogen” wird. Der so entstehende Code hat sich als lesbar, verstehbar, testbar, änderbar und erweiterbar erwiesen.
Dieser Workshop zeigt anhand eines konkreten Beispiels, wie eine große Restrukturierung auf systematische, strukturierte und reproduzierbare Art und Weise durchgeführt werden kann. Wir zeigen kleine und sichere Schritte. Die Teilnehmer spüren direkt die Vorteile, indem sie selbst Code im “Pull”-Stil erzeugen. Wenn die vorgestellte Strategie konsequent durchgeführt wird, folgt der resultierende Code den oben beschriebenen Prinzipien und wird objektorientiert, mit kleinen Methoden in miteinander kommunizierenden Objekten, in einem Wort: Der Code wird zu “Clean Code”. Die Teilnehmer arbeiten in Paaren an eigenen Laptops.
Nicole Rauch ist Softwareentwicklerin mit umfangreichem Hintergrund in Compilerbau und formalen Verifikationsmethoden. In den letzten Jahren konzentrierte sie sich auf die Sanierung von Legacy Code Applikationen. Neben ihrer Entwicklertätigkeit wirkte sie an der Ausrichtung mehrerer selbstorganisierter Konferenzen mit, unter anderem der SoCraTes 2011 und 2012. Im Anschluss an die SoCraTes initiierte sie die Softwerkskammer, eine deutschlandweite User Community zum Thema Software Craftsmanship, sowie die Karlsruher Regionalgruppe der Softwerkskammer.
Andreas Leidig ist nach über 15 Jahren Berufserfahrung in der agilen Software-Entwicklung, zuletzt als agiler Coach, zu seinen Wurzeln als Software-Entwickler zurückgekehrt. Für die msgGillardon AG stellt er sich der Herausforderung, alte gewachsene Softwaresysteme auf neue tragfähige Beine zu stellen. 2011 war er Hauptinitiator der SoCraTes Konferenz für Software Craftsmanship und Testing, aus der sich deutschlandweit mehrere lokale Communities unter dem Namen Softwerkskammer gebildet haben. Sein Hauptinteresse gilt der Erstellung nachhaltig wartbarer, qualitativ hochwertiger und objektorientierter Software im betriebswirtschaftlichen Umfeld.