Wie man Software durch Prüfung von Invarianten zuverlässiger macht

25. August 2009, 10:37 Uhr | Stephan Grünfelder
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 4

Wie man Software durch Prüfung von Invarianten zuverlässiger macht

Wenn das Argument des Zusicherungs-Makros nicht wahr ist, dann wird der Übersetzungsvorgang angehalten, weil eine illegale Deklaration vorliegt. Wenn die Zusicherung wahr ist, dann ist die Feldgröße des Dummy-Arrays 1 und der ansonsten leere Block mit der Deklaration des Dummy-Arrays ist fehlerfreier C-Code. In diesem Fall könnte der Compiler aber eine Warnung ausgeben, dass die deklarierte Variable nicht verwendet wurde. Bei Kommandozeilen-Compilern kann man diese Warnung einfach mit einer grep-Utility unterdrücken.

Das Provozieren einer Compiler-Warnung im Dienste der Programmsicherheit mag manchem Leser erscheinen wie ein Loch im Zaun zu schließen und dafür ein anderes aufzureißen. Dem ist nicht so. Die in Kauf genommene Warnung ist als vergleichsweise harmlos einzustufen und kann daher ohne Risiko weggefiltert werden. Der große Vorteil der vorgestellten Implementierung der Compile-Time-Assertion ist, dass sie von allen Compilern übersetzt werden kann. Konstrukte wie

#if (offsetof(struct_variable, \ member_variable != 12)) 	
#error UNEXPECTED OFFSET #endif

führen auf manchen Systemen möglicherweise zu keiner Warnung, lassen sich aber nicht mit allen Compilern übersetzen, weil die Operatoren sizeof und offsetof nur selten als Bedingung für #if gestattet sind. jk

passend zum Thema

Literatur

[1] Miller, K.; Voas, J.: Inspecting and ASSERTing Intelligently. Proceedings of EuroStar ‘96, pdf>www.cigital.com/papers/download/amsterdam96.pdf.
[2] Venners, B.: A Conversation with Bjarne Stroustrup, Part I. The C++ Style Sweet Spot, October 13, 2003. http://samizdat.cc/shelf/documents/2003/10.14-stroustrup/stroustrup.pdf.
[3] Liggesmeyer, P.: Software-Qualität. Spektrum Akademischer Verlag, 2002.
[4] Grünfelder, S.; Langmead, N.: Den Fehlern auf der Spur, Teil 2: Modultests, Isolationstests, Testdesign und die Frage der Testumgebung. Elektronik 2004, H. 23, S. 66 bis 75.


  1. Wie man Software durch Prüfung von Invarianten zuverlässiger macht
  2. Testbarkeit und Robustheit
  3. Wie man Software durch Prüfung von Invarianten zuverlässiger macht
  4. Wie man Software durch Prüfung von Invarianten zuverlässiger macht
  5. Wie man Software durch Prüfung von Invarianten zuverlässiger macht

Jetzt kostenfreie Newsletter bestellen!