Agon Newsletter 03 / 2015.

Zurück

Agon Solutions Code-Camp zu Software-Entwicklungsumgebung und Code-Review

Software Entwicklungsumgebung mit Git, Maven und Jenkins

Der erste Teil des Code-Camps galt den Grundlagen jeder Entwicklungsumgebung, nämlich der Versionsverwaltung, auch als SCM (Source-Code-Management) bekannt. Hier gewinnt Git einen stetig wachsend Boden gegenüber Konkurrenten wie Subversion (SVN) und anderen, wie folgendes Diagramm zeigt (Quelle: Google Trends).

Google Trends Git vs. Subversion

Abb. 1 Google-Trends Git vs. Subversion

Aufbauend auf dem bereits vorhandenen Grundwissen der Teilnehmer wurden die wesentlichen Workflows praktisch durchgespielt. Besonderen Stellenwert hatte auch der Vergleich mit den jeweils korrespondierenden Aktionen in Subversion. Trotz einer scheinbaren Ähnlichkeit erfordert Git ein grundsätzliches Umdenken, was durch seine dezentrale Struktur begründet ist: Jeder Entwickler hat hierbei sein eigenes, lokales Repository. Herkömmliche Versionierungssysteme wie Subversion sind im Gegensatz zu Git zentralisiert, d.h. es gibt nur ein zentrales Repository, welches die allgemeingültige Referenz darstellt. Mit Git kann der Benutzer ein komplexes Feature daher Schritt für Schritt in sein lokales Repository einchecken, und dieses erst später im Team verteilen (ins Team Repository „pushen"). Er hat somit alle Vorteile einer Versionsverwaltung auch beim lokalen Arbeiten. Ein gewichtiger Vorteil von Git gegenüber Subversion liegt im besseren Merge-Konzept, wodurch wiederum das Arbeiten in separaten Branches (z.B. pro Feature/pro Ticket) deutlich erleichtert wird. Mit Git verliert das Mergen von Branches seinen Schrecken.

Zwar ist Git ein mächtiges Werkzeug, das einen sehr flexiblen Einsatz erlaubt, jedoch müssen für das Arbeiten im Team noch Features ergänzt werden. Bei Agon Solutions setzen wir hierfür auf Gitlab als integrierte Lösung, die Zugriffkontrolle (Access Control) und Werkzeuge zur Kollaboration  bietet. Die web-basierte Oberfläche ermöglicht die Administration der Projekte, und die einfache Übersicht über alle Aktivitäten im Projekt (Activity Stream). Die Änderungen (Commits) können einfach nachvollzogen werden, wie folgendes Beispiel illustriert.

Gitlab Compare View

Abb. 2 Gitlab Compare View

Zur Unterstützung der Zusammenarbeit stehen ein Wiki sowie eine Verwaltung von Merge Requests zur Verfügung, um verschiedene Entwicklungslinien (Branches) wieder zu integrieren.

Als weitere Komponenten einer Entwicklungsumgebung wurden Maven (als Build-Tool) und Jenkins (als Continuous Integration Server) thematisiert. Da bereits zu beiden Themen umfangreiches praktisches Wissen der Teilnehmer vorhanden war, lag der Fokus auf dem nahtlosen Zusammenspiel der Tools und dem Erfahrungsaustausch. Wir erwarten zukünftig einen wachsenden Anteil von Git im Unternehmensumfeld, da hiermit nach Überwindung der Lernkurve eine höhere Produktivität erreicht wird. Immer bleibt jedoch die Kommunikation im Team von zentraler Bedeutung.

Code Review – Methodik und Tools

Der zweite Teil des Workshops behandelte das Thema Source-Code Review. Dies ist einerseits im Rahmen eigener Software-Entwicklungsprojekte relevant, um dort nachhaltig die Qualität zu sichern. Andererseits kommen Code-Reviews auch im Kontext von Architekturaudits sowie unseres neuen Beratungsprodukts „Source-Code Review Factory" zum Einsatz. Daher diente der Workshop dazu, eine breitere einheitliche Wissensbasis in Theorie und Praxis aufzubauen, als Grundlage zukünftiger Entwicklungs- und Beratungsprojekte.

Die methodische Basis bildet das Agon Solutions Code-Review Referenzmodell mit 4 Phasen:

Code-Review Referenzmodell

Abb. 3 Code-Review Referenzmodell

In der ersten Phase, der Automatischen Analyse, kommen bewährte Tools wie SonarQube und Findbugs zum Einsatz, um einen Überblick anhand von Metriken zu gewinnen und umfassende Daten zu potentiellen Bugs zu sammeln.

In der zweiten Phase, der Evaluation, werden anhand dieser Daten Hotspots identifiziert, an denen bestimmte Bugpattern gehäuft auftreten, sowie diejenigen Bereiche ermittelt, wo sich hohe Komplexität konzentriert. Letzteres kann ein Indiz möglicher Schwächen im Design darstellen.

Hotspots

Abb. 4 Hotspots

Die Manuelle Inspektion des Source-Codes findet fokussiert an diesen Stellen statt, um somit schnell zu den wesentlichen Bereichen vorzustoßen. Wir verlassen uns hier nicht auf eine toolgestützte Bewertung, sondern schätzen die Technische Schuld der hoch priorisierten Befunde manuell ein. Wo sich Hotspots zeigen, führen wir eine Ursachenanalyse durch.

Am Ende erfolgt im Assessment eine Bewertung der Code-Qualität, die mit konkreten Handlungsempfehlungen die nächsten Schritte aufzeigt, mit denen die Qualität verbessert und Risiken begegnet werden kann.

Die Qualität von Source-Code sollte differenziert unter verschiedenen Aspekten bewertet werden, wie die folgende Grafik aus der SonarQube Dokumentation verdeutlicht (Quelle: http://www.sonarqube.org/).

Aspekte von Source Code Qualität

Abb. 5 Aspekte von Source-Code-Qualität

Jeder dieser Aspekte wurde im Code-Camp anhand praktischer Beispiele behandelt. Hierzu dienten einerseits real existierende, komplexe Projekte sowie Schulungsprojekte, an denen die Einrichtung der Werkzeuge und des Build-Prozesses geübt wurden.

Außerdem erfolgte eine kritische Auseinandersetzung mit der SQUALE Methodik (Software Quality Assessment based on Lifecycle Expectations), um gute Elemente zu übernehmen und deren Fallstricke zu vermeiden, wie vor allem die fehlende Gewichtung der Befunde nach ihrer Kritikalität: So wird die Technische Schuld eines „Blocker" Bugs genauso gezählt wie die einer unverbindlichen Empfehlung.

Bezüglich der Werkzeuge wurde SonarQube in Verbindung mit Eclipse-Plugins eingehend behandelt, was sowohl deren grundlegende Konzepte als auch Best-Practices im Projekteinsatz angeht. Im Code-Camp wurde dafür eine vorkonfektionierte Review-Umgebung zur Schulung eingesetzt, mit den Komponenten SonarQube, Eclipse (mit allen nötigen Plugins), Jenkins, Maven und Git.

Als Fazit bleibt zweierlei festzuhalten: Eine Software-Entwicklungsumgebung mit aktuellen Tools hat das Potential, den Entwicklungsprozess deutlich effizienter zu gestalten – wofür die sichere Beherrschung dieser Tools Voraussetzung ist. Das Code-Review vermag die Qualität im Projekt wesentlich voranzubringen. Auch hier sind aktuelle Tools Grundlage für eine effiziente Durchführung, entscheidend für die Qualität ist jedoch vor allem die Expertise der Anwender, aus den Befunden der Tools zielführende Schlüsse abzuleiten.

Joachim Nelz, Principal Consultant Agon Solutions