Ungeplante produktive Deployments von Softwareprodukten auch während der Entwicklungsphase stellen viele Entwicklerteams vor große Herausforderungen. Häufig bleibt keine Zeit mehr für intensive Testläufe - Fehler im Produktivsystem verursacht durch schlechtes Release-Management und fehlenden Qualitätsanforderungen an die Software sind leider keine Seltenheit im Projektalltag.

Luminea setzt hohe Maßstäbe in die Qualität der von uns entwickelten Software. Neben automatisierten Tests wird jeder Code einer vollautomatischen Qualitätskontrolle unterzogen. Software, die unseren Qualitätsstandards nicht entspricht kann erst garnicht zum Kunden ausgeliefert werden. Sichergestellt wird dies durch unsere Qualitäts-Toolchain, in deren Zentrum ein Continuous Integration System (CI) steht.

Continuous Integration (CI)

Jenkins wird von uns als System zur kontinuierlichen Integration eingesetzt. Bei der kontinuierlichen Integration wird regelmäßig das komplette Softwareprojekt automatisiert neu gebaut und getestet. In unserem Fall verwenden wir in Jenkins das Build-Management-Tool „Maven“.

Im ersten Schritt wird der Quellcode des Programms übersetzt (kompiliert). Ist dieser Schritt erfolgreich durchlaufen, werden die Tests (Unit-Tests für einzelne Komponenten sowie Integrationstests für “das große Ganze”) ausgeführt und deren Ergebnisse aufgezeichnet. Aus dem kompilierten Quellcode und anderen Resourcen (Konfigurationsdateien, Grafiken, Texte …) wird schließlich ein lauffähiger, ausführbarer Stand der Software erzeugt. Diese erzeugten Artefakte werden archiviert.

Optimalerweise wird dieser Prozess automatisch jedes mal ausgeführt, wenn ein Entwickler seine Ergebnisse in die Versionsverwaltung (SCM) übertragt.

Optional ist es möglich, diesen Stand der Software direkt auf ein Test-System ausliefern zu lassen, um jederzeit einen aktuellen Stand des Projekts für Demozwecke einsatzbereit zu haben.

Codeanalyse

Im Umgang mit Softwareprojekten benutzen wir die Plattform „Sonar“ zur Analyse der technischen Qualität des Sourcecodes. Sonar untersucht verschiedene Qualitätsbereiche und stellt die Ergebnisse webbasiert dar.

Unter anderem wird von Sonar auf doppelten Code (Duplikate) und die Komplexität einzelner Klassen geprüft. Potentielle Programmierfehler werden schonungslos aufgedeckt. Auch die Dichte von Kommentaren, die Vollständigkeit der Dokumentation und der „Codestyle“ an sich fließt in die Bewertung mit ein.

Eine der wichtigsten Analysen ist hierbei die Testabdeckung („Code coverage“). Sämtliche automatisierten Tests werden ausgeführt und genauestens ausgewertet. Die Ergebnisse zeigen, welche Bereiche der Software von Tests abgedeckt werden und welche Bereiche nur schlecht getestet sind.

Sämtliche Ergebnisse werden archiviert und lassen sich auch im zeitlichen Verlauf betrachten. Einer schleichenden Verschlechterung der Codequalität kann so effektiv entgegen gewirkt werden.

Issue Tracking

Das Issue-Tracking-System JIRA ist das Bindeglied zwischen Product-Owner (Kunde) und dem Entwicklerteam. Es dient der Erfassung und Dokumentation von Entwicklungsaufgaben und ist besonders für das agile Projektumfeld geeignet.

Durch die direkte Anbindung an das CI-System erhält der Kunde die Möglichkeit, sich jederzeit detailliert über den Projektfortschritt zu informieren. Jeder CheckIn im SCM System (SVN, GIT etc.) erzeugt einen automatischen Kommentar am entsprechenden JIRA-Ticket. Dieser Kommentar enthält die Buildnummer, in welcher das Feature des Tickets umgesetzt ist. Mit dieser Information kann der Kunde unmittelbar einen Akzeptanztest auf dem Testsystem durchführen.

Aber auch für das Entwicklerteam bringt die direkte Integration von JIRA in die CI-Landschaft Vorteile. Übernimmt ein Kollege einen Themenbereich eines anderen Teammitglieds, ist es häufig schwierig herauszufinden, an welchen Klassen und Dateien für die Umsetzung eines Features gearbeitet wurde - erst recht, wenn der bearbeitende Kollege schon aus dem Unternehmen ausgeschieden ist. Durch die enge Kopplung von JIRA an die CI-Toolchain lässt sich an jedem JIRA-Ticket nachvollziehen, welche Codestellen vom Entwickler bearbeitet wurden. Diese Funktion wirkt sich äusserst positiv auf die meist langen Einarbeitungszeiten für neue Mitarbeiter aus.