23.06.2015 Aufrufe

Testmustergenerierung mit Hilfe von ... - ihmor.de

Testmustergenerierung mit Hilfe von ... - ihmor.de

Testmustergenerierung mit Hilfe von ... - ihmor.de

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.

<strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong><br />

Wahrscheinlichkeitsverteilungen im<br />

Rahmen <strong>de</strong>s mo<strong>de</strong>llbasierten Tests<br />

eingebetteter Systeme<br />

Diplomarbeit<br />

<strong>von</strong><br />

Oliver Fick<br />

Fakultät V für Elektrotechnik, Informatik und Mathematik<br />

Institut für Informatik<br />

Universität Pa<strong>de</strong>rborn<br />

Juni 2005<br />

Erstbetreuer: Dr. Klaus Lamberg (dSPACE GmbH)<br />

Zweitbetreuer: Stefan Ihmor (Universität Pa<strong>de</strong>rborn)<br />

Erstprüfer: Prof. Dr. rer. nat. Franz Josef Rammig<br />

Zweitprüfer: Prof. Dr. rer. nat. habil. O<strong>de</strong>j Kao


Kurzfassung<br />

Kurzfassung<br />

Im mo<strong>de</strong>llbasierten Entwicklungsprozess eingebetteter Systeme kommen vermehrt Techniken<br />

zur automatischen Erstellung <strong>von</strong> Tests zum Einsatz. Die auf Zufall basieren<strong>de</strong>n<br />

Verfahren haben Nachteile bezüglich <strong>de</strong>r Effizienz während <strong>de</strong>r Generierung <strong>von</strong> Testdaten<br />

und <strong>de</strong>r Qualität <strong>de</strong>r erzeugten Testmuster. Die vorliegen<strong>de</strong> Arbeit liefert eine<br />

Methodik, welche <strong>de</strong>m Testentwickler die Möglichkeit zur Steuerung zufallsbasierter<br />

<strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen bietet. Dadurch ist es<br />

<strong>de</strong>m Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens möglich, gezielt Testdaten für Systembereiche zu generieren,<br />

welche durch das allgemeine auf Zufall basierte Verfahren nicht abge<strong>de</strong>ckt wer<strong>de</strong>n.<br />

Das entwickelte Verfahren wur<strong>de</strong> im Rahmen dieser Arbeit prototypisch umgesetzt,<br />

wodurch eine Evaluierung <strong>de</strong>r Methodik ermöglicht wur<strong>de</strong>. Diese zeigt, dass <strong>de</strong>r Aufwand<br />

<strong>de</strong>r Testerstellung sowie <strong>de</strong>r Testdurchführung durch Anwendung <strong>de</strong>r entwickelten<br />

Methodik stark verringert wer<strong>de</strong>n kann. Zusätzlich wur<strong>de</strong> die Qualität <strong>de</strong>r erzeugbaren<br />

Testmuster <strong>de</strong>rart gesteigert, dass diese nahezu die Qualität manuell erstellter Testmuster<br />

erreichen.<br />

Abstract<br />

Techniques for automatic test pattern generation are increasingly applied in the mo<strong>de</strong>lbased<br />

<strong>de</strong>velopment process of embed<strong>de</strong>d systems. Random-based methods have disadvantages<br />

in respect of efficiency during the generation process of test data and in terms of<br />

quality of generated test patterns. In this diploma thesis, a methodology is presented,<br />

allowing the <strong>de</strong>veloper to control the random-based generation process of test patterns by<br />

dint of probability distributions. Using this methodology, test patterns for those system<br />

areas not covered by the generic random-based method can be obtained automatically. The<br />

<strong>de</strong>veloped method is prototypically implemented in the context of this thesis, per<strong>mit</strong>ting its<br />

evaluation. Evaluation results show that effort for test data creation and test execution can<br />

be significantly reduced by applying the outlined technique. Additionally, it increases the<br />

quality of generated test patterns almost to the level of manually created ones.<br />

i


Danksagung und Eigenständigkeitserklärung<br />

Danksagung<br />

Dieses Dokument entstand im Rahmen einer Diplomarbeit in Kooperation <strong>de</strong>r Arbeitsgruppe<br />

Rammig <strong>de</strong>r Universität Pa<strong>de</strong>rborn und <strong>de</strong>r dSPACE GmbH. Für das interessante<br />

Diplomarbeitsthema möchte ich mich im Beson<strong>de</strong>ren bei Prof. Dr. rer. nat. Franz J.<br />

Rammig bedanken. Ebenfalls danke ich Prof. Dr. rer. nat. habil. O<strong>de</strong>j Kao für die Übernahme<br />

<strong>de</strong>s zweiten Gutachtens. Beson<strong>de</strong>rer Dank gilt meinem Betreuer Dr.-Ing. Klaus<br />

Lamberg bei <strong>de</strong>r dSPACE GmbH, durch <strong>de</strong>ssen Engagement diese Arbeit überhaupt möglich<br />

wur<strong>de</strong>. Ihm und meinem Betreuer Stefan Ihmor <strong>von</strong> <strong>de</strong>r Universität Pa<strong>de</strong>rborn gilt<br />

beson<strong>de</strong>rer Dank für die über <strong>de</strong>n Zeitraum <strong>de</strong>r Erstellung <strong>de</strong>r Diplomarbeit andauern<strong>de</strong><br />

fachliche und persönlich engagierte Betreuung. Meinen ehemaligen Kollegen Holger<br />

Krisp, Jürgen Klahold, Dirk Jegminat, Stefan Heidloff, Ulrich Eisemann und Otto Linnemann<br />

in <strong>de</strong>r Abteilung Produktmanagement <strong>de</strong>r dSPACE GmbH möchte ich für ihre<br />

Unterstützung und die kollegiale Arbeitsatmosphäre danken, die mir bei <strong>de</strong>r Erarbeitung<br />

<strong>de</strong>s Themas sehr geholfen haben. Nicht zuletzt möchte ich Catrin Trautmann für das intensive<br />

Korrekturlesen dieser Arbeit danken.<br />

Pa<strong>de</strong>rborn, im Juni 2005<br />

Oliver Fick<br />

Eigenständigkeitserklärung<br />

Hier<strong>mit</strong> erkläre ich, dass ich die vorliegen<strong>de</strong> Arbeit selbstständig verfasst und keine<br />

an<strong>de</strong>ren als die angegebenen Quellen und Hilfs<strong>mit</strong>tel benutzt sowie Zitate kenntlich<br />

gemacht habe.<br />

Pa<strong>de</strong>rborn, <strong>de</strong>n 28. Juni 2005<br />

Oliver Fick<br />

ii


Inhaltsverzeichnis<br />

Inhaltsverzeichnis<br />

1 EINLEITUNG .............................................................................1<br />

1.1 Motivation ............................................................................................................1<br />

1.2 Aufgabenstellung .................................................................................................1<br />

1.3 Glie<strong>de</strong>rung............................................................................................................2<br />

2 MODELLBASIERTE ENTWICKLUNG EINGEBETTETER<br />

SYSTEME..................................................................................3<br />

2.1 Eingebettete Systeme...........................................................................................3<br />

2.2 Entwicklungsprozess nach <strong>de</strong>m V-Mo<strong>de</strong>ll ........................................................3<br />

2.3 Grafische Mo<strong>de</strong>llierung in MATLAB................................................................6<br />

2.3.1 Blockdiagramme in Simulink..............................................................................6<br />

2.3.2 Zustandsdiagramme in Stateflow........................................................................7<br />

3 MODELLBASIERTES TESTEN ..............................................11<br />

3.1 Grundlagen.........................................................................................................11<br />

3.1.1 Der Systembegriff .............................................................................................11<br />

3.1.2 Grundbegriffe beim Testen ...............................................................................12<br />

3.1.3 Der Testprozess.................................................................................................18<br />

3.2 Prüfmetho<strong>de</strong>n.....................................................................................................19<br />

3.2.1 Verifikation und Validierung ............................................................................19<br />

3.2.2 Statische Prüfverfahren .....................................................................................21<br />

3.2.3 Dynamische Prüfverfahren................................................................................21<br />

3.2.4 Spezielle Testarten ............................................................................................22<br />

3.3 Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen...............................................................23<br />

3.3.1 Bemerkung ........................................................................................................24<br />

3.3.2 Kontrollflussgraph.............................................................................................25<br />

3.3.3 Ab<strong>de</strong>ckungskriterium und Ab<strong>de</strong>ckungsgrad.....................................................26<br />

3.3.4 Co<strong>de</strong>ab<strong>de</strong>ckung .................................................................................................27<br />

3.3.4.1 Anweisungsab<strong>de</strong>ckung ...................................................................................27<br />

3.3.4.2 Zweigab<strong>de</strong>ckung.............................................................................................27<br />

3.3.4.3 Bedingungsab<strong>de</strong>ckung ....................................................................................28<br />

3.3.4.4 Pfadab<strong>de</strong>ckung................................................................................................32<br />

3.3.5 Mo<strong>de</strong>llab<strong>de</strong>ckung..............................................................................................32<br />

3.3.5.1 Zustandsab<strong>de</strong>ckung.........................................................................................32<br />

iii


Inhaltsverzeichnis<br />

3.3.5.2 Zweigab<strong>de</strong>ckung ............................................................................................ 32<br />

3.3.5.3 Bedingungsab<strong>de</strong>ckung.................................................................................... 33<br />

3.3.6 Bemerkungen.................................................................................................... 33<br />

3.4 Metho<strong>de</strong>n zur Testfallerstellung...................................................................... 34<br />

3.4.1 Klassifikationsbaummetho<strong>de</strong>............................................................................ 35<br />

3.4.2 Zufallsbasierte <strong>Testmustergenerierung</strong> zur Strukturab<strong>de</strong>ckung ....................... 37<br />

3.4.3 <strong>Testmustergenerierung</strong> <strong>mit</strong> Evolutionären Algorithmen .................................. 38<br />

3.4.4 Analytische <strong>Testmustergenerierung</strong> ................................................................. 40<br />

3.4.5 Fehlermo<strong>de</strong>lle im Hardwaretest........................................................................ 41<br />

3.5 Kommerzielle Anwendungen zur Testfallerstellung...................................... 44<br />

3.5.1 Klassifikationsbaumeditor (CTE)..................................................................... 44<br />

3.5.2 Reactis............................................................................................................... 45<br />

3.5.3 MOTCase-X ..................................................................................................... 46<br />

4 TESTMUSTERGENERIERUNG MIT HILFE VON<br />

WAHRSCHEINLICHKEITSVERTEILUNGEN ........................ 47<br />

4.1 Zufallbasierte <strong>Testmustergenerierung</strong>............................................................ 49<br />

4.1.1 Erweiterung <strong>de</strong>s bearbeiteten Testmusters ....................................................... 50<br />

4.1.2 Evaluierung <strong>de</strong>s Testmusters ............................................................................ 52<br />

4.1.3 Auswertung <strong>de</strong>r Evaluierung ............................................................................ 53<br />

4.1.4 Fortsetzen o<strong>de</strong>r Been<strong>de</strong>n <strong>de</strong>r Generierung ....................................................... 54<br />

4.2 Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen ......... 56<br />

4.2.1 Diskrete Eingangssignale.................................................................................. 56<br />

4.2.2 Analoge Mo<strong>de</strong>lleingänge.................................................................................. 58<br />

4.2.2.1 Diskretisierung <strong>de</strong>s Wertebereichs................................................................. 59<br />

4.2.2.2 Kontinuierlicher Wertebereich....................................................................... 61<br />

5 IMPLEMENTIERUNG DES TESTFALLGENERATORS ........ 63<br />

iv<br />

5.1 Das Hauptprogramm: TestCaseComman<strong>de</strong>r ................................................ 64<br />

5.2 Die Hauptdialoge............................................................................................... 66<br />

5.2.1 Interface Parameter Editor................................................................................ 66<br />

5.2.2 Input Editor....................................................................................................... 67<br />

5.2.3 Weight Editor.................................................................................................... 69<br />

5.2.4 Probability Density Function Editor................................................................. 69<br />

5.2.5 Generation Status.............................................................................................. 70<br />

5.3 Das Verfahren zur <strong>Testmustergenerierung</strong>.................................................... 71


Inhaltsverzeichnis<br />

5.4 Weitere Softwarekomponenten ........................................................................72<br />

5.4.1 Reporter.............................................................................................................72<br />

5.4.2 cvsim .................................................................................................................73<br />

5.4.3 cvhtml................................................................................................................73<br />

5.5 Die Testumgebung .............................................................................................73<br />

6 EVALUIERUNG DES TESTMUSTERGENERATORS............75<br />

6.1 Beispielmo<strong>de</strong>ll Automat_diskret ...............................................................75<br />

6.2 Beispielmo<strong>de</strong>ll Automat_analog ................................................................78<br />

6.3 Beispielmo<strong>de</strong>ll Kaffeeautomat..........................................................................81<br />

6.3.1 Mo<strong>de</strong>llierung <strong>de</strong>r Funktionalität........................................................................81<br />

6.3.2 Verwen<strong>de</strong>te Wahrscheinlichkeitsverteilungen..................................................84<br />

6.3.3 Ergebnisse <strong>de</strong>r <strong>Testmustergenerierung</strong> .............................................................86<br />

6.4 Bewertung...........................................................................................................89<br />

7 ZUSAMMENFASSUNG UND AUSBLICK ..............................93<br />

7.1 Zusammenfassung .............................................................................................93<br />

7.2 Ausblick ..............................................................................................................94<br />

8 LITERATURVERZEICHNIS.....................................................95<br />

ANHANG ............................................................................................99<br />

A Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung........................................................99<br />

v


Abbildungsverzeichnis<br />

Abbildungsverzeichnis<br />

Abbildung 2-1: V-Mo<strong>de</strong>ll...................................................................................................... 4<br />

Abbildung 2-2: Entwicklungsmo<strong>de</strong>lle im V-Mo<strong>de</strong>ll [Schl et al. 04] .................................... 5<br />

Abbildung 2-3: Grundblöcke in Simulink............................................................................. 7<br />

Abbildung 2-4: Blöcke zur Behandlung <strong>de</strong>s Kontrollflusses in Simulink ............................ 7<br />

Abbildung 2-5: Bestandteile eines Statecharts in Stateflow.................................................. 8<br />

Abbildung 2-6: Parallelität in Zustandsautomaten ................................................................ 9<br />

Abbildung 3-1: Implementierungsmo<strong>de</strong>ll als Testobjekt .................................................... 13<br />

Abbildung 3-2: Zusammenhang <strong>von</strong> Testziel, Testbasis und Testfallerstellung................. 14<br />

Abbildung 3-3: Struktur eines Testmusters......................................................................... 17<br />

Abbildung 3-4: Testfall ....................................................................................................... 17<br />

Abbildung 3-5: Testdurchführung, Monitoring und Testauswertung ................................. 18<br />

Abbildung 3-6: Klassifikationsschema nach Liggesmeyer [Lig02, S. 34].......................... 20<br />

Abbildung 3-7: Strukturtestverfahren (White-Box-Test) .................................................... 21<br />

Abbildung 3-8: Funktionstest (Black-Box-Test)................................................................. 22<br />

Abbildung 3-9: Back-to-Back-Test ..................................................................................... 23<br />

Abbildung 3-10: Programmbeispiel in C............................................................................. 24<br />

Abbildung 3-11: C-Funktion maximum <strong>mit</strong> zugehörigem Kontrollflussgraphen (rechts) .. 26<br />

Abbildung 3-12: Modifizierte C-Funktion maximum <strong>mit</strong> Kontrollflussgraphen ................ 28<br />

Abbildung 3-13: Beispiel in Simulink zur Zweigab<strong>de</strong>ckung .............................................. 33<br />

Abbildung 3-14: Beispiel in Stateflow zur Bedingungsab<strong>de</strong>ckung..................................... 33<br />

Abbildung 3-15: Mo<strong>de</strong>ll zur Berechnung <strong>de</strong>s Maximums <strong>von</strong> drei Werten ....................... 34<br />

Abbildung 3-16: Klassifikationsbaum und Kombinationstabelle ....................................... 36<br />

Abbildung 3-17: Zufallsbasierte <strong>Testmustergenerierung</strong> .................................................... 37<br />

Abbildung 3-18: Ablauf eines Evolutionären Algorithmus [Sth et al. 01], [Weg02] ......... 39<br />

Abbildung 3-19: Propagierung <strong>von</strong> Wertebereichen [Her05] ............................................. 40<br />

Abbildung 3-20: Haftfehler-Mo<strong>de</strong>ll an einem AND-Gatter [VieMis04] ............................ 42<br />

Abbildung 3-21: Fehlerpropagierung [Mol02].................................................................... 43<br />

Abbildung 3-22: Klassifikationsbaumeditor ....................................................................... 45<br />

Abbildung 3-23: Beispielsystem ......................................................................................... 46<br />

Abbildung 4-1: Kombination manueller und automatischer <strong>Testmustergenerierung</strong> ......... 47<br />

Abbildung 4-2: <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen..... 50<br />

Abbildung 4-3: Erzeugung <strong>von</strong> Eingabedaten..................................................................... 51<br />

Abbildung 4-4: Erzeugen eines Testmusters (Akzeptieren / Verwerfen)............................ 53<br />

vi


Abbildungsverzeichnis<br />

Abbildung 4-5: Notwendigkeit langer Sequenzen ...............................................................54<br />

Abbildung 4-6: Notwendigkeit mehrerer Testmuster ..........................................................55<br />

Abbildung 4-7: Beispielmo<strong>de</strong>ll Automat_diskret .......................................................57<br />

Abbildung 4-8: Beispielmo<strong>de</strong>ll Automat_analog .........................................................59<br />

Abbildung 4-9: Diskretisierung............................................................................................60<br />

Abbildung 4-10: Beispiel einer Wahrscheinlichkeitsdichte.................................................62<br />

Abbildung 5-1: Softwarestruktur <strong>de</strong>s TestCaseComman<strong>de</strong>rs ..............................................63<br />

Abbildung 5-2: Hauptfenster <strong>de</strong>s TestCaseComman<strong>de</strong>rs ....................................................64<br />

Abbildung 5-3: Interface Parameter Editor..........................................................................67<br />

Abbildung 5-4: Input Editor.................................................................................................68<br />

Abbildung 5-5: Input Editor (analog) ..................................................................................68<br />

Abbildung 5-6: Weight Editor .............................................................................................69<br />

Abbildung 5-7: Probability Density Function Editor...........................................................70<br />

Abbildung 5-8: Generation Status........................................................................................71<br />

Abbildung 5-9: Ab<strong>de</strong>ckungsreport.......................................................................................72<br />

Abbildung 5-10: Einbetten <strong>de</strong>s Testobjekts in die Testumgebung ......................................74<br />

Abbildung 6-1: Beispielmo<strong>de</strong>ll Automat_diskret .......................................................75<br />

Abbildung 6-2: Beispielmo<strong>de</strong>ll Automat_analog .........................................................79<br />

Abbildung 6-3: Kontinuierliche Wahrscheinlichkeitsdichte................................................79<br />

Abbildung 6-4: Beispielmo<strong>de</strong>ll Kaffeeautomat ...................................................................82<br />

Abbildung 6-5: Subsystem Zentrale_Steuerung ..................................................................84<br />

Abbildung 6-6: Wahrscheinlichkeitsdichten für Spannung .................................................85<br />

Abbildung 6-7: Ab<strong>de</strong>ckungsreport <strong>mit</strong> <strong>de</strong>r Gleichverteilung ..............................................87<br />

Abbildung 6-8: Modifiziertes Beispielmo<strong>de</strong>ll Automat_analog...................................89<br />

Abbildung 6-9: Verbesserungspotenzial <strong>de</strong>s gesteuerten Verfahrens..................................91<br />

vii


Tabellenverzeichnis<br />

Tabellen- und Abkürzungsverzeichnis<br />

Tabelle 3-1: Wahrheitswertekombinationen für (a > b && a > c) ...................................... 29<br />

Tabelle 3-2: Wahrheitswertekombinationen für (b > a && b > c)...................................... 29<br />

Tabelle 4-1: Beispiele für diskrete Wahrscheinlichkeitsverteilungen................................. 57<br />

Tabelle 6-1: Gewählte Wahrscheinlichkeitsverteilungen.................................................... 76<br />

Tabelle 6-2: Ergebnisse <strong>mit</strong> Beispielmo<strong>de</strong>ll Automat_diskret................................... 77<br />

Tabelle 6-3: Ergebnisse <strong>mit</strong> Beispielmo<strong>de</strong>ll Automat_analog ..................................... 81<br />

Tabelle 6-4: Wahrscheinlichkeitsverteilungen für Muenzeinwurf....................................... 85<br />

Tabelle 6-5: Wahrscheinlichkeitsverteilungen für Geldrueckgabe ..................................... 85<br />

Tabelle 6-6: Wahrscheinlichkeitsverteilungen für Auswahl................................................ 85<br />

Tabelle 6-7: Ergebnisse <strong>mit</strong> Gleichverteilung ..................................................................... 88<br />

Tabelle 6-8: Abhängigkeit <strong>de</strong>r Testmusterlänge <strong>von</strong> <strong>de</strong>n Übergangsbedingungen............. 90<br />

Abkürzungsverzeichnis<br />

ATG<br />

Automatischer Testmustergenerator<br />

CTE/ES<br />

Klassifikationsbaumeditor für eingebettete Systeme<br />

(Classification Tree Editor for Embed<strong>de</strong>d Systems)<br />

CTM<br />

Klassifikationsbaummetho<strong>de</strong><br />

(Classification Tree Method)<br />

GUI<br />

Graphische Benutzeroberfläche<br />

(Graphical User Interface)<br />

MC/DC<br />

Modifizierte Mehrfach-Bedingungsab<strong>de</strong>ckung<br />

MC/DC-Ab<strong>de</strong>ckung<br />

(Modified Condition / Decision Coverage)<br />

UML<br />

Unified Mo<strong>de</strong>ling Language<br />

viii


1 Einleitung<br />

1.1 Motivation<br />

In heutigen elektrotechnischen Produkten sind häufig mikroelektronische Steuerungs- und<br />

Überwachungssysteme, so genannte eingebettete Systeme, integriert. Diese bestehen<br />

hauptsächlich aus für ihre Aufgabe spezialisierter Hardware und für diese Hardware optimierter<br />

Software. Ihr Einsatz erfolgt in zunehmen<strong>de</strong>m Maße in <strong>de</strong>n unterschiedlichsten<br />

Bereichen <strong>de</strong>r Technik und reicht <strong>von</strong> einfachen Systemen wie <strong>de</strong>m Fensterheber in Autos<br />

bis hin zu komplexen Überwachungssystemen in Flugzeugen. Die stetig steigen<strong>de</strong> Komplexität<br />

dieser hybri<strong>de</strong>n Systeme aus Soft- und Hardware erfor<strong>de</strong>rt <strong>von</strong> Herstellern und<br />

Zulieferern in zunehmen<strong>de</strong>m Maße die Steigerung <strong>de</strong>s Qualitätssicherungsaufwan<strong>de</strong>s, <strong>de</strong>r<br />

zu höheren Entwicklungszeiten und da<strong>mit</strong> verbun<strong>de</strong>nen Kostensteigerungen führt. Da<br />

Produkte aufgrund ihrer Komplexität heutzutage kaum noch ausreichend manuell getestet<br />

wer<strong>de</strong>n können, kommen vermehrt automatische Testerstellungsverfahren zum Einsatz.<br />

Die Anwendung automatischer Metho<strong>de</strong>n erfolgt zunehmend auch im mo<strong>de</strong>llbasierten<br />

Entwicklungsprozess eingebetteter Systeme, da in diesem bereits in frühen Phasen <strong>de</strong>r Produktentstehung<br />

aus einer Mo<strong>de</strong>llrepräsentation <strong>de</strong>s Systems Testmuster zur Überprüfung<br />

<strong>de</strong>s später entwickelten Programmco<strong>de</strong>s erzeugt wer<strong>de</strong>n können. Die in dieser Arbeit<br />

zentral betrachteten Verfahren zur zufallsbasierten <strong>Testmustergenerierung</strong> haben<br />

Schwächen hinsichtlich ihrer Effizienz bei <strong>de</strong>r Erzeugung und <strong>de</strong>r Qualität <strong>de</strong>r erzeugbaren<br />

Testmuster, da die Generierung <strong>von</strong> Testdaten eher unstrukturiert erfolgt. Der Schwerpunkt<br />

<strong>de</strong>r Diplomarbeit liegt in <strong>de</strong>r Entwicklung einer Methodik, <strong>mit</strong> <strong>de</strong>r die automatische<br />

zufallsbasierte Generierung <strong>von</strong> Testdaten durch einen Anwen<strong>de</strong>r gesteuert wer<strong>de</strong>n kann.<br />

1.2 Aufgabenstellung<br />

Die in dieser Arbeit zu entwickeln<strong>de</strong> Methodik soll <strong>de</strong>m Testentwickler die Möglichkeit<br />

bieten, durch Vorgabe <strong>von</strong> diskreten und stetigen Wahrscheinlichkeitsverteilungen <strong>de</strong>n<br />

Prozess <strong>de</strong>r Testdatenerzeugung, bezogen auf die zu testen<strong>de</strong>n Systemteile, zu beeinflussen.<br />

Das zu entwerfen<strong>de</strong> Verfahren dient vor allem dazu, alle Bedingungen, die an die<br />

erzeugten Tests gestellt wer<strong>de</strong>n, auf effiziente Weise zu erfüllen. Dazu zählt neben einer<br />

möglichst kurzen Testdurchführung auch die Zeit sparen<strong>de</strong>, effiziente Generierung <strong>de</strong>r<br />

Testmuster.<br />

Das Ziel dieser Arbeit ist die Implementierung eines Testmustergenerators, <strong>de</strong>r für <strong>de</strong>n<br />

mo<strong>de</strong>llbasierten Test eingebetteter Systeme zufallsbasiert Eingabe- und Referenzdaten aus<br />

MATLAB-Mo<strong>de</strong>llen [MATLAB] erzeugt. Der Testmustergenerator soll zur Umsetzung<br />

<strong>de</strong>r entwickelten Methodik zur <strong>Testmustergenerierung</strong> über eine Schnittstelle verfügen,<br />

über die <strong>de</strong>r Testentwickler <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen Einfluss auf die<br />

<strong>Testmustergenerierung</strong> nehmen kann.<br />

1


1.3. Glie<strong>de</strong>rung<br />

Es ist durch eine Analyse zu zeigen, wieweit auf Zufall basieren<strong>de</strong> Testmustergeneratoren<br />

bei Anwendung <strong>de</strong>s entwickelten Verfahrens gezielt in Problembereiche geführt wer<strong>de</strong>n<br />

können. Die Evaluierung <strong>de</strong>s Verfahrens soll anhand <strong>de</strong>s implementierten Testmustergenerators<br />

erfolgen.<br />

1.3 Glie<strong>de</strong>rung<br />

Einleitend geht die Diplomarbeit in Kapitel 2 auf die mo<strong>de</strong>llbasierte Entwicklung eingebetteter<br />

Systeme ein und ordnet sich in <strong>de</strong>n Entwicklungsprozess nach <strong>de</strong>m V-Mo<strong>de</strong>ll ein.<br />

Das folgen<strong>de</strong> Kapitel 3 führt die für diese Arbeit relevanten Begriffe im Umfeld <strong>de</strong>s<br />

mo<strong>de</strong>llbasierten Testens ein und stellt die wichtigsten Aktivitäten <strong>de</strong>s Testprozesses vor.<br />

An dieser Stelle wird auf verschie<strong>de</strong>ne Testverfahren eingegangen, die sich im Softwareund<br />

Hardwaretest etabliert haben. Nachfolgend bietet die Arbeit eine Übersicht <strong>von</strong><br />

Metho<strong>de</strong>n zur mo<strong>de</strong>llbasierten Testfallgenerierung. Der Schwerpunkt liegt dabei auf <strong>de</strong>n<br />

Verfahren zur Erstellung strukturbasierter Tests, die im Gegensatz zu funktionalen Tests<br />

anstelle <strong>de</strong>r Funktionalität ausschließlich die Struktur <strong>de</strong>s Systems berücksichtigen.<br />

Kapitel 4 beschreibt die in dieser Arbeit entwickelte Methodik zur Steuerung <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

<strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen. An dieser Stelle wird<br />

zwischen analogen und digitalen Eingabeschnittstellen und <strong>de</strong>r daraus resultieren<strong>de</strong>n unterschiedlichen<br />

Behandlung im Verfahren differenziert.<br />

Im fünften Kapitel wird die Implementierung <strong>de</strong>r theoretischen Methodik erläutert. Dabei<br />

wird auf die durch graphische Oberflächen erzeugten Möglichkeiten zur Angabe <strong>von</strong><br />

Wahrscheinlichkeitsverteilungen durch <strong>de</strong>n Anwen<strong>de</strong>r eingegangen.<br />

Die Evaluierung <strong>de</strong>s entwickelten Verfahrens erfolgt anhand <strong>von</strong> ausgewählten Beispielmo<strong>de</strong>llen<br />

in Kapitel 6, welches die Vorteile <strong>de</strong>s Verfahrens zur Steuerung <strong>de</strong>r Generierung<br />

<strong>von</strong> Testdaten <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen herausstellt.<br />

Eine Zusammenfassung <strong>mit</strong> angeschlossenem Ausblick auf mögliche Verbesserungen und<br />

weiterführen<strong>de</strong> Arbeiten schließen die Arbeit ab.<br />

2


2 Mo<strong>de</strong>llbasierte Entwicklung eingebetteter Systeme<br />

2.1 Eingebettete Systeme<br />

In <strong>de</strong>n vergangenen Jahren trat die Klasse <strong>de</strong>r reaktiven Systeme in <strong>de</strong>n Vor<strong>de</strong>rgrund, <strong>de</strong>ren<br />

Bezeichnung unter an<strong>de</strong>rem <strong>von</strong> David Harel [HarPol98] geprägt wur<strong>de</strong>. Traditionelle<br />

Softwaresysteme sind transformationelle Systeme. Dies be<strong>de</strong>utet, dass sie Eingabedaten<br />

einlesen, bearbeiten (transformieren), nach Abschluss dieses Prozesses terminieren und<br />

eine Ausgabe liefern. Im Gegensatz dazu stehen reaktive Systeme in ständigem Wechselspiel<br />

<strong>mit</strong> ihrer Umgebung. Insbeson<strong>de</strong>re die Terminierung ihrer Ausführung ist nicht<br />

gewünscht, was in <strong>de</strong>r Regel zu einer unbeschränkten Laufzeit ohne Neustart führt<br />

[Gol02].<br />

Eine Form <strong>von</strong> reaktiven Systemen sind eingebettete Systeme. Diese sind durch eine<br />

hybri<strong>de</strong> Realisierung in Hard- und Software charakterisiert. Die Hardware ist dabei in <strong>de</strong>r<br />

Regel auf die Aufgaben <strong>de</strong>s Systems optimiert, während die Software eine gewisse Flexibilität<br />

gegenüber einem reinen Hardwaresystem ermöglicht, aber auf die begrenzten<br />

Möglichkeiten <strong>de</strong>r Hardware zugeschnitten ist. Eingebettete Systeme erfüllen häufig<br />

Aufgaben zur Steuerung, Regelung und Überwachung (Steuergeräte im Automobilbereich),<br />

wodurch eine fortlaufen<strong>de</strong> Interaktion <strong>mit</strong> ihrer Umwelt <strong>mit</strong>tels Sensoren,<br />

Aktoren und Benutzerschnittstellen vorausgesetzt ist. Durch die im Prinzip unbeschränkte<br />

Laufzeit eingebetteter Systeme müssen diese im Unterschied zu klassischen Daten verarbeiten<strong>de</strong>n<br />

Systemen ein spezielles Qualitätsmerkmal aufweisen: Ihre Korrektheit und<br />

Ausfallsicherheit sind nicht nur abhängig vom Ein- und Ausgabeverhalten zu bestimmten<br />

Zeitpunkten, son<strong>de</strong>rn auch <strong>von</strong> <strong>de</strong>m Verhalten <strong>de</strong>s Systems über einen längeren Zeitraum<br />

hinweg [Con04].<br />

2.2 Entwicklungsprozess nach <strong>de</strong>m V-Mo<strong>de</strong>ll<br />

Das V-Mo<strong>de</strong>ll (Vorgehensmo<strong>de</strong>ll) ist <strong>de</strong>r Entwicklungsstandard für IT-Systeme <strong>de</strong>s<br />

Bun<strong>de</strong>s. Dieser wur<strong>de</strong> im Auftrag <strong>de</strong>s Bun<strong>de</strong>sministeriums für Verteidigung erstellt. Das<br />

Bun<strong>de</strong>sministerium <strong>de</strong>s Inneren setzt es seit 1992 für <strong>de</strong>n Bereich <strong>de</strong>r Bun<strong>de</strong>sverwaltung<br />

ein. Das V-Mo<strong>de</strong>ll wur<strong>de</strong> <strong>mit</strong> <strong>de</strong>m Ziel <strong>de</strong>r Vereinheitlichung <strong>von</strong> Entwicklungen in <strong>de</strong>r<br />

Informationstechnik entwickelt und steht seit 1992 unter <strong>de</strong>r Aufsicht <strong>de</strong>r Koordinierungsund<br />

Beratungsstelle <strong>de</strong>r Bun<strong>de</strong>sregierung für Informationstechnik in <strong>de</strong>r Bun<strong>de</strong>sverwaltung<br />

[KBSt].<br />

In Zusammenarbeit <strong>mit</strong> Verbän<strong>de</strong>n <strong>von</strong> IT-Herstellern, Softwareentwicklern und Beratungsfirmen<br />

wur<strong>de</strong> <strong>de</strong>r Standard V-Mo<strong>de</strong>ll 97 entwickelt und <strong>mit</strong> internationalen Normen<br />

und Standards abgestimmt [VM97]. Es beschreibt ein Prozessmo<strong>de</strong>ll zum Planen und<br />

Durchführen <strong>von</strong> Entwicklungsprojekten, um diese gemäß <strong>de</strong>r Norm ISO 9001 abwickeln<br />

zu können. Abbildung 2-1 zeigt die für diese Arbeit wichtigen Phasen <strong>de</strong>s V-Mo<strong>de</strong>lls in<br />

3


2.2. Entwicklungsprozess nach <strong>de</strong>m V-Mo<strong>de</strong>ll<br />

Anlehnung an <strong>de</strong>ssen Teilmo<strong>de</strong>ll Softwareerstellung [BröDrö93, S. 24], welches die<br />

Aktivitäten während <strong>de</strong>r Softwareerstellung festlegt. Entsprechen<strong>de</strong> Testphasen sind <strong>de</strong>n<br />

einzelnen Entwicklungsphasen gegenübergestellt. In chronologischer Reihenfolge erfolgt<br />

zuerst die Erstellung <strong>de</strong>s Lastenheftes, welches die Kun<strong>de</strong>nanfor<strong>de</strong>rungen beinhaltet. Die<br />

da<strong>mit</strong> verbun<strong>de</strong>ne Testphase ist die letzte Phase <strong>de</strong>s Entwicklungsprozesses, <strong>de</strong>r Systemtest.<br />

Die aus <strong>de</strong>m Lastenheft erstellte Spezifikation <strong>de</strong>s Funktionsumfangs (Pflichtenheft)<br />

wird im dritten Entwicklungsschritt in Modulspezifikationen unterteilt, welche dann<br />

während <strong>de</strong>r Softwareerstellungsphase in separaten Einheiten implementiert wer<strong>de</strong>n. Im<br />

Anschluss an die Softwareerstellung erfolgt <strong>de</strong>r Modultest, <strong>de</strong>r die Implementierung gegen<br />

die Modulspezifikation testet. Nach einem Integrationsschritt, welcher die einzelnen<br />

Module zusammenführt, erfolgt <strong>de</strong>r Funktionstest als Testphase gegen das Pflichtenheft.<br />

Im abschließen<strong>de</strong>n Systemtest wird das gesamte System gegen die Kun<strong>de</strong>nanfor<strong>de</strong>rungen<br />

geprüft.<br />

Kun<strong>de</strong>nanfor<strong>de</strong>rungen<br />

(Lastenheft)<br />

Systemtest<br />

Funktionsspezifikation<br />

(Pflichtenheft)<br />

Funktionstest<br />

Modulspezifikation<br />

Modultest<br />

Softwareerstellung<br />

Abbildung 2-1: V-Mo<strong>de</strong>ll<br />

Im mo<strong>de</strong>llbasierten Entwicklungsprozess wird bereits in frühen Phasen in <strong>de</strong>r Beschreibungssprache<br />

<strong>de</strong>s verwen<strong>de</strong>ten Mo<strong>de</strong>llierungs- und Simulationswerkzeuges sowohl ein<br />

Mo<strong>de</strong>ll <strong>de</strong>r zu entwickeln<strong>de</strong>n Software (Funktionsmo<strong>de</strong>ll), als auch eines <strong>de</strong>s umgeben<strong>de</strong>n<br />

Systems (Streckenmo<strong>de</strong>ll) und <strong>de</strong>ssen Umgebung (Umgebungsmo<strong>de</strong>ll) erstellt. Das<br />

Funktionsmo<strong>de</strong>ll zeichnet sich dadurch aus, dass bereits zu einem frühen Zeitpunkt im<br />

Entwicklungsprozess ein ausführbares Abbild <strong>de</strong>s Produktes vorliegt, welches eingebettet<br />

in das Mo<strong>de</strong>ll seiner Umgebung simuliert wer<strong>de</strong>n kann. Auf diese Weise können komplexe<br />

Systeme bereits vor <strong>de</strong>r Entwicklung eines Prototypen und vor ihrem Einbau in ein reales<br />

Umgebungssystem funktional und realitätsnah simuliert und getestet wer<strong>de</strong>n [Con04].<br />

4


2. Mo<strong>de</strong>llbasierte Entwicklung eingebetteter Systeme<br />

Das Funktionsmo<strong>de</strong>ll wird aus <strong>de</strong>m ursprünglichen Lasten- und Pflichtenheft systematisch<br />

erzeugt. In ihm wer<strong>de</strong>n die Algorithmen realisiert, <strong>mit</strong> <strong>de</strong>nen die gefor<strong>de</strong>rte Systemfunktionalität<br />

erzielt wird. Es dient zusätzlich als Basis für alle weiteren konstruktiven und<br />

analytischen Entwicklungsschritte. Zu diesen gehören unter an<strong>de</strong>rem die Generierung o<strong>de</strong>r<br />

manuelle Programmierung ausführbaren Co<strong>de</strong>s und die Testfallerstellung. In <strong>de</strong>n einzelnen<br />

Phasen <strong>de</strong>r Entwicklung wird das Funktionsmo<strong>de</strong>ll schrittweise verfeinert. Während<br />

anfänglich ein <strong>von</strong> <strong>de</strong>r Zielplattform unabhängiges, physikalisches Mo<strong>de</strong>ll erzeugt wird,<br />

erfolgt im nächsten Entwicklungsschritt eine Überführung in ein plattformspezifisches<br />

Implementierungsmo<strong>de</strong>ll. Dieses dient in <strong>de</strong>r Softwareerstellungsphase als Spezifikation<br />

zur Erzeugung zielplattformabhängigen Co<strong>de</strong>s.<br />

Kun<strong>de</strong>nanfor<strong>de</strong>rungen<br />

(Lastenheft)<br />

Systemtest<br />

Funktionsspezifikation<br />

(Pflichtenheft)<br />

Funktionsmo<strong>de</strong>ll<br />

Funktionstest<br />

Umgebungsmo<strong>de</strong>ll<br />

Modulspezifikation<br />

Implementierungsmo<strong>de</strong>ll<br />

Modultest<br />

Umgebungsmo<strong>de</strong>ll<br />

Softwareerstellung<br />

Generierter Co<strong>de</strong><br />

Abbildung 2-2: Entwicklungsmo<strong>de</strong>lle im V-Mo<strong>de</strong>ll [Schl et al. 04]<br />

Die Erstellung <strong>de</strong>s Co<strong>de</strong>s kann sowohl vollautomatisch, semi-automatisch o<strong>de</strong>r vollständig<br />

manuell erfolgen. Als i<strong>de</strong>al wird eine vollautomatische Generierung unter Verwendung<br />

<strong>von</strong> Co<strong>de</strong>generatoren wie beispielsweise TargetLink® [TargetLink] <strong>de</strong>r dSPACE GmbH<br />

[dSPACE] angesehen. Mithilfe <strong>von</strong> TargetLink kann Serienco<strong>de</strong> für Steuergeräte vollautomatisch<br />

aus grafischen Simulinkmo<strong>de</strong>llen erzeugt wer<strong>de</strong>n. Durch <strong>de</strong>n Einsatz eines Co<strong>de</strong>generators<br />

können Än<strong>de</strong>rungen am System – sei es aufgrund verän<strong>de</strong>rter Anfor<strong>de</strong>rungen<br />

o<strong>de</strong>r ent<strong>de</strong>ckter Fehler – direkt im Mo<strong>de</strong>ll vorgenommen wer<strong>de</strong>n. Die automatische<br />

Co<strong>de</strong>generierung setzt ohne Einwirken <strong>de</strong>s Entwicklers diese Än<strong>de</strong>rungen direkt im Co<strong>de</strong><br />

um. Eine aufwendige und kostenintensive manuelle Konsistenzhaltung <strong>von</strong> Mo<strong>de</strong>ll und<br />

Co<strong>de</strong> in sämtlichen Schritten <strong>de</strong>s Entwicklungsprozesses ist so<strong>mit</strong> nicht notwendig. Ebenso<br />

wer<strong>de</strong>n durch die automatische Co<strong>de</strong>generierung Fehler in <strong>de</strong>r Implementierungsphase<br />

vermie<strong>de</strong>n, wenn <strong>von</strong> einem fehlerfreien Co<strong>de</strong>generator ausgegangen wer<strong>de</strong>n kann.<br />

5


2.3. Grafische Mo<strong>de</strong>llierung in MATLAB<br />

Die wesentlichen Vorteile <strong>de</strong>s mo<strong>de</strong>llbasierten Entwicklungsprozesses sind Folgen<strong>de</strong>:<br />

Aufgrund <strong>de</strong>r Verfügbarkeit einer simulierbaren Repräsentation <strong>de</strong>s Systems ist eine Überprüfung<br />

<strong>de</strong>sselben auf Fehler bereits vor <strong>de</strong>r Existenz eines realen Prototyps möglich. Die<br />

abstraktere, grafische Beschreibung <strong>de</strong>s Systems vereinfacht die Aktivitäten <strong>de</strong>r Testentwickler,<br />

da die erwähnten Mo<strong>de</strong>lle leichter verständlich als <strong>de</strong>r zugehörige Quellco<strong>de</strong> sind.<br />

Zusätzlich kann die Erstellung <strong>von</strong> Tests im Entwicklungsprozess zeitlich in frühere<br />

Phasen verlegt wer<strong>de</strong>n und parallel zum Systementwurf erfolgen. Der entschei<strong>de</strong>n<strong>de</strong><br />

Unterschied zur herkömmlichen Softwareentwicklung ist allerdings die Möglichkeit, aus<br />

grafischen Mo<strong>de</strong>llen automatisch sowohl Quellco<strong>de</strong> als auch Testfälle erzeugen zu können.<br />

Dies ermöglicht eine Zeitersparnis bei <strong>de</strong>r Implementierung und Testfallerstellung und<br />

reduziert zu<strong>de</strong>m die Anzahl <strong>de</strong>r Fehler, die bei manueller Umsetzung dieser Aktivitäten<br />

auftreten wür<strong>de</strong>n.<br />

2.3 Grafische Mo<strong>de</strong>llierung in MATLAB<br />

Die in dieser Arbeit entwickelte Methodik zur automatischen <strong>Testmustergenerierung</strong> ist<br />

eng verknüpft <strong>mit</strong> <strong>de</strong>m im vorherigen Abschnitt beschriebenen mo<strong>de</strong>llbasierten Entwicklungsprozess.<br />

Aus einem Mo<strong>de</strong>ll wird zur Überprüfung einer im Prozess später erzeugten<br />

Systemrepräsentation eine Menge <strong>von</strong> Tests erzeugt. Bevor auf <strong>de</strong>n Aspekt <strong>de</strong>s Testens<br />

und die Erstellung <strong>von</strong> Tests eingegangen wird, wer<strong>de</strong>n im Folgen<strong>de</strong>n die hier verwen<strong>de</strong>ten<br />

Mo<strong>de</strong>llarten vorgestellt. Dieser Abschnitt diskutiert zwei grundlegen<strong>de</strong> grafische<br />

Mo<strong>de</strong>llierungstechniken: Blockdiagramme und Zustandsdiagramme. In dieser Arbeit<br />

wer<strong>de</strong>n diese ausschließlich in Gestalt <strong>de</strong>r Softwareprodukte Simulink [Simulink] und<br />

Stateflow [Stateflow] verwen<strong>de</strong>t. Sie sind Bestandteil <strong>de</strong>r technischen Entwicklungsumgebung<br />

MATLAB [MATLAB] <strong>von</strong> The Mathworks [Mathworks].<br />

2.3.1 Blockdiagramme in Simulink<br />

Mit <strong>de</strong>n Blockdiagrammen <strong>de</strong>r Mo<strong>de</strong>llierungssprache Simulink wird <strong>de</strong>r Datenfluss eines<br />

Systems beschrieben. Die Linien eines Blockdiagramms repräsentieren Signalleitungen,<br />

über die Daten übertragen wer<strong>de</strong>n. Je<strong>de</strong> Linie zeigt die Richtung an, in <strong>de</strong>r Daten <strong>von</strong><br />

einem Quellblock zu einem o<strong>de</strong>r mehreren Zielblöcken übertragen wer<strong>de</strong>n. Einzelne<br />

Blöcke repräsentieren Recheneinheiten, die eingehen<strong>de</strong> Daten verarbeiten und daraus<br />

resultieren<strong>de</strong> Berechnungen bereitstellen. Ein Pfad durch ein Blockdiagramm, <strong>de</strong>r aus<br />

mehreren Recheneinheiten und Signalleitungen besteht, repräsentiert eine Berechnungssequenz.<br />

Das funktionale Verhalten <strong>de</strong>s Mo<strong>de</strong>lls wird durch die verwen<strong>de</strong>ten Blöcke und <strong>de</strong>n<br />

zwischen ihnen erstellten Verbindungen mo<strong>de</strong>lliert. Abbildung 2-3 zeigt eine Auswahl <strong>von</strong><br />

Grundblöcken in Simulink. Darunter sind unter an<strong>de</strong>rem die Signalquellen Constant und<br />

Sine Wave aufgeführt, welche ein konstantes Signal bzw. eine Sinuskurve als Signal<br />

liefern. Die mathematischen Grundblöcke Gain und Sum dienen zur Multiplikation <strong>mit</strong><br />

einer Konstanten (Gain) und <strong>de</strong>r Addition <strong>von</strong> zwei Signalen (Sum).<br />

6


2. Mo<strong>de</strong>llbasierte Entwicklung eingebetteter Systeme<br />

Abbildung 2-3: Grundblöcke in Simulink<br />

Neben <strong>de</strong>n Grundblöcken stehen auch Blöcke zum Lenken <strong>de</strong>s Kontrollflusses zur Verfügung,<br />

<strong>von</strong> <strong>de</strong>nen eine Auswahl in Abbildung 2-4 zu sehen ist.<br />

Abbildung 2-4: Blöcke zur Behandlung <strong>de</strong>s Kontrollflusses in Simulink<br />

Um die Übersichtlichkeit in großen Mo<strong>de</strong>llen zu gewährleisten, ermöglicht Simulink <strong>de</strong>n<br />

Einsatz <strong>von</strong> Hierarchieebenen. Dabei können mehrere Grundblöcke zu komplexen<br />

Blöcken, so genannten Subsystemen, zusammengefasst wer<strong>de</strong>n. Diese können wie<strong>de</strong>rum<br />

Teilsysteme beinhalten. Auf diese Weise können Blöcke gruppiert wer<strong>de</strong>n, die logische<br />

Einheiten bil<strong>de</strong>n.<br />

2.3.2 Zustandsdiagramme in Stateflow<br />

Die in Simulink verwen<strong>de</strong>ten Zustandsdiagramme wer<strong>de</strong>n als Statecharts bezeichnet. In<br />

ihnen wird das logische Verhalten eines Systems mo<strong>de</strong>lliert. Dabei wird da<strong>von</strong> ausgegangen,<br />

dass eine Aufteilung in eine Menge <strong>von</strong> Modi o<strong>de</strong>r Zustän<strong>de</strong>n möglich ist,<br />

zwischen <strong>de</strong>nen Übergänge bestehen. Abbildung 2-5 zeigt die Grundbestandteile eines<br />

7


2.3. Grafische Mo<strong>de</strong>llierung in MATLAB<br />

Statecharts in Stateflow, wozu Zustän<strong>de</strong> (engl. states) und Zustandsübergänge (Transitionen,<br />

engl. transitions) gehören.<br />

Abbildung 2-5: Bestandteile eines Statecharts in Stateflow<br />

Die Zustän<strong>de</strong> wer<strong>de</strong>n durch Rechtecke <strong>mit</strong> abgerun<strong>de</strong>ten Ecken, Zustandsübergänge <strong>mit</strong><br />

gerichteten Kanten symbolisiert. Häufig sind Bedingungen an die Transitionen geknüpft,<br />

die erfüllt sein müssen, da<strong>mit</strong> <strong>de</strong>r Übergang zum jeweils nächsten Zustand vollzogen<br />

wer<strong>de</strong>n kann. Diese Bedingungen (engl. conditions) können auch an Ereignisse (engl.<br />

events) gebun<strong>de</strong>n sein, welche hauptsächlich zur Interaktion mehrerer parallel laufen<strong>de</strong>r<br />

Zustandsautomaten verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

Stateflow ermöglicht die Mo<strong>de</strong>llierung mehrerer Hierarchieebenen. Auf diese Weise<br />

können mehrere parallel laufen<strong>de</strong> Teilsysteme mo<strong>de</strong>lliert wer<strong>de</strong>n, die jeweils einen<br />

eigenen Zustandsautomaten darstellen. Diese wer<strong>de</strong>n innerhalb komplexer Zustän<strong>de</strong>, so<br />

genannten Superstates, beschrieben, welche Zustän<strong>de</strong> repräsentieren, die in eine Menge<br />

<strong>von</strong> Teilzustän<strong>de</strong>n aufgeteilt wur<strong>de</strong>n.<br />

In Abbildung 2-6 zählen die Zustän<strong>de</strong> System, S1 und S2 zur Klasse <strong>de</strong>r Superstates.<br />

Diesen gegenüber stehen die einfachen Zustän<strong>de</strong> S11, S12, S21 und S22. Die Parallelität im<br />

Statechart System wird durch die gestrichelten Rän<strong>de</strong>r <strong>de</strong>r Zustän<strong>de</strong> S1 und S2 dargestellt.<br />

Diese beinhalten zwei parallel ablaufen<strong>de</strong> Teilsysteme <strong>mit</strong> <strong>de</strong>n Zustän<strong>de</strong>n S11 und S12 in<br />

S1 sowie S21 und S22 in S2. Im Beispiel sind zwei Ereignisse, Event_1 und Event_2,<br />

eingebaut wor<strong>de</strong>n. Ersteres wird ausgelöst, wenn <strong>de</strong>r Zustandsübergang <strong>von</strong> S11 zu S12<br />

genommen wird. Dies hat zur Folge, dass im Anschluss <strong>de</strong>r Superstate S2 <strong>de</strong>n Zustandsübergang<br />

<strong>von</strong> S21 zu S22 wechselt.<br />

8


2. Mo<strong>de</strong>llbasierte Entwicklung eingebetteter Systeme<br />

Abbildung 2-6: Parallelität in Zustandsautomaten<br />

Die in diesem Abschnitt vorgestellten Mo<strong>de</strong>llarten wer<strong>de</strong>n in <strong>de</strong>n Beispielen späterer<br />

Kapitel verwen<strong>de</strong>t. Insbeson<strong>de</strong>re in Kapitel 6 wer<strong>de</strong>n Simulink/Stateflowmo<strong>de</strong>lle als<br />

Beispiele zur Evaluierung <strong>de</strong>s in dieser Arbeit entwickelten Verfahrens zur Steuerung<br />

automatischer <strong>Testmustergenerierung</strong> verwen<strong>de</strong>t. Bevor auf dieses Verfahren eingegangen<br />

wird, erfolgt im Folgen<strong>de</strong>n eine Definition <strong>de</strong>r wichtigsten Begriffe im Umfeld <strong>de</strong>s<br />

mo<strong>de</strong>llbasierten Testens.<br />

9


3 Mo<strong>de</strong>llbasiertes Testen<br />

Die Anwendung systematischer Metho<strong>de</strong>n während <strong>de</strong>r Entwicklung <strong>von</strong> Hardware- und<br />

Softwaresystemen trägt bereits zur Reduzierung <strong>de</strong>r Anzahl <strong>von</strong> Fehlern in technischen<br />

Produkten bei. Die Komplexität dieser Systeme nimmt <strong>de</strong>rart zu, dass die Fehlerfreiheit<br />

<strong>mit</strong> <strong>de</strong>n genannten Metho<strong>de</strong>n allein nicht garantiert wer<strong>de</strong>n kann. Der Test ist ein be<strong>de</strong>uten<strong>de</strong>r<br />

Bestandteil <strong>de</strong>s Soft- und Hardwareentwicklungsprozesses gewor<strong>de</strong>n [BroNot03,<br />

Pre03], <strong>de</strong>r <strong>de</strong>m Ziel gewidmet ist, Fehler in Systemen aufzu<strong>de</strong>cken und so<strong>mit</strong> die Systemqualität<br />

zu erhöhen. Ein Anlass zum Testen kann die Suche nach <strong>de</strong>r Ursache eines<br />

offensichtlichen Fehlverhaltens <strong>de</strong>s Systems o<strong>de</strong>r auch das Bestreben nach einem höheren<br />

Vertrauen auf seine Qualität sein.<br />

In diesem Kapitel erfolgt zunächst die Definition wesentlicher Konzepte und Aktivitäten<br />

<strong>de</strong>s mo<strong>de</strong>llbasierten Testens. Dazu wer<strong>de</strong>n in Abschnitt 3.1 die in dieser Arbeit verwen<strong>de</strong>ten<br />

Begriffe im Umfeld <strong>de</strong>s Testens <strong>de</strong>finiert. Unterkapitel 3.2 stellt eine Klassifikation<br />

<strong>von</strong> Prüfverfahrenklassen vor und geht auf die Unterschie<strong>de</strong> zwischen Verifikation und<br />

Validierung und ihre Abgrenzung zur formalen Verifikation ein. In Abschnitt 3.3 wer<strong>de</strong>n<br />

Ab<strong>de</strong>ckungskriterien erläutert, die als Testziele strukturorientierter Testverfahren dienen.<br />

Der darauf folgen<strong>de</strong> Abschnitt 3.4 liefert einen Überblick über ausgewählte Verfahren zur<br />

Testfallerzeugung. Ziel dieses Unterkapitels ist es, Metho<strong>de</strong>n aufzuzeigen, die <strong>de</strong>n Tester<br />

bei <strong>de</strong>r Erzeugung <strong>von</strong> Testfällen unterstützen. Abschließend wer<strong>de</strong>n in Unterkapitel 3.5<br />

kommerzielle Programme zur Erstellung <strong>von</strong> Testfällen und Testmustern vorgestellt.<br />

3.1 Grundlagen<br />

Im Folgen<strong>de</strong>n wer<strong>de</strong>n Begriffe <strong>de</strong>finiert, die im Umfeld <strong>de</strong>s Testens und insbeson<strong>de</strong>re in<br />

dieser Arbeit <strong>von</strong> Be<strong>de</strong>utung sind. An dieser Stelle sei bereits erwähnt, dass in <strong>de</strong>r Literatur<br />

Abweichungen <strong>von</strong> <strong>de</strong>n hier aufgeführten Definitionen zu fin<strong>de</strong>n sind. In späteren<br />

Abschnitten, in <strong>de</strong>nen Begriffe nicht <strong>mit</strong> referenzierten Literaturquellen in ihrer Definition<br />

übereinstimmen, ist dies gekennzeichnet, um möglichen Missverständnissen vorzubeugen.<br />

3.1.1 Der Systembegriff<br />

Bevor auf die Begriffe im Umfeld <strong>de</strong>s Testens eingegangen wird, erfolgt zum besseren<br />

Verständnis späterer Abschnitte die Definition <strong>de</strong>s Systembegriffs nach Föllinger [Föl94].<br />

Allgemein ist ein System eine Menge <strong>von</strong> Dingen, die in einer bestimmten Relation<br />

zueinan<strong>de</strong>r stehen. Die Relation bil<strong>de</strong>t aus <strong>de</strong>r Menge <strong>von</strong> Dingen eine Betrachtungseinheit.<br />

Ein System besteht so<strong>mit</strong> aus einer Menge <strong>von</strong> Dingen und einer Menge <strong>von</strong><br />

Relationen. Die Tatsache, dass praktisch je<strong>de</strong>s System ein Teil eines größeren Systems ist,<br />

erfor<strong>de</strong>rt die Definition <strong>de</strong>s folgen<strong>de</strong>n Begriffs.<br />

Abgeschlossenes System. Ein System, das keinen näher <strong>de</strong>finierten Einflüssen aus einer<br />

Umgebung ausgesetzt ist, wird als abgeschlossenes System o<strong>de</strong>r Globalsystem bezeichnet.<br />

11


3.1. Grundlagen<br />

Demnach ist ein Globalsystem zwar in ein größeres Umgebungssystem eingebettet, seine<br />

Interaktion <strong>mit</strong> diesem kann aber vernachlässigt wer<strong>de</strong>n.<br />

Abgegrenztes System. Wird ein System aus seiner Umgebung herausgenommen, <strong>mit</strong> <strong>de</strong>r<br />

es interagiert, bezeichnet man dieses als abgegrenztes System. Dieses zeichnet sich<br />

dadurch aus, dass es nicht nur allein als separate Komponente betrachtet wer<strong>de</strong>n kann, da<br />

die Wechselwirkung <strong>mit</strong> seiner Umgebung auf das Systemverhalten Einfluss nimmt.<br />

Eingangs- und Ausgangsgrößen. Die Interaktion eines abgegrenzten Systems <strong>mit</strong> seiner<br />

Umgebung erfolgt über Eingangsgrößen, auf die es reagiert, und Ausgangsgrößen, <strong>mit</strong><br />

<strong>de</strong>nen das System seine Umgebung beeinflusst.<br />

Die in dieser Arbeit betrachteten eingebetteten Systeme sind – wie bereits ihr Name sagt –<br />

abgegrenzte Systeme, die in ein Umgebungssystem eingebettet sind, <strong>mit</strong> welchem sie<br />

interagieren. Im Folgen<strong>de</strong>n bezeichnet <strong>de</strong>r Begriff System, immer ein abgegrenztes<br />

System. Insbeson<strong>de</strong>re <strong>de</strong>r später näher <strong>de</strong>finierte Begriff Testobjekt beschreibt ein<br />

abgegrenztes System, <strong>de</strong>ssen Verhalten <strong>mit</strong>tels Tests überprüft wer<strong>de</strong>n soll.<br />

3.1.2 Grundbegriffe beim Testen<br />

Testen. Das Testen ist eine Maßnahme, die im Entwicklungsprozess eines Systems <strong>de</strong>r<br />

Steigerung <strong>de</strong>r Produktqualität dient. Fälschlicherweise wird häufig angenommen, <strong>de</strong>r Sinn<br />

<strong>de</strong>s Testens sei die Überprüfung eines Systems auf korrektes Verhalten während <strong>de</strong>r<br />

Ausführung. Diese Zielsetzung wi<strong>de</strong>rspricht im Kern <strong>de</strong>m Gedanken <strong>de</strong>r Qualitätssteigerung,<br />

da aufgrund eines Nachweises <strong>de</strong>s korrekten Laufzeitverhaltens keine Verbesserung<br />

am System vorgenommen wird. Entgegengesetzt formuliert Myers die Definition <strong>de</strong>s<br />

Testbegriffs:<br />

„Testen ist <strong>de</strong>r Prozeß, ein Programm <strong>mit</strong> <strong>de</strong>r Absicht auszuführen, Fehler zu fin<strong>de</strong>n“<br />

[Mye89, S.4].<br />

Das Überprüfen <strong>de</strong>r Korrektheit eines Systems <strong>mit</strong> <strong>de</strong>m Ziel, Fehler zu fin<strong>de</strong>n, kann<br />

direkten Einfluss auf die Qualität nehmen. Sollte <strong>mit</strong> einer Anzahl <strong>von</strong> Testfällen dieses<br />

Ziel erreicht wer<strong>de</strong>n, führt die Behebung <strong>de</strong>r gefun<strong>de</strong>nen Fehler direkt zu einer Qualitätssteigerung.<br />

Testziel. Die Erstellung und Durchführung <strong>von</strong> Testfällen, wie sie nachfolgend beschrieben<br />

wird, ist immer einem konkreten Ziel gewidmet [Pre03]. Hierbei ist nicht die bereits<br />

erwähnte Motivation <strong>de</strong>s Testens, nämlich das Auf<strong>de</strong>cken <strong>von</strong> Fehlern, gemeint. Es<br />

han<strong>de</strong>lt sich vielmehr um eine ausgewählte Eigenschaft <strong>de</strong>s Systems, welche durch die<br />

Anwendung eines Testfalls überprüft wer<strong>de</strong>n soll. Das Testziel kann die Überprüfung <strong>de</strong>r<br />

Existenz einer Systemfunktionalität o<strong>de</strong>r auch ihrer korrekten und vollständigen Umsetzung<br />

for<strong>de</strong>rn. Des Weiteren kommt auch die Robustheit eines Systems o<strong>de</strong>r einer<br />

Teilfunktionalität als Testziel in Frage.<br />

Die Testziele können sowohl formal, als auch nicht-formal angegeben wer<strong>de</strong>n. Eine nichtformale<br />

Beschreibung kann häufig durch einen Testentwickler leichter angegeben wer<strong>de</strong>n.<br />

12


3. Mo<strong>de</strong>llbasiertes Testen<br />

Dem gegenüber stehen formal beschriebene Testziele, die in <strong>de</strong>r Regel <strong>mit</strong> mathematischen<br />

Mitteln angegeben wer<strong>de</strong>n. Diese vereinfachen eine automatische Testfallerstellung, da<br />

mathematische und logische Formeln leicht durch Software ausgewertet wer<strong>de</strong>n können.<br />

Ein Beispiel für eine formale Testzielbeschreibung wäre die Angabe einer Zeitspanne, die<br />

maximal zwischen <strong>de</strong>m Aufprall eines Fahrzeugs auf ein Hin<strong>de</strong>rnis und <strong>de</strong>m Zeitpunkt, an<br />

<strong>de</strong>m <strong>de</strong>r Airbag ausgelöst wird, verstreichen darf.<br />

Testschritt. Die Durchführung <strong>von</strong> rechnerbasierten Tests erfor<strong>de</strong>rt eine Diskretisierung<br />

<strong>de</strong>r Zeitlinie. Hierbei wird <strong>de</strong>r Zeitverlauf eines Tests auf eine Folge <strong>von</strong> Zeitpunkten<br />

abgebil<strong>de</strong>t, die einen festen zeitlichen Abstand haben [Con04].<br />

Testobjekt. Als Prüfling, Testling, Testgegenstand o<strong>de</strong>r Testobjekt wird die Komponente<br />

<strong>de</strong>s zu untersuchen<strong>de</strong>n Systems bezeichnet [Bal98], welche zentraler Gegenstand <strong>de</strong>r Testdurchführung<br />

ist. Je<strong>de</strong> Testaktivität steht in Bezug zu <strong>de</strong>m Testobjekt, auch wenn dieses in<br />

frühen Phasen <strong>de</strong>s Qualitätssicherungsprozesses noch nicht vollständig vorhan<strong>de</strong>n sein<br />

muss. Es sich um je<strong>de</strong> Teilkomponente <strong>de</strong>s zu entwickeln<strong>de</strong>n Produktes han<strong>de</strong>ln. Wie<br />

bereits in Abschnitt 2.2 beschrieben wur<strong>de</strong>, durchschreitet dieses im Rahmen <strong>de</strong>s mo<strong>de</strong>llbasierten<br />

Entwicklungsprozesses mehrere Phasen, in <strong>de</strong>nen es in unterschiedlichen Formen<br />

vorliegt. Zu diesen gehören unter an<strong>de</strong>rem das Funktionsmo<strong>de</strong>ll, das Implementierungsmo<strong>de</strong>ll<br />

sowie <strong>de</strong>r daraus generierte Programmco<strong>de</strong>. Die verschie<strong>de</strong>nen Entwicklungsstän<strong>de</strong><br />

o<strong>de</strong>r auch Teilkomponenten da<strong>von</strong> kommen als Testobjekte in Frage [Con04]. Abbildung<br />

3-1 zeigt ein Beispiel für ein Testobjekt <strong>mit</strong> Kennzeichnung seiner n Eingabe- und m<br />

Ausgabeschnittstellen.<br />

Auch wenn <strong>de</strong>r eigentliche Gegenstand <strong>de</strong>r Testdurchführung eine Implementierung ist,<br />

wer<strong>de</strong>n häufig die während <strong>de</strong>r Testerstellung verwen<strong>de</strong>ten Entwicklungsstufen ebenfalls<br />

als Testobjekte bezeichnet. In dieser Arbeit wird generell das Funktionsmo<strong>de</strong>ll zur<br />

Erstellung <strong>von</strong> Tests verwen<strong>de</strong>t.<br />

e 1<br />

a 1<br />

e n<br />

a m<br />

Abbildung 3-1: Implementierungsmo<strong>de</strong>ll als Testobjekt<br />

Testbasis. Bei <strong>de</strong>r Erstellung <strong>von</strong> Tests spielen die Informationsquellen, auf die zurückgegriffen<br />

wird, eine entschei<strong>de</strong>n<strong>de</strong> Rolle. Sie bil<strong>de</strong>n die Basis, aufgrund <strong>de</strong>rer Tests erstellt<br />

wer<strong>de</strong>n [Con04]. Im mo<strong>de</strong>llbasierten Entwicklungsprozess kommen dafür unter an<strong>de</strong>rem<br />

13


3.1. Grundlagen<br />

die Kun<strong>de</strong>nanfor<strong>de</strong>rungen, eine daraus erstellte Spezifikation in Form eines Dokuments<br />

o<strong>de</strong>r das Funktionsmo<strong>de</strong>ll in Frage. Conrad [Con04] verwen<strong>de</strong>t zusätzlich <strong>de</strong>n Begriff<br />

Testorakel, wenn ein Mo<strong>de</strong>ll als Testbasis verwen<strong>de</strong>t wird und zusätzlich auch zur<br />

Bestimmung <strong>von</strong> Referenzdaten dient.<br />

Testfallerstellung<br />

Testziel<br />

Testbasis<br />

Struktureigenschaft<br />

(z.B. Test aller<br />

Verzweigungen)<br />

Funktionseigenschaft<br />

(z.B. Test <strong>de</strong>s<br />

Auslösers eines Airbags)<br />

Kun<strong>de</strong>nanfor<strong>de</strong>rungen<br />

.......................<br />

.......................<br />

.......................<br />

.......................<br />

.......................<br />

Funktionsmo<strong>de</strong>ll<br />

Abbildung 3-2: Zusammenhang <strong>von</strong> Testziel, Testbasis und Testfallerstellung<br />

Abbildung 3-2 zeigt <strong>de</strong>n Zusammenhang <strong>de</strong>r drei soeben erläuterten Begriffe. Die Wahl<br />

<strong>de</strong>r Testziele hängt im Wesentlichen <strong>von</strong> <strong>de</strong>r Wahl <strong>de</strong>r Testbasis ab, welche in dieser<br />

Arbeit das Funktionsmo<strong>de</strong>ll ist. Dieses bietet eine gute Voraussetzung dafür, als Testziele<br />

strukturelle Eigenschaften <strong>de</strong>s Systems zu verwen<strong>de</strong>n, da es zum einen direkt aus <strong>de</strong>n<br />

Anfor<strong>de</strong>rungen <strong>de</strong>s Benutzers erstellt wur<strong>de</strong> und zum an<strong>de</strong>ren als Grundlage für spätere<br />

Entwicklungsschritte verwen<strong>de</strong>t wird. Die wichtigsten strukturellen Eigenschaften, die als<br />

Testziele in Frage kommen, wer<strong>de</strong>n in Abschnitt 3.3 unter <strong>de</strong>m Gesichtspunkt <strong>de</strong>r<br />

Ab<strong>de</strong>ckungsmessung näher behan<strong>de</strong>lt.<br />

Teststrategie. Die Komplexität heutiger Systeme macht es unmöglich, <strong>mit</strong>tels Tests einen<br />

Beweis <strong>de</strong>r Korrektheit einer Systemkomponente durchzuführen. Die Anzahl möglicher<br />

Kombinationen <strong>de</strong>r Eingabedaten, die das zu prüfen<strong>de</strong> Objekt verarbeitet und auf die es<br />

reagiert, ist in <strong>de</strong>r Regel so hoch und kann daher durch Tests nicht vollständig abge<strong>de</strong>ckt<br />

wer<strong>de</strong>n. Zur Reduzierung <strong>de</strong>s Zeitaufwan<strong>de</strong>s und <strong>de</strong>n da<strong>mit</strong> verbun<strong>de</strong>nen Kosten ist die<br />

Festlegung einer Teststrategie notwendig. Dabei wird <strong>de</strong>r Umfang einzelner Tests unter<br />

<strong>de</strong>m Gesichtspunkt einer Prioritätensetzung festgelegt. Sicherheitskritische Aspekte sollten<br />

an dieser Stelle gegenüber weniger wichtigen Funktionen bevorzugt und umfangreicher<br />

überprüft wer<strong>de</strong>n. Nach <strong>de</strong>r gewählten Teststrategie wer<strong>de</strong>n die Ziele vor <strong>de</strong>r Erstellung<br />

<strong>von</strong> Tests <strong>de</strong>finiert [Bal98].<br />

Eingabedaten (Testdaten). Ein Eingabedatum e i,s steht für einen Wert aus <strong>de</strong>m Wertebereich<br />

<strong>de</strong>s i-ten Signaleingangs, <strong>de</strong>n dieser während <strong>de</strong>r Testdurchführung zum Zeitpunkt<br />

<strong>de</strong>s s-ten Testschritts annimmt. Balzert [Bal98] bezeichnet die Eingabedaten als Testdaten,<br />

da sie zum Test <strong>de</strong>s Systems verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

14


3. Mo<strong>de</strong>llbasiertes Testen<br />

Eingabevektor. Ein Eingabevektor e s beinhaltet exakt ein Eingabedatum für je<strong>de</strong>n <strong>de</strong>r n<br />

Signaleingänge <strong>de</strong>s Testobjektes zum Testschritt s.<br />

e<br />

s<br />

⎛ e1,<br />

s<br />

⎞<br />

⎜ ⎟<br />

= ⎜ ... ⎟<br />

⎜ ⎟<br />

⎝en,<br />

s ⎠<br />

Ausgabedaten. Entsprechend <strong>de</strong>r Definition <strong>de</strong>r Eingabedaten ist ein Ausgabedatum a i,s<br />

<strong>de</strong>r Wert eines Signalausgangs <strong>de</strong>s zu untersuchen<strong>de</strong>n Systems während <strong>de</strong>s s-ten Testschritts<br />

<strong>de</strong>r Testdurchführung.<br />

Ausgabevektor. Ein Ausgabevektor a s besteht aus jeweils einem Ausgabedatum für je<strong>de</strong><br />

<strong>de</strong>r m Ausgangsschnittstellen <strong>de</strong>s Testobjekts:<br />

a<br />

s<br />

⎛ a1,<br />

s<br />

⎞<br />

⎜ ⎟<br />

= ⎜ ... ⎟<br />

⎜ ⎟<br />

⎝am,<br />

s ⎠<br />

Referenzdaten. Die Erwartungswerte <strong>de</strong>r Systemausgabe während <strong>de</strong>r Testdurchführung<br />

wer<strong>de</strong>n als Referenzdaten bezeichnet. Dabei repräsentiert ein Referenzdatum r i,s einen<br />

Wert, <strong>de</strong>n <strong>de</strong>r i-te Systemausgang zum Zeitpunkt <strong>de</strong>s s-ten Testschritts annehmen soll. Die<br />

Werte aller Signalausgänge <strong>de</strong>s Systems bil<strong>de</strong>n die Referenzdaten. Diese dienen während<br />

<strong>de</strong>r Testdurchführung und <strong>de</strong>r anschließen<strong>de</strong>n Bewertung <strong>de</strong>s Systemverhaltens <strong>de</strong>m<br />

Vergleich <strong>mit</strong> <strong>de</strong>r tatsächlichen Systemausgabe. Häufig wer<strong>de</strong>n als Referenzdaten die<br />

während einer Simulation einer ausführbaren Systemspezifikation gemessenen Ausgabedaten<br />

verwen<strong>de</strong>t. Im mo<strong>de</strong>llbasierten Entwicklungsprozess dient dazu beispielsweise das<br />

Funktionsmo<strong>de</strong>ll. Der hier<strong>mit</strong> verbun<strong>de</strong>ne Begriff <strong>de</strong>s Back-to-Back-Tests wird in<br />

Abschnitt 3.2.4 motiviert und erläutert.<br />

Referenzvektor. Die Vereinigung <strong>von</strong> jeweils einem Referenzdatum pro Ausgabeschnittstelle<br />

bil<strong>de</strong>t <strong>de</strong>n Referenzvektor r s :<br />

r<br />

s<br />

⎛ r1,<br />

s<br />

⎞<br />

⎜ ⎟<br />

= ⎜ ... ⎟<br />

⎜ ⎟<br />

⎝rm , s ⎠<br />

Toleranzvektor. Der Toleranzvektor τ ist die Beschreibung <strong>de</strong>r Abweichung, um die die<br />

gemessenen Ausgabedaten <strong>von</strong> <strong>de</strong>n vorgegebenen Referenzdaten abweichen dürfen. Die<br />

Abweichung wird in <strong>de</strong>r Regel für einen gesamten Testfall <strong>de</strong>finiert, sodass sie in je<strong>de</strong>m<br />

Testschritt Geltung hat.<br />

⎛ τ<br />

1 ⎞<br />

⎜ ⎟<br />

τ = ⎜ ... ⎟ <strong>mit</strong> τ i ≥ 0<br />

⎜ ⎟<br />

⎝τ m ⎠<br />

1<br />

15


3.1. Grundlagen<br />

Testvektor. Die Vereinigung <strong>von</strong> Eingabe- und Referenzdaten bil<strong>de</strong>t einen Testvektor.<br />

Dieser beinhaltet jeweils ein Eingabedatum pro Eingabeschnittstelle und ein Referenzdatum<br />

pro Ausgabeschnittstelle zu <strong>de</strong>m Zeitpunkt <strong>de</strong>r Testdurchführung, <strong>de</strong>m <strong>de</strong>r Testvektor<br />

zugeordnet ist. Der folgen<strong>de</strong> Testvektor t s beinhaltet n+m Werte, wobei n die<br />

Anzahl <strong>de</strong>r Signaleingänge <strong>de</strong>s Systems und m die Anzahl <strong>de</strong>r Systemausgänge ist. Die<br />

Werte e 1,s , …, e n,s sind die Werte <strong>de</strong>r Systemeingänge und r 1,s , …, r m,s die erwarteten Werte<br />

<strong>de</strong>r Ausgänge im s-ten Testschritt <strong>de</strong>r Testdurchführung.<br />

t<br />

s<br />

⎛ t1,<br />

s ⎞ ⎛ e1,<br />

s ⎞<br />

⎜ ⎟ ⎜ ⎟<br />

⎜ ... ⎟ ⎜ ... ⎟<br />

⎜ t ⎟ ⎜ ⎟<br />

n,<br />

s<br />

en,<br />

s<br />

= ⎜ ⎟ = ⎜ ⎟<br />

⎜ tn+<br />

1, s ⎟ ⎜ r1,<br />

s ⎟<br />

⎜ ⎟ ⎜ ⎟<br />

⎜<br />

...<br />

⎟ ⎜<br />

...<br />

⎟<br />

⎝tn+<br />

m,<br />

s ⎠ ⎝rm , s ⎠<br />

In <strong>de</strong>r Literatur wird alternativ zu <strong>de</strong>r hier gelieferten Definition häufig bereits ein Eingabevektor<br />

als Testvektor bezeichnet. Für diese Arbeit sollen aber die vorherige Definitionen<br />

Geltung haben.<br />

Testmuster. Eine zeitliche Abfolge <strong>von</strong> Testvektoren, die während <strong>de</strong>r Testdurchführung<br />

auf das Testobjekt in festen Zeitschritten (vgl. Testschritt) angewen<strong>de</strong>t wer<strong>de</strong>n, bil<strong>de</strong>t ein<br />

Testmuster. Dieses beinhaltet zum einen eine Menge <strong>von</strong> Eingabevektoren, <strong>mit</strong> <strong>de</strong>nen das<br />

Testobjekt stimuliert wird, und zum an<strong>de</strong>ren die zugehörigen Referenzvektoren, die zum<br />

Vergleich <strong>de</strong>r gemessenen Ausgabevektoren benötigt wer<strong>de</strong>n.<br />

Das Testmuster T ist eine Matrix, <strong>de</strong>ren i-te Zeile <strong>de</strong>n zeitlichen Verlauf <strong>de</strong>r Werte <strong>de</strong>s<br />

i-ten Signaleingangs beschreibt, wenn i ≤ n gilt. Sollte i > n sein, beinhaltet sie die Werte,<br />

die <strong>de</strong>r (i – n)-te Signalausgang <strong>de</strong>s Systems in <strong>de</strong>n einzelnen Testschritten annimmt. Die<br />

i-te Spalte <strong>de</strong>r Matrix beschreibt hingegen eine Momentaufnahme <strong>de</strong>s Zustands aller Einund<br />

Ausgänge <strong>de</strong>s Testobjektes im Testschritt i.<br />

T<br />

⎛ t<br />

⎜<br />

⎜ .<br />

⎜ tn<br />

= ⎜<br />

⎜ t(<br />

n+<br />

⎜<br />

⎜<br />

.<br />

⎝t(<br />

n+<br />

1,1<br />

,1<br />

1),1<br />

m),1<br />

t<br />

1,2<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

t<br />

1, s<br />

( n+<br />

1), s<br />

t<br />

t<br />

.<br />

.<br />

.<br />

n+<br />

m,<br />

s<br />

⎞ ⎛ e<br />

⎟ ⎜<br />

⎟ ⎜ .<br />

⎟ ⎜en<br />

⎟ = ⎜<br />

⎟ ⎜ r<br />

⎟ ⎜<br />

⎟ ⎜<br />

.<br />

⎠ ⎝rm<br />

1,1<br />

,1<br />

1,1<br />

,1<br />

e<br />

1,2<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

e1,<br />

s ⎞<br />

⎟<br />

. ⎟<br />

e ⎟<br />

n,<br />

s<br />

⎟<br />

r1,<br />

s ⎟<br />

.<br />

⎟<br />

⎟<br />

r<br />

m,<br />

s ⎠<br />

Das Beispiel in Abbildung 3-3 ver<strong>de</strong>utlicht die Struktur eines Testmusters und seinen<br />

Zusammenhang zum Zeitverlauf <strong>de</strong>r Testdurchführung. Als Abstand <strong>de</strong>r Zeitschritte<br />

wur<strong>de</strong>n 0,01 Sekun<strong>de</strong>n gewählt.<br />

16


3. Mo<strong>de</strong>llbasiertes Testen<br />

Testvektor tv 2 zum Zeitpunkt 0.02<br />

<strong>mit</strong> Eingabedaten und Referenzdaten<br />

Referenzdatum 7.34 für<br />

<strong>de</strong>n Systemausgang Out2<br />

Eingabedatum 1.04 für<br />

<strong>de</strong>n Systemeingang In2<br />

Namen <strong>de</strong>r<br />

Systemeingänge<br />

In1<br />

In2<br />

5<br />

1.04<br />

tv 2<br />

0<br />

0.04<br />

tv 3<br />

4<br />

1.04<br />

tv 4<br />

1<br />

0.04<br />

tv 5<br />

2<br />

1.04<br />

tv 6<br />

3<br />

0.04<br />

tv 7<br />

7<br />

1.04<br />

tv 8<br />

6<br />

0.04<br />

tv 9<br />

9<br />

1.04<br />

tv 1 3<br />

Namen <strong>de</strong>r<br />

Systemausgänge<br />

Out1<br />

Out2<br />

Out3<br />

0.34<br />

1.35<br />

2.34<br />

0.91<br />

5.23<br />

2.35<br />

1.02<br />

7.34<br />

2.36<br />

0.03<br />

9.34<br />

2.34<br />

4.04<br />

8.2<br />

2.45<br />

2.05<br />

10<br />

2.01<br />

5.06<br />

4.76<br />

2.56<br />

0.37<br />

3.65<br />

2.99<br />

6.48<br />

8.3<br />

Zeit<br />

0.01<br />

0.02<br />

0.03<br />

0.04<br />

0.05<br />

0.06<br />

0.07<br />

0.08<br />

0.09<br />

Abbildung 3-3: Struktur eines Testmusters<br />

Testfall. Die Menge <strong>von</strong> Testziel und einer endlichen Anzahl <strong>von</strong> Testmustern bil<strong>de</strong>t einen<br />

Testfall. Dieser beschreibt eine Menge <strong>von</strong> Szenarien, durch <strong>de</strong>ren Ausführung das<br />

Verhalten <strong>de</strong>s Testobjekts bzgl. eines angegebenen Ziels überprüft wird. Die Verwendung<br />

eines Testfalls in <strong>de</strong>r entsprechen<strong>de</strong>n Phase <strong>de</strong>s Testprozesses wird in Kapitel 3.1.3 näher<br />

beschrieben.<br />

Testfall<br />

Testziel<br />

Testmuster<br />

Abbildung 3-4: Testfall<br />

Testresultat. Die Ergebnisse <strong>de</strong>r Durchführung eines Testfalls wer<strong>de</strong>n als Testresultat<br />

bezeichnet. Dieses kann in einfachen Formen wie beispielsweise einer einfachen Statusbeschreibung<br />

o<strong>de</strong>r einem umfassen<strong>de</strong>n Dokument vorliegen. Ersteres kann in Form einer<br />

Aufzählung gefun<strong>de</strong>ner Fehler und einer Endbewertung erfolgen, die einen Status „fehlgeschlagen“<br />

o<strong>de</strong>r „erfolgreich“ beinhaltet. Dem gegenüber steht die zweite Variante in Form<br />

eines Dokuments, welches eine <strong>de</strong>taillierte Beschreibung <strong>de</strong>r Testfälle, ihrer Testziele und<br />

Testmuster und <strong>de</strong>r gefun<strong>de</strong>nen Fehler beinhaltet. Ebenso kann eine Beschreibung <strong>de</strong>r<br />

geprüften Systembereiche in Form einer Ab<strong>de</strong>ckungsmessung (siehe Kapitel 3.3) in das<br />

Testresultat integriert sein. Mit diesem Ab<strong>de</strong>ckungsbericht können beim Kun<strong>de</strong>n aufgetretene<br />

Fehler dahingehend analysiert wer<strong>de</strong>n, ob die für <strong>de</strong>n Fehler verantwortlichen<br />

Systembereiche bereits umfangreich o<strong>de</strong>r sogar gar nicht überprüft wur<strong>de</strong>n.<br />

17


3.1. Grundlagen<br />

3.1.3 Der Testprozess<br />

Zu <strong>de</strong>n Testaktivitäten wer<strong>de</strong>n alle Tätigkeiten gezählt, die zur Überprüfung <strong>de</strong>s Systems<br />

auf Fehler dienen. Pretschner [Pre03] i<strong>de</strong>ntifiziert folgen<strong>de</strong> Aktivitäten als Bestandteil <strong>de</strong>s<br />

Testprozesses: Testplanung, Testorganisation, Testfallgenerierung, Testdurchführung und<br />

Monitoring, Testauswertung und Testdokumentation. Das Beheben aufge<strong>de</strong>ckter Fehler als<br />

Reaktion auf die Überprüfung ist nicht Bestandteil <strong>de</strong>s Prozesses und muss geson<strong>de</strong>rt<br />

betrachtet wer<strong>de</strong>n. In dieser Arbeit hat das Beheben <strong>von</strong> Fehlern jedoch keine Relevanz<br />

und wird nicht näher betrachtet. Die folgen<strong>de</strong>n Beschreibungen dieser Testaktivitäten<br />

folgen <strong>de</strong>n <strong>von</strong> Pretschner vorgestellten Definitionen [Pre03].<br />

Testplanung. Die Testplanung dient <strong>de</strong>r Festlegung <strong>de</strong>s Testobjekts und einer Anzahl <strong>von</strong><br />

Testzielen. Dies geschieht unter Berücksichtigung <strong>de</strong>r Testbasis und einer Teststrategie.<br />

Testorganisation. Durch die Verwaltung <strong>von</strong> Testobjekten und Testfällen wird die Reproduzierbarkeit<br />

<strong>von</strong> Testdurchführung und Testresultaten unterstützt. Dies beinhaltet auch<br />

die Wie<strong>de</strong>rverwendung <strong>von</strong> Testfällen in <strong>de</strong>n verschie<strong>de</strong>nen Entwicklungsstufen und<br />

neuen Varianten und Revisionen <strong>de</strong>s Systems.<br />

Testfallgenerierung. Diese Tätigkeit beinhaltet mehrere Einzelaktivitäten. Die in <strong>de</strong>r<br />

Planungsphase festgelegten Testziele wer<strong>de</strong>n zuerst formal spezifiziert. Aus <strong>de</strong>r entstan<strong>de</strong>nen<br />

Testfallspezifikation wer<strong>de</strong>n einzelne Testfälle erstellt, <strong>mit</strong> <strong>de</strong>nen einzelne Testziele<br />

erreicht wer<strong>de</strong>n. Zusätzlich wird ein Toleranzmaß in Form eines Toleranzvektors angeben,<br />

<strong>mit</strong>hilfe <strong>de</strong>ssen eventuell eine geringe Abweichung <strong>von</strong> gemessenen Ausgabe- und<br />

vorgegebenen Referenzdaten für die spätere Testauswertung vorgesehen wird. Die Testfallgenerierung<br />

kann manuell o<strong>de</strong>r auch automatisiert vollzogen wer<strong>de</strong>n.<br />

Testdurchführung und Monitoring. Diese Phase <strong>de</strong>s Testprozesses besteht aus zwei<br />

Teilaktivitäten, die gleichzeitig durchgeführt wer<strong>de</strong>n müssen. Auf <strong>de</strong>r einen Seite wer<strong>de</strong>n<br />

die erstellten Testfälle zur Überprüfung <strong>de</strong>s betroffenen Testobjekts angewen<strong>de</strong>t, während<br />

gleichzeitig eine Aufzeichnung <strong>de</strong>r Ausgabedaten <strong>de</strong>s Testobjektes erfolgt. Diese wer<strong>de</strong>n<br />

für die spätere Testauswertung benötigt. Zum Zeitpunkt <strong>de</strong>s i–ten Testschrittes wird das<br />

Testobjekt <strong>mit</strong>hilfe <strong>de</strong>s i-ten Eingabevektors <strong>de</strong>s verwen<strong>de</strong>ten Testmusters stimuliert.<br />

Gleichzeitig erfolgt die Aufzeichnung <strong>de</strong>s i-ten Ausgabevektors. Zusätzlich kann das<br />

Monitoring auch die Aufzeichnung <strong>von</strong> Ab<strong>de</strong>ckungsmaßen beinhalten, auf die in Abschnitt<br />

3.3 näher eingegangen wird.<br />

Testdurchführung Monitoring Testauswertung<br />

Testfall<br />

Testziel<br />

Referenzdaten<br />

+<br />

-<br />

Vergleich<br />

Testresultat<br />

Testmuster<br />

Eingabedaten<br />

Testobjekt<br />

Ausgabedaten<br />

Abbildung 3-5: Testdurchführung, Monitoring und Testauswertung<br />

18


3. Mo<strong>de</strong>llbasiertes Testen<br />

Testauswertung. Der Vergleich <strong>von</strong> Ist- und Sollverhalten <strong>de</strong>s Systems ist die eigentliche<br />

Phase, in <strong>de</strong>r Fehler im System festgestellt wer<strong>de</strong>n können. Hierzu wird für je<strong>de</strong>n <strong>de</strong>r<br />

während <strong>de</strong>r vorherigen Phase am Testobjekt gemessenen Ausgabevektoren ein Vergleich<br />

<strong>de</strong>s Ausgabevektors <strong>mit</strong> <strong>de</strong>m zugehörigen Referenzvektor durchgeführt. Zu diesem Zweck<br />

wird <strong>de</strong>r Abweichungsvektor Δ s als <strong>de</strong>r Differenz <strong>von</strong> Ausgabe- und Referenzvektor <strong>de</strong>s<br />

Testschrittes s gebil<strong>de</strong>t. Unter Berücksichtigung <strong>de</strong>s zuvor <strong>de</strong>finierten Toleranzvektors τ<br />

wird entschie<strong>de</strong>n, ob <strong>de</strong>r durchgeführte Testschritt korrekt o<strong>de</strong>r fehlerhaft erfolgte.<br />

Δ<br />

s<br />

=<br />

⎛ Δ1,<br />

⎜<br />

⎜ ...<br />

⎜<br />

⎝Δ<br />

,<br />

s<br />

m s<br />

⎞<br />

⎟<br />

⎟ =<br />

⎟<br />

⎠<br />

⎛ a1,<br />

⎜<br />

⎜ ...<br />

⎜<br />

⎝am,<br />

s<br />

s<br />

⎞ ⎛ r1,<br />

s<br />

⎞<br />

⎟ ⎜ ⎟<br />

⎟ − ⎜ ... ⎟<br />

⎟ ⎜ ⎟<br />

⎠ ⎝rm<br />

, s ⎠<br />

Δ<br />

s<br />

⎛ Δ1,<br />

s<br />

⎞ ⎛ τ1<br />

⎞<br />

? ⎜ ⎟ ? ⎜ ⎟<br />

< τ ⇔ ⎜ ... ⎟ < ⎜ ... ⎟ <strong>mit</strong> τ i ≥ 0<br />

⎜ ⎟ ⎜ ⎟<br />

⎝Δm,<br />

s ⎠ ⎝τ<br />

m ⎠<br />

Das Ergebnis <strong>de</strong>r Testauswertung ist das Testresultat, welches eine Bewertung <strong>de</strong>s Tests<br />

aufgrund dieser Vergleiche beinhaltet.<br />

Testdokumentation. Durch eine umfangreiche Dokumentation <strong>de</strong>r durchgeführten Tests<br />

wer<strong>de</strong>n zum einen die Nachvollziehbarkeit <strong>von</strong> Tests und <strong>de</strong>ren Resultaten und zum<br />

an<strong>de</strong>ren auch die Akzeptanz <strong>de</strong>s getesteten Produktes unterstützt. Anhand einer Beschreibung,<br />

welche Eigenschaften <strong>de</strong>s Systems erfolgreich überprüft wur<strong>de</strong>n, können Kun<strong>de</strong>n<br />

besser entschei<strong>de</strong>n, ob sie das gelieferte Produkt akzeptieren, o<strong>de</strong>r weitere Tests for<strong>de</strong>rn.<br />

Eine Gewissheit auf Fehlerfreiheit kann selbstverständlich nicht geliefert wer<strong>de</strong>n, da dies<br />

nur <strong>mit</strong>hilfe eines erschöpfen<strong>de</strong>n (vollständigen) Tests möglich ist, welcher in <strong>de</strong>r Regel<br />

aufgrund <strong>de</strong>s extrem hohen Aufwands nicht durchführbar ist.<br />

3.2 Prüfmetho<strong>de</strong>n<br />

3.2.1 Verifikation und Validierung<br />

Die Überprüfung <strong>de</strong>r Korrektheit eines Systems erfolgt in mehreren Stufen und auf unterschiedliche<br />

Arten. Die Verifikation ist die Prüfaktivität am En<strong>de</strong> je<strong>de</strong>r Entwicklungsphase,<br />

in <strong>de</strong>r das System gegen einzelne zu Beginn <strong>de</strong>r Phase aufgestellte Anfor<strong>de</strong>rungen, geprüft<br />

wird. Dagegen erfolgt durch die Validierung eine Untersuchung <strong>de</strong>s Systems gegen die<br />

Benutzeranfor<strong>de</strong>rungen. Thaller formuliert dies genauer:<br />

„Bei <strong>de</strong>r Verifikation wird überprüft, ob das Produkt richtig ist. Bei Validation prüfen wir<br />

dagegen, ob wir das richtige Produkt erstellt haben.“ [Tha00, S.19].<br />

Verifikation und Validierung dienen so<strong>mit</strong> jeweils <strong>de</strong>r Überprüfung <strong>de</strong>r Richtigkeit <strong>de</strong>s<br />

untersuchten Systems.<br />

19


3.2. Prüfmetho<strong>de</strong>n<br />

Die genannte Definition <strong>de</strong>s Begriffs Verifikation ist nicht zu verwechseln <strong>mit</strong> <strong>de</strong>r formalen<br />

Verifikation, welche eine spezielle Form <strong>de</strong>r Verifikation ist, die <strong>mit</strong> formalen, meist<br />

mathematischen Mitteln erfolgt. Mit dieser beschäftigt sich Abschnitt 3.2.2.<br />

Prüfverfahren<br />

statisch<br />

verifizierend<br />

formale Verifikation<br />

…<br />

analysierend<br />

dynamisch<br />

strukturorientiert<br />

Inspektionen und Reviews<br />

…<br />

kontrollflussorientiert<br />

Anweisungsüber<strong>de</strong>ckungstest<br />

Zweigüber<strong>de</strong>ckungstest<br />

Bedingungsüber<strong>de</strong>ckungstest<br />

Einfacher Bedingungsüber<strong>de</strong>ckungstest<br />

Mehrfach-Bedingungsüber<strong>de</strong>ckungstest<br />

Minimaler Mehrfach-Bedingungsüber<strong>de</strong>ckungstest<br />

Modifizierter Mehrfach-Bedingungsüber<strong>de</strong>ckungstest<br />

…<br />

Pfadüber<strong>de</strong>ckungstest<br />

…<br />

datenflussorientert<br />

funktionsorientiert<br />

…<br />

Funktionale Äquivalenzklassenbildung<br />

…<br />

diversifizierend<br />

…<br />

Back-to-Back-Test<br />

…<br />

Abbildung 3-6: Klassifikationsschema nach Liggesmeyer [Lig02, S. 34]<br />

Die für diese Arbeit wichtigen Prüfmetho<strong>de</strong>n wer<strong>de</strong>n in das Klassifikationsschema <strong>von</strong><br />

Softwareprüfverfahren nach Liggesmeyer eingeordnet, welches in Abbildung 3-6 in<br />

Auszügen dargestellt ist. Zur näheren Erläuterung erfolgt in <strong>de</strong>n folgen<strong>de</strong>n Abschnitten<br />

eine Klassifikation <strong>de</strong>r Verfahren, die zur Überprüfung <strong>von</strong> Soft- und Hardware verwen<strong>de</strong>t<br />

wer<strong>de</strong>n. Die zur Validierung und Verifikation verwen<strong>de</strong>ten Techniken und Verfahren<br />

wer<strong>de</strong>n in statische und dynamische Testverfahren eingeordnet. Diese bil<strong>de</strong>n die Hauptklassen<br />

<strong>de</strong>r Prüftechniken, die in weitere Unterklassen aufgeteilt und <strong>de</strong>ren Eigenschaften<br />

herausgestellt wer<strong>de</strong>n.<br />

20


3. Mo<strong>de</strong>llbasiertes Testen<br />

3.2.2 Statische Prüfverfahren<br />

Die statischen Verfahren wer<strong>de</strong>n in analysieren<strong>de</strong> und verifizieren<strong>de</strong> Metho<strong>de</strong>n unterteilt.<br />

Inspektionen und Reviews gehören zur Klasse <strong>de</strong>r analysi5eren<strong>de</strong>n Techniken und haben<br />

<strong>de</strong>n Charakter, dass zu ihrer Durchführung keine Testfälle erzeugt wer<strong>de</strong>n müssen und<br />

so<strong>mit</strong> keine Ausführung <strong>de</strong>s Systems erfor<strong>de</strong>rlich ist. Die hierbei verwen<strong>de</strong>ten Analysetechniken<br />

können allerdings keine vollständigen Aussagen über die Korrektheit eines<br />

Systems treffen.<br />

Dem gegenüber stehen die verifizieren<strong>de</strong>n Verfahren, welche <strong>de</strong>rartige Korrektheitsaussagen<br />

ermöglichen. Zu ihnen zählt die formale Verifikation. Sie besteht aus einem<br />

formalen Beweis, <strong>de</strong>r die Konsistenz zwischen einer Spezifikation und einem<br />

Entwicklungsstand <strong>de</strong>s Systems <strong>mit</strong> mathematischen Mitteln zeigt. Voraussetzung zur<br />

Durchführung einer formalen Verifikation ist das Vorhan<strong>de</strong>nsein einer entsprechend<br />

formalen Spezifikation. Diese besteht nach Balzert [Bal98] aus einer Menge <strong>von</strong> Vor- und<br />

Nachbedingungen. Der Korrektheitsbeweis einer Implementierung erfolgt, in<strong>de</strong>m Vorbedingungen<br />

unter Verwendung <strong>von</strong> Verifikationsregeln in Nachbedingungen transformiert<br />

wer<strong>de</strong>n. Die Verifikationsregeln sind hierbei formale Beschreibungen <strong>von</strong> Programmkonstrukten<br />

und <strong>de</strong>ren Effekt auf einen Systemzustand.<br />

3.2.3 Dynamische Prüfverfahren<br />

Die größere und in dieser Arbeit zentral betrachtete Verfahrensklasse bil<strong>de</strong>n die dynamischen<br />

Prüfverfahren (vgl. Abbildung 3-6). Zu ihnen zählen strukturorientierte und<br />

funktionsorientierte Metho<strong>de</strong>n. Ihre zentrale Eigenschaft besteht in <strong>de</strong>r Ausführung <strong>de</strong>s<br />

Systems. Dazu wird dieses <strong>mit</strong> konkreten Eingabewerten versehen und ausgeführt. Dies<br />

impliziert, dass auf diese Weise eine vollständige Überprüfung <strong>de</strong>s Systems nicht möglich<br />

ist, da diese während <strong>de</strong>r Testdurchführung eine Ausführung <strong>de</strong>s Systems <strong>mit</strong> allen Werten<br />

<strong>de</strong>r Wertebereiche <strong>de</strong>r Eingabeschnittstellen und aller Kombinationen <strong>von</strong> Eingabewerten<br />

an <strong>de</strong>n verschie<strong>de</strong>nen Schnittstellen for<strong>de</strong>rt. Aufgrund <strong>de</strong>r schon bei relativ kleinen<br />

Systemen hohen Anzahl zu erzeugen<strong>de</strong>r Tests ist dies extrem aufwendig und meistens<br />

nicht realisierbar.<br />

Die strukturorientierten Testverfahren zielen auf die Struktur <strong>de</strong>s Testobjektes ab. Der<br />

Strukturtest basiert auf <strong>de</strong>r Auswertung <strong>de</strong>s internen Aufbaus, <strong>de</strong>r Struktur <strong>de</strong>s Testobjektes.<br />

Daher stammt auch die verbreitete Bezeichnung White-Box-Test. Dieser betrachtet das<br />

System als „durchsichtige Box“, aus <strong>de</strong>ren Innern für <strong>de</strong>n Test relevante Informationen<br />

während <strong>de</strong>r Testfallerstellung entnommen wer<strong>de</strong>n können. Das Ziel ist hierbei <strong>de</strong>r<br />

möglichst vollständige Test durch Ausführung bestimmter Strukturelemente während <strong>de</strong>r<br />

Tests.<br />

Eingabedaten<br />

…<br />

&<br />

&<br />

…<br />

Ausgabedaten<br />

Abbildung 3-7: Strukturtestverfahren (White-Box-Test)<br />

21


3.2. Prüfmetho<strong>de</strong>n<br />

Die Erstellung <strong>von</strong> Strukturtests erfor<strong>de</strong>rt ein Mittel zum Messen <strong>de</strong>r Vollständigkeit <strong>von</strong><br />

Tests bezogen auf ausgewählte Strukturmerkmale. Nähere Informationen zu diesem Thema<br />

liefert Kapitel 3.3, in welchem unterschiedliche Strukturmerkmale vorgestellt wer<strong>de</strong>n, die<br />

in dieser Arbeit Verwendung fin<strong>de</strong>n. Der vornehmliche Nachteil <strong>de</strong>r strukturorientierten<br />

Testverfahren besteht darin, dass sie nicht in <strong>de</strong>r Lage sind, fehlerhaft o<strong>de</strong>r unvollständig<br />

implementierte Funktionen zu erkennen. Sollten bei <strong>de</strong>r Implementierung die Anfor<strong>de</strong>rungen<br />

falsch interpretiert wor<strong>de</strong>n sein, können fehlerhaft implementierte Komponenten in<br />

einer ansonsten in sich konsistenten und korrekten Umsetzung <strong>mit</strong>tels White-Box-Tests<br />

nicht aufge<strong>de</strong>ckt wer<strong>de</strong>n. Das Gleiche gilt für übersehene und vergessene Funktionen<br />

[Tha00].<br />

Eine Überprüfung fehlerhaft o<strong>de</strong>r unvollständig implementierter Funktionen bieten dagegen<br />

die funktionalen Testverfahren, bei <strong>de</strong>nen die Spezifikation <strong>de</strong>s Testobjektes zur<br />

Erstellung <strong>von</strong> Tests herangezogen wird. Das System wird bis auf seine Schnittstellen nach<br />

außen nicht näher berücksichtigt. Informationen über <strong>de</strong>n inneren Aufbau und die Art <strong>de</strong>r<br />

Realisierung <strong>de</strong>s Systems wer<strong>de</strong>n zur Generierung <strong>von</strong> Eingabe- und Ausgabedaten nicht<br />

verwen<strong>de</strong>t. Das System o<strong>de</strong>r Mo<strong>de</strong>ll wird so<strong>mit</strong> als „undurchsichtige schwarze Box“<br />

betrachtet. Daher leitet sich auch <strong>de</strong>r Begriff <strong>de</strong>s Black-Box-Tests ab. Das Ziel eines<br />

Funktionstests ist es, die Spezifikation <strong>de</strong>r Programmfunktionen möglichst vollständig zu<br />

testen.<br />

Eingabedaten<br />

System<br />

Ausgabedaten<br />

Abbildung 3-8: Funktionstest (Black-Box-Test)<br />

Ein wichtiger Aspekt <strong>von</strong> Funktionstests ist ihr szenarioorientierter Aufbau. Während<br />

Strukturtests häufig aus nicht im realen Einsatz vorkommen<strong>de</strong>n Abfolgen <strong>von</strong> Eingabewerten<br />

bestehen, han<strong>de</strong>lt es sich beim funktionsorientierten Test um Stimulusdaten, <strong>de</strong>ren<br />

Auftreten im Einsatz <strong>de</strong>s Systems sehr wahrscheinlich ist. Ein wichtiger Vertreter <strong>de</strong>s<br />

funktionalen Tests ist die Testfallerstellung <strong>mit</strong>hilfe <strong>de</strong>r Klassifikationsbaummetho<strong>de</strong>.<br />

Diese ist ein Verfahren zur abstrakten Beschreibung szenarioorientierter Testfälle und wird<br />

in Unterkapitel 3.4.1 näher beschrieben.<br />

3.2.4 Spezielle Testarten<br />

Der Zufallstest (engl. random testing) bezeichnet eine Technik, bei <strong>de</strong>r aus <strong>de</strong>n Wertebereichen<br />

<strong>de</strong>r Eingabedaten <strong>de</strong>s Systems zufällige Testmuster erzeugt wer<strong>de</strong>n. Die Schwäche<br />

<strong>de</strong>s Zufalltests ist, dass die erzeugten Daten in keiner Art und Weise voraussehbar sind.<br />

Diesem Nachteil steht gegenüber, dass durch Zufallstests das Testobjekt durch geringen<br />

Aufwand vergleichsweise gut geprüft wer<strong>de</strong>n kann [Lig02]. Die Regellosigkeit bei <strong>de</strong>r<br />

Erzeugung <strong>de</strong>r Testdaten ist neben <strong>de</strong>r genannten Schwäche allerdings auch ein Vorteil.<br />

Tester neigen üblicherweise dazu, Testfälle zu erzeugen, die entsprechen<strong>de</strong>n Einsatzszenarien<br />

<strong>de</strong>s Systems ähnlich sind (vgl. Funktionstest 3.2.3). Bereits in <strong>de</strong>r Entwurfsphase wird<br />

22


3. Mo<strong>de</strong>llbasiertes Testen<br />

das System <strong>von</strong> Entwicklern aber häufig genau anhand dieser Szenarien erstellt, sodass es<br />

sich in diesen Prüfsituationen wie erwartet verhält. Durch Zufallstests wer<strong>de</strong>n hingegen<br />

auch solche Testfälle erzeugt, die nicht <strong>von</strong> Testern bedacht wer<strong>de</strong>n. Dies soll allerdings<br />

nicht be<strong>de</strong>uten, dass funktionale Tests vorgesehener Einsatzszenarien unnötig sind. Der<br />

Zufallstest sollte vielmehr zusätzlich erfolgen, um realitätsnahe Tests um unwahrscheinliche<br />

– aber trotz<strong>de</strong>m mögliche – Szenarien zu ergänzen [Bal98].<br />

Die I<strong>de</strong>e <strong>de</strong>s Back-to-Back-Tests (vgl. Abbildung 3-6) besteht darin, mehrere Repräsentationen<br />

<strong>de</strong>s gleichen Systems <strong>mit</strong> i<strong>de</strong>ntischen Eingabedaten zu untersuchen. Die Übereinstimmung<br />

<strong>de</strong>r Repräsentationen wird anhand eines Vergleichs ihrer Ausgabedaten<br />

überprüft. Aus <strong>de</strong>m primären Vergleich <strong>de</strong>r Ausgabedaten stammt auch die Bezeichnung<br />

dieser Testart. Sollten die unterschiedlichen Repräsentationen dieselben Ausgabedaten<br />

liefern, wird eine funktionale Übereinstimmung angenommen.<br />

Testdaten<br />

Testbasis<br />

(Mo<strong>de</strong>ll)<br />

+_<br />

Vergleich<br />

Testobjekt<br />

(C-Co<strong>de</strong>)<br />

Abbildung 3-9: Back-to-Back-Test<br />

Dieses Testverfahren bietet sich insbeson<strong>de</strong>re im mo<strong>de</strong>llbasierten Entwicklungsprozess an.<br />

Da mehrere Repräsentationen <strong>de</strong>s Systems in Form <strong>de</strong>s Funktionsmo<strong>de</strong>lls, <strong>de</strong>s Implementierungsmo<strong>de</strong>lls<br />

und <strong>de</strong>s erzeugten Programmco<strong>de</strong>s vorliegen, ist eine Anwendung <strong>von</strong><br />

Back-to-Back-Tests in hohem Gra<strong>de</strong> geeignet, <strong>de</strong>ren Übereinstimmung zu überprüfen.<br />

Insbeson<strong>de</strong>re, wenn beispielsweise das Funktionsmo<strong>de</strong>ll in validierter Form vorliegt, also<br />

gegen die Benutzeranfor<strong>de</strong>rungen geprüft wur<strong>de</strong>, können Back-to-Back-Tests gut angewen<strong>de</strong>t<br />

wer<strong>de</strong>n, weil dadurch sichergestellt wird, dass das Testobjekt auf diese Weise<br />

indirekt auch gegen die Benutzeranfor<strong>de</strong>rungen getestet wird.<br />

Zur Erstellung <strong>von</strong> Testmustern für Back-to-Back-Tests kann sowohl auf strukturorientierte<br />

als auch auf funktionale Testverfahren zurückgegriffen wer<strong>de</strong>n. In dieser Arbeit<br />

wer<strong>de</strong>n ausschließlich strukturorientierte Verfahren zum Erzeugen <strong>von</strong> <strong>de</strong>rartigen Testmustern<br />

verwen<strong>de</strong>t.<br />

3.3 Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

Die Frage, ob durch entwickelte Testfälle gründlich genug getestet wird, lässt sich durch<br />

die Messung <strong>de</strong>r Strukturab<strong>de</strong>ckung (engl. coverage) zum Teil beantworten. Diese liefert<br />

einen Überblick darüber, für welche Bestandteile <strong>de</strong>s Testobjektes – sei es ein verfeinertes<br />

Mo<strong>de</strong>ll o<strong>de</strong>r auch Programmco<strong>de</strong> – noch keine Testfälle existieren. Hohe Ab<strong>de</strong>ckung<br />

23


3.3. Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

impliziert, dass das zu prüfen<strong>de</strong> Objekt in seiner Breite getestet wird, also nach Möglichkeit<br />

fast all seine funktionalen Komponenten während <strong>de</strong>r Testdurchführung min<strong>de</strong>stens<br />

einmal ausgeführt wer<strong>de</strong>n.<br />

In erster Linie sind kontrollflussorientierte Strategien zur Messung <strong>de</strong>r Strukturab<strong>de</strong>ckung<br />

zu nennen. Datenflussorientierte Strategien spielen in dieser Arbeit keine Rolle und wer<strong>de</strong>n<br />

daher nicht behan<strong>de</strong>lt. Die Messung <strong>de</strong>r Strukturab<strong>de</strong>ckung erfolgt anhand <strong>de</strong>s Kontrollflussgraphen,<br />

<strong>de</strong>r in Abschnitt 3.3.2 erklärt wird. In Abschnitt 3.3.3 wer<strong>de</strong>n die Begriffe<br />

Ab<strong>de</strong>ckungskriterium und Ab<strong>de</strong>ckungsgrad <strong>de</strong>finiert. Eine nähere Beschreibung <strong>de</strong>r unterschiedlichen<br />

in dieser Arbeit relevanten Ab<strong>de</strong>ckungskriterien erfolgt in <strong>de</strong>n Abschnitten<br />

3.3.4 und 3.3.5 und folgt <strong>de</strong>n Definitionen <strong>von</strong> Baresel [Bar00] und Chilenski [ChiMil94].<br />

Es wer<strong>de</strong>n folgen<strong>de</strong> Ab<strong>de</strong>ckungskriterien behan<strong>de</strong>lt:<br />

• Anweisungsab<strong>de</strong>ckung (C 0 )<br />

• Zweigab<strong>de</strong>ckung (C 1 )<br />

• Bedingungsab<strong>de</strong>ckung<br />

o Einfache (atomare) Bedingungsab<strong>de</strong>ckung (C 2 )<br />

o Mehrfach-Bedingungsab<strong>de</strong>ckung (C 3 )<br />

o Minimale Mehrfach-Bedingungsab<strong>de</strong>ckung<br />

o Modifizierte Mehrfach-Bedingungsab<strong>de</strong>ckung (MC/DC)<br />

• Pfadab<strong>de</strong>ckung (C 7 )<br />

3.3.1 Bemerkung<br />

Einleitend ist zu <strong>de</strong>m Thema Ab<strong>de</strong>ckung zu bemerken, dass die Gründlichkeit <strong>von</strong> Tests<br />

nicht nur aufgrund eines Ab<strong>de</strong>ckungskriteriums bewertet wer<strong>de</strong>n sollte. Dies ver<strong>de</strong>utlicht<br />

folgen<strong>de</strong> C-Funktion:<br />

int speed (int distance, int time) {<br />

return distance/time;<br />

}<br />

Abbildung 3-10: Programmbeispiel in C<br />

Mithilfe je eines Wertes für distance und time kann diese Funktion <strong>mit</strong> hun<strong>de</strong>rtprozentiger<br />

Ab<strong>de</strong>ckung getestet wer<strong>de</strong>n, wenn die Ausführung aller Anweisungen als<br />

Ab<strong>de</strong>ckungsmaß herangezogen wird. Dabei han<strong>de</strong>lt es sich allerdings nur um eine <strong>von</strong> sehr<br />

vielen Möglichkeiten – bei 16-Bit Integer 2 16 Möglichkeiten – bei <strong>de</strong>r Wahl <strong>de</strong>s Wertes<br />

<strong>von</strong> time. In nur einem Fall kann ein Fehlverhalten <strong>de</strong>r Funktion aufge<strong>de</strong>ckt wer<strong>de</strong>n,<br />

wenn time <strong>de</strong>n Wert Null annimmt und die Division durch null zu einem Laufzeitfehler<br />

führt. Die Messung <strong>de</strong>r Ab<strong>de</strong>ckung allein kann folglich keine Aussage über die Qualität<br />

<strong>von</strong> Testfällen treffen. Dem gegenüber steht <strong>de</strong>r Fall, wenn keine hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung<br />

durch eine Menge <strong>von</strong> Testmustern erreicht wird. Dies ist ein Indiz dafür, dass<br />

weitere Testmuster erstellt wer<strong>de</strong>n sollten, um die bisherigen Testfälle zu vervollständigen.<br />

24


3. Mo<strong>de</strong>llbasiertes Testen<br />

Die gewählten Ab<strong>de</strong>ckungskriterien hängen dabei stark vom vorliegen<strong>de</strong>n Testobjekt ab.<br />

Je nach Phase im Entwicklungsprozess kann es sich um ein Mo<strong>de</strong>ll o<strong>de</strong>r auch um<br />

Programmco<strong>de</strong> han<strong>de</strong>ln. Daher unterschei<strong>de</strong>t man in erster Linie Mo<strong>de</strong>llab<strong>de</strong>ckung und<br />

Co<strong>de</strong>ab<strong>de</strong>ckung.<br />

3.3.2 Kontrollflussgraph<br />

Ein Kontrollflussgraph ist eine Repräsentation eines Systems in Form eines gerichteten<br />

Graphen G = (N, E, n start , n final ). Dieser besteht aus <strong>de</strong>r Menge <strong>de</strong>r Knoten N, einer zweistelligen<br />

Relation E zwischen <strong>de</strong>n Knoten, einem Startknoten n start und einem Endknoten<br />

n final [Lig02].<br />

Je<strong>de</strong>r Knoten aus <strong>de</strong>r Menge <strong>de</strong>r Knoten N <strong>de</strong>s Kontrollflussgraphen entspricht – je nach<br />

Testobjekt – einer nichtleeren Menge <strong>von</strong> Anweisungen <strong>de</strong>s Programmco<strong>de</strong>s o<strong>de</strong>r Grundblöcken<br />

eines Mo<strong>de</strong>lls. Innerhalb eines Knotens dürfen dabei keine Anweisungen o<strong>de</strong>r<br />

Grundblöcke <strong>mit</strong> Verzweigungen auftreten. Diese bil<strong>de</strong>n lediglich als letzte Anweisung<br />

bzw. als letzter Block die Abtrennung zum Folgeknoten.<br />

Die Relation E = { (n i , n j ) : n i , n j ∈ N, i ≠ j } beschreibt die Menge <strong>de</strong>r Verbindungen<br />

zwischen <strong>de</strong>n Knoten <strong>de</strong>s Kontrollflussgraphen. Diese wer<strong>de</strong>n als Zweige <strong>de</strong>s Kontrollflussgraphen<br />

bezeichnet. Je<strong>de</strong>r Zweig (n i , n j ) ist eine gerichtete Kante, die vom Knoten n i<br />

zum Knoten n j führt. Sie entspricht einem Kontrollfluss- o<strong>de</strong>r Steuerungsübergang <strong>de</strong>r<br />

letzten Anweisung <strong>de</strong>s Knotens n i zur ersten Anweisung <strong>de</strong>s Folgeknotens n j .<br />

Als Verzweigungspunkte wer<strong>de</strong>n Knoten bezeichnet, <strong>von</strong> <strong>de</strong>nen mehrere Zweige abgehen.<br />

Diese beschreiben bedingte Übergänge, die beispielsweise an Schleifenanweisungen,<br />

bedingten Einzelanweisungen o<strong>de</strong>r Verzweigungsanweisungen auftreten. Während <strong>de</strong>r<br />

Ausführung <strong>von</strong> Software bzw. eines Mo<strong>de</strong>lls wird <strong>de</strong>r Kontrollfluss an Verzweigungspunkten<br />

in einen <strong>de</strong>r zur Auswahl stehen<strong>de</strong>n Zweige gelenkt. Hierzu erfolgt eine Auswertung<br />

<strong>von</strong> Übergangsbedingungen, die zur Entscheidung für eine <strong>de</strong>r Möglichkeiten dienen.<br />

Ein einfaches Beispiel eines Kontrollflussgraphen ist anhand einer C-Funktion zur Berechnung<br />

<strong>de</strong>s Maximums <strong>von</strong> drei Werten in Abbildung 3-11 gegeben.<br />

25


3.3. Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

int maximum (int a, int b, int c)<br />

{<br />

int max;<br />

if (b > c)<br />

{<br />

if (b > a)<br />

max = b;<br />

else<br />

max = a;<br />

}<br />

else<br />

{<br />

if (c > a)<br />

max = c;<br />

else<br />

max = a;<br />

}<br />

return max;<br />

}<br />

wahr<br />

4<br />

maximum ( 10, 20, 30)<br />

wahr<br />

3<br />

5<br />

1<br />

2<br />

falsch<br />

(20 > 30)<br />

falsch<br />

(30 > 10)<br />

wahr<br />

6<br />

falsch<br />

7<br />

8<br />

9<br />

Abbildung 3-11: C-Funktion maximum <strong>mit</strong> zugehörigem Kontrollflussgraphen (rechts)<br />

3.3.3 Ab<strong>de</strong>ckungskriterium und Ab<strong>de</strong>ckungsgrad<br />

Ab<strong>de</strong>ckungskriterium. Unter einem Ab<strong>de</strong>ckungskriterium wer<strong>de</strong>n Strukturmerkmale<br />

eines Testobjektes verstan<strong>de</strong>n, <strong>de</strong>ren Ausführung während <strong>de</strong>r Testdurchführung gefor<strong>de</strong>rt<br />

wird. Bei strukturorientierten Testverfahren wer<strong>de</strong>n ein o<strong>de</strong>r mehrere Ab<strong>de</strong>ckungskriterien<br />

als Testziele gewählt.<br />

Ab<strong>de</strong>ckungsgrad. Der Ab<strong>de</strong>ckungsgrad cov criteria ist das Maß für die Vollständigkeit eines<br />

strukturorientierten Testmusters in Bezug auf das Ab<strong>de</strong>ckungskriterium criteria. Zu seiner<br />

Berechnung wird die Anzahl durch Anwendung <strong>de</strong>s Testmusters ausgeführter und durch<br />

das Ab<strong>de</strong>ckungskriterium gefor<strong>de</strong>rter Strukturkomponenten in Verhältnis zur Anzahl aller<br />

betroffenen Strukturkomponenten gesetzt:<br />

cov criteria =<br />

_______________________________<br />

ausgeführte betroffene Komponenten<br />

alle betroffenen Komponenten<br />

Testfallab<strong>de</strong>ckungsgrad. Der Ab<strong>de</strong>ckungsgrad eines vollständigen Testfalls berücksichtigt<br />

die Ab<strong>de</strong>ckungsgra<strong>de</strong> seiner Testmuster. Da die Testmuster eines Testfalls bezüglich<br />

eines Ab<strong>de</strong>ckungskriteriums in <strong>de</strong>r Regel nicht disjunkt sind, lässt sich <strong>de</strong>r Testfallab<strong>de</strong>ckungsgrad<br />

nicht als Summe <strong>de</strong>r Ab<strong>de</strong>ckungsgra<strong>de</strong> aller Testmuster berechnen. Er<br />

errechnet sich aus <strong>de</strong>m Verhältnis <strong>de</strong>r Strukturkomponenten, die durch min<strong>de</strong>stens ein<br />

26


3. Mo<strong>de</strong>llbasiertes Testen<br />

Testmuster <strong>de</strong>s Testfalls ausgeführt wer<strong>de</strong>n, zu allen durch das Kriterium betroffenen<br />

Strukturkomponenten.<br />

min<strong>de</strong>stens in einem Testmuster ausgeführte betroffene Komponenten<br />

cov __________________________________________________________<br />

criteria =<br />

alle betroffenen Komponenten<br />

Anstelle <strong>de</strong>r Bezeichnung Ab<strong>de</strong>ckung (vgl. Pretschner [Pre03]) wird in <strong>de</strong>r Literatur häufig<br />

<strong>von</strong> Über<strong>de</strong>ckung gesprochen (vgl. Baresel [Bar00]). Dementsprechend wer<strong>de</strong>n die Synonyme<br />

Über<strong>de</strong>ckungskriterium, Über<strong>de</strong>ckungsgrad und Testfallüber<strong>de</strong>ckungsgrad für die<br />

soeben eingeführten Definitionen verwen<strong>de</strong>t.<br />

3.3.4 Co<strong>de</strong>ab<strong>de</strong>ckung<br />

Wenn das Testobjekt <strong>de</strong>r Programmco<strong>de</strong> eines Systems ist, wird die Co<strong>de</strong>ab<strong>de</strong>ckung<br />

betrachtet. Als Ab<strong>de</strong>ckungskriterien wer<strong>de</strong>n Strukturelemente herangezogen, wie z. B. die<br />

Anweisungen, Zweige und Bedingungen <strong>de</strong>r zu untersuchen<strong>de</strong>n Software. Die einzelnen<br />

Kriterien wer<strong>de</strong>n im Folgen<strong>de</strong>n unter Angabe <strong>de</strong>s Ab<strong>de</strong>ckungsgra<strong>de</strong>s beschrieben.<br />

3.3.4.1 Anweisungsab<strong>de</strong>ckung<br />

Das Kriterium <strong>de</strong>r Anweisungsab<strong>de</strong>ckung (engl. statement coverage) untersucht die ausgeführten<br />

Anweisungen <strong>de</strong>r zu testen<strong>de</strong>n Software. In <strong>de</strong>r Literatur ist dieses Ab<strong>de</strong>ckungskriterium<br />

häufig unter <strong>de</strong>m Begriff C 0 -Ab<strong>de</strong>ckung zu fin<strong>de</strong>n [Tha00]. Das Ziel ist es, eine<br />

Menge <strong>von</strong> Testmustern zu fin<strong>de</strong>n, die zur vollständigen Ausführung <strong>de</strong>r Programmanweisungen<br />

führt. Der erreichte Ab<strong>de</strong>ckungsgrad cov statements ist das Verhältnis <strong>de</strong>r Anzahl<br />

während <strong>de</strong>r Tests ausgeführten Anweisungen zu <strong>de</strong>r Anzahl aller Anweisungen <strong>de</strong>s<br />

Programms:<br />

ausgeführte Anweisungen<br />

cov<br />

______________________<br />

statements =<br />

alle Anweisungen<br />

Ein Test <strong>de</strong>s in Abbildung 3-11 vorgestellten Programms <strong>mit</strong> <strong>de</strong>m Eingabevektor<br />

⎛10<br />

⎞<br />

⎜ ⎟<br />

5<br />

e = ⎜20⎟<br />

, <strong>de</strong>r <strong>de</strong>n Testdaten a = 10, b = 20, c = 30 entspricht, hat covstatements = als<br />

⎜ ⎟<br />

9<br />

⎝30⎠<br />

Ab<strong>de</strong>ckungsgrad, da die Anweisungen 1, 2, 6, 7, 9 ausgeführt wer<strong>de</strong>n und die Funktion<br />

maximum insgesamt aus neun Anweisungen besteht.<br />

3.3.4.2 Zweigab<strong>de</strong>ckung<br />

Die Zweigab<strong>de</strong>ckung (engl. branch coverage) for<strong>de</strong>rt, dass je<strong>de</strong>r Zweig <strong>de</strong>s Testobjektes<br />

einmal durchlaufen wird. Sie wird häufig als C 1 -Ab<strong>de</strong>ckung bezeichnet [Tha00]. Ein<br />

Zweig wird hierbei durch eine Kante im Kontrollflussgraphen i<strong>de</strong>ntifiziert. Dieser wird im<br />

Folgen<strong>de</strong>n als Tupel k = (s, t) dargestellt, wobei s und t die Nummern <strong>de</strong>r Knoten sind,<br />

zwischen <strong>de</strong>nen eine Kante k liegt. Es wer<strong>de</strong>n Testdaten gesucht, die bei Durchführung <strong>de</strong>s<br />

Programms eine Menge <strong>von</strong> Pfa<strong>de</strong>n erzeugen, in <strong>de</strong>nen alle Kanten <strong>de</strong>s Kontrollfluss-<br />

27


3.3. Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

graphen min<strong>de</strong>stens einmal enthalten sind. Der Ab<strong>de</strong>ckungsgrad cov branches errechnet sich<br />

als Verhältnis <strong>de</strong>r Anzahl abge<strong>de</strong>ckter Kanten zur Anzahl aller Kanten <strong>de</strong>s Kontrollflussgraphen.<br />

ausgeführte Verzweigungen<br />

cov ________________________<br />

branches =<br />

alle Verzweigungen<br />

⎛10<br />

⎞<br />

⎜ ⎟<br />

Der Eingabevektor e = ⎜20⎟<br />

führt im Beispiel <strong>von</strong> Abbildung 3-11 zur Ab<strong>de</strong>ckung <strong>de</strong>r<br />

⎜ ⎟<br />

⎝30⎠<br />

Zweige (1, 2), (2, 6), (6, 7) und (7, 9). Die übrigen Kanten (2, 3), (3, 4), (3, 5), (4, 9),<br />

(5, 9), (6, 8) und (8, 9) wur<strong>de</strong>n nicht ausgeführt. Der Ab<strong>de</strong>ckungsgrad beträgt <strong>de</strong>mnach<br />

cov branches = 11<br />

4 .<br />

3.3.4.3 Bedingungsab<strong>de</strong>ckung<br />

Durch das Kriterium <strong>de</strong>r Bedingungsab<strong>de</strong>ckung wird die Vollständigkeit <strong>de</strong>r Tests in<br />

Bezug auf die Verzweigungs- und Wie<strong>de</strong>rholungsbedingungen <strong>de</strong>s Testobjektes untersucht.<br />

Dieses Kriterium liegt unter an<strong>de</strong>rem in vier verbreiteten Ausprägungen vor:<br />

a) einfache (atomare) Bedingungsab<strong>de</strong>ckung,<br />

b) Mehrfach-Bedingungsab<strong>de</strong>ckung,<br />

c) minimale Mehrfach-Bedingungsab<strong>de</strong>ckung und<br />

d) modifizierte Mehrfach-Bedingungsab<strong>de</strong>ckung.<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

int maximum (int a, int b, int c)<br />

{<br />

int max;<br />

if (a > b && a > c)<br />

max = a;<br />

else<br />

{<br />

if (b > a && b > c)<br />

max = b;<br />

else<br />

max = c;<br />

}<br />

return max;<br />

}<br />

3<br />

1<br />

2<br />

5<br />

7<br />

4<br />

6<br />

Abbildung 3-12: Modifizierte C-Funktion maximum <strong>mit</strong> Kontrollflussgraphen<br />

28


3. Mo<strong>de</strong>llbasiertes Testen<br />

Die Bedingungen an Verzweigungs- und Wie<strong>de</strong>rholungsanweisungen bestehen häufig aus<br />

mehreren Einzelbedingungen. Einzelbedingungen, welche nicht aus mehreren Teilbedingungen<br />

zusammengesetzt sind, wer<strong>de</strong>n als elementare o<strong>de</strong>r atomare Bedingungen<br />

bezeichnet. Diese atomaren Bedingungen wer<strong>de</strong>n <strong>mit</strong>hilfe relationaler Terme, also unter<br />

Verwendung <strong>von</strong> Vergleichsoperationen, beschrieben. Durch logische Verknüpfung bil<strong>de</strong>n<br />

sie <strong>de</strong>n Gesamtausdruck einer Verzweigungs- o<strong>de</strong>r Wie<strong>de</strong>rholungsbedingung. Zur Erläuterung<br />

<strong>de</strong>r verschie<strong>de</strong>nen Kriterien zur Bedingungsab<strong>de</strong>ckung wur<strong>de</strong> die Funktion zur<br />

Maximumberechnung in Abbildung 3-12 modifiziert.<br />

a) Die atomare Bedingungsab<strong>de</strong>ckung ist das einfachste <strong>de</strong>r vier genannten Bedingungsab<strong>de</strong>ckungskriterien<br />

und ist in <strong>de</strong>r Literatur unter <strong>de</strong>r Bezeichnung C 2 -Ab<strong>de</strong>ckung zu<br />

fin<strong>de</strong>n [Tha00]. Sie for<strong>de</strong>rt, dass sich in <strong>de</strong>n Testdaten für je<strong>de</strong> atomare Bedingung je<strong>de</strong>r<br />

Verzweigung min<strong>de</strong>stens ein Eingabevektor befin<strong>de</strong>t, <strong>mit</strong> welchem die atomare Bedingung<br />

als wahr (engl. true) bewertet wird; zusätzlich wird min<strong>de</strong>stens ein Eingabevektor gefor<strong>de</strong>rt,<br />

<strong>mit</strong> <strong>de</strong>m sie als falsch (engl. false) ausgewertet wird. Das Kriterium stellt keine<br />

Anfor<strong>de</strong>rungen an die Ab<strong>de</strong>ckung <strong>von</strong> Kombinationen <strong>de</strong>r Bewertungen vorkommen<strong>de</strong>r<br />

atomarer Bedingungen. Der Ab<strong>de</strong>ckungsgrad <strong>de</strong>r C 2 -Ab<strong>de</strong>ckung ist das Verhältnis <strong>de</strong>r<br />

Anzahl atomarer Bedingungen, die jeweils einmal als wahr und falsch ausgewertet<br />

wur<strong>de</strong>n, zur Anzahl aller atomaren Bedingungen <strong>de</strong>s Testobjektes:<br />

__________________________________________________<br />

Jeweils <strong>mit</strong> wahr und falsch bewertete atomare Bedingungen<br />

cov C2 =<br />

alle atomaren Bedingungen<br />

Abbildung 3-12 zeigt die modifizierte Funktion maximum, welche die Verzweigungsbedingungen<br />

(a > b && a > c) und (b > a && b > c) beinhaltet. In ihnen sind die<br />

atomaren Bedingungen (a > b), (a > c), (b > a) und (b > c) enthalten, <strong>de</strong>ren Einfluss<br />

auf die Bewertung <strong>de</strong>r zwei zusammengesetzten Bedingungen in <strong>de</strong>n folgen<strong>de</strong>n<br />

Tabellen ver<strong>de</strong>utlicht wird.<br />

a > b a > c a > b && a > c<br />

*1 falsch falsch falsch<br />

*2 falsch wahr falsch<br />

wahr falsch falsch<br />

wahr wahr wahr<br />

Tabelle 3-1: Wahrheitswertekombinationen für (a > b && a > c)<br />

b > a b > c b > a && b > c<br />

falsch falsch falsch<br />

falsch wahr falsch<br />

*1 wahr falsch falsch<br />

*2 wahr wahr wahr<br />

Tabelle 3-2: Wahrheitswertekombinationen für (b > a && b > c)<br />

29


3.3. Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

⎛10⎞<br />

⎜ ⎟<br />

Der Eingabevektor e 1<br />

= ⎜20⎟<br />

<strong>de</strong>ckt <strong>von</strong> je<strong>de</strong>r atomaren Bedingung jeweils nur eine<br />

⎜ ⎟<br />

⎝30⎠<br />

Bewertungsmöglichkeit ab; die atomaren Bedingungen (a > b), (a > c) und<br />

(b > c) wer<strong>de</strong>n <strong>mit</strong> falsch bewertet, während (b > a) <strong>mit</strong> wahr bewertet wird. Dieser<br />

Fall und seine Bewertung <strong>de</strong>r Verzweigungsbedingungen sind in obigen Tabellen <strong>mit</strong> *1<br />

gekennzeichnet. Die atomare Bedingungsab<strong>de</strong>ckung erfor<strong>de</strong>rt, dass das Testobjekt <strong>mit</strong><br />

mehr als einem Eingabevektor ausgeführt wird. Die zusätzliche in <strong>de</strong>n Tabellen <strong>mit</strong> *2<br />

⎛20⎞<br />

⎜ ⎟<br />

gekennzeichnete Ausführung <strong>mit</strong> e 2<br />

= ⎜30⎟<br />

bewertet die Teilbedingungen (a > c),<br />

⎜ ⎟<br />

⎝10<br />

⎠<br />

(b > a) und (b > c) <strong>mit</strong> wahr und (a > b) <strong>mit</strong> falsch. Die Hintereinan<strong>de</strong>rausführung<br />

<strong>de</strong>s Programms <strong>mit</strong> e1 und e 2 führt <strong>de</strong>mnach zu einem atomaren Ab<strong>de</strong>ckungsgrad <strong>von</strong><br />

cov C2 = 2<br />

1 . Zwei <strong>de</strong>r vier atomaren Bedingungen <strong>de</strong>r Funktion wur<strong>de</strong>n <strong>mit</strong> bei<strong>de</strong>n<br />

Bewertungsmöglichkeiten ausgeführt, während in bei<strong>de</strong>n Fällen (a > b) <strong>mit</strong> falsch und<br />

(b > a) <strong>mit</strong> wahr bewertet wur<strong>de</strong>n.<br />

b) Die Mehrfach-Bedingungsab<strong>de</strong>ckung stellt stärkere Anfor<strong>de</strong>rungen an die Testdaten.<br />

Sie for<strong>de</strong>rt, dass die Verwendung <strong>de</strong>r Testdaten zur Ausführung sämtlicher Kombinationen<br />

<strong>de</strong>r Wahrheitswerte aller atomaren Bedingungen je<strong>de</strong>r Verzweigungsbedingung führt, und<br />

wird als C 3 -Ab<strong>de</strong>ckung bezeichnet. Die Auswertung sämtlicher Kombinationen <strong>von</strong><br />

Teilbedingungen führt zur Auswertung sämtlicher Wahrheitswerte aller komplexen Bedingungen.<br />

Dadurch ist die Zweigab<strong>de</strong>ckung C 1 in <strong>de</strong>r C 3 -Ab<strong>de</strong>ckung <strong>mit</strong> eingeschlossen,<br />

d. h. vollständige C 3 -Ab<strong>de</strong>ckung führt zu hun<strong>de</strong>rt Prozent C 1 -Ab<strong>de</strong>ckung. Der Ab<strong>de</strong>ckungsgrad<br />

errechnet sich als Division <strong>de</strong>r Anzahl <strong>de</strong>r Verzweigungsbedingungen, <strong>de</strong>ren<br />

Teilbedingungen in sämtlichen Kombinationen getestet wur<strong>de</strong>n, durch die Anzahl aller<br />

Verzweigungsbedingungen:<br />

cov C3 =<br />

___________________________________________________<br />

Mit allen Kombinationen bewertete Verzweigungsbedingungen<br />

Alle Verzweigungsbedingungen<br />

In diesem Fall muss das Testobjekt in <strong>de</strong>r Regel <strong>mit</strong> min<strong>de</strong>stens vier Eingabevektoren<br />

ausgeführt wer<strong>de</strong>n, um die vier möglichen Kombinationen zu testen, die an Verzweigungsbedingungen<br />

<strong>mit</strong> zwei Teilbedingungen möglich sind. Bezogen auf das Beispiel aus<br />

⎛30⎞<br />

⎛20⎞<br />

⎛20⎞<br />

⎜ ⎟ ⎜ ⎟ ⎜ ⎟<br />

Abbildung 3-12 <strong>de</strong>cken die Eingabevektoren e 1<br />

= ⎜20⎟<br />

, e 2<br />

= ⎜10⎟<br />

, e 3<br />

= ⎜30⎟<br />

und<br />

⎜ ⎟<br />

⎝10<br />

⎜ ⎟<br />

⎠ ⎝30<br />

⎜ ⎟<br />

⎠ ⎝10⎠<br />

⎛10⎞<br />

⎜ ⎟<br />

e 4<br />

= ⎜10⎟<br />

sämtliche Kombinationen <strong>de</strong>r Verzweigungsbedingung (a > b && a > c) ab.<br />

⎜ ⎟<br />

⎝10⎠<br />

Die <strong>von</strong> dieser Verzweigungsbedingung abhängige Bedingung (b > a && b > c) wird<br />

30


3. Mo<strong>de</strong>llbasiertes Testen<br />

jedoch nur in drei <strong>de</strong>r vier Fälle ausgeführt, da bei Verwendung <strong>von</strong> e 1 bereits nach<br />

Auswertung <strong>de</strong>r ersten Verzweigungsbedingung a <strong>mit</strong> <strong>de</strong>m Wert 30 als Maximum feststeht.<br />

Dadurch ergibt sich ein Ab<strong>de</strong>ckungsgrad <strong>von</strong> cov C3 = 2<br />

1 , da nur die erste<br />

Verzweigungsbedingung <strong>de</strong>m Ab<strong>de</strong>ckungskriterium entsprechend getestet wur<strong>de</strong>.<br />

c) Die minimale Mehrfach-Bedingungsab<strong>de</strong>ckung for<strong>de</strong>rt für je<strong>de</strong> atomare o<strong>de</strong>r zusammengesetzte<br />

Verzweigungsbedingung, dass <strong>mit</strong>hilfe <strong>de</strong>r Eingabedaten für je<strong>de</strong> in <strong>de</strong>r<br />

Bedingung enthaltene Teilbedingung und auch zusammengesetzte Teilbedingung bei<strong>de</strong><br />

Wahrheitswerte getestet wer<strong>de</strong>n. Dabei ist nicht die Ausführung aller Kombinationen<br />

gefor<strong>de</strong>rt.<br />

⎛20⎞<br />

⎛20⎞<br />

⎜ ⎟<br />

⎜ ⎟<br />

Die Eingabedaten e 1<br />

= ⎜10<br />

⎟ und e 2<br />

= ⎜30⎟<br />

genügen bezüglich <strong>de</strong>s Beispiels aus<br />

⎜ ⎟<br />

⎝30<br />

⎜ ⎟<br />

⎠<br />

⎝10⎠<br />

Abbildung 3-12 diesem Ab<strong>de</strong>ckungskriterium. Der Eingabevektor e 1 bewertet die in <strong>de</strong>n<br />

bei<strong>de</strong>n Verzweigungsbedingungen enthaltenen Teilbedingungen wie folgt: a > b <strong>mit</strong><br />

wahr, und die übrigen Teilbedingungen <strong>mit</strong> falsch. Der Eingabevektor e 2 hat <strong>de</strong>n exakt<br />

gegenteiligen Effekt und bewertet die Teilbedingungen wie folgt: a > b <strong>mit</strong> falsch, und<br />

die übrigen Teilbedingungen <strong>mit</strong> wahr. So<strong>mit</strong> ergibt sich eine hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung<br />

bezüglich <strong>de</strong>s Kriteriums <strong>de</strong>r minimalen Mehrfach-Bedingungsab<strong>de</strong>ckung.<br />

d) Die modifizierte Mehrfach-Bedingungsab<strong>de</strong>ckung ist in eine an<strong>de</strong>re Richtung<br />

ausgelegt als die minimale Mehrfach-Bedingungsab<strong>de</strong>ckung. Sie for<strong>de</strong>rt, dass für je<strong>de</strong><br />

Teilbedingung ihr Einfluss auf die Bewertung <strong>de</strong>r Gesamtbedingung überprüft wird. Es<br />

muss für je<strong>de</strong> Teilbedingung gezeigt wer<strong>de</strong>n, dass eine Än<strong>de</strong>rung <strong>de</strong>r Bewertung einer<br />

je<strong>de</strong>n <strong>von</strong> ihnen <strong>de</strong>n Wahrheitswert <strong>de</strong>r Gesamtbedingung än<strong>de</strong>rn kann, wenn die Bewertungen<br />

<strong>de</strong>r übrigen Teilbedingungen nicht verän<strong>de</strong>rt wer<strong>de</strong>n. Der Ab<strong>de</strong>ckungsgrad<br />

errechnet sich wie<strong>de</strong>rum als Division <strong>de</strong>r Anzahl <strong>de</strong>r Verzweigungsbedingungen, die<br />

ausreichend getestet wur<strong>de</strong>n, durch die Anzahl aller Verzweigungsbedingungen:<br />

cov MC/DC =<br />

Mit allen für MC/DC<br />

_____________________________________________________<br />

relevanten Kombinationen bewertete Verzweigungsbedingungen<br />

Alle Verzweigungsbedingungen<br />

In <strong>de</strong>r Literatur ist dieses Kriterium auch als MC/DC-Ab<strong>de</strong>ckung (engl. Modified<br />

Condition / Decision Coverage) zu fin<strong>de</strong>n. Für das Beispiel aus Abbildung 3-12 erfüllen<br />

⎛30⎞<br />

⎛20⎞<br />

⎛20⎞<br />

⎜ ⎟ ⎜ ⎟ ⎜ ⎟<br />

die Testdaten e 1<br />

= ⎜20⎟<br />

, e 2<br />

= ⎜10⎟<br />

und e 3<br />

= ⎜30⎟<br />

dieses Kriterium für die Verzweigungsbedingung<br />

(a > b && a > c). Ausgehend <strong>von</strong> <strong>de</strong>r Bewertung, <strong>mit</strong> <strong>de</strong>r bei<strong>de</strong> Teilbedin-<br />

⎜ ⎟<br />

⎝10<br />

⎜ ⎟<br />

⎠ ⎝30<br />

⎜ ⎟<br />

⎠ ⎝10⎠<br />

gungen <strong>mit</strong> wahr bewertet wur<strong>de</strong>n (e1) und so<strong>mit</strong> die Gesamtbedingung (a > b && a > c)<br />

wahr ist, wird <strong>mit</strong> e 2 die rechte Teilbedingung <strong>mit</strong> falsch und so<strong>mit</strong> die Gesamtbedingung<br />

<strong>mit</strong> falsch bewertet. Der dritte Eingabevektor bewertet <strong>de</strong>mentsprechend die linke Teilbedingung<br />

<strong>mit</strong> falsch und auch die Gesamtbedingung <strong>mit</strong> falsch. Dieselben drei<br />

31


3.3. Ab<strong>de</strong>ckung <strong>von</strong> Strukturmerkmalen<br />

Eingabevektoren erfüllen allerdings für (b > a && b > c) nicht das Kriterium. Die drei<br />

vorgestellten Eingabevektoren führen <strong>de</strong>mnach zu einem Ab<strong>de</strong>ckungsgrad <strong>von</strong><br />

cov MC/DC = 2<br />

1 .<br />

3.3.4.4 Pfadab<strong>de</strong>ckung<br />

Die Pfadab<strong>de</strong>ckung (engl. path coverage) ist das umfangreichste Ab<strong>de</strong>ckungskriterium und<br />

for<strong>de</strong>rt die Ausführung aller möglichen Pfa<strong>de</strong> <strong>de</strong>s Testobjektes. Im Beispiel <strong>von</strong> Abbildung<br />

3-11 sind vier Pfa<strong>de</strong> möglich. Bei komplexeren Systemen übersteigt die Ausführung sämtlicher<br />

Pfa<strong>de</strong> allerdings die Möglichkeiten <strong>de</strong>r Tester. Zu<strong>de</strong>m können im Testobjekt<br />

Schleifen ohne obere Grenzen <strong>de</strong>r Iterationszahl vorkommen, wodurch eine unendliche<br />

Anzahl <strong>von</strong> Pfa<strong>de</strong>n zu testen wäre. Aufgrund <strong>de</strong>ssen wird die Pfadab<strong>de</strong>ckung in <strong>de</strong>r Praxis<br />

nur in einfachen, überschaubaren Systemen verwen<strong>de</strong>t und hat in dieser Arbeit keine<br />

weitere Relevanz. Sie wird in <strong>de</strong>r Literatur als C 7 -Ab<strong>de</strong>ckung bezeichnet [Hart01].<br />

3.3.5 Mo<strong>de</strong>llab<strong>de</strong>ckung<br />

Unter Mo<strong>de</strong>llab<strong>de</strong>ckung wird die Ab<strong>de</strong>ckung <strong>von</strong> Mo<strong>de</strong>llkomponenten verstan<strong>de</strong>n. Je nach<br />

Art <strong>de</strong>s vorliegen<strong>de</strong>n Mo<strong>de</strong>lls sind seine Bestandteile sehr unterschiedlich. Ebenso<br />

variieren <strong>de</strong>mentsprechend die Ab<strong>de</strong>ckungskriterien, unter <strong>de</strong>ren Berücksichtigung das<br />

Mo<strong>de</strong>ll getestet wer<strong>de</strong>n soll. Die für die Co<strong>de</strong>ab<strong>de</strong>ckung genannten Kriterien lassen sich<br />

zum Teil auf Mo<strong>de</strong>lle übertragen. Im Folgen<strong>de</strong>n wer<strong>de</strong>n die Ab<strong>de</strong>ckungskriterien für<br />

Mo<strong>de</strong>lle in Simulink und Stateflow beschrieben, da diese vornehmlich in dieser Arbeit<br />

verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

3.3.5.1 Zustandsab<strong>de</strong>ckung<br />

Die Anweisungsab<strong>de</strong>ckung besitzt keine äquivalente Entsprechung bei <strong>de</strong>r Betrachtung<br />

<strong>von</strong> Mo<strong>de</strong>llen. Ein nahe liegen<strong>de</strong>s Ab<strong>de</strong>ckungskriterium ist die Ab<strong>de</strong>ckung <strong>von</strong> Grundblöcken,<br />

aus <strong>de</strong>nen ein Mo<strong>de</strong>ll besteht. Je<strong>de</strong>r Grundblock entspricht dabei in <strong>de</strong>r Regel<br />

einer Menge <strong>von</strong> Anweisungen. Eine Ausprägung in Bezug auf Stateflowmo<strong>de</strong>lle ist die<br />

Zustandsab<strong>de</strong>ckung (engl. state coverage). Das da<strong>mit</strong> verbun<strong>de</strong>ne Testziel ist, je<strong>de</strong>n im<br />

Statechart vorkommen<strong>de</strong>n Zustand (State) <strong>mit</strong>hilfe <strong>de</strong>r Testdaten min<strong>de</strong>stens einmal zu<br />

durchlaufen. Der Ab<strong>de</strong>ckungsgrad errechnet sich hierbei als Verhältnis <strong>de</strong>r durch die Testdaten<br />

abge<strong>de</strong>ckten Zustän<strong>de</strong> <strong>de</strong>s Statecharts und <strong>de</strong>r insgesamt vorhan<strong>de</strong>nen Zustän<strong>de</strong>.<br />

3.3.5.2 Zweigab<strong>de</strong>ckung<br />

Das Kriterium Zweigab<strong>de</strong>ckung kann auf Mo<strong>de</strong>lle übertragen wer<strong>de</strong>n. Zur Erfüllung<br />

dieses Kriteriums wird eine Menge <strong>von</strong> Testdaten benötigt, die für je<strong>de</strong> Verzweigung im<br />

Simulinkmo<strong>de</strong>ll – beispielsweise an Blöcken wie Logical Operator, Relational Operator,<br />

Switch – alle möglichen Werte berechnet. Für das in Abbildung 3-13 gezeigte Mo<strong>de</strong>ll<br />

wer<strong>de</strong>n zwei Eingabevektoren benötigt, um bzgl. <strong>de</strong>r Zweigab<strong>de</strong>ckung das Mo<strong>de</strong>ll ausreichend<br />

zu testen: e = ( 0)<br />

und e = ( 2)<br />

1 2<br />

. Im ersten Fall wür<strong>de</strong> <strong>de</strong>r Block Relational Operator<br />

<strong>de</strong>n Vergleich <strong>mit</strong> falsch bewerten, im zweiten Fall <strong>mit</strong> wahr. Der Ab<strong>de</strong>ckungsgrad dieses<br />

32


3. Mo<strong>de</strong>llbasiertes Testen<br />

Kriteriums ist das Verhältnis <strong>de</strong>r Anzahl <strong>de</strong>r Blöcke, die jeweils einmal <strong>mit</strong> wahr und<br />

einmal <strong>mit</strong> falsch bewertet wur<strong>de</strong>n, zu <strong>de</strong>n insgesamt vorhan<strong>de</strong>nen Blöcken, die bzgl. <strong>de</strong>r<br />

Zweigab<strong>de</strong>ckung relevant sind.<br />

Abbildung 3-13: Beispiel in Simulink zur Zweigab<strong>de</strong>ckung<br />

3.3.5.3 Bedingungsab<strong>de</strong>ckung<br />

Die vier Kriterien zur Bedingungsab<strong>de</strong>ckung lassen sich ebenfalls auf Mo<strong>de</strong>lle übertragen.<br />

In Simulink kommen Bedingungen unter an<strong>de</strong>rem in <strong>de</strong>n bereits beim Kriterium Zweigab<strong>de</strong>ckung<br />

genannten Blöcken vor, in Stateflow in <strong>de</strong>n Zustandsübergängen. Abbildung<br />

3-14 zeigt eine atomare Bedingung für <strong>de</strong>n Zustandsübergang (Transition) vom Zustand S1<br />

zum Zustand S2. Diese wird beispielsweise <strong>mit</strong> <strong>de</strong>n Testdaten e = 1<br />

() 1 und<br />

e = 2<br />

( 20)<br />

vollständig abge<strong>de</strong>ckt.<br />

Abbildung 3-14: Beispiel in Stateflow zur Bedingungsab<strong>de</strong>ckung<br />

3.3.6 Bemerkungen<br />

Wie bereits erwähnt, können Tests, die am Mo<strong>de</strong>ll durchgeführt wur<strong>de</strong>n, im mo<strong>de</strong>llbasierten<br />

Entwicklungsprozess zur Überprüfung <strong>de</strong>s Verhaltens einer Implementierung in<br />

Form <strong>von</strong> Programmco<strong>de</strong> herangezogen wer<strong>de</strong>n. Dabei wer<strong>de</strong>n die während <strong>de</strong>r Mo<strong>de</strong>lltests<br />

aufgezeichneten Ausgabedaten als Referenzdaten für die Implementierungstests<br />

verwen<strong>de</strong>t (vgl. Back-to-Back-Test in Kapitel 3.2.4). Eine vollständige Ab<strong>de</strong>ckung <strong>de</strong>s<br />

Mo<strong>de</strong>lls bzgl. <strong>de</strong>r genannten Kriterien impliziert allerdings nicht die vollständige Ab<strong>de</strong>ckung<br />

<strong>de</strong>r Implementierung.<br />

Ein gutes Beispiel hierfür ist das in Abbildung 3-15 gezeigte Simulinkmo<strong>de</strong>ll. Wenn dieses<br />

<strong>mit</strong>hilfe <strong>de</strong>s C-Co<strong>de</strong>s aus Abbildung 3-12 realisiert wird, stimmen die Werte zur Zweigab<strong>de</strong>ckung<br />

nicht überein. Mit nur einem Testdatum <strong>mit</strong> a als Maximum wird vom Mo<strong>de</strong>ll<br />

genau ein Zweig abge<strong>de</strong>ckt. Dieser am Mo<strong>de</strong>ll bestimmte Ab<strong>de</strong>ckungsgrad <strong>von</strong><br />

cov branches = 3<br />

1 beträgt für das C-Co<strong>de</strong>beispiel aus Abbildung 3-12 covbranches = 8<br />

3 und für<br />

Abbildung 3-11 cov branches = 11<br />

4 .<br />

33


3.4. Metho<strong>de</strong>n zur Testfallerstellung<br />

Die Übertragung <strong>de</strong>r Ab<strong>de</strong>ckungskriterien <strong>von</strong> Co<strong>de</strong>ab<strong>de</strong>ckung zu Mo<strong>de</strong>llab<strong>de</strong>ckung o<strong>de</strong>r<br />

auch umgekehrt ist <strong>de</strong>mzufolge prinzipiell möglich; die Werte <strong>de</strong>r Ab<strong>de</strong>ckungsgra<strong>de</strong><br />

können sich <strong>de</strong>nnoch <strong>de</strong>utlich unterschei<strong>de</strong>n [ConSad02].<br />

Abbildung 3-15: Mo<strong>de</strong>ll zur Berechnung <strong>de</strong>s Maximums <strong>von</strong> drei Werten<br />

Die <strong>von</strong> Programmen berechneten Ab<strong>de</strong>ckungsgra<strong>de</strong> hängen zusätzlich auch <strong>von</strong> <strong>de</strong>ren<br />

Implementierung ab. Die in <strong>de</strong>n vorherigen Kapiteln eingeführten Vorschriften für die<br />

Berechnung <strong>de</strong>r Ab<strong>de</strong>ckungsgra<strong>de</strong> sind nur beispielhaft und wer<strong>de</strong>n in <strong>de</strong>r Literatur unterschiedlich<br />

ausgelegt. Zusätzlich ist <strong>de</strong>r Inhalt eines Kontrollflussgraphen nicht allgemein<br />

festgelegt. Ein Knoten kann beispielsweise aus einer einzelnen Anweisung bestehen o<strong>de</strong>r<br />

gleich aus einer ganzen Abfolge.<br />

Je nach Implementierung <strong>de</strong>s Kontrollflussgraphen wird Ab<strong>de</strong>ckungsgrad unterschiedlich<br />

berechnet. Der in Abbildung 3-11 vorgestellte Kontrollflussgraph kann auf acht Knoten<br />

reduziert wer<strong>de</strong>n, da <strong>de</strong>r erste Knoten für <strong>de</strong>n Kontrollfluss nicht wichtig ist und in <strong>de</strong>n<br />

zweiten <strong>mit</strong> einfließen kann. Der Wert für die Zweigab<strong>de</strong>ckung aus <strong>de</strong>m vorherigen Absatz<br />

wür<strong>de</strong> sich so<strong>mit</strong> <strong>von</strong> 8<br />

3 auf 7<br />

3 erhöhen, da im reduzierten Graphen eine Kante weniger<br />

vorkommt. Wichtig für <strong>de</strong>n Kontrollflussgraphen ist an dieser Stelle, dass nur die letzte<br />

Anweisung eines Knotens, <strong>de</strong>r eine Sequenz <strong>von</strong> Anweisungen repräsentiert, eine<br />

Verzweigung sein darf.<br />

3.4 Metho<strong>de</strong>n zur Testfallerstellung<br />

In diesem Unterkapitel erfolgt eine Beschreibung verschie<strong>de</strong>ner Metho<strong>de</strong>n zur Testfallerstellung.<br />

An dieser Stelle wird nicht nur auf die Verfahren eingegangen, die im mo<strong>de</strong>llbasierten<br />

Entwicklungsprozess Anwendung fin<strong>de</strong>n, son<strong>de</strong>rn auch auf verwandte Verfahren<br />

aus <strong>de</strong>m Hardware- und Softwaretest. Diese können wie auch das in dieser Arbeit entwickelte<br />

Verfahren (siehe Kapitel 4) <strong>de</strong>r Erzeugung <strong>von</strong> Back-to-Back-Tests aus einer<br />

Systemrepräsentation zur Überprüfung einer daraus erzeugten Repräsentation. In dieser<br />

Arbeit han<strong>de</strong>lt es sich hierbei um ein Mo<strong>de</strong>ll, aus <strong>de</strong>m Testfälle zur Überprüfung einer<br />

daraus entwickelten Implementierung. Diese kann entwe<strong>de</strong>r in Gestalt eines Implementierungsmo<strong>de</strong>lls<br />

o<strong>de</strong>r auch als Programmco<strong>de</strong> vorliegen.<br />

Die Generierung <strong>von</strong> Testmustern für Back-to-Back-Tests aus einem Mo<strong>de</strong>ll erfor<strong>de</strong>rt,<br />

dass dieses in einem validierten Zustand vorliegt. Dadurch eignen sich auf diese Weise<br />

erzeugte Referenzdaten zur Überprüfung späterer Systemrepräsentationen. Der Vergleich<br />

34


3. Mo<strong>de</strong>llbasiertes Testen<br />

<strong>de</strong>r Ausgabedaten eines <strong>de</strong>rartigen Tests <strong>mit</strong> <strong>de</strong>n am Mo<strong>de</strong>ll generierten Referenzdaten<br />

führt dazu, dass dieses dadurch indirekt gegen die Benutzeranfor<strong>de</strong>rungen validiert wird.<br />

Kapitel 3.4.1 führt ein manuelles Black-Box-Testverfahren ein. Bei diesem han<strong>de</strong>lt es sich<br />

um die Klassifikationsbaummetho<strong>de</strong>. Die Verfahren zur <strong>Testmustergenerierung</strong>, die eine<br />

Strukturab<strong>de</strong>ckung als Testziel haben, erzeugen Testfälle, die ausgewählten, bereits in<br />

Unterkapitel 3.3 eingeführten Ab<strong>de</strong>ckungskriterien genügen. Die Unterkapitel 3.4.2 bis<br />

3.4.4 beschäftigen sich <strong>mit</strong> ausgewählten Verfahren zur automatischen Erstellung<br />

<strong>de</strong>rartiger Testmuster. In Abschnitt 3.4.5 wird auf das aus <strong>de</strong>m Hardwarebereich stammen<strong>de</strong><br />

Konzept <strong>de</strong>r Fehlermo<strong>de</strong>lle eingegangen.<br />

3.4.1 Klassifikationsbaummetho<strong>de</strong><br />

Die Klassifikationsbaummetho<strong>de</strong> (engl. classification tree method, CTM) ist ein Verfahren<br />

zur methodischen abstrakten Beschreibung <strong>von</strong> Testfällen, welches Anfang <strong>de</strong>r 1990er<br />

Jahre <strong>von</strong> <strong>de</strong>r Daimler Benz AG (heute Daimler Chrysler AG) entwickelt wur<strong>de</strong>. Es dient<br />

<strong>de</strong>r kompakten grafischen Repräsentation <strong>von</strong> Testfällen [Weg93, Con04].<br />

Das Testziel <strong>de</strong>r Klassifikationsbaummetho<strong>de</strong> ist immer die Überprüfung <strong>de</strong>s Verhaltens<br />

eines Systems während eines speziellen Szenarios. Der erzeugte Testfall zielt dabei auf die<br />

Überprüfung einer ausgewählten Systemfunktionalität ab, zu <strong>de</strong>r ein Testentwickler<br />

anhand <strong>de</strong>r vorliegen<strong>de</strong>n Spezifikation einen zeitlichen Ablauf erstellt, in <strong>de</strong>m das Testobjekt<br />

<strong>mit</strong> festgelegten Eingabedaten stimuliert und seine Ausgabe <strong>mit</strong> Referenzdaten<br />

verglichen wird.<br />

Der CTM liegt die grundsätzliche I<strong>de</strong>e zugrun<strong>de</strong>, <strong>de</strong>n Eingabedatenraum <strong>de</strong>s Testobjektes<br />

in logisch zusammengehörige Bereiche zu zerlegen. Dazu wer<strong>de</strong>n die Eingabeschnittstellen<br />

<strong>de</strong>s Testobjektes anhand verschie<strong>de</strong>ner Kriterien geordnet, die als Klassifikationen<br />

bezeichnet wer<strong>de</strong>n. Eine weitere Unterteilung <strong>de</strong>s Eingabedatenraums einzelner Klassifikationen<br />

in Wertebereiche wird als Klasse o<strong>de</strong>r auch Äquivalenzklasse bezeichnet.<br />

Der zugrun<strong>de</strong> liegen<strong>de</strong> Gedanke ist die Unifor<strong>mit</strong>ätshypothese. Diese nimmt an, dass eine<br />

Menge <strong>von</strong> Eingabedaten während <strong>de</strong>r Testdurchführung zu einem ähnlichen – im I<strong>de</strong>alfall<br />

zu einem i<strong>de</strong>ntischen – Systemverhalten führt. Die einzelnen Werte wer<strong>de</strong>n dabei als<br />

untereinan<strong>de</strong>r uniform bezeichnet [Bar97]. Die Gesichtspunkte zur Unterteilung <strong>de</strong>r Wertebereiche<br />

in Klassen wer<strong>de</strong>n <strong>de</strong>mentsprechend gewählt. Aufgrund <strong>de</strong>r Unifor<strong>mit</strong>ät <strong>de</strong>r<br />

Werte einer Klasse wird diese als Äquivalenzklasse bezeichnet.<br />

Als Basis für eine Aufteilung in Äquivalenzklassen dient in <strong>de</strong>r Regel die funktionale<br />

Spezifikation, in <strong>de</strong>r das gewünschte Verhalten <strong>de</strong>s Testobjektes beschrieben ist. Anhand<br />

<strong>de</strong>r Spezifikation wählt <strong>de</strong>r Tester die Gesichtspunkte zur Unterteilung <strong>de</strong>r Wertebereiche<br />

einzelner Eingabeschnittstellen aus. Die Unterteilung in Äquivalenzklassen erfolgt vollständig<br />

und disjunkt. Dies be<strong>de</strong>utet, dass <strong>de</strong>r gesamte mögliche Wertebereich <strong>von</strong><br />

Eingabewerten abge<strong>de</strong>ckt wird und die jeweiligen Teilbereiche sich untereinan<strong>de</strong>r nicht<br />

überschnei<strong>de</strong>n. Die erstellten Klassen können wie<strong>de</strong>rum für sich verfeinert, also in weitere<br />

Unterklassen unterteilt wer<strong>de</strong>n.<br />

35


3.4. Metho<strong>de</strong>n zur Testfallerstellung<br />

Das Ergebnis einer vollständigen Klassifizierung ist <strong>de</strong>r Klassifikationsbaum. Dieser bil<strong>de</strong>t<br />

<strong>de</strong>n Kopf einer Kombinationstabelle, <strong>de</strong>ren Zeilen Testschritte <strong>de</strong>finieren 1 . Ein Testschritt<br />

beschreibt abstrakt <strong>de</strong>n Zustand sämtlicher Eingangsschnittstellen zu einem bestimmten<br />

Zeitpunkt, abstrahiert dabei allerdings <strong>von</strong> konkreten Testmustern. Je<strong>de</strong> Zeile einer Kombinationstabelle<br />

ist so<strong>mit</strong> die abstrakte Beschreibung eines Testvektors, welcher gemäß <strong>de</strong>r<br />

Definition aus Abschnitt 3.1.2 konkrete Eingabe- und Referenzdaten zu einem Zeitpunkt<br />

<strong>de</strong>r Testdurchführung beinhaltet. Pro Testschritt wird <strong>von</strong> je<strong>de</strong>r Klassifikation eine<br />

Äquivalenzklasse ausgewählt. Dadurch wer<strong>de</strong>n allen Eingabeschnittstellen abstrakte Werte<br />

in Form <strong>de</strong>r Wertebereiche <strong>de</strong>r gewählten Klassen zugeordnet.<br />

Abbildung 3-16: Klassifikationsbaum und Kombinationstabelle<br />

Ein einfaches Beispiel eines Klassifikationsbaums <strong>mit</strong> zugehöriger Kombinationstabelle<br />

wird in Abbildung 3-16 in Anlehnung an [Lam04] vorgestellt. Diese zeigt <strong>de</strong>n Überholvorgang<br />

eines Autos, welches anhand <strong>de</strong>r Klassifikationen Gaspedal, Lenkung und Bremse<br />

beschrieben wird. Die vorgestellte Kombinationstabelle beschreibt ein Szenario, welches<br />

nach zehn Sekun<strong>de</strong>n <strong>de</strong>r Testdurchführung die Wahl eines Wertes <strong>de</strong>r Klasse ]75, 100[ für<br />

<strong>de</strong>n Systemeingang Gaspedal vorsieht. Die Interpretation dieser Klasse liefert einen Wert<br />

im Bereich zwischen 75 und 100 Prozent <strong>de</strong>s möglichen Maximalwertes, <strong>de</strong>n <strong>de</strong>r Eingang<br />

Gaspedal annehmen kann. Zeitgleich wird gera<strong>de</strong>aus gelenkt und die Bremse nicht<br />

betätigt.<br />

1 [Con04] bezeichnet im Gegensatz zu dieser Arbeit je<strong>de</strong>n Testschritt als Testfall.<br />

36


3. Mo<strong>de</strong>llbasiertes Testen<br />

3.4.2 Zufallsbasierte <strong>Testmustergenerierung</strong> zur Strukturab<strong>de</strong>ckung<br />

Die einfachste Form <strong>de</strong>r <strong>Testmustergenerierung</strong> ist die Erzeugung zufälliger Sequenzen<br />

<strong>von</strong> Eingabedaten, unter <strong>de</strong>ren Verwendung das zu testen<strong>de</strong> System während <strong>de</strong>r Testdurchführung<br />

stimuliert wird (vgl. Kapitel 3.2.4 Zufallstest). In Abbildung 3-17 wird das<br />

diesem Abschnitt zugrun<strong>de</strong> liegen<strong>de</strong> Verfahren zur Erzeugung <strong>von</strong> Back-to-Back-Tests als<br />

UML-Aktivitätsdiagramm (Unified Mo<strong>de</strong>ling Language [UML]) vorgestellt. Es verwen<strong>de</strong>t<br />

zufällig erzeugte Testmuster und hat eine möglichst hohe Ab<strong>de</strong>ckung ausgewählter<br />

Strukturmerkmale als Testziel.<br />

Erzeugen eines neuen Testmusters<br />

Messen <strong>de</strong>s Ab<strong>de</strong>ckungsgra<strong>de</strong>s<br />

anhand <strong>de</strong>s Mo<strong>de</strong>lls<br />

[Coverage < 100%]<br />

Berechnen <strong>de</strong>s Testfallab<strong>de</strong>ckungsgra<strong>de</strong>s<br />

[Coverage == 100%]<br />

Ausgabe <strong>de</strong>s Testfalls<br />

Abbildung 3-17: Zufallsbasierte <strong>Testmustergenerierung</strong><br />

Das Vorgehen kann als das allgemeine zufallsbasierte Verfahren zur Erzeugung <strong>von</strong><br />

strukturorientierten Testfällen für Back-to-Back-Tests angesehen wer<strong>de</strong>n. Dabei wird<br />

versucht <strong>mit</strong> einem Testfall, <strong>de</strong>r aus mehreren Testmustern besteht, einen Ab<strong>de</strong>ckungsgrad<br />

<strong>von</strong> hun<strong>de</strong>rt Prozent bezüglich eines ausgewählten Ab<strong>de</strong>ckungskriteriums zu erreichen.<br />

Die Wahl <strong>de</strong>s Kriteriums spielt für das Verfahren an sich keine Rolle und wird <strong>de</strong>shalb<br />

nicht weiter beachtet.<br />

Die Generierung erfolgt in einem zyklischen Ablauf. Pro Zyklus wird ein neues Testmuster<br />

anhand einer ausgewählten Systemrepräsentation in Form eines Mo<strong>de</strong>lls erzeugt. Im<br />

mo<strong>de</strong>llbasierten Entwicklungsprozess kann es sich dabei beispielsweise um das Funktionsmo<strong>de</strong>ll<br />

han<strong>de</strong>ln. Zur Generierung eines Testmusters wer<strong>de</strong>n nur die Wertebereiche <strong>de</strong>r<br />

Eingabeschnittstellen <strong>de</strong>s Mo<strong>de</strong>lls berücksichtigt. Für diese wird eine Menge <strong>von</strong> Eingabe-<br />

37


3.4. Metho<strong>de</strong>n zur Testfallerstellung<br />

daten zufällig erzeugt. Ebenfalls entstehen an dieser Stelle die für die Testdurchführung<br />

<strong>de</strong>r erzeugten Back-to-Back-Tests benötigten Referenzdaten. Daran anschließend erfolgt<br />

die Messung <strong>de</strong>s Ab<strong>de</strong>ckungsgra<strong>de</strong>s <strong>de</strong>s soeben erzeugten Testmusters. Auch dies erfolgt<br />

anhand <strong>de</strong>s vorliegen<strong>de</strong>n Mo<strong>de</strong>lls. Aus <strong>de</strong>m er<strong>mit</strong>telten Ab<strong>de</strong>ckungsgrad <strong>de</strong>s neu erzeugten<br />

Testmusters und <strong>de</strong>n Ab<strong>de</strong>ckungsgra<strong>de</strong>n <strong>de</strong>r in früheren Zyklen generierten Testdaten wird<br />

<strong>de</strong>r Testfallab<strong>de</strong>ckungsgrad (vgl. Unterkapitel 3.3.3) berechnet.<br />

Das Verfahren been<strong>de</strong>t die <strong>Testmustergenerierung</strong>, sobald <strong>de</strong>r Testfallab<strong>de</strong>ckungsgrad<br />

hun<strong>de</strong>rt Prozent erreicht hat. Ebenfalls ist eine Beschränkung <strong>de</strong>r maximal erzeugten<br />

Testmuster sinnvoll, um die Laufzeit zu begrenzen.<br />

3.4.3 <strong>Testmustergenerierung</strong> <strong>mit</strong> Evolutionären Algorithmen<br />

Die Erzeugung <strong>von</strong> Strukturtests <strong>mit</strong> Evolutionären Algorithmen folgt im Wesentlichen <strong>de</strong>r<br />

zufälligen Erstellung <strong>von</strong> Testmustersequenzen. Es gibt allerdings auch <strong>de</strong>utliche Unterschie<strong>de</strong>.<br />

Evolutionäre Algorithmen folgen <strong>de</strong>m natürlichen Phänomen <strong>de</strong>r biologischen<br />

Evolution. Nach Darwins Theorie <strong>de</strong>r natürlichen Auslese erfolgt in diesem Verfahren die<br />

Erzeugung neuer Daten aus einer zuvor generierten Menge <strong>von</strong> Daten. Im Fall <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

han<strong>de</strong>lt es sich bei diesen Daten um Sequenzen <strong>von</strong> Eingabedaten zur<br />

Erzeugung <strong>von</strong> Testmustern [Bar00].<br />

Evolutionsalgorithmen o<strong>de</strong>r Evolutionäre Algorithmen folgen <strong>de</strong>m biologischen Vorbild<br />

<strong>de</strong>r Evolution. Sie bil<strong>de</strong>n <strong>de</strong>n Prozess <strong>de</strong>r Entwicklung einer Art nach. Dieser wird als eine<br />

Form <strong>von</strong> Optimierungsprozess gesehen, <strong>de</strong>ssen Ziel es ist, durch Manipulation <strong>von</strong> Erbinformationen<br />

eine Lebensform an sich än<strong>de</strong>rn<strong>de</strong> Umwelt- und Lebensbedingungen in<br />

kurzen Zeiträumen anzupassen. Die Evolution ist hierbei eine Art Suchprozess, welcher in<br />

<strong>de</strong>r Vielzahl <strong>von</strong> erzeugbaren Erbinformationen diejenigen aussucht, welche eine Lebensform<br />

am besten an seine Umwelt anpassen und dadurch die Arterhaltung sichern [Schö94].<br />

Diesem Prinzip folgend ist das Ziel <strong>de</strong>r <strong>Testmustergenerierung</strong>, die Erzeugung möglichst<br />

guter Testmuster. Im Folgen<strong>de</strong>n wird <strong>de</strong>r Ablauf <strong>de</strong>r <strong>Testmustergenerierung</strong> <strong>mit</strong>tels<br />

Evolutionärer Algorithmen vorgestellt.<br />

Der wesentliche Unterschied zum allgemeinen Verfahren zur zufallsbasierten Erzeugung<br />

<strong>von</strong> Testmustern liegt in <strong>de</strong>r Art ihrer Erzeugung. Während im allgemeinen Verfahren aus<br />

Abschnitt 3.4.2 immer nur ein Testmuster erzeugt wird, wer<strong>de</strong>n im Verfahren <strong>mit</strong> Evolutionären<br />

Algorithmen immer mehrere gleichzeitig betrachtet, welche eine Population <strong>von</strong><br />

Testmustern bil<strong>de</strong>n. Aus einer Anfangspopulation (engl. Initial Population) wird nach und<br />

nach eine Population <strong>mit</strong> besseren Eigenschaften gebil<strong>de</strong>t. Das hierzu notwendige<br />

Verfahren ist zyklisch aufgebaut und in Abbildung 3-18 dargestellt, welche <strong>de</strong>n Grundaufbau<br />

eines Evolutionären Algorithmus zur <strong>Testmustergenerierung</strong> nach Sthamer [Sth et al.<br />

01] und Wegener [Weg02] zeigt.<br />

Schöneburg i<strong>de</strong>ntifiziert drei Prinzipien, auf <strong>de</strong>nen die Evolution beruht: die Selektion<br />

(engl. Selection) einzelner Individuen aufgrund ihrer Tauglichkeit, die Rekombination<br />

(engl. Recombination) <strong>de</strong>r Erbinformationen und die Mutation (engl. Mutation) <strong>de</strong>s Erbgutes.<br />

Die Selektion ist für die Steuerung <strong>de</strong>r Evolution zuständig. Sie bestimmt durch<br />

38


3. Mo<strong>de</strong>llbasiertes Testen<br />

Auswahl <strong>von</strong> Individuen aufgrund einer Bewertung, welche Eigenschaften einer Population<br />

in die nächste Generation übergehen und welche wegfallen. Die Rekombination<br />

vereint die Eigenschaften einer Population, in<strong>de</strong>m es die Eigenschaften einzelner<br />

Individuen kombiniert und in neu erzeugte Individuen einfließen lässt. Die Mutation dient<br />

<strong>de</strong>m alleinigen Zweck, Varianten und Alternativen zu erzeugen. Dies erfolgt, in<strong>de</strong>m<br />

einzelnen Individuen neue Eigenschaften zufällig hinzugefügt wer<strong>de</strong>n, die gegebenenfalls<br />

in <strong>de</strong>r Population noch nicht enthalten sind [Schö94].<br />

Reinsertion<br />

Initial population<br />

Mutation<br />

Fitness evaluation<br />

Recombination<br />

Selection<br />

Test results<br />

Abbildung 3-18: Ablauf eines Evolutionären Algorithmus [Sth et al. 01], [Weg02]<br />

Die Übertragung dieser allgemeinen Prinzipien auf die <strong>Testmustergenerierung</strong> führt zu<br />

folgen<strong>de</strong>m Vorgehen: Es wird eine zufällige Anfangspopulation <strong>von</strong> Testmustern erzeugt.<br />

Je<strong>de</strong>s Testmuster wird als Individuum betrachtet und einer Bewertung unterzogen. Unter<br />

<strong>de</strong>r Zielsetzung, Strukturtests zu erzeugen, wer<strong>de</strong>n ein o<strong>de</strong>r mehrere Ab<strong>de</strong>ckungskriterien<br />

zur Bewertung herangezogen. Aufgrund eines Fitnesswertes für je<strong>de</strong>s Individuum wer<strong>de</strong>n<br />

die Testmuster einer Population untereinan<strong>de</strong>r verglichen. Als Fitnesswert kommt<br />

beispielsweise <strong>de</strong>r Ab<strong>de</strong>ckungsgrad infrage.<br />

Aufgrund <strong>de</strong>s Fitnesswertes erfolgt die Selektion. Diese wählt einen Teil <strong>de</strong>r Population –<br />

beispielsweise die Hälfte <strong>mit</strong> <strong>de</strong>n höheren Fitnesswerten – aus und bil<strong>de</strong>t daraus eine neue<br />

Generation <strong>von</strong> Testmustern. Während <strong>de</strong>r Rekombination erfolgt eine Kombination dieser<br />

Testmuster zu neuen Testmustern, welche in die neu erstellte Generation aufgenommen<br />

wer<strong>de</strong>n. Die Art <strong>de</strong>r Kombination kann beliebig erfolgen. Es können einzelne Testdaten<br />

o<strong>de</strong>r auch ganze Sequenzen <strong>von</strong> Testmustern ausgetauscht wer<strong>de</strong>n. Im nächsten Schritt<br />

39


3.4. Metho<strong>de</strong>n zur Testfallerstellung<br />

wer<strong>de</strong>n <strong>de</strong>r Generation durch Mutation neue Testdaten zufallsbasiert hinzugefügt. Die<br />

durch diese Schritte entstan<strong>de</strong>ne Generation geht als Population in <strong>de</strong>n nächsten Zyklus<br />

ein. Pro Zyklus entsteht durch dieses Verfahren eine Population <strong>von</strong> Testmustern, welche<br />

die besten Eigenschaften <strong>de</strong>r vorherigen Generation beibehält.<br />

Aufgrund eines Abbruchkriteriums erfolgt am En<strong>de</strong> <strong>de</strong>s Verfahrens die Ausgabe <strong>de</strong>r besten<br />

Testmuster. Hierzu kann beispielsweise die Menge <strong>de</strong>r insgesamt im Verfahren erzeugten<br />

Testmuster als obere Schranke herangezogen wer<strong>de</strong>n. Sollte als Testziel ein Ab<strong>de</strong>ckungskriterium<br />

dienen, kann das Verfahren bereits zwischenzeitlich terminieren, sobald ein<br />

Testmuster erzeugt wur<strong>de</strong>, welches zu hun<strong>de</strong>rtprozentiger Ab<strong>de</strong>ckung führt.<br />

3.4.4 Analytische <strong>Testmustergenerierung</strong><br />

Während die drei zuvor behan<strong>de</strong>lten Verfahren vom grundsätzlichen Vorgehen her ohne<br />

Systemwissen Testdaten erzeugen, wird in diesem Abschnitt ein Verfahrensansatz behan<strong>de</strong>lt,<br />

welcher direkt aus <strong>de</strong>m Aufbau eines Systems durch Analyse und Berechnung<br />

Testdaten bestimmt. Hierbei wer<strong>de</strong>n an<strong>de</strong>re Strukturmerkmale als die in Kapitel 3.3<br />

vorgestellten Ab<strong>de</strong>ckungskriterien als Testziele verwen<strong>de</strong>t.<br />

Als Testbasis dient wie in <strong>de</strong>n zuvor beschriebenen Verfahren ebenfalls eine Systemrepräsentation<br />

in Form eines Mo<strong>de</strong>lls. Für je<strong>de</strong>n Block wird anhand <strong>von</strong> festgelegten Regeln<br />

eine Menge <strong>von</strong> Wertebereichen bestimmt, aus <strong>de</strong>nen <strong>de</strong>r Block <strong>mit</strong> jeweils min<strong>de</strong>stens<br />

einem Wert während <strong>de</strong>r Testdurchführung ausgeführt wer<strong>de</strong>n muss, um diesen abzu<strong>de</strong>cken<br />

[Her05]. Um dieses Vorgehen zu ver<strong>de</strong>utlichen, ist in Abbildung 3-19 ein Beispielsystem<br />

gegeben. Dieses berechnet <strong>mit</strong>hilfe eines Blocks Gain das Dreifache <strong>de</strong>s Eingangssignals<br />

In1 und begrenzt durch einen Saturation-Block <strong>de</strong>n errechneten Wert auf minimal<br />

sieben und maximal hun<strong>de</strong>rt.<br />

Abbildung 3-19: Propagierung <strong>von</strong> Wertebereichen [Her05]<br />

Die analytische <strong>Testmustergenerierung</strong> bestimmt anhand <strong>von</strong> festen Regeln, die pro<br />

Blocktyp vorgegeben sind, für je<strong>de</strong>n Block die Wertebereiche, anhand <strong>de</strong>rer die<br />

Ab<strong>de</strong>ckung gemessen wird. Im Beispiel ergeben sich für <strong>de</strong>n Saturation-Block die Wertebereiche<br />

D S1 = {x | x ≤ 7}, D S2 = {x | 7 < x < 100} und D S3 = {x | x ≥ 100}, welche die<br />

Wertebereiche oberhalb <strong>de</strong>r oberen Schranke und unterhalb <strong>de</strong>r unteren Schranke und <strong>de</strong>n<br />

Wertebereich innerhalb <strong>de</strong>r Schranken <strong>de</strong>s Saturation-Blocks beschreiben. Für <strong>de</strong>n Gain-<br />

40


3. Mo<strong>de</strong>llbasiertes Testen<br />

Block wer<strong>de</strong>n die Wertebereiche D G1 = {x | x ≥ 0} und D G2 = {x | x < 0} gewählt, welche<br />

darauf abzielen, <strong>de</strong>n Block <strong>mit</strong> einem negativen und einem positiven Wert auszuführen.<br />

Die Testfallgenerierung muss aus diesen Wertebereichen Testdaten wählen. Hierbei ist zu<br />

berücksichtigen, dass für <strong>de</strong>n Saturation-Block diese nicht direkt erzeugt wer<strong>de</strong>n, da <strong>de</strong>r<br />

Block nicht un<strong>mit</strong>telbar <strong>von</strong> einem Eingangssignal stimuliert wird. Vielmehr müssen für<br />

<strong>de</strong>n Signaleingang In1 <strong>de</strong>rartige Werte generiert wer<strong>de</strong>n, dass nach einer Berechnung<br />

durch <strong>de</strong>n Gain-Block passen<strong>de</strong> Werte in die Ausführung <strong>de</strong>s Saturation-Blocks eingehen.<br />

Zu diesem Zweck wer<strong>de</strong>n im Verfahren <strong>de</strong>r analytischen <strong>Testmustergenerierung</strong> die<br />

Wertebereiche im Signalfluss nach vorne propagiert. Aus <strong>de</strong>n Wertebereichen <strong>de</strong>r Einzelblöcke<br />

wer<strong>de</strong>n Wertebereiche für die Signaleingänge berechnet. Im Fall <strong>de</strong>s<br />

Beispielsystems aus Abbildung 3-19 entstehen die Wertebereiche D In1_1 = {x | x < 0},<br />

D In1_2 = {x | 0 ≤ x ≤ 7/3}, D In1_3 = {x | 7/3 < x < 100/3} und D In1_4 ={x| x ≥ 100/3}. Der<br />

Wertebereich D In1_1 <strong>de</strong>ckt direkt <strong>de</strong>n Wertebereich D G2 <strong>de</strong>s Gain-Blocks ab, während zur<br />

Ab<strong>de</strong>ckung <strong>von</strong> D G1 die Wertebereiche D In1_2 , D In1_3 und D In1_3 benötigt wer<strong>de</strong>n. Entsprechen<strong>de</strong>s<br />

gilt für die Ab<strong>de</strong>ckung <strong>de</strong>r Wertebereiche <strong>de</strong>s Saturation-Blocks.<br />

Die erzeugten Wertebereiche für die Eingabeschnittstellen <strong>de</strong>s Systems wer<strong>de</strong>n zur Erstellung<br />

konkreter Testmuster verwen<strong>de</strong>t. Pro Wertebereich wird ein Testdatum ausgewählt.<br />

Dies kann zufällig o<strong>de</strong>r auch durch die Wahl eines Mittelwertes erfolgen. Die Menge <strong>de</strong>r<br />

auf diese Weise erzeugten Testdaten führt zur Ab<strong>de</strong>ckung <strong>de</strong>r blockspezifischen Wertebereiche.<br />

Für Zyklen in Simulink und auch Statecharts, in <strong>de</strong>nen nicht direkt die Möglichkeit<br />

besteht, durch Rückwärtspropagieren an <strong>de</strong>n Eingabeschnittstellen benötigte Werte zu<br />

berechnen, müssen zeitliche Aspekte berücksichtigt wer<strong>de</strong>n. In Simulinkzyklen und<br />

Statecharts spielen die in vorherigen Zeitschritten verwen<strong>de</strong>ten Testdaten eine wichtige<br />

Rolle und haben direkten Einfluss auf <strong>de</strong>n aktuellen Systemzustand. Auf die Behandlung<br />

dieses Problems wird in [Her05] nicht näher eingegangen.<br />

Die analytische <strong>Testmustergenerierung</strong> für auf Statecharts basieren<strong>de</strong> Systeme wird in<br />

[Cha04] vorgestellt. Es wird einen Verfahrensansatz beschrieben, in <strong>de</strong>m direkt aus <strong>de</strong>r<br />

Struktur eines Statecharts Testmuster erzeugt wer<strong>de</strong>n, welche beispielsweise zur Ausführung<br />

sämtlicher Zustän<strong>de</strong> (vgl. Abschnitt 3.3.5.1) führen. Zu diesem Zweck wer<strong>de</strong>n<br />

Statecharts in einem ersten Schritt stark vereinfacht. Dies erfolgt zum einen durch <strong>de</strong>n<br />

Abbau <strong>von</strong> Parallelität zum an<strong>de</strong>ren auch durch Abbau <strong>von</strong> Hierarchieebenen. Ebenfalls<br />

dürfen die verwen<strong>de</strong>ten Statecharts nur in <strong>de</strong>n Zustandsübergängen Ausgaben erzeugen,<br />

während Statecharts im Allgemeinen auch Ausgaben in einzelnen Zustän<strong>de</strong>n erlauben.<br />

3.4.5 Fehlermo<strong>de</strong>lle im Hardwaretest<br />

Während die bisher vorgestellten Verfahren zur Testfallerzeugung hauptsächlich im<br />

Softwarebereich ihre Anwendung fin<strong>de</strong>n, behan<strong>de</strong>lt dieser Abschnitt <strong>de</strong>n Aspekt <strong>de</strong>r<br />

Fehlermo<strong>de</strong>lle zur Erstellung <strong>von</strong> strukturorientierten Hardwaretests. Hierbei dient als<br />

Testbasis eine kombinatorische Logikschaltung. Zusätzlich wird ein so genanntes Fehler-<br />

41


3.4. Metho<strong>de</strong>n zur Testfallerstellung<br />

mo<strong>de</strong>ll herangezogen. Dieses beruht darauf, dass innerhalb einer Schaltung eine bestimmte<br />

Art <strong>von</strong> Fehlern angenommen wird. Aufgrund dieser angenommenen Fehler wer<strong>de</strong>n Testmuster<br />

generiert, die zur Überprüfung <strong>de</strong>r Existenz bzw. Abwesenheit dieser expliziten<br />

Fehler verwen<strong>de</strong>t wer<strong>de</strong>n. Bevor auf die eigentliche <strong>Testmustergenerierung</strong> eingegangen<br />

wird, wird im Folgen<strong>de</strong>n zuerst auf ein ausgewähltes Fehlermo<strong>de</strong>ll eingegangen.<br />

Das Fehlermo<strong>de</strong>ll für Haftfehler (engl. Stuck-at-Fault) ist das einfachste Fehlermo<strong>de</strong>ll und<br />

wur<strong>de</strong> bereits in <strong>de</strong>n 50er Jahren entwickelt [VieMis04]. Es behan<strong>de</strong>lt einfache Fehler<br />

einzelner Signalleitungen einer digitalen Schaltung, welche permanent entwe<strong>de</strong>r auf <strong>de</strong>m<br />

Wert logisch Eins o<strong>de</strong>r logisch Null liegen. Durch einen <strong>de</strong>rartigen Fehler ist ein Signalwechsel<br />

auf <strong>de</strong>r betroffenen Leitung nicht mehr möglich und das System verhält sich<br />

fehlerhaft. Die Bezeichnung für einen <strong>de</strong>rartigen Fehler ist „Haftfehler bezüglich <strong>de</strong>s<br />

Wertes 0 bzw. 1“. Die für die Eingangs- und Ausgangsleitungen eines AND-Gatters <strong>de</strong>nkbaren<br />

Haftfehler sind in Abbildung 3-20 <strong>mit</strong> s-a-0 (engl. stuck at 0) bzw. s-a-1 (engl. stuck<br />

at 1) gekennzeichnet.<br />

Abbildung 3-20: Haftfehler-Mo<strong>de</strong>ll an einem AND-Gatter [VieMis04]<br />

Die <strong>Testmustergenerierung</strong> bezieht das Fehlermo<strong>de</strong>ll wie folgt ein. Für je<strong>de</strong>n angenommenen<br />

Fehler müssen Testdaten generiert wer<strong>de</strong>n, welche bei <strong>de</strong>r Testdurchführung <strong>de</strong>n<br />

angenommenen Haftfehler auf<strong>de</strong>cken, wenn dieser vorliegen sollte. In diesem Zusammenhang<br />

wird <strong>von</strong> Fehlerüber<strong>de</strong>ckung gesprochen. Eine vollständige Ab<strong>de</strong>ckung aller<br />

angenommenen Haftfehler führt dazu, dass je<strong>de</strong>r vorhan<strong>de</strong>ne Haftfehler während <strong>de</strong>r<br />

Testdurchführung gefun<strong>de</strong>n wird. Sollte bei hun<strong>de</strong>rtprozentiger Haftfehlerüber<strong>de</strong>ckung<br />

kein Fehler ent<strong>de</strong>ckt wor<strong>de</strong>n sein, ist dies – bei korrekter Testfallerstellung und korrekter<br />

Testdurchführung – ein Beweis dafür, dass <strong>de</strong>rartige Fehler im überprüften System nicht<br />

vorkommen.<br />

Das Haftfehlermo<strong>de</strong>ll kann – wie je<strong>de</strong>s Fehlermo<strong>de</strong>ll – in zwei Ausprägungen betrachtet<br />

wer<strong>de</strong>n. Der einfachere Fall ist das Einzelfehlermo<strong>de</strong>ll. Dieses geht da<strong>von</strong> aus, dass in<br />

einer Schaltung nur ein einziger Haftfehler vorkommt. Diese Betrachtung berücksichtigt<br />

unter an<strong>de</strong>rem nicht, dass mehrere Fehler gleichzeitig auftreten und sich unter Umstän<strong>de</strong>n<br />

während <strong>de</strong>r Testdurchführung gegenseitig aufheben können, wodurch sie nicht gefun<strong>de</strong>n<br />

wer<strong>de</strong>n. Das Mehrfachfehlermo<strong>de</strong>ll berücksichtigt dies. Es wird stets <strong>von</strong> mehreren gleich-<br />

42


3. Mo<strong>de</strong>llbasiertes Testen<br />

zeitig auftreten<strong>de</strong>n Haftfehlern an verschie<strong>de</strong>nen Stellen eines Systems ausgegangen. Eine<br />

vollständige Fehlerab<strong>de</strong>ckung bzgl. eines Mehrfachfehlermo<strong>de</strong>lls ist allerdings nur für<br />

kleine Systeme <strong>mit</strong> wenigen Gattern und Signalleitungen praktikabel, da die Anzahl <strong>de</strong>r<br />

möglichen Mehrfachhaftfehler alle Kombinationen <strong>von</strong> Einzelfehlern beinhalten muss.<br />

Dies beinhaltet bei n Signalleitungen eine Fehleranzahl <strong>von</strong> 1 bis n gleichzeitigen Fehlern,<br />

welche zusätzlich einzeln in sämtlichen Positionen angenommen wer<strong>de</strong>n müssen. Deren<br />

Zahl wächst <strong>mit</strong> steigen<strong>de</strong>r Systemgröße exponentiell. Daher wird in <strong>de</strong>r Regel bei <strong>de</strong>r<br />

Erstellung <strong>von</strong> Testfällen die Fehlerüber<strong>de</strong>ckung <strong>von</strong> Einzelfehlern betrachtet, um <strong>de</strong>n<br />

Testaufwand gering zu halten.<br />

Abbildung 3-21: Fehlerpropagierung [Mol02]<br />

Die <strong>Testmustergenerierung</strong> für kombinatorische Schaltungen kann zum Beispiel <strong>mit</strong> <strong>de</strong>m<br />

D-Algorithmus <strong>von</strong> Roth [Rot66] erfolgen. In diesem wird zunächst eine Leitung ausgewählt,<br />

an <strong>de</strong>r ein bestimmter Fehler angenommen wird. In Fall <strong>von</strong> Abbildung 3-21 ist dies<br />

ein Haftfehler <strong>mit</strong> <strong>de</strong>m Wert Null (s-a-0). Der D-Algorithmus basiert auf <strong>de</strong>m so genannten<br />

D-Kalkül. In diesem wird <strong>von</strong> einer 5-Werte-Logik ausgegangen, welche die Werte 0, 1,<br />

D, D’ und X als Werte vorsieht, welche eine Signalleitung annehmen kann. Das Prinzip <strong>de</strong>s<br />

D-Algorithmus besteht daraus, dass ausgehend <strong>von</strong> einem festgelegten Wert einer Signalleitung<br />

die Werte <strong>de</strong>r übrigen Leitungen im D-Kalkül festgelegt wer<strong>de</strong>n. Hierbei<br />

beschreiben 0 und 1 die Werte logisch Null und Eins. Der Wert D steht für einen Signalwert,<br />

<strong>de</strong>r <strong>de</strong>n Wert Eins annimmt, wenn die Schaltung fehlerfrei ist, und entsprechend <strong>de</strong>n<br />

Wert Null annimmt, wenn die Schaltung fehlerhaft ist. D’ steht für das exakte Gegenteil<br />

<strong>von</strong> D. Der Wert X repräsentiert <strong>de</strong>n unbestimmten Fall. Der Wert <strong>de</strong>r betroffenen<br />

Signalleitung ist beliebig.<br />

Der Algorithmus sieht das Propagieren eines angenommenen Haftfehlers zu <strong>de</strong>n Ein- und<br />

Ausgängen <strong>de</strong>s Systems vor. Die zugrun<strong>de</strong> liegen<strong>de</strong> I<strong>de</strong>e ist, dass dadurch <strong>de</strong>r Fehler durch<br />

<strong>de</strong>finierte Eingabewerte getestet und durch die Ausgabewerte und vorher bestimmte<br />

Erwartungswerte beobachtet und aufge<strong>de</strong>ckt wer<strong>de</strong>n kann. Im Fall <strong>de</strong>s s-a-0-Fehlers aus<br />

Abbildung 3-21 be<strong>de</strong>utet dies, dass <strong>de</strong>r Wert D an <strong>de</strong>r betroffenen Signalleitung die Werte<br />

<strong>de</strong>r übrigen Leitungen im D-Kalkül festlegt. Für <strong>de</strong>n Test <strong>de</strong>s s-a-0-Fehlers muss an <strong>de</strong>n<br />

Signaleingängen <strong>de</strong>s vor <strong>de</strong>m angenommenen Haftfehler liegen<strong>de</strong>n AND-Gatters jeweils<br />

<strong>de</strong>r Wert logisch Eins anliegen, da<strong>mit</strong> die Existenz <strong>de</strong>s Fehlers überprüft wer<strong>de</strong>n kann. Der<br />

erste Signaleingang <strong>de</strong>s nachfolgen<strong>de</strong>n OR-Gatters hat <strong>de</strong>mnach in <strong>de</strong>r 5-Werte-Logik <strong>de</strong>n<br />

Wert D. Die weitere Propagierung <strong>de</strong>r Werte erfolgt nach folgen<strong>de</strong>n Regeln.<br />

43


3.5. Kommerzielle Anwendungen zur Testfallerstellung<br />

Soll <strong>de</strong>r Ausgang eines Gatters <strong>von</strong> exakt einem Eingangssignal abhängig sein, wie es im<br />

Fall <strong>de</strong>s OR-Gatters <strong>de</strong>r Fall ist, müssen die übrigen Eingangssignale solche Werte<br />

annehmen, die sich „neutral“ bzgl. <strong>de</strong>s Gatters verhalten. Bei einem AND-Gatter ist dies<br />

jeweils <strong>de</strong>r Wert logisch Eins, bei einem OR-Gatter entsprechend <strong>de</strong>r Wert logisch Null<br />

[VieMis04]. Diesen Regeln folgend wer<strong>de</strong>n die Werte <strong>de</strong>r übrigen Eingangssignale <strong>de</strong>r<br />

⎛ 1 ⎞<br />

Schaltung bestimmt. Das Ergebnis <strong>de</strong>s Verfahrens ist, dass <strong>mit</strong>hilfe <strong>de</strong>s Testvektors<br />

⎝ 0 ⎠<br />

<strong>de</strong>r angenommene s-a-0-Fehler am einzigen Systemausgang beobachtet wer<strong>de</strong>n kann.<br />

Durch die Propagierung hat dieser in <strong>de</strong>r 5-Werte-Logik <strong>de</strong>n Wert D. Dies be<strong>de</strong>utet, dass<br />

<strong>mit</strong> <strong>de</strong>m erwähnten Testvektor bewiesen wird, dass <strong>de</strong>r angenommene Fehler nicht<br />

vorhan<strong>de</strong>n ist, wenn <strong>de</strong>r Signalausgang <strong>de</strong>n Wert logisch Eins annimmt. Im gegenteiligen<br />

Fall wird <strong>de</strong>r Haftfehler aufge<strong>de</strong>ckt.<br />

⎜<br />

⎜ 1<br />

⎜ 0<br />

⎜<br />

⎜ X<br />

⎜<br />

Das aus <strong>de</strong>m Hardwaretest bekannte Vorgehen, <strong>mit</strong>hilfe <strong>von</strong> Fehlermo<strong>de</strong>llen Testmuster zu<br />

erzeugen, kann in diesem Abschnitt nur in Auszügen vorgestellt wer<strong>de</strong>n. Zur <strong>de</strong>taillierteren<br />

Lektüre wird an dieser Stelle auf Quellen in <strong>de</strong>r Literatur verwiesen: [Mol02], [Rot66],<br />

[VieMis04].<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

3.5 Kommerzielle Anwendungen zur Testfallerstellung<br />

In diesem Abschnitt wer<strong>de</strong>n ausgewählte Anwendungen vorgestellt, die in Verbindung zu<br />

<strong>de</strong>n soeben in Abschnitt 3.4 beschriebenen Verfahren zur <strong>Testmustergenerierung</strong> stehen.<br />

3.5.1 Klassifikationsbaumeditor (CTE)<br />

Die Erstellung <strong>de</strong>r in Abschnitt 3.4.1 vorgestellten Klassifikationsbäume und das Ausfüllen<br />

<strong>de</strong>r Kombinationstabelle wer<strong>de</strong>n durch <strong>de</strong>n Klassifikationsbaumeditor für eingebettete<br />

Systeme (engl. classification tree editor for embed<strong>de</strong>d systems, CTE/ES) unterstützt<br />

[Razorcat]. Der CTE/ES erlaubt die visuelle Darstellung und Bearbeitung <strong>von</strong> Testsequenzen<br />

in abstrakter Form.<br />

Im CTE/ES wird ein Klassifikationsbaum wie folgt dargestellt. Die Wurzel <strong>de</strong>s Baums<br />

repräsentiert das Testobjekt, welches nur an seinen Eingabe- und Ausgabeschnittstellen<br />

betrachtet wird. Bei <strong>de</strong>n Klassifikationen <strong>de</strong>r ersten Ebene kann es sich um eine Zusammenfassung<br />

sämtlicher Eingabeschnittstellen <strong>de</strong>s Testobjektes o<strong>de</strong>r auch um eine Auswahl<br />

<strong>de</strong>rselben han<strong>de</strong>ln. Zugehörige Klassen wer<strong>de</strong>n ohne Rechteck dargestellt. In <strong>de</strong>m Beispiel<br />

aus Abbildung 3-22 sind als Bezeichner <strong>de</strong>r Klassen die Wertebereiche verwen<strong>de</strong>t wor<strong>de</strong>n.<br />

Die Kombinationstabelle wird unter <strong>de</strong>m Klassifikationsbaum in <strong>de</strong>r Form dargestellt, dass<br />

Klassen und zugehörige Einträge in <strong>de</strong>r Tabelle untereinan<strong>de</strong>r stehen. Ein Verschieben <strong>de</strong>r<br />

Klassen o<strong>de</strong>r die Einführung neuer Klassen führt zu einer automatischen Verschiebung <strong>de</strong>r<br />

Einträge <strong>de</strong>r Kombinationstabelle. Zusätzlich bietet <strong>de</strong>r CTE/ES eine Überprüfung <strong>de</strong>r<br />

44


3. Mo<strong>de</strong>llbasiertes Testen<br />

Kombinationstabelle an. Einerseits unterbin<strong>de</strong>t er bereits beim Erstellen <strong>de</strong>r Testschritte,<br />

dass Klassen <strong>de</strong>sselben Eingangs gleichzeitig verwen<strong>de</strong>t wer<strong>de</strong>n, an<strong>de</strong>rerseits können in<br />

<strong>de</strong>n Testschritten nicht verwen<strong>de</strong>te Klassen i<strong>de</strong>ntifiziert und hervorgehoben wer<strong>de</strong>n. Die<br />

Konsistenz und die Vollständigkeit <strong>de</strong>r Kombinationstabelle in Bezug auf <strong>de</strong>n Klassifikationsbaum<br />

wer<strong>de</strong>n auf diese Weise sichergestellt.<br />

Abbildung 3-22: Klassifikationsbaumeditor<br />

Den auf die Erstellung <strong>von</strong> Klassifikationsbaum und Kombinationstabelle folgen<strong>de</strong>n<br />

Schritt <strong>de</strong>r Erzeugung konkreter Testmuster aus <strong>de</strong>n abstrakt beschriebenen Testsequenzen,<br />

unterstützt <strong>de</strong>r Klassifikationsbaumeditor nicht. Daher können <strong>mit</strong>hilfe <strong>de</strong>s CTE/ES keine<br />

konkreten Testfälle erstellt wer<strong>de</strong>n. Dies leisten unter <strong>de</strong>n Produkten <strong>de</strong>r dSPACE GmbH<br />

die Testwerkzeuge AutomationDesk [AutomationDesk] und MTest [MTest]. Mit diesen<br />

können aus im CTE/ES erstellten Klassifikationsbäumen konkrete Testmuster erzeugt<br />

wer<strong>de</strong>n [Lam04]. Ebenfalls wird durch AutomationDesk die Durchführung <strong>de</strong>rart erzeugter<br />

Testfälle unterstützt.<br />

3.5.2 Reactis<br />

Für die zufallsbasierte <strong>Testmustergenerierung</strong> ist das Softwareprodukt Reactis® [Reactis]<br />

<strong>de</strong>r Firma Reactive Systems [Reactive Systems] als Beispiel zu nennen. Dieses wird in<br />

diesem Abschnitt vorgestellt. Es besteht aus <strong>de</strong>n drei Teilkomponenten Reactis Tester,<br />

Reactis Simulator und Reactis Validator.<br />

Der Reactis Tester ermöglicht die automatische Erzeugung <strong>von</strong> Testmustern aus heterogenen<br />

Mo<strong>de</strong>llen in MATLAB Simulink und Stateflow. Die <strong>Testmustergenerierung</strong> kann<br />

durch unterschiedliche Einstellungsmöglichkeiten beeinflusst wer<strong>de</strong>n. Hierzu zählen unter<br />

45


3.5. Kommerzielle Anwendungen zur Testfallerstellung<br />

an<strong>de</strong>rem die in Kapitel 3.3 vorgestellten Ab<strong>de</strong>ckungsmaße. Die <strong>Testmustergenerierung</strong> <strong>de</strong>s<br />

Reactis Testers erfolgt aufgrund eines auf Zufall basieren<strong>de</strong>n Verfahrens. Es wer<strong>de</strong>n Testmuster<br />

erzeugt, die aus einer Sequenz <strong>von</strong> Eingabedaten bestehen, <strong>mit</strong>hilfe <strong>de</strong>rer das<br />

Mo<strong>de</strong>ll o<strong>de</strong>r eine daraus erstellte Implementierung später im Reactis Simulator o<strong>de</strong>r in<br />

MATLAB Simulink getestet wer<strong>de</strong>n können [Rea04].<br />

Der Reactis Simulator unterstützt aus Entwicklungsumgebungen bekannte Verfahren wie<br />

Einzelschritt-Ausführung, Haltepunkte und Visualisierung einzelner Variablen zur Laufzeit.<br />

Er dient hauptsächlich <strong>de</strong>r Simulation einer Testsequenz, <strong>mit</strong>hilfe <strong>de</strong>r das Mo<strong>de</strong>ll<br />

analysiert wer<strong>de</strong>n kann. Auf diese Weise kann untersucht wer<strong>de</strong>n, warum beispielsweise<br />

bei <strong>de</strong>r <strong>Testmustergenerierung</strong> eine gewünschte Ab<strong>de</strong>ckung nicht erreicht wur<strong>de</strong> [Rea04].<br />

Der Reactis Validator wird zur Überprüfung <strong>von</strong> Anfor<strong>de</strong>rungen an das Mo<strong>de</strong>ll verwen<strong>de</strong>t.<br />

Durch Analyse <strong>de</strong>s Mo<strong>de</strong>lls und durch Verwendung generierter Testmuster können<br />

Verstöße gegen einzelne Anfor<strong>de</strong>rungen aufge<strong>de</strong>ckt wer<strong>de</strong>n, die vom Entwickler spezifiziert<br />

wer<strong>de</strong>n. Vom Reactis Validator wird im Fall eines Verstoßes <strong>de</strong>m Testentwickler ein<br />

Testmuster zur Verfügung gestellt, <strong>de</strong>ssen Ausführung im Reactis Simulator zu <strong>de</strong>m<br />

aufge<strong>de</strong>ckten Verstoß führt [Rea04].<br />

3.5.3 MOTCase-X<br />

Das in Abschnitt 3.4.4 vorgestellte Verfahren <strong>de</strong>r analytischen <strong>Testmustergenerierung</strong> wird<br />

vom Testmustergenerator <strong>de</strong>r Ingenieurgesellschaft Auto und Verkehr [IAV] verwen<strong>de</strong>t.<br />

Dieser wird unter <strong>de</strong>m Namen MOTCase-X (engl. Mo<strong>de</strong>l-based Test Case Extractor)<br />

entwickelt und erzeugt Testmuster für MATLAB Simulink/Stateflowmo<strong>de</strong>lle [IAV04].<br />

Die Generierung erfolgt aufgrund blockspezifischer Regeln, die im Testmustergenerator<br />

für viele Simulink-Standardblöcke hinterlegt sind. Für nicht unterstützte Blöcke ermöglicht<br />

MOTCase-X die manuelle Erstellung <strong>von</strong> Regeln, die in die <strong>Testmustergenerierung</strong><br />

einfließen. Hierzu wur<strong>de</strong> in <strong>de</strong>n Testmustergenerator eine Komponente integriert, welche<br />

einem Testentwickler bei <strong>de</strong>r Angabe <strong>de</strong>r zu testen<strong>de</strong>n Wertebereiche hilft. Ebenso wer<strong>de</strong>n<br />

hier Regeln hinterlegt, welche die Umkehrfunktion eines Blocks beinhalten, sollte diese<br />

existieren.<br />

Abbildung 3-23: Beispielsystem<br />

Am Beispiel <strong>de</strong>s Systems aus Abbildung 3-23 wird für die <strong>Testmustergenerierung</strong> für <strong>de</strong>n<br />

Saturation-Block die Umkehrfunktion <strong>de</strong>s Gain-Blocks benötigt. Zu diesem Zweck<br />

ermöglicht <strong>de</strong>r Regelassistent aus MOTCase-X die Angabe <strong>de</strong>r Umkehrfunktion für neue<br />

Blocktypen.<br />

46


4 <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Das Ziel <strong>de</strong>r Arbeit ist es, ein Verfahren zur zufallsbasierten <strong>Testmustergenerierung</strong> zu<br />

entwickeln, welches durch einen Anwen<strong>de</strong>r zielgerichtet eingesetzt wer<strong>de</strong>n kann. Der<br />

Grundgedanke hierbei ist, eine Komponente in das automatische zufallsbasierte Verfahren<br />

zu integrieren, welche einem Testentwickler die Möglichkeit zur Steuerung <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

bietet. Durch die Kombination <strong>von</strong> automatischen <strong>mit</strong> manuellen Metho<strong>de</strong>n<br />

soll ein Synergieeffekt erreicht wer<strong>de</strong>n; d. h., die Stärken <strong>de</strong>r bei<strong>de</strong>n Verfahren wer<strong>de</strong>n<br />

vereint und ihre Schwächen durch das jeweils an<strong>de</strong>re Verfahren minimiert (Abbildung<br />

4-1). Die Hauptunterschie<strong>de</strong> <strong>de</strong>r bei<strong>de</strong>n Verfahren liegen in <strong>de</strong>r Qualität und <strong>de</strong>r Quantität<br />

<strong>de</strong>r erzeugbaren Testdaten.<br />

manuell<br />

manuell<br />

(zielgerichtet)<br />

(zielgerichtet)<br />

automatisch<br />

automatisch<br />

(zufallsbasiert)<br />

(zufallsbasiert)<br />

gesteuert<br />

gesteuert<br />

(Wahrscheinlich-<br />

(Wahrscheinlichkeitsverteilungekeitsverteilungen<br />

Abbildung 4-1: Kombination manueller und automatischer <strong>Testmustergenerierung</strong><br />

Die wesentliche Stärke automatischer Verfahren liegt in <strong>de</strong>r Anzahl <strong>de</strong>r erzeugbaren<br />

Testfälle. Die automatische <strong>Testmustergenerierung</strong> ermöglicht <strong>de</strong>m Anwen<strong>de</strong>r die schnelle<br />

Erzeugung viele Testfälle innerhalb kürzester Zeit. Die manuelle Erstellung <strong>von</strong> Testfällen<br />

erfor<strong>de</strong>rt dagegen einen erheblichen zeitlichen Aufwand, <strong>mit</strong> <strong>de</strong>m enorme Kosten verbun<strong>de</strong>n<br />

sind. Während manuell erzeugte Testfälle schwer zu warten sind [ArmOchSno04] und<br />

auf neue Systemfunktionalitäten und Modifikationen am System nur <strong>mit</strong> erheblichen<br />

Verzögerungen reagiert wer<strong>de</strong>n kann, ermöglicht es die automatische <strong>Testmustergenerierung</strong>,<br />

in relativ geringen zeitlichen Abstän<strong>de</strong>n auf <strong>de</strong>rartige Än<strong>de</strong>rungen am System zu<br />

reagieren, in<strong>de</strong>m eine erhebliche Menge neuer Testfälle in relativ kurzer Zeit zur Verfügung<br />

gestellt wird. Ein weiterer Vorteil <strong>de</strong>r automatischen <strong>Testmustergenerierung</strong> ist, dass<br />

die erstellten Testmuster in keiner Art <strong>von</strong> <strong>de</strong>r Qualität <strong>de</strong>s Testentwicklers abhängen.<br />

Während bei <strong>de</strong>r manuellen Erstellung <strong>von</strong> Tests <strong>de</strong>r Entwickler abhängig <strong>von</strong> seinen<br />

47


3.5. Kommerzielle Anwendungen zur Testfallerstellung<br />

eigenen Fähigkeiten je nach Tagesform mal bessere, mal schlechtere Testfälle erzeugt,<br />

generiert ein automatisches Verfahren im Durchschnitt Tests <strong>von</strong> ähnlicher Qualität.<br />

Dem gegenüber stehen die Stärken <strong>de</strong>r manuellen Testfallerstellung. Durch sie kann ein<br />

Entwickler gezielt Tests erzeugen. Insbeson<strong>de</strong>re sind manuelle Verfahren im Gegensatz<br />

zur zufallsbasierten automatischen <strong>Testmustergenerierung</strong> in <strong>de</strong>r Lage, Testmuster für ausgewählte<br />

Systemfunktionalitäten o<strong>de</strong>r reale Einsatzszenarien <strong>de</strong>s Systems zu erzeugen.<br />

Unter Verwendung <strong>de</strong>s Testentwicklerwissens über das System und <strong>de</strong>ssen Anwendung<br />

können auf diese Weise Testmuster erzeugt wer<strong>de</strong>n, welche gezielt sicherheitskritische<br />

Systemstellen o<strong>de</strong>r selten verwen<strong>de</strong>te Systemfunktionalitäten auf korrektes Verhalten<br />

überprüfen. Das Wissen <strong>de</strong>s Testentwicklers stammt hierbei zum einen aus <strong>de</strong>r ihm vorliegen<strong>de</strong>n<br />

Spezifikation, aufgrund <strong>de</strong>r das System erstellt wur<strong>de</strong>, zum an<strong>de</strong>ren aus seiner<br />

Erfahrung im Umgang <strong>mit</strong> <strong>de</strong>m Testobjekt und ähnlichen Systemen.<br />

Die automatische zufallsbasierte <strong>Testmustergenerierung</strong> verfügt nicht über dieses Zusatzwissen.<br />

Es besteht lediglich die Möglichkeit, Testdaten in großer Zahl zu erzeugen, so dass<br />

sich darunter auch solche befin<strong>de</strong>n, die zum Test gewünschter Funktionalitäten o<strong>de</strong>r zur<br />

Überprüfung <strong>de</strong>s Systemverhaltens in kritischen Systemzustän<strong>de</strong>n führen. Aufgrund <strong>de</strong>s<br />

Nicht<strong>de</strong>terminismus eines zufallsbasierten Vorgehens kann allerdings nicht vorhergesagt<br />

wer<strong>de</strong>n, wann und ob jemals Testdaten zur Überprüfung dieser Testziele erzeugt wer<strong>de</strong>n.<br />

Der Grund für diese Problematik liegt darin, dass die Generierung <strong>de</strong>rartiger Testdaten<br />

stark <strong>von</strong> <strong>de</strong>r Wahrscheinlichkeit abhängt, <strong>mit</strong> <strong>de</strong>r das System bei zufälligen Eingabedaten<br />

in einen kritischen Systemzustand eintritt.<br />

Aufgrund dieser Nachteile <strong>de</strong>r automatischen Metho<strong>de</strong> wird im Allgemeinen <strong>de</strong>r <strong>mit</strong> <strong>de</strong>r<br />

gezielten manuellen Erstellung <strong>von</strong> einzelnen Testfällen verbun<strong>de</strong>ne Aufwand in Kauf<br />

genommen, um die Qualität <strong>de</strong>r erzeugten Tests zu erhöhen. In dieser Arbeit wird <strong>de</strong>r<br />

Vorteil <strong>de</strong>s Entwicklerwissens in das Verfahren <strong>de</strong>r automatischen zufallsbasierten <strong>Testmustergenerierung</strong><br />

einbezogen, wodurch <strong>de</strong>r Aufwand <strong>de</strong>s Anwen<strong>de</strong>rs zur Erstellung<br />

konkreter Abfolgen <strong>von</strong> Testdaten verringert wird. Ziel ist es die zufallsbasierte Erzeugung<br />

<strong>von</strong> Testdaten <strong>de</strong>rart zu steuern, dass die Wahrscheinlichkeit <strong>de</strong>r Erzeugung gewünschter<br />

Testdaten erhöht wird.<br />

Manuelle <strong>Testmustergenerierung</strong> erfolgt über die Auswahl und Manipulation <strong>von</strong> Werten<br />

für die Eingangssignale eines Systems. Die Interaktion <strong>de</strong>s Anwen<strong>de</strong>rs <strong>mit</strong> <strong>de</strong>m Verfahren<br />

<strong>de</strong>r automatischen <strong>Testmustergenerierung</strong> beruht in dieser Arbeit auf <strong>de</strong>m gleichen<br />

Konzept. Sie erfolgt jedoch nicht über die Auswahl konkreter Testmuster, son<strong>de</strong>rn über die<br />

Auswahl <strong>von</strong> Werten, welche im automatischen Verfahren zur Bildung <strong>von</strong> Testmustern<br />

als Grundlage dienen. Die Anwendung zufallsbasierter <strong>Testmustergenerierung</strong> ermöglicht<br />

es, die Auswahl dieser Werte durch die Vorgabe <strong>von</strong> Wahrscheinlichkeitsverteilungen über<br />

<strong>de</strong>n Wertebereichen <strong>de</strong>r Eingangssignale vorzunehmen.<br />

Der Zufallsprozess <strong>de</strong>r <strong>Testmustergenerierung</strong> wird auf diese Weise vom Testentwickler<br />

gesteuert. Dabei kann dieser sein Spezialwissen in die Erzeugung <strong>von</strong> Testdaten einfließen<br />

lassen, um beispielsweise gezielt Testmuster für schwer erreichbare Systembereiche (Testschwerpunkte)<br />

zu erzeugen. Dadurch reduziert sich die Zahl <strong>de</strong>r durch das zufällige<br />

48


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Verfahren generierten Testdaten, die für einen Testschwerpunkt nicht relevant sind, auf ein<br />

notwendiges Min<strong>de</strong>stmaß, wodurch die Qualität <strong>de</strong>r automatisch erzeugten Testdaten<br />

erhöht wird.<br />

Die folgen<strong>de</strong>n Unterkapitel gehen <strong>de</strong>tailliert auf das Verfahren ein, welches <strong>de</strong>m Anwen<strong>de</strong>r<br />

die Steuerung <strong>de</strong>r zufallsbasierten <strong>Testmustergenerierung</strong> ermöglicht. Dabei wird<br />

zuerst in Unterkapitel 4.1 das Verfahren selbst beschrieben. In Abschnitt 4.2 wird auf die<br />

Einbeziehung unterschiedlicher Wahrscheinlichkeitsverteilungen in Abhängigkeit <strong>von</strong> <strong>de</strong>n<br />

verschie<strong>de</strong>nen Arten <strong>von</strong> Signaleingängen eingegangen.<br />

4.1 Zufallbasierte <strong>Testmustergenerierung</strong><br />

Das in dieser Arbeit vorgestellte Verfahren zur <strong>Testmustergenerierung</strong> basiert auf <strong>de</strong>m<br />

zufallsbasierten Verfahren aus Kapitel 3.4.2. Es han<strong>de</strong>lt sich um ein Verfahren, welches<br />

zur Erstellung <strong>von</strong> Back-to-Back-Tests (vgl. Kapitel 3.2.4) verwen<strong>de</strong>t wird. D.h., dass eine<br />

Systemrepräsentation als Testbasis zur Erzeugung <strong>von</strong> Testfällen herangezogen wird, <strong>mit</strong><br />

<strong>de</strong>nen in einer späteren Testdurchführung eine zweite Systemrepräsentation überprüft wird.<br />

Da sich diese Arbeit nicht <strong>mit</strong> dieser Testdurchführung beschäftigt, wird in diesem Kapitel<br />

lediglich auf die Erzeugung <strong>de</strong>rartiger Tests eingegangen.<br />

Als Testbasis wird das Funktionsmo<strong>de</strong>ll <strong>de</strong>s Systems verwen<strong>de</strong>t. Ausgehend <strong>von</strong> diesem<br />

Mo<strong>de</strong>ll wer<strong>de</strong>n Testdaten erzeugt, die zum Test <strong>de</strong>s daraus erstellten Implementierungsmo<strong>de</strong>lls<br />

o<strong>de</strong>r <strong>de</strong>s Programmco<strong>de</strong>s verwen<strong>de</strong>t wer<strong>de</strong>n können. Das Testziel ist die<br />

Ab<strong>de</strong>ckung ausgewählter Strukturmerkmale, <strong>mit</strong> <strong>de</strong>r sich bereits Kapitel 3.3 beschäftigt<br />

hat. Die Art dieser Strukturmerkmale, welche durch die erzeugten Testmuster ausreichend<br />

ausgeführt wer<strong>de</strong>n sollen, spielt für das Verfahren <strong>de</strong>r <strong>Testmustergenerierung</strong> keine Rolle.<br />

Die einzige Voraussetzung für die Anwendung <strong>de</strong>s beschriebenen Verfahrens ist die<br />

Möglichkeit zur Messung <strong>de</strong>s gewählten Ab<strong>de</strong>ckungskriteriums.<br />

Das vorgestellte Verfahren zur <strong>Testmustergenerierung</strong> erzeugt bei Anwendung einen Testfall,<br />

<strong>de</strong>r in <strong>de</strong>r Regel aus mehreren Testmustern besteht (vgl. Abschnitt 3.1.2). Die<br />

Erzeugung dieser Testmuster wird unter <strong>de</strong>m Ziel durchgeführt, dass eine – nach<br />

Möglichkeit – vollständige Strukturab<strong>de</strong>ckung erreicht wird. Das zugrun<strong>de</strong> liegen<strong>de</strong><br />

Verfahren wird in Abbildung 4-2 gezeigt und im Folgen<strong>de</strong>n näher beschrieben.<br />

49


4.1. Zufallbasierte <strong>Testmustergenerierung</strong><br />

Entwickler<br />

Testmuster<br />

Automatischer<br />

Testmuster-<br />

Generator<br />

Mo<strong>de</strong>llab<strong>de</strong>ckung<br />

Mo<strong>de</strong>ll<br />

Testumgebung<br />

Abbildung 4-2: <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Das Verfahren ist zyklisch aufgebaut und beruht auf <strong>de</strong>r Interaktion <strong>von</strong> zwei funktionalen<br />

Hauptkomponenten und <strong>de</strong>m Testentwickler. Am Anfang je<strong>de</strong>s Zyklus steht <strong>de</strong>r automatische<br />

Testmustergenerator (ATG), welcher die neuen Testdaten erzeugt. Auf diesen<br />

Entstehungsprozess nimmt <strong>de</strong>r Testentwickler <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Einfluss. Die Testumgebung, in die das Mo<strong>de</strong>ll eingebettet ist, führt das Messen<br />

<strong>de</strong>r Strukturab<strong>de</strong>ckung sämtlicher Testmuster eines Testfalls durch. Die Ergebnisse dieser<br />

Ab<strong>de</strong>ckungsmessung gehen daraufhin in <strong>de</strong>n Entstehungsprozess <strong>de</strong>r Testdaten <strong>de</strong>s nächsten<br />

Zyklus ein. Auf diese Weise wird pro Zyklus ein sich in Bearbeitung befin<strong>de</strong>n<strong>de</strong>s<br />

Testmuster erweitert o<strong>de</strong>r gegebenenfalls <strong>mit</strong> <strong>de</strong>r Erzeugung eines neuen Testmusters<br />

begonnen. Der konkrete Ablauf <strong>de</strong>s gesamten Verfahrens zur <strong>Testmustergenerierung</strong><br />

besteht aus <strong>de</strong>r Wie<strong>de</strong>rholung <strong>de</strong>r folgen<strong>de</strong>n Schritte, die in <strong>de</strong>n folgen<strong>de</strong>n Abschnitten<br />

näher beschrieben wer<strong>de</strong>n:<br />

• Erweiterung <strong>de</strong>s bearbeiteten Testmusters im ATG<br />

• Evaluierung <strong>de</strong>s Testmusters in <strong>de</strong>r Testumgebung<br />

• Auswertung <strong>de</strong>r Evaluierung im ATG<br />

• Fortsetzen o<strong>de</strong>r Been<strong>de</strong>n <strong>de</strong>r Generierung im ATG<br />

4.1.1 Erweiterung <strong>de</strong>s bearbeiteten Testmusters<br />

Der erste Schritt <strong>de</strong>s zyklischen Verfahrens erweitert ein Testmuster, welches aus <strong>de</strong>m<br />

vorherigen Zyklus übernommen wur<strong>de</strong>, um weitere Testvektoren, d.h. Eingabe- und Refe-<br />

50


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

renzdaten. Bei <strong>de</strong>m Testmuster, das erweitert wird, kann es sich insbeson<strong>de</strong>re im ersten<br />

Zyklus <strong>de</strong>r Ausführung <strong>de</strong>s Verfahrens um ein Testmuster <strong>de</strong>r Länge Null han<strong>de</strong>ln,<br />

welches vorerst keine Testdaten beinhaltet.<br />

Zur Erzeugung neuer Testdaten wird eine Beschreibung <strong>de</strong>r Wertebereiche sämtlicher Eingabeschnittstellen<br />

benötigt. Diese beinhaltet pro Eingangssignal In i die Menge <strong>de</strong>r<br />

möglichen Werte, die <strong>de</strong>r Signaleingang annehmen kann. Dieser Wertebereich wird <strong>mit</strong><br />

D Ini<br />

bezeichnet. Es wer<strong>de</strong>n zwei Arten <strong>von</strong> Eingangssignalen unterschie<strong>de</strong>n. Im Fall eines<br />

diskreten Eingangssignals Ini beinhaltet <strong>de</strong>r Wertebereich D Ini<br />

eine Menge <strong>mit</strong> endlich<br />

vielen Werten, die Ini annehmen kann. Ein analoges Eingangssignal zeichnet sich dagegen<br />

dadurch aus, dass es sämtliche Werte aus einem Intervall reeller Zahlen [a, b] annehmen<br />

kann.<br />

In i<br />

Zusätzlich wer<strong>de</strong>n zur Generierung über <strong>de</strong>n Wertebereichen <strong>de</strong>finierte Wahrscheinlichkeitsverteilungen<br />

benötigt. Der Testentwickler, welcher das Verfahren anwen<strong>de</strong>t, <strong>de</strong>finiert<br />

aufgrund seines Wissens über das System und <strong>de</strong>ssen Einsatz für je<strong>de</strong>s Eingangssignal In i<br />

eine Wahrscheinlichkeitsverteilung W , welche auf <strong>de</strong>n Wertebereich <strong>de</strong>s Eingangssignals<br />

beschränkt ist. Auf diese Weise gibt <strong>de</strong>r Testentwickler <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

vor, welche Eingabedaten während <strong>de</strong>r Generierung neuer Testdaten<br />

häufiger und welche weniger häufig erzeugt wer<strong>de</strong>n sollen, wodurch er <strong>de</strong>n Prozess <strong>de</strong>r<br />

Entstehung <strong>von</strong> Testdaten steuert.<br />

D In i<br />

Wertebereiche<br />

Eingabedaten<br />

Abbildung 4-3: Erzeugung <strong>von</strong> Eingabedaten<br />

Die Erzeugung neuer Testdaten erfolgt zufallsbasiert auf <strong>de</strong>n Wertebereichen<br />

<strong>de</strong>r Eingangssignale<br />

Ini, wobei die durch <strong>de</strong>n Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens angegebenen<br />

Wahrscheinlichkeitsverteilungen W (vgl. Abbildung 4-3) berücksichtigt wer<strong>de</strong>n. Auf die<br />

In i<br />

Wahl einzelner Wahrscheinlichkeitsverteilungen wird später in Abschnitt 4.2 näher<br />

eingegangen.<br />

Der ATG erzeugt für alle Eingangssignale In i eine Sequenz <strong>von</strong> Eingabedaten<br />

e i,s+1 , … , e i,s+k , wobei i ∈ {1, …, n} und n die Anzahl <strong>de</strong>r Eingangssignale <strong>de</strong>s Systems ist.<br />

Diese Sequenz hat die Länge k. Diese wird am En<strong>de</strong> <strong>de</strong>s vorherigen Zyklus o<strong>de</strong>r im Fall<br />

D Ini<br />

51


4.1. Zufallbasierte <strong>Testmustergenerierung</strong><br />

<strong>de</strong>s ersten Zyklus zu Beginn <strong>de</strong>r gesamten <strong>Testmustergenerierung</strong> festgelegt. Auf die<br />

Festlegung <strong>de</strong>r konkreten Länge in einem bestimmten Zyklus wird später in Abschnitt<br />

4.1.4 näher eingegangen. Unter Berücksichtigung <strong>de</strong>r Länge s <strong>de</strong>s bereits vorhan<strong>de</strong>nen<br />

Testmusters wer<strong>de</strong>n pro Zyklus die Eingabedaten e i,s+1 , … , e i,s+k generiert, wobei<br />

gilt: j ∈{1,...,<br />

k}:<br />

e i<br />

∈ D .<br />

∀<br />

, s+<br />

j<br />

In i<br />

Mithilfe <strong>de</strong>r erzeugten Eingabedaten wer<strong>de</strong>n die zugehörigen Referenzdaten er<strong>mit</strong>telt 2 ,<br />

welche zur späteren Testdurchführung benötigt wer<strong>de</strong>n. Die er<strong>mit</strong>telten Referenzdaten <strong>de</strong>s<br />

Ausgangssignals Out i sind r i,s+1 , … , r i,s+k und es gilt: j ∈{ 1,..., k}:<br />

r i<br />

∈ D <strong>mit</strong><br />

∀<br />

, s+<br />

j<br />

ist <strong>de</strong>r Wertebereich <strong>de</strong>s Ausgangssignals Outi, i ∈ {1, …, m} und m ist die Anzahl <strong>de</strong>r<br />

Ausgangssignale <strong>de</strong>s Systems.<br />

Die Vereinigung <strong>von</strong> Eingabe- <strong>mit</strong> Referenzdaten bil<strong>de</strong>t die Testvektoren t s+1 , …, t s+k :<br />

⎛ t1,<br />

s+<br />

j ⎞ ⎛ e1,<br />

s+<br />

j ⎞<br />

⎜ ⎟ ⎜ ⎟<br />

⎜ ... ⎟ ⎜ ... ⎟<br />

⎜ t ⎟ ⎜ ⎟<br />

n,<br />

s+<br />

j<br />

en,<br />

s+<br />

j<br />

∀j<br />

∈{ 1,..., k}:<br />

t = ⎜ ⎟ = ⎜ ⎟<br />

s+<br />

j<br />

(vgl. Kapitel 3.1.2).<br />

⎜ tn+<br />

1, s+<br />

j ⎟ ⎜ r1,<br />

s+<br />

j ⎟<br />

⎜ ⎟ ⎜ ⎟<br />

⎜<br />

...<br />

⎟ ⎜<br />

...<br />

⎟<br />

⎝tn+<br />

m,<br />

s+<br />

j ⎠ ⎝rm , s+<br />

j ⎠<br />

Durch Konkatenation dieser neu erzeugten Testvektoren <strong>mit</strong> <strong>de</strong>m bestehen<strong>de</strong>n Testmuster<br />

entsteht das folgen<strong>de</strong> Testmuster, <strong>de</strong>ssen erste s Spalten die Testvektoren <strong>de</strong>s alten Testmusters<br />

und die letzten k Spalten die neu erzeugten Testvektoren sind:<br />

Outi<br />

D Outi<br />

T<br />

⎛ e<br />

⎜<br />

⎜ M<br />

⎜en<br />

= ⎜<br />

⎜ r<br />

⎜<br />

⎜<br />

M<br />

⎝rm<br />

1,1<br />

,1<br />

1,1<br />

,1<br />

L<br />

O<br />

L<br />

L<br />

O<br />

L<br />

e<br />

e<br />

r<br />

1, s<br />

n,<br />

s<br />

r<br />

M<br />

1, s<br />

M<br />

m,<br />

s<br />

e<br />

e<br />

r<br />

1, s+<br />

1<br />

n,<br />

s+<br />

1<br />

r<br />

M<br />

1, s+<br />

1<br />

M<br />

m,<br />

s+<br />

1<br />

L<br />

O<br />

L<br />

L<br />

O<br />

L<br />

e<br />

e<br />

r<br />

1, s+<br />

k<br />

n,<br />

s+<br />

k<br />

r<br />

M<br />

1, s+<br />

k<br />

M<br />

m,<br />

s+<br />

k<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎟ .<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

Dieses Testmuster wird zur Evaluierung an die Testumgebung übergeben, was im<br />

folgen<strong>de</strong>n Abschnitt beschrieben ist.<br />

4.1.2 Evaluierung <strong>de</strong>s Testmusters<br />

In <strong>de</strong>r Testumgebung erfolgt eine Simulation sämtlicher Testmuster <strong>de</strong>s aktuellen Testfalls.<br />

Dabei wird die Strukturab<strong>de</strong>ckung <strong>de</strong>r Eingabedaten <strong>de</strong>r einzelnen Testmuster er<strong>mit</strong>telt. Zu<br />

diesem Zweck wird das Mo<strong>de</strong>ll vor <strong>de</strong>r Simulation eines Testmusters in einen Initialzustand<br />

versetzt, um zeitliche Aspekte im Systemverhalten zu berücksichtigen, welche in<br />

2 Da die Referenzdaten für das Verfahren <strong>de</strong>r Generierung <strong>von</strong> Testmustern in dieser Arbeit keine Relevanz<br />

haben, wird auf die Art ihrer Bestimmung nicht näher eingegangen.<br />

52


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

zustandsbasierten Systemen zu beachten sind. Auf diese Weise wird sichergestellt, dass die<br />

Testmuster während <strong>de</strong>r Testdurchführung dieselben Systembereiche ausführen, welche<br />

am Mo<strong>de</strong>ll während ihrer Erzeugung gemessen wur<strong>de</strong>n.<br />

Die Informationen zur Strukturab<strong>de</strong>ckung wer<strong>de</strong>n sowohl in Form <strong>de</strong>s Ab<strong>de</strong>ckungsgra<strong>de</strong>s<br />

als auch als Menge <strong>de</strong>r ausgeführten Mo<strong>de</strong>llkomponenten er<strong>mit</strong>telt. Aus <strong>de</strong>r Kombination<br />

<strong>de</strong>r Ab<strong>de</strong>ckung sämtlicher Testmuster <strong>de</strong>s Testfalls bestimmt die Testumgebung die<br />

Strukturab<strong>de</strong>ckung <strong>de</strong>s gesamten Testfalls und übergibt diese an <strong>de</strong>n ATG.<br />

4.1.3 Auswertung <strong>de</strong>r Evaluierung<br />

Die in <strong>de</strong>r Testumgebung er<strong>mit</strong>telte Strukturab<strong>de</strong>ckung <strong>de</strong>s Testfalls wird im ATG ausgewertet.<br />

Insbeson<strong>de</strong>re erfolgt eine Bewertung <strong>de</strong>r im aktuellen Zyklus neu generierten und<br />

an das bearbeitete Testmuster angehängten Testvektoren. Der erreichte Testfallab<strong>de</strong>ckungsgrad<br />

wird dazu <strong>mit</strong> <strong>de</strong>m Testfallab<strong>de</strong>ckungsgrad <strong>de</strong>s vorherigen Zyklus<br />

verglichen. Auf Basis dieses Vergleichs erfolgt eine Entscheidung darüber, ob die<br />

angehängten Testvektoren in <strong>de</strong>m bearbeiteten Testmuster verbleiben können o<strong>de</strong>r wie<strong>de</strong>r<br />

aus diesem entfernt wer<strong>de</strong>n müssen. Das zugrun<strong>de</strong> liegen<strong>de</strong> Verfahren <strong>de</strong>s Akzeptierens<br />

und Verwerfens wird im Folgen<strong>de</strong>n näher erläutert und ist in Abbildung 4-4 dargestellt.<br />

Ab<strong>de</strong>ckung<br />

gesteigert?<br />

nein<br />

Ab<strong>de</strong>ckung<br />

gesteigert?<br />

ja<br />

...<br />

Legen<strong>de</strong>:<br />

Akzeptierte Testdaten<br />

Temporär angehängte Testdaten<br />

Abbildung 4-4: Erzeugen eines Testmusters (Akzeptieren / Verwerfen)<br />

Sollte in einem Zyklus <strong>de</strong>r Testfallab<strong>de</strong>ckungsgrad durch die generierten Testdaten nicht<br />

erhöht wer<strong>de</strong>n, ist dies ein Zeichen dafür, dass diese Testdaten solche Systembereiche<br />

testen, die entwe<strong>de</strong>r durch die vorangehen<strong>de</strong>n Testdaten <strong>de</strong>s Testmusters o<strong>de</strong>r durch eines<br />

<strong>de</strong>r übrigen Testmuster <strong>de</strong>s Testfalls bereits ausgeführt wer<strong>de</strong>n. Dies ermöglicht das<br />

Herausfiltern <strong>de</strong>rjenigen Testdaten, welche unter Berücksichtigung sämtlicher bereits<br />

53


4.1. Zufallbasierte <strong>Testmustergenerierung</strong><br />

erzeugter Testdaten nicht zum Erreichen vollständiger Strukturab<strong>de</strong>ckung beitragen. Zur<br />

Optimierung <strong>de</strong>r erzeugten Testmuster wer<strong>de</strong>n diese Testdaten aus <strong>de</strong>m Testmuster, an<br />

welches sie angehängt wur<strong>de</strong>n, im selben Zyklus wie<strong>de</strong>r entfernt. Auf diese Weise wird ein<br />

Testmuster, welches <strong>von</strong> einem Zyklus in <strong>de</strong>n nächsten eingeht, nicht in je<strong>de</strong>m Zyklus<br />

verlängert.<br />

Wenn die in einem Zyklus erzeugten Testdaten zu einer Steigerung <strong>de</strong>s Testfallab<strong>de</strong>ckungsgra<strong>de</strong>s<br />

geführt haben, wer<strong>de</strong>n diese akzeptiert und verbleiben in <strong>de</strong>m Testmuster,<br />

an welches sie angehängt wur<strong>de</strong>n, wodurch das bearbeitete Testmuster wächst.<br />

Durch die Art dieses Vorgehens kann es vorkommen, dass über mehrere Zyklen hinweg<br />

das bearbeitete Testmuster nicht wächst. Insbeson<strong>de</strong>re kann <strong>de</strong>r Fall auftreten, dass ein<br />

leeres Testmuster nach einem Zyklus weiterhin die Länge Null hat. Dieses Phänomen kann<br />

auftreten, wenn beispielsweise <strong>mit</strong>hilfe <strong>von</strong> mehreren Testmustern bereits ein hoher<br />

Ab<strong>de</strong>ckungsgrad erzeugt wur<strong>de</strong> und ein neues Testmuster erzeugt wird, welches zu keiner<br />

Steigerung <strong>de</strong>r Strukturab<strong>de</strong>ckung führt.<br />

4.1.4 Fortsetzen o<strong>de</strong>r Been<strong>de</strong>n <strong>de</strong>r Generierung<br />

Der letzte Schritt eines Zyklus besteht entwe<strong>de</strong>r aus <strong>de</strong>m Been<strong>de</strong>n <strong>de</strong>r Generierung o<strong>de</strong>r<br />

aus <strong>de</strong>r Vorbereitung <strong>de</strong>s nächsten Zyklus.<br />

Die Vorbereitung <strong>de</strong>s nächsten Zyklus erfolgt abhängig <strong>von</strong> <strong>de</strong>r aktuellen Bewertung <strong>de</strong>r<br />

generierten Testdaten. Wenn diese verworfen wur<strong>de</strong>n, wird für <strong>de</strong>n nächsten Zyklus die<br />

Länge k <strong>de</strong>r zu erzeugen<strong>de</strong>n Sequenz <strong>von</strong> Testdaten erhöht. Auf diese Weise wird einem<br />

Problem entgegengewirkt, welches in Abbildung 4-5 <strong>de</strong>utlich wird.<br />

Abbildung 4-5: Notwendigkeit langer Sequenzen<br />

Der abgebil<strong>de</strong>te Zustandsautomat beinhaltet für die Mo<strong>de</strong>llab<strong>de</strong>ckungskriterien aus Kapitel<br />

3.3 lediglich drei relevante Strukturmerkmale. Bezüglich <strong>de</strong>r Zustandsab<strong>de</strong>ckung sind die<br />

bei<strong>de</strong>n Zustän<strong>de</strong> S1 und S2 relevant, bezüglich eines Bedingungsab<strong>de</strong>ckungskriteriums<br />

lediglich die Bedingung (A > 100). Das Problem bei Anwendung <strong>de</strong>s Verfahrens <strong>de</strong>r<br />

vorhergegangenen Abschnitte liegt darin, dass aus <strong>de</strong>m Initialzustand S1 heraus keine<br />

Ab<strong>de</strong>ckungssteigerung möglich ist, wenn die Länge <strong>de</strong>r neu generierten und an das<br />

Testmuster angehängten Sequenz <strong>von</strong> Testdaten nicht so groß ist, dass <strong>de</strong>r Wert <strong>de</strong>r<br />

Variablen A <strong>de</strong>n Wert 100 überschreitet. Aus diesem Grund wird die Anzahl <strong>de</strong>r zu erzeu-<br />

54


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

gen<strong>de</strong>n Testdaten für <strong>de</strong>n nächsten Zyklus erhöht. Dies kann beispielsweise durch eine<br />

Verdopplung geschehen, wodurch bei mehrmaligen „Fehlversuchen“ die Länge <strong>de</strong>r temporär<br />

angehängten Testdaten schnell steigt, bis sie <strong>de</strong>n Schwellwert <strong>von</strong> 100 überschreitet<br />

und Zustand S2 erreicht wird, wodurch <strong>de</strong>r Ab<strong>de</strong>ckungsgrad bezüglich <strong>de</strong>r Zustandsab<strong>de</strong>ckung<br />

erhöht wird.<br />

Eine weitere Problematik veranschaulicht Abbildung 4-6. Es ist notwendig nach einer<br />

„gewissen“ Anzahl generierter Testdaten, im nächsten Zyklus <strong>mit</strong> <strong>de</strong>r Generierung eines<br />

neuen Testmusters zu beginnen. Der abgebil<strong>de</strong>te Zustandsautomat beinhaltet das Problem,<br />

dass zwei Testszenarien benötigt wer<strong>de</strong>n, weil die bei<strong>de</strong>n Zustän<strong>de</strong> S2 und S3 in zwei<br />

unabhängigen Zweigen <strong>de</strong>s Systems liegen. Der Zustandsautomat kann <strong>de</strong>swegen in keiner<br />

Art und Weise <strong>von</strong> einem <strong>de</strong>r bei<strong>de</strong>n Zustän<strong>de</strong> in <strong>de</strong>n jeweils an<strong>de</strong>ren überführt wer<strong>de</strong>n.<br />

Da sie lediglich aus <strong>de</strong>m Initialzustand S1 erreichbar sind, wer<strong>de</strong>n in diesem Fall zwei<br />

Testmuster benötigt. Um diesem Problem entgegen zu wirken, muss zur Anwendung <strong>de</strong>s<br />

beschriebenen Verfahrens <strong>de</strong>r automatischen <strong>Testmustergenerierung</strong> eine obere Schranke<br />

für die Anzahl <strong>de</strong>r Testdaten angegeben wer<strong>de</strong>n, die zur Erzeugung eines Testmusters<br />

generiert und zur Evaluierung temporär an dieses angehängt wer<strong>de</strong>n. Mit an<strong>de</strong>ren Worten<br />

wird dadurch die Anzahl <strong>de</strong>r Versuche, <strong>mit</strong> einer Erweiterung eines Testmusters eine<br />

Ab<strong>de</strong>ckungssteigerung zu erreichen, beschränkt.<br />

Abbildung 4-6: Notwendigkeit mehrerer Testmuster<br />

Das Been<strong>de</strong>n <strong>de</strong>r <strong>Testmustergenerierung</strong> erfolgt in zwei Fällen. Der Trivialfall liegt vor,<br />

wenn die erzeugten Testmuster zu einer Testfallab<strong>de</strong>ckung <strong>von</strong> hun<strong>de</strong>rt Prozent führen. In<br />

diesem Fall wer<strong>de</strong>n keine weiteren Testdaten benötigt und das Verfahren terminiert. Der<br />

zweite Fall beruht auf einem Abbruchkriterium, welches vom Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens<br />

bestimmt wird. Durch die maximale Anzahl <strong>de</strong>r zu erzeugen<strong>de</strong>n Testmuster wird die Zahl<br />

<strong>de</strong>r Testmuster beschränkt, <strong>mit</strong> welchen <strong>de</strong>r ATG eine möglichst hohe Strukturab<strong>de</strong>ckung<br />

erreichen soll. Das Verfahren terminiert, sobald die angegebene Anzahl <strong>von</strong> Testmustern<br />

generiert wur<strong>de</strong>. Sollte dieser Fall eintreten, wird ein Testfall ausgegeben, welcher keine<br />

hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung erreicht. Der Anwen<strong>de</strong>r hat nun die Möglichkeit entwe<strong>de</strong>r<br />

55


4.2. Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen<br />

durch Anwendung <strong>de</strong>s Verfahrens weitere Testmuster für diesen Testfall zu erzeugen o<strong>de</strong>r<br />

<strong>mit</strong> manuellen Metho<strong>de</strong>n (vgl. Kapitel 3.4.1) gezielt Testmuster für die nicht abge<strong>de</strong>ckten<br />

Strukturmerkmale zu erzeugen.<br />

4.2 Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen<br />

Im Folgen<strong>de</strong>n wird auf die Wahrscheinlichkeitsverteilungen eingegangen, welche durch<br />

<strong>de</strong>n Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens angegeben wer<strong>de</strong>n. Diese bil<strong>de</strong>n als Kern <strong>de</strong>s Verfahrens<br />

das Mittel zur Steuerung <strong>de</strong>s Zufallprozesses, <strong>de</strong>r zur Erzeugung <strong>von</strong> Testdaten führt. Wie<br />

bereits in Abschnitt 4.1.1 erwähnt, erfolgt die Generierung <strong>de</strong>r Eingabedaten aufgrund <strong>von</strong><br />

Wahrscheinlichkeitsverteilungen, welche über <strong>de</strong>n Wertebereichen <strong>de</strong>r Eingangssignale<br />

<strong>de</strong>finiert sind.<br />

Die Definition dieser Wahrscheinlichkeitsverteilungen wird dabei durch <strong>de</strong>n Testentwickler<br />

vorgenommen. Es wer<strong>de</strong>n zwei Arten <strong>von</strong> Eingabeschnittstellen unterschie<strong>de</strong>n.<br />

Diskrete Eingangssignale können nur eine begrenzte Anzahl <strong>von</strong> Werten annehmen.<br />

Beispiele hierfür sind beispielsweise die Schalter zur Einstellung <strong>de</strong>r Geschwindigkeit <strong>de</strong>s<br />

Scheibenwischers und <strong>de</strong>r Lüftung im Automobil, welche die Einstellung mehrerer<br />

Geschwindigkeitsstufen ermöglichen. Die zweite Art <strong>von</strong> Eingangssignalen sind analoge<br />

Signale, welche sämtliche Werte eines kontinuierlichen Wertebereichs annehmen können.<br />

Hierzu zählen zum Beispiel die Sensorsignale, welche im Automobil <strong>de</strong>m Antiblockiersystem<br />

die aktuelle Rotationsgeschwindigkeit <strong>de</strong>r Rä<strong>de</strong>r <strong>mit</strong>teilen.<br />

4.2.1 Diskrete Eingangssignale<br />

Bei diskreten Eingangssignalen han<strong>de</strong>lt es sich um Eingangssignale <strong>de</strong>s Systems, welche<br />

Werte eines endlichen Wertebereichs annehmen können. In Abbildung 4-7 ist das<br />

Stateflowmo<strong>de</strong>ll Automat_diskret als Beispielsystem gegeben, welches in drei<br />

Zustandsübergängen <strong>de</strong>n Wert <strong>de</strong>s Eingangssignals In1 <strong>mit</strong> <strong>de</strong>m Wert 7 vergleicht. Der<br />

Zustandsübergang <strong>von</strong> S0 nach S1 erfolgt, wenn das Signal In1 einen Wert größer als<br />

sieben annimmt. Entsprechend erfolgt <strong>de</strong>r Zustandsübergang <strong>von</strong> S1 nach S2 nur bei <strong>de</strong>m<br />

Wert sieben und <strong>de</strong>r Zustandsübergang <strong>von</strong> S2 nach S0 bei Werten unterhalb <strong>von</strong> Sieben.<br />

Sei <strong>de</strong>r Wertebereich D In1 <strong>de</strong>s Eingangssignals In1 auf ganzzahlige Werte aus <strong>de</strong>m Intervall<br />

[1, 10] beschränkt. Die automatische <strong>Testmustergenerierung</strong>, wie sie in Abschnitt 4.1<br />

vorgestellt wur<strong>de</strong>, erzeugt <strong>mit</strong>hilfe eines Zufallszahlengenerators für In1 Werte aus<br />

D In1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}. Dies erfolgt unter <strong>de</strong>r Berücksichtigung einer diskreten<br />

Wahrscheinlichkeitsverteilung. Das Eingangssignal In1 wird hierzu aus mathematischer<br />

Sicht als diskrete Zufallsvariable X In1 betrachtet, welche sämtliche Werte aus D In1 annehmen<br />

kann (vgl. Anhang A Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung).<br />

56


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Abbildung 4-7: Beispielmo<strong>de</strong>ll Automat_diskret<br />

Eine diskrete Wahrscheinlichkeitsverteilung ermöglicht die Bevorzugung einzelner Werte,<br />

die eine Zufallsvariable annehmen kann. Der Testentwickler gibt aufgrund <strong>de</strong>r ihm<br />

bekannten Mo<strong>de</strong>llstruktur Wahrscheinlichkeiten für je<strong>de</strong>n <strong>de</strong>r Werte aus D In1 an, wodurch<br />

er gezielt die Generierung bestimmter Testdaten bevorzugen o<strong>de</strong>r benachteiligen kann. Zur<br />

Angabe einer korrekten Wahrscheinlichkeitsverteilung ist zu beachten, dass die Summe<br />

<strong>de</strong>r Einzelwahrscheinlichkeiten <strong>de</strong>n Wert eins ergeben muss. In Tabelle 4-1 sind<br />

beispielhaft zwei Wahrscheinlichkeitsverteilungen <strong>de</strong>r zu In1 zugehörigen Zufallsvariablen<br />

X In1 abgebil<strong>de</strong>t. Die erste Spalte beinhaltet die Werte, welche die Zufallsvariable X In1<br />

annehmen kann, also <strong>de</strong>n Wertebereich D In1 .<br />

x i P 1 (X In1 = x i ) P 2 (X In1 = x i )<br />

1 0,1 0 ,05<br />

2 0,1 0 ,05<br />

3 0,1 0 ,05<br />

4 0,1 0 ,05<br />

5 0,1 0 ,05<br />

6 0,1 0 ,05<br />

7 0,1 0 , 3<br />

8 0,1 0 , 1<br />

9 0,1 0 , 1<br />

10 0,1 0 , 1<br />

Tabelle 4-1: Beispiele für diskrete Wahrscheinlichkeitsverteilungen<br />

Es wer<strong>de</strong>n zwei Wahrscheinlichkeitsverteilungen gegenübergestellt. In <strong>de</strong>r zweiten Spalte<br />

ist die Wahrscheinlichkeitsverteilung P 1 abgebil<strong>de</strong>t, in <strong>de</strong>r sämtliche Werte aus D In1 die<br />

gleiche Wahrscheinlichkeit haben. Diese Wahrscheinlichkeitsverteilung (Gleichverteilung)<br />

ist die Grundlage <strong>de</strong>s allgemeinen zufallsbasierten Verfahrens zur <strong>Testmustergenerierung</strong><br />

aus Kapitel 3.4.2. Durch Angabe einer Gleichverteilung wer<strong>de</strong>n während <strong>de</strong>r Generierung<br />

57


4.2. Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen<br />

<strong>von</strong> Testdaten sämtliche möglichen Werte im Durchschnitt gleichhäufig erzeugt. Es fin<strong>de</strong>t<br />

folglich keine Bevorzugung einzelner Werte statt.<br />

Im Gegensatz dazu wer<strong>de</strong>n durch die Angabe <strong>de</strong>r Wahrscheinlichkeitsverteilung P 2 einzelne<br />

Werte aus D In1 stark bevorzugt. Der Wertebereich ist in drei Teilbereiche unterteilt,<br />

welche jeweils <strong>mit</strong> einem Drittel Wahrscheinlichkeit versehen sind. Die Werte kleiner<br />

sieben haben jeweils eine Wahrscheinlichkeit <strong>von</strong> 0 ,05<br />

, wodurch die Summe ihrer Wahrscheinlichkeiten<br />

ein Drittel ergibt. Der zweite Teilbereich beinhaltet lediglich <strong>de</strong>n Wert 7,<br />

welchem die Wahrscheinlichkeit 0 , 3 zugeordnet wird. Die Werte oberhalb <strong>von</strong> Sieben<br />

wur<strong>de</strong>n jeweils <strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeit 0 , 1 versehen, wodurch dieser Teilbereich<br />

ebenfalls ein Drittel Wahrscheinlichkeit hat.<br />

Der zugrun<strong>de</strong> liegen<strong>de</strong> Gedanke bei Angabe dieser Wahrscheinlichkeitsverteilung ist die<br />

Gleichbehandlung <strong>de</strong>r drei Bedingungen an <strong>de</strong>n Zustandsübergängen <strong>de</strong>s Mo<strong>de</strong>lls.<br />

Während bei <strong>de</strong>r Gleichverteilung P 1 die Wahrscheinlichkeit, dass ausgehend <strong>von</strong> Zustand<br />

S1 <strong>de</strong>r Zustandsübergang zu S2 erfolgt, bei einem generierten Testdatum bei 0,1 liegt,<br />

wur<strong>de</strong> <strong>mit</strong>hilfe <strong>von</strong> P2 diese Übergangswahrscheinlichkeit auf 0 , 3 erhöht. Unter Verwendung<br />

<strong>von</strong> P1 müssen im Erwartungswert zehn Testdaten generiert wer<strong>de</strong>n, bis unter ihnen<br />

einmal <strong>de</strong>r Wert 7 vorkommt. Im Gegensatz dazu liegt <strong>de</strong>r Erwartungswert hierfür bei <strong>de</strong>r<br />

Generierung auf Basis <strong>von</strong> P2 bei drei Testdaten. Auf diese Weise kann durch eine vom<br />

Testentwickler angegebene Wahrscheinlichkeitsverteilung die Anzahl <strong>de</strong>r zu generieren<strong>de</strong>n<br />

Testdaten reduziert wer<strong>de</strong>n. Dies führt zu einer effizienteren Generierung <strong>von</strong><br />

Testdaten.<br />

Die bei<strong>de</strong>n vorgestellten Wahrscheinlichkeitsverteilungen wur<strong>de</strong>n anhand <strong>de</strong>s Beispielmo<strong>de</strong>lls<br />

aus Abbildung 4-7 (Automat_diskret) zur <strong>Testmustergenerierung</strong> verwen<strong>de</strong>t.<br />

Dies erfolgte unter <strong>de</strong>r Verwendung <strong>de</strong>s Testmustergenerators TestCaseComman<strong>de</strong>r,<br />

welcher im Verlauf dieser Arbeit implementiert wur<strong>de</strong> und in Kapitel 5 näher beschrieben<br />

ist. Die Ergebnisse <strong>de</strong>r <strong>Testmustergenerierung</strong> wer<strong>de</strong>n in Kapitel 6.1 vorgestellt.<br />

4.2.2 Analoge Mo<strong>de</strong>lleingänge<br />

Insbeson<strong>de</strong>re im Automobilbereich treten häufig analoge Eingangssignale auf. Die mathematische<br />

Betrachtung <strong>de</strong>rartiger Signale erfolgt in dieser Arbeit als kontinuierliche<br />

Zufallsvariable, welche sämtliche reelle Werte eines Wertebereichs annehmen kann. Die<br />

Angabe <strong>von</strong> Wahrscheinlichkeiten für einzelne Werte kontinuierlicher Zufallsvariablen ist<br />

nicht möglich (vgl. Anhang A Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung). Statt<strong>de</strong>ssen<br />

erfolgt <strong>mit</strong>hilfe <strong>de</strong>r Wahrscheinlichkeitsdichte die Angabe <strong>von</strong> Wahrscheinlichkeiten für<br />

beliebig kleine Intervalle <strong>de</strong>s Wertebereichs.<br />

Zur Veranschaulichung <strong>de</strong>r Behandlung analoger Mo<strong>de</strong>lleingänge in dieser Arbeit wird das<br />

Beispielmo<strong>de</strong>ll aus Abbildung 4-8 betrachtet. Es han<strong>de</strong>lt sich um ein Stateflowmo<strong>de</strong>ll,<br />

welches in drei Zustandsübergängen auf <strong>de</strong>n Wert <strong>de</strong>s Eingangssignals In1 reagiert. Der<br />

Zustandsübergang <strong>von</strong> S0 nach S1 erfolgt, wenn das Signal In1 einen Wert größer als 7.5<br />

annimmt. Entsprechend erfolgt <strong>de</strong>r Zustandsübergang <strong>von</strong> S1 nach S2 nur in <strong>de</strong>m Werte-<br />

58


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

bereich <strong>von</strong> 6.5 bis 7.5 und <strong>de</strong>r Zustandsübergang <strong>von</strong> S2 nach S0 bei Werten unterhalb<br />

<strong>von</strong> 6.5.<br />

Abbildung 4-8: Beispielmo<strong>de</strong>ll Automat_analog<br />

Es sei für die folgen<strong>de</strong>n zwei Abschnitte <strong>de</strong>r Wertebereich D In1 <strong>de</strong>s Eingangssignals In1<br />

auf das Intervall [1, 10] beschränkt. Die automatische <strong>Testmustergenerierung</strong> erzeugt<br />

<strong>mit</strong>hilfe eines Zufallszahlengenerators für In1 Werte aus D In1 = [1, 10]. Dies erfolgt in <strong>de</strong>n<br />

folgen<strong>de</strong>n zwei Abschnitten auf unterschiedliche Art und Weise. In Abschnitt 4.2.2.1<br />

erfolgt die Anwendung einer diskreten Wahrscheinlichkeitsverteilung auf <strong>de</strong>m analogen<br />

Signaleingang In1. Der Einsatz einer kontinuierlichen Wahrscheinlichkeitsdichte wird in<br />

Abschnitt 4.2.2.2 beschrieben.<br />

4.2.2.1 Diskretisierung <strong>de</strong>s Wertebereichs<br />

Die Diskretisierung <strong>de</strong>s Wertebereichs eines analogen Eingangssignals ermöglicht die<br />

Anwendung einer diskreten Wahrscheinlichkeitsverteilung gemäß Unterkapitel 4.2.1.<br />

Hierzu wird <strong>de</strong>r Wertebereich <strong>de</strong>s Eingangssignals <strong>mit</strong>hilfe <strong>de</strong>r Klassifikationsbaummetho<strong>de</strong><br />

aus Kapitel 3.4.1 auf eine o<strong>de</strong>r mehrere Klassen abgebil<strong>de</strong>t. Die <strong>Testmustergenerierung</strong><br />

erfolgt dann nicht mehr anhand <strong>de</strong>r ursprünglichen Wertebereiche <strong>de</strong>r<br />

Eingangssignale, son<strong>de</strong>rn aufgrund <strong>de</strong>r Indizes <strong>de</strong>r gebil<strong>de</strong>ten Klassen. Das hierzu<br />

notwendige Vorgehen wird im Folgen<strong>de</strong>n anhand <strong>de</strong>s Beispielsystems aus Abbildung 4-8<br />

näher erläutert.<br />

Aufgrund <strong>de</strong>r Mo<strong>de</strong>llstruktur bietet sich die Aufteilung <strong>de</strong>s Wertebereichs D In1 in drei<br />

Teilbereiche während <strong>de</strong>r <strong>Testmustergenerierung</strong> an. Das Motiv hinter dieser Aufteilung<br />

ist wie bereits in Abschnitt 4.2.1 erwähnt die gewünschte Gleichbehandlung <strong>de</strong>r drei<br />

Bedingungen an <strong>de</strong>n Zustandsübergängen. Deshalb wer<strong>de</strong>n die gewählten Wertebereiche<br />

im Folgen<strong>de</strong>n als Äquivalenzklassen bezeichnet. Eine aufgrund <strong>de</strong>r Übergangsbedingungen<br />

<strong>de</strong>s Statecharts gewählte Aufteilung in drei Teilbereiche liefert die Äquivalenzklassen<br />

Klasse 1 = [1, 6.5[, Klasse 2 = [6.5, 7.5] und Klasse 3 = ]7.5, 10].<br />

59


4.2. Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen<br />

Im zweiten Schritt <strong>de</strong>s Verfahrens wer<strong>de</strong>n die gebil<strong>de</strong>ten Äquivalenzklassen jeweils auf<br />

einen Wert abgebil<strong>de</strong>t. Zu diesem Zweck wer<strong>de</strong>n die gewählten Äquivalenzklassen <strong>mit</strong><br />

einer Nummer versehen. Durch dieses Vorgehen wur<strong>de</strong> <strong>de</strong>r Wertebereich <strong>de</strong>s Eingangssignals<br />

In1 im Beispielsystem auf die Menge {1, 2, 3} abgebil<strong>de</strong>t. In Abbildung 4-9 ist <strong>de</strong>r<br />

vollständige Vorgang <strong>de</strong>r Diskretisierung dargestellt.<br />

Inputs<br />

In1<br />

[1, 10]<br />

Klasse 1<br />

[1, 6.5[<br />

Klasse 2<br />

[6.5, 7.5]<br />

Klasse 3<br />

]7.5, 10]<br />

1 2 3<br />

Abbildung 4-9: Diskretisierung<br />

Die zufallsbasierte <strong>Testmustergenerierung</strong> erfolgt nach Anwendung einer Diskretisierung<br />

aufgrund <strong>de</strong>r Nummern <strong>de</strong>r Äquivalenzklassen, also aufgrund <strong>de</strong>s Wertebereichs<br />

D diskretisiert = {1, 2, 3}. Dieses Vorgehen ermöglicht die Anwendung einer diskreten Wahrscheinlichkeitsverteilung<br />

über <strong>de</strong>n Indizes <strong>de</strong>r Äquivalenzklassen. Das dazu notwendige<br />

Vorgehen wur<strong>de</strong> bereits in Abschnitt 4.2.1 vorgestellt. An dieser Stelle ist anzumerken,<br />

dass die <strong>Testmustergenerierung</strong> in diesem Fall keine anwendbaren Testmuster erzeugt. Es<br />

wer<strong>de</strong>n lediglich die <strong>de</strong>n Klassen zugeordneten Nummern generiert, wodurch abstrakte<br />

Testmuster entstehen (vgl. Kapitel 3.4.1).<br />

Das in dieser Arbeit vorgestellte Verfahren zur <strong>Testmustergenerierung</strong> erfor<strong>de</strong>rt jedoch<br />

konkrete Testmuster, anhand <strong>de</strong>rer die Ab<strong>de</strong>ckungsmessung erfolgen kann. Hierzu müssen<br />

aus <strong>de</strong>n abstrakten Testmustern konkrete Testmuster erzeugt wer<strong>de</strong>n. Dies erfolgt in<br />

diesem Abschnitt in <strong>de</strong>r Testumgebung, welche während <strong>de</strong>r <strong>Testmustergenerierung</strong> die<br />

generierten Nummern <strong>de</strong>r Äquivalenzklassen auf Werte ihrer Wertebereiche abbil<strong>de</strong>t.<br />

Diese Abbildung kann sowohl zufallsbasiert als auch <strong>mit</strong> <strong>de</strong>r Mittelwertmetho<strong>de</strong> erfolgen,<br />

welche aus <strong>de</strong>m Wertebereich einer Klasse ihren Mittelwert berechnet und als Repräsentant<br />

<strong>de</strong>r Klasse wählt. Da die Anwendung <strong>de</strong>r Klassifikationsbaummetho<strong>de</strong> aufgrund<br />

<strong>de</strong>r Unifor<strong>mit</strong>ätshypothese erfolgt (vgl. Kapitel 3.4.1 und Barbey [Bar97]), können sämtliche<br />

Werte <strong>de</strong>s Wertebereichs einer Äquivalenzklasse als gleichwertig angesehen wer<strong>de</strong>n.<br />

Dies be<strong>de</strong>utet, dass <strong>de</strong>r Testentwickler <strong>de</strong>n Wertebereich einer Klasse so ausgewählt hat,<br />

dass durch Anwendung seiner Werte ein sehr ähnliches bis i<strong>de</strong>ntisches Verhalten im<br />

Testobjekt hervorgerufen wird. Die Auswahl eines zufälligen Wertes ist folglich nicht<br />

schlechter als die Mittelwertmetho<strong>de</strong>.<br />

60


4. <strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>Hilfe</strong> <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

Die in <strong>de</strong>r Testumgebung erfolgte Abbildung abstrakter Testdaten auf konkrete Eingabewerte<br />

dient lediglich <strong>de</strong>m Zweck <strong>de</strong>r Ab<strong>de</strong>ckungsmessung. Das Ergebnis <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

bleiben jedoch die abstrakten Testmuster, welche lediglich die Nummern <strong>de</strong>r<br />

Äquivalenzklassen <strong>de</strong>s diskretisierten Eingangssignals beinhalten. Während einer späteren<br />

Testdurchführung muss wie<strong>de</strong>rum die Abbildung auf konkrete Testdaten erfolgen. Durch<br />

dieses Vorgehen bleiben die bereits in Kapitel 3.4.1 genannten Vorteile <strong>de</strong>r abstrakten<br />

Testdaten erhalten.<br />

4.2.2.2 Kontinuierlicher Wertebereich<br />

Der Kern <strong>de</strong>s Verfahrens in diesem Unterkapitel liegt darin, dass <strong>de</strong>r Testentwickler eine<br />

kontinuierliche Wahrscheinlichkeitsverteilung vorgibt. Dies erfolgt durch Angabe einer<br />

Funktion, bei <strong>de</strong>r es sich um eine stetige Wahrscheinlichkeitsdichte f(x) han<strong>de</strong>lt (vgl.<br />

Anhang A Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung). Die Angabe einer Wahrscheinlichkeitsdichte<br />

ermöglicht keine Bevorzugung einzelner Werte wie es in Abschnitt<br />

4.2.1 <strong>de</strong>r Fall war, da je<strong>de</strong>s noch so kleine Teilintervall [a, b] <strong>mit</strong> a ≠ b unendlich viele<br />

Werte enthält. Mithilfe <strong>de</strong>r Wahrscheinlichkeitsdichte erfolgt vielmehr eine Gewichtung<br />

über Teilintervalle.<br />

Ein wichtiger Aspekt <strong>de</strong>r Wahrscheinlichkeitsdichte ist, dass die Fläche unter <strong>de</strong>m<br />

Graphen im Wertebereich <strong>de</strong>s Eingangssignals <strong>de</strong>n Wert Eins haben muss. Die Wahrscheinlichkeit,<br />

dass Werte aus einem Teilintervall [a, b] generiert wer<strong>de</strong>n, kann <strong>mit</strong> <strong>de</strong>r<br />

folgen<strong>de</strong>n Formel bestimmt wer<strong>de</strong>n und entspricht <strong>de</strong>r Fläche unter <strong>de</strong>m Graphen <strong>de</strong>r<br />

Wahrscheinlichkeitsdichte in <strong>de</strong>m jeweiligen Teilintervall:<br />

b<br />

∫<br />

P ( a ≤ X ≤ b)<br />

= f ( x)<br />

dx , wobei a < b gilt.<br />

a<br />

Die Angabe einer konkreten Funktion als mathematische Formel fällt einem Testentwickler<br />

in <strong>de</strong>r Regel sehr schwer, wenn dies überhaupt möglich ist. Deshalb wird entsprechend<br />

<strong>de</strong>m Vorgehen bei <strong>de</strong>r manuellen Testfallerstellung an dieser Stelle da<strong>von</strong> ausgegangen,<br />

dass Schwerpunkte mo<strong>de</strong>lliert wer<strong>de</strong>n, sodass Werte bestimmter Bereiche bevorzugt und<br />

Werte an<strong>de</strong>rer Bereiche vernachlässigt wer<strong>de</strong>n.<br />

Zu diesem Zweck wird in dieser Arbeit die Wahrscheinlichkeitsdichte in Form einer<br />

Menge <strong>von</strong> Stützstellen angegeben. Die Dichtefunktion f(x) wird aus diesen <strong>mit</strong>tels<br />

Interpolation <strong>mit</strong> kubischen Splines er<strong>mit</strong>telt, wodurch eine stetig differenzierbare Funktion<br />

entsteht. Da die Interpolation an sich für das Verfahren <strong>de</strong>r <strong>Testmustergenerierung</strong> in<br />

dieser Arbeit keine Rolle spielt, wird auf diesen Aspekt an dieser Stelle nicht weiter<br />

eingegangen. Die Interpolation wird lediglich dazu verwen<strong>de</strong>t, zwischen <strong>de</strong>n Stützstellen<br />

eine stetig differenzierbare Funktion zu erhalten, wodurch <strong>de</strong>r Graph <strong>de</strong>r Funktion keine<br />

Knicke enthält. Informationen über die mathematischen Hintergrün<strong>de</strong> sind unter an<strong>de</strong>rem<br />

in [Roo99] gegeben. Auf diese Weise kann <strong>de</strong>r Testentwickler durch Verschieben <strong>von</strong><br />

Stützstellen o<strong>de</strong>r die Angabe neuer Stützstellen die Dichtefunktion beliebig verän<strong>de</strong>rn, bis<br />

die geplanten Schwerpunkte während <strong>Testmustergenerierung</strong> gesetzt wur<strong>de</strong>n.<br />

61


4.2. Steuerung <strong>de</strong>s Zufallprozesses <strong>mit</strong> Wahrscheinlichkeitsverteilungen<br />

Abbildung 4-10 zeigt eine solche Wahrscheinlichkeitsdichte. Die fünf zur Erstellung <strong>de</strong>r<br />

Dichtefunktion verwen<strong>de</strong>ten Stützstellen sind darin als Kreuze gekennzeichnet und liegen<br />

an <strong>de</strong>n Stellen 1, 6, 7, 8 und 10.<br />

Abbildung 4-10: Beispiel einer Wahrscheinlichkeitsdichte<br />

Die Erzeugung <strong>von</strong> Eingabedaten für analoge Eingangssignale <strong>de</strong>s Systems erfolgt während<br />

<strong>de</strong>r Testfallgenerierung aufgrund <strong>de</strong>r als Wahrscheinlichkeitsdichte vorgegebenen<br />

kontinuierlichen Wahrscheinlichkeitsverteilung.<br />

In Abbildung 4-10 ist beispielhaft eine Wahrscheinlichkeitsdichte über <strong>de</strong>m Intervall<br />

[1, 10] abgebil<strong>de</strong>t. Diese beruht wie<strong>de</strong>rum auf einer Dreiteilung <strong>de</strong>s Wertebereichs. So<br />

wur<strong>de</strong> eine Gewichtung vorgenommen, <strong>mit</strong> <strong>de</strong>r das Intervall [1, 6.5[ <strong>mit</strong> einem Drittel<br />

Wahrscheinlichkeit versehen wur<strong>de</strong>. Das Gleiche gilt für die bei<strong>de</strong>n Intervalle [6.5, 7.5]<br />

und ]7.5, 10]. Ausgehend vom Beispielsystem aus Abbildung 4-8 sind dadurch während<br />

<strong>de</strong>r <strong>Testmustergenerierung</strong> die drei Zustandsübergänge <strong>de</strong>rart gewichtet, dass sie jeweils<br />

<strong>mit</strong> einem Drittel Wahrscheinlichkeit ausgewählt wer<strong>de</strong>n, wenn sich das System im<br />

Zustand vor <strong>de</strong>m Zustandsübergang befin<strong>de</strong>t.<br />

Unter Verwendung <strong>de</strong>r in Abbildung 4-10 vorgestellten Wahrscheinlichkeitsverteilung<br />

wur<strong>de</strong>n Ergebnisse <strong>mit</strong> <strong>de</strong>m TestCaseComman<strong>de</strong>r erzeugt, welche in Kapitel 6.2 <strong>de</strong>n<br />

Ergebnissen <strong>de</strong>r Gleichverteilung gegenübergestellt wer<strong>de</strong>n.<br />

62


5 Implementierung <strong>de</strong>s Testfallgenerators<br />

Dieses Kapitel beschäftigt sich <strong>mit</strong> <strong>de</strong>r Implementierung <strong>de</strong>s in dieser Arbeit entwickelten<br />

Testfallgenerators TestCaseComman<strong>de</strong>r, welcher das in Kapitel 4 vorgestellte Verfahren<br />

zur <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen verwen<strong>de</strong>t.<br />

Der Testfallgenerator ist in <strong>de</strong>r in MATLAB integrierten Skriptsprache M implementiert,<br />

welche in <strong>de</strong>r Regel eine Strukturierung <strong>de</strong>r Software in mehrere Teilskripte erfor<strong>de</strong>rt. Die<br />

Softwarearchitektur <strong>de</strong>s TestCaseComman<strong>de</strong>rs unterteilt sich in das Hauptprogramm<br />

TestCaseComman<strong>de</strong>r und die Unterprogramme Generator, Reporter,<br />

Evaluator und Simulator.<br />

Test Case<br />

Comman<strong>de</strong>r<br />

Generator.m<br />

Simulator.m<br />

Interface<br />

Parameter<br />

Editor<br />

Generation<br />

Status<br />

Evaluator.m<br />

cvsim.m<br />

Input Editor<br />

Reporter.m<br />

Simulink:<br />

Mo<strong>de</strong>l Coverage Tool<br />

Weight<br />

Editor<br />

Probability Density<br />

Function Editor<br />

Abbildung 5-1: Softwarestruktur <strong>de</strong>s TestCaseComman<strong>de</strong>rs<br />

cvhtml.m<br />

Zur graphischen Benutzeroberfläche (engl. Graphical User Interface, GUI) zählen neben<br />

<strong>de</strong>m Hauptfenster TestCaseComman<strong>de</strong>r und kleineren Dialogen die Hauptdialoge Interface<br />

Parameter Editor, Input Editor, Weight Editor, Probability Density Function Editor und<br />

Generation Status, welche in Abbildung 5-1 farblich hervorgehoben sind. Die zwei Skripte<br />

cvsim und cvhtml bil<strong>de</strong>n die einzigen externen Komponenten, welche nicht in dieser<br />

Arbeit implementiert wur<strong>de</strong>n. Diese gehören zum Simulink Mo<strong>de</strong>l Coverage Tools<br />

[SimModCov], welches <strong>von</strong> The Mathworks [Mathworks] als Zusatzkomponente <strong>de</strong>r Entwicklungsumgebung<br />

MATLAB vertrieben wird. Es dient <strong>de</strong>r Messung verschie<strong>de</strong>ner<br />

Ab<strong>de</strong>ckungskriterien für Mo<strong>de</strong>lle aus MATLAB Simulink und Stateflow.<br />

Die nachfolgen<strong>de</strong>n Unterkapitel gehen <strong>de</strong>tailliert auf die genannten Unterprogramme und<br />

GUI-Komponenten ein. Dies erfolgt anhand <strong>de</strong>r in Kapitel 4.2 verwen<strong>de</strong>ten Beispielsysteme.<br />

Zuerst wird in Unterkapitel 5.1 das Hauptprogramm vorgestellt, über das die übrigen<br />

Programmteile durch <strong>de</strong>n Anwen<strong>de</strong>r aufgerufen wer<strong>de</strong>n. Daran anschließend wird in<br />

63


5.1. Das Hauptprogramm: TestCaseComman<strong>de</strong>r<br />

Unterkapitel 5.2 die Funktionalität <strong>de</strong>r wichtigsten Hauptdialoge beschrieben, welche unter<br />

an<strong>de</strong>rem die Angabe <strong>de</strong>r zu verwen<strong>de</strong>n<strong>de</strong>n Wahrscheinlichkeitsverteilungen ermöglichen.<br />

Die Implementierung <strong>de</strong>s verwen<strong>de</strong>ten Verfahrens zur <strong>Testmustergenerierung</strong> folgt in<br />

Unterkapitel 5.3. Daran anschließend wird in Abschnitt 5.4 auf die Softwarekomponenten<br />

<strong>de</strong>s TestCaseComman<strong>de</strong>rs eingegangen, die <strong>von</strong> <strong>de</strong>n bereits erwähnten Komponenten<br />

verwen<strong>de</strong>t wer<strong>de</strong>n. Das Unterkapitel 5.5 geht auf die Testumgebung ein, in die das<br />

Testobjekt zur Anwendung <strong>de</strong>s TestCaseComman<strong>de</strong>rs eingebettet wer<strong>de</strong>n muss.<br />

5.1 Das Hauptprogramm: TestCaseComman<strong>de</strong>r<br />

Das M-Skript TestCaseComman<strong>de</strong>r.m ist das Hauptprogramm, <strong>mit</strong> welchem die<br />

grafische Oberfläche <strong>de</strong>s Testfallgenerators gestartet wird. Das zugehörige Hauptfenster<br />

<strong>de</strong>s TestCaseComman<strong>de</strong>rs bietet <strong>de</strong>m Anwen<strong>de</strong>r eine Darstellung <strong>de</strong>s aktuell bearbeiteten<br />

Testfalls (engl. Test Case) in zwei Arbeitsbereichen. In Abbildung 5-2 ist dieses <strong>mit</strong> <strong>de</strong>n<br />

vorgenommenen Einstellungen für das Beispielmo<strong>de</strong>ll Automat_diskret (vgl. Kapitel<br />

4.2.1 dargestellt.<br />

Abbildung 5-2: Hauptfenster <strong>de</strong>s TestCaseComman<strong>de</strong>rs<br />

Der linke Arbeitsbereich zeigt die zur Generierung neuer Testmuster benötigten Konfigurationsmöglichkeiten.<br />

Zusätzlich wird an dieser Stelle die aktuell erreichte<br />

Mo<strong>de</strong>llab<strong>de</strong>ckung <strong>de</strong>s Testfalls angezeigt. Die Unterteilung in vier Teilbereiche folgt <strong>de</strong>r<br />

chronologischen Reihenfolge <strong>de</strong>r Arbeitsschritte zur Erstellung eines neuen Testfalls. Der<br />

Teilbereich General beinhaltet <strong>de</strong>n Namen <strong>de</strong>s Testfalls und einen Benutzerkommentar,<br />

wodurch <strong>de</strong>r bearbeitete Testfall durch <strong>de</strong>n Testentwickler beschrieben wer<strong>de</strong>n kann.<br />

64


5. Implementierung <strong>de</strong>s Testfallgenerators<br />

Die Definition <strong>de</strong>s Testobjektes erfolgt im zweiten Teilbereich. In diesem wird das Mo<strong>de</strong>ll<br />

<strong>de</strong>s Systems angegeben, auf Basis <strong>de</strong>ssen die Erzeugung <strong>von</strong> Testmustern erfolgen soll.<br />

Zusätzlich wird an dieser Stelle <strong>de</strong>r Parameter Simulation Sample Time <strong>de</strong>finiert, durch <strong>de</strong>n<br />

<strong>de</strong>r zeitliche Abstand <strong>de</strong>r Testschritte (vgl. Kapitel 3.1.2 Testschritt) bestimmt wird, in<br />

<strong>de</strong>nen das Mo<strong>de</strong>ll stimuliert wird. Die Beschreibung <strong>de</strong>r Eingabeschnittstellen <strong>de</strong>s Mo<strong>de</strong>lls<br />

(engl. Mo<strong>de</strong>l Inputs) ist ebenfalls Bestandteil dieses Arbeitsschritts und wird in einer separaten<br />

GUI (siehe Abschnitt 5.2.1) vorgenommen, welche über <strong>de</strong>n Button Edit geöffnet<br />

wird.<br />

Der dritte Arbeitsschritt beinhaltet die Angabe <strong>de</strong>r wichtigsten Einstellungsmöglichkeiten<br />

zur Generierung (Teilbereich Generation). Hierzu zählen unter an<strong>de</strong>rem die bereits in<br />

Kapitel 4.1.4 erwähnten Abbruchkriterien wie die maximale Anzahl an Testmustern und<br />

die maximale Anzahl an Testvektoren pro Testmuster, die während <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

erzeugt wer<strong>de</strong>n. Ebenfalls wer<strong>de</strong>n an dieser Stelle die initiale Länge <strong>de</strong>r Teilsequenz,<br />

welche pro Zyklus an das erstellte Testmuster angehängt wird, und <strong>de</strong>r Wachstumsfaktor<br />

dieser Teilsequenz angegeben (vgl. Kapitel 4.1.4).<br />

Die Angabe <strong>de</strong>r als Testziel verwen<strong>de</strong>ten Ab<strong>de</strong>ckungskriterien erfolgt ebenfalls im Teilbereich<br />

Generation. Dies geschieht durch so genannte Checkboxen, durch die eine Auswahl<br />

unter <strong>de</strong>n vom Simulink Mo<strong>de</strong>l Coverage Tool [SimModCov] angebotenen Ab<strong>de</strong>ckungskriterien<br />

getroffen wird. Zur Auswahl steht die C2-Ab<strong>de</strong>ckung (Decision Coverage), die<br />

Mehrfach-Bedingungsab<strong>de</strong>ckung (Condition Coverage) sowie die Modifizierte Mehrfach-<br />

Bedingungsab<strong>de</strong>ckung (Modified Condition / Decision Coverage) (siehe Kapitel 3.3.4.3).<br />

Zusätzlich bietet das Simulink Mo<strong>de</strong>l Coverage Tool ein weiteres Ab<strong>de</strong>ckungskriterium<br />

an, welches nicht in Kapitel 3.3 behan<strong>de</strong>lt wur<strong>de</strong>, da es nicht zu <strong>de</strong>n allgemein üblichen<br />

Ab<strong>de</strong>ckungskriterien zählt. Hierbei han<strong>de</strong>lt es sich um die Table Look-up Coverage,<br />

welche die Ab<strong>de</strong>ckung <strong>de</strong>r im Mo<strong>de</strong>ll verwen<strong>de</strong>ten Tabellen – unter an<strong>de</strong>rem in <strong>de</strong>m<br />

Simulinkblock Look-Up Table – misst. Dieses Ab<strong>de</strong>ckungskriterium steht ebenfalls <strong>de</strong>m<br />

Anwen<strong>de</strong>r <strong>de</strong>s TestCaseComman<strong>de</strong>rs zur Verfügung.<br />

Die Aktivierung <strong>de</strong>s Parameters Automatic naming hat <strong>de</strong>n Effekt, dass die während <strong>de</strong>r<br />

Generierung erzeugten Testmuster automatisch <strong>mit</strong> Namen versehen wer<strong>de</strong>n. Mit Prefer<br />

boundary values wird eingestellt, ob <strong>de</strong>r Testmustergenerator die Randwerte <strong>de</strong>r Wertebereiche<br />

analoger Eingangssignale während <strong>de</strong>r <strong>Testmustergenerierung</strong> bevorzugt generieren<br />

soll. Dadurch wird sichergestellt, dass bei einem Wertebereich [a, b] die Randwerte<br />

a und b während <strong>de</strong>r <strong>Testmustergenerierung</strong> vorkommen. Da die Wahrscheinlichkeit, dass<br />

einzelne Werte zufällig erzeugt wer<strong>de</strong>n, aus mathematischer Sicht Null ist (vgl. Anhang A<br />

Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung), ist dies die einzige Möglichkeit, durch die<br />

<strong>de</strong>r Anwen<strong>de</strong>r sicherstellen kann, dass das Testobjekt <strong>mit</strong> <strong>de</strong>n exakten Werten <strong>de</strong>r<br />

Intervallgrenzen während <strong>de</strong>r <strong>Testmustergenerierung</strong> stimuliert wird. Mithilfe <strong>de</strong>r Option<br />

Full generation report wird eingestellt, ob während <strong>de</strong>r <strong>Testmustergenerierung</strong> Zusatzinformationen<br />

angezeigt wer<strong>de</strong>n sollen, welche die Entstehung eines neuen Testmusters<br />

protokollieren.<br />

65


5.2. Die Hauptdialoge<br />

Im Teilbereich Results <strong>de</strong>s Hauptfensters wer<strong>de</strong>n permanent die aktuell erreichten Testfallab<strong>de</strong>ckungsgra<strong>de</strong><br />

<strong>de</strong>r vier unterstützten Ab<strong>de</strong>ckungskriterien angezeigt. Ebenfalls besteht<br />

hier über <strong>de</strong>n Button Show Test Case Report die Möglichkeit, einen Report zu generieren,<br />

welcher <strong>de</strong>taillierte Informationen über die durch <strong>de</strong>n Testfall erreichte Mo<strong>de</strong>llab<strong>de</strong>ckung<br />

liefert. Diese Aufgabe übernimmt die Softwarekomponente Reporter, welche in Abschnitt<br />

5.4.1 behan<strong>de</strong>lt wird.<br />

Der rechte Arbeitsbereich ist zweigeteilt. Im oberen Abschnitt wird eine Übersicht über die<br />

Testmuster geboten, aus <strong>de</strong>nen <strong>de</strong>r Testfall bereits besteht. Es besteht die Möglichkeit,<br />

einzelne Testmuster zu entfernen, zu importieren und <strong>mit</strong>tels erneuter Generierung zu<br />

ersetzen, wobei sämtliche im TestCaseComman<strong>de</strong>r vorgenommenen Einstellungen berücksichtigt<br />

wer<strong>de</strong>n. Zusätzlich besteht die Möglichkeit, einen Ab<strong>de</strong>ckungsreport für ein<br />

ausgewähltes Testmuster anzeigen zu lassen.<br />

Im unteren Teil <strong>de</strong>s rechten Arbeitsbereichs wird permanent die Mo<strong>de</strong>llab<strong>de</strong>ckung <strong>de</strong>s<br />

selektierten Testmusters angezeigt, wodurch <strong>de</strong>r Anwen<strong>de</strong>r die Möglichkeit hat, die<br />

erzeugten Testmuster zu vergleichen und bessere <strong>von</strong> schlechteren zu trennen, um gegebenenfalls<br />

ausgewählte zu entfernen o<strong>de</strong>r durch neu erzeugte Testmuster zu ersetzen.<br />

5.2 Die Hauptdialoge<br />

Dieses Unterkapitel beschäftigt sich <strong>mit</strong> <strong>de</strong>n Hauptdialogen <strong>de</strong>r grafischen Oberfläche. Die<br />

Dialoge Interface Parameter Editor und Input Editor wer<strong>de</strong>n zur Angabe <strong>de</strong>r Schnittstellenparameter<br />

<strong>de</strong>r Eingabesignale verwen<strong>de</strong>t. Mithilfe <strong>de</strong>r Dialoge Weight Editor und<br />

Probability Density Function Editor können die zu verwen<strong>de</strong>n<strong>de</strong>n diskreten und kontinuierlichen<br />

Wahrscheinlichkeitsverteilungen angegeben wer<strong>de</strong>n. Das Fenster Generation<br />

Status dient <strong>de</strong>r Anzeige <strong>von</strong> Statusinformationen während <strong>de</strong>r <strong>Testmustergenerierung</strong>.<br />

5.2.1 Interface Parameter Editor<br />

Der Dialog Interface Parameter Editor zeigt die Namen und Typen <strong>de</strong>r durch <strong>de</strong>n<br />

Testentwickler angegebenen Eingangssignale (Abbildung 5-3) und bietet die Möglichkeit,<br />

neue Eingangssignale hinzuzufügen (Add Input), ein bestehen<strong>de</strong>s zu editieren (Edit Input)<br />

o<strong>de</strong>r auch zu entfernen (Remove Input). Bei Betätigung <strong>de</strong>s Buttons Add Input wird ein<br />

neues Eingangssignal erstellt, welches durch <strong>de</strong>n Testentwickler <strong>mit</strong>hilfe <strong>de</strong>s Dialogs Input<br />

Editor beschrieben wer<strong>de</strong>n kann. Derselbe Dialog wird geöffnet, wenn über <strong>de</strong>n Button<br />

Edit Input die Beschreibung eines bestehen<strong>de</strong>n Eingangssignals bearbeitet wird.<br />

66


5. Implementierung <strong>de</strong>s Testfallgenerators<br />

Abbildung 5-3: Interface Parameter Editor<br />

5.2.2 Input Editor<br />

Wenn durch <strong>de</strong>n Testentwickler ein neues Signal hinzugefügt o<strong>de</strong>r ein bestehen<strong>de</strong>s Signal<br />

editiert wird, erfolgt dies <strong>mit</strong>hilfe <strong>de</strong>s Dialogs Input Editor (Abbildung 5-4). Dieser dient<br />

zur Beschreibung eines Eingangssignals <strong>de</strong>s Mo<strong>de</strong>lls. Die dazu benötigten Daten sind <strong>de</strong>r<br />

Name, <strong>de</strong>r Typ und <strong>de</strong>r Wertebereich <strong>de</strong>s Eingangssignals sowie die Wahrscheinlichkeitsverteilungen,<br />

<strong>von</strong> <strong>de</strong>nen die oberste während <strong>de</strong>r <strong>Testmustergenerierung</strong> verwen<strong>de</strong>t wird.<br />

Der Name eines neu erstellten Eingangssignals ist standardmäßig NewInput und muss vom<br />

Testentwickler durch <strong>de</strong>n gewünschten Namen ersetzt wer<strong>de</strong>n. Im Beispiel aus Abbildung<br />

5-4 hat das bearbeitete Eingangssignal <strong>de</strong>n Namen In1. Die bereits in Kapitel 4.2<br />

behan<strong>de</strong>lten Signaltypen wer<strong>de</strong>n durch eine Auswahl zwischen Discrete Input für ein<br />

diskretes Eingangssignal und Analog Input für ein analoges Eingangssignal unterschie<strong>de</strong>n.<br />

Der gewählte Typ beeinflusst die Art <strong>de</strong>r Angabe <strong>de</strong>s Wertebereichs (engl. Codomain)<br />

eines Eingangssignals. Die Angabe <strong>de</strong>s Wertebereichs eines diskreten o<strong>de</strong>r diskretisierten<br />

Eingangssignals erfolgt in <strong>de</strong>r mathematischen Mengenschreibweise <strong>mit</strong> <strong>de</strong>n geschweiften<br />

Klammern ’{’ und ’}’. In Abbildung 5-4 beinhaltet <strong>de</strong>r Wertebereich <strong>von</strong> In1 die ganzzahligen<br />

Werte <strong>von</strong> Eins bis Zehn. Der Wertebereich eines analogen Eingangssignals wird als<br />

Intervall angegeben (Abbildung 5-5).<br />

Im unteren Bereich <strong>de</strong>s Dialogs wird die Liste <strong>de</strong>r angegebenen Wahrscheinlichkeitsverteilungen<br />

angezeigt. Von diesen wird die oberste während <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

berücksichtigt. Mithilfe <strong>de</strong>r Buttons Move Up, Move Down können die angegebenen Wahrscheinlichkeitsverteilungen<br />

sortiert wer<strong>de</strong>n. Dies ermöglicht <strong>de</strong>m Testentwickler bei <strong>de</strong>r<br />

Generierung <strong>von</strong> mehreren Testmustern, einzelne Testmuster aufgrund unterschiedlicher<br />

Wahrscheinlichkeitsverteilungen zu erzeugen.<br />

Die Anzeige <strong>de</strong>r Wahrscheinlichkeitsverteilungen erfolgt als Angabe eines Dateinamens,<br />

wenn es sich um eine kontinuierliche Wahrscheinlichkeitsverteilung han<strong>de</strong>lt. In <strong>de</strong>r referenzierten<br />

Datei befin<strong>de</strong>t sich eine für die Testdatengenerierung optimierte Darstellung <strong>de</strong>r<br />

Wahrscheinlichkeitsdichte.<br />

67


5.2. Die Hauptdialoge<br />

Abbildung 5-4: Input Editor<br />

Abbildung 5-5: Input Editor (analog)<br />

Eine diskrete Wahrscheinlichkeitsverteilung wird durch eine Menge <strong>von</strong> Gewichten<br />

beschrieben. Dazu wird je<strong>de</strong>m Wert, <strong>de</strong>n ein Eingangssignal annehmen kann, ein Gewicht<br />

zugeordnet. Eine diskrete Wahrscheinlichkeitsverteilung P j lässt sich aus einer angegebenen<br />

Gewichtung W j berechnen, in<strong>de</strong>m für je<strong>de</strong>n Wert x i die Wahrscheinlichkeit, dass dieser<br />

während <strong>de</strong>r <strong>Testmustergenerierung</strong> erzeugt wird, <strong>mit</strong> <strong>de</strong>r folgen<strong>de</strong>n Formel berechnet<br />

wird.<br />

P(<br />

X<br />

In1<br />

= x ) =<br />

i<br />

∑<br />

x j∈D<br />

x ≠x<br />

j<br />

W ( X<br />

In1<br />

= xi<br />

)<br />

W ( X = x )<br />

In1<br />

i<br />

In1<br />

j<br />

In Abbildung 5-4 sind die bereits in Kapitel 4.2.1 (Beispielmo<strong>de</strong>ll Automat_diskret)<br />

behan<strong>de</strong>lten diskreten Wahrscheinlichkeitsverteilungen in Form <strong>von</strong> zwei Gewichtungen<br />

68


5. Implementierung <strong>de</strong>s Testfallgenerators<br />

abgebil<strong>de</strong>t. Abbildung 5-5 zeigt die entsprechen<strong>de</strong> Darstellung für die kontinuierlichen<br />

Wahrscheinlichkeitsverteilungen anhand <strong>de</strong>s Beispielmo<strong>de</strong>lls Automat_analog aus<br />

Kapitel 4.2.2.2. Die verwen<strong>de</strong>ten Wahrscheinlichkeitsverteilungen können durch <strong>de</strong>n<br />

Anwen<strong>de</strong>r einzeln <strong>mit</strong>hilfe <strong>de</strong>s Edit-Buttons modifiziert wer<strong>de</strong>n, wodurch einer <strong>de</strong>r<br />

Dialoge Weight Editor (diskreter Fall) o<strong>de</strong>r Probability Density Function Editor (analoger<br />

Fall) geöffnet wird. Diese wer<strong>de</strong>n in <strong>de</strong>n folgen<strong>de</strong>n Abschnitten behan<strong>de</strong>lt.<br />

5.2.3 Weight Editor<br />

Der Dialog Weight Editor (Abbildung 5-6) dient <strong>de</strong>r Angabe einer diskreten Wahrscheinlichkeitsverteilung,<br />

wie sie bereits im vorherigen Abschnitt erwähnt wur<strong>de</strong>. Die Angabe<br />

erfolgt <strong>mit</strong>hilfe <strong>von</strong> Gewichten. Hierzu wird in Form <strong>de</strong>r mathematischen Mengenschreibweise<br />

eine Menge <strong>von</strong> Gewichten angegeben, welche in gleicher Reihenfolge <strong>de</strong>n Werten<br />

<strong>de</strong>s diskreten Wertebereichs <strong>de</strong>s bearbeiteten Eingangssignals zugeordnet wer<strong>de</strong>n.<br />

Abbildung 5-6: Weight Editor<br />

5.2.4 Probability Density Function Editor<br />

Die Angabe einer kontinuierlichen Wahrscheinlichkeitsverteilung erfolgt <strong>mit</strong>hilfe <strong>de</strong>s Dialogs<br />

Probability Density Function Editor (Abbildung 5-7). Mit diesem wird durch eine<br />

Menge <strong>von</strong> Stützstellen eine Wahrscheinlichkeitsdichtefunktion (engl. Probability Density<br />

Function) angegeben. Zur Angabe <strong>de</strong>r kontinuierlichen Wahrscheinlichkeitsverteilung aus<br />

Kapitel 4.2.2.2 sind beispielsweise fünf Stützstellen notwendig (siehe Abbildung 5-7).<br />

Zwischen <strong>de</strong>n angegebenen Stützstellen erfolgt – wie bereits in Kapitel 4.2.2 beschrieben –<br />

eine Interpolation <strong>mit</strong> kubischen Splines, wodurch die Dichte als stetige Funktion über<br />

<strong>de</strong>m Wertebereich <strong>de</strong>s betroffenen Eingangssignals <strong>de</strong>finiert ist.<br />

Mithilfe <strong>de</strong>r Stützstellen und <strong>de</strong>s dadurch <strong>de</strong>finierten Graphen kann eine Wahrscheinlichkeit<br />

für einzelne Intervalle <strong>de</strong>s Wertebereichs angegeben wer<strong>de</strong>n. Um diese Angabe<br />

genauer vornehmen zu können, wird <strong>mit</strong> <strong>de</strong>n unteren bei<strong>de</strong>n Verstellelementen A und B in<br />

<strong>de</strong>r grafischen Oberfläche ein Intervall ausgewählt. Im Beispiel in Abbildung 5-7 wur<strong>de</strong><br />

dies für das Intervall [4.9, 5.1] getätigt.<br />

Mit <strong>de</strong>n zwei Verstellelementen für die X- und Y-Koordinaten kann eine ausgewählte<br />

Stützstelle <strong>de</strong>rart verstellt wer<strong>de</strong>n, dass die Wahrscheinlichkeit <strong>de</strong>s Intervalls [A, B] einen<br />

gewünschten Wert annimmt. Im Beispiel ist eine Wahrscheinlichkeit <strong>von</strong> ca. 33 Prozent<br />

(0.33248) für das Intervall [4.9, 5.1] eingestellt, welche im linken Bereich <strong>de</strong>s Dialogs<br />

angezeigt wird.<br />

69


5.2. Die Hauptdialoge<br />

Abbildung 5-7: Probability Density Function Editor<br />

Die angegebene Wahrscheinlichkeitsdichtefunktion wird beim Verlassen <strong>de</strong>s Dialogs über<br />

einen <strong>de</strong>r Buttons Save As…& Exit und Save & Exit in eine Datei gespeichert. Diese wird<br />

während <strong>de</strong>r <strong>Testmustergenerierung</strong> gela<strong>de</strong>n und als kontinuierliche Wahrscheinlichkeitsverteilung<br />

berücksichtigt.<br />

5.2.5 Generation Status<br />

Während das Unterprogramm Generator (siehe Kapitel 5.3) ausgeführt wird, wird <strong>de</strong>r<br />

Dialog Generation Status angezeigt (Abbildung 5-8). Dieser liefert Statusinformationen<br />

über <strong>de</strong>n Fortschritt <strong>de</strong>r <strong>Testmustergenerierung</strong>. Zu diesen zählen in erster Linie die<br />

Ab<strong>de</strong>ckungsgra<strong>de</strong> <strong>de</strong>s aktuell erzeugten Testmusters (Test Pattern Coverage) und <strong>de</strong>s<br />

gesamten Testfalls (Test Case Coverage). Ebenfalls wer<strong>de</strong>n <strong>de</strong>r Name und die Länge <strong>de</strong>s<br />

aktuellen Testmusters während <strong>de</strong>r Generierung angezeigt. Zusätzliche Informationen wie<br />

die zur <strong>Testmustergenerierung</strong> benötigte Zeit (Used Time) sowie <strong>de</strong>r Anzahl <strong>de</strong>r benötigten<br />

Testvektoren (Used test vectors) wer<strong>de</strong>n ebenfalls angezeigt. Sowohl die Länge <strong>de</strong>s<br />

aktuellen Testmusters (Actual lenght) als auch die Länge <strong>de</strong>r Teilsequenz (Probe length),<br />

welche an das aktuelle Testmuster angehängt wird, wer<strong>de</strong>n ebenfalls angezeigt (vgl.<br />

Kapitel 4). Im unteren Teil <strong>de</strong>s Dialogs wird ein Protokoll angezeigt, welches die<br />

Entstehung <strong>de</strong>r erzeugten Testmuster protokolliert. Dieses kann <strong>mit</strong>hilfe <strong>de</strong>s Buttons Save<br />

Protocol für spätere Analysen gespeichert wer<strong>de</strong>n<br />

70


5. Implementierung <strong>de</strong>s Testfallgenerators<br />

Abbildung 5-8: Generation Status<br />

Im Beispiel aus Abbildung 5-8 wur<strong>de</strong> das Testmuster <strong>mit</strong> <strong>de</strong>m Namen TestPattern_01<br />

erzeugt. Es hat eine Länge <strong>von</strong> zwei Testvektoren, zu <strong>de</strong>ssen Generierung fünf Testvektoren<br />

verwen<strong>de</strong>t wur<strong>de</strong>n.<br />

5.3 Das Verfahren zur <strong>Testmustergenerierung</strong><br />

Das im TestCaseComman<strong>de</strong>r verwen<strong>de</strong>te Verfahren zur <strong>Testmustergenerierung</strong> ist in <strong>de</strong>n<br />

drei Komponenten Generator, Evaluator und Simulator implementiert. In <strong>de</strong>r<br />

Generator-Komponente ist <strong>de</strong>r Algorithmus zur <strong>Testmustergenerierung</strong> implementiert.<br />

Dieser verwen<strong>de</strong>t die bei<strong>de</strong>n Unterprogramme Evaluator und Simulator. Mit <strong>de</strong>m<br />

Button Start Generation im Hauptfenster <strong>de</strong>s TestCaseComman<strong>de</strong>rs wird das Unterprogramm<br />

Generator aufgerufen, welches nicht nur die Funktionalität <strong>de</strong>s ATGs aus<br />

Abbildung 4-2 übernimmt, son<strong>de</strong>rn darüber hinaus das zyklische Vorgehen steuert. Dieses<br />

besteht aus <strong>de</strong>r Erzeugung <strong>von</strong> Testdaten, <strong>de</strong>r Simulation <strong>de</strong>rselben und <strong>de</strong>r Bewertung <strong>de</strong>r<br />

Testdaten.<br />

Das Unterprogramm Simulator dient <strong>de</strong>r Simulation eines Testmusters und verwen<strong>de</strong>t<br />

das M-Skript cvsim <strong>de</strong>s Simulink Mo<strong>de</strong>l Coverage Tools zur Messung <strong>de</strong>r Mo<strong>de</strong>llab<strong>de</strong>ckung.<br />

Auf <strong>de</strong>n Aspekt <strong>de</strong>r Simulation <strong>mit</strong> Ab<strong>de</strong>ckungsmessung in <strong>de</strong>r Testumgebung<br />

wird später in Abschnitt 5.5 näher eingegangen.<br />

71


5.4. Weitere Softwarekomponenten<br />

Das M-Skript Evaluator wird zur Berechnung <strong>de</strong>r Testfallab<strong>de</strong>ckung verwen<strong>de</strong>t. Es<br />

besteht aus technischen Grün<strong>de</strong>n keine Möglichkeit, bereits er<strong>mit</strong>telte Ab<strong>de</strong>ckungsgra<strong>de</strong><br />

einzelner Testmuster zu einem Testfallab<strong>de</strong>ckungsgrad zu verrechnen. Deshalb muss in<br />

je<strong>de</strong>m Zyklus unter Verwendung <strong>de</strong>r Komponente Simulator <strong>de</strong>r Testfallab<strong>de</strong>ckungsgrad<br />

bestimmt wer<strong>de</strong>n, in<strong>de</strong>m die Testmuster eines Testfalls erneut evaluiert wer<strong>de</strong>n.<br />

Die Aufgabe <strong>de</strong>r Verwaltung vorhan<strong>de</strong>ner Testmuster übernimmt während <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

ebenfalls das Unterprogramm Generator. Nach Abschluss <strong>de</strong>r Generierung<br />

wird diese Verwaltungsaufgabe allerdings an das Hauptprogramm übergeben. Aus diesem<br />

kann dann eine weitere <strong>Testmustergenerierung</strong> unter Berücksichtigung <strong>de</strong>r bereits existieren<strong>de</strong>n<br />

Testmuster angestoßen wer<strong>de</strong>n.<br />

5.4 Weitere Softwarekomponenten<br />

5.4.1 Reporter<br />

Das Unterprogramm Reporter dient zur Erzeugung eines Ab<strong>de</strong>ckungsreports. Dieser<br />

beinhaltet <strong>de</strong>taillierte Informationen über abge<strong>de</strong>ckte Mo<strong>de</strong>llbereiche. Hierbei wer<strong>de</strong>n bis<br />

auf Blockebene für alle Hierarchiestufen <strong>de</strong>s Mo<strong>de</strong>lls die Ab<strong>de</strong>ckungsgra<strong>de</strong> <strong>de</strong>r vier durch<br />

das Simulink Mo<strong>de</strong>l Coverage Tool unterstützten Ab<strong>de</strong>ckungskriterien angezeigt.<br />

Abbildung 5-9 zeigt beispielhaft einen Ausschnitt eines solchen Ab<strong>de</strong>ckungsreports (engl.<br />

Coverage Report), welcher anhand <strong>de</strong>s Beispielsystems Automat_diskret aus Kapitel<br />

4.2.1 erzeugt wur<strong>de</strong>.<br />

Abbildung 5-9: Ab<strong>de</strong>ckungsreport<br />

Die Implementierung <strong>de</strong>s TestCaseComman<strong>de</strong>rs ermöglicht die Erzeugung <strong>von</strong> <strong>de</strong>rartigen<br />

Ab<strong>de</strong>ckungsreporten sowohl für einzelne Testmuster als auch für vollständige Testfälle.<br />

72


5. Implementierung <strong>de</strong>s Testfallgenerators<br />

Die Anzeige eines Ab<strong>de</strong>ckungsreports ermöglicht <strong>de</strong>m Testentwickler die Analyse <strong>de</strong>r<br />

Testmuster <strong>de</strong>s Testfalls, welchen er gera<strong>de</strong> bearbeitet. Aufgrund <strong>von</strong> Informationen über<br />

die Mo<strong>de</strong>llab<strong>de</strong>ckung einzelner Mo<strong>de</strong>llbereiche können Mo<strong>de</strong>llbereiche i<strong>de</strong>ntifiziert<br />

wer<strong>de</strong>n, für die gezielt Testmuster erzeugt wer<strong>de</strong>n müssen, um ihre Ab<strong>de</strong>ckung zu gewährleisten.<br />

5.4.2 cvsim<br />

Das M-Skript cvsim ist Bestandteil <strong>de</strong>s Simulink Mo<strong>de</strong>l Coverage Tools. Es dient zur<br />

Simulation <strong>von</strong> Mo<strong>de</strong>llen in MATLAB Simulink/Stateflow <strong>mit</strong> gleichzeitiger Ab<strong>de</strong>ckungsmessung.<br />

Es bietet die Möglichkeit vor <strong>de</strong>r Simulation Testdaten in MATLAB zu la<strong>de</strong>n,<br />

wobei cvsim nicht die Stimulierung <strong>de</strong>s Mo<strong>de</strong>lls <strong>mit</strong> diesen übernimmt. Nähere Informationen<br />

zur Art <strong>de</strong>r Stimulierung bietet Unterkapitel 5.5. Das M-Skript cvsim dient<br />

lediglich <strong>de</strong>r Simulation eines Mo<strong>de</strong>lls in MATLAB Simulink <strong>mit</strong> gleichzeitiger Messung<br />

<strong>de</strong>r Ab<strong>de</strong>ckungsgra<strong>de</strong> bzgl. <strong>de</strong>r Ab<strong>de</strong>ckungskriterien C 2 -Ab<strong>de</strong>ckung, Mehrfach-Bedingungsab<strong>de</strong>ckung,<br />

MC/DC und Table Look-up Coverage (vgl. Abschnitt 5.1). Die während<br />

<strong>de</strong>r Simulation gemessene Mo<strong>de</strong>llab<strong>de</strong>ckung wird in speziellen Datenobjekten (cvdata<br />

objects) gespeichert.<br />

Das Unterprogramm cvsim bietet darüber hinaus die Möglichkeit, die Ausgaben eines<br />

Mo<strong>de</strong>lls während <strong>de</strong>r Simulation aufzuzeichnen und bereitzustellen. Auf diese Art und<br />

Weise kann eine Erzeugung <strong>von</strong> Referenzdaten für die spätere Testdurchführung erfolgen.<br />

Dies wur<strong>de</strong> allerdings im Rahmen dieser Arbeit nicht implementiert, da eine Verwendung<br />

<strong>de</strong>r erzeugten Testdaten in Kombination <strong>mit</strong> Referenzdaten nicht Bestandteil dieser Arbeit<br />

ist.<br />

5.4.3 cvhtml<br />

Das Unterprogramm cvhtml ist ebenfalls Bestandteil <strong>de</strong>s Simulink Mo<strong>de</strong>l Coverage Tools<br />

und dient <strong>de</strong>r Erstellung eines Ab<strong>de</strong>ckungsreports aus Informationen über die Mo<strong>de</strong>llab<strong>de</strong>ckung<br />

<strong>von</strong> Testmustern. Diese benötigt es in speziellen Datenobjekten (cvdata<br />

objects), welche beispielsweise das M-Skript cvsim liefert. Aussehen und Inhalt eines<br />

Ab<strong>de</strong>ckungsreports wur<strong>de</strong>n bereits in Abbildung 5-9 gezeigt und in Abschnitt 5.4.1 erläutert,<br />

weswegen an dieser Stelle nicht näher darauf eingegangen wird.<br />

5.5 Die Testumgebung<br />

Die in dieser Arbeit verwen<strong>de</strong>te Testumgebung (MATLAB Simulink) ermöglicht keine<br />

direkte Stimulierung <strong>de</strong>s Testobjekts <strong>mit</strong> Testdaten. Zu diesem Zweck muss das Mo<strong>de</strong>ll in<br />

die Testumgebung eingebettet wer<strong>de</strong>n. Dies erfolgt, in<strong>de</strong>m es als Teilsystem in ein Mo<strong>de</strong>ll<br />

eingefügt wird, welches die notwendigen Komponenten zur Stimulation <strong>de</strong>s Testobjekts<br />

beinhaltet. Anhand <strong>von</strong> Beispiels Automat_diskret aus Kapitel 4.2.1 wird dieses Vorgehen<br />

im Folgen<strong>de</strong>n ver<strong>de</strong>utlicht. Der in Abbildung 4-7 dargestellte Statechart ist Teil <strong>de</strong>s<br />

Simulinkmo<strong>de</strong>lls Automat_diskret, in welchem <strong>de</strong>r Statechart als Simulinkblock<br />

Chart vorkommt. Das mo<strong>de</strong>llierte System hat ein Eingangs- und ein Ausgangssignal.<br />

73


5.5. Die Testumgebung<br />

Abbildung 5-10: Einbetten <strong>de</strong>s Testobjekts in die Testumgebung<br />

Abbildung 5-10 zeigt das in ein umgeben<strong>de</strong>s Mo<strong>de</strong>ll eingebettete Testobjekt. Zur Stimulation<br />

<strong>de</strong>r Eingabeschnittstelle In1 wird <strong>de</strong>ssen Eingangssignal <strong>mit</strong> <strong>de</strong>m Simulinkblock<br />

From Workspace verbun<strong>de</strong>n. Dieser ermöglicht, dass das Testobjekt während einer<br />

Simulation pro Testschritt <strong>mit</strong> einem Testdatum aus einer in MATLAB gela<strong>de</strong>nen Sequenz<br />

<strong>von</strong> Testdaten stimuliert wird. Das La<strong>de</strong>n dieser Testdaten ist <strong>mit</strong>hilfe <strong>de</strong>s M-Skripts<br />

cvsim möglich, welches zum Starten <strong>de</strong>r Simulation <strong>mit</strong> gleichzeitiger Ab<strong>de</strong>ckungsmessung<br />

verwen<strong>de</strong>t wird (vgl. Abschnitt 5.4.2). Das Ausgangssignal Out1 wird<br />

unverän<strong>de</strong>rt nach außen weitergeleitet.<br />

74


6 Evaluierung <strong>de</strong>s Testmustergenerators<br />

Die in diesem Kapitel vorgestellten Ergebnisse wur<strong>de</strong>n durch Anwendung <strong>de</strong>s Testmustergenerators<br />

TestCaseComman<strong>de</strong>r aus Kapitel 5 anhand <strong>von</strong> ausgewählten Beispielmo<strong>de</strong>llen<br />

er<strong>mit</strong>telt. In <strong>de</strong>n Unterkapiteln 6.1 und 6.2 wird zu diesem Zweck auf einfache Beispielmo<strong>de</strong>lle<br />

aus <strong>de</strong>n vorherigen Kapiteln zurückgegriffen. Daran anschließend erfolgt in<br />

Abschnitt 6.3 die Evaluierung <strong>de</strong>s Verfahrens anhand eines komplexeren Mo<strong>de</strong>lls, welches<br />

einen Kaffeeautomaten mo<strong>de</strong>lliert. Unterkapitel 6.4 schließt das Kapitel <strong>mit</strong> einer<br />

Bewertung <strong>de</strong>r vorgestellten Ergebnisse ab.<br />

6.1 Beispielmo<strong>de</strong>ll Automat_diskret<br />

Die Ergebnisse dieses Abschnitts wur<strong>de</strong>n durch mehrfache Anwendung <strong>de</strong>s Verfahrens aus<br />

Kapitel 4 <strong>mit</strong> <strong>de</strong>m Beispielmo<strong>de</strong>ll aus Abbildung 6-1 er<strong>mit</strong>telt, welches bereits in Kapitel<br />

4.2.1 vorgestellt und in seiner Funktionalität beschrieben wur<strong>de</strong>. Das System hat ein<br />

Eingangssignal In1 und ein Ausgangssignal Out1. Die zugehörigen Wertebereiche sind<br />

D In1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} und D Out1 = {0, 1, 2}.<br />

Abbildung 6-1: Beispielmo<strong>de</strong>ll Automat_diskret 3<br />

Die Anwendung <strong>de</strong>s Verfahrens erfor<strong>de</strong>rt die Angabe einer Wahrscheinlichkeitsverteilung<br />

über <strong>de</strong>m Wertebereich je<strong>de</strong>s Eingangssignals. Es wur<strong>de</strong>n in jeweils zwanzig Durchläufen<br />

die Wahrscheinlichkeitsverteilungen P 1 und P 2 (Tabelle 6-1) für das Eingangssignal In1<br />

verwen<strong>de</strong>t. P 1 ist eine Gleichverteilung und repräsentiert das allgemeine Verfahren zur<br />

zufallsbasierten <strong>Testmustergenerierung</strong> aus Kapitel 3.4.2. Durch eine Gleichverteilung<br />

wer<strong>de</strong>n während <strong>de</strong>r Generierung <strong>von</strong> Testdaten sämtliche möglichen Werte aus D In1 im<br />

Durchschnitt gleichhäufig erzeugt, wodurch keine Bevorzugung einzelner Werte erfolgt.<br />

3 Wie<strong>de</strong>rholung <strong>von</strong> Abbildung 4-7 aus Kapitel 4.2.1 zum Vorstellen <strong>de</strong>r Evaluierungsergebnisse<br />

75


6.1. Beispielmo<strong>de</strong>ll Automat_diskret<br />

Im Gegensatz dazu dient die Wahrscheinlichkeitsverteilung P 2 zur Bevorzugung einzelner<br />

Werte aus D In1 . Dabei unterteilt P 2 <strong>de</strong>n Wertebereich D In1 in drei Teile, welche jeweils <strong>mit</strong><br />

einem Drittel Wahrscheinlichkeit versehen sind. Die Werte kleiner sieben haben jeweils<br />

eine Wahrscheinlichkeit <strong>von</strong> 0 ,05<br />

, wodurch die Summe ihrer Wahrscheinlichkeiten ein<br />

Drittel ergibt. Der zweite Teilbereich beinhaltet lediglich <strong>de</strong>n Wert Sieben, welchem die<br />

Wahrscheinlichkeit 0 , 3 zugeordnet wird. Die Werte oberhalb <strong>von</strong> Sieben wur<strong>de</strong>n jeweils<br />

<strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeit 0 , 1 versehen, wodurch dieser Teilbereich ebenfalls ein Drittel<br />

Wahrscheinlichkeit hat.<br />

x i P 1 (X In1 = x i ) P 2 (X In1 = x i )<br />

1 0,1 0 ,05<br />

2 0,1 0 ,05<br />

3 0,1 0 ,05<br />

4 0,1 0 ,05<br />

5 0,1 0 ,05<br />

6 0,1 0 ,05<br />

7 0,1 0 , 3<br />

8 0,1 0 , 1<br />

9 0,1 0 , 1<br />

10 0,1 0 , 1<br />

Tabelle 6-1: Gewählte Wahrscheinlichkeitsverteilungen 4<br />

Zur <strong>Testmustergenerierung</strong> wur<strong>de</strong> <strong>de</strong>r TestCaseComman<strong>de</strong>r verwen<strong>de</strong>t. Zur Er<strong>mit</strong>tlung<br />

aussagekräftiger Ergebnisse erfolgte dies in zwanzig Durchläufen. Dies geschah <strong>mit</strong> <strong>de</strong>m<br />

Testziel, in <strong>de</strong>m Beispielsystem Automat_diskret die Ab<strong>de</strong>ckung sämtlicher atomarer<br />

Bedingungen (vgl. Kapitel 3.3.4.3) zu erreichen. Dadurch ist das Testziel auf die Ab<strong>de</strong>ckung<br />

<strong>von</strong> (In1 > 7), (In1 == 7) und (In1 < 7) gerichtet. Diese Bedingungen<br />

müssen durch Testdaten jeweils einmal <strong>mit</strong> wahr und falsch bewertet wer<strong>de</strong>n. Zu berücksichtigen<br />

ist, dass immer nur diejenige Bedingung bewertet wird, welche an einem<br />

Zustandsübergang ausgehend vom aktuellen Zustand <strong>de</strong>s Systems liegt. Dies be<strong>de</strong>utet, dass<br />

beispielsweise vom Zustand S0 bei Anwendung eines Testdatums lediglich die Bedingung<br />

(In1 > 7) <strong>mit</strong> wahr o<strong>de</strong>r falsch bewertet wird. Die an<strong>de</strong>ren Bedingungen sind bei diesem<br />

Testdatum nicht betroffen.<br />

Eine optimale Abfolge <strong>von</strong> Testdaten, die zu hun<strong>de</strong>rtprozentiger Ab<strong>de</strong>ckung <strong>de</strong>s genannten<br />

Kriteriums führt, ist für das vorliegen<strong>de</strong> Mo<strong>de</strong>ll aus Abbildung 6-1 beispielsweise<br />

folgen<strong>de</strong>: e 1 = 5, e 2 = 8, e 3 = 5, e 4 = 7, e 5 = 8, e 6 = 5. Es ist nicht möglich, <strong>mit</strong>hilfe eines<br />

kürzeren Testmusters ebenfalls hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung zu erreichen. Mit <strong>de</strong>n<br />

Eingabedaten e 1 und e 2 wird ausgehend vom Initialzustand <strong>de</strong>s Systems S0 zuerst die<br />

4 Wie<strong>de</strong>rholung <strong>von</strong> Tabelle 4-1 aus Kapitel 4.2.1 zum Vorstellen <strong>de</strong>r Evaluierungsergebnisse<br />

76


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

Bedingung (In1 > 7) <strong>mit</strong> falsch dann <strong>mit</strong> wahr bewertet, wodurch <strong>mit</strong> e 2 das System in<br />

Zustand S1 übergeht. Da<strong>mit</strong> ist die Übergangsbedingung (In1 > 7) vollständig abge<strong>de</strong>ckt.<br />

Durch die Eingabedaten e 3 und e 4 erfolgen die gleichen Bewertungen für die<br />

Bedingung (In1 == 7) und analog dazu <strong>mit</strong> e 5 und e 6 die Bewertungen falsch und wahr<br />

für (In1 < 7). Auf diese Weise wur<strong>de</strong> <strong>mit</strong> einem Testmuster <strong>de</strong>r Länge 6 eine<br />

Ab<strong>de</strong>ckung <strong>von</strong> hun<strong>de</strong>rt Prozent bezüglich <strong>de</strong>r atomaren Bedingungsab<strong>de</strong>ckung erreicht.<br />

Während <strong>de</strong>r Anwendung <strong>de</strong>s TestCaseComman<strong>de</strong>rs wur<strong>de</strong>n unabhängig <strong>von</strong>einan<strong>de</strong>r<br />

jeweils zwanzig Testmuster pro Wahrscheinlichkeitsverteilung generiert. Unter diesen<br />

waren solche <strong>mit</strong> <strong>de</strong>r optimalen Länge 6. Die vollständigen Ergebnisse <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

sind in Tabelle 6-2 dargestellt. Für je<strong>de</strong>n Durchlauf <strong>de</strong>s Verfahrens sind die<br />

Länge <strong>de</strong>s erzeugten Testmusters (Ergebnislänge) und die Anzahl <strong>de</strong>r zu <strong>de</strong>ssen Erzeugung<br />

generierten Testdaten (Verbrauch) aufgeführt. Die zweite und dritte Spalte zeigen die <strong>mit</strong><br />

<strong>de</strong>r Wahrscheinlichkeitsverteilung P 1 er<strong>mit</strong>telten Ergebnisse. Die Spalten vier und fünf<br />

beinhalten die entsprechen<strong>de</strong>n Ergebnisse <strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeitsverteilung P 2 .<br />

Durchlauf<br />

Nr.<br />

P 1 P 2<br />

Ergebnislänge<br />

Verbrauch Ergebnislänge<br />

Verbrauch<br />

1 18 32 7 10<br />

2 67 130 11 17<br />

3 6 7 13 20<br />

4 10 17 15 24<br />

5 7 11 13 20<br />

6 8 11 10 17<br />

7 35 65 6 7<br />

8 25 46 9 12<br />

9 7 9 6 7<br />

10 12 20 21 37<br />

11 14 23 16 27<br />

12 6 9 11 18<br />

13 25 46 10 14<br />

14 69 132 39 72<br />

15 13 23 6 7<br />

16 20 34 14 22<br />

17 12 19 14 23<br />

18 71 136 10 16<br />

19 37 70 18 31<br />

20 14 22 7 8<br />

∅ 23,8 43,1 12,8 20,45<br />

Minimum 6 7 6 7<br />

Maximum 71 136 39 72<br />

Tabelle 6-2: Ergebnisse <strong>mit</strong> Beispielmo<strong>de</strong>ll Automat_diskret<br />

Unter Verwendung <strong>de</strong>r Gleichverteilung P 1 wur<strong>de</strong> zweimal ein Testmuster <strong>mit</strong> <strong>de</strong>r optimalen<br />

Anzahl <strong>von</strong> sechs Testvektoren erzeugt (Durchläufe 3 und 12). Zur Erzeugung dieser<br />

bei<strong>de</strong>n Testmuster wur<strong>de</strong>n im Fall <strong>von</strong> Durchlauf 3 lediglich 7 Testdaten benötigt,<br />

wodurch nur ein Testdatum durch das Verfahren aus Kapitel 4.1.3 verworfen wur<strong>de</strong>. In<br />

77


6.2. Beispielmo<strong>de</strong>ll Automat_analog<br />

Durchlauf 12 hingegen wur<strong>de</strong>n zur Erzeugung <strong>de</strong>s Testmusters 9 Testdaten benötigt, <strong>von</strong><br />

<strong>de</strong>nen 3 verworfen wur<strong>de</strong>n. Durchlauf 3 stellt so<strong>mit</strong> <strong>de</strong>n besten Fall unter <strong>de</strong>n zwanzig<br />

Durchläufen dar, weil das erzeugte Testmuster die optimale Länge hat und zur Erzeugung<br />

dieses Testmusters im Vergleich zu <strong>de</strong>n übrigen Testmustern am wenigsten Testdaten<br />

verworfen wur<strong>de</strong>n.<br />

Dem gegenüber steht Durchlauf 18, in welchem das schlechteste Testmuster unter <strong>de</strong>n<br />

zwanzig Erzeugten gebil<strong>de</strong>t wur<strong>de</strong>. Es hat im Ergebnis eine Länge <strong>von</strong> 71 Testvektoren, zu<br />

<strong>de</strong>ren Erzeugung 136 Testdaten generiert wur<strong>de</strong>n. Der Grund für diese im Vergleich zum<br />

Optimalwert extrem hohe Ergebnislänge liegt in <strong>de</strong>m verwen<strong>de</strong>ten Verfahren aus Kapitel<br />

4.1.3, welches bei je<strong>de</strong>m Verwerfen <strong>von</strong> Testdaten die Anzahl <strong>de</strong>r im nächsten Zyklus<br />

generierten Testdaten erhöht.<br />

Die <strong>mit</strong> <strong>de</strong>r Gleichverteilung P 1 erzeugten Testmuster hatten im Durchschnitt eine Länge<br />

<strong>von</strong> 23,8 Testvektoren, zu <strong>de</strong>ren Erzeugung im Durchschnitt 43,1 Testvektoren generiert<br />

wur<strong>de</strong>n. Dadurch ergibt sich, dass bei gleich verteilter <strong>Testmustergenerierung</strong> eine Verschlechterung<br />

um Faktor 4 gegenüber <strong>de</strong>m optimalen Testmuster <strong>mit</strong> Länge 6 vorliegt,<br />

welches beispielsweise <strong>von</strong> einem Testentwickler manuell angegeben wer<strong>de</strong>n könnte.<br />

Unter <strong>de</strong>n Testmustern, welche bei Verwendung <strong>de</strong>r Wahrscheinlichkeitsverteilung P 2 in<br />

zwanzig Durchläufen <strong>de</strong>r <strong>Testmustergenerierung</strong> erzeugt wur<strong>de</strong>n, sind mehrere <strong>mit</strong> optimaler<br />

Länge (Durchläufe 7, 9 und 15). In diesen drei Fällen wur<strong>de</strong> jeweils ein Testdatum<br />

verworfen, wodurch wie<strong>de</strong>rum nicht <strong>de</strong>r Fall eingetreten ist, dass direkt ein Testmuster <strong>de</strong>r<br />

Länge 6 ohne Verwerfen erzeugt wur<strong>de</strong>.<br />

Das längste unter Verwendung <strong>von</strong> P 2 erzeugte Testmuster wur<strong>de</strong> in Durchlauf 14 generiert<br />

und hat eine Ergebnislänge <strong>von</strong> 39 Testvektoren. Zur Erzeugung dieses Testmusters<br />

wur<strong>de</strong>n 72 Testdaten generiert. An dieser Stelle wird <strong>de</strong>r Vorteil <strong>de</strong>s Verfahrens bei Verwendung<br />

einer durch <strong>de</strong>n Testentwickler angegebenen Wahrscheinlichkeitsverteilung<br />

gegenüber <strong>de</strong>r gleich verteilten <strong>Testmustergenerierung</strong> <strong>de</strong>utlich. Im schlechtesten Fall sind<br />

die Ergebnisse <strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeitsverteilung P 2 ungefähr um <strong>de</strong>n Faktor 2 besser<br />

als die Ergebnisse bei Verwendung <strong>de</strong>r Gleichverteilung P 1 .<br />

Auch <strong>mit</strong> durchschnittlich 20,45 generierten Testvektoren, die zu Testmustern <strong>de</strong>r Länge<br />

12,8 führten, sind die Ergebnisse <strong>de</strong>utlich besser als bei gleich verteilter <strong>Testmustergenerierung</strong>.<br />

Da<strong>mit</strong> konnte die <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe einer Wahrscheinlichkeitsverteilung<br />

dahingehend gesteuert wer<strong>de</strong>n, dass <strong>de</strong>r Aufwand <strong>de</strong>s Generierungsprozesses in<br />

diesem Beispiel halbiert wur<strong>de</strong>. Zusätzlich wur<strong>de</strong> die Qualität <strong>de</strong>r gebil<strong>de</strong>ten Testmuster<br />

gesteigert. Diese sind in Verbindung <strong>mit</strong> P 2 lediglich halb so lang wie bei <strong>de</strong>r Gleichverteilung<br />

P 1 . Dadurch wur<strong>de</strong> <strong>de</strong>r Prozess <strong>de</strong>r späteren Testdurchführung ebenfalls im<br />

Aufwand reduziert.<br />

6.2 Beispielmo<strong>de</strong>ll Automat_analog<br />

Das in Abbildung 6-2 gezeigte Beispielsystem (Automat_analog) wur<strong>de</strong> bereits in<br />

Kapitel 4.2 behan<strong>de</strong>lt. An dieser Stelle wur<strong>de</strong> auch die Funktionalität <strong>de</strong>s Systems näher<br />

78


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

erläutert. Anhand dieses Beispielmo<strong>de</strong>lls wer<strong>de</strong>n in diesem Kapitel die Ergebnisse <strong>de</strong>r<br />

<strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>de</strong>s TestCaseComman<strong>de</strong>rs unter Verwendung stetiger<br />

Wahrscheinlichkeitsverteilungen über <strong>de</strong>m kontinuierlichen Wertebereich D In1 = [1, 10]<br />

vorgestellt.<br />

Abbildung 6-2: Beispielmo<strong>de</strong>ll Automat_analog 5<br />

Zur Anwendung kamen zwei kontinuierliche Wahrscheinlichkeitsverteilungen. P 1 ist die<br />

Gleichverteilung auf <strong>de</strong>m Intervall [1, 10], welche an dieser Stelle aufgrund ihrer<br />

Einfachheit nicht abgebil<strong>de</strong>t ist. Die zweite gewählte Wahrscheinlichkeitsverteilung P 2<br />

genügt <strong>de</strong>r in Abbildung 6-3 dargestellten Wahrscheinlichkeitsdichte.<br />

Abbildung 6-3: Kontinuierliche Wahrscheinlichkeitsdichte 6<br />

Die Motivation bei Wahl <strong>de</strong>r Wahrscheinlichkeitsverteilung P 2 liegt darin, dass im Durchschnitt<br />

die Bewertungen <strong>de</strong>r drei Übergangsbedingungen <strong>mit</strong> einem Drittel Wahrscheinlichkeit<br />

<strong>mit</strong> wahr und zu zwei Drittel <strong>mit</strong> falsch bewertet wer<strong>de</strong>n.<br />

Zur Er<strong>mit</strong>tlung <strong>von</strong> Durchschnittswerten wur<strong>de</strong> <strong>de</strong>r TestCaseComman<strong>de</strong>r in jeweils zwanzig<br />

Durchläufen <strong>mit</strong> <strong>de</strong>n bei<strong>de</strong>n Wahrscheinlichkeitsverteilungen P 1 und P 2 angewen<strong>de</strong>t.<br />

Die Ergebnisse dieses Abschnitts wur<strong>de</strong>n <strong>mit</strong> <strong>de</strong>m Testziel erzeugt, in <strong>de</strong>m Beispielsystem<br />

5 Wie<strong>de</strong>rholung <strong>von</strong> Abbildung 4-8 aus Kapitel 4.2.2 zum Vorstellen <strong>de</strong>r Evaluierungsergebnisse<br />

6 Wie<strong>de</strong>rholung <strong>von</strong> Abbildung 4-10 aus Kapitel 4.2.2 zum Vorstellen <strong>de</strong>r Evaluierungsergebnisse<br />

79


6.2. Beispielmo<strong>de</strong>ll Automat_analog<br />

sämtliche atomaren Bedingungen (vgl. Kapitel 3.3.4.3) abzu<strong>de</strong>cken. Dies be<strong>de</strong>utet, dass<br />

alle Teilbedingungen <strong>de</strong>r Übergangsbedingungen (In1 > 7.5), (In1 < 6.5) und<br />

(In1 >= 6.5 && In1 7.5), (In1 < 6.5),<br />

(In1 >= 6.5) und (In1 7.5) nur in <strong>de</strong>m Fall <strong>mit</strong> wahr<br />

o<strong>de</strong>r falsch bewertet wer<strong>de</strong>n kann, wenn sich das System in Zustand S0 befin<strong>de</strong>t.<br />

Eine für das Mo<strong>de</strong>ll aus Abbildung 6-2 optimale Abfolge <strong>von</strong> Testdaten hat die Länge 7.<br />

Als Beispiel hierfür seien folgen<strong>de</strong> Testdaten genannt: e 1 = 5, e 2 = 8, e 3 = 5, e 4 = 8, e 5 = 7,<br />

e 6 = 8, e 7 = 5. Durch die Eingabedaten e 1 und e 2 wird ausgehend vom Initialzustand <strong>de</strong>s<br />

Systems S0 zuerst die Bedingung (In1 > 7.5) zuerst <strong>mit</strong> falsch, dann <strong>mit</strong> wahr bewertet,<br />

wodurch das System in Zustand S1 wechselt. Mithilfe <strong>de</strong>r Eingabedaten e 3 und e 4<br />

wer<strong>de</strong>n ausgehend <strong>von</strong> Zustand S1 die Teilbedingungen (In1 >= 6.5) und<br />

(In1


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

Durchlauf<br />

Nr.<br />

P 1 P 2<br />

Ergebnislänge<br />

Verbrauch Ergebnislänge<br />

Verbrauch<br />

1 9 12 23 41<br />

2 7 9 19 33<br />

3 51 97 10 14<br />

4 37 69 7 8<br />

5 39 72 9 12<br />

6 10 15 22 39<br />

7 12 20 13 21<br />

8 10 14 9 14<br />

9 19 34 14 24<br />

10 13 20 8 12<br />

11 7 9 7 9<br />

12 15 24 21 39<br />

13 45 84 7 11<br />

14 9 15 11 17<br />

15 74 144 14 24<br />

16 7 10 11 19<br />

17 11 16 9 15<br />

18 73 142 7 9<br />

19 38 70 7 8<br />

20 7 10 7 10<br />

∅ 24,65 44,3 11,75 18,95<br />

Minimum 7 9 7 8<br />

Maximum 74 144 23 41<br />

Tabelle 6-3: Ergebnisse <strong>mit</strong> Beispielmo<strong>de</strong>ll Automat_analog<br />

6.3 Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

Das in diesem Abschnitt vorgestellte hybri<strong>de</strong> Simulink/Stateflowmo<strong>de</strong>ll repräsentiert einen<br />

vereinfachten Kaffeeautomaten. Dieser dient <strong>de</strong>r Evaluierung <strong>de</strong>s Verfahrens an einem<br />

realistischeren und komplexeren Mo<strong>de</strong>ll, als es bei <strong>de</strong>n Beispielmo<strong>de</strong>llen <strong>de</strong>r vorherigen<br />

Unterkapitel <strong>de</strong>r Fall ist. In Abschnitt 6.3.1 erfolgt zunächst eine Beschreibung <strong>de</strong>r Grundfunktionalitäten<br />

<strong>de</strong>s mo<strong>de</strong>llierten Systems. Daran schließt sich in Abschnitt 6.3.2 die<br />

Beschreibung und Erläuterung <strong>de</strong>r bei <strong>de</strong>r <strong>Testmustergenerierung</strong> verwen<strong>de</strong>ten Wahrscheinlichkeitsverteilungen<br />

an. Abschnitt 6.3.3 stellt die Ergebnisse <strong>de</strong>r mehrfachen<br />

<strong>Testmustergenerierung</strong> <strong>mit</strong> <strong>de</strong>n gewählten Wahrscheinlichkeitsverteilungen vor.<br />

6.3.1 Mo<strong>de</strong>llierung <strong>de</strong>r Funktionalität<br />

Das Beispielmo<strong>de</strong>ll Kaffeeautomat (Abbildung 6-4) repräsentiert einen Kaffeeautomaten,<br />

welcher <strong>de</strong>m Benutzer die Möglichkeit zum Kauf verschie<strong>de</strong>ner Getränke bietet.<br />

Über ein Bedienfeld kann <strong>de</strong>r Käufer zwischen <strong>de</strong>n Getränken Kaffee und Cappuccino<br />

wählen. Nach<strong>de</strong>m über einen Münzeinwurf eine ausreichen<strong>de</strong> Menge Geld eingeworfen<br />

und ein Getränk gewählt wur<strong>de</strong>, wird dieses in einem Becher ausgegeben. Der Getränkepreis<br />

wird daraufhin vom eingeworfenen Geld abgezogen und ein Becher vom<br />

Bechervorrat <strong>de</strong>s Kaffeeautomaten verbraucht. Über eine Geldrückgabetaste kann das<br />

81


6.3. Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

verbliebene Restgeld ausgegeben wer<strong>de</strong>n. Zusätzlich hat <strong>de</strong>r mo<strong>de</strong>llierte Kaffeeautomat<br />

zwei Warnleuchten, <strong>von</strong> <strong>de</strong>nen eine <strong>de</strong>m Benutzer signalisiert, wenn <strong>de</strong>r interne Zwischenspeicher<br />

für Münzen voll ist. Die an<strong>de</strong>re Warnleuchte mel<strong>de</strong>t, wenn <strong>de</strong>r Bechervorrat<br />

aufgebraucht wur<strong>de</strong>.<br />

Abbildung 6-4: Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

Die beschriebenen Funktionalitäten sind in <strong>de</strong>r Mo<strong>de</strong>llierung stark vereinfacht. Die Bezahlung<br />

<strong>de</strong>r Getränke ist dahingehend vereinfacht mo<strong>de</strong>lliert, dass keine exakten Geldbeträge<br />

son<strong>de</strong>rn lediglich die Anzahl <strong>de</strong>r eingeworfenen Münzen gezählt wer<strong>de</strong>n. Die Preise <strong>de</strong>r<br />

Getränke sind auf eine Münze für einen Kaffee und zwei Münzen für einen Cappuccino<br />

festgelegt. Der Münzeinwurf wird durch das boolesche Eingangssignal Muenzeinwurf<br />

mo<strong>de</strong>lliert. Es besteht pro Zeiteinheit die Möglichkeit, entwe<strong>de</strong>r eine Münze einzuwerfen,<br />

o<strong>de</strong>r dies nicht zu tätigen. Dadurch ist <strong>de</strong>r Wertebereich auf die bei<strong>de</strong>n Werte „0“ für „kein<br />

Münzeinwurf“ und „1“ für „Münzeinwurf“ festgelegt: D Muenzeinwurf = {0, 1}. Das Bedienfeld<br />

zur Auswahl eines Getränkes ist durch das Eingangssignal Auswahl <strong>mit</strong> <strong>de</strong>m Wertebereich<br />

D Auswahl = {0, 1, 2} mo<strong>de</strong>lliert. Die Werte sind wie folgt zu interpretieren: „0“ steht<br />

für „keine Auswahl getroffen“, „1“ für „Kaffee gewählt“ und „2“ für „Cappuccino<br />

gewählt“.<br />

Das boolesche Eingangssignal Geldrueckgabe repräsentiert die Geldrückgabetaste. Der<br />

Wertebereich D Rueckgabe = {0, 1} ist wie folgt zu interpretieren: entwe<strong>de</strong>r wird die Taste zu<br />

einem Zeitpunkt gedrückt (Wert „1“) o<strong>de</strong>r dies wird nicht getan (Wert „0“). Als viertes<br />

Eingangssignal ist eine Spannungsversorgung mo<strong>de</strong>lliert. Das Eingangssignal Spannung<br />

hat <strong>de</strong>n Wertebereich D Spannung = [200, 250] und kann sämtliche reelle Werte zwischen 200<br />

und 250 Volt annehmen.<br />

Die Ausgabe eines Kaffees o<strong>de</strong>r Cappuccinos ist durch die Ausgangssignale Kaffee und<br />

Cappuccino mo<strong>de</strong>lliert. Diese geben zu je<strong>de</strong>r Zeiteinheit die Anzahl <strong>de</strong>r gekauften und<br />

82


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

ausgegebenen Getränke an. Entsprechend zählt das Ausgangssignal Geld_zurueck die<br />

Anzahl <strong>de</strong>r <strong>de</strong>m Benutzer zurückgegebenen Münzen. Die booleschen Ausgabesignale<br />

Leuchte_Geldspeicher und Leuchte_Becher repräsentieren die Warnleuchten <strong>de</strong>s Kaffeeautomaten<br />

und nehmen entsprechend <strong>de</strong>n Wert „1“ an, wenn <strong>de</strong>r Münzzwischenspeicher<br />

voll bzw. <strong>de</strong>r Bechervorrat verbraucht ist. Ansonsten nehmen sie <strong>de</strong>n Wert „0“ an.<br />

Die Funktionalität <strong>de</strong>s Kaffeeautomaten ist in vier Subsysteme aufgeteilt. Die Kernfunktionalität<br />

ist dabei in <strong>de</strong>m Subsystem Zentrale_Steuerung mo<strong>de</strong>lliert, welches einen<br />

Zustandsautomaten enthält. Bevor auf diesen eingegangen wird, erfolgt eine Beschreibung<br />

<strong>de</strong>r an<strong>de</strong>ren Subsysteme.<br />

Das Subsystem Spannungsüberwachung implementiert die Funktion eines Über- und<br />

Unterspannungsschutzes. Dieser überprüft das Eingangssignal Spannung dahingehend, ob<br />

es über einen festgelegten Zeitraum kritische Werte annimmt. Als kritisch wer<strong>de</strong>n Werte<br />

oberhalb <strong>von</strong> 245 Volt und unterhalb <strong>von</strong> 205 Volt angesehen. Sollte die Versorgungsspannung<br />

über einen Zeitraum <strong>von</strong> 6 Zeiteinheiten im kritischen Bereich liegen, wird <strong>de</strong>r<br />

Kaffeeautomat für eine Zeitspanne <strong>von</strong> 20 Zeiteinheiten abgeschaltet. Das Ausschalten<br />

wird dadurch simuliert, dass sämtliche Eingabesignale nicht weiter beachtet wer<strong>de</strong>n.<br />

Das Subsystems Becher_Füllen simuliert <strong>de</strong>n Füllvorgang einer Tasse Kaffee o<strong>de</strong>r<br />

Cappuccino, welcher 5 Zeiteinheiten dauert. Die Mo<strong>de</strong>llierung sieht vor, dass es innerhalb<br />

dieser Zeitspanne nicht möglich ist, ein weiteres Getränk zu kaufen.<br />

Im Subsystem Becher_Liefern wur<strong>de</strong> die Lieferung <strong>von</strong> neuen Bechern mo<strong>de</strong>lliert. Diese<br />

sorgt dafür, dass <strong>de</strong>r interne Bechervorrat in festgelegten zeitlichen Abstän<strong>de</strong>n aufgefüllt<br />

wird. Die maximale Anzahl ist auf 15 Becher festgelegt. Von diesen wird bei je<strong>de</strong>m Kauf<br />

eines Kaffees o<strong>de</strong>r Cappuccinos ein Becher verbraucht. Der zeitliche Abstand zwischen<br />

zwei Becherlieferungen ist auf 200 Zeiteinheiten festgelegt. Dies be<strong>de</strong>utet, dass ab <strong>de</strong>m<br />

Zeitpunkt <strong>de</strong>s Starts <strong>de</strong>s Kaffeeautomaten in einem festen Rhythmus <strong>von</strong> 200 Zeiteinheiten<br />

<strong>de</strong>r Bechervorrat auf 15 Becher aufgefüllt wird.<br />

Das Subsystem Zentrale_Steuerung mo<strong>de</strong>lliert die Hauptfunktionalitäten <strong>de</strong>s Kaffeeautomaten<br />

in einem Zustandsautomaten (Abbildung 6-5). Dieser besteht aus fünf parallelen<br />

Zustandsautomaten, welche im Folgen<strong>de</strong>n kurz erläutert wer<strong>de</strong>n.<br />

Die Reaktion auf die Eingangssignale Muenzeinwurf und Geldrueckgabe übernimmt <strong>de</strong>r<br />

Zustandsautomat Kassensystem. Dieser zählt in einem Münzzwischenspeicher die eingeworfenen<br />

Münzen, welche noch nicht durch <strong>de</strong>n Kauf eines Getränkes verbraucht wur<strong>de</strong>n.<br />

Deren Anzahl ist auf maximal 60 Münzen beschränkt. Sollte diese Zahl erreicht wer<strong>de</strong>n,<br />

erfolgt die Ausgabe sämtlicher Münzen, die trotz vollem Münzzwischenspeicher eingeworfen<br />

wer<strong>de</strong>n. Das Drücken <strong>de</strong>r Geldrückgabetaste hat <strong>de</strong>n Effekt, dass sämtliche Münzen<br />

aus <strong>de</strong>m Münzzwischenspeicher wie<strong>de</strong>r ausgegeben wer<strong>de</strong>n. Dem entsprechend wird das<br />

Ausgangssignal Geld_zurueck um die Anzahl <strong>de</strong>r ausgegebenen Münzen erhöht.<br />

Das Ausgangssignal Leuchte_Geldspeicher repräsentiert die Warnleuchte, welche <strong>de</strong>n<br />

Zustand <strong>de</strong>s vollen Münzzwischenspeichers mel<strong>de</strong>t. Diese wird durch <strong>de</strong>n Zustandsautomaten<br />

Geldspeicher gesteuert und bei vollem Münzspeicher auf <strong>de</strong>n Wert „1“ gesetzt.<br />

83


6.3. Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

Entsprechend setzt dieser <strong>de</strong>n Wert <strong>von</strong> Leuchte_Geldspeicher auf „0“, wenn <strong>de</strong>r Münzzwischenspeicher<br />

noch weitere Münzen aufnehmen kann.<br />

Abbildung 6-5: Subsystem Zentrale_Steuerung<br />

Die Auswahl eines Getränkes ist in <strong>de</strong>m Zustandsautomat Auswahl mo<strong>de</strong>lliert. Dieser hat<br />

keine weitere Funktionalität als sich das gewählte Getränk zu merken.<br />

Der eigentliche Kauf eines Getränkes erfolgt in Kaffeeausgabe. Dieser Zustandsautomat<br />

überprüft, ob ausreichend viele Münzen für das gewählte Getränk eingeworfen wur<strong>de</strong>n.<br />

Sollte dies <strong>de</strong>r Fall sein, wer<strong>de</strong>n entsprechend viele Münzen aus <strong>de</strong>m Münzzwischenspeicher<br />

abgezogen. Ebenfalls wird ein Becher <strong>de</strong>m Bechervorrat entnommen, wenn noch<br />

ausreichend viele Becher zur Verfügung stehen. Zusätzlich signalisiert Kaffeeausgabe <strong>de</strong>m<br />

Subsystem Becher_Füllen, dass ein Becher gefüllt wer<strong>de</strong>n soll. Auf diesen Vorgang wartet<br />

die Kaffeeausgabe und erwartet danach wie<strong>de</strong>r neue Eingaben.<br />

Der Zustandsautomat BecherKontrolle überwacht <strong>de</strong>n internen Bechervorrat, <strong>von</strong> <strong>de</strong>m bei<br />

Kauf eines Getränks ein Becher verbraucht wird. Sollte die Anzahl <strong>de</strong>r Becher auf Null<br />

sinken, signalisiert dies das Ausgangssignal Leuchte_Becher, welches durch <strong>de</strong>n Zustandsautomaten<br />

BecherKontrolle gesteuert wird.<br />

6.3.2 Verwen<strong>de</strong>te Wahrscheinlichkeitsverteilungen<br />

Zur <strong>Testmustergenerierung</strong> wur<strong>de</strong>n zwei Wahrscheinlichkeitsverteilungen für je<strong>de</strong>s Eingangssignal<br />

verwen<strong>de</strong>t. Für die diskreten Eingangssignale Muenzeinwurf, Geldrueckgabe<br />

und Auswahl sind die verwen<strong>de</strong>ten diskreten Wahrscheinlichkeitsverteilungen in <strong>de</strong>n<br />

folgen<strong>de</strong>n Tabellen abgebil<strong>de</strong>t. Die Wahrscheinlichkeitsdichten <strong>de</strong>r kontinuierlichen<br />

Wahrscheinlichkeitsverteilungen für das Eingangssignal Spannung sind in Abbildung 6-6<br />

dargestellt.<br />

84


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

x i P 1 (X Muenzeinwurf = x i ) P 2 (X Muenzeinwurf = x i )<br />

0 0,5 0,1<br />

1 0,5 0,9<br />

Tabelle 6-4: Wahrscheinlichkeitsverteilungen für Muenzeinwurf<br />

x i P 1 (X Geldrueckgabe = x i ) P 2 (X Geldrueckgabe = x i )<br />

0 0,5 0,9<br />

1 0,5 0,1<br />

Tabelle 6-5: Wahrscheinlichkeitsverteilungen für Geldrueckgabe<br />

x i P 1 (X Auswahl = x i ) P 2 (X Auswahl = x i )<br />

0 0 , 3<br />

0,1<br />

1 0 , 3<br />

0,45<br />

2 0 , 3<br />

0,45<br />

Tabelle 6-6: Wahrscheinlichkeitsverteilungen für Auswahl<br />

Abbildung 6-6: Wahrscheinlichkeitsdichten für Spannung<br />

Die Wahrscheinlichkeitsverteilung P1 ist für alle Eingangssignale die Gleichverteilung und<br />

repräsentiert dadurch die allgemeine zufallsbasierte <strong>Testmustergenerierung</strong>, welche nicht<br />

durch einen Anwen<strong>de</strong>r <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen gesteuert wer<strong>de</strong>n<br />

kann. Die Motivation bei <strong>de</strong>r Angabe <strong>de</strong>r Wahrscheinlichkeitsverteilung P2 liegt darin,<br />

selten eintreten<strong>de</strong> Ereignisse wie das Überlaufen <strong>de</strong>s Münzzwischenspeichers und das<br />

Verbrauchen sämtlicher Becher <strong>mit</strong> einer höheren Wahrscheinlichkeit eintreten zu lassen.<br />

So wur<strong>de</strong> das Verhältnis zwischen Münzeinwurf und Geldrückgabetaste <strong>de</strong>rart gewählt,<br />

dass häufig Münzen eingeworfen wer<strong>de</strong>n, und selten die Geldrückgabetaste betätigt wird.<br />

85


6.3. Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

Ebenfalls wur<strong>de</strong> die Auswahl <strong>de</strong>r Getränke so gewichtet, dass die bei<strong>de</strong>n Getränkesorten<br />

gleichhäufig gewählt wer<strong>de</strong>n und nur selten kein Getränk ausgewählt wird. Die Wahrscheinlichkeitsdichte<br />

über <strong>de</strong>m Wertebereich <strong>de</strong>s Eingangssignals Spannung entspricht<br />

einer Dreiteilung <strong>de</strong>s Wertebereichs. Dadurch wird erreicht, dass während <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

gleichhäufig aus <strong>de</strong>m kritischen Bereich <strong>de</strong>r Überspannung (über 245 Volt),<br />

wie aus <strong>de</strong>n Bereichen <strong>de</strong>r Unterspannung (unter 205 Volt) und <strong>de</strong>r Normalspannung<br />

(zwischen 205 und 245 Volt) generiert wer<strong>de</strong>n.<br />

6.3.3 Ergebnisse <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

Die <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>de</strong>r Wahrscheinlichkeitsverteilungen P1 und P2<br />

erfolgte jeweils in zwanzig unabhängigen Durchläufen <strong>mit</strong> <strong>de</strong>m Testziel, möglichst hohe<br />

Mo<strong>de</strong>llab<strong>de</strong>ckung bezüglich <strong>de</strong>s Ab<strong>de</strong>ckungskriteriums <strong>de</strong>r Modifizierten Mehrfach-<br />

Bedingungsab<strong>de</strong>ckung zu erreichen. Dabei wur<strong>de</strong> die initiale Länge <strong>de</strong>r anzuhängen<strong>de</strong>n<br />

Teilsequenz auf fünf Testvektoren festgelegt. In je<strong>de</strong>m Zyklus <strong>de</strong>r <strong>Testmustergenerierung</strong>,<br />

in <strong>de</strong>m keine Ab<strong>de</strong>ckungssteigerung erreicht wur<strong>de</strong>, wur<strong>de</strong> diese Länge verdoppelt (vgl.<br />

Kapitel 4.1.4). Als Abbruchkriterium für die Dauer <strong>de</strong>r Generierung wur<strong>de</strong> die maximale<br />

Anzahl an Testdaten, welche während <strong>de</strong>r <strong>Testmustergenerierung</strong> pro Eingangssignal<br />

erzeugt wer<strong>de</strong>n, auf 100000 festgelegt.<br />

Bei Verwendung <strong>de</strong>r Gleichverteilung P1 wur<strong>de</strong> in keinem <strong>de</strong>r zwanzig Durchläufe eine<br />

hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung erreicht. Dies ver<strong>de</strong>utlicht <strong>de</strong>r Ab<strong>de</strong>ckungsreport aus<br />

Abbildung 6-7. So beträgt die Ab<strong>de</strong>ckung <strong>de</strong>r drei Zustandsautomaten BecherKontrolle,<br />

Geldspeicher und Kassensystem keine hun<strong>de</strong>rt Prozent. Ein Grund hierfür liegt darin, dass<br />

es in keinem <strong>de</strong>r erzeugten Testmuster geschafft wur<strong>de</strong>, <strong>de</strong>n Münzzwischenspeicher auf 60<br />

Münzen zu füllen. Dadurch wur<strong>de</strong>n in <strong>de</strong>n Zustandsautomaten Kassensystem und Geldspeicher<br />

einige Übergangsbedingungen nicht <strong>mit</strong> <strong>de</strong>n erfor<strong>de</strong>rlichen Werten getestet.<br />

Zusätzlich lagen die Zeitpunkte, an <strong>de</strong>nen in <strong>de</strong>n generierten Testmustern eine Becherlieferung<br />

stattfin<strong>de</strong>t, so ungünstig, dass sich <strong>de</strong>r Zustandsautomat BecherKontrolle stets<br />

während <strong>de</strong>r Becherlieferung in ein und <strong>de</strong>mselben Zustand befand. Dadurch wur<strong>de</strong>n an<br />

dieser Stelle zwei Übergangsbedingungen nicht ausreichend abge<strong>de</strong>ckt.<br />

Die vollständigen Ergebnisse <strong>de</strong>r zwanzigmaligen <strong>Testmustergenerierung</strong> sind in Tabelle<br />

6-7 dargestellt. In dieser wer<strong>de</strong>n pro Zeile die Länge <strong>de</strong>s in <strong>de</strong>m betroffenen Durchlauf<br />

erzeugten Testmusters (Ergebnislänge) sowie die Anzahl <strong>de</strong>r zur Generierung benötigten<br />

Testdaten (Verbrauch) angegeben.<br />

86


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

Abbildung 6-7: Ab<strong>de</strong>ckungsreport <strong>mit</strong> <strong>de</strong>r Gleichverteilung<br />

Zu bemerken ist, dass die angegebenen Werte für <strong>de</strong>n Verbrauch unter Verwendung <strong>de</strong>r<br />

Gleichverteilung P1 in Tabelle 6-7 (dritte Spalte) bereinigt wur<strong>de</strong>n. Dies be<strong>de</strong>utet, dass für<br />

je<strong>de</strong>s <strong>de</strong>r Testmuster 100000 Testvektoren generiert wur<strong>de</strong>n, da dieser Wert als Maximum<br />

für die Anzahl <strong>de</strong>r pro Testmuster zu generieren<strong>de</strong>n Testdaten angegeben wur<strong>de</strong>. Da ab<br />

einem bestimmten Zeitpunkt <strong>de</strong>r Testdatengenerierung eines je<strong>de</strong>n Testmusters keine<br />

weitere Ab<strong>de</strong>ckungssteigerung erzielt wur<strong>de</strong>, sind alle ab diesem Zeitpunkt generierten<br />

Testdaten während <strong>de</strong>r Generierung verworfen wor<strong>de</strong>n. Dadurch haben diese nicht zum<br />

eigentlichen Testmuster beigetragen, weshalb sie aus <strong>de</strong>m in Tabelle 6-7 angegebenen<br />

Verbrauch entfernt wur<strong>de</strong>n.<br />

Die maximal erreichte Ab<strong>de</strong>ckung <strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeitsverteilung P1 betrug bezüglich<br />

<strong>de</strong>s Kriteriums <strong>de</strong>r Modifizierten Mehrfach-Bedingungsab<strong>de</strong>ckung 79 Prozent. Dieser<br />

Ab<strong>de</strong>ckungsgrad wur<strong>de</strong> <strong>von</strong> achtzehn <strong>de</strong>r zwanzig erzeugten Testmuster erreicht. Die in<br />

<strong>de</strong>n Durchläufen 4 und 12 generierten Testmuster erreichten lediglich eine Ab<strong>de</strong>ckung <strong>von</strong><br />

87


6.3. Beispielmo<strong>de</strong>ll Kaffeeautomat<br />

73 Prozent. Aus diesem Grund sind die Daten dieser Durchläufe aus <strong>de</strong>r Statistik herausgenommen<br />

wor<strong>de</strong>n, um aussagekräftigere Durchschnittswerte bestimmen zu können. Die<br />

achtzehn verbliebenen Durchläufe erzeugten im Durchschnitt <strong>mit</strong> 25699 generierten Testvektoren<br />

Testmuster <strong>mit</strong> einer Länge <strong>von</strong> 12874 Testvektoren.<br />

Der schlechteste Durchlauf (Nr. 10) benötigte 82425 Testvektoren zur Generierung eines<br />

Testmusters <strong>de</strong>r Länge 41240. Dem gegenüber steht <strong>mit</strong> Durchlauf 17 das beste erzeugte<br />

Testmuster. Es erreicht <strong>mit</strong> einer Länge <strong>von</strong> 535 Testvektoren <strong>de</strong>nselben Ab<strong>de</strong>ckungsgrad,<br />

wie die übrigen Testmuster. Zu <strong>de</strong>ssen Erzeugung wur<strong>de</strong>n lediglich 1035 Testdaten pro<br />

Eingangssignal generiert.<br />

P1<br />

P2<br />

Durchlauf Ergebnislänglänge<br />

Verbrauch Ergebnis-<br />

Verbrauch<br />

Nr.<br />

1 20720 41390 555 1050<br />

2 10450 20860 695 1340<br />

3 2835 5625 525 1000<br />

4 / / 850 1620<br />

5 2835 5620 525 985<br />

6 41165 82280 525 990<br />

7 5325 10610 530 995<br />

8 845 1640 420 780<br />

9 10445 20835 525 990<br />

10 41240 82425 855 1645<br />

11 20685 41325 225 400<br />

12 / / 525 990<br />

13 1485 2920 210 375<br />

14 10460 20860 410 775<br />

15 20755 41460 560 1060<br />

16 5400 10755 860 1670<br />

17 535 1035 215 375<br />

18 10460 20865 420 795<br />

19 5395 10740 230 410<br />

20 20700 41345 535 1010<br />

∅ 12874 25699 509 962<br />

Minimum 535 1035 210 375<br />

Maximum 41240 82425 860 1670<br />

Tabelle 6-7: Ergebnisse <strong>mit</strong> Gleichverteilung<br />

Mit <strong>de</strong>r Wahrscheinlichkeitsverteilung P2 wur<strong>de</strong>n durchschnittlich 962 Testvektoren benötigt,<br />

um Testmuster <strong>mit</strong> einer Länge <strong>von</strong> 509 Testvektoren zu erzeugen. Die erzeugten<br />

Testmuster erreichten dabei eine hun<strong>de</strong>rtprozentige Ab<strong>de</strong>ckung bezüglich <strong>de</strong>r Modifizierten<br />

Mehrfach-Bedingungsab<strong>de</strong>ckung. Diese im Vergleich zur Gleichverteilung sehr<br />

geringen Werte zeigen die Stärken <strong>de</strong>s Verfahrens zur <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong><br />

Wahrscheinlichkeitsverteilungen. Sowohl die Anzahl <strong>de</strong>r generierten Testdaten, als auch<br />

die Länge <strong>de</strong>r erzeugten Testmuster wur<strong>de</strong> um <strong>de</strong>n Faktor 25 verringert.<br />

Ebenfalls wur<strong>de</strong>n <strong>mit</strong> <strong>de</strong>r Wahrscheinlichkeitsverteilung P2 zweimal nahezu optimale<br />

Testmuster generiert. In <strong>de</strong>n Durchläufen 13 und 17 wur<strong>de</strong> <strong>mit</strong> <strong>de</strong>n Ergebnislängen <strong>von</strong><br />

88


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

210 bzw. 215 Testvektoren fast die optimale Länge <strong>von</strong> 200 Testvektoren erreicht. Der<br />

Optimalwert liegt bei 200 Testvektoren, da zu diesem Zeitpunkt die mo<strong>de</strong>llierte Becherlieferung<br />

erfolgt, welche zu einem Zustandsübergang in BecherKontrolle führt. Im<br />

Durchschnitt erzeugt die <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>de</strong>r Wahrscheinlichkeitsverteilung<br />

P2 um <strong>de</strong>n Faktor 2.5 schlechtere Testmuster als manuell im I<strong>de</strong>alfall angegeben<br />

wer<strong>de</strong>n können<br />

6.4 Bewertung<br />

In <strong>de</strong>n vorherigen Unterkapiteln wur<strong>de</strong>n die Ergebnisse <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

<strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen anhand ausgewählter Beispiele vorgestellt.<br />

Dabei wur<strong>de</strong>n die Vorteile <strong>de</strong>s Verfahrens ver<strong>de</strong>utlicht, zu <strong>de</strong>nen die effizientere<br />

Testmustererzeugung, die Reduzierung <strong>de</strong>r Testmusterlänge sowie die Steigerung <strong>de</strong>s Testumfangs<br />

zählen. In diesem Unterkapitel wird eine qualitative Bewertung <strong>de</strong>r erreichbaren<br />

Verbesserungen gegenüber <strong>de</strong>m allgemeinen zufallsbasierten Verfahren geliefert.<br />

Abbildung 6-8: Modifiziertes Beispielmo<strong>de</strong>ll Automat_analog<br />

Zu diesem Zweck wur<strong>de</strong>n die Wertebereiche <strong>de</strong>r Übergangsbedingungen in <strong>de</strong>m bereits<br />

mehrfach verwen<strong>de</strong>ten Beispielmo<strong>de</strong>ll Automat_analog variiert (Abbildung 6-8).<br />

Durch die Än<strong>de</strong>rung <strong>von</strong> A und B konnte z.B. die Wahrscheinlichkeit für <strong>de</strong>n Zustandsübergang<br />

<strong>von</strong> Zustand S1 zu Zustand S2 modifiziert wer<strong>de</strong>n. Ziel dabei war es, das<br />

Verbesserungspotenzial bei unterschiedlichen Wahrscheinlichkeiten eines Zustandsübergangs<br />

zu erfassen. Zu diesem Zweck wur<strong>de</strong>n acht Übergangswahrscheinlichkeiten gewählt<br />

und hierfür das allgemeine Verfahren <strong>de</strong>r zufallsbasierten gleichverteilten <strong>Testmustergenerierung</strong><br />

jeweils 50-mal angewen<strong>de</strong>t, wobei in je<strong>de</strong>m Durchlauf hun<strong>de</strong>rt Prozent Mehrfachbedingungsab<strong>de</strong>ckung<br />

erreicht wer<strong>de</strong>n mussten. Die durchschnittlichen Längen <strong>de</strong>r<br />

generierten Testmuster sowie die Anzahl <strong>de</strong>r zur Generierung benötigten Testvektoren sind<br />

in Tabelle 6-8 unter Angabe <strong>de</strong>r Übergangswahrscheinlichkeit aufgeführt. Ebenfalls<br />

wur<strong>de</strong>n die gewählten Werte <strong>de</strong>r Variablen A und B aufgeführt.<br />

89


6.4. Bewertung<br />

Nr. A B<br />

Übergangswahrschein<br />

lichkeit<br />

S1=>S2<br />

Testmusterlänge<br />

Verbrauch<br />

1 6,5 7,5 0,11111 24,50 44,1<br />

2 6,625 7,375 0,08333 36,68 68,86<br />

3 6,75 7,25 0.05555 46,20 88,04<br />

4 6,875 7,125 0,02777 86,68 158,92<br />

5 6,9375 7,0625 0,01388 109,92 215,76<br />

6 6,96875 7,03125 0,00694 285,24 566,22<br />

7 6,984375 7,01563 0,00347 473,96 943,9<br />

8 6,992188 7,00781 0,00173 1264,96 2525,9<br />

Tabelle 6-8: Abhängigkeit <strong>de</strong>r Testmusterlänge <strong>von</strong> <strong>de</strong>n Übergangsbedingungen<br />

Mit <strong>de</strong>r ersten Wahl <strong>de</strong>r Variablen A und B entspricht das modifizierte Beispielmo<strong>de</strong>ll<br />

exakt <strong>de</strong>m bereits bekannten Mo<strong>de</strong>ll Automat_analog aus Kapitel 6.2. Die Übergangswahrscheinlichkeit<br />

<strong>de</strong>s betrachteten Zustandsübergangs liegt bei ca. 11,1 Prozent.<br />

Die durchschnittliche Länge <strong>de</strong>r generierten Testmuster liegt bei 24,5 Testvektoren. Zur<br />

Erzeugung dieser Testmuster wur<strong>de</strong>n durchschnittlich 44,1 Testvektoren generiert. Wie die<br />

Tabelle zeigt, steigt die Testmusterlänge <strong>mit</strong> fallen<strong>de</strong>r Übergangswahrscheinlichkeit. Bei<br />

einer Übergangswahrscheinlichkeit <strong>von</strong> 0,173 Prozent wer<strong>de</strong>n bereits 2525,9 Testvektoren<br />

zur Generierung <strong>von</strong> Testmustern <strong>de</strong>r Länge 1264,96 benötigt.<br />

Wie bereits in Kapitel 6.2 gezeigt wur<strong>de</strong>, können für dieses Beispielmo<strong>de</strong>ll die Werte <strong>von</strong><br />

Testmusterlänge und Verbrauch durch <strong>de</strong>n Einsatz <strong>de</strong>r <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong><br />

Wahrscheinlichkeitsverteilungen reduziert wer<strong>de</strong>n. Das erfor<strong>de</strong>rt für je<strong>de</strong>s gewählte Paar<br />

(A, B) die Angabe einer passen<strong>de</strong>n Wahrscheinlichkeitsverteilung, welche die drei Intervalle<br />

[1, A), [A, B] und (B, 10] bei <strong>de</strong>r Testdatengenerierung jeweils <strong>mit</strong> einem Drittel<br />

Wahrscheinlichkeit versieht. Die Ergebnisse <strong>de</strong>r gesteuerten <strong>Testmustergenerierung</strong> sind<br />

daher für alle Übergangswahrscheinlichkeiten im Durchschnitt i<strong>de</strong>ntisch, wenn eine<br />

entsprechen<strong>de</strong> Wahrscheinlichkeitsverteilung zur Testdatenerzeugung gewählt wur<strong>de</strong>. Die<br />

in Abschnitt 6.2 er<strong>mit</strong>telten Ergebnisse ergeben im Durchschnitt eine Testmusterlänge <strong>von</strong><br />

11,75 und einen Verbrauch <strong>von</strong> 18,95 Testvektoren. Folgen<strong>de</strong> Abbildung zeigt das Verbesserungspotenzial,<br />

welches die gesteuerte gegenüber <strong>de</strong>r zufallsbasierten gleichverteilten<br />

<strong>Testmustergenerierung</strong> bietet.<br />

90


6. Evaluierung <strong>de</strong>s Testmustergenerators<br />

Abbildung 6-9: Verbesserungspotenzial <strong>de</strong>s gesteuerten Verfahrens<br />

Das Verbesserungspotenzial nimmt zu, wenn die Übergangswahrscheinlichkeit einzelner<br />

Transitionen abnimmt. Hier ist das Verfahren lediglich um <strong>de</strong>n Faktor 2 besser, wenn die<br />

Wahrscheinlichkeit <strong>de</strong>s Zustandsübergangs <strong>von</strong> S1 nach S2 bei 11,1 Prozent liegt. Verringert<br />

man diese Wahrscheinlichkeit, so erhöhen sich im Durchschnitt <strong>de</strong>r Verbrauch und die<br />

Testmusterlänge. Bei einer Übergangswahrscheinlichkeit <strong>von</strong> 0,173 Prozent ergibt die<br />

Verbesserung bei Einsatz <strong>de</strong>r zuvor erläuterten Wahrscheinlichkeitsverteilung Faktor 100<br />

gegenüber <strong>de</strong>r Generierung auf Basis einer Gleichverteilung.<br />

Die vorgestellten Ergebnisse zeigen, dass ein großes Verbesserungspotenzial im Einsatz<br />

<strong>de</strong>s Verfahrens zur <strong>Testmustergenerierung</strong> <strong>mit</strong>hilfe <strong>von</strong> Wahrscheinlichkeitsverteilungen<br />

liegt. Insbeson<strong>de</strong>re bei sehr unwahrscheinlichen Zustandsübergängen kann es zu <strong>de</strong>utlichen<br />

Verbesserungen sowohl bei <strong>de</strong>r Testdatengenerierung (durch <strong>de</strong>n reduzierten Verbrauch)<br />

als auch bei <strong>de</strong>r späteren Testdurchführung (durch die reduzierte Testmusterlänge) führen.<br />

91


7 Zusammenfassung und Ausblick<br />

7.1 Zusammenfassung<br />

Im Rahmen dieser Arbeit wur<strong>de</strong> das allgemeine zufallsbasierte Verfahren zur <strong>Testmustergenerierung</strong><br />

um eine Komponente erweitert, welche einem Anwen<strong>de</strong>r die Möglichkeit zur<br />

Steuerung <strong>de</strong>s Verfahrens bietet. Auf diese Weise kann <strong>de</strong>r Testentwickler sein Wissen<br />

über das System und <strong>de</strong>ssen Einsatzmöglichkeiten in <strong>de</strong>n Erzeugungsprozess <strong>de</strong>r Testdaten<br />

einfließen lassen.<br />

Als Mittel zur Steuerung wur<strong>de</strong>n Wahrscheinlichkeitsverteilungen gewählt, welche durch<br />

<strong>de</strong>n Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens über <strong>de</strong>n Wertebereichen <strong>de</strong>r Eingangssignale <strong>de</strong>finiert<br />

wer<strong>de</strong>n. Auf diese Weise mo<strong>de</strong>lliert <strong>de</strong>r Testentwickler Schwerpunkte, wodurch bei <strong>de</strong>r<br />

Generierung im Fall <strong>von</strong> diskreten Eingangssignalen Einzelwerte und im Falle analoger<br />

Signale Wertebereiche bevorzugt wer<strong>de</strong>n. Da<strong>mit</strong> steuert <strong>de</strong>r Testentwickler <strong>de</strong>n Prozess<br />

<strong>de</strong>r Testdatengenerierung dahingehend, dass Testdaten <strong>mit</strong> einer höheren Wahrscheinlichkeit<br />

häufiger als an<strong>de</strong>re zur Erzeugung neuer Testmuster verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

Das Verfahren wur<strong>de</strong> in <strong>de</strong>m Testmustergenerator TestCaseComman<strong>de</strong>r implementiert.<br />

Zur Evaluierung <strong>de</strong>s Verfahrens wur<strong>de</strong>n einfache Beispielsysteme (Abschnitte 6.1 und 6.2)<br />

und das Mo<strong>de</strong>ll Kaffeeautomat (Abschnitt 6.3) verwen<strong>de</strong>t. Am Beispiel <strong>de</strong>s Kaffeeautomaten<br />

wur<strong>de</strong> gezeigt, dass die <strong>Testmustergenerierung</strong> zielgerichtet in Problembereiche<br />

gelenkt wer<strong>de</strong>n kann, für die durch gleichverteilte <strong>Testmustergenerierung</strong> nur <strong>mit</strong> sehr<br />

großem Aufwand Testdaten erzeugt wer<strong>de</strong>n können. Durch die erreichte Steigerung <strong>de</strong>r<br />

Ab<strong>de</strong>ckung konnte an diesem Beispiel <strong>de</strong>r Testumfang erhöht wer<strong>de</strong>n, wo<strong>mit</strong> in einer<br />

späteren Testdurchführung mehr Systemfunktionalitäten getestet wer<strong>de</strong>n wür<strong>de</strong>n. Das<br />

Einbeziehen <strong>von</strong> Wahrscheinlichkeitsverteilungen steigert so<strong>mit</strong> die Qualität <strong>de</strong>s gesamten<br />

Testprozesses, in<strong>de</strong>m die Wahrscheinlichkeit <strong>de</strong>s Auffin<strong>de</strong>ns <strong>von</strong> Fehlern erhöht wird.<br />

Weiterhin kann <strong>de</strong>r Aufwand zur Erzeugung <strong>von</strong> Testmustern durch benutzer<strong>de</strong>finierte<br />

Wahrscheinlichkeitsverteilungen <strong>de</strong>utlich gegenüber einer gleichverteilten Generierung<br />

verringert wer<strong>de</strong>n. Diese Effizienzsteigerung <strong>de</strong>r Testdatengenerierung führt zu einer Zeitersparnis<br />

auf Seiten <strong>de</strong>s Testentwicklers, wodurch die Kosten <strong>de</strong>r Testerzeugung verringert<br />

wer<strong>de</strong>n. Dieser Vorteil führt dazu, dass schneller auf Än<strong>de</strong>rungen am System reagiert wer<strong>de</strong>n<br />

kann, in<strong>de</strong>m in kürzester Zeit neue Testmuster erzeugt wer<strong>de</strong>n können.<br />

Ein weiterer Vorteil liegt in <strong>de</strong>r Länge <strong>de</strong>r erzeugten Testmuster. Die er<strong>mit</strong>telten Ergebnisse<br />

zeigen, dass die Testmusterlänge bei gleicher Mo<strong>de</strong>llab<strong>de</strong>ckung stark reduziert<br />

wer<strong>de</strong>n kann. Durch kurze Testmuster, welche eine hohe Ab<strong>de</strong>ckung erreichen, kann <strong>de</strong>r<br />

Aufwand <strong>de</strong>r Testdurchführung verbessert wer<strong>de</strong>n. Dies führt dazu, dass <strong>de</strong>r Kostenfaktor<br />

Zeit reduziert wer<strong>de</strong>n kann, wodurch das entwickelte Produkt schneller seine Marktreife<br />

erreicht. Zusätzlich vereinfachen kürzere Tests die Testdurchführung und die daran<br />

93


7.2. Ausblick<br />

anschließen<strong>de</strong> Auswertung <strong>de</strong>r Testergebnisse. Sollten hierbei Fehler gefun<strong>de</strong>n wer<strong>de</strong>n,<br />

können diese bei kürzeren Testmustern leichter nachvollzogen wer<strong>de</strong>n als bei komplexen<br />

Testmustern.<br />

Abschließend wur<strong>de</strong> gezeigt, dass das Verbesserungspotential <strong>de</strong>r Methodik zunimmt, je<br />

unwahrscheinlicher einzelne Zustandsübergänge innerhalb <strong>de</strong>s Mo<strong>de</strong>lls sind.<br />

7.2 Ausblick<br />

Zur Evaluierung <strong>de</strong>s Verfahrens wur<strong>de</strong> ein Kaffeeautomat als komplexeres Beispielsystem<br />

herangezogen. Das verwen<strong>de</strong>te Mo<strong>de</strong>ll ist jedoch im Vergleich zu realen Mo<strong>de</strong>llen wie<br />

beispielsweise Steuergeräten in <strong>de</strong>r Automobilindustrie nur <strong>von</strong> geringer Größe. In<br />

weiterführen<strong>de</strong>n Arbeiten ist <strong>de</strong>swegen zu zeigen, in wiefern das Verfahren auf komplexere<br />

Mo<strong>de</strong>lle <strong>mit</strong> mehreren tausend Zustän<strong>de</strong>n angewen<strong>de</strong>t wer<strong>de</strong>n kann. An dieser Stelle<br />

ist insbeson<strong>de</strong>re zu untersuchen, ob ein Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens bei <strong>de</strong>rartigen Systemen<br />

in <strong>de</strong>r Lage ist, für sämtliche Eingangssignale <strong>de</strong>s Systems Wahrscheinlichkeitsverteilungen<br />

anzugeben, welche zu <strong>de</strong>utlich besseren Ergebnissen als bei Verwendung einer<br />

Gleichverteilung führen. Zusätzlich ist eine Analyse vorzunehmen, welche <strong>de</strong>n Aufwand<br />

<strong>de</strong>r vollständig manuellen Testfallerstellung abschätzt und <strong>mit</strong> <strong>de</strong>m Aufwand vergleicht,<br />

welcher zur Angabe sämtlicher Wahrscheinlichkeitsverteilungen für die Eingangssignale<br />

komplexer Systeme aufgebracht wer<strong>de</strong>n muss.<br />

Ein weiterer zukünftiger Arbeitsschritt liegt in <strong>de</strong>r Untersuchung einer Verfahrenserweiterung.<br />

Deren zugrun<strong>de</strong> liegen<strong>de</strong> I<strong>de</strong>e sieht vor, zur Generierung <strong>von</strong> Testdaten zwischen<br />

verschie<strong>de</strong>nen Wahrscheinlichkeitsverteilungen zu wechseln. Der Grundgedanke dieser<br />

Erweiterung liegt darin, eine Beobachterkomponente in das bei <strong>de</strong>r <strong>Testmustergenerierung</strong><br />

verwen<strong>de</strong>te Mo<strong>de</strong>ll zu integrieren, welche <strong>de</strong>m automatischen Testmustergenerator Informationen<br />

über <strong>de</strong>n aktuellen Systemzustand zur Verfügung stellt. Aufgrund dieser erfolgt<br />

ein Wechsel zwischen <strong>de</strong>n Wahrscheinlichkeitsverteilungen. Dies be<strong>de</strong>utet, dass <strong>de</strong>r<br />

Anwen<strong>de</strong>r <strong>de</strong>s Verfahrens nicht nur eine Wahrscheinlichkeitsverteilung pro Eingangssignal<br />

son<strong>de</strong>rn mehrere angibt, welche abwechselnd zur Erzeugung neuer Testdaten verwen<strong>de</strong>t<br />

wer<strong>de</strong>n.<br />

In weiterführen<strong>de</strong>n Arbeiten sollte abschließend eine Analyse darüber erfolgen, welche<br />

Ab<strong>de</strong>ckungskriterien für die mo<strong>de</strong>llbasierte Testerstellung <strong>mit</strong> <strong>de</strong>r vorgestellten Methodik<br />

geeignet sind. Während <strong>de</strong>r Evaluierung erfolgte lediglich eine Anwendung <strong>de</strong>r in<br />

MATLAB verfügbaren Ab<strong>de</strong>ckungsmaße. Eine Untersuchung sollte zeigen, ob die <strong>Testmustergenerierung</strong><br />

<strong>mit</strong>hilfe <strong>de</strong>s vorgestellten Verfahrens vollständig unabhängig <strong>von</strong> <strong>de</strong>n<br />

gewählten Ab<strong>de</strong>ckungskriterien ist, wie es in Kapitel 4 angenommen wur<strong>de</strong>. Es wäre <strong>de</strong>nkbar,<br />

dass sich bei einzelnen Ab<strong>de</strong>ckungsmaßen herausstellt, dass sich das iterative<br />

Aufbauen <strong>de</strong>r Testmuster als ineffizient herausstellt, da <strong>de</strong>r Anteil <strong>de</strong>r verworfenen Testdaten<br />

zu hoch ist. Ein weiterer Aspekt dieser Untersuchung ist die Ausweitung <strong>de</strong>r<br />

Ab<strong>de</strong>ckungsmaße auf benutzer<strong>de</strong>finierte Ab<strong>de</strong>ckungskriterien, wie sie in <strong>de</strong>m analytischen<br />

Ansatz zur <strong>Testmustergenerierung</strong> aus Kapitel 3.4.4 angesprochen wur<strong>de</strong>n.<br />

94


8 Literaturverzeichnis<br />

ArmOchSno04<br />

Ove Armbrust, Michael Ochs, Björn Snoek: Stand <strong>de</strong>r Forschung <strong>von</strong><br />

Software-Tests und <strong>de</strong>ren Automatisierung, Fraunhofer Institut<br />

Experimentelles Software Engineering, IESE-Report Nr. 068.04/D<br />

Version 1.0, 2004<br />

AutomationDesk dSPACE GmbH: AutomationDesk – The Next Generation of Testing,<br />

http://www.dspace.<strong>de</strong>/ww/en/pub/products/sw/expsoft/autom<strong>de</strong>sk.htm<br />

(zuletzt besucht: 24.05.2005)<br />

Bal98<br />

Bar00<br />

Bar97<br />

BroNot03<br />

BröDrö93<br />

Cha04<br />

ChiMil94<br />

Con04<br />

Helmut Balzert: Lehrbuch <strong>de</strong>r Software-Technik: Software-Management,<br />

Software-Qualitätssicherung, Unternehmensmo<strong>de</strong>llierung,<br />

Spektrum, Aka<strong>de</strong>mischer Verlag, Hei<strong>de</strong>lberg, Berlin, Deutschland,<br />

1998<br />

André Baresel: Automatisierung <strong>von</strong> Strukturtests <strong>mit</strong> evolutionären<br />

Algorithmen, Diplomarbeit, Humboldt Universität, Berlin, Deutschland,<br />

2000<br />

Stéphane Barbey: Test Selection for Specification-Based Unit Testing of<br />

Object-Oriented Software based on Formal Specifications, Dissertation<br />

an <strong>de</strong>r École Polytechnique Fédérale <strong>de</strong> Lausanne, Schweiz, 1997<br />

Bart Broekman, Edwin Notenboom: Testing Embed<strong>de</strong>d Software,<br />

Addison-Wesley, 2003<br />

Adolf-Peter Bröhl, Wolfgang Dröschel: Das V-Mo<strong>de</strong>ll: Der Standard<br />

für die Softwareentwicklung <strong>mit</strong> Praxisleitfa<strong>de</strong>n, Ol<strong>de</strong>nbourg Verlag,<br />

1993<br />

Ahmad Chamma: Testfallgenerierung für auf StateCharts basieren<strong>de</strong><br />

Systeme, Diplomarbeit an <strong>de</strong>r Universität Hannover, 2004<br />

John Joseph Chilenski, Steven P. Miller: Applicability of modified<br />

condition / <strong>de</strong>cision coverage to software testing, Software Engineering<br />

Journal, September 1994, pp. 193 – 200<br />

Mirko Conrad: Auswahl und Beschreibung <strong>von</strong> Testszenarien für <strong>de</strong>n<br />

Mo<strong>de</strong>ll-basierten Test eingebetteter Software im Automobil,<br />

Dissertation, Technische Universität Berlin, Deutschland, 2004<br />

95


Literaturverzeichnis<br />

ConSad02<br />

dSPACE<br />

Föl94<br />

Gol02<br />

Hart01<br />

HarPol98<br />

Här87<br />

Her05<br />

Mirko Conrad, Sa<strong>de</strong>gh Sa<strong>de</strong>ghipour: Einsatz <strong>von</strong> Über<strong>de</strong>ckungskriterien<br />

auf Mo<strong>de</strong>llebene – Erfahrungsbericht und experimentelle<br />

Ergebnisse, Softwaretechnik-Trends 22(2), 2002<br />

dSPACE GmbH, Technologiepark 25, 33100 Pa<strong>de</strong>rborn, Deutschland:<br />

dSPACE - Solutions for Control, http://www.dspace.<strong>de</strong> (zuletzt besucht:<br />

24.05.2005)<br />

Otto Föllinger: Regelungstechnik: Einführung in die Metho<strong>de</strong>n und ihre<br />

Anwendung – 8., überarbeitete Auflage, Hüthig, Hei<strong>de</strong>lberg, 1994<br />

Ursula Goltz, Dennis Maciuszek, Werner Struckmann: Vorlesungsskript<br />

Reaktive Systeme, Institut für Software, Technische Universität<br />

Braunschweig, 2002, http://www.cs.tu-bs.<strong>de</strong>/ips/struck/report/<br />

skript_rs.ps.gz (zuletzt besucht: 24.05.2005)<br />

Nico Hartmann: Automation <strong>de</strong>s Tests eingebetteter Systeme am<br />

Beispiel <strong>de</strong>r Kraftfahrzeugelektronik, Dissertation an <strong>de</strong>r Universität<br />

Karlsruhe, 2001<br />

David Harel, Michal Politi: Mo<strong>de</strong>ling reactive systems with Statecharts:<br />

the statemate approach, McGraw-Hill, 1998<br />

Erich Härtter: Wahrscheinlichkeitsrechnung, Statistik und mathematische<br />

Grundlagen: Begriffe, Definitionen U. Formeln, Van<strong>de</strong>nhoeck &<br />

Ruprecht, 1987<br />

Dr. Thomas Hermes: Der mo<strong>de</strong>llbasierte Testfallgenerator <strong>de</strong>r IAV<br />

(Mo<strong>de</strong>l-Based Test Case Extractor), Vortrag <strong>de</strong>r IAV GmbH bei<br />

dSPACE, Pa<strong>de</strong>rborn, 2005<br />

IAV Ingenieurgesellschaft Auto und Verkehr, Nordhoffstraße 5, 38518<br />

Gifhorn, Deutschland: http://www.iav.<strong>de</strong> (zuletzt besucht: 06.04.2005)<br />

IAV04<br />

KBSt<br />

Lam04<br />

IAV GmbH: MOTCase-X im Entwicklungsprozess; MOTCase-X:<br />

Effektives Testen <strong>mit</strong> System in <strong>de</strong>r mo<strong>de</strong>llbasierten Softwareentwicklung,<br />

Produktinformation, 2004<br />

Koordinierungs- und Beratungsstelle <strong>de</strong>r Bun<strong>de</strong>sregierung für<br />

Informationstechnik in <strong>de</strong>r Bun<strong>de</strong>sverwaltung:<br />

http://www.kbst.bund.<strong>de</strong>/-,279/V-Mo<strong>de</strong>ll.htm (zuletzt besucht:<br />

06.04.2005)<br />

Klaus Lamberg, Michael Beine, Mario Eschmann, Rainer Otterbach,<br />

Mirko Conrad, Ines Fey: Mo<strong>de</strong>l-based testing of embed<strong>de</strong>d automotive<br />

software using MTest, SAE 2004 World Congress & Exhibition, March<br />

2004, Detroit, MI, USA<br />

96


8. Literaturverzeichnis<br />

Lig02<br />

Peter Liggesmeyer: Software-Qualität, Testen Analysieren und<br />

Verifizieren <strong>von</strong> Software, Spektrum Aka<strong>de</strong>mischer Verlag, Hei<strong>de</strong>lberg-<br />

Berlin, 2002<br />

Mathworks The Mathworks, Inc., 3 Apple Hill Drive, Natick, MA 01760-2098,<br />

USA, http://www.mathworks.com (zuletzt besucht: 24.05.2005)<br />

MATLAB<br />

Mol02<br />

MTest<br />

Mye89<br />

Pre03<br />

Razorcat<br />

Rea04<br />

Reactis<br />

Reactive<br />

Systems<br />

Roo99<br />

Rot66<br />

Schl et al. 04<br />

The Mathworks: MATLAB® 7.0.4 http://www.mathworks.com/<br />

products/matlab/ (zuletzt besucht: 24.05.2005)<br />

Prof. Dr. Paul Molitor: Vorlesungsskript „Synthese, Testen und<br />

Verifikation Digitaler Schaltungen“, http://nirvana.informatik.unihalle.<strong>de</strong>/~molitor/CDROM1999/skripte/teubner99/<br />

(zuletzt besucht:<br />

24.05.2005)<br />

dSPACE GmbH: MTest – Systematic Mo<strong>de</strong>l-Based Testing,<br />

http://www.dspace.<strong>de</strong>/ww/en/pub/products/sw/expsoft/mtest.htm<br />

(zuletzt besucht: 24.05.2005)<br />

Glenford J. Myers: Methodisches testen <strong>von</strong> Programmen (3. Auflage),<br />

Ol<strong>de</strong>nbourg Verlag, 1989<br />

Alexan<strong>de</strong>r Pretschner: Zum mo<strong>de</strong>llbasierten funktionalen Test reaktiver<br />

Systeme, Dissertation an <strong>de</strong>r Technischen Universität München, 2003<br />

Razorcat Development GmbH, Witzlebenplatz 5, 14057 Berlin,<br />

Deutschland: http://www.razorcat.com (zuletzt besucht: 24.05.2005)<br />

Reactive Systems: Reactis User’s Gui<strong>de</strong> V2004.2, http://www.reactivesystems.com/reactis/doc/user/in<strong>de</strong>x.html<br />

(zuletzt besucht: 06.04.2005)<br />

Reactive Systems: The Reactis Product Line, http://www.reactivesystems.com/products.msp<br />

(zuletzt besucht: 24.05.2005)<br />

Reactive Systems, Inc., 120-B East Broad St., Falls Church, VA 22046,<br />

USA: http://www.reactive-systems.com (zuletzt besucht: 24.05.2005)<br />

Hans-Görg Roos: Numerische Mathematik: das Grundwissen für<br />

je<strong>de</strong>rmann, Teubner, Stuttgart, 1999<br />

J. Paul Roth: Diagnosis of Automata Failures: A Calculus and a<br />

Method, IBM Journal, 1966<br />

H. Schlingloff, C. Sühl, H. Dörr, M. Conrad, J. Stroop, S. Sa<strong>de</strong>ghipour,<br />

M. Kühl, F. Rammig, G. Engels: IMMOS – Eine integrierte Methodik<br />

zur mo<strong>de</strong>llbasierten Steuergeräteentwicklung, BMBF-Workshop<br />

“Software Engineering 2006”, Berlin, 2004<br />

97


Literaturverzeichnis<br />

Schö94<br />

SimModCov<br />

Simulink<br />

Stateflow<br />

Sth et al. 01<br />

TargetLink<br />

Tha00<br />

VieMis04<br />

VM97<br />

UML<br />

Weg93<br />

Weg02<br />

Eberhard Schöneburg: Genetische Algorithmen und Evolutionsstrategien:<br />

Eine Einführung in Theorie und Praxis <strong>de</strong>r simulierten<br />

Evolution, Addison-Wesley, 1994<br />

The Mathworks: Mo<strong>de</strong>l Coverage Tool, http://www.mathworks.com/<br />

access/help<strong>de</strong>sk_r13/help/toolbox/simulink/ug/performance_tools13<br />

.html#7314 (zuletzt besucht: 24.05.2005)<br />

The Mathworks: Simulink® 6.2, http://www.mathworks.com/products/<br />

simulink/ (zuletzt besucht: 06.04.2005)<br />

The Mathworks: Simulink® 6.2, http://www.mathworks.com/products/<br />

stateflow/ (zuletzt besucht: 24.05.2005)<br />

Harmen Sthamer, André Baresel, Joachim Wegener: Evolutionary<br />

Testing of Embed<strong>de</strong>d Systems, Proceedings of the 14th International<br />

Software Quality Week (QW '01), San Francisco, USA, 2001.<br />

dSPACE GmbH: TargetLink – Automatisch erzeugter Serienco<strong>de</strong> für<br />

die Implementierung, http://www.dspace.<strong>de</strong>/ww/<strong>de</strong>/pub/systems/<br />

targetimp.htm (zuletzt besucht: 24.05.2005)<br />

Georg Erwin Thaller: Software-Test: Verifikation und Validation,<br />

Heise, 2000<br />

Prof. Dr. Heinrich Theodor Vierhaus, Silvio Misera: Vorlesung „Test<br />

und testfreundlicher Entwurf“, http://www.informatik.tucottbus.<strong>de</strong>/~wwwteci/stu<strong>de</strong>nt/vl/test/<br />

(zuletzt besucht: 06.04.2005)<br />

IABG: Allgemeiner Umdruck Nr. 250: Vorgehensmo<strong>de</strong>ll, http://www.vmo<strong>de</strong>ll.iabg.<strong>de</strong>/vm97.htm<br />

(zuletzt besucht: 24.05.2005)<br />

Object Management Group, Inc.: OMG Unified Mo<strong>de</strong>lling Language<br />

Specification (Version 1.5, March 2003), http://www.omg.org/docs/<br />

formal/03-03-01.pdf (zuletzt besucht: 24.05.2005)<br />

Joachim Wegener, Matthias Grochtmann: Werkzeugunterstützte Testfaller<strong>mit</strong>tlung<br />

für <strong>de</strong>n funktionalen Test <strong>mit</strong> <strong>de</strong>m Klassifikationsbaum-<br />

Editor CTE, Proceedings <strong>de</strong>r GI-Fachtagung Softwaretechnik '93,<br />

Dortmund, Germany, November 1993, pp. 95 - 102<br />

Joachim Wegener, Kerstin Buhr, Hartmut Pohlheim: Automatic Test<br />

Data Generation for Structural Testing of Embed<strong>de</strong>d Software Systems<br />

by Evolutionary Testing, Proceedings of the Genetic and Evolutionary<br />

Computation Conference, GECCO 2002, New York, USA, 2002<br />

98


Anhang<br />

A Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung<br />

In diesem Abschnitt wer<strong>de</strong>n die für diese Arbeit benötigten Grundlagen <strong>de</strong>r Wahrscheinlichkeitsrechnung<br />

vorgestellt. Die Begriffs<strong>de</strong>finitionen wur<strong>de</strong>n nach <strong>de</strong>n Definitionen <strong>von</strong><br />

Härtter [Här87] erstellt.<br />

Zufallsvariable. Als Zufallsgröße o<strong>de</strong>r Zufallsvariable wird eine mathematische Variable<br />

bezeichnet, die abhängig vom Ergebnis einer Funktion o<strong>de</strong>r Prozedur unterschiedliche,<br />

zufällig erzeugte Werte annehmen kann. Die gewürfelte Augenzahl beim Würfeln ist eine<br />

Zufallsvariable <strong>mit</strong> <strong>de</strong>n möglichen Werten 1, 2, 3, 4, 5 und 6. Es wird zwischen diskreten<br />

und kontinuierlichen Zufallsvariablen unterschie<strong>de</strong>n. Kann die Zufallsvariable nur eine<br />

abzählbare Menge möglicher Werte annehmen, wie es beim Würfeln <strong>de</strong>r Fall ist, wird die<br />

Zufallsvariable als diskret bezeichnet. Eine Zufallsvariable <strong>mit</strong> überabzählbarem Wertebereich<br />

wird kontinuierlich (o<strong>de</strong>r stetig) genannt.<br />

Wahrscheinlichkeitsverteilung, -funktion. Die Wahrscheinlichkeitsverteilung einer diskreten<br />

Zufallsvariablen X ist durch ihre Wahrscheinlichkeitsfunktion p(x) = P(X = x)<br />

charakterisiert. Diese Funktion gibt für je<strong>de</strong>n möglichen Wert <strong>de</strong>r Zufallsvariablen die<br />

Wahrscheinlichkeit seines Auftretens an. Bei kontinuierlichen Zufallsvariablen ist eine<br />

Zuordnung <strong>von</strong> Wahrscheinlichkeiten zu <strong>de</strong>n einzelnen erreichbaren Werten problematisch.<br />

Da in Intervallen reeller Zahlen unendlich viele Werte liegen, ist die Wahrscheinlichkeit,<br />

dass die Zufallsvariable einen bestimmten Wert annimmt, Null. Um eine<br />

kontinuierliche Wahrscheinlichkeitsverteilung anzugeben, wird nicht die Wahrscheinlichkeit,<br />

dass X einen bestimmten Wert annimmt, betrachtet. Vielmehr betrachtet man die<br />

Wahrscheinlichkeit, dass X Werte eines Intervalls annimmt. Hierzu wird die<br />

Verteilungsfunktion benötigt.<br />

Verteilungsfunktion. Die Verteilungsfunktion F(x) gibt für eine Zufallsgröße X und einen<br />

Wert x die Wahrscheinlichkeit an, <strong>mit</strong> <strong>de</strong>r X Werte kleiner als x o<strong>de</strong>r genau <strong>de</strong>n Wert x<br />

annimmt. Verteilungsfunktionen können sowohl für diskrete als auch für kontinuierliche<br />

Zufallsvariablen angegeben wer<strong>de</strong>n. Im Fall einer diskreten Zufallsvariable ist die Verteilungsfunktion<br />

eine Treppenfunktion, die an je<strong>de</strong>r Stelle x i eine Sprunghöhe p i = P(X = x i )<br />

hat, <strong>mit</strong> <strong>de</strong>r die Wahrscheinlichkeit angegeben wird, <strong>mit</strong> <strong>de</strong>r X <strong>de</strong>n Wert x i annimmt. Im<br />

Fall einer kontinuierlichen Zufallsvariable ist die Verteilungsfunktion wie folgt <strong>de</strong>finiert:<br />

x<br />

F( x)<br />

= P(<br />

X ≤ x)<br />

= ∫ f ( x)<br />

dx,<br />

<strong>mit</strong> f ( x)<br />

= F'(<br />

x)<br />

.<br />

−∞<br />

Wahrscheinlichkeitsdichte. Die Berechnung <strong>de</strong>r Verteilungsfunktion setzt das Vorhan<strong>de</strong>nsein<br />

<strong>de</strong>r Dichte <strong>de</strong>r Zufallsvariablen voraus. Die Ableitung f(x) = F’(x) <strong>de</strong>r Verteilungsfunktion<br />

F(x) wird als Wahrscheinlichkeitsdichte, Dichte <strong>de</strong>r Zufallsvariablen, Dichte <strong>de</strong>r<br />

99


Anhang<br />

Verteilung o<strong>de</strong>r kurz als Dichte bezeichnet. Die Dichte f(x) ermöglicht die Berechnung <strong>de</strong>r<br />

Wahrscheinlichkeit, dass eine Zufallsvariable Werte aus einem bestimmten Intervall<br />

annimmt, <strong>mit</strong> <strong>de</strong>r folgen<strong>de</strong>n Formel:<br />

P ( a ≤ X ≤ b)<br />

= f ( x)<br />

dx . Die Wahrscheinlichkeit,<br />

dass X Werte aus einem Intervall annimmt, ist so<strong>mit</strong> <strong>de</strong>finiert als die Fläche unter <strong>de</strong>m<br />

Graphen <strong>de</strong>r Wahrscheinlichkeitsdichte in <strong>de</strong>m gewählten Intervall.<br />

Erwartungswert. Der Erwartungswert einer diskreten Zufallsvariablen X ist <strong>de</strong>r Wert<br />

n<br />

E ( X ) = ∑<br />

i=<br />

1<br />

x p i i<br />

, wobei n die Anzahl <strong>de</strong>r möglichen Werte ist, welche X annehmen kann,<br />

xi <strong>de</strong>r i-te mögliche Wert und p i die Wahrscheinlichkeit <strong>von</strong> x i . E(X) ist so<strong>mit</strong> <strong>de</strong>r <strong>mit</strong> <strong>de</strong>r<br />

<strong>mit</strong> ihren Wahrscheinlichkeiten gewichtete Durchschnitt <strong>de</strong>r Werte, die X annehmen kann.<br />

Für eine kontinuierliche Zufallsvariable errechnet sich <strong>de</strong>r Erwartungswert wie folgt:<br />

+∞<br />

∫<br />

−∞<br />

E(<br />

X ) = x ⋅ f ( x)<br />

dx , wobei f(x) die Wahrscheinlichkeitsdichte <strong>de</strong>r Zufallsvariablen X ist.<br />

b<br />

∫<br />

a<br />

100

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!