Real-Time and Embedded Systems

Statische Analysewerkzeuge

Bei der Programmierung können statische Analysewerkzeuge den Programmierer beim Aufspüren von Programmierfehlern unterstützen. Dabei wird der Quellcode analysiert, was meist weit über die Analysen von Compilern hinausgeht. Es geht nicht unbedingt darum, echte Fehler zu finden, sondern auf Stellen im Programm hinzuweisen, die so formuliert sind, dass der Programmierer möglicherweise etwas anderes gemeint haben könnte. Ein solches Programm wird nicht als robust bezeichnet und sollte daher so umformuliert werden, dass die Intentionen des Programmierers möglichst explizit sichtbar sind.

Beispiele für Analysewerkzeuge für C, die auch mit BrickOS Programmen funktionieren:

Secure Programming List (splint)

  • Webseite: splint.org
  • Ist als Paket in vielen Linux Distributionen vorhanden
  • Beispielaufruf:
    • -I gibt include-directories an, hier müssen die BrickOS Include Dirs gewählt werden
    • -systemdirs gibt Systemverzeichnisse an, die beim Prüfen ignoriert werden sollen. Hier sollten auch die BrickOS-Include Dirs gewählt werden, damit man keine Warnungen über BrickOS interne Dateien bekommt.
    • -warnposix eliminiert Warnungen, die darauf hinweise, dass man keine Posix konformen Standardbibliotheken benutzt. Da hier BrickOS nicht offiziell dem Posix Standard entspricht, sollte man hier die Warnung ausschalten.

 

splint \
  -systemdirs \
    "/home/lego/brickos/include:/home/lego/brickos/boot"\
  -I /home/lego/brickos/include \
  -I /home/lego/brickos/boot \
  -warnposix \
   rover.c   

SPLint sollte entsprechend den Anforderungen parametrisiert werden. So können viele einzelne Checks durch flags ein oder ausgeschaltet werden. Vordefinierte Regelmengen können durch folgende Aufrufparameter erreicht werden:

  • -weak, -standard, -checks, -strict

 

Beschreibungen gibts mit

man splint

Welche checks konkret bei welchem Parameter gemacht werden lässt sich herausfinden durch

splint -help modes

Viele der Robustheitsregeln des MISRA-C Standards lassen sich mit splint überprüfen, allerdings nicht alle, daher gibt es keinen fixen -misra Parameter sondern man muss die Checks selbst auswählen. Siehe z.B. diesen Diskussionsbeitrag.