Testen Software-Integrationstest am Beispiel Tessy

Autor / Redakteur: Frank Büchner, Hitex Development Tools* / Martina Hafner

Bei Integrationstests von eingebetteter Software ist es relativ trivial, zwei Funktionen einer Aufrufhierarchie integriert zu testen. Aber wie testet man am besten, wenn die beiden Funktionen nicht in einer Aufrufbeziehung stehen?

Anbieter zum Thema

Ein einfaches Beispiel für zwei Funktionen, die integriert getestet werden sollen und die nicht in einer Aufrufbeziehung stehen, sind push() und pop() des abstrakten Datentyps „Stapel“. Ein isolierter Test von push() und pop() ist kein Integrationstest. Dazu muss man eine Sequenz von Aufrufen von push() und pop() testen. Zu den Eingaben eines solchen Testfalls gehören die Parameterwerte von push() und der anfängliche Zustand des Stapels.

Das Ergebnis sind die Rückgabewerte von pop() und der finale Zustand des Stapels. Falls durch die Aufrufe von push() und pop() zusätzliche Funktionsaufrufe resultieren können, beispielsweise der Aufruf einer Überlaufmeldefunktion, so gehören solche Funktionsaufrufe ebenfalls zum Ergebnis.

Beispiel Integrationstest: Kfz-Innenraumbeleuchtung

Im Folgenden nennen wir die Menge der Funktionen, die wir integriert testen wollen, zusammen mit den Daten, auf denen sie kooperieren, eine Komponente. In IEC 61508 wird hierfür der Begriff Modul verwendet. Einen Testfall für eine Komponente bezeichnen wir als Szenario. Falls wir wissen, dass eine der Funktionen der Komponente in regelmäßigen Zeitabständen aufgerufen wird, können wir diese Aufrufe als Basis einer Zeitsimulation nutzen. Dann können zeitliche Bedingungen in einem Szenario vorgegeben und überprüft werden.

Bild 1: Komponente mit ihren Funktionen. Manche Funktionen können von außen aufgerufen werden (grüne Pfeile) und somit stimulierender Bestandteil eines Szenarios sein. Andere Funktionen sind außerhalb der Komponente nicht sichtbar. (Archiv: Vogel Business Media)

Bild 1 zeigt eine Komponente mit ihren Funktionen. Manche dieser Funktionen können von außen aufgerufen werden (grüne Pfeile) und somit stimulierender Bestandteil eines Szenarios sein. Andere Funktionen sind außerhalb der Komponente nicht sichtbar.

Nicht alle Funktionen in der Komponente müssen in einer Aufrufbeziehung stehen. Ergebnis einer Szenarioausführung können auch Aufrufe von Funktionen in anderen Komponenten, d.h. außerhalb der zu testenden Komponente, sein (rote Pfeile). Eine Komponente kann auch Daten enthalten, auf die von außerhalb der Komponente zugegriffen werden kann. Daten können also im Laufe eines Szenarios geschrieben (Eingabe) oder gelesen (Ergebnis) werden. Das rote Herz zeichnet eine der stimulierbaren Funktionen als Herzschlagfunktion bzw. Taktgeberfunktion aus.

Bild 2: Schema Innenraumbeleuchtung eines Kraftfahrzeugs. Die Innenraumbeleuchtung wird durch zwei Sensoren gesteuert: einer, der angibt, ob die Fahrzeugtür geöffnet oder geschlossen ist, und ein zweiter, der angibt, ob die Zündung des Fahrzeugs eingeschaltet ist oder nicht. (Archiv: Vogel Business Media)

Der Test einer Komponente ist offensichtlich ein guter Integrationstest der in der Komponente enthaltenen Funktionen. Als Beispiel für den Test einer Komponente betrachten wir die Innenraumbeleuchtung eines Kraftfahrzeugs. Zum Test wird Tessy benutzt. Tessy ist ein Werkzeug zum automatisierten Unit-, Modul- und Integrationstest von eingebetteter Software. Die Innenraumbeleuchtung wird durch zwei Sensoren gesteuert: einen Sensor, der angibt, ob die Fahrzeugtür geöffnet oder geschlossen ist, und einen zweiten Sensor, der angibt, ob die Zündung des Fahrzeugs eingeschaltet ist oder nicht (Bild 2).

Die (rudimentäre) Spezifikation für das Verhalten der Innenraumbeleuchtung verlangt, dass die Innenraumbeleuchtung angeht, sobald die Tür geschlossen wird und nach spätestens 5 s (automatisch) erlischt. Sollte jedoch die Zündung des Fahrzeugs während dieser 5 s eingeschaltet werden, soll die Innenraumbeleuchtung sofort ausgehen.

So geht das Werkzeug für Unit-, Modul- und Integrationstests Tessy vor

Bild 3: Das Software-Testwerkzeug Tessy ermittelt automatisch das Interface der zu testenden Komponente (Archiv: Vogel Business Media)

Zunächst ermittelt Tessy automatisch das Interface der Komponente (Bild 3). Im oberen Teil von Bild 3 sind die Komponentenfunktionen aufgelistet, die außerhalb der Komponente sichtbar sind und die deshalb in einem Szenario aufgerufen werden können. Die Funktion init() dient zum Initialisieren der Komponente. Durch die beiden Funktionen set_sensor_ignition() und set_sensor_door() werden der Komponente die Sensorwerte übermittelt. Die Funktion tick() wurde manuell durch den Anwender als Taktgeberfunktion ausgezeichnet und hat deshalb ein spezielles Symbol.

In der Mitte von Bild 3 sind die Funktionsaufrufe der Komponente zu anderen Komponenten dargestellt („External Function Calls“). Es handelt sich um die beiden Funktionen LightOn() und LightOff(), die zum Ein- bzw. Ausschalten der Innenraumbeleuchtung dienen. Diese beiden Funktionen werden während des Komponententests von Tessy durch Platzhalterfunktionen (Stub-Funktionen) ersetzt, d.h. Implementierungen von LightOn() und LightOff() sind nicht notwendig.

Artikelfiles und Artikellinks

Link: Tessy

(ID:300982)