21.01.2013 Aufrufe

Was verstehen wir unter Test - FKFS

Was verstehen wir unter Test - FKFS

Was verstehen wir unter Test - FKFS

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!