Kehraus
Splint und Co: Tools zur statischen Code-Analyse
Fazit
Es empfiehlt sich übrigens nicht, mal eben auf die Schnelle potenzielle "Fehler" in fremden Projekten zu korrigieren. Sonst kann es einem so gehen, wie einigen Entwicklern des Debian-Projekts.
Diese stellten aufgrund einer Prüfung mit Valgrind (einem Programm, das ein Programm in einer Art virtuellen Maschine ausführt und so Fehler sucht) einen "Bug" im OpenSSL-Projekt fest: Das Programm griff auf einen noch nicht initialisierten Speicher zu – flugs kommentierten die Debianer die vermeintlich fehlerhafte Funktion aus.
Allerdings handelte es sich bei dem derart "korrigierten" Code um eine Funktion, die Zufallszahlen erzeugt – der Zugriff auf den nicht initialisierten Speicher sollte unter anderem zufällige Werte auslesen. Durch die "Korrektur" wurden jahrelang nicht zufällige, sondern stattdessen leicht vorhersagbare SSL-Zertifikate generiert – eine kryptographische Katastrophe [11].
Bei der Arbeit am eigenen Code jedoch erleichtern die diversen Lint-Varianten und Codechecker die Fehlersuche in Programmen ganz wesentlich und sorgen zudem dafür, dass grössere Software-Projekte mit mehreren Entwicklern schnell zu einem gemeinsamen Coding-Stil finden.
Glossar
Statische Quellcodeprüfung
Bei diesem Verfahren wird der Quellcode analysiert, ohne das Programm auszuführen. Es gibt auch Code-Analyzer, die das das Programm in einer Art virtuellen Maschine ausführen und so Fehler suchen (beispielsweise Valgrind).
a.out
Der Standardname des vom C-Compiler erzeugten Programms, wenn Sie nicht über die
-o Nameetwas Anderes angegeben.
Infos
[1] International Obfuscated C Code Contest: http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
[2] Obfuscated Perl Contest: http://de.wikipedia.org/wiki/Obfuscated_Perl_Contest
[3] Splint: http://www.splint.org
[4] Perl::Critic-Webservice: http://www.perlcritic.com
[5] Activestate Perl: http://www.activestate.com
[6] PHP Code Sniffer: http://pear.php.net/package/PHP_CodeSniffer
[7] ChkTeX: http://baruch.ev-en.org/proj/chktex/
[8] RPM Lint: http://rpmlint.zarb.org
[9] Lintian: http://lintian.debian.org
[10] CSS Lint: http://csslint.net
[11] Debian und OpenSSL: http://www.linux-magazine.com/Issues/2008/93/Security-Lessons



