Statische Codeanalyse ist eine Art von Softwaretest, bei der Quellcode bestimmten formalen und algorithmischen Prüfungen unterzogen wird um Fehler in Software zu finden. Die Überprüfung erfolgt hier im Gegensatz zur dynamischen Analyse nicht zur Laufzeit und wird deswegen als statische Analyse bezeichnet.
Uno ist ein Tool, mit dem man nach drei der häufigsten Fehlerarten in C-Quellcode suchen kann:
- Nutzung uninitialisierter Variablen
- Dereferenzierung von NULL-Pointern
- Bereichsüberschreitung bei der Array-Adressierung
Entsprechende Beispiele und ein Download des Werkzeuges sind auf der Seite von Uno zu finden. Eine kurze Probe hier hat gezeigt, daß sich sowohl einfache Beispiele konstruieren lassen bei dem Dereferenzierungsfehler gefunden werden, als auch Beispiele, bei dem das Werkzeug die Fehler übersieht.
Hier wird der Fehler gefunden:
1
2
3
4
5
6
7
8
9
| int *ptr;
int main() {
if (ptr)
*ptr = 123;
else
*ptr = 345;
return 0;
} |
uno:#1: possible global use or deref before def:
[R ptr global_nullptr_deref.c 9]
in fct main global_nullptr_deref.c 4
und hier nicht:
1
2
3
4
5
6
7
8
9
10
11
| int main() {
int *ptr;
ptr = NULL;
if (ptr)
*ptr = 123;
else
*ptr = 345;
return 0;
} |
Generell ist die quelloffene Verfügbarkeit von leistungsfähigen Werkzeugen zur Codeanalyse nicht gegeben, die Werkzeuge übersehen Fehler oder liefern zuviele Falschpositive. Professionelle Tools wie Coverity stehen wiederum nicht zur freien Verfügung. Wer sich mehr mit diesem Thema beschäftigen will, findet allerdings auf der Seite von Dawson Engler, dem Gründer von Coverity, einen guten Einstiegspunkt mit ein paar interessanten Veröffentlichungen, auch zur probalistischen Analyse von Quellcode.
Eigentlich wollte ich ja heute hier eine dieser netten Darstellungen aus dem xkcd.com Webcomic abbilden. Dieses wäre kein Problem gewesen, die netten Comics mit mathematisch-geekigem Hintergrund sind vom Autor Randall Munroe zur Darstellung bei Quellennennung freigegeben. Dann habe ich aber noch einmal darüber nachgedacht und entschieden es nicht zu tun:
Die Comics werden nämlich in einem Blag mit überaus geistreichen Texten kommentiert. Und da ich diese Texte hier schlecht wiedergeben kann, wäre eine Abbildung nur die Hälfte der Freude.
In den Geisteswissenschaften ist es geläufig, dass Studenten sich mit den Positionen und Argumenten der historisch vorangegangenen Forschung über die Orginalquellen vertraut machen. Besonders wichtige Arbeiten, Aufsätze und Bücher werde teilweise sogar als Kunstwerke betrachtet, deren Studium nicht nur Wissen vermittelt, sondern auch inspirieren kann.
In den Naturwissenschaften, wie überhaupt in allen Nichtgeisteswissenschaften, ist Quellenstudium natürlich auch wichtig, trotzdem liegt hier meist der Augenmerk auf dem Fazit eines Dokumentes, wie zum Beispiel dem abgeschlossenen Beweis eines mathematischen Satzes oder der Lösung einer Aufgabe. Dieses Wissen wird meist nicht über die Orginalquellen, sondern durch aufbereitete Lehr- und Fachbücher vermittelt. Trotzdem kann auch im natürwissenschaftlichen Bereich ein Studium der Orginalquellen sehr hilfreich und gewinnbringend sein.
Unter Teaching With Original Historical Sources In Mathematics finden sich Hinweise wie Mathematik unter Nutzung von Primärquellen vermittelt werden kann. Auf weiteren Unterseiten finden sich auch gute Verweise auf solche Primärquellen, wie auch aufgearbeitete und übersetze mathematische Quellen, besonders im Bereich der diskreten Mathematik.
Kommentare