Statische Code-Analyse

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Mai 2007 um 09:55 Uhr durch Complex (Diskussion | Beiträge) (Zurückgesetzt: Werbung). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Statische Code-Analyse oder kurz statische Analyse bezeichnet eine bestimmte Art von Softwaretest. Der Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen bestimmte Sorten von Fehlern entdeckt und behoben werden können, noch bevor die entsprechende Software (z. B. im Modultest) ausgeführt wird. Die Methodik gehört zu den falsifizierenden Verfahren, d. h. es wird die Anwesenheit von Fehlern bestimmt.

Methodischer Zusammenhang

Einordnung

Im Rahmen der Softwaretestverfahren ist die Statische Code-Analyse den White-Box-Test-Verfahren zuzuordnen (man benötigt den Quellcode). Die Analyse kann durch manuelle Inspektion erfolgen, aber auch automatisch durch ein Programm. Man spricht dann von statischer Analyse, da die zu testende Software in Form von Algorithmen und Daten in ihrer Formulierung und Beschaffenheit (statisch) dem Prüfer (oder Werkzeug) vorliegt. Das ist in etwa vergleichbar mit statischen Berechnungen im Ingenieurbau.

Abgrenzung

Vorläufer der statischen Analyse sind die Prüfverfahren der normierten Programmierung und die Werkzeuge zur Erkennung von Code Mustern, die sogenannten Style Checker. Ein Verfahren bzw. ein Werkzeug, das sowohl vollständige als auch eindeutige Analysen erstellt, ist noch nicht bekannt.

Verfahren

Neben dem gewissenhaften Studium von Quelltext durch Entwickler ist es möglich, viele inhaltliche Fehler werkzeuggestützt oder automatisch zu erkennen. Die Bandbreite reicht von der Sicherstellung von einfachen Coding-Standards (z. B. ein return-Statement pro Funktion) über die Prüfung von Typumwandlungen und Bereichsgrenzen über die Suche nach bestimmten Arten von Speicherlecks bis hin zur technischen Verifikation von Quelltext.

Einfache Analysen sind häufig bereits im Compiler (Übersetzer) einer Programmiersprache integriert, z. B. die Prüfung auf Initialisierung einer Variablen. Darüberhinaus gibt es Methoden, die den Programmierstil auf Ästhetik und Pragmatik prüfen, nämlich die stilistischen Methoden. Allerdings werden häufig nur Warnmeldungen angezeigt, die ignoriert werden können. Bei sogenannten Profilern wird zusätzlicher Objektcode generiert, welcher Aussagen über Codeabdeckung und Codefrequentierung generiert. Echte statische Analysierer gibt es nur wenige.

Werkzeuge

Als „Klassiker“ auf diesem Gebiet ist wohl Lint zu nennen (siehe hierzu auch Splint). Neuere Werkzeuge beschränken sich nicht nur auf funktionale Fehler, sondern erkennen auch qualitative Schwachstellen im Code (so genannte Bad Smells), wie zum Beispiel duplizierten Code (auch Software-Klone genannt). Sie gehen auch über den Quellcode hinaus und prüfen Konformität des Codes mit der Architekturspezifikation. Ebenso sind durch die neueren Werkzeuge auch Programmierregeln wie die MISRA-C-Regeln überprüfbar. Weiterhin besteht eine Abgrenzung zu den Style Checkern.

Vision

Sollten eines Tages die Compiler die vollständige statische Analyse von Programmen beherrschen, ist die Vision von der fehlerfreien Software allerdings noch nicht erreicht. Dann gilt es, die in der Software enthaltene und realisierte Logik mit der beabsichtigten Logik des Auftraggebers abzugleichen.