Kriterien für das Testen sicherheitskritischer Systeme

Seite 2: Code Coverage

Inhaltsverzeichnis

Testabdeckungswerkzeuge (Code Coverage Analyser) können softwareseitig die Code Coverage messen. Sie ergänzen den Programmcode vor der Übergabe an den Compiler mit Zählern (Instrumentierung), die in Form globaler Arrays hinterlegt werden. Wann die Zähler verändert werden und wie viele es gibt, hängt von der gewählten Code-Coverage-Stufe ab.

Test-Coverage-Analyser zeigen die Testabdeckung für die einzelnen Module der Software an (Abb. 1).

Die Arrays befinden sich im Datensegment des Speichers und werden mit dem Wert null initialisiert. Nach Ablauf des Programms zeigt der Zählerstand, wie oft ein bestimmter Programmabschnitt im Code durchlaufen wurde. Für nicht durchlaufene – also nicht getestete Programmteile – sind dann noch Tests zu schreiben beziehungsweise zu generieren.

Im Quellcode werden nicht ausgeführte Code-Teile rot gekennzeichnet (Abb. 2).

Das Instrumentieren führt zu zusätzlichem Speicherbedarf und erhöht die Ausführungszeit des Programms. Das ist bei Desktop-Systemen meist kein Problem, jedoch eine große Herausforderung bei Embedded-Systemen, da diese meist nicht über genügend RAM-Speicher verfügen, um die große Anzahl von Zählern im Datensegment unterzubringen. Eine Lösung ist die partielle Instrumentierung. Hierbei werden nur kleine Teile des gesamten Programms instrumentiert und separat getestet. Anschließend fügt man die gewonnenen Daten zu einem großen Ganzen zusammen.

Um den Bedarf an RAM zu reduzieren, lässt sich außerdem die Größe der Zähler von üblicherweise 32 auf 16 oder 8 Bit reduzieren. Die in diesem Fall eventuell auftretenden Überläufe der Zählerstände erfordern jedoch weitere Überlegungen und eine sorgfältige Interpretation der gewonnenen Daten. Ist man lediglich daran interessiert, ob ein Programmabschnitt ausgeführt wurde, aber nicht wie oft, kann man die sonst großen Zählerinformationen in einzelne Bits komprimieren. Durch diese sogenannte Bit-Coverage kann man den Bedarf an RAM bis um den Faktor 32 verringern.

Für sicherheitskritische Software schreiben Normen die Testtiefe und die anzuwendende Test-Coverage-Stufen vor. Auch in nicht sicherheitskritischen Projekten kann die Coverage-Analyse in Verbindung mit Unit-Tests erheblich dazu beitragen, die Softwarequalität zu verbessern. Leistungsfähige Code-Coverage-Analyser lösen dabei auch die besonderen Herausforderungen, die Embedded-Software mit sich bringt.

Prof. Dr. Daniel Fischer
leitet an der Hochschule Offenburg die Studiengänge Angewandte Informatik und Wirtschaftsinformatik plus. In Zusammenarbeit mit der Verifysoft Technology GmbH bietet er unter anderem Seminare zu den Themen Softwaretest und Testmanagement an.

Klaus Lambertz
ist Geschäftsführer der Verifysoft Technology GmbH, einem in Offenburg ansässigen Hersteller und Distributor von Softwaretest- und analysetools.

(ane)