Dieser Powerday hat bereits stattgefunden.

Clean Code mit Stefan Lieser & Ralf Westphal

Wer Software nicht nur für heute entwickelt, sondern über lange Zeit ausbauen und pflegen will, der kommt um Clean Code nicht herum. Clean Code ist der Ausdruck von nachhaltigem Denken in dem, was Entwickler jeden Tag produzieren. Fehlt dies, entsteht legacy code, ein brownfield, ein big ball of mud, technische Schulden oder schlicht Spaghetticode. Aufwände für Änderungen jeder Art wachsen exponentiell; die Verschwendung von Ressourcen hält Einzug.

Clean Code ist also nicht „nice to have“, sondern betriebswirtschaftliche Notwendigkeit. Er ist unmittelbar im Sinne der Kunden genauso wie funktionale Anforderungen. Denn Mittel, die durch schlechte Wandelbarkeit gebunden werden, sind echtem Fortschritt entzogen. Doch legacy code und technische Schulden sind kein Schicksal. Es lässt sich etwas dagegen tun. Clean Code kann systematisch hergestellt werden. Es gibt Prinzipien und Praktiken, die helfen, Code vor der Wandelbarkeitserosion zu bewahren. Es gibt eine Methode, mit der Clean Code von Anfang hergestellt werden kann.

In den Powerdays vermitteln die deutschen Clean Code Experten Stefan Lieser und Ralf Westphal, wie Sie in allen Phasen Ihrer Softwareentwicklung die Wandelbarkeit im Blick behalten.

Als Gründer der Initiative Clean Code Developer haben Lieser & Westphal seit 2009 Erfahrung in dutzenden Projekten und mit hunderten Entwicklern gesammelt, wie Clean Code in den Projektalltag eingeführt werden kann – und wo andererseits aber auch typische Hürden stehen. Daraus haben sie einen Ansatz entwickelt, um die weltweit anerkannten Prinzipien und Praktiken zur Herstellung von Clean Code möglichst verlustfrei ins Tagesgeschäft zu transferieren.

Die Trainings der Powerdays geben Ihnen die Möglichkeit, die wesentlichen Aspekte der Methode in einzeln buchbaren Blöcken konzentriert kennenzulernen. Sie können entweder den ganzen Bogen spannen von der Anforderungsanalyse bis zur Refaktorisierung. Oder Sie wählen Trainings entsprechend den Brennpunkten in Ihrer Codebasis.

In allen Blöcken leiten Lieser & Westphal Sie mit vielen Übungen und intensiver Diskussion an, bestehende Entwicklungsgewohnheiten zu hinterfragen, und bieten Ihnen pragmatische Alternativen für Clean Code. Mit den Trainings der Powerdays legen Sie den Grundstein für hohe Wandelbarkeit Ihres Codes und damit für höhere Produktivität und Korrektheit.

Test-Driven Development 2.0 – Clean Code korrekt implementieren

Clean Code, d.h. gutes Design, ist bei TDD in der täglichen Praxis optional, auch wenn der kanonische dritte Schritt „Refactor“ heißt. Im Eifer der Erfüllung funktionaler und nicht-funktionaler Anforderungen überspringen ihn Entwickler nämlich immer wieder zugunsten schnelleren Red+Green-Fortschritts.

Glücklicherweise gibt es einen Weg aus der Misere. Der besteht in einem anderen Verständnis davon, wie und wo „green“ hergestellt wird und was KISS bedeutet.

Lassen Sie sich überraschen, wie „grüner Code“ einerseits schon refaktorisiert entstehen kann – oder andererseits die Refaktorisierung unvermeidbar wird.

Stichworte zum Lernstoff:

  • Informed TDD
  • Clean Code Prinzipien: SRP, SLA, IOSP, PoMO
  • TDD as if you meant it

Teilnehmer bringen einen Laptop mit ihrer favorisierten IDE inkl. eines Testframeworks ihrer Wahl mit (z.B. JUnit, NUnit).

Radikale Objektorientierung – Clean Code systematisch im Team vordenken

Clean Code steht für mehr als verständliche Namen, sparsame Kommentierung oder SOLI -Prinzipien. Clean Code bedeutet hohe Wandlungsfähigkeit – und die resultiert aus einer entsprechenden Codestruktur. Solch eine Struktur lässt sich beim Codieren jedoch nur in kleinem Umfang ad hoc herstellen. Grundsätzliche Wandlungsfähigkeit muss vielmehr vorgedacht, d.h. vor dem Codieren entworfen werden.

Die Objektorientierung hatte versprochen, die Entwicklung von Softwaresystemen in dieser Hinsicht zu verbessern. Nicht nur Wiederverwendbarkeit durch Vererbung sollte sie beschleunigen, Kapselung sollte auch die „Wartbarkeit“ verbessern. Aber was ist daraus geworden? Technical debt, brownfield, legacy code belasten die meisten Projekte – allerdings nicht trotz sondern eher wegen ihrer Objektorientierung. Es ist Zeit, das vorherrschende Paradigma zu hinterfragen.

Im Training lernen die Teilnehmer eine radikale Objektorientierung kennen. Radikal, weil sie zurückgeht an die Wurzeln. Dort findet sich nämlich das zentrale Merkmal für Objektorientierung, das über die Jahrzehnte vergessen wurde: Messaging.

Messaging ist der Schlüssel zu vielen Tugenden guten Softwaredesigns wie Entkopplung, Testbarkeit, Kapselung, klaren Verantwortlichkeiten und sogar agilem Vorgehen. Die Teilnehmer lernen die wesentlichen Prinzipien radikaler Objektorientierung kennen und wenden sie in mehreren Beispielprojekten an. Und sie erfahren, wie ein Umgang mit Anforderungen aussehen muss, um die radikale Objektorientierung nahtlos in agiles Vorgehen einzubetten.

Radikale Objektorientierung bedeutet „OOP as if you meant it“. Technisch ist sie nicht schwierig, profitiert allerdings von modernen Sprachfeatures wie Lambda-Ausdrücken und Closures. C#, Java 8, Xtend (für Eclipse) und C++ 11 bieten beste Voraussetzungen, aber auch mit JavaScript, Ruby, Python oder Java vor Version 8 lässt sich etwas anfangen.

Stichworte zum Lernstoff:

  • Definition der ursprünglichen Objektorientierung
  • Prinzipien der radikalen OO: PoMO, IOSP
  • Verhalten mit Datenflüssen modellieren
  • Klassendiagramme aus Datenflüssen ableiten
  • Die IODA Architektur

Alle Teilnehmer sollten mit Laptop inkl. flüssig laufender IDE ausgestattet sein.

Story Slicing – Clean Code mit dem Product Owner vorbereiten

Clean Code beginnt weit vor der ersten geschrieben Codezeile. Schon bei der Anforderungsanalyse werden dafür die Weichen gestellt. Leider sind die in der Agilität weit verbreiteten User Stories aus Sicht der Codierung wenig dafür geeignet. User Stories geben keinen Hinweis auf ihre Umsetzung. User Stories sind nach der Umsetzung im Code nicht mehr zu finden. Beides begrenzt die Produktivität der Codierung und die Wandlungsfähigkeit des Codes.

Doch das muss nicht so sein. User Stories können sehr leicht „besser verdaubar“ für die Codierung gemacht werden. Anhand einer überschaubaren „Checkliste“ können Product Owner und Entwickler gemeinsam User Stories durch feineres Schneiden an konkrete Codeartefakte binden. Direkt aus dem Gespräch mit dem Product Owner ergeben sich auf diesem Weg wertvolle Hinweise für die Softwarearchitektur. Der Product Owner leitet sogar gewissermaßen den Codeentwurf an.

Stichworte zum Lernstoff:

  • Schema zur systematischen Zerlegung von Anforderungen in Vorbereitung für Clean Code
  • Verständliche Grobarchitektur mit Softwarezellen
  • Kleinschrittiges Feedback mit Prüfständen
  • Ansatzpunkte für automatisierte Akzeptanztests ermitteln

Das Training vermittelt eine Methode, die allein mit „Stift und Papier“ angewendet werden kann. Teilnehmer müssen also keinen Laptop mitbringen. Aufmerksamkeit und Offenheit, auch tief sitzende Gewohnheiten zu hinterfragen, sind ausreichend.

Ziel ist es, die Kommunikation zwischen Product Owner und Entwickler flüssiger zu machen, die Klarheit über die umzusetzenden Anforderungen für die Entwicklung zu erhöhen, den Weg zu lauffähigem Code zu verkürzen sowie Feedback schneller und in kleineren Dosen einholbar zu machen.

Die Mikado-Methode – Schritt für Schritt vom Legacy Code zum Clean Code

Die meisten Teams beginnen ihre Projekte nicht auf der sogenannten „grünen Wiese“, sondern sie arbeiten an Bestandscode. Dieser Code ist häufig schon sehr alt und über die Jahre durch viele Entwicklerhände gegangen. Da mit den Legacy-Systemen nach wie vor Geld verdient wird, ist Abschalten keine Option. Auch Neuschreiben kommt aufgrund des Umfangs nicht in Frage. Um den Code wieder unter die Kontrolle des Teams zu bringen, muss ein Refactoring her.

Das Ziel komplexer Refactorings ist primär, die Wandelbarkeit wieder herzustellen. In diesem Workshop führt Stefan Lieser die Teilnehmer anhand zahlreicher Beispiele durch die typischen Herausforderungen von Refactoring-Projekten. Er erläutert, wie mit einfachen, toolgestützten Maßnahmen die Lesbarkeit des Codes deutlich verbessert werden kann.

Um auch für größere Veränderungen am Code gewappnet zu sein, lernen die Teilnehmer, wie sie automatisierte Tests ergänzen, um damit ein Sicherheitsnetz für die nachfolgenden komplexen Refactorings zu schaffen. Im Anschluss lernen die Teilnehmer die Mikado-Methode kennen, mit der komplexe Refactorings durchgeführt werden, um dadurch die Codebasis wieder unter die Kontrolle des Teams zu bringen.

Die Teilnehmer erhalten während des Workshops zahlreiche Übungsbeispiele, an denen sie das Gelernte selbst ausprobieren. Daher muss ein Rechner mit Visual Studio sowie Schreibzeug mitgebracht werden. Die Teilnehmer müssen über gute C#-Kenntnisse verfügen. Ferner sollten sie Grundkenntnisse im Umgang mit einem Testframework wie NUnit haben. Der Workshop versetzt die Teilnehmer in die Lage, größere Refactoring-Maßnahmen an bestehendem Legacy Code durchzuführen.

Stichworte zum Lernstoff:

  • Mit einfachen Refactorings Erkenntnisse über den Code im Code sichern
  • Automatisierte Tests ergänzen in Legacy Projekten
  • Verwendung leistungsfähiger Mock Frameworks zum Umgang mit Abhängigkeiten
  • Die Mikado Methode als Werkzeug für komplexe Refactorings

Der Dozent Ralf Westphal

Ralf Westphal (www.ralfw.de) ist freiberuflicher Berater, Projektbegleiter, Referent, Autor und Trainer für Themen rund um Softwarearchitektur und die Organisation von Softwareteams. Er ist Mitgründer der Initiative „Clean Code Developer“ (CCD) für mehr Softwarequalität (www.clean-code-developer.de) und propagiert kontinuierliches Lernen mit der CCD School (www.ccd-school.de).

Der Dozent Stefan Lieser

Stefan Lieser (lieser-online.de) ist Informatiker aus Leidenschaft und arbeitet als Trainer, Berater, Autor und Entwickler. Er ist „gerne Lerner“ und sucht ständig nach Verbesserung und neuen Wegen, um die innere Qualität von Software sowie den Entwicklungsprozess zu verbessern. Gemeinsam mit Ralf Westphal hat er die Clean Code Developer Initiative (clean-code-developer.de) ins Leben gerufen. Mit der CCD School (ccd-school.de) bietet er Trainings und Beratung rund um das Thema Clean Code an. Zum Thema Refactoring von Legacy Code schreibt er unter refactoring-legacy-code.net.