Statische Codeanalyse mit Polyspace, QAC, QAC++

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 QA-C, QA-C++ und Polyspace ein.
  • Einführung in die Software mit praktischen Beispielen.
  • Live-Vorführung der Programme (QA-C, QA-C++ und 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.

Verwendete Tools

  • Matlab Polyspace
  • QA-C
  • QA-C++

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 kein kostenloses Tool, was dasselbe kann?

Weiterführende Links

  1. Ch. Bommer, M. Spindler, V. Barr: Softwarewartung – Grundlagen, Management und Wartungstechniken. dpunkt.verlag, Heidelberg 2008, ISBN 3-89864-482-0.
  2. P. Liggesmeyer: Software-Qualität: Testen, Analysieren und Verifizieren von Software. 2 Auflage. Spektrum, Akad. Verl., Heidelberg 2009, ISBN 978-3827420565, S. 270.
  3. A. Spillner und T. Linz: Basiswissen Softwaretest. 4 Auflage. dpunkt.verlag, Heidelberg 2010, ISBN 978-3898646420, S. 98.
  4. Harry Sneed, Richard Seidl, Manfred Baumgartner: Software in Zahlen - Die Vermessung von Applikationen. 1. Auflage. Carl Hanser Verlag, 2010, ISBN 978-3-446-42175-2.
  5. http://www.qa-systems.de/produkte/qa-c.html
  6. Motor Industry Software Reliability Association (MISRA)
  7. QA-Systems Cantata
  8. Peter Liggesmeyer, Software-Qualität, Heidelberg: Spektrum-Verlag 2002
  9. Global Association for Software Quality
  10. Arbeitskreis Software-Qualität und Fortbildung
  11. International Software Quality Institute
  12. Software-Engineering und Software-Qualität in Open-Source Projekten (Creative Commons Lizenz)
  13. iqnite - Die Konferenz für Software-Qualitätsmanagement und -Testen
  14. Mathworks Polyspace



→ zurück zum Hauptartikel: Seminar SDE WS 18/19