Viele Embedded-Systeme werden nach einem international anerkannten Sicherheitsstandard entwickelt. Ein Teil der Daten, die erforderlich sind, um nachzuweisen, dass ein Testverfahren diese Standards erfüllt, ist das Erreichen eines bestimmten Codeabdeckungsgrads (Code Coverage).
Die Messung der Codeabdeckung ist eine Voraussetzung für die Zertifizierung, um die Vollständigkeit von Testfällen zu bewerten und um nachzuweisen, dass es keine unbeabsichtigte Funktion gibt. Die Ausführung von linearem Code ist leicht zu verstehen. Jedoch stellen Schleifen, Bedingungen, Entscheidungen und Funktionsaufrufe Verzweigungen dar, bei denen die Ausführung zu einem anderen Teil des Codes springt. Hier ist es oft schwer nachvollziehbar, welcher Teil des Codes bereits ausgeführt wurde und ob alle möglichen Verzweigungen mindestens einmal getestet wurden. Die Codeabdeckung überprüft den Prozentsatz des Codes, der während eines bestimmten Testlaufs ausgeführt wird.
Hierbei stellt sich die Frage, warum Code-Coverage-Messungen überhaupt nötig sind: Da toter Code ohnehin nicht ausgeführt wird, warum ist er überhaupt zu vermeiden? Die Antwort ist einfach: Code, der während des Tests nicht ausgeführt wird, wird nicht getestet. Infolgedessen kann es in Verzweigungen ungetestete Fälle geben, die zu unvorhergesehenen Zwischenfällen führen können.
Ein weiteres Problem kann auftreten, wenn das Programm in einer unerwünschten Endlosschleife stecken bleibt, die während eines Testlaufs nicht aufgerufen wurde. Diese unvorhergesehenen Szenarien mindern die Testqualität, da sie keine kontrollierte Ausführung der Anwendung mehr garantieren. Historisch gesehen ist Code Coverage eine Best Practice, das bei sicherheitsrelevanten Projekten obligatorisch ist und von mehreren Sicherheitsstandards wie ISO 26262 (Automotive), DO-178 C (Avionik), IEC 62304 (Medizin) und IEC 61508 (Industrie) gefordert wird.
Das ursprüngliche Snake-Spiel ist das bekannteste und beliebteste Einzelspieler-Geschicklichkeitsspiel aller Zeiten – die erste Version wurde 1976 als Arcade-Spiel veröffentlicht. Das Spielprinzip ist einfach: Man steuert eine Schlange und muss Nahrung zu sich nehmen, um zu wachsen. Allerdings darf sie nicht gegen Wände oder den eigenen Körper stoßen, sonst ist das Spiel verloren. Im Fall der Lauterbach Code Coverage Challenge wird die Schlange allerdings nicht mit Früchten, sondern mit Bugs gefüttert, sie fungiert somit als eine Art Debugger.
Bei dem von Lauterbach programmierten Spiel wird ständig die aktuelle Codeabdeckung der einzelnen Funktionen gemessen und zu einem Gesamtwert in Prozent akkumuliert. Wer am Ende eines jeden Messetages den höchsten Code-Coverage-Wert erreicht, erhält einen Preis – unabhängig davon geht kein Spieler leer aus.
Die Echtzeitmessung der Code-Abdeckung ist mit herkömmlichen Testwerkzeugen aufgrund der nötigen Quellcode-Instrumentierung, was zu größerem Codeumfang, größerem RAM-Verbrauch und einer längeren Ausführungszeit aufgrund des Code-Overheads führt, im Integrations- und Systemtest lediglich eingeschränkt oder gar nicht möglich. Im Gegensatz dazu ermöglichen Trace-basierte Code-Abdeckungsmessungen mit Lauterbachs »TRACE32«-Tools die Messung komplexer Abdeckungskriterien auf nicht-invasive Art und Weise. Darüber hinaus müssen beim Spielen von Snake die Abdeckungsdaten On-the-Fly ermittelt werden, eine Form der Analyse von Code Coverage, die lediglich mit der Trace-basierten Technologie von Lauterbach möglich ist und die ihre Vorteile neben Snake auch in den meisten anderen Embedded-Anwendungen ausspielen kann.
Der größte Vorteil des Ansatzes ist jedoch, dass Entwickler Codeabdeckungsmessungen für Echtzeit-Applikationen in allen Testphasen effizient ausführen können. Somit lassen sich große Teile der Codeabdeckungsmessungen vom Unit-Test auf den Integrations- und Systemtest verlagern und diese entlasten zudem den Unit-Test. Am Ende gibt es weniger Testfälle, weniger Testaufwand und somit weniger Gesamtaufwand.
Halle 4, Stand 210