Wie gelangt man zu einem effizienten Produktivbetrieb
SonarQube for Enterprise
Mit SonarQube die Softwarequalität im Entwicklungsprozess überwachen.
Die unterschiedlichen Qualitätsmerkmale von Software werden in der ISO 9126 beschrieben. Sie können grob in funktionale und nicht funktionale Anforderungen unterteilt werden. Die Umsetzung von funktionalen Anforderungen lässt sich durch passende Teststrategien sicherstellen. Darüber hinaus muss sich ein Entwickler mit den folgenden Fragen beschäftigen:
- Wie einfach lässt sich die Anwendung warten?
- Wie ist die Testabdeckung des Codes?
- Werden die Richtlinien eingehalten?
Bei der Beantwortung dieser Fragen kann das serverbasierte Tool SonarQube helfen. SonarQube liefert nicht nur Warnungen, die Qualitätsprobleme aufzeigen, sondern darüber hinaus weitere Kennzahlen, wie zum Beispiel die technische Schuld. Sie beschreibt, wie viel Zeit investiert werden muss, um die bestehenden Qualitätsmängel zu beheben. Eine weitere Kennzahl steht für die Komplexität der Anwendung. Mit ihr kann darauf geschlossen werden, ob die Anwendung leicht zu warten ist.
Die Werte lassen sich zeitlich verfolgen und sind somit wichtige Indikatoren, wie sich die Qualität des Quellcodes über einen Zeitraum entwickelt. Zusätzlich kann durch Grenzwerte sichergestellt werden, dass die Qualität nicht weiter absinkt. Dies ist insbesondere bei Legacy-Systemen wichtig.
Auf dem Weg hin zu einem effizienten Produktivbetrieb gibt es allerdings einige Stolpersteine, die überwunden werden müssen. Beginnend bei der Konfiguration über die Integration von externen Analysewerkzeugen, wie ReSharper, StyleCop oder unterschiedlichen Roslyn-Analyzern, bis hin zur Vereinheitlichung von Richtlinien der SonarQube-Analyse und der lokalen Entwicklung mittels SonarLint. Die Integration von SonarQube in den Continuous-Integration-Prozess (CI-Prozess) spielt dabei eine ebenso wichtige Rolle wie die Rechtevergabe unter den Nutzern und die Organisation von unterschiedlichen Regelsätzen.
Was ist SonarQube?
SonarQube ist eine serverbasierte Plattform, um die Codequalität zu überwachen. Es bietet individuell konfigurierbare Dashboards, um Daten entsprechend den Bedürfnissen unterschiedlicher Stakeholder anzuzeigen. Durch die Historisierung der Daten ist es zudem einfach möglich, ständig ein Auge auf die Entwicklung der Softwarequalität zu haben. So können auch Softwarearchitekten, Projektmanager und CIOs von den Analysen profitieren. Darauf aufbauend können sie Maßnahmen einleiten, um die Softwarequalität zu erhöhen und um Risiken frühzeitig zu erkennen und zu vermeiden.
SonarQube ermöglicht dadurch ein zentralisiertes Management der Softwarequalität und deckt die sieben Achsen der Codequalität ab. Durch die Analyse werden Kennzahlen zu Architektur und Design, Duplikaten, Unit-Tests, Komplexität, potenziellen Bugs, Entwicklungsrichtlinien und Kommentaren zur Dokumentation erfasst und gespeichert. Anhand dieser Kennzahlen wird eine achte Kennzahl ermittelt, die bereits erwähnte technische Schuld. Sie beschreibt den Aufwand, der betrieben werden muss, um den Quellcode von jeglichen technischen Mängeln zu bereinigen, und ist damit der Hauptindikator für die Softwarequalität [1].
SonarQube ist Open Source und kann frei verwendet werden. Wer zu den freien noch erweiterte Funktionen und zusätzlich Support und eine erste Einweisung wünscht, kann verschiedene kommerzielle Lizenzen erwerben. Es besteht aber auch die Möglichkeit, individuelle Anpassungen und Erweiterungen entwickeln zu lassen.
Architektur
Die Architektur von SonarQube (Bild 1) basiert auf vier Komponenten. Die erste ist der SonarQube-Server, der seinerseits aus einem Webserver, einem Search Server und einem Compute Engine Server besteht. Der Webserver stellt eine Oberfläche bereit, mit deren Hilfe man die SonarQube-Instanz verwalten und konfigurieren kann. Außerdem werden die bereits durchgeführten Code-Analysen übersichtlich dargestellt und lassen sich durch Entwickler und Manager auswerten.
Der Search Server liefert die passende Engine, um die Datenbank nach Analysen zu durchsuchen und diese auf der Oberfläche anzuzeigen. Der Compute Engine Server verarbeitet schließlich die durchgeführte Analyse und speichert diese in der angebundenen Datenbank.
Die Datenbank stellt zugleich die zweite Komponente dar. In ihr werden sowohl die Einstellungen als auch die Analysen gespeichert. SonarQube liefert eine Datenbank von Haus aus mit, unterstützt allerdings auch die Verwendung von Microsoft SQL Server, MySQL, Oracle und PostgreSQL. Die mitgelieferte Datenbank sollte nur für Testzwecke verwendet werden. Im Produktivbetrieb wird daher empfohlen, auf eine der unterstützten Datenbanken der Drittanbieter zurückzugreifen [2].
Die dritte Komponente stellen die unterschiedlichen Plugins dar. Mit diesen kann man SonarQube um unterschiedliche Fähigkeiten erweitern. So können Analysen für weitere Programmiersprachen integriert oder auch die Authentifizierung und Autorisierung an das Active Directory delegiert werden. Eine Integration in unterschiedliche Quellcodeverwaltungssysteme wie Git, TFVC oder auch SVN kann ebenso umgesetzt werden.
Der SonarQube-Scanner ist die vierte Komponente. Dieser führt letztendlich die Code-Analyse durch. Der Scanner wird auf der Build-Maschine ausgeführt. Außerdem stehen unterschiedliche Versionen bereit, die verschiedene Build- beziehungsweise ALM-Tools unterstützen. Damit und durch die Unterstützung von Apaches Maven und Ant, MSBuild, Gradle und Jenkins erschließen sich vielfältige und einfache Möglichkeiten, die Analyse in den CI-Prozess zu integrieren, siehe Bild 2. Die Analyse kann aber auch auf der lokalen Entwicklungsmaschine ausgeführt werden.
Continuous Inspection
Wie genau sieht die Integration der Analyse in den CI-Prozess aus?
- Entwickler schreiben…