Codeanalyse mit SonarQube

1. Überblick

In diesem Artikel werden wir uns die statische Quelltextanalyse mit SonarQube anschauen - einer Open-Source-Plattform zur Sicherung der Codequalität.

Beginnen wir mit einer Kernfrage: Warum sollte man Quellcode überhaupt analysieren? Einfach ausgedrückt, um Qualität, Zuverlässigkeit und Wartbarkeit über die gesamte Projektlaufzeit sicherzustellen. Eine schlecht geschriebene Codebase ist in der Wartung immer teurer.

Okay, jetzt lass uns loslegen, indem du die neueste LTS-Version von SonarQube von der Seite download herunterlädst]und unseren lokalen Server wie in diesem https://docs.sonarqube beschrieben einrichten. org/display/SONAR/Erste Schritte + in + Zwei + Minuten[Kurzanleitung].

2. Quellcode analysieren

.

Wir werden das Token später bei der Analyse unserer Projekte verwenden. Wir müssen auch die Primärsprache (Java) und die Build-Technologie des Projekts (Maven) auswählen.

Definieren wir das Plugin in pom.xml :

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>3.4.0.905</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Nun müssen wir diesen Befehl aus dem Stammverzeichnis unseres Projektverzeichnisses ausführen, um ihn zu scannen:

mvn sonar:sonar -Dsonar.host.url=http://localhost:9000
  -Dsonar.login=the-generated-token

Wir müssen the-generated-token durch das token von oben ersetzen.

Wir haben die Host-URL des SonarQube-Servers und das Login (generiertes Token) als Parameter für das Maven-Plugin angegeben.

Nach der Ausführung des Befehls sind die Ergebnisse im Projekte-Dashboard unter http://localhost : 9000 verfügbar.

Es gibt andere Parameter, die wir an das Maven-Plugin übergeben oder sogar über die Weboberfläche einstellen können. _sonar.host . url, sonar.projectKey und sonar.sources_ sind obligatorisch, andere optional

Andere Analyseparameter und ihre Standardwerte sind https://docs.sonarqube.org/display/SONAR/Analysis Parameters[hier].

Beachten Sie auch, dass jedes Sprach-Plugin Regeln für die Analyse von kompatiblem Quellcode enthält.

3. Analyseergebnis

Nachdem wir unser erstes Projekt analysiert haben, können wir die Weboberfläche unter http://localhost : 9000 aufrufen und die Seite aktualisieren.

Dort sehen wir die Berichtzusammenfassung:

Festgestellte Probleme können entweder ein Fehler, eine Sicherheitsanfälligkeit, ein Code Smell, ein Coverage oder eine Duplikation sein. Jede Kategorie hat eine entsprechende Anzahl von Ausgaben oder einen prozentualen Wert.

Darüber hinaus können Probleme einen von fünf verschiedenen Schweregraden haben:

blocker, critical, major, minor und info. Direkt vor dem Projektnamen befindet sich ein Symbol, das den Quality Gate-Status anzeigt - bestanden (grün) oder fehlgeschlagen (rot).

Wenn Sie auf den Projektnamen klicken, gelangen Sie zu einem speziellen Dashboard, in dem Sie die spezifischen Probleme des Projekts detaillierter untersuchen können.

Wir können den Projektcode, die Aktivitäten und die Verwaltungsaufgaben über das Projekt-Dashboard anzeigen - alle auf einer separaten Registerkarte.

Obwohl es eine globale Registerkarte Issues gibt, werden auf der Registerkarte Issues des Projekt-Dashboards nur für das betreffende Projekt spezifische Probleme angezeigt:

Auf der Registerkarte "Probleme" werden immer die Kategorie, der Schweregrad, die Tags und der berechnete Aufwand (in Bezug auf die Zeit) angezeigt, die zur Behebung eines Problems erforderlich sind.

Auf der Registerkarte "Probleme" können Sie ein Problem einem anderen Benutzer zuweisen, es kommentieren und den Schweregrad ändern. Wenn Sie auf das Problem klicken, werden weitere Details zum Problem angezeigt.

Die Registerkarte "Problem" enthält links ausgefeilte Filter. Dies ist gut für das Erkennen von Problemen. Wie kann man also wissen, ob die Codebase für die Bereitstellung in der Produktion ausreicht? Dafür gibt es Quality Gate.

4. SonarQube Quality Gate

In diesem Abschnitt werden wir eine wichtige Funktion von SonarQube - Quality Gate - betrachten. Dann sehen Sie ein Beispiel für die Einrichtung eines benutzerdefinierten.

4.1. Was ist ein Qualitätstor?

Ein Quality Gate ist eine Reihe von Bedingungen, die das Projekt erfüllen muss, bevor es sich für die Produktionsfreigabe qualifizieren kann. Es wird eine Frage beantwortet: Kann ich meinen Code in seinem aktuellen Zustand zur Produktion bringen oder nicht?

Die Sicherstellung der Codequalität „neuen“ Codes bei gleichzeitiger Korrektur vorhandener Codes ist eine gute Möglichkeit, eine gute Codebasis über die Zeit aufrechtzuerhalten. .

Die im Quality Gate festgelegten Bedingungen wirken sich weiterhin auf nicht modifizierte Codesegmente aus. Wenn wir verhindern können, dass neue Probleme im Laufe der Zeit entstehen, werden alle Probleme behoben.

Dieser Ansatz ist vergleichbar mit https://docs.sonarqube.org/display/SONAR/Fixing+the+Water+Leak (Fixierung des Wasserlecks]) aus der Quelle. Dies bringt uns zu einem bestimmten Begriff - Leakage Period. Dies ist der Zeitraum zwischen zwei Analysen/Versionen des Projekts .

Wenn wir die Analyse für dasselbe Projekt erneut ausführen, werden auf der Registerkarte "Übersicht" des Projekt-Dashboards die Ergebnisse für die Leckperiode angezeigt:

Über die Weboberfläche können Sie auf der Registerkarte Quality Gates auf alle definierten Quality Gates zugreifen. Standardmäßig wurde SonarQube way auf dem Server vorinstalliert.

Die Standardkonfiguration für SonarQube way kennzeichnet den Code als fehlgeschlagen, wenn:

  • Die Abdeckung des neuen Codes beträgt weniger als 80%.

  • Prozentsatz der duplizierten Zeilen bei neuem Code ist größer als 3

  • Wartbarkeit, Zuverlässigkeit oder Sicherheitsbewertung ist schlechter als A

Mit diesem Verständnis können wir ein benutzerdefiniertes Quality Gate erstellen.

4.2. Hinzufügen eines benutzerdefinierten Quality Gate

Zuerst müssen wir ** auf die Registerkarte Quality Gates klicken und dann auf die Schaltfläche Create klicken, die sich links auf der Seite befindet. Wir müssen ihm einen Namen geben - baeldung .

Jetzt können wir die gewünschten Bedingungen festlegen:

  • Wählen Sie aus der Dropdown-Liste Add Condition die Option __ Blocker Issues ** aus, die sofort in der Liste der Bedingungen angezeigt wird.

Wir geben als Operator an, setzen Null (0) für die Spalte Error und überprüfen die Spalte Over Leak Period__:

  • Dann klicken wir auf die Schaltfläche Add , um die Änderungen zu übernehmen ** . Fügen wir eine weitere Bedingung hinzu, und zwar nach dem gleichen Verfahren wie oben.

Wir wählen issues aus der Dropdown-Liste Add Condition aus und überprüfen die Spalte Over Leak Period .

Der Wert der O _perator -Spalte wird auf " is less than" gesetzt, und wir fügen eine (1) als Wert für die Error -Spalte hinzu. Dies bedeutet, dass wenn die Anzahl der Probleme in dem neu hinzugefügten Code weniger als 1 beträgt, das Quality Gate als ausgefallen kennzeichnen _ .

Ich weiß, dass dies technisch nicht sinnvoll ist, aber wir wollen es aus Gründen des Lernens verwenden. Vergessen Sie nicht, auf die Schaltfläche Add zu klicken, um die Regel zu speichern.

  • Als letzten Schritt müssen wir unserem benutzerdefinierten Quality Gate ein Projekt hinzufügen.

Wir können dies tun, indem wir die Seite nach unten zum Abschnitt Projekte scrollen. **

Dort müssen wir auf Alle klicken und dann unser Projekt Ihrer Wahl markieren. Wir können es genauso gut wie das standardmäßige Quality Gate von oben rechts auf der Seite festlegen.

Wir scannen erneut den Quellcode des Projekts, wie zuvor mit dem Befehl Maven. Wenn dies erledigt ist, werden wir zur Registerkarte "Projekte" wechseln und aktualisieren.

Dieses Mal erfüllt das Projekt nicht die Quality Gate-Kriterien und schlägt fehl. Warum? Weil wir dies in einer unserer Regeln festgelegt haben, sollte es fehlschlagen, wenn keine neuen Probleme vorliegen.

Gehen wir zurück auf die Registerkarte "Qualitätsgatter" und ändern Sie die Bedingung für issues in größer als Wir müssen auf die Aktualisierungsschaltfläche klicken, um diese Änderung durchzuführen.

Ein neuer Scan des Quellcodes wird dieses Mal durchlaufen.

5. SonarQube in ein CI integrieren

Es ist möglich, SonarQube Teil eines kontinuierlichen Integrationsprozesses zu machen.

Der Build schlägt fehl, wenn die Codeanalyse die Quality Gate-Bedingung nicht erfüllt.

Um dies zu erreichen, verwenden wir SonarCloud , die Cloud-gehostete Version des SonaQube-Servers. Wir können ein Konto hier erstellen .

Über Mein Konto> Organisationen können wir den Organisationsschlüssel sehen. Er wird normalerweise in der Form xxxx-github oder xxxx-bitbucket angezeigt.

Über Mein Konto> Sicherheit können wir ein Token wie in der lokalen Instanz des Servers generieren. Notieren Sie sich das Token und den Organisationsschlüssel für die spätere Verwendung.

In diesem Artikel verwenden wir Travis CI und erstellen ein Konto here mit einem vorhandenen Github-Profil. Alle unsere Projekte werden geladen, und wir können den Schalter umschalten, um Travis CI darauf zu aktivieren.

Das von SonarCloud generierte Token muss den Travis-Umgebungsvariablen hinzugefügt werden. Wir können dies tun, indem Sie auf das Projekt klicken, das wir für CI aktiviert haben.

Dann klicken wir auf "Weitere Optionen"> "Einstellungen" und scrollen dann zu "Umgebungsvariablen":

Wir fügen einen neuen Eintrag mit dem Namen SONAR TOKEN__ hinzu und verwenden das in SonarCloud generierte Token als Wert. Travis CI wird es verschlüsseln und für die Öffentlichkeit nicht sichtbar machen:

Schließlich müssen wir dem Stamm unseres Projekts eine .travis.yml -Datei mit folgendem Inhalt hinzufügen:

language: java
sudo: false
install: true
addons:
  sonarcloud:
    organization: "your__organization__key"
    token:
      secure: "$SONAR__TOKEN"
jdk:
  - oraclejdk8
script:
  - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar
cache:
  directories:
    - '$HOME/.m2/repository'
    - '$HOME/.sonar/cache'

Vergessen Sie nicht, Ihren Organisationsschlüssel durch den oben beschriebenen Organisationsschlüssel zu ersetzen. Durch Festschreiben des neuen Codes und durch Drücken auf Github-Repo wird die Erstellung von Travis CI ausgelöst und das Sonar-Scanning ebenfalls aktiviert.

6. Fazit

In diesem Lernprogramm wurde beschrieben, wie Sie einen SonarQube-Server lokal einrichten und Quality Gate verwenden, um die Kriterien für die Eignung eines Projekts für die Produktionsfreigabe zu definieren.

Die SonarQube documentation enthält weitere Informationen zu anderen Aspekten der Plattform.