Statische Codeanalyse mit unmittelbarem Feedback in der IDE mit SonarLint und SonarQube

Um in der Softwareentwicklung die Codequalität zu erhöhen, gibt es einige Tools zur statischen Codeanalyse, die unterschiedliche Sprachen und Kriterien abdecken. Während wir es gewohnt sind, beim Schreiben von Code von einer IDE mit Compiler, Debugger und dergleichen unterstützt zu werden, laufen solche Codeanalysetools regelmäßig im Zusammenhang mit einem Buildprozess, der separat angestoßen werden muss. Oder sie laufen im Rahmen einer Continuous Integration zentral, und man erhält als Entwickler erst im Nachhinein durch den Report Hinweise auf potentielle Probleme und Verbesserungsvorschläge. Und wie werden die Konfigurationen synchronisiert, wenn es nicht zentral auf einem Server läuft?

Viele Analysetools lassen sich mit einem Server wie SonarQube zusammenfassen und gemeinsam verwalten. SonarQube lässt sich lokal installieren, für größere Projekte und Team-Arbeiten bietet sich jedoch eine Integration in eine zentrale Build-Pipeline an, wie in Java Code Qualität verbessern beschrieben. Dann ist auch gewährleistet, dass alle Codeteile, wo und von wem auch immer sie geschrieben wurden, nach den gleichen Regeln analysiert werden.

Um trotzdem bereits in der IDE oder zumindest vor dem zentralen Buildprozess Analysehinweise zu erhalten, wäre es eine Möglichkeit, die entsprechenden Tools zusätzlich lokal zu installieren. Viele Analyzer sind auch als IDE-Plugin verfügbar. Bei vielen Analyzern und zugehörigen Regeln kann dies allerdings unübersichtlich werden. Das gilt zum einen für die Analyseergebnisse und umso mehr für die Pflege der Analyseregeln, da diese dann unter Umständen über diverse Tools und Entwicklungsrechner resp. -umgebungen konsistent gehalten werden müssen.

Mit SonarQube ist dies einfacher, wenn es lokal installiert wird, weil es dann zumindest eine gemeinsame Stelle für alle Analyseergebnisse und zur Konfiguration der Regeln gibt. Das Problem, die Regeln über mehrere Projektrechner konsistent zu halten, bleibt jedoch. Außerdem ist SonarQube auch lokal installiert nicht in die IDE integriert.

Diese Lücke schließt SonarLint. Dieses Plugin stellt quasi eine Oberfläche für die SonarQube-Engine dar, die sich in die IDE integriert. Es ist wie das Serverprodukt aus dem Hause SonarSource, hieß ursprünglich ebenfalls SonarQube und ist für diverse IDEs verfügbar inklusive Eclipse, IntelliJ und Visual Studio. Wie SonarQube beherrscht SonarLint diverse Sprachen und Regeln zur Codeanalyse.

Bereits beim Einsatz ohne Entwicklerteam und ohne eine komplexere Build-Pipeline bietet SonarLint integriert in die IDE eine zentrale Oberfläche für die Konfiguration der Codeanalyse und die Ergebnisse. Die Version 4.1 für Eclipse enthält Analyzer und vorkonfigurierte Regeln für Java, PHP, Python und JavaScript, die nach Bedarf einzeln aktiviert oder deaktiviert werden können.

Die Codeanalyse kann manuell bspw. für einzelne Dateien gestartet werden (Report), wird aber auch automatisch on-the-fly beim Öffnen und Bearbeiten von Dateien aktiv. Entsprechende Ergebnisse und Verbesserungsvorschläge erscheinen in hierfür vorgesehenen Views in der IDE, und die Stellen im Code werden markiert. Bei Bedarf werden in einer weiteren View die zugehörigen Regeln und deren Erläuterungen gelistet.

In komplexeren Umgebungen lässt sich SonarLint zusätzlich mit einer Instanz von SonarQube oder SonarCloud, dem dritten Mitglied der Produktfamilie, verknüpfen. Die zu prüfenden Projekte werden dann mit den jeweiligen Profilen dieser Instanz verknüpft und nach der dort abgelegten Konfiguration analysiert. Damit ist dann eine lokale Integration und eine Konsistenz über alle verwendeten Rechner und IDEs hinweg möglich.

Darüber hinaus werden durch solch ein Binding an einen Server die Analysemöglichkeiten erweitert: Ist bspw. auf dem Server für dieses Projekt das SonarHTML-Plugin aktiv, wird die HTML-Analyse auch lokal durch SonarLint genutzt.

Ohne Server beherrscht SonarLint keine HTML-Analyse.

Es gibt bisher keine vollständige Übereinstimmung der Analysefunktionen der SonarSource-Familie. SonarQube unterstützt über die Plugin-Schnittstelle auch Analyzer anderer Hersteller. Dies gilt nicht für SonarLint. Entsprechende Analysen werden daher in der IDE über das Plugin nicht ausgeführt oder angezeigt. Vermutlich als Folge hiervon werden bspw. CSS-Dateien von SonarLint bisher auch mit Server-Binding nicht geprüft, denn bis zum Sommer 2018 gab es von SonarSource hierfür kein eigenes SonarQube-Plugin.

Insgesamt halte ich SonarLint vor allem für eine gute Ergänzung wenn auch SonarQube oder SonarCloud verwendet wird. Es ersetzt nicht alle manuellen und zeitversetzten Analysevorgänge außerhalb der IDE, hilft aber erheblich durch umgehende Analysen und weniger Notwendigkeit, die IDE zu verlassen.

Short URL for this post: https://wp.me/p4nxik-3rz
This entry was posted in Java and Quality and tagged , , , . Bookmark the permalink.

Leave a Reply