Testmustergenerierung mit Hilfe von ... - ihmor.de
Testmustergenerierung mit Hilfe von ... - ihmor.de
Testmustergenerierung mit Hilfe von ... - ihmor.de
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