Sonar – Open Source-Projekt- und Codequalitätsüberwachung
Olivier Gaudin, Freddy Mallet, SonarSource, http://www.sonarsource.com
Was ist Sonar?
Sonar (jetzt SonarQube genannt) ist eine Open-Source-Plattform, die von Entwicklungsteams zur Verwaltung der Quellcodequalität verwendet wird. Sonar wurde mit einem Hauptziel entwickelt: Code-Qualitätsmanagement mit minimalem Aufwand für jedermann zugänglich zu machen.
Als solche bietet Sonar Code-Analysatoren, Reporting-Tools, Fehler Jagd Module und Timemachine als Kernfunktionalität. Aber es gibt auch einen Plugin-Mechanismus, der es der Community ermöglicht, die Funktionalität zu erweitern (mehr als 35 Plugins verfügbar), was Sonar zum One-Stop-Shop für Quellcodequalität macht, indem nicht nur Entwickler, sondern auch Manager angesprochen werden.
In Bezug auf die Sprachen unterstützt Sonar die Analyse von Java im Kern, aber auch von JavaScript, PHP, PL / SQL und Cobol über Plugins (Open Source oder kommerziell), da die Reporting Engine sprachunabhängig ist.
Seit Version 2.0 ermöglicht Sonar, die Qualität auf 7 Achsen abzudecken und so über:
- Duplizierter Code
- Codierungsstandards
- Komponententests
- Komplexer Code
- Potenzielle Fehler
- Design und Architektur
Sonar kann für einmalige Audits verwendet werden, wurde jedoch entwickelt, um die globale Strategie zur kontinuierlichen Verbesserung der Codequalität in einem Unternehmen zu unterstützen, und kann daher als zentrales Repository für das Qualitätsmanagement.
Website: https://www.sonarqube.org/
Produktversion: Sonar 2.0
Lizenz: LGPL V3
Unterstützung: https://www.sonarsource.com/support/
Plugins: https://docs.sonarqube.org/display/PLUG/Plugin+Library
Warum sollten Sie die Qualität des Quellcodes verwalten?
Ein gut geschriebenes Programm ist ein Programm, bei dem die Kosten für die Implementierung einer Funktion während der gesamten Lebensdauer des Programms konstant sind – Itay Maman
Als kurzes Intro ist dies die beste Definition der Quellcodequalität, die ich finden konnte. Es wird noch stärker, wenn es umgekehrt ist: Ein schlecht geschriebenes Programm ist ein Programm, bei dem die Kosten für die Implementierung einer Funktion im Laufe der Zeit steigen.
Das klingt schlecht, nicht wahr?
Wir haben alle Situationen gesehen, in denen ein neues Projekt beginnt, dessen Ziel es ist, eine Anwendung in einer führenden Technologie von Grund auf neu zu entwickeln. Alles geht sehr schnell; erste, zweite, dritte Freigabe und dann plötzlich beginnt die Geschwindigkeit des Teams zu sinken. Die vierte Veröffentlichung wird verschoben.Zum dritten Mal bricht das Reparieren von etwas etwas anderes…
Was passiert hier? Angesichts der Symptome können wir davon ausgehen, dass das Team unter anderem unter technischen Schulden leidet und dass die Stakeholder sich dessen nicht bewusst sind und daher nicht damit umgehen können.
Aber das wird höchstwahrscheinlich gelöst, da das Projekt neu ist, Sichtbarkeit hat und sich daher jemand darum kümmern wird (zumindest können wir das hoffen).
Aber dieses Beispiel war nur ein Anfang, da wir, IT-Leute, die meiste Zeit nicht an Anwendungen arbeiten, deren Entwicklung vor weniger als 6 Monaten begann! Unsere Arbeit besteht hauptsächlich aus Upgrades bestehender Anwendungen. Das ist, wo das meiste Geld in der IT ausgegeben wird, wo es weniger Sichtbarkeit gibt, wo es oft einen großen jährlichen Umschlag gibt, um so viel wie möglich zu tun, wo es Leute gibt, die Schlüssel sind, weil sie die einzigen sind, die den Code verstehen können, wo wir keine Ahnung haben, wie lange eine Änderung dauern wird, wo Regressionen häufig sind und die Leute Angst haben, Änderungen vorzunehmen. Und es gibt im Grunde keine Aufmerksamkeit überhaupt aus dem Geschäft auf, dass, just do it!
Bei der Verwaltung der Quellcodequalität geht es darum, den ROI zu optimieren, da Sie dadurch Transparenz und damit mehr Kontrolle über:
- wie schwierig die Wartung sein wird, was können wir erwarten
- die Tatsache, dass sich die Dinge nicht verschlechtern
- Die Tatsache, dass dem kritischen Teil des Systems etwas Aufmerksamkeit geschenkt werden sollte, um beispielsweise die Abdeckung durch Komponententests zu erhöhen, Zyklen zu unterdrücken, Duplikate zu entfernen
Darüber hinaus gibt es ein Backup für Entwickler, um ihre Hand zu heben, wenn sie glauben, dass Refactoring ist erforderlich, das ein wenig zu Achange beitragen würde, aber einen guten ROI hätte.
Wie verwalte ich die Qualität des Quellcodes?
Es gibt sieben technische Achsen, die bei der Quellcodeanalyse eines Projekts berücksichtigt werden sollten, und Sonar kann die Verwaltung aller sieben Achsen unterstützen. Im Sonar-Team nennen wir sie gerne die 7 Todsünden des Entwicklers:
- Nichtbeachtung von Codierungsstandards und Best Practices
- fehlende Kommentare im Quellcode, insbesondere in öffentlichen APIs
- duplizierte Codezeilen
- komplexe Komponenten oder / und eine schlechte Verteilung der Komplexität zwischen Komponenten
- keine oder geringe Codeabdeckung durch Komponententests, insbesondere im komplexen Teil des Programms
- potenzielle Fehler hinterlassen
- ein Spaghetti-Design haben (Paket)…)
Der erste Schritt beim Qualitätsmanagement von Quellcode besteht darin, wirklich zu definieren, welche dieser Achsen für Sie wichtig sind und in welchem Umfang.Auf der Grundlage der aktuellen Situation sollte dann ein Plan erstellt werden, um das Zielniveau zu erreichen (d. h. einfach ein hohes Qualitätsniveau zu halten). Es ist sehr wichtig, klein anzufangen und größer zu werden, wenn es vom gesamten Entwicklungsteam vollständig übernommen wird.
Schauen wir uns nun an, wie Sonar in diesem Ansatz verwendet wird.
Qualitätsprofile
Sonar ermöglicht die Verwaltung mehrerer Qualitätsprofile, um das erforderliche Niveau an die Art des Projekts anzupassen (nur Support, neues Projekt, kritische Anwendung, technische Bibliothek…). Das Verwalten eines Profils besteht aus:
Codierungsregeln aktivieren / deaktivieren / gewichten
Schwellenwerte für Metriken für automatische Warnungen definieren
Projekt- / Profilzuordnung definieren
Dashboards
Sonar enthält 2 Dashboards, die das Gesamtbild vermitteln, um Hinweise zu erhalten, wo Probleme auftreten können, und Projekte zu vergleichen:
- eine konsolidierte Ansicht, die alle Projekte zeigt
- Ein Projekt-Dashboard ist auch auf Modul- und Paketebene verfügbar
Jagdwerkzeuge
Um zu bestätigen, dass das, was ein Problem zu sein scheint, wirklich ein Problem ist, bietet Sonar ein Jagd-Toolset, mit dem Sie von der Übersicht zu den kleinsten Details wechseln können:
- Drilldown auf jeder Maßnahme angezeigt, um zu sehen, was hinter
- Klassen Wolken weniger abgedeckt Klassen von Unit-Tests zu finden
- Hotspots auf einer Seite haben die meisten und die wenigsten Dateien
- und ein Multi-Eintrag (Duplizierung, Abdeckung, Verletzungen, Tests)…) source Viewer, um die mit den Jagdwerkzeugen
TimeMachine
gemachten Feststellungen zu bestätigen Kein Zweifel, dass es sehr wichtig ist zu wissen, wo eine Anwendung steht. Aber noch wichtiger ist es, seine Entwicklung zu kennen und zu verstehen.In der Tat, was ist es wert zu wissen, dass es 20% der Codeabdeckung durch Unittests gibt? Ist es gut oder schlecht? Ist die Antwort anders, wenn es vor zwei Monaten 15% oder 25% waren? TimeMachine ermöglicht es, die Entwicklung zu beobachten und die Vergangenheit wiederzugeben, zumal es Versionen des Projekts aufzeichnet
Wie funktioniert Sonar?
Sonar besteht aus einer relativ einfachen und flexiblen Architektur, die aus drei Komponenten besteht:
- Eine Reihe von Quellcode-Analysatoren, die in einem Maven-Plugin gruppiert sind und bei Bedarf ausgelöst werden. Die Analysatoren verwenden die in der Datenbank gespeicherte Konfiguration. Obwohl Sonar für die Analyse auf Maven angewiesen ist, kann es Maven- und Nicht-Maven-Projekte analysieren.
- Eine Datenbank, um nicht nur die Ergebnisse der Analyse, die Projekte und die globale Konfiguration beizubehalten, sondern auch die historische Analyse für TimeMachine zu speichern. derzeit werden 5 Datenbank-Engines unterstützt: Oracle, MySQL, Derby (nur Demo), PostgreSQL und MS SQLServer
- Ein Web-Reporting-Tool zur Anzeige von Dashboards zur Codequalität in Projekten, zur Fehlersuche, zur Überprüfung der Zeitmaschine und zur Konfiguration der Analyse.
Als Teil seiner Analysatoren setzt Sonar core erstklassige Tools ein, um Verstöße gegen Codierungsregeln (PMD, Checkstyle) zu finden, potenzielle Fehler (Findbugs) zu erkennen und die Abdeckung durch Komponententests (Cobertura, Clover) zu messen. Aber was Sonar wirklich einzigartig macht, ist Squid, ein eigener Codeanalysator, der nicht nur Quellcode, sondern auch Bytecode analysiert und die Ergebnisse mischt.
Da die Analyse über ein Maven-Plugin ausgeführt wird, kann Sonar problemlos in Umgebungen mit „kontinuierlicher Integration“ gestartet werden.
Anwendungsfall im Apache Commons-Collection-Projekt
Voraussetzung für die Ausführung von Sonar ist, dass Java und Maven auf der Box installiert sind. Sobald dies der Fall ist, können Sie Sonar in 5 einfachen Schritten ausführen:
1. Laden Sie die Distribution von https://www.sonarqube.org/downloads/ herunter und entpacken Sie sie
2. Öffnen Sie eine Konsole und starten Sie den Server:
> $ SONAR_HOME\bin\windows-x86-32\StartSonar.fledermaus unter Windows
> $SONAR_HOME/bin//sonar.sh auf anderen Plattformen
3. Öffnen Sie eine Konsole, in der Sie die Quelle auschecken möchten, und führen Sie Folgendes aus:
svn co http://svn.apache.org/viewvc/commons/proper/collections/trunk/.
4. Führen Sie mvn install sonar:sonar im selben Verzeichnis
aus 5. Durchsuchen http://localhost:9000
Die Homepage der Anwendung zeigt die Liste der Projekte unter Qualitätskontrolle mit einigen konfigurierbaren Metriken.
Zum Vergrößern können Sie einfach auf das Projekt klicken und dessen Dashboard abrufen
Von dort aus haben Sie Zugriff auf eine Reihe von Jagdwerkzeugen, darunter:
Der Hotspot, um herauszufinden, welche Dateien „am meisten“ oder „am wenigsten“ haben …
Aber auch jede Metrik im Dashboard kann angeklickt werden, um hinter die Szene zu springen und eine Ansicht der Metrik nach zugrunde liegender Komponente zu erhalten
Jedes Jagdwerkzeug bringt den Jäger schließlich zum Quellcode, in dem die Beute hervorgehoben wird
Das Sonar-Ökosystem
Es gibt ein sehr dynamisches Ökosystem rund um Sonar
- Eine aktive Community aus mehr als 300 Personen auf der Benutzer-Mailingliste und mehr als 150 Personen auf der Entwicklungs-Mailingliste
- 35+ Plugins auf der Forge (http://docs.codehaus.org/display/SONAR/Sonar+Plugin+Library/), die in in vier Kategorien
- Integration mit externen Tools wie Jira, Hudson, Bamboo, GateIn, AnthillPro, Crowd
- Direkte Erweiterung der Kernfunktionalität durch Hinzufügen eines neuen Verhaltens, Berechnen erweiterter Metriken oder Konsolidieren von Projekten, Hinzufügen neuer Metriken
- Abdeckung von Sprachen wie PL / SQL, ActionScript3 hinzufügen
- Integration mit IDEs, um mehr Informationen zum Code zu erhalten, wenn er bearbeitet wird
- 3,000+ Downloads pro Monat
- Ein Kernentwicklungsteam unter der Leitung von SonarSource (http://www.sonarsource.com)
Schlussfolgerung
Nach der massiven Annahme von Continuous Integration Engines und Tests Driven Development Practices, das Management der Quellqualität sieht aus wie der natürliche nächste Schritt für Entwicklungsteams in ihren Bemühungen um Industrialisierung. Sonar ermöglicht es, dieses Ziel mit wenig Aufwand und mit Spaß zu erreichen.
Im Jahr 2010 wird sich die Sonar-Plattform weiterentwickeln, wobei die Hauptachsen der Entwicklung darin bestehen, neue Sprachen abzudecken und die Integration mit IDEs zu verbessern.