Zum Inhalt springen

Blogeintrag

Neue Features, die Ihre Software-Entwicklungsteams begeistern werden - Die Codeanalysewerkezeuge Teamscale und SonarQube steigen in den Ring!

Der richtige Einsatz von statischen Codeanalysewerkzeugen verbessert die Codequalität, minimiert den Wartungsaufwand, bewahrt das Vertrauen in den Code und vermeidet unnötige Kosten. Erfüllen kostenlose Analysewerkzeuge ihren Zweck oder sind die Leistungen der kostenpflichtigen Varianten doch wert, sie in Anspruch zu nehmen?

Die Frage, ob man es sich leisten kann kein statisches Analysewerkzeug einzusetzen, kann mit Nein beantwortet werden. Eine Heuristik [1] besagt, dass der Aufwand einer Codeänderung sich aus 70 % einlesen, 20 % Problem lösen und 10 % Code schreiben zusammensetzt. Also wird Zeit vergeudet, wenn sich Entwickler in schlechten nicht überprüften bzw. bereinigten Code einlesen müssen. Diese Zeitverschwendung gilt es auf jeden Fall zu verhindern. Außerdem ist es eine Utopie zu glauben, dass alle Entwickler, einschließlich Junior-Programmierer, unter Termindruck, usw. dauerhaft und zuverlässig Clean Code schreiben.

Kostenpflichtige Werkzeuge bieten sehr interessante Features und diese heben die statische Codeanalyse auf ein neues Level. Doch bringen diese Tools den erwarteten Mehrwert? Im folgenden Newsletter gehen wir auf die Vorteile von Teamscale [2] und der Developer Edition von SonarQube [3] ein, als Vergleichsobjekt dient die frei erhältliche Community Version von SonarQube [3].

SonarQube bietet in der frei erhältlichen Community Version schon eine Vielzahl an Metriken, Analysen und Darstellungsformen. Im Entwicklungsprozess optimal eingebettet und bei einem angepassten Regelset anhand der Guidelines, erzeugt man schon so einen dauerhaften Mehrwert und hebt die Qualität der Codebasis an. SonarQube ist dabei ein sehr verbreitetes Werkzeug, aber natürlich existieren am Markt viele weitere sehr nützliche Open Source Tools, zum Beispiel PMD, FindBugs oder Cppcheck.

Dies führt zur Frage, warum man eine kommerzielle Anwendung einsetzen soll?

Auf der einen Seite bieten solche Werkzeuge zusätzliche und sehr wertvolle Features, die im folgenden Teil vorgestellt werden. Auf der anderen Seite können technische Gründe, wie die Programmiersprache, sehr umfangreiche Projekte oder die Verteilung der Repositories, ausschlaggebend für den Einsatz eines kommerziellen Tools sein. Nun werden im folgenden Teil die Schlüsselfunktionen von Teamscale und SonarQube in der Developer Edition aufgezeigt.

Branch Analyse

Branching und Merging ist State of the Art in der Softwareentwicklung und bietet viele Vorteile. Code mit Fehlern, qualitativen Mängeln und Abweichungen hinsichtlich der Guidelines sollten vor dem Merge in den Master bzw. Trunk ausgebessert werden. Neben Reviews und Pull-Requests ist ein statisches Codeanalyse Werkzeug nötig, um die benötigte Qualität dauerhaft im Hauptstrang des Codes gewährleisten zu können. 

Sonarqube VS Teamcale - Both Win

Inkrementelle Commit-Analyse 

Teamscale hebt sich von der Konkurrenz ab, indem jeder Commit als Inkrement am Server analysiert wird und man dadurch ein Analyseergebnis nach wenigen Sekunden erhält. Dadurch werden Findings (Sammelbegriff von Teamscale für Fehler, Code Smells und Architekturabweichungen) im Webinterface und mittels Plugin in der IDE angezeigt. Die inkrementielle Analyse wird automatisch ausgelöst, sobald der Entwickler einen Code zum Beispiel in git eingecheckt hat.  Mit der zusätzlichen Pre-Commit Funktion kann der Entwickler solch eine inkrementelle Analyse selbst auslösen, also ohne Commit anstoßen, somit erhält man noch kürzere Feedbackschleifen.

Sonarqube VS Teamcale - Teamscale Win

Quality Gates

Die Qualität des Codes wird mittels definierten Kriterien und Grenzwerten überwacht, dabei handelt es sich um boolesche Metriken. Ist eine solche Metrik bei der Build-Anlayse von SonarQube nicht erfüllt, wird dies im Projekt angezeigt und auf Basis dessen eine Aktion durchgeführt werden. Ist das Quality Gate nicht erfüllt, kann der Verursacher und andere Personen benachrichtigt werden, ein Build-Abbruch kann getriggert werden und es ermöglicht dieses Feature, dass ein Merge nur bei Einhaltung der definierten Qualitätsschranke durchgeführt werden kann. 

Sonarqube VS Teamcale - Sonarqube Win
Sonarqube Screenshot

Clone Detection

Codeduplikate sind Qualitätsmängel und bei Codeänderungen stellen sie eine Fehlerquelle dar. Grundsätzlich gilt es solche Duplikate zu vermeiden, die Identifikation einer Kopie erfolgt auch beiOpen Source Werkzeugen. Doch Teamscale erkennt zusätzlich inkonsistente Änderungen und vermeidet dadurch Fehler. Zur Verdeutlichung ein Beispiel: 

Ein Tester erzeugt einen Programmabsturz bei  einem Test. Ein Entwickler findet den Fehler im konkreten Anwendungsfall beim Debuggen und behebt den Fehler sofort, indem er eine Null-Wert Überprüfung hinzufügt. Bei der Commitanalyse von Teamscale erscheint ein "Alert", ein Clone wurde inkonsistent geändert. Also ein Code-Duplikat wurde nur in einer Instanz geändert. Somit wird dem Entwickler klar, dass er diese Überprüfung bei allen Instanzen dieses Codestückes hinzufügen muss. Dadurch werden Fehler vermieden! Noch besser wäre es natürlich, den duplizierten Codeblock im Zuge eines Refactorings zu beseitigen.

Sonarqube VS Teamcale - Teamscale Win
Teamscale Clone-Detection

Test-Gap-Analyse

Mit der Test-Gap-Analyse erhalten Sie Gewissheit, ob Änderungen am Code getestet wurden. Dazu wird in einer Tree-Map die Codeänderungen in einem gewissen Zeitraum mit den ausgeführten Tests gegenüber gestellt. Auch manuelle Tests können mittels "Profiler" in diese Map aggregiert werden. Dieses Feature entdeckt Testlücken und dient als Schnittstelle zwischen Testen und Entwicklung. Darüber hinaus können damit auch die Testsuiten oder Teststufen gesteuert werden.

Teamscale Test-Gap-Analyse
Sonarqube VS Teamcale - Teamscale Win

Cloud

SonarQube ist auch in der Cloud verfügbar und bietet dadurch die Vorteile einer Cloudanwendung. Teamscale ist nur On-Primises verfügbar. 

Sonarqube VS Teamcale - Sonarqube Win

Architekturanalyse

Teamscale bietet die Möglichkeit die gewünschten Architektur-Bausteine sowie deren Abhängigkeiten und Typen in einem Editor zu spezifizieren. Dadurch werden unerwünschte Abhängigkeiten aufgedeckt und die Codebasis wird dauerhaft auf das definierte Modell überprüft. Für die Analyse und Design von solchen Modellen bzw. Softwarearchitekturen ist nach wie vor Expertenwissen nötig, da die Architektur an der Problemstellung ausgerichtet sein muss.

Teamscale Architekturanalyse
Sonarqube VS Teamcale - Teamscale Win

Security Checks

SonarQube enthält Security Checks und diese können in einem Security Report nach OWASP [4] oder SANS [5] Standard aufgelistet dargestellt werden. Die Developer Edition von SonarQube bietet dazu viele Analysen, die die Community Version nicht beinhaltet. 

Sonarqube VS Teamcale - Sonarqube Win

Unterstützung von C/C++

Die Community Edition von SonarQube enthält kein Plugin für C bzw. C++,  allerdings kann über einen Umweg ein Open Source Plugin für diese Sprachen installiert werden. Bei Teamscale wird C/C++ ab der Professional-Ausführung unterstützt. Die Developer Edition von SonarQube unterstützt diese Sprache.  

Sonarqube VS Teamcale - Both Win

[1] C. Lilienthal, Langlebige Software Architekturen: Technische Schulden analysieren, begrenzen und abbauen, dpunkt.verlag, 2017.

[2] https://www.cqse.eu/de/produkte/teamscale/landing/

[3] https://www.sonarqube.org/

[4] https://www.owasp.org/

[5] https://www.sans.org/

Fazit

Auf ein statisches Codeanalysetool darf nicht verzichtet werden! Im Entwicklungsprozess richtig eingebettet und genützt, erzeugt ein solches Tool einen dauerhaften Mehrwert. Kommerzielle Tools liefern sehr nützliche Features, unter anderem kommen Fehler und Code Smells erst gar nicht in den Master bzw. Trunk.  Teamscale hebt sich durch die inkrementelle Analyse mit direkter Anbindung an Versionsverwaltung von der Konkurrenz ab und bietet mit der Clone Detection, der Test-Gap-Analyse und der Architekturanalyse nutzbringende Features.  

Wenn Sie Ihre Software durch ein statisches Analyse Tool dauerhaft verbessern und dabei Fehlerkosten sparen wollen, unterstützen wir Sie gerne. Wir unterstützen bei der Auswahl und Beschaffung, Konfiguration, Schulung und bieten Support für die Tools. Zusätzlich erhalten Sie bei unseren Praxistrainings und Beratungen auch Expertenwissen von unseren Trainern und Beratern zu Architekturanalyse, Clean Code, Coding Guidelines und Best-Practice Methoden in diesem Umfeld.

Kontaktieren Sie uns!

Kontakt für Anfragen

Johannes Bergsmann

johannes.bergsmann@software-quality-lab.com

 +43 5 0657-420
 +43 676 840072 420

Fachlicher Kontakt

Reinhard Eisner Personenfoto

Reinhard Eisner

reinhard.eisner@software-quality-lab.com

 +43 5 0657-449
 +43 676 840072-449