Anbieter zum Thema
Überblick über die Tools für den Komponententest
CoverageMaster winAMS (CM) ist ein Werkzeug für den Test von Embedded-Softwarekomponenten, die in C/C++ geschrieben wurde. Zum Testen führt es den Softwarecode (bzw. die darin beschriebenen Funktionen) aus. Hierbei verwendet es einen MPU-Simulator, der den Objekt-Code der zu testenden Komponenten in unveränderter Form verarbeitet.

Weil unter CM die zu testende Software auf einem MPU-Simulator ausgeführt wird, ist das Erstellen einer speziellen Testapplikation nicht nötig. Die Verwendung von Objektdateien ist als geeignetes Verfahren zum Test sicherheitsrelevanter Produkte anzusehen.
Die ISO 26262 verlangt nicht nur, dass die Softwarekomponente alle spezifizierten Funktionen korrekt ausführt. Sie darf zudem keine unerwünschten Funktionen enthalten. Der Zweck eines Komponententests besteht daher nicht nur im Ausmerzen von Programmfehlern - die ließen sich in der Tat auch in der Integrationsphase der Software eliminieren. Vielmehr geht es darum, vor der Integration von Hardware und Software die Korrektheit der Software zu verifizieren.
Zudem verlangt die ISO 26262, für den Test erforderliche Modifikationen an der Software zu dokumentieren und die Änderungen ebenfalls zu verifizieren. CM ermöglicht den Test ohne jede Modifikation; auch externe Interrupts der Zielumgebung und Pointer Arrays als Testdaten können verwendet werden. Die Verwendung eines MPU-Simulators erlaubt es zudem, die Ausführung des Programmcodes detailliert zu überwachen.
Die Kopplung von CM mit CasePlayer2, einem Tool zur statischen Programmanalyse, erlaubt eine automatische Erzeugung von Testdaten für die Abdeckungsanalyse, was den Aufwand für das Testdesign weitgehend verringert. Neben diesem White-Box-Test unterstützt CM auch so genannte Black-Box-Tests, bei denen der Tester keinen Zugang zum Quellcode besitzt. Solche Tests dienen dazu, um die Übereinstimmung der Software mit den Anforderungen zu überprüfen.
Testausführung und Abdeckungserfassung
Im Vergleich mit Komponententests, bei denen der Testingenieur auf der IDE Testfälle manuell einrichten und vor dem Testablauf im Debugger Break Points setzen muss, lässt sich der Testablauf bei Verwendung der GAIO-Umgebung weitgehend automatisieren. Auf diese Weise werden Fehler vermieden, die sich bei manuellem Vorgehen in die Testkonfiguration einschleichen können. Testfunktionen, Variablennamen und Testdaten lassen sich zur erneuten Verwendung abspeichern.
CM unterstützt zwei Arten der Testausführung: automatisches Testen und schrittweise Ausführung des Codes. Während Ersteres besonders bei Regressionstests und der gleichzeitigen Ausführung mehrfacher Tests von Vorteil ist, wird die schrittweise Ausführung vor allem zum Debuggen von Programmcode verwendet.
Bei der Entwicklung von CM wurde besonderer Wert auf die Fähigkeit der Software zur Abdeckungserfassung gelegt. Typischerweise nutzen Test-Tools hierfür speziell entwickelten Coverage-Messcode, der in das Programm eingebaut wird. So lässt sich ermitteln, welche Code-Segmente während des Tests zur Ausführung gelangen.
CM verfolgt einen anderen Ansatz: Es erfasst die vom Compiler erzeugten Debug-Informationen, die die Verbindung zwischen dem Quellcode und dem ausgeführten Assemblercode herstellen. So lassen sich Coverage-Abdeckungen direkt aus dem Objektcode des zu testenden Programms gewinnen. Die Resultate lassen sich grafisch darstellen.
In der Praxis korreliert der Assemblercode aber nicht vollständig mit dem Quellcode, besonders wenn auf Compiler-Ebene Optimierungen vorgenommen wurden. Solche Optimierungen können dazu führen, dass Teile des Quellcodes bei der Assemblierung weggelassen werden. CM erlaubt es, Quellcode und korrespondierenden Assemblercode gemeinsam anzuzeigen, sodass die Entwickler dieses Verhalten kontrollieren können.
Darüber hinaus ist es möglich, die Abdeckung unabhängig vom Assembler auf der Ebene des Quellcodes zu messen. Dazu ist eine separate Objektdatei mit eingefügtem Programmcode zur Abdeckungserfassung erforderlich. Dieser Schritt ist anzuwenden, wenn komplexe Entscheidungsbäume durchlaufen und modifiziert werden. Bei der Abdeckungsmessung mittels instrumentierten Codes schreibt die ISO 26262 den Nachweis vor, dass der instrumentierte Code die Testergebnisse nicht beeinflusst.
Dieser Nachweis kann durch die Wiederholung des Tests unter Ausschluss des instrumentierten Codes erbracht werden. CM vergleicht automatisch die Ergebnisse der Testdurchläufe mit und ohne instrumentierten Code und zeigt das Ergebnis an. Der Testingenieur sieht damit sofort, ob die Instrumentierung die Testergebnisse verfälscht hat. Die Testergebnisse gelten als Nachweis für eine Verifikation und Validierung im Sinne einer Qualitätskontrolle.
Validierter Programmcode gemäß der Norm ISO 26262

Aus der beschriebenen Vorgehensweise wird ersichtlich, dass der Einsatz eines solchen Tools nicht nur den Zeitaufwand für den Komponententest im Vergleich zu herkömmlichen Verfahren deutlich verringert, sondern auch eine Reihe inhärenter Fehlerquellen vermeidet, die mit der üblichen händischen Vorgehensweise einhergehen. In der Konsequenz erleichtert es damit die Erstellung sicheren Programmcodes und die Erfüllung der Anforderungen gemäß ISO 26262.
* Dipl.-Ing. Reinhold Schmid ist Geschäftsführer der Embedded Tools GmbH.
(ID:42473999)