Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Statische Code-Analyse

Statische Code-Analyse oder kurz statische Analyse ist ein statisches Software-Testverfahren, das zur Übersetzungszeit durchgeführt wird.

Inhalt4 Abschnitte
  1. 1. Grundidee und Einordnung
  2. 2. Abgrenzung zu anderen Prüfungen
  3. 3. Prüfverfahren und erkennbare Fehler
  4. 4. Werkzeuge und Einsatzorte

Grundidee und Einordnung

Die statische Code-Analyse, kurz statische Analyse, ist ein statisches Software-Testverfahren zur Übersetzungszeit. Dabei wird Quelltext formalen Prüfungen unterzogen, bevor die Software ausgeführt wird, etwa in einem Modultest. So lassen sich bestimmte Fehler früh erkennen.

Sie gehört zu den falsifizierenden Verfahren: Geprüft wird, ob Fehler vorhanden sind. In Anlehnung an das Programm Lint heißt der Vorgang auch „linten“ beziehungsweise „linting“.

Abgrenzung zu anderen Prüfungen

Statische Code-Analyse ist ein White-Box-Testverfahren, weil dafür der Quellcode benötigt wird. Die Prüfung kann manuell durch Inspektion oder automatisch durch Programme erfolgen. „Statisch“ bedeutet, dass Algorithmen und Daten der Software in ihrer formulierten Form vorliegen und nicht laufen müssen.

Vorläufer sind Prüfverfahren der normierten Programmierung und Style Checker, die Code-Muster erkennen. Die dynamische Code-Analyse benötigt dagegen ein laufendes Programm; ein Beispiel für ein dynamisches Pendant zur Analyse zur Compilezeit ist Profiling zur Laufzeit.

Prüfverfahren und erkennbare Fehler

Entwickler können Quelltext sorgfältig lesen; viele Fehler lassen sich aber auch werkzeuggestützt oder automatisch finden. Die Verfahren reichen von einfachen Coding-Standards, etwa nur einem return-Statement pro Funktion, über Prüfungen von Typumwandlungen und Bereichsgrenzen bis zur Suche nach Speicherlecks und zur technischen Verifikation von Quelltext.

Einfache Prüfungen sind oft bereits im Compiler integriert, zum Beispiel die Kontrolle, ob eine Variable initialisiert wurde. Stilistische Methoden bewerten Programmierstil nach Ästhetik und Pragmatik; häufig geben sie nur ignorierbare Warnungen aus. Profiler erzeugen zusätzlichen Objektcode und liefern Aussagen über Codeabdeckung und Codefrequentierung.

Semantik-basierte statische Analysatoren prüfen große Codebereiche systematisch auf angreifbare Stellen. Dazu zählen Race Conditions (Wettlaufsituationen), Formatstring-Angriffe, Pufferüberläufe, Speicherlecks, ungültige Arrayzugriffe außerhalb der Grenzen („Out of Bound“) und Division durch 0.

Für sicherheitsrelevante Software schreiben Safety-Normen den Einsatz statischer Analyseverfahren vor, darunter ISO 26262, IEC 61508 und DO-178C.

Werkzeuge und Einsatzorte

Zu den genannten klassischen Werkzeugen gehören Lint, Checkstyle, FindBugs und PMD für Java, Cppcheck für C/C++, Splint für C sowie FxCop und StyleCop für C#. Werkzeuge können eigenständig laufen oder in Entwicklungsumgebungen und Build Server integriert sein.

Sie prüfen nicht nur Kodierungsregeln wie MISRA-C-Regeln, sondern erkennen auch funktionale und technische Fehler, potenzielle Bugs und qualitative Schwachstellen im Code. Solche Schwachstellen heißen Code-Smells; ein Beispiel ist duplizierter Code, auch Software-Klone genannt.

Einige Werkzeuge, etwa Rough Auditing Tool for Security (RATS), suchen sicherheitsrelevante Fehler wie Pufferüberläufe oder Wettlaufsituationen. Andere prüfen Architekturmetriken und die Übereinstimmung des Codes mit einer Architekturspezifikation, beispielsweise Axivion Bauhaus Suite, ConQAT, Teamscale, Sonargraph und Sotograph.

Weiterlesen

Quelltext Quelltext, auch Quellcode (englisch source code) oder unscharf Programmcode genannt, ist in der Informatik der für Menschen lesbare, in einer … Modultest Ein Modultest (auch von englisch unit test als Unittest oder als Komponententest bezeichnet) ist ein Softwaretest, mit dem einzelne, abgrenzbare Teile von … Softwaretest Ein Softwaretest prüft und bewertet Software auf Erfüllung der für ihren Einsatz definierten Anforderungen und misst ihre Qualität. Pendant Das Pendant [pɑ̃ˈdɑ̃ː] ist ein (passendes) Gegenstück (bzw. Gegenpart), eine Ergänzung oder Entsprechung zu einem bereits vorhandenen Gegenstand oder einer … Laufzeit (Informatik) Der Begriff Laufzeit (englisch runtime) beschreibt in der Informatik einerseits die Zeitdauer, die ein Programm, ausgeführt durch einen Rechner, … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Java (Programmiersprache) Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Kontinuierliche Integration Das Ziel der kontinuierlichen Integration ist die Steigerung der Softwarequalität. Typische Aktionen sind das Übersetzen und Linken der Anwendungsteile, … Code-Smell Unter dem Begriff sollten handfestere Kriterien für Refactoring beschrieben werden, als das durch den vagen Hinweis auf Programmästhetik geschehen würde. Bei … Wettlaufsituation Eine Wettlaufsituation, aus dem Englischen auch Race Condition (deutsch Wettlauf-Bedingung) oder Race Hazard (deutsch Wettlauf-Risiko), mitunter auch … Podcast Als Podcast wird ein Medienformat bezeichnet, bei dem es sich meist um eine Serie abonnierbarer Audiodateien, seltener Videodateien, im Internet handelt.