Statische Codeanalyse mit Polyspace

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Einleitung

Statische Code-Analyse oder kurz statische Analyse ist ein statisches Software-Testverfahren. Der Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen bestimmte Sorten von Fehlern entdeckt 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.

In Anlehnung an das klassische Programm Lint wird der Vorgang auch als linten (englisch linting) bezeichnet.

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über hinaus 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.

Automatisierte Codereview-Software vereinfacht die Aufgabe der Durchsicht großer Programmteile durch systematische Überprüfungen auf angreifbare Stellen wie:

  • Race Conditions
  • Formatstring-Angriffe
  • Pufferüberläufe
  • Speicherlecks


Aufgrund einer nach wie vor nicht unerheblichen Anzahl an falsch erkannten, nur vermeintlichen Schwächen im Quellcode ist eine vollautomatische Korrektur durch die Werkzeuge zur statischen Code-Analyse bis zum heutigen Tag nicht Usus.

Dynamische Software-Testverfahren sind bestimmte Prüfmethoden um beim Softwaretest Fehler in Software aufzudecken.

Während bei statischen Verfahren die zu testende Software nicht ausgeführt wird, setzen dynamische Verfahren die Ausführbarkeit der Software voraus. Grundprinzip der dynamischen Verfahren ist die Ausführung der zu testenden Software mit systematisch festgelegten Eingabedaten (Testfälle). Für jeden Testfall werden zu den Eingabedaten auch die erwarteten Ausgabedaten angegeben. Die vom Testlauf erzeugten Ausgabedaten werden mit den jeweils erwarteten Daten verglichen. Bei Abweichungen liegt ein Fehler vor.

Wesentliche Aufgabe der einzelnen Verfahren ist die Bestimmung geeigneter Testfälle für den Test der Software.

Ihre Aufgaben

  • Motivieren Sie das Gebiet der statischen Codeanalyse.
  • Einführung in die Qualitätssicherung durch statische Software-Testverfahren.
  • Stellen Sie die in der Literatur gängigen Verfahren vor.
  • Ordnen Sie vor diesem Hintergrund MATLAB Polyspace ein.
  • Einführung in die Software mit praktischen Beispielen.
  • Live-Vorführung von MATLAB Polyspace (Lizenzen sind an der HSHL vorhanden)
  • Beschreiben Sie den Funktionsumfang der Software anhand praktischer Beispiele.

Kür-Aufgabe

Machen Sie doch eine Umfrage unter Ihren Kommilitonen (Semester 1-7) welche Firmen welche statische Software Testverfahren einsetzen und warum. Das wäre aber schon das ++ hinter der 1.

Verwendetes Tool

Mögliche Fragen

  • Wozu braucht man eine statische Codeanalyse?
  • Wie funktioniert eine statische Codeanalyse?
  • Was bedeutet MISRA?
  • Wie dokumiert man die Ergebnisse?
  • Wie ist der Ablauf einer statischen Codeanalyse?
  • Gibt es ein kostenloses Tool, was dasselbe kann?

Literatur

  1. Bommer,C.; Spindler, M., Barr, V.: Softwarewartung – Grundlagen, Management und Wartungstechniken. Heidelberg: dpunkt.verlag, 1. Auflage 2008. ISBN 978-3-89864-482-2
  2. Liggesmeyer, P.: Software-Qualität: Testen, Analysieren und Verifizieren von Software. Heidelberg: Spektrum, Akad. Verl., 2 Auflage 2009, ISBN 978-3827420565, S. 270 ff.
  3. Spillner, A.; Linz, T.: Basiswissen Softwaretest. Heidelberg: dpunkt.verlag, 4 Auflage 2010. ISBN 978-3898646420, S. 98 ff.
  4. Sneed, H.; Seidl, R.; Baumgartner, M.: Software in Zahlen - Die Vermessung von Applikationen. München: Carl Hanser Verlag, 1. Auflage 2010. ISBN 978-3-446-42175-2.

Weiterführende Links




→ zurück zum Hauptartikel: Seminar SDE WS 23/24