Statische Codeanalyse
R 2.0.0
Beschreibung
Statische Analysen des Quellcodes können bei der Qualitätssteigerung im Softwareentwicklungsprozess sehr hilfreich sein. Statisches Testen setzt im Gegensatz zum Dynamischen Testen kein laufendes Programm voraus. Die Prüfmethode wird noch vor der eigentlichen Ausführung der Software durchgeführt und kann für alle Artefakte genutzt werden, die relevant für die Softwareerstellung sind.
Da für die Durchführung der Statischen Codeanalyse der Quellcode und sein Aufbau bekannt sein muss, handelt es sich um ein sogenanntes White-Box Testverfahren.
Der Quellcode wird im Verlauf der Analyse untersucht und einer Reihe von formalen Prüfungen unterzogen. Auf diese Weise sollen bestimmte Arten von Fehlern entdeckt werden, z.B. Verstöße gegen festgelegte Programmierstandards, doppelter Code, Sicherheitslücken usw. Teilbereiche bis hin zu vollständigen Anwendungen können je nach gewähltem Verfahren analysiert werden.
Die Durchführung kann manuell, beispielsweise im Rahmen von Reviews oder Inspektionen mittels intensiver Betrachtung einer oder mehrerer Personen vorgenommen werden.
Zusätzlich erfolgen die Analysen auch werkzeuggestützt. Integrierte Entwicklungsumgebungen (IDEs) helfen den Entwicklern, die Einhaltung von Formatierungsregeln zu prüfen sowie Programmierfehler und schlechte Codepraktiken zu entdecken. Voraussetzung für diese automatisierte Prüfung ist, dass die Artefakte einer bestimmten formalen Struktur folgen. Ziel ist die Prävention von Fehlern und Abweichungen, die so früh wie möglich im Entwicklungsprozess greifen und kostenintensive Nachbesserungen verhindern soll.
Vorteile und Nutzen der statischen Methode
-
früher Einsatz vermeidet kostenintensive Korrekturen im Nachgang
-
Verstöße gegen festgelegte Standards bzw. best practices werden aufgedeckt
-
Verbessert Wartbarkeit durch das Aufdecken von zu komplexen und damit fehleranfälligen Abschnitten
-
Steigert die Qualität und verringert technische Schulden
-
Keine Ausführung der Software benötigt, daher geringer Aufwand in Vorbereitung (Umgebung, Testdaten) und Durchführung
-
Entwicklungsprozess wird optimiert
-
Ermöglicht konsistenten Code bei unterschiedlichen Entwickelnden
-
Architekturvalidierung möglich
-
Ergänzt funktionale Testfälle um Aspekte, die dadurch nur schwer zu entdecken sind (Sicherheitslücken, Performanceprobleme etc.)
Manuelle Reviews als statische Methode
Als manuelle statische Methoden zur Codeprüfung kommen unterschiedliche Review-Arten infrage, die je nach Bedürfnissen im Projekt und verfügbaren Ressourcen gewählt oder auch kombiniert werden können:
-
Formale Reviews
Das manuelle Verfahren bietet Vor- und Nachteile. Als Vorteile sind zu nennen, dass im Vergleich zu automatischen Routinen die manuelle Prüfung z.B. bei kritischen Codeteilen umfangreicher, erfahrungsbasiert und intensiver erfolgen kann. Die Nachteile der manuellen Durchführung liegen in der Aufgabe an sich begründet, die monoton, fehleranfällig und wenig kreativ sein kann. Sie besteht häufig aus sturem Anwenden einfacher Regeln auf einen umfangreichen Code und ist daher ein idealer Kandidat für eine Automatisierung. Darüber hinaus bedarf es bei der manuellen Durchführung der Analyse entsprechender Qualifikationen und Eignungen, z.B. bezüglich verwendeter Programmiersprachen oder sicherheitsrelevanter Prozesse. Durch den zeitlichen Aufwand wird diese Methode u.U. kostenintensiv.
Aus diesen Gründen stellt eine Kombination aus manuellen und automatisierten Methoden einen erfolgsversprechenden Weg dar, weshalb eine toolbasierte Unterstützung der Analyse ermöglicht werden sollte.
Automatisierung der statischen Analyse
Neben den genannten manuellen Reviews werden zur statischen Analyse des Quellcodes häufig automatisierte und werkzeuggestützte Methoden verwendet. Diese Analysetools haben unterschiedliche Funktionsumfänge. Diese Unterschiede liegen beispielsweise in den Berichtsmöglichkeiten, der Anpassbarkeit oder dem Umfang der Analysen von einfachen Fehlerprüfungen bis hin zum komplexen Aufspüren von Sicherheitslücken oder Architekturverletzungen.
Worauf ist bei der Auswahl des Werkzeugs zu achten?
Das Werkzeug sollte zur verwendeten Technologie, Programmiersprache sowie Compilern passen. Für alle gängigen Programmiersprachen gibt es geeignete Tools, die eine automatisierte statische Analyse ermöglichen. Weitere Aspekte, die es zu beachten gilt, sind die angebotenen Lizenzmodelle, Bedienbarkeit, Zertifizierungen, unterstützte Betriebssysteme, Erweiterbarkeit und die Frage, ob das Tool für die Größe des Projekts angemessen ist und die geforderten Metriken berichten kann.
Bekannte Beispiele:
-
Lint
-
PMD
-
Checkstyle
-
Findbugs (Spotbugs)
-
SonarQube
-
jQAssistant
-
v.m
Eine Liste der Werkzeuge nach Programmiersprachen findet man in folgendem Wikipedia Artikel.
Wie funktioniert die Einordnung in den Entwicklungsprozess
Die statische Codeanalyse und somit das frühe Aufdecken von Fehlern sollte in den Entwicklungsprozess integriert sein. Sie lässt sich wie beschrieben von Hand oder automatisiert Durchführen.
In einer hohen Ausbaustufe erfolgt beim Einsatz von Continuous Integration der gesamte Prozess idealerweise automatisch bei jedem Update des Codes. Eine Einbettung der statischen Analyse in eine bestehende CI/CD-Pipeline erfordert neben der Auswahl und Konfiguration eines passenden Tools die Definition eines neuen Schrittes im Prozess. Dieser Schritt zur Codeanalyse kann separat erfolgen oder Teil des Build Prozesses sein. Für das Projekt bedeutet diese Einführung zunächst Mehrkosten, die sich jedoch in der Folge durch Zeitgewinne und Qualitätssteigerungen rentieren werden.
Beim Einsatz mehrerer Entwicklerteams sollte eine Einigung auf gemeinsam definierte und anzuwendende best practices bzw. Richtlinien erfolgen. Darüber hinaus sollten die Analyseergebnisse in brauchbarer Form berichtet und durch das Team überprüft werden können.
Die Kombination und der komplementäre Einsatz statischer und dynamischer Testmethoden im Entwicklungsprozess ist zu empfehlen, bei dem die statische Codeanalyse bereits zu einem frühen Zeitpunkt eingesetzt werden sollte.
Quellen
-
Abbildungen Anwendungsbeispiel: FLATICON, Freepik Company S.L. Autor*in: juicy_fish, abgerufen am 27.11.2024
-
ISTQB Glossary statische Analyse, abgerufen am 19.08.2024
-
Wikipedia, Eclipse, abgerufen am 21.02.2024
-
A. Spillner, T. Linz - Basiswissen Softwaretest, 7. Auflage, 2024
-
Wikipedia Artikel, Werkzeuge zur statischen Analyse, abgerufen am 01.02.2024