Statische Analyse

Bugs und Defekte in Multitasking-Software eliminieren

Seite: 4/5

Anbieter zum Thema

Statische Analysetools als ergänzende Werkzeuge

Statische Sourcecode-Analysetools analysieren die Software-Codebasis auf Defekte, ohne die Programme auszuführen, die aus der Software entstehen. Sie können die Ausführungspfade in der Codebasis vollautomatisch abdecken. Statische Analysetools identifizieren Bugs und Defekte in einer frühen Phase des Entwicklungsprozesses, denn sie benötigen keine ausführbare Version des Codes, der untersucht werden soll. Mit statischer Analyse lassen sich im Extremfall sogar Bugs finden, noch bevor der Code erfolgreich kompiliert wurde.

Manuell erzeugte Testfälle sind nicht erforderlich, da die Analysealgorithmen selbst die relevanten Pfade durch den zu testenden Code identifizieren, ebenso wie die für eine Analyse geeigneten Datenwerte. Die statische Analyse ist eine verhältnismäßig schnelle Methode. Für eine Codebasis mit mehreren Millionen Zeilen fallen nur wenige Stunden an. Die schnelle Analyse von Code eines Entwicklers direkt an dessen Arbeitsplatz dauert nur ein paar Sekunden.

In der Embedded-Softwareentwicklung können statische Analysetools sporadisch auftretende Fehler entdecken, wie z.B. solche, die durch die Unterbrechung von Tasks in einer präemptiven Multitaskingumgebung verursacht werden, wenn ein Softwareentwickler einen kritischen Abschnitt nicht ausreichend geschützt hat. Die Fehlersuchalgorithmen eines statischen Analysetools können diese Art von Bugs konsistent und wiederholbar auffinden, selbst wenn der Bug nicht konsistent oder wiederholbar zur Programmlaufzeit auftritt.

Die beiden Toolkategorien – dynamische und statische Analysetools – stehen somit also nicht in Konkurrenz zueinander, sondern sie ergänzen sich: Statische Analysetools sind in Bereichen stark, die für dynamische Analysetools problematisch sind, und umgekehrt.

Vielfalt und Komplexität von Softwarefehlern

Mit Tools zur statischen Sourcecode-Analyse lassen sich viele verschiedenartige Fehler und Defekte, die die Softwarequalität und -sicherheit beeinträchtigen, präzise identifizieren. Die nachfolgende Liste zeigt einige der Fehlerarten, die mit den erhältlichen, kommerziellen statischen Sourcecode-Analysatoren identifiziert werden können:

  • Null-Pointer-Zugriffe
  • Benutzung von freigegebenem Speicher
  • Doppelte Freigabe eines Buffers
  • Array-Indexfehler
  • Fehlanpassung von new/delete
  • Stack-Überlauf
  • Heap-Überlauf
  • Rückgabe eines Pointers auf lokale Variablen
  • Logisch inkonsistenter Code
  • Ungesicherte Verwendung von Nutzerdaten
  • Nicht initialisierte Variablen
  • Unerlaubte Verwendung von Negativwerten
  • Übergabe großer Parameter ‚by value’
  • Unterallokation dynamischer Daten
  • Memory Leaks
  • File-Handle Leaks
  • Netzwerkressourcen-Leaks
  • Nicht verwendete Werte
  • Nicht behandelte Return-Codes
  • Verwendung ungültiger Iteratoren

Fehler und Defekte werden auf einem GUI dargestellt, das ähnlich aufgebaut ist wie die Benutzeroberflächen, die Softwareentwickler von Source-Level-Debuggern kennen.

Oft sind die Fehler und Defekte, die mit statischen Analysetools identifiziert wurden, nicht auf eine einzelne Codezeile oder Codefunktion begrenzt. Viele der subtileren Defekte sind „interprozedural“. Das heißt, ein Fehlerszenario kann sich über mehrere Schritte entwickeln, wobei sich einige dieser Schritte in einer Codefunktion befinden und weitere Schritte – oder letztendlich ein Ausfall selbst - in einer anderen Codefunktion.

Manche der entdeckten Fehler sind hochkomplex. Die GUIs statischer Analysetools stellen daher jeden Fehler in einem eigenen Fenster dar. Die an der Entstehung des Defektes beteiligten Codezeilen werden gekennzeichnet und erklärt. Werden mehrere Fehler in wenigen Codezeilen derselben Einzelfunktion gefunden, erhält jeder Fehler ein eigenes Fenster. Bei einem Defekt, der mehrere Softwareprozeduren betrifft, wird jede relevante Prozedur in einem separaten GUI-Fenster dargestellt.

(ID:44759460)