Was verstehen wir unter Test - FKFS
Was verstehen wir unter Test - FKFS
Was verstehen wir unter Test - FKFS
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Erfolgreiche <strong>Test</strong>strategien<br />
für komplexe Steuergeräte -<br />
Anforderungen und<br />
Lösungen -<br />
Lothar Beller, ZF Friedrichshafen AG<br />
Michael Wolff, ZF Friedrichshafen AG<br />
Ralph Seefried, ZF Friedrichshafen AG
Erfolgreiche <strong>Test</strong>strategien für komplexe Steuergeräte<br />
- Anforderungen und Lösungen -<br />
Successful <strong>Test</strong> Strategies for Complex Control Systems<br />
- Requirements and Solutions -<br />
Dipl.-Ing. (FH) L. Beller, Dipl.-Ing. M. Wolff, Dipl.-Ing. (FH) R. Seefried<br />
ZF Friedrichshafen AG<br />
Zusammenfassung<br />
Trotz kürzerer Entwicklungszeiten und steigender Anforderungen an die Software<br />
müssen die Softwarequalität und die Kundenzufriedenheit konstant bleiben oder<br />
sogar gesteigert werden. Dazu bedarf es einer guten und effizienten <strong>Test</strong>strategie.<br />
Dies wurde bei der ZF früh erkannt und durch die Entwicklung entsprechender Tools<br />
und Methoden sichergestellt.<br />
So setzt die ZF seit Jahren eine Simulationsumgebung ein, die es erlaubt Fehler<br />
schon früh im Entwicklungsprozess zu finden und somit Zeit und Kosten zu sparen.<br />
<strong>Test</strong>s werden parallel zur Entwicklung der Hardware und unabhängig von knappen<br />
und teuren Ressourcen wie HIL 1 -Prüfständen und Versuchsfahrzeugen entwickelt<br />
und durchgeführt. Durch die Wiederverwendung von einmal erstellten Modellen und<br />
<strong>Test</strong>fällen in den verschiedenen Entwicklungsphasen, sowie der Automatisierung der<br />
<strong>Test</strong>durchführung und <strong>Test</strong>auswertung wurde eine deutliche Reduktion des<br />
Aufwands erreicht. Klare Absprachen und regelmäßige Prozessreviews stellen die<br />
Softwarequalität auch bei Software-Lieferanten sicher.<br />
Es <strong>wir</strong>d aufgezeigt, wie sich die <strong>Test</strong>s in der ZF entwickelt haben und wie man sich<br />
auf immer umfangreichere Anforderungen eingestellt hat. Schwerpunkte liegen dabei<br />
auf in-the-Loop-<strong>Test</strong>s mit Blick auf bewährte Realisierungen bei der<br />
Wiederverwendung und Automatisierung. Die Sicherstellung der Softwarequalität bei<br />
verteilter Entwicklung mit Software-Sharing-Partnern <strong>wir</strong>d aufgezeigt. Aktuelle und<br />
zukünftige Entwicklungen im Bereich der <strong>Test</strong>methodik, <strong>Test</strong>fallgenerierung und<br />
Wiederverwendung werden vorgestellt.<br />
Abstract<br />
Despite shorter development times and growing demands on software, the quality<br />
and customer satisfaction as such has to be maintained or even stepped up,<br />
however, without increasing effort. Therefore a good and efficient strategy for testing<br />
1 HIL – Hardware in the Loop – Software <strong>wir</strong>d im realen Steuergerät in einer simulierten Umgebung ausgeführt.
is necessary. This context has been recognized quite early by ZF and has been<br />
ensured by developing adequate methods and tools.<br />
Thus ZF is using a simulation environment since years. This environment gives the<br />
possibility to find errors and bugs in an early stage of the development process and<br />
by this to save time and money. <strong>Test</strong>s are developed and performed in parallel to the<br />
hardware and independent from the availability of expensive test equipment like HiLfacilities<br />
and prototype vehicles. An essential reduction of the testing effort has been<br />
reached by reusing the simulation models and test cases during all phases of the<br />
development process and by automation of testing and generating test reports. As<br />
well, precise agreements and regularly process review ensure the software quality of<br />
the software suppliers.<br />
In this article it is shown, how ZF has evolved the testing strategy and tests itself, to<br />
accomplish the growing demands of software development. The article focuses on<br />
the “in the loop” testing with a close look on established implementations at reuse<br />
and automation. But it is also shown, how the software quality at distributed software<br />
development with several sharing partners is ensured. Finally the actual state and<br />
the trend in the domain of development methods, test reuse and test case generating<br />
will be introduced.
1 Einführung<br />
Die ZF Friedrichshafen AG besitzt in der Entwicklung von Antriebs- und<br />
Fahrwerkskomponenten langjährige Erfahrung. Erste Serienanwendungen von<br />
Getriebesteuerungen liegen mehr als 20 Jahre zurück. Die Anwendungen erstrecken<br />
sich von Pkw, Lkw, Bus und Bahn bis hin zu Arbeitsmaschinen.<br />
Sowohl die Anzahl als auch die Komplexität der in Software abgebildeten Funktionen<br />
hat in den letzten Jahren stark zugenommen, parallel steigt der Anspruch an die<br />
Qualität. Dies muss bei immer kürzeren Entwicklungszeiten realisiert werden. In<br />
diesem Spannungsfeld ist es wichtig, Fehler früh zu finden. Ein Fehler, der erst beim<br />
Kunden entdeckt <strong>wir</strong>d, hat einen negativen Einfluss auf die Kosten, die Ressourcen<br />
und nicht zuletzt auf das Image des Unternehmens.<br />
Ein vollständiger <strong>Test</strong> ist in der Praxis nicht durchführbar. Eine beispielhafte<br />
Steuerung mit 10 Eingängen von 8 Bit Wordlänge hat 1,2 *10 24 statische Zustände.<br />
Wollte man diese Zustände mit einem aktuellen PC durcharbeiten, so ergeben sich<br />
unglaubliche 380 Millionen Jahre an Laufzeit. 2 So <strong>wir</strong>d schnell klar, dass es<br />
unmöglich ist, alle Kombinationen zu testen. Dazu kommt, dass sich die<br />
Entwicklungsprojekte der Automobilzulieferer durch eine Vielzahl an Varianten und<br />
kurze Auslieferungszyklen auszeichnen. So gibt es Getriebe-Softwareprojekte bei<br />
der ZF mit über 40 Projektvarianten und 130 Software-Auslieferungen pro Jahr.<br />
Dadurch vervielfacht sich der Aufwand an <strong>Test</strong>s nochmals erheblich.<br />
Es ist die Aufgabe der <strong>Test</strong>verantwortlichen, die richtige Auswahl an <strong>Test</strong>konzepten<br />
zu treffen, um die Qualitätsanforderungen zu gewährleisten, ohne die Kosten und<br />
Entwicklungszeit drastisch zu erhöhen. Dazu bedarf es einer guten und effizienten<br />
<strong>Test</strong>strategie. Dies wurde bei der ZF früh erkannt und durch den Einsatz<br />
entsprechender Tools und Methoden sichergestellt.<br />
Im Folgenden <strong>wir</strong>d der aktuelle ZF-<strong>Test</strong>prozess vorgestellt. Danach werden drei für<br />
die ZF spezifische Anforderungen näher erläutert und Lösungsansätze ausgeführt.<br />
Konkret <strong>wir</strong>d auf die komponentenbasierte Entwicklung, auf Varianten und auf die<br />
verteilte Entwicklung eingegangen. Vorgehen, eingesetzte Methoden und der erzielte<br />
Nutzen werden am Beispiel der Softwareentwicklung für Getriebesteuerungen<br />
aufgezeigt.<br />
2 10 Takte pro Zustand und 1 GHz Prozessortakt
2 ZF-<strong>Test</strong>prozess<br />
2.1 Software-Entwicklungsprozess<br />
Die ZF hat sich in den letzten Jahren intensiv mit der Entwicklung von konzernweit<br />
einheitlichen Prozessen für die Softwareentwicklung beschäftigt. Das hierbei<br />
erarbeitete Wissen über die Vorgehensweisen in den <strong>unter</strong>schiedlichen Projekten,<br />
über die Anforderungen aus Normen und von Kunden, sowie über Tools und<br />
Methoden, bietet uns heute die Möglichkeit die <strong>Test</strong>s so zu strukturieren, dass die<br />
Software effizient abgeprüft <strong>wir</strong>d.<br />
Die Prozesse orientieren sich am allgemeinen V-Modell, an den Vorgaben von<br />
AUTOMOTIVE SPICE und beschreiben die Vorgehensweise von der<br />
Anforderungsermittlung bis zur Systemabnahme. Im linken Ast des V-Modells sind<br />
die Konstruktionsphasen beschrieben. Da Fehler am einfachsten auf derselben<br />
Abstraktionsstufe gefunden werden, auf der sie entstanden sind, ordnet der rechte<br />
Ast jedem Konstruktionsschritt eine korrespondierende <strong>Test</strong>stufe zu [4].<br />
Gesamtanforderungsermittlung<br />
Projektmanagement<br />
Systemanforderungsanalyse<br />
Systemarchitekturdesign<br />
Parallele<br />
Entwicklungsprozesse<br />
z.B. Mechanik,<br />
Hydraulik,<br />
Elektronik<br />
Methoden Organisatorische – Tools und – <strong>unter</strong>stützende Rollen – Dokumente<br />
Prozesse<br />
Lieferantenmanagement<br />
Abb. 1: ZF-<strong>Test</strong>prozess<br />
Softwareanforderungsanalyse<br />
Softwaredesign<br />
Softwareerstellung<br />
und Modultest<br />
Konfigurationsmanagement<br />
Änderungsmanagement<br />
Qualitätssicherung<br />
Systemabnahme<br />
Systemtest<br />
Systemintegration<br />
und Integrationstest<br />
SW-Funktionstest<br />
Softwareintegration<br />
und Integrationstest<br />
Abstimmung<br />
Daten<br />
Problemmanagement<br />
Die <strong>Test</strong>stufen <strong>unter</strong>scheiden sich durch das <strong>Test</strong>objekt, die verwendeten Methoden<br />
und Tools und nicht zuletzt durch die angestrebten <strong>Test</strong>ziele. So bildet jede <strong>Test</strong>stufe<br />
einen Baustein im Gesamttest. Durch die <strong>unter</strong>schiedlichen Blickwinkel <strong>wir</strong>d erreicht,<br />
dass alle Qualitätskriterien, die an die Software gestellt werden, abgeprüft werden.
2.2 Modultest<br />
Im Modultest, der ersten <strong>Test</strong>stufe nach der Implementierung, werden die<br />
Softwarebausteine erstmals einer systematischen Prüfung <strong>unter</strong>zogen. Auf dieser<br />
<strong>Test</strong>stufe <strong>wir</strong>d sehr entwicklungsnah gearbeitet. Der Modultest <strong>wir</strong>d typischerweise<br />
als White Box <strong>Test</strong> durchgeführt, d.h., die Struktur der Software ist bekannt und <strong>wir</strong>d<br />
zum <strong>Test</strong> hinzugezogen.<br />
Ziele<br />
statische Analyse<br />
<strong>Test</strong>endekriterien<br />
� Finden von Implementierungsfehlern<br />
� Absichern des Verhaltens bei ungültigen Werten<br />
Unit-<strong>Test</strong>/<br />
Coverage Software in the Loop<br />
�� Warnungsfreiheit mit der projektspezifischen Standardkonfiguration<br />
�� Die von der Änderung betroffenen Zweige wurden beim <strong>Test</strong> durchlaufen.<br />
Abb. 2: Modultest<br />
Die wichtigste Aufgabe ist es, sicherzustellen, dass das jeweilige <strong>Test</strong>objekt die<br />
Funktionalität korrekt und vollständig realisiert. Typische Fehler, die beim Modultest<br />
aufgedeckt werden, sind Berechungsfehler oder fehlende und falsch gewählte<br />
Programmpfade. Der <strong>Test</strong> auf Robustheit ist ein weiterer sehr wichtiger Aspekt dieser<br />
<strong>Test</strong>stufe, denn oft kann die Software nur auf dieser Ebene mit ungültigen Werten<br />
stimuliert werden. Die Software muss auf diese Negativ-<strong>Test</strong>s mit einer<br />
angemessenen Ausnahmebehandlung reagieren. Neben diesen dynamischen <strong>Test</strong>s<br />
zählen zum Modultest auch statische <strong>Test</strong>s wie Reviews und Codeanalysen. Diese<br />
Prüfungen dienen in erster Linie zum Nachweis der nichtfunktionalen Anforderungen<br />
wie Wartbarkeit und Effizienz.<br />
2.2.1 Statische Analyse<br />
Direkt an die Implementierung schließt sich die Phase der statischen Analyse an. Der<br />
Code <strong>wir</strong>d mit Hilfe von Software-Werkzeugen analysiert und auf die Einhaltung von<br />
Programmierstandards überprüft. Die ZF orientiert sich hierbei schon seit vielen<br />
Jahren an den MISRA C Guidelines. Die Regeln aus MISRA wurden in die<br />
Programmierrichtlinien eingearbeitet, die der Programmierung zu Grunde gelegt
werden. Des Weiteren besteht eine Konfiguration für den Rule Checker, der die<br />
automatisch prüfbaren Regeln abprüft.<br />
Da nicht alle Programmierregeln automatisiert prüfbar sind, werden regelmäßig<br />
Codereviews durchgeführt. Dazu werden verschiedene Verfahren angewendet wie<br />
ALP (Autor-Leser-Prinzip), Walkthrough und Inspektion. Die Software <strong>wir</strong>d anhand<br />
ihrer Komplexität und Kritikalität bewertet, um geeignete Review-Kandidaten<br />
auszuwählen.<br />
2.2.2 Unit <strong>Test</strong>/Codeabdeckung<br />
Ziel im Unit <strong>Test</strong> ist es, das Verhalten der Software bei gültigen und ungültigen<br />
Werten zu verifizieren. Um dieses Ziel effizient zu erreichen, ist es sinnvoll, kleine<br />
Softwareteile freizuschneiden und in einem so genannten <strong>Test</strong>bett zu stimulieren. Mit<br />
geeigneten Tools <strong>wir</strong>d die Zweig- und Bedingungsabdeckung gemessen und<br />
protokolliert.<br />
Da in vielen Projekten bei der ZF mit C++ programmiert <strong>wir</strong>d, setzt sich hier ein<br />
CPPUnit <strong>Test</strong>-Framework durch. Zu jeder Funktionsklasse <strong>wir</strong>d eine <strong>Test</strong>klasse<br />
programmiert, die die Funktion stimuliert, das Verhalten auswertet und in ein<br />
Protokollfile schreibt. Zur Ableitung der <strong>Test</strong>fälle gelangen Methoden wie<br />
Äquivalenzklassenbildung und Grenzwertanalyse zum Einsatz.<br />
2.2.3 Funktionaler Modultest (SIL)<br />
Die ZF setzt auf in-the-Loop-<strong>Test</strong>s, bei denen die Umgebung des <strong>Test</strong>objekts<br />
simuliert <strong>wir</strong>d. So gibt es in jedem Projekt auch ein Software-in-the-Loop 3 -System als<br />
Integrations- und <strong>Test</strong>umgebung. Funktionales Verhalten der Software kann damit<br />
schon beim Software-Entwickler am PC getestet werden.<br />
Die funktionalen Modultests auf der SIL-Umgebung erlauben es, das<br />
Systemverhalten schon in einer sehr frühen <strong>Test</strong>phase zu bewerten und Fehler zu<br />
erkennen. Die Kopplung mit dem Debugger und einem Codeabdeckungs-Tool<br />
erlaubt effiziente White-Box-<strong>Test</strong>s.<br />
2.3 Integrationstest<br />
Der Fokus beim Integrationstest (Abb. 3) liegt auf dem Zusammenspiel der<br />
Softwarebausteine und damit deren Schnittstellen. Die Integrationsstrategie legt fest,<br />
in welchen Schritten die Module ins Gesamtsystem integriert werden. Zu jedem<br />
Integrationsschritt gehört auch ein Integrationstest, der das Zusammenspiel der<br />
integrierten Teile überprüft. Die Regressionsstrategie sieht zu jedem Integrationstest<br />
einen automatisierten Regressionstest vor.<br />
3 SIL – Software in the Loop – Die Software <strong>wir</strong>d auf dem PC in einer simulierten Umgebung ausgeführt.
Ziele<br />
<strong>Test</strong>endekriterien<br />
� Funktionsnachweis, insbesondere das Zusammenspiel der<br />
neuen und geänderten Module<br />
� Nachweis der Rück<strong>wir</strong>kungsfreiheit<br />
Software in the Loop<br />
Hardware in the Loop<br />
�� Alle übergreifenden Funktions- und Schnittstellenänderungen wurden überprüft<br />
�� Vollständige und fehlerfreie Ausführung des Regressionstests<br />
Abb. 3: Integrationstest<br />
2.3.1 Integration in PC Umgebung (SIL)<br />
Wie schon beim Modultest ausgeführt, gibt es in allen Projekten ein Software-in-the-<br />
Loop-System als Integrations- und <strong>Test</strong>umgebung. Integrationstests, die nicht direkt<br />
durch die Hardware beeinflusst sind, können auf dieser PC Umgebung getestet<br />
werden. Dies sind vor allem die Steuerungsfunktionen und Regelalgorithmen. Je<br />
nach Detaillierung des Umgebungsmodells können auch Funktionen der<br />
Signalbereitstellung, Diagnose bis hin zu Protokollen getestet werden. Der Vorteil<br />
hierbei liegt vor allem in der hohen Verfügbarkeit, den kurzen Rüstzeiten und dem<br />
einfachen Zugriff auf interne Größen.<br />
2.3.2 Integration in Steuergerät (HIL)<br />
Hardware-in-the-Loop-Systeme simulieren die Umgebung von Getriebe und<br />
Fahrzeug und ermöglichen den Anschluss des Steuergerätes mit den elektrischen<br />
Schnittstellen. Diese Umgebung eignet sich optimal, um das Verhalten der Software<br />
im Zielsystem automatisiert zu testen. Einflüsse des Zielcompilers und der Hardware<br />
sind bei den <strong>Test</strong>s berücksichtigt. Dies ist vor allem notwendig bei <strong>Test</strong>s von<br />
Laufzeiteinflüssen, den elektrischen Schnittstellen sowie der hardwarenahen<br />
Diagnose.
2.4 Software-Funktionstest/Systemtest<br />
Nach den Integrationstests erfolgt der Funktionstest. <strong>Test</strong>objekt ist die integrierte<br />
Software. Das Ziel ist es zu überprüfen, ob die spezifizierten Anforderungen vom<br />
Produkt erfüllt werden. Der <strong>Test</strong> gegen die Softwarespezifikation <strong>wir</strong>d als Software-<br />
Funktionstest bezeichnet, der <strong>Test</strong> gegen die Systemspezifikation als Systemtest.<br />
Die <strong>Test</strong>er validieren, ob die Anforderungen vollständig und angemessen umgesetzt<br />
wurden.<br />
Ziel Sicherstellen, dass die Software alle Anforderungen erfüllt<br />
Hardware in the Loop<br />
<strong>Test</strong>endekriterien<br />
Fahrzeug<br />
�� Alle neuen und geänderten Anforderungen sind getestet<br />
�� Vollständige und fehlerfreie Ausführung des Regressionstests<br />
Abb. 4: Software-Funktionstest/Systemtest<br />
Prüfstand<br />
Die geeignete <strong>Test</strong>umgebung <strong>wir</strong>d je nach <strong>Test</strong>thema und Verfügbarkeit gewählt.<br />
Hardware-in-the-Loop- und Getriebe-Prüfstände haben den Vorteil der<br />
Automatisierbarkeit und der Reproduzierbarkeit von <strong>Test</strong>läufen. Das Fahrzeug<br />
dagegen ist die reale Umgebung und <strong>wir</strong>d vor allem dann eingesetzt, wenn die<br />
Aus<strong>wir</strong>kung von Softwareänderungen „erfahrbar“ ist. Änderungen zur Steigerung der<br />
Fahrbarkeit oder Verbrauchsoptimierungen sind nur sehr schwer in simulierten<br />
Umgebungen darzustellen und zu bewerten. Dagegen sind Diagnoseprüfungen und<br />
Protokolltests sehr gut an einem HIL-System automatisierbar.
3 Spezifische Anforderungen an den <strong>Test</strong><br />
Die geradlinige sequenzielle Struktur, wie sie das V-Modell beschreibt, findet man im<br />
Umfeld der Automobilzulieferer eher selten. Varianten, schnelle Entwicklungszyklen<br />
und zunehmende Modularisierung stellen zusätzliche Herausforderungen an die<br />
Softwareentwicklung und den <strong>Test</strong>. Drei für die ZF wichtige Herausforderungen,<br />
werden hier ausführlicher dargestellt und Lösungsansätze aufgezeigt.<br />
3.1 Komponentenbasierte Entwicklung<br />
Um die steigenden Ansprüche an Funktionsumfang und Entwicklungszeit zu<br />
beherrschen, werden Softwareteile in <strong>unter</strong>schiedlichen Projekten wiederverwendet.<br />
Dazu ist es notwendig, komponentenbasiert zu entwickeln. Das heißt, Software-<br />
Komponenten, die in mehreren Projekten benötigt werden, werden generisch<br />
entwickelt und in verschiedene Projekte integriert. Die komponentenbasierte<br />
Entwicklung stellt besondere Anforderungen an die <strong>Test</strong>- und Integrationsstrategie.<br />
3.1.1 SIL Umgebung für Komponenten<br />
Für die bei der ZF entwickelten Komponenten kommt eine Software-in-the-Loop-<br />
Umgebung als <strong>Test</strong>plattform zum Einsatz. Die umgebende Software <strong>wir</strong>d wie das<br />
Getriebe- und Fahrzeugmodell simuliert. Dadurch werden funktionale Prüfungen<br />
ermöglicht, ohne auf die Zielplattform und in die Gesamtsoftware zu integrieren. Die<br />
SIL-Umgebung bietet eine frei konfigurierbare Oberfläche und umfangreiche<br />
Möglichkeiten der Automatisierung. Dadurch sind effiziente manuelle und<br />
automatisierte <strong>Test</strong>s möglich. Dies ermöglicht die schnelle Umsetzung von<br />
Funktionsänderungen und bietet somit die notwendige Flexibilität bei den<br />
Komponentenentwicklern [2].<br />
if (a == b)<br />
c = d;<br />
else<br />
Skripte, Daten Reports<br />
Abb. 5: SIL Umgebung für Komponenten
3.1.2 Integration der Komponenten<br />
Zur Integration der Komponente ins Projekt gibt es zwei grundsätzliche<br />
Möglichkeiten: Die Integrationsaufgaben erfolgen schwerpunktmäßig bei der<br />
Komponente (Abb. 6) oder im Projekt (Abb. 7).<br />
K1<br />
K2<br />
K3<br />
IT<br />
IT<br />
IT<br />
Projekt<br />
K1<br />
K2<br />
K3<br />
IT<br />
Projekt<br />
Abb. 6: Integration bei Komponente Abb. 7: Integration im Projekt<br />
Wird die Integrationsumgebung dem Komponententeam zur Verfügung gestellt, kann<br />
dort schon integriert und getestet werden. Dazu ist aber Know-How für die<br />
Zielplattform notwendig und weitere beteiligte Komponenten müssen mit einbezogen<br />
werden. Dies erfordert eine erhöhte Kommunikation zwischen den<br />
Komponententeams. Nimmt das Projektteam die Integration vor, dann muss dort<br />
Wissen über die Funktionalität und Schnittstellen vorhanden sein. Dieses<br />
zentralisierte Vorgehen bündelt die Kommunikation und das Integrations-Know-How<br />
an einer Stelle. Je nach Anzahl von Komponenten und Projekten verlagern sich die<br />
Vor- und Nachteile der Vorgehensweisen. Die Funktionskomponenten, die<br />
vollständig bei der ZF entwickelt werden, verlagern den Integrationsaufwand zum<br />
Projekt. Dazu werden Integrations-Arbeitspakete geplant, wenn erkannt <strong>wir</strong>d, dass<br />
Änderungen über Komponentengrenzen hinausgehen. Diese Arbeitspakete werden<br />
bei der Gesamtintegration abgearbeitet [3].<br />
3.2 Varianten in Getriebeanwendungen<br />
Die Getriebe entwickeln sich laufend weiter. War noch vor wenigen Jahren der 5-<br />
Gang-Stufenautomat für Pkw in der Entwicklung, sind es jetzt 6 Gänge und mehr.<br />
Die Erweiterung der Gangstufen und Funktionalität erfordert immer leistungsfähigere<br />
Controller mit zunehmendem Speicherbedarf und steigenden Taktfrequenzen. Nicht<br />
zuletzt kommen die Getriebe bei verschiedenen Kunden in verschiedenen<br />
Fahrzeugplattformen zum Einsatz. Dies alles sind Faktoren, die zu neuen Varianten<br />
einer Getriebefamilie führen. Diese Varianten <strong>wir</strong>ken sich auch auf den Softwaretest<br />
aus. Die <strong>Test</strong>s müssen sicherstellen, dass Änderungen in die richtigen Varianten<br />
einfließen und die Funktionalität unbeteiligter Varianten nicht beeinflusst <strong>wir</strong>d. Dazu<br />
werden variantenübergreifende automatisierte Vergleichstests bei den<br />
Softwarentwicklern eingesetzt. Für die funktionalen <strong>Test</strong>s der <strong>unter</strong>schiedlichen
Varianten müssen spezielle <strong>Test</strong>umgebungen zur Verfügung stehen und die<br />
<strong>Test</strong>automatisierung muss angepasst werden. Dabei kommen Konzepte aus der<br />
objektorientierten Softwareentwicklung zum Einsatz.<br />
Software-Plattform<br />
bedient <strong>unter</strong>schiedliche:<br />
Getriebe<br />
ECU<br />
Kunden<br />
Fahrzeug<br />
Abb. 8: Varianten in Getriebeanwendungen<br />
Varianten<br />
Die Anzahl zu<br />
bedienender<br />
Varianten steigt<br />
3.2.1 Softwareänderungen variantenübergreifend absichern<br />
Um effizient und flexibel zu bleiben, <strong>wir</strong>d die Software unserer Stufenautomaten aus<br />
einem gemeinsamen Sourcepool bedient. Gleichteile zwischen den Varianten<br />
werden in der Software nur einmal abgebildet, Unterschiede werden durch<br />
Präprozessorschalter variiert. Beim Kompilieren <strong>wir</strong>d dann entschieden, welche<br />
Variante gebildet <strong>wir</strong>d. Softwareänderungen, die für eine Variante notwendig sind,<br />
dürfen sich auf andere Varianten nicht aus<strong>wir</strong>ken. Dies sicherzustellen ist Aufgabe<br />
von automatisierten Vergleichstests, die den Einfluss von Änderungen auf die<br />
verschiedenen Varianten erfassen und protokollieren.<br />
Grundlage für den Vergleichstest ist eine <strong>Test</strong>ablaufsteuerung, die verschiedene<br />
Versionen und Varianten aus dem Konfigurationsmanagement auswählen und<br />
<strong>Test</strong>läufe anstoßen kann.<br />
• Im ersten Schritt des Vergleichstest erfolgt eine umfassende statische<br />
Analyse. Damit <strong>wir</strong>d die formale Korrektheit des Codes aller Varianten<br />
nachgewiesen und die Kompilierbarkeit sichergestellt.<br />
• Im zweiten Schritt werden Codeänderungen durch Vergleich der<br />
Präprozessor-Ausgabe zum Referenz-Softwarestand erfasst. Im Differenzreport<br />
<strong>wir</strong>d ersichtlich, in welchen Varianten eine Codeänderung stattgefunden<br />
hat.<br />
Zeit
• Im dritten Schritt <strong>wir</strong>d die Software-in-the-Loop-Umgebung gestartet und die<br />
im vorhergehenden Schritt ausgewählte Software-Variante sowie die<br />
Referenz-Software mit einem Standardskript stimuliert. Ein nachgeschalteter<br />
Messwertvergleich findet Unterschiede im Laufzeitverhalten. Im Differenzreport<br />
<strong>wir</strong>d ersichtlich, in welchen Varianten eine Funktionsänderung stattgefunden<br />
hat.<br />
Der automatisierte <strong>Test</strong> über die Varianten gibt Sicherheit, dass keine ungewollten<br />
Änderungen in Varianten vorgenommen wurden [1].<br />
<strong>Test</strong>ablaufsteuerung<br />
Formale Korrektheit<br />
prüfen<br />
Codeänderungen<br />
prüfen<br />
Funktionalität<br />
prüfen<br />
Automatische<br />
Auswertung<br />
Referenz-<br />
Stand<br />
Kompilieren/<br />
statische Analyse<br />
Präprozessorvergleich<br />
Software<br />
in the Loop<br />
Messwertvergleich<br />
Dokumentation Differenzreport<br />
Abb. 9: Ungewollte Seiteneffekte verhindern<br />
<strong>Test</strong>-<br />
Stand<br />
Grafische Grafische Anzeige<br />
Anzeige<br />
3.2.2 Einfluss von Varianten im Software-Funktionstest<br />
Einflüsse von Varianten sind in allen Entwicklungsstufen relevant. Zum einen gibt es<br />
für <strong>unter</strong>schiedliche Varianten <strong>unter</strong>schiedliche Anforderungen, die auch dem <strong>Test</strong><br />
zugrunde gelegt werden. Zum anderen ändert sich die Hardwareumgebung, wodurch<br />
auch die Umgebungssimulation und die Ansteuerungsfunktionen der<br />
<strong>Test</strong>automatisierung angepasst werden müssen. Die Aus<strong>wir</strong>kung zweier<br />
<strong>unter</strong>schiedlicher Wählhebelkonzepte soll am Beispiel erläutert werden (siehe Abb.<br />
10).<br />
In der <strong>Test</strong>automatisierung sollen Funktionen für das Gangeinlegen zur Verfügung<br />
stehen, die später in <strong>Test</strong>sequenzen verwendet werden. Da die Hardwareansteuerung<br />
im <strong>Test</strong>automatisierungssystem von der Wählhebelvariante abhängt,<br />
sind mehrere Implementierungen für das Gangeinlegen notwendig. Die <strong>Test</strong>sequenz
soll aber eine einheitliche Zugriffsfunktion verwenden. Ein Lösungsansatz für dieses<br />
Problem ist das „Programmieren gegen Interfaces“.<br />
Abb. 10: Varianten am Beispiel Wählhebel<br />
In einer Kundenvariante werden<br />
verschiedene Wählhebelkonzepte verfolgt.<br />
absoluter Wählhebel<br />
� für jede Position gibt es eine definierte<br />
Wählhebelstellung.<br />
relativer Wählhebel<br />
� ausgehend von der eingelegten Position<br />
<strong>wir</strong>d durch Vor- und Zurücktippen die<br />
Position gewechselt.<br />
Eine Funktion „Position_D_einlegen()“<br />
in der <strong>Test</strong>automatisierung hat<br />
verschiedene Ausprägungen.<br />
Eine Interface-Klasse abstrahiert die Schnittstellen von der Implementierung. Bei der<br />
Erstellung der <strong>Test</strong>sequenzen <strong>wir</strong>d auf die Interface-Klasse zugegriffen, somit bleibt<br />
die Sequenz wiederverwendbar. Vor dem Durchlauf des <strong>Test</strong>s muss die Auswahl der<br />
geeigneten Implementierung erfolgen. Je nach Variante werden entsprechende<br />
Instanzen gebildet und den Sequenzen übergeben. [5]<br />
<br />
class Lever<br />
setPosD()<br />
setPosN()<br />
class AbsoluteLever<br />
setPosD()<br />
setPosN()<br />
class RelativeLever<br />
setPosD()<br />
setPosN()<br />
<br />
###<strong>Test</strong>sequenz<br />
class Sequenz:<br />
def execute (self,<br />
lev = Lever()):<br />
lev.setPosN()<br />
lev setPosD()<br />
Abb. 11: Programmieren gegen Interfaces<br />
Programmieren gegen Interfaces<br />
� Bilden einer „abstrakten Basisklasse“ für<br />
den Wahlschalter, die die Schnittstellen<br />
der Methoden zur Verfügung stellt.<br />
� Für jede Variante <strong>wir</strong>d eine<br />
Implementierung bereitgestellt.<br />
� Die <strong>Test</strong>sequenzen arbeiten mit der<br />
„abstrakten Basisklasse“.<br />
� Erst beim Erstellen des <strong>Test</strong>laufs <strong>wir</strong>d<br />
entschieden, welche Implementierung<br />
verwendet <strong>wir</strong>d.<br />
Die <strong>Test</strong>sequenzen sind unabhängig<br />
von der Wählhebel-Variante wieder<br />
verwendbar.
Durch das Programmieren gegen Interfaces kann nicht nur Hardware abstrahiert<br />
werden, es können alle Funktionen unabhängig von der zu testenden Variante<br />
bereitgestellt werden. Diese Methode ist grundlegend für den Aufbau von <strong>Test</strong>-<br />
Bibliotheken.<br />
3.3 Verteilte Entwicklung – Verteilte <strong>Test</strong>s<br />
Die ZF hat in ihren PKW Getriebeprojekten schon langjährige Erfahrung mit verteilter<br />
Entwicklung. Bis zu sechs verschiede Softwarepartner arbeiten in einem Projekt<br />
zusammen. Bei dieser verteilten Entwicklung <strong>wir</strong>d auch verteilt getestet. Um<br />
sicherstellen zu können, dass die Software vollständig und ausreichend abgeprüft<br />
<strong>wir</strong>d, ist eine Übersicht aller <strong>Test</strong>aktivitäten im Projekt notwendig.<br />
�Sammlung aller <strong>Test</strong>themen für<br />
ein Projekt<br />
�Auflistung aller beteiligter<br />
Entwicklungspartner<br />
�Für jedes <strong>Test</strong>thema:<br />
� <strong>Test</strong>umfang<br />
� Häufigkeit des <strong>Test</strong>s<br />
� <strong>Test</strong>umgebung<br />
� <strong>Test</strong>tiefe<br />
� <strong>Test</strong>verantwortung<br />
�� Überblick über die <strong>Test</strong>aktivitäten<br />
�� Identifikation von <strong>Test</strong>lücken<br />
Abb. 12: Übergreifende <strong>Test</strong>aufteilung<br />
In Projekten der ZF gibt es dazu die „organisationsübergreifende <strong>Test</strong>aufteilung“ als<br />
zentrales Dokument. Es <strong>wir</strong>d eine Matrix über die <strong>Test</strong>themen im Projekt und den<br />
beteiligten Entwicklungspartnern gebildet. Die <strong>Test</strong>themen werden aus den<br />
Funktionsanforderungen und dem Design abgeleitet und müssen die notwendigen<br />
<strong>Test</strong>felder vollständig erfassen. Jeder <strong>Test</strong> <strong>wir</strong>d kategorisiert und in die Matrix<br />
eingetragen.<br />
Sind die <strong>Test</strong>s erfasst, so können den <strong>Test</strong>s beliebige zusätzliche Informationen<br />
zugeordnet werden. Üblich sind neben Umfang und Häufigkeit - die Anzahl der<br />
<strong>Test</strong>fälle, die <strong>Test</strong>umgebung und die Dauer der Durchführung. <strong>Was</strong> sich auf den<br />
ersten Blick einfach anhört, hat in der Praxis ein paar Tücken. Die <strong>Test</strong>themen<br />
müssen so gewählt und abgestimmt sein, dass zwischen den Entwicklungspartnern<br />
ein einheitliches Verständnis besteht. Die <strong>Test</strong>s müssen sich den <strong>Test</strong>themen
zuordnen lassen, um einen direkten Bezug zu den <strong>Test</strong>fällen zu bekommen. Um dies<br />
in die <strong>unter</strong>schiedlichen Strukturen der Software-Partner einzugliedern, bedarf es<br />
konkreter Absprachen.<br />
Sind die Hürden überwunden, so hat man mit der <strong>Test</strong>matrix ein einfaches, aber<br />
effizientes Mittel, um den Überblick über die <strong>Test</strong>s zu wahren und steuernd<br />
eingreifen zu können.<br />
4 Nutzen, Ausblick<br />
In den letzten Jahren ist es der ZF gelungen, einen fundierten und effizienten<br />
<strong>Test</strong>prozess darzustellen. Eindeutige und angepasste Ziele in jeder <strong>Test</strong>stufe sorgen<br />
dafür, dass die <strong>Test</strong>s zum optimalen Zeitpunkt durchgeführt werden. Dadurch<br />
werden alle Aspekte des Softwaretests abgedeckt und ohne den Aufwand zu<br />
steigern, <strong>wir</strong>d die Qualität der Software deutlich erhöht.<br />
Varianten, kurze Entwicklungszyklen, der zunehmende Funktionsumfang und die<br />
verteilte Entwicklung sind Anforderungen, die beherrscht werden müssen. Um<br />
effizient zu bleiben, sind realitätsnahe Simulationsumgebungen und ein hoher Automatisierungsgrad<br />
beim <strong>Test</strong> nicht mehr wegzudenken. Werden Komponenten von<br />
<strong>unter</strong>schiedlichen Partnern entwickelt, so sind eine abgestimmte Integrationsstrategie<br />
und regelmäßige Durchsprachen der <strong>Test</strong>aktivitäten zwischen den<br />
Entwicklungspartnern notwendig, um Mehrfachaufwand und Lücken zu vermeiden.<br />
Aktuelle Arbeiten beschäftigen sich mit der Wiederverwendung von <strong>Test</strong>fällen und<br />
der Erstellung einer geeigneten <strong>Test</strong>fall-Bibliothek. Ein zweiter Schwerpunkt liegt in<br />
der automatisierten Generierung von <strong>Test</strong>fällen für die <strong>unter</strong>schiedlichen <strong>Test</strong>stufen.<br />
Durch diese Maßnahmen soll der Aufwand für <strong>Test</strong>s nochmals deutlich gesenkt<br />
werden. Dies ermöglicht eine größere <strong>Test</strong>tiefe und kurze Entwicklungszyklen.<br />
5 Literatur<br />
[1] DORNSEIFF M.; STAHL M.; SIEGER M.: Durchgängige <strong>Test</strong>methoden für<br />
komplexe Steuerungssysteme. Elektronik im Kraftfahrzeug, Baden-Baden, 2001<br />
[2] BAUER G.; HÄBE K.; DORNSEIFF M.: <strong>Test</strong>strategien bei der Entwicklung von<br />
Funktionen. <strong>Test</strong>en im System- und Software-Life-Cycle, Stuttgart, 2005<br />
[3] WOLFF M.; DEISS H.: Beherrschung vernetzter Systeme durch neue<br />
<strong>Test</strong>methodik. In: Hanser Automotive Nr.7-8, 2005<br />
[4] SPILLNER A.; LINZ T.: Basiswissen Softwaretest, Dpunkt Verlag, 2004<br />
[5] BATCHELDER N.: A quest for pythonic interfaces, www.nedbatchelder.com,<br />
2004