- tuprints - Technische Universität Darmstadt

Transcrição

- tuprints - Technische Universität Darmstadt
F O R M A L E A N F O R D E R U N G S A N A LY S E U N D
TESTUNTERSTÜTZUNG IM PRODUKTLINIENKONTEXT
vom fachbereich 18
elektro- und informationstechnik
zur erlangung des akademischen grades
eines doktor-ingenieurs (dr.-ing.)
genehmigte dissertation
von
D I P L . - I N G . F L O R I A N M A R K E RT
GEBOREN AM
2 6 . N O V E M B E R 1 9 7 9 I N F R A N K F U RT / M A I N
referent: prof. dr.-ing. h. eveking
korreferent: prof. dr. rer. nat. a. schürr
tag der einreichung: 26.01.2012
tag der mündlichen prüfung: 06.06.2012
d17
darmstadt 2012
Z U S A M M E N FA S S U N G
Eine aus Anforderungen bestehende Spezifikation stellt die Grundlage für
Entwicklungsprojekte dar. Fehler, die in der Spezifikation enthalten sind, wirken sich auf den gesamten Entwicklungsprozess aus. Im schlimmsten Fall
pflanzen sie sich durch den Entwicklungs- und Testprozess fort und werden
erst beim Abnahmetest entdeckt. Die Vermeidung von Fehlern in Spezifikationen ist daher eine Grundvoraussetzung für eine zügige und kostengünstige
Entwicklung. Handelt es sich um sicherheitskritische Systeme, dann können
Fehler in der Spezifikation im Ernstfall Menschenleben gefährden oder großen
finanziellen Schaden nach sich ziehen.
Eine Überprüfung der Spezifikationen sollte daher nicht nur manuell, sondern auch formal sowie vollständig und so weit wie möglich automatisiert
durchgeführt werden. Die immer stärkere Verbreitung von Produktlinien, die
sich durch die Strukturierung von Variabilität und Gemeinsamkeiten verwandter Produkte mit dem Ziel der Wiederverwendung auszeichnen, steigert die
Komplexität der Überprüfung der Spezifikationen im Entwicklungsprozess.
Durch die Vielzahl von Produkten, die aus einer Produktlinie abgeleitet werden
können, ist eine manuelle Überprüfung der Spezifikation kaum noch möglich. Handelt es sich um Spezifikationen eingebetteter Systeme, so wird die
Überprüfung durch die Aufteilung in Soft- und Hardware weiter erschwert.
Im Rahmen dieser Dissertation wird ein Verfahren vorgestellt, das Spezifikationen auf Widersprüche, Vollständigkeit und Redundanz überprüft. Dieses
Verfahren ist sowohl für Spezifikationen einzelner Produkte also auch für
solche, die Gemeinsamkeiten und Unterschiede von Produktlinien beschreiben,
einsetzbar. Die Analyse der Spezifikationen basiert auf bekannten Algorithmen
aus der formalen Verifikation von Hardwareschaltungen. Eine Anwendung dieser Algorithmen für Verhaltensbeschreibungen verschiedener Systeme sowie
die Erweiterung durch Variabilität wird erläutert.
Weiterhin wird auf die Generierung von „Orakeln“ eingegangen, die sich für
die Voraussage von Testergebnissen eignen und ebenfalls auf Algorithmen
aus der formalen Verifikation von Hardwareschaltungen basieren. Außerdem
können auf einem „Orakel“ Annahmen über das Systemverhalten bewiesen
werden. Zusätzlich wird ein Modell für die strukturierte Darstellung von
Testfällen eingeführt. Die Testfälle können auf dem „Orakel“, einem weiteren Systemmodell oder auf dem System selbst ausgeführt werden. Die in
dieser Dissertation vorgestellten Konzepte wurden an Beispielen aus dem
universitären und dem industriellen Umfeld erprobt.
iii
ABSTRACT
A requirements specification forms the basis of all development projects. Faults
incorporated in this initial specification put the entire project at risk. In the
worst case, faults propagate through the development and test processes and
are not recognized before acceptance testing. Therefore, the avoidance of
faults in specifications is the basic prerequisite for efficient and competitive
development. In case of safety critical systems faults may even jeopardize
human life or result in a huge financial loss.
Specification analysis should not rely exclusively on inspection or review
meetings but should also be aided by automated formal methods. The use of
product line engineering in the development of systems complicates the specification analysis even more. Product line engineering aims to reuse development
and test fragments by structuring common and variable parts of a system. Due
to the potentially huge number of products that can be derived from a product
line, a manual analysis is barely possible. Further, the requirements analysis
is even harder if the specification describes an embedded system due to the
Software and Hardware layers.
This thesis describes a method for analysing specifications with respect to contradictions, completeness, and redundancy. The method should be applicable
both to specifications dealing with single products and to those dealing with
product lines. Well understood algorithms from the field of the formal verification of hardware circuits are applied to the specification analysis. Further,
these algorithms are extended using the variabilty information necessary to
deal with product lines.
Additionally, the thesis focuses on the generation of “oracles“ that can be
utilized as predictors for test case results, building on algorithms taken from
the field of the formal verification of hardware circuits. An “oracle“ may be
used to prove assumptions that must be true according to the specification.
Additionally, a model for structuring the test cases in the field of product line
engineering is presented. These test cases may be executed by an “oracle“,
another system model or by the system itself. All presented concepts are
validated using examples related to academic work and to real world industrial
problems.
iv
I N H A LT S V E R Z E I C H N I S
1 einleitung
1.1 Beitrag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i grundlagen
2 grundlagen der qualitätssicherung
2.1 Qualitätssicherung . . . . . . . . . . . . . . . . . . .
2.1.1 Qualitätsbegriff . . . . . . . . . . . . . . . . .
2.1.2 Qualität des fertigen Produkts . . . . . . . .
2.1.3 Qualitätssicherung im Hardwareentwurf . .
2.1.4 Qualitätssicherung im Software Engineering
2.2 Testarten . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Statischer Test . . . . . . . . . . . . . . . . . .
2.2.2 Dynamischer Test . . . . . . . . . . . . . . . .
2.2.3 Fehlertypisierung . . . . . . . . . . . . . . . .
2.2.4 Metriken . . . . . . . . . . . . . . . . . . . . .
2.3 Modellbasiertes Testen . . . . . . . . . . . . . . . . .
2.3.1 Modellbegriff . . . . . . . . . . . . . . . . . .
2.3.2 Orakel . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Klassifikationsbäume . . . . . . . . . . . . . .
3 formale darstellungen
3.1 Communicating Sequential Processes . . . . . . . .
3.2 UML-Diagramme . . . . . . . . . . . . . . . . . . . .
3.3 Eigenschaftsbeschreibungssprachen . . . . . . . . .
3.3.1 Linear Temporal Logic . . . . . . . . . . . . .
3.3.2 Interval Language . . . . . . . . . . . . . . . .
3.3.3 Eigenschaften . . . . . . . . . . . . . . . . . .
3.3.4 Eigenschaftsbeschreibungsstile . . . . . . . .
3.3.5 Parallelismus und Nebenläufigkeit . . . . . .
3.3.6 Darstellung von Ereignisfolgen . . . . . . . .
ii anforderungen und produktlinien
4 darstellung von anforderungen
4.1 Requirements Engineering . . . . . . .
4.1.1 Anforderungsanalyse . . . . . .
4.2 Formulieren von Anforderungen . . .
4.2.1 4-Variablen-Modell . . . . . . .
4.2.2 Software Cost Reduction . . . .
5 produktlinien und variabilität
5.1 Struktur . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . . .
1
2
3
5
7
7
7
8
9
10
13
13
14
15
16
17
18
18
19
21
21
23
24
24
25
26
27
28
29
31
33
33
36
37
38
40
45
47
v
vi
inhaltsverzeichnis
5.1.1 Anwendungs- und Domänenebene . . . . . . . .
5.1.2 Entwicklungsschritte . . . . . . . . . . . . . . . .
5.2 Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Anforderungen im Produktlinienkontext . . . . . . . .
5.4 Produktlinientests . . . . . . . . . . . . . . . . . . . . . .
6 vollständigkeit und cando-objekte
6.1 Cando-Objekte . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Ursprüngliche Idee von Cando-Objekten . . . .
6.1.2 Generierung von Cando-Objekte . . . . . . . . .
6.2 Vollständigkeit von Eigenschaftssätzen . . . . . . . . . .
6.2.1 Normalform für die Vollständigkeitsbewertung
6.2.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
49
51
54
54
57
57
57
59
59
60
61
iii konzept und ergebnisse
63
7 formalisierung von anforderungen
65
7.1 Formalisieren von Verhalten . . . . . . . . . . . . . . . . . . . . . 65
7.1.1 Anwendung des 4-Variablen-Modells . . . . . . . . . . . 66
7.1.2 Variabilität im 4-Variablen-Modell . . . . . . . . . . . . . 67
7.2 Formalisieren von Funktionalität und Zeitverhalten . . . . . . . 69
7.2.1 Extraktion aus natürlicher Sprache . . . . . . . . . . . . . 69
7.2.2 Extraktion aus Communicating Sequential Processes (CSP) 70
7.2.3 Extraktion aus Software Cost Reduction (SCR) . . . . . . 71
7.2.4 Extraktion aus Aktivitätsdiagrammen . . . . . . . . . . . 75
7.3 Formalisieren von Variabilität . . . . . . . . . . . . . . . . . . . . 77
7.3.1 Feature-Modelle . . . . . . . . . . . . . . . . . . . . . . . . 77
7.3.2 Produktlinieneigenschaften . . . . . . . . . . . . . . . . . 77
7.4 Formalisierbarkeit von Anforderungen . . . . . . . . . . . . . . 80
7.4.1 Zeit- und Vollständigkeitsbegriff . . . . . . . . . . . . . . 80
7.4.2 Eigenschaften für Orakel . . . . . . . . . . . . . . . . . . . 82
8 spezifikationsprüfung und orakelgenerierung
87
8.1 Problembeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2 Gesamtkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.3 Analyse von Eigenschaftssätzen . . . . . . . . . . . . . . . . . . . 91
8.3.1 Fehler in Eigenschaftssätzen . . . . . . . . . . . . . . . . . 91
8.3.2 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.4 Orakelgenerierung . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.4.1 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.4.2 Struktur des generierten Orakels . . . . . . . . . . . . . . 96
8.5 Beweis von Systemannahmen . . . . . . . . . . . . . . . . . . . . 97
8.5.1 Beweis auf Oraklen . . . . . . . . . . . . . . . . . . . . . . 98
8.5.2 Beweis durch Redundanz . . . . . . . . . . . . . . . . . . 98
8.6 Integrierter Testansatz . . . . . . . . . . . . . . . . . . . . . . . . 99
8.7 Grenzen des Ansatzes . . . . . . . . . . . . . . . . . . . . . . . . 101
8.8 Verwandte Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 101
inhaltsverzeichnis
9 experimentelle untersuchungen
9.1 Verwendete Werkzeuge . . . . . . . . . . . . . . . . . . . . .
9.1.1 Feature Model Editor . . . . . . . . . . . . . . . . . .
9.1.2 Candogen . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3 Properlyze . . . . . . . . . . . . . . . . . . . . . . . .
9.1.4 ModelSim . . . . . . . . . . . . . . . . . . . . . . . .
9.1.5 OneSpin 360™ MV . . . . . . . . . . . . . . . . . . .
9.2 Autositzsteuerung . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1 Spezifikation . . . . . . . . . . . . . . . . . . . . . . .
9.2.2 Extraktion der Eigenschaften . . . . . . . . . . . . .
9.2.3 Vollständigkeitsbewertung . . . . . . . . . . . . . . .
9.2.4 Simulation des Orakels . . . . . . . . . . . . . . . . .
9.2.5 FMT unterstützte Testfallgenerierung . . . . . . . .
9.2.6 Beweis von Systemannahmen . . . . . . . . . . . . .
9.2.7 Zusammenfassender Vergleich . . . . . . . . . . . .
9.3 Handyspiel . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.1 Einzelnes Produkt . . . . . . . . . . . . . . . . . . .
9.3.2 Produktlinie . . . . . . . . . . . . . . . . . . . . . . .
9.4 A-7E Flugzeug . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.1 Aufstellen der Eigenschaften . . . . . . . . . . . . .
9.4.2 Vollständigkeitsbewertung und Orakelgenerierung
9.5 Gearomat . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5.1 Beschreibung des Systems . . . . . . . . . . . . . . .
9.5.2 Aufstellen des Feature-Modells . . . . . . . . . . . .
9.5.3 Nutzen des Feature-Modells . . . . . . . . . . . . .
9.5.4 Vollständigkeit der Anforderungen . . . . . . . . .
9.5.5 Orakel . . . . . . . . . . . . . . . . . . . . . . . . . .
10 fazit und ausblick
literaturverzeichnis
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
105
105
105
105
106
106
106
106
106
107
109
109
110
111
115
116
117
117
117
118
119
120
120
121
123
124
124
125
129
vii
ABBILDUNGSVERZEICHNIS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
viii
Struktur der Arbeit . . . . . . . . . . . . . . . . . . . . . . .
V-Modell [Wal01] . . . . . . . . . . . . . . . . . . . . . . . .
Dynamischer Test . . . . . . . . . . . . . . . . . . . . . . . .
Klassifikationsbaum . . . . . . . . . . . . . . . . . . . . . .
Beispielautomat . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente in Aktivitätsdiagrammen . . . . . . . . . . . . .
Parallelismus und Nebenläufigkeit . . . . . . . . . . . . . .
Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-Variablen-Modell [PM95] . . . . . . . . . . . . . . . . . .
SCR-Zustandsübergänge . . . . . . . . . . . . . . . . . . . .
SCR-Ausgangsverhalten . . . . . . . . . . . . . . . . . . . .
Entwicklungskosten und -zeit [PBL05] . . . . . . . . . . . .
Produktmanagement [PBL05] . . . . . . . . . . . . . . . . .
Feature-Modell-Notation . . . . . . . . . . . . . . . . . . . .
Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . . .
Struktur des Cando-Objekts [Sch09] . . . . . . . . . . . . .
Ursprüngliche Verwendung von Cando-Objekten [Sch09]
Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . .
Variantenreiches 4-Variablen-Modell Varv . . . . . . . . .
Mode Transition Table . . . . . . . . . . . . . . . . . . . . .
SCR-Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . .
Beispielhaftes Aktivitätsdiagrammen . . . . . . . . . . . .
Eigenschaften im Produktlinienkontext . . . . . . . . . . .
Inverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unvollständiger Inverter . . . . . . . . . . . . . . . . . . . .
Durch ITL beschriebene Struktur . . . . . . . . . . . . . . .
Äquivalentes ITL . . . . . . . . . . . . . . . . . . . . . . . .
Verdoppeln . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gesamtkonzept . . . . . . . . . . . . . . . . . . . . . . . . .
Fehler in Eigenschaftssätzen . . . . . . . . . . . . . . . . . .
Orakel im Produktlinienkontext [MO10] . . . . . . . . . .
Struktur der Eigenschaften in ITL . . . . . . . . . . . . . . .
Struktur des generierten Orakels [MO10] . . . . . . . . . .
Beweis von Systemannahmen . . . . . . . . . . . . . . . . .
FMT-Ansatz [OMS09, SOM10] . . . . . . . . . . . . . . . . .
Feature-Modell der Autositzfunktionen [SOM10] . . . . .
Ausschnitt aus dem FMT der Autositzfunktionen . . . . . .
Gegenbeispiele in OneSpin 360™ MV . . . . . . . . . . . .
Bomberman Feature-Modell [OWES11] . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
12
15
19
22
24
28
33
38
42
42
47
48
51
54
57
58
65
68
71
74
75
78
81
82
82
83
84
89
91
95
95
96
98
100
107
111
114
116
40
41
42
Bomberman Aktivitätsdiagramme [OWES11] . . . . . . . . . . . . . 116
Überblick über das Gearomat-System . . . . . . . . . . . . . . . . . 121
Ausschnitt des Gearomat-Feature-Modells . . . . . . . . . . . . . . 122
TA B E L L E N V E R Z E I C H N I S
Tabelle 1
Tabelle 2
Tabelle 3
Tabelle 4
Boolesche Ausdrücke der Feature-Modell-Konstrukte [CW07] 53
Funktionstabelle . . . . . . . . . . . . . . . . . . . . . . . . 62
Beweis impliziter Systemannahmen . . . . . . . . . . . . 113
Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
ABKÜRZUNGSVERZEICHNIS
BDD
Binary Decision Diagram
CSP
Communicating Sequential Processes
FMT
Feature-Model for Testing
FPGA
Field Programmable Gate Array
ITL
Interval Language
KNF
Konjunktive Normalform
LTL
Linear Temporal Logic
PSL
Property Specification Language
SAT
Satisfiability
SCR
Software Cost Reduction
SUT
Sytem-Under-Test
SVA
System Verilog Assertions
UML
Unified Modeling Language
VHDL
Very High Speed Integrated Circuit Hardware Description Language
ix
1
EINLEITUNG
Die Entwicklung eingebetteter Systeme, die aus Hard- und Software bestehen,
schreitet immer weiter voran. Sie werden heutzutage in den verschiedensten
Bereichen eingesetzt und nehmen stellenweise sogar eine dominierende Rolle
mit Hinblick auf die Entwicklungs- und Produktionskosten ein. Ihr Einsatzgebiet reicht von der Unterhaltungselektronik über die Fahrzeugelektronik bis
hin zur Kommunikationstechnik. Durch immer schneller werdende Hardware
und verbesserte Fertigungsprozesse erweitert sich das Einsatzspektrum und
die Komplexität eingebetteter Systeme fortlaufend. Dadurch ergeben sich neue
Herausforderungen für die Entwicklung und den Test eingebetteter Systeme.
Die Qualitätssicherung stellt einen zentralen Bestandteil eines jeden Entwicklungsprozesses dar. Die Qualität eines Systems hängt stark von den ursprünglichen Anforderungen sowie der Güte des Testprozesses ab. Wird ein in den
Anforderungen enthaltener Fehler erst spät im Entwicklungsprozess bemerkt
oder werden die Anforderungen durch das Entwicklungsteam fehlinterpretiert,
so sind die Kosten für die erforderlichen Verbesserungen immens. Anforderungen eindeutig und fehlerfrei bereits vor Beginn des Projekts zu formulieren
stellt daher einen zentralen Punkt auf dem Weg zu qualitativ hochwertigen
Systemen dar. Von qualitativ hochwertigen Anforderungen profitieren Entwicklungsprojekte unabhängig davon, ob nach Wasserfall- oder V-Modell
entwickelt wird oder ob agile Entwicklungsmethoden wie Scrum zum Einsatz
kommen.
Durch die immer stärkere Verbreitung von Produktlinien und der damit einhergehenden Variabilität in der Entwicklung wird die Analyse von Anforderungen
weiter erschwert. Es muss nun zusätzlich sichergestellt werden, dass alle Produkte, die aus den Anforderungen einer Produktlinie hervorgehen können,
widerspruchsfrei und vollständig beschrieben wurden. Hierfür müssen Automatismen gefunden werden, die die Entwicklung und das Projektmanagement
unterstützen, da eine Überprüfung jedes einzelnen Produktes zu aufwändig
ist.
Neben der prinzipiellen Machbarkeit von Qualitätssicherungsmaßnahmen
müssen immer auch ihre Kosten und der mit ihnen verbundene Zeitaufwand
beachtet werden. Man versucht beides durch die Einführung und die Weiterentwicklung von Werkzeugen auf allen Projektebenen, vom Projektmanagement
bis hin zur Testfallerzeugung, im Griff zu behalten. Die Verwendung formaler
1
2
einleitung
Methoden ist dabei noch wenig verbreitet, hat aber das Potential, den Funktionsumfang, den Werkzeuge zur Verfügung stellen, sinnvoll zu ergänzen bzw.
zu erweitern.
Werkzeuggestützte Qualitätssicherung wird vor allem dann zur Herausforderung, wenn, wie bei eingebetteten Systemen, neben der Software auch noch
Hardware mit ins Spiel kommt. Zu Beginn der Entwicklung müssen realisierbare Anforderungen definiert werden. Diese müssen dann auf ihre Konsistenz
und Vollständigkeit hin überprüft werden. Weiterhin muss festgelegt werden,
welche Anforderung in Hardware und welche in Software abgebildet werden
soll. Eine formale Sichtweise auf die Anforderungen kann helfen, eventuelle
Probleme schon im Vorfeld zu identifizieren und zu behandeln.
1.1
beitrag
Mit Bezug auf die beschriebenen Probleme lassen sich unter anderem folgende
Fragestellungen ableiten:
• Wie können Anforderungen, die das Verhalten eines Systems beschreiben,
formalisiert werden?
• Welche Einschränkungen bestehen bei der Formalisierbarkeit von Anforderungen und wie wirkt sich die Notation, in der sie vorliegen, auf ihre
Formalisierbarkeit aus?
• Wie kann Variabilität zu den formalisierten Anforderungen hinzugefügt
werden?
• Wie können formalisierte Anforderungen auf Vollständigkeit, Widerspruchsfreiheit und Redundanz geprüft werden?
• Wie können die formalisierten Anforderungen den Testprozess unterstützen?
Diese Arbeit nimmt Bezug auf die Fragestellungen und bedient sich dabei
Methoden aus der formalen Verifikation von Hardware. Ziel dabei ist es, Wege für die Unterstützung der Anforderungsanalyse mit formalen Methoden
aufzuzeigen. Ein formaler Ansatz wird in naher Zukunft durch die steigende
Komplexität der Anforderungen und durch das Hinzufügen von Variabilität immer wichtiger. Dieser muss überprüfen, ob die zu Grunde liegenden
Anforderungen das zu entwickelnde System vollständig beschreiben. Die Verfasser sollten sich über Freiheitsgrade, die der Entwicklung gelassen werden,
im Klaren sein. Weiterhin besteht eine Grundvoraussetzung darin, dass ein
Anforderungsdokument keine Widersprüche enthält. Diese führen dazu, dass
eine Implementierung der Anforderungen unmöglich wird. Zuletzt sollte ein
Anforderungsdokument keine redundante Information enthalten. So sind Änderungen im Anforderungsdokument leichter durchführbar. Die formalisierten
1.2 überblick
und überprüften Anforderungen dienen als Grundlage für die Generierung
eines Orakels. Ein Orakel ist ein ausführbares Modell des Systems, das zur
Vorhersage korrekten Systemverhaltens dient. Steht ein Orakel während des
Systemtests zur Verfügung, so kann dieser auch von Projektbeteiligten durchgeführt werden, die die Anforderungen nur in Teilen kennen. Des Weiteren
kann ein Orakel als Grundlage für den formalen Beweis von Sicherheitseigenschaften dienen. Diese beschreiben sichere Zustände eines Systems, in denen
es sich während seiner Ausführung befinden muss. Der Beitrag dieser Arbeit
lässt sich wie folgt zusammenfassen:
• Bewertung verschiedener Notationsstile, in denen Anforderungen verfasst sein können, mit Hinblick auf ihre Übersetzbarkeit in eine formale
Darstellung.
• Bewertung der Ausdrucksstärke und Grenzen der formalen Darstellung.
• Entwicklung einer Methodik für das Hinzufügen von Variabilität in
formalen Darstellungen.
• Erweiterung des zur strukturierten Beschreibung von Systemverhalten
verwendeten 4-Variablen-Modells durch Variabilität.
• Anwendung bestehender Algorithmen aus der formalen Hardwareverifikation zur Anforderungsanalyse und Orakelgenerierung im Bereich von
eingebetteten Systemen und Produktlinien eingebetteter Systeme.
• Entwicklung einer Methodik zum Beweis von Sicherheitseigenschaften
über Metriken zur Vollständigkeitsbewertung.
• Vorschlag eines Gesamtkonzepts für die Anforderungsanalyse und Testunterstützung auf Basis von formalen Darstellungen im Bereich der
Entwicklung einzelner Produkte und im Kontext von Produktlinien.
1.2
überblick
Die Arbeit gibt zu Beginn (Kap. 2) einen Überblick über dir Grundlagen der
Qualitätssicherung und führt formale Sprachen und Logiken (Kap. 3) ein. Es
folgt eine Einführung in die Formulierung von Anforderungen (Kap. 4) und
in die Produklinienentwicklung (Kap. 5). Anschließend wird auf die Algorithmen aus der formalen Hardwareverifikation, die zur Überprüfung der
Anforderungen und zur Generierung von Testorakeln dienen, eingegangen
(Kap. 6) und Eigenschaftssätze für Produktlinien eingeführt (Kap. 7). Sodann
wird die Verwendung dieser Algorithmen mit Hinblick auf die Produktlinienentwicklung eingebetteter Systeme behandelt (Kap. 8). Bevor die Arbeit
mit einer Zusammenfassung und einem Ausblick schließt (Kap. 10) werden
experimentelle Ergebnisse vorgestellt (Kap. 9).
3
4
einleitung
1: Einleitung
Teil I: Grundlagen
3: Formale Methoden
2: Grundlagen der
Qualitätssicherung
Eigenschaftsbeschreibungssprachen
Qualitätsbegriff
Eigenschaftsbeschreibungsstile
Modellbasiertes Testen
4: Darstellung von
Anforderungen
Teil II: Anforderungen und
Produktlinien
Requirements
Engineering
4-Variablen Modell
5: Produktlinien
und Variabilität
Definition
Darstellung
Anforderungen
für Produktlinien
6: Vollständigkeit
und Cando-Objekte
Grundlagen
Algorithmen
Produktlinientests
Teil III:
Konzept und
Ergebnisse
7: Formalisierung
von Anforderungen
Verhalten
Variabilität
Formalisierbarkeit
9: Experimentelle
Untersuchungen
8: Spezifikationsprüfung und Orakelgenerierung
Autositzsteuerung
Problembeschreibung
A-7E Flugzeug
Konzeptbeschreibung
Handyspiel
Verwandte Arbeiten
Gearomat
10: Fazit und
Ausblick
Abbildung 1: Struktur der Arbeit
Teil I
GRUNDLAGEN
In diesem Teil werden die für diese Arbeit relevanten
Grundlagen beschrieben. Er beginnt mit der eigentlichen
Definition des Qualitätsbegriffs und seiner Anwendung für
eingebettete Systeme. Hierfür wird die Qualitätssicherung
im Bereich des Softwareengineerings und die im Hardwareentwurf separat betrachtet. Weiterhin werden die Grundlagen des Testens im Software-Lebenszyklus eingeführt und
modellbasierte Ansätze vorgestellt. Dem schließt sich eine
Einführung in Communicating Sequential Processes und
die Erläuterung der Eigenschaftsbeschreibungssprachen
ITL und LTL an. Weiterhin werden Eigenschaftsbeschreibungsstile erörtert.
2
GRUNDLAGEN DER QUALITÄTSSICHERUNG
2.1
qualitätssicherung
Die Sicherung von Qualität nimmt einen zentralen Punkt im Entwicklungsprozess ein. Mangelt es an ihr, so werden Produkte unverkaufbar, die Wartungskosten explodieren oder die Sicherheit von Personen kann gefährdet werden.
Die grundlegende Vorgehensweise bei der Qualitätssicherung eingebetteter
Systeme sowie der Qualitätsbegriff werden im Folgenden erläutert.
2.1.1
Qualitätsbegriff
Der Qualitätsbegriff steht im Zentrum der Qualitätssicherung. Er findet nicht
nur im technischen Umfeld Anwendung, sondern wird unter Anderem auch in
den Bereichen Ausbildung, Forschung, medizinische Betreuung, Agrarwesen,
Finanzprodukte und vielen weiteren verwendet. Im Folgenden wird auf die
Qualität eingebetteter Systeme Bezug genommen. Qualität lässt sich nach
DIN 55350-11 [DIN95] als „die Gesamtheit aller Eigenschaften und Merkmale,
die sich auf die Eignung zur Erfüllung gegebener Erfordernisse beziehen“
definieren. Generell gibt es verschiedene Ausprägungen der Qualität, die auf
unterschiedliche Bereiche abzielen. Die Strukturqualität ist dabei die globalste
Interpretation des Qualitätsbegriffs und beschreibt die Qualität einer Firma.
Definition 2.1: System - „A collection of components organized to accomplish a specific function or set of functions.“
[IEE90]
Dazu zählen Ausbildung und Fachkenntnisse der Mitarbeiter, Neuheit und
Funktionalität der Arbeitsmaterialien, die Qualität der angewandten Methoden und die ausreichende Ausstattung mit Finanzmitteln. Die Prozessqualität
setzt vor allem die Abläufe und deren Standardisierung in den Fokus. Zu ihr
zählen die Punkte Sicherheit, Koordination, Wirksamkeit, Angemessenheit
und Zugänglichkeit. Weiterhin wird auch die Ergebnisqualität, die im Mittelpunkt dieser Arbeit steht, bewertet. Sie beschreibt die Qualität des fertigen
Produkts. Dabei liegt das Hauptaugenmerk auf der Fehlerfreiheit, der Sicherheit, der Erfüllung der Kundenwünsche und der Dokumentation. Ein Maß für
die Gesamtqualität ist nach Kano die Kundenzufriedenheit bezogen auf das
7
8
grundlagen der qualitätssicherung
fertige Produkt [ZM06]. Einzelne Anforderungen an ein Produkt werden dabei
bewertet und gewichtet, indem der Einfluss auf die Kundenzufriedenheit bei
Erfüllung bzw. nicht Erfüllung der selben ermittelt wird. Der Qualitätsbegriff definiert sich also gemäß dem Anwendungsgebiet, unterliegt aber immer
Qualitätskriterien, die in einem Qualitätsstandard zusammengefasst sind. Die
Qualitätssicherung überprüft die Einhaltung der Qualitätskriterien und definiert ein Maß, die sogenannte Metrik, für die Beurteilung der Qualität.
Aus der Definition der Qualität für das Gesamtprodukt lassen sich Qualitätsanforderungen für die Entwicklung und den Testprozess eines eingebetteten
Systems ableiten. Sowohl das gewünschte Verhalten des fertigen Systems als
auch die Anforderungen an dessen Qualität müssen in einer Spezifikation
festgehalten werden. Anhand dieser Spezifikation wird das System entwickelt und zugehörige Testfälle aufgestellt. Die Qualität der Spezifikation ist
folglich ein wesentlicher Gradmesser für mögliche Qualität des entstehenden
Gesamtsystems. Da eingebettete Systeme im Normalfall aus Hardware- und
Softwarekomponenten bestehen, wird der Qualitätsbegriff für diese beiden
Felder im Folgenden noch weiter spezialisiert.
2.1.2
Qualität des fertigen Produkts
Die Qualität des fertigen Produkts gliedert sich in drei Unterpunkte, die Standards unterworfen sind, nämlich der Fertigung, dem Fertigungstest und der
Interaktion mit der Umwelt. Im Folgenden wird wegen ihrer freien Verfügbarkeit vor allem auf Standards des Department of Defense Bezug genommen.
Vor der Freigabe muss jeder integrierte Schaltkreis auf seine Tauglichkeit in
Bezug auf Umwelteinflüsse getestet werden. Hierfür dient z.B. der MIL-STD810G [Dep08], in dem genaue Testmethoden festgehalten sind nach denen ein
Prototyp zu überprüfen ist.
Definition 2.2: Test - „An activity in which a system or component is executed under specified conditions, the results are
observed or recorded, and an evaluation is made of some aspect
of the system or component.“ [IEE90]
Dabei hängt die Wahl der Tests stark vom eigentlichen Einsatzort ab. Dieser
kann sich in Bezug auf Bedingungen, wie Temperatur, Feuchtigkeit, Erschütterungen und Belastung der Atmosphäre mit Partikeln oder chemischen Stoffen, ändern. Weiterhin sind elektromagnetische Effekte nach MIL-STD-461E
[Dep07b] zu untersuchen und die Normen einzuhalten. Diese Effekte beziehen
sich auf die frequenzabhängigen Abstrahlungseigenschaften des Bauteils oder
des Geräts. Außerdem wird die Funktionstüchtigeit des Geräts bei definierter
frequenzabhängiger Einstrahlung überprüft. Auch hier hängt die Strenge der
2.1 qualitätssicherung
Norm vom Einsatzort ab. Weiterhin wird das Verhalten bei hochfrequenter
Einstrahlung und Überspannungspulsen auf Signal- und Spannungsversorgungsleitungen überprüft.
Der Fertigungsprozess integrierter Schaltungen wird in MIL-PRF-38535H
[Dep07a] und ihre Testmethoden in MIL-STD-883G [Dep06] festgelegt. Hier
werden vor allem Bedingungen definiert, die eine Fertigungsanlage in Bezug
auf die Qualität erfüllen muss. Dazu gehören die Dokumentation des Fertigungsprozesses und der zugehörigen Testmethoden. Weiterhin ist definiert,
welche Kennzeichnung die fertigen integrierten Komponenten haben müssen
und wie der Einpackprozess ablaufen muss.
2.1.3
Qualitätssicherung im Hardwareentwurf
Die Qualität zeichnet sich im Hardwareentwurf durch zwei Hauptkomponenten aus. Die Erste bezieht sich auf die Entwurfsphase und die logische
Korrektheit des Entwurfs, die Wartbarkeit des Codes und die Systemleistung. Sie stellt also, ähnlich wie im Software Engineering, eher eine abstrakte
Sichtweise auf die Qualität dar. Die Zweite nimmt Bezug auf den tatsächlich gefertigten Chip. Dabei können Fertigungsfehler und Umwelteinflüsse
die Qualität mindern. Weiterhin beeinflusst jeder produzierte und in Betrieb
genommene Hardwarebaustein seine Umwelt durch elektromagnetische Abstrahlung und Wärmeemissionen. Im Folgenden wird auf die in dieser Arbeit
relevante Korrektheit während der Entwurfsphase eingegangen:
Entwurfskorrektheit: Die Grundlage eines erfolgreich entwickelten Hardwaresystems bildet der korrekte Entwurf der Schaltungen. Durch sie werden
Ausgangs- und Eingangssignale zueinander in Bezug gesetzt. Die Schaltung
muss dabei exakt das in der Spezifikation beschriebene Verhalten abbilden.
Um das sicher zu stellen gibt es zwei Hauptansätze, die sich in der Praxis
gegenseitig ergänzen und auf die im Folgenden kurz eingegangen wird:
Simulation: Die Simulation zählt zu den dynamischen Testverfahren (2.2.2).
Bei der Simulation wird ein Modell der Schaltung, das normalerweise in
einer Hardwarebeschreibungssprache formuliert ist, durch Stimuli angeregt
und das Ausgangsverhalten bewertet. Die Stimuli bilden die Eingangswerte
der Schaltung. Sie können entweder durch den Tester direkt angegeben oder
automatisch erzeugt werden. Weiterhin kann die Schaltung mit zufälligen
Eingangsfolgen angeregt werden. Das Ergebnis der Simulation kann entweder
automatisch über Assertionsprachen oder manuell durch den Tester ausgewertet werden. Weiterhin benötigt die Simulation Testendekriterien, die sich aus
Metriken (2.2.4) ableiten lassen. Das ist nötig, weil ein vollständiger Test bei
komplexen Systemen nicht mehr möglich ist.
9
10
grundlagen der qualitätssicherung
Formale Verifikation: Bei der formalen Verifikation handelt es sich um ein statisches Testverfahren (2.2.1). Hier wird das entwickelte System nicht ausgeführt.
Es werden stattdessen Eigenschaften formuliert, denen das entwickelte System
genügen muss. Diese werden dann auf dem System bewiesen. Als Ergebnis
erhält man für jede einzelne Eigenschaft entweder die Aussage, dass die Eigenschaft hält, oder es wird ein Gegenbeispiel ausgegeben, das eine Situation
zeigt, in der die Eigenschaft nicht hält. Halten alle formulierten Eigenschaften
und beschreiben diese das System in vollständiger und beabsichtigter Weise,
so ist sichergestellt, dass ein den Anforderungen gemäßes, korrektes System
entwickelt wurde. Die formale Verifikation wird im Normalfall immer durch
die Simulation ergänzt.
Definition 2.3: Modul/Komponente - Ein abgeschlossener Bestandteil eines Systems.
Gerade zu Beginn der Entwicklung ist die Simulation der formalen Verifikation
vorzuziehen, da durch die Simulation auch in unvollständigen Designs Fehler
gefunden werden können und so eine erste, funktionierende Version des
Moduls bzw. Systems erstellt werden kann. Weiterhin kann es vorkommen,
dass die Verifikation an Komplexitätsgrenzen stößt und so die Simulation der
einzige Weg ist, die Qualität sicherzustellen.
2.1.4
Qualitätssicherung im Software Engineering
Der komplette Lebenszyklus der Software ist im Bereich des Software Engineerings in einem Standard geregelt. Er ist in IEEE 12207 [IEE08] definiert und
beschreibt folgende Hauptpunkte:
1. Projektakquise
2. Definition des Projektplans
3. Entwicklungs- und Testprozess
4. Verwendung der fertiggestellten Software
5. Wartung der Software
Dieser Standard bildet die Grundlage für einen Großteil der öffentlichen und
privatwirtschaftlichen internationalen Ausschreibungen. Er ersetzte zudem
1998 den MIL-STD-498 und dient als Leitfaden für Softwareprojekte im Verteidigungssektor. Die Hauptpunkte beschreiben das Vorgehen wie folgt:
Projektakquise: Jedes Projekt startet mit der Initiierung, in der vorerst die Notwendigkeit der Entwicklung beschrieben wird. Anforderungen an das System
2.1 qualitätssicherung
werden definiert und überprüft und globale Anforderungen an die zu entwickelnde Software werden beschrieben. Im Anschluss daran muss evaluiert
werden, ob anhand der definierten Anforderungen bestehende Softwareprodukte zum Einsatz kommen können oder eine Neuentwicklung notwendig ist.
Ist eine Neuentwicklung nötig, so wird ein Akquisitionsplan erstellt und die
Voraussetzungen für die Zusage an einen Projektpartner definiert.
Definition des Projektplans: Nach der Zusage an einen Projektpartner wird
ein Projektplan vom Projektmanagement erstellt. Der Plan beantwortet die für
das Projekt grundlegenden Fragen, die alle am Projekt beteiligten Parteien
betreffen. Dazu gehören:
• Welches grundlegende Ziel hat die Entwicklung? Welche Probleme sollen
mit den zur Verfügung gestellten Finanzmitteln gelöst werden?
• Was soll das fertige Produkt können? Was sind die Teilprodukte und
welche Funktionen haben sie?
• Wer ist an dem Projekt beteiligt? Wer trägt die Verantwortung für welche
Projektteile?
• Wann soll das Projekt fertiggestellt werden und was sind die Meilensteine
auf dem Weg dorthin?
Entwicklungs- und Testprozess: Sind alle Ziele eines Projekts definiert, kann
mit der Entwicklung begonnen werden. Diese orientiert sich in den meisten
Fällen am V-Modell aus Abb. 2 [Wal01]. Vom V-Modell existieren untschiedliche Ausprägungen, die aber immer die beiden Äste Implementierung und
Verifikation/Validierung beinhalten und sie miteinander in Beziehung setzen.
Die Verifikation bezieht sich auf die Überprüfung, ob das entwickelte System
oder dessen Bestandteile den Anforderungsdokumenten genügen.
Definition 2.4: Verifikation - „The process of evaluating a system or component during or at the end of the development process to determine whether it satisfies specified requirements.“
[IEE90]
Die Validierung bewertet im Gegensatz dazu, ob das spezifikationsgetreu
entwickelte System überhaupt für den beabsichtigen Gebrauch einsetzbar
ist.
Definition 2.5: Validierung - „The process of evaluating a system or component to determine whether the products of a
given development phase satisfy the conditions imposed at the
start of that phase.“ [IEE90]
11
12
grundlagen der qualitätssicherung
Dadurch werden die Stufen des Entwicklungsprozesses mit dem Ziel abstrahiert, die Fehlersuche zu erleichtern. Entwicklungen nach dem V-Modell folgen
Sytemkonzeptvalidierung
Systemkonzept
Betrieb
Anforderungsvalidierung
Anforderungsdefinition
Detaillierung
Pilotbetrieb
Validierung
Testen
Systemspezifikation
Systemtest
Systementwurf
Simulieren
Verifizieren
Modulentwurf
Simulieren
Verifizieren
Verifikation
Integrationstest
Modulverifikation
Zeit
Abbildung 2: V-Modell [Wal01]
einem vordefinierten Ablauf. Nach der Erstellung des Systemkonzepts müssen
die Anforderung an die Software, die sich aus den Anforderungen an das fertige Produkt ergeben, erkannt und beschrieben werden. Aus den Anforderungen
lässt sich eine Systemspezifikation erzeugen, die grundlegend die gewünschte Struktur des Softwareprojekts beschreibt. Dann wird der Systementwurf
erstellt und die Verbindungen, also die Art mit der Module innerhalb des
Systems untereinander kommunizieren, modelliert. Nun müssen die Module,
aus denen das System besteht, so genau wie möglich beschrieben werden.
Aus den Modulen wird die eigentliche Implementierung automatisiert oder
manuell erzeugt. Die Module werden im Anschluss einzeln getestet. Ist ein
Modul fehlerhaft, so wird der Fehler analysiert und behoben. Tritt während
des Modultests kein Fehler mehr auf, so wird mit dem Integrationstest fortgefahren. In ihm wird die Kommunikation zwischen den Modulen getestet
und eventuelle Fehler im Systementwurf behoben. Zuletzt wird der Systemtest
ausgeführt, der überprüft, ob das entwickelte System die Systemspezifikation erfüllt. Ist das nicht der Fall, so muss die Systemspezifikation oder die
entwickelte Software angepasst werden.
Verwendung der fertiggestellten Software: Die Verwendung der Software
stellt den Normalzustand des in Betrieb genommenen Systems dar. Er wird
2.2 testarten
erreicht, wenn alle Tests abgeschlossen sind und das System für seinen Anwendungsbereich freigegeben wurde.
Wartung der Software: Während der Softwarewartung werden bekannte Fehler ausgebessert und Verbesserungen in die Software eingefügt. Dabei kann
es sich um die Erweiterung des Funktionsumfangs, generelle Verbesserungen
der Bedienbarkeit oder die Veränderung verschiedener Softwarebestandteile
handeln.
Der grundlegende, starre Entwicklungsprozess wird in der Praxis häufig durch
Veränderungen der Kundenwünsche oder Missverständnisse zwischen den
Projektpartnern erschwert. Dadurch ändern sich die Anforderungen während
des Entwicklungsprozesses oder neue Anforderungen werden hinzugefügt.
Die Konsistenz des Gesamtprojekts muss aber zu jeder Zeit gewährleistet sein.
Es darf folglich durch Anforderungsänderungen kein Widerspruch zwischen
zwei oder mehr Anforderungen entstehen, da sonst die Implementierung
unmöglich ist. Qualität zu messen ist durch die Komplexität der Systeme und
Prozeduren faktisch nicht durchführbar. Es besteht einzig die Möglichkeit, die
Einhaltung definierter Qualitätsanforderungen zu überwachen.
2.2
testarten
Man unterscheidet zwei Hauptarten des modellbasierten Tests: den statischen
und den dynamischen Test. Beide können sowohl demonstrativ als auch destruktiv ausgeführt werden. Demonstratives Testen zielt auf eine Testausführung,
die zeigen soll, dass das entwickelte System funktioniert. Es wird also so
getestet, dass möglichst wenige Tests fehlschlagen. Das steht dem Ansatz des
destruktiven Testens gegenüber, der ein System einzig mit dem Ziel ausführt,
Fehler zu entdecken. Der destruktive Ansatz ist dem Demonstrativen generell
vorzuziehen, da so mehr Fehler gefunden werden können. Die Schwierigkeit
bei der Einführung des destruktiven Testens liegt in der Denkweise von Entwicklern begründet, die meist zum demonstrativen Testen neigen und den
destruktiven Ansatz leicht als Kritik an ihrer Arbeit missverstehen.
2.2.1
Statischer Test
Das statische Testen bezieht sich auf die Analyse des Programmcodes, der
zu Grunde liegenden Anforderungen oder des Projektplans. Diese kann in
Besprechungen mit vorgegebenem Ablauf, Zielen und Personen stattfinden.
Dazu gehören Audits, Reviews, Walkthroughs und Inspektionen. Diese Arten
des statischen Testens eignen sich besonders gut für nicht automatisierbare
oder modellierbare Teile des Testens, sowie für die Plausibilitätsüberprüfung
13
14
grundlagen der qualitätssicherung
von Anforderungen und erstelltem Code. Weiterhin kann durch die Beteiligung mehrerer Personen mit unterschiedlichen Qualifikationen ein breiteres
Fehlerspektrum gefunden werden.
Code an sich kann durch Software-Werkzeuge statisch analysiert werden. Die
Analyse bezieht sich hier auf [Wal01]:
• Syntaktische Informationen (Komplexitätsmaße, Abhängigkeitsgraphen)
• Semantische Informationen (Anomalien im Steuer- und Datenfluss; verwendete, aber nicht deklarierte Variablen)
• Lexikalische Informationen (Prozedurlängen)
Diese Art der statischen Codeanalyse liefert also ohne den Code vorher auszuführen ein Maß für die Codekomplexität und unterstützt den Entwickler
gleichzeitig beim Entdecken semantischer Fehler.
Korrektheitsbeweise, wie sie in der formalen Verifikation Einzug gehalten haben,
stellen eine weitere Methodik für den statischen Test dar. Hier werden Eigenschaften formuliert, die für ein korrekt arbeitendes System gelten müssen. Es
wird dann formal bewiesen, dass das erstellte System diesen Eigenschaften
genügt. Problematisch an Korrektheitsbeweisen ist vor allem ihre hohe Komplexität und die damit zusammenhängenden langen bzw. nicht mehr vertretbaren
Rechenzeiten. Außerdem muss sichergestellt werden, dass die bewiesenen
Eigenschaften die gewünschte Funktionalität vollständig beschreiben.
2.2.2
Dynamischer Test
Für den dynamischen Test wird das Testobjekt ausgeführt und die Ausgaben
beurteilt. Dabei ist es ab einem genügend großen System nicht mehr praktikabel, alle möglichen Eingangs- und Zustandskombinationen zu testen. Für
einen dynamischen Test müssen also Testziele und Testendekriterien formuliert werden. Solche Kriterien werden vor allem durch Metriken bestimmt,
auf die in 2.2.4 genauer eingegangen wird. Für einen dynamischen Test muss
weiterhin das erwartete, als korrekt angesehene Ergebnis im Vorhinein bekannt
sein. Dieses kann dann automatisiert oder manuell, wie in Abb. 3, mit dem
Ergebnis des Tests verglichen werden. Weiterhin muss der Testfall reproduzierbar sein, um sicherstellen zu können, dass ein gefundener Fehler durch
eine Änderung im System auch behoben wurde (Retesting). Außerdem sind
reproduzierbare Testfälle für den sogenannten Regressionstest unentbehrlich,
der nach jeder Änderung im System ausgeführt werden sollte und überprüft,
ob durch die Änderung Fehler in bereits getesteten Programmteilen eingeführt
oder demaskiert wurden. Ein Test sollte außerdem nicht nur im erlaubten
Bereich der Eingabewerte stattfinden, sondern auch Eingabewerte außerhalb
der spezifizierten Bereiche abprüfen.
2.2 testarten
System
Vergleich
Testfälle
Systemmodell
Abbildung 3: Dynamischer Test
Der Testprozess ist streng hierarchisch geregelt und verläuft, nach dem VModell (2.1.4), in den Stufen Modul-, Integrations-, System- und Abnahmetest.
Die Ermittlung der Testfälle kann in zwei Hauptmethodiken unterteilt werden,
den Black-Box-Test und den White-Box-Test. Beim Black-Box-Test sind keine
Informationen über die Implementierung des Systems vorhanden. Testfälle
werden allein aus den spezifizierten Bereichen für die Eingangswerte des
Systems (2.3.3) bzw. aus dem gewünschten Funktionsumfang erstellt. Der
White-Box-Test setzt im Gegensatz dazu ein genaues Verständnis der inneren
Struktur (Programmcode, Automaten) des Systems voraus.
2.2.3
Fehlertypisierung
In Software können verschiedene Typen von Fehlern [Wal01, IEE90] auftreten,
die im Folgenden näher erläutert werden.
Definition 2.6: Fehler - Ein Fehler ist der Oberbegriff für eine
Fehlhandlung, einen Fehlerzustand und eine Fehlerwirkung
und charakterisiert die Nichterfüllung einer definierten Anforderung
Mangel (defect): Ein Mangel liegt vor, wenn die Erfüllung der Anforderung
nicht angemessen für den erwarteten Gebrauch ist.
Fehlhandlung (error): Unter einer Fehlhandlung versteht man die menschliche
Handlung, die zum inkorrekten Ergebnis geführt hat. Aus ihr folgt ein Mangel
im entstehenden Produkt.
Fehlerzustand (fault): Der Fehlerzustand oder innerer Fehler beschreibt die
Wirkung einer Fehlhandlung in Software und stellt die Ursache für das Auftreten einer Fehlerwirkung dar.
Fehlerwirkung (failure): Die Fehlerwirkung oder der äußerer Fehler ist die
sichtbare Manifestation eines Fehlerzustands für den Anwender.
15
16
grundlagen der qualitätssicherung
Die Klassifizierung und Dokumentation von Fehlern wird in IEEE 1044 [IEE10]
geregelt. Das dient vor allem dazu, einen Überblick, über bereits gefundene
Fehler zu erhalten und den Status ihrer Behebung nachvollziehen zu können.
2.2.4
Metriken
Beim Software- und Hardwaretest wird Hauptmaß für ihre Qualität meist eine
Metrik verwendet. Eine Metrik wird passend für den jeweiligen Anwendungsfall definiert und unterliegt klaren Richtlinien, die in der Norm IEEE 1061
[IEE98a] formuliert sind.
Definition 2.7: Qualitätsmetrik - „(1) A quantitative measure
of the degree to which an item possesses a given quality attribute.
(2) A function whose inputs are software data and whose
output is a single numerical value that can be interpreted as
the degree to which the software possesses a given quality
attribute.“ [IEE90]
Vorteile einer wohldefinierten Metrik liegen vor allem in
• der Definition einer messbaren Größe der bereits erreichten Qualität.
• der Möglichkeit aus ihr Akzeptanzkriterien abzuleiten.
• der andauernden Überwachung des Qualitätsniveaus während des Entwicklungsprozesses.
• dem Erkennen möglicher Anomalien oder Probleme im System.
Beim Aufstellen einer Metrik müssen die Qualitätsanforderungen analysiert
werden und eine Möglichkeit zur Quantifizierung gefunden werden. Diese
wird dann nach einer Kosten-Nutzen-Analyse evaluiert und zuletzt implementiert. Jede Metrik muss mit Hilfe von statistischen Methoden [IEE98a]
mit Hinblick auf ihre Aussagekraft validiert werden. Aus dem Softwaretest
bekannte Metriken sind die sogenannten Überdeckungsmetriken [Wal01], die
beim White-Box-Testen Anwendung finden:
Anweisungsüberdeckung (C0 ): Die Anweisungsüberdeckung misst den Prozentsatz der durch den Test ausgeführten Anweisungen im Programm. Bei
einer Anweisungsüberdeckung von 100 % wurde jede Codezeile mindestens
einmal ausgeführt. Sie sollte immer erreicht werden und kann vor allem dazu
genutzt werden, nicht erreichbaren Programmcode aufzuspüren.
2.3 modellbasiertes testen
Zweigüberdeckung (C1 ): Die Zweigüberdeckung beschreibt das Verhältnis
von ausgeführten Verzweigungen zu allen im Programm enthaltenen Verzweigungen. Eine Zweigüberdeckung von 100 % durchläuft alle Kanten des
Kontrollflussgraphen und führt automatisch zu einer Anweisungsüberdeckung
von 100 %. Die Probleme der Zweigüberdeckung bestehen vor allem darin,
dass keine Angabe darüber gemacht wird, in welcher Kombination und mit
welcher Häufigkeit Verzweigungen auftreten und man Verzweigungen nicht
unterschiedlich gewichten kann. Häufig ist es auch schwierig Testfälle so zu
gestalten, dass alle Zweige aufgerufen werden.
Bedingungsüberdeckung (C2 ): Die Bedingungsüberdeckung betrachtet, anders als die Zweigüberdeckung, nicht nur einzelne Verzweigungen, sondern
auch die einzelnen Bedingungen, die zu einer Verzweigung führen. Dabei
bestehen verschiedene Möglichkeiten diese in Betracht zu ziehen. Bei der
einfachen Bedingungsüberdeckung werden alle Bedingungen, die innerhalb
einer Verzweigungsanweisung auftreten, als atomare Bestandteile betrachtet.
Logische Verknüpfungen zwischen ihnen werden vernachlässigt. Daher reicht
es für die einfache Bedingungsüberdeckung aus, wenn jedes Prädikat einmal
wahr bzw. falsch wurde.
Überdeckung aller Bedingungskombinationen (C3 ): Hierbei handelt es sich
um die vollständigste Art von Kontrollflussüberprüfung. Alle Prädikate innerhalb einer Verzweigung werden in allen möglichen Kombinationen mindestens
einmal getestet um eine 100 % Abdeckung zu erhalten. Die Anzahl der auszuführenden Testfälle wächst dabei exponentiell um dem Faktor 2n , wobei n die
Anzahl der Prädikate angibt.
Pfadüberdeckung (C4 ): Die Pfadüberdeckung definiert ein Maß, das zur Bewertung der Schleifen innerhalb eines Programms herangezogen werden kann.
Es werden alle möglichen Pfade im Kontrollflussgraphen des Programms
durchlaufen. Eine Pfadüberdeckung von 100% ist in der Praxis wegen der
Vielzahl der möglichen Kombinationen meist nicht zu erreichen.
Bei den beschriebenen Metriken handelt es sich um kontrollflussorientierte
Techniken, die keine Vorgaben über die Art des Tests machen. Sie dienen einzig
der Bewertung vorhandener Testfälle und definieren nicht, wie diese erzeugt
wurden. Am besten geeignet sind diese Techniken zum Testen einzelner Softwaremodule. Das Zusammenspiel verschiedener Module beim Systemtest ist
damit allerdings nicht zu bewerten.
2.3
modellbasiertes testen
Beim modellbasierten Testen werden die Testfälle aus einem vorher formulierten Modell abgeleitet [Vig10]. Das Konzept des modellbasierten Testens soll
im Folgenden genauer dargestellt werden.
17
18
grundlagen der qualitätssicherung
2.3.1
Modellbegriff
Das Wort Modell entstammt dem lateinischen Wort modulus (Maß, Takt, Melodie)
und wird heute für die Beschreibung der abstrakten Darstellung der Realität
verwendet.
Definition 2.8: Modell - Eine abstrakte Beschreibung der Struktur oder des Verhaltens eines konkreten Systems.
Modelle sind also nur darstellende Hilfsmittel, um Systeme abzubilden. Sie
dienen entweder dazu, vorhandene Systeme zu beschreiben und deren Verhalten zu simulieren (z.B. Klimamodelle, Planetenmodelle, Erdkrustenmodelle)
oder dazu Systeme zu beschreiben, die später manuell oder automatisch
implementiert werden sollen (z.B. Hardwarebeschreibungssprachen, Programmiersprachen, Automaten).
2.3.2
Orakel
Ein Orakel im Bereich des modellbasierten Softwaretests manifestiert sich
in der Literatur in verschiedenen Ausprägungen. Ein guter Überblick über
die zur Zeit eingesetzten Orakel wird von Baresi und Young gegeben [BY01].
Im Folgenden wird eine kurze Zusammenfassung der gängigsten Konzepte
im Bereich von Orakeln präsentiert. Der größte Teil der Testorakel basiert
auf Assertions, die in den Programmcode eingebettet werden. Bei Assertions
handelt es sich um Annahmen oder Eigenschaften, die ein Programmierer
über das Verhalten der Software vor, während und nach dem Schreiben des
Programmcodes formuliert. Eine Assertion besteht aus einem Ereignis, das
eintreten muss, damit die Assertion ausgewertet wird und einem Verpflichtungsteil, der dann gelten muss. Zum Formulieren von Assertions wurden
spezielle Sprachkonstrukte (z.B. für C oder Java) definiert.
Orakel können außerdem aus Spezifikationssprachen, wie Z [Spi89], abgeleitet
werden. Aus ihnen kann sowohl C-Code als auch objektorientierter Code
erzeugt werden. Weiterhin ist es möglich, Orakel aus temporaler Logik zu
generieren [DR96]. Diese bewerten Sequenzen aus Ereignissen mit Hinblick
auf ihre Korrektheit.
Im Rahmen dieser Arbeit wird ein Orakel als Verhaltensmodell für ein System
angesehen. Es ist also dazu in der Lage, das Verhalten eines entwickelten Systems anhand der Eingaben und internen Zustände vorherzusagen. Dadurch
kann vor oder während der Testausführung eines Prototypen dessen korrektes, also spezifikationsgetreues, Ausgangsverhalten vorhergesagt werden. Ein
Tester muss folglich für die Beurteilung der Korrektheit des Tests nicht mehr
2.3 modellbasiertes testen
die Spezifikation kennen, sondern kann die Testergebnisse mit den durch das
Orakel vorhergesagten vergleichen. So wird das Orakel zum Systemmodell
aus Abb. 3.
2.3.3
Klassifikationsbäume
Die Klassifikationsbaummethode beschreibt einen strukturierten Black-BoxTestansatz, der 1993 von Grochtmann et al. [GGWA93] vorgestellt wurde. In
ihrem Zentrum steht der Klassifikationsbaum, der eine strukturierte Darstellung für Äquivalenzklassen durch einen azyklischen Graph bietet. Eine Äquivalenzklasse besteht aus einer Menge disjunkter Wertebereiche oder aus einer
Menge einzelner, disjunkter Werte, für die ein System, das spezifikationsgemäß
arbeitet, ein äquivalentes Verhalten aufweist. Durch diese Darstellung wird
der Eingabebereich abstrahiert und strukturiert. Unterstützt wird der Aufbau
von Klassifikationsbäumen durch das Tool Classification Tree Editor for Embedded
Systems (CTE/ES). Abb. 4 zeigt einen Klassifikationsbaum mit zugehörigen
Testfällen, der für einen Autositz aufgebaut wurde. Jeder Klassifikationsbaum
besteht aus den vier Elementen Wurzelknoten (Seat), Kompositionen (Sensors,
Switches), Klassifikationen (Position, Speed, Door, All-Triggers) und den Äquivalenzklassen. Um Testfälle aus einem Klassifikationsbaum abzuleiten, wird
dieser durch eine Tabelle erweitert, in der für den jeweiligen Testfall ausgewählte Äquivalenzklassen durch einen Punkt gekennzeichnet werden. Die Testfälle
sind je nach Intention des Entwicklers entweder als unabhängig voneinander
oder als zeitliche Abfolge zu betrachten. Die Extraktion von Testfällen aus einer
Seat
Sensors
Switches
Position
Speed
Door
[0] [1..49] [50]
[0] [1..15] [16..200]
[closed] [open]
Start SA
SA Move Back
SA Back
SA Move Forward
SA Finished
Abbildung 4: Klassifikationsbaum
AllTriggers
[-]
[0]
[+]
19
20
grundlagen der qualitätssicherung
Spezifikation mit Hilfe eines Klassifikationsbaums verläuft nach folgendem
Schema:
1. Die Spezifikation muss evaluiert werden und alle Klassifikationen mit
ihren Äquivalenzklassen identifiziert werden.
2. Der Klassifikationsbaum muss aufgebaut werden.
3. Die Tabelle, die die Testfälle beschreibt, muss ausgefüllt werden. Dabei
finden verschiedene Heuristiken Anwendung.
4. Alle möglichen Testfälle werden aus dem Klassifikationsbaum erzeugt.
Um den Klassifikationsbaum auch für Stresstests verwenden zu können, ist
es sinnvoll Äquivalenzklassen außerhalb der spezifizierten Bereiche hinzuzufügen. Dadurch können Stresstests ausgeführt oder Sensordefekte simuliert
werden.
3
FORMALE DARSTELLUNGEN
Eine formale Methode bedient sich einer formalen Darstellung, die automatisiert bewertet, ausgewertet oder transformiert werden kann. Formale
Darstellungen müssen eindeutig interpretierbar sein und basieren daher stets
auf einer eindeutigen Semantik. Die in dieser Arbeit verwendeten formalen
Sprachen und Logiken werden im Folgenden genauer behandelt.
3.1
communicating sequential processes
Der Begriff CSP wurde von Hoare eingeführt [Hoa04]. CSPs beschreiben mittels
einer definierten Semantik nebenläufige Prozesse P.
Definition 3.1: Prozess (process) - Ein Prozess ist die mathematische Abstraktion der Interaktion eines Systems und seiner
Umgebung
Prozesse werden durch das Auftreten von Ereignissen e1 . . . en gestartet und
beendet. Zu jedem Zeitpunkt kann ausschließlich ein Ereignis eintreten.
Definition 3.2: Ereignis (event) - Ein Ereignis stellt eine atomare Aktion ohne Dauer dar. Eine Verkettung von Ereignissen
kann zur Beschreibung komplexerer Sachverhalte genutzt werden.
Jedes System wird durch eine Menge von Prozessen charakterisiert und kann
innerhalb eines definierten Alphabets αP = {e1 . . . en } agieren.
Definition 3.3: Alphabet - Die Menge von Ereignisnamen, die
für die Beschreibung eines Systems relevant sind.
Die einfachste Art einen Prozess zu beschreiben ist es, eine Abfolge von
Ereignissen, wie z.B. P = e1 → e2 → P, zu definieren. Abb. 5 zeigt beispielhaft
einen Automaten, der im Folgenden zur Erläuterung der Konzepte von CSPs
dient. Der Automat lässt sich durch folgende Prozesse beschreiben:
21
22
formale darstellungen
switch/out
start
ON
OFF
switch/out
switch/out
switch/out
Abbildung 5: Beispielautomat
PINIT = start → PON ;
PON = (switch → out → PON | switch → out → POFF );
POFF = (switch → out → POFF | switch → out → PON )
Das Alphabet der Prozesse ist wie folgt definiert:
αPINIT = {start} ; αPOFF = αPON = {switch, switch, out, out}
PON beschreibt das Verhalten des Automaten im Zustand ON und POFF im
Zustand OFF. Der Initialzustand wird durch PINIT festgelegt. Durch | wird eine
Auswahl zwischen den Transitionen getroffen, die vom jeweiligen Zustand
ausgehen. Da der Automat ein deterministisches Verhalten zeigt, kann zu
jedem Zeitpunkt auch immer nur eine der Bedingungen für die jeweiligen
Transitionen wahr werden. Die Umgebung startet den Automaten mit dem
Ereignis start. Er befindet sich dann immer in einem der beiden Zustände PON
oder POFF . Wird der Automat ausgeführt, so ergeben sich dadurch unendlich
viele mögliche Ereignisfolgen, wie z.B. t = he1 , e2 , e1 , e3 i.
Definition 3.4: Ereignisfolge (trace) - Eine Ereignisfolge des
Verhaltens eines Prozesses ist eine endliche Abfolge von Ereignissen, die bei der Ausführung eines Prozesses bis zu einem
bestimmten Zeitpunkt eingetroffen sind.
Diese können wie folgt miteinander konkateniert werden:
he1 , e2 i_he1 , e3 i = he1 , e2 , e1 , e3 i
Eine gültige Ereignisfolge des Automaten ist beispielsweise:
t = hstart, switch, out, switch, outi
Diese Ereignisfolge kann durch den Reduktionsoperator |` auf eine Teilmenge
der Ereignisse reduziert werden t |` {out, out} = hout, outi.
Die Möglichkeit zu definieren, ob ein Ereignis eine Eingabe in den Automaten
oder eine erzeugte Ausgabe beschreibt, besteht in CSPs ebenfalls. Dafür werden
Kanäle definiert, über die Werte weitergegeben werden. Die Kommunikation in
CSPs besteht immer aus der Angabe des Kanals c und dem übertragenen Wert
3.2 uml-diagramme
v, sowie der Information, ob es sich um eine Eingabe c?v oder eine Ausgabe
c!v handelt. Die Prozesse des Automaten können also wie folgt geändert
werden:
PINIT = start?0 → PON ;
PON = (switch?0 → out!1 → PON | switch?1 → out!0 → POFF );
POFF = (switch?0 → out!0 → POFF | switch?1 → out!1 → PON )
Daraus ergibt sich folgendes Alphabet für die Kanäle:
αstart = αswitch = αout = {0, 1}
Der Automat kann auf diese Weise mit seiner Umgebung kommunizieren
und mit weiteren Systemen verbunden werden, die wiederum durch Prozesse
definiert sind.
Ein großes Problem bei der Verwendung von CSPs stellt die Tatsache dar, dass
Zeitpunkte nicht genau referenziert werden können. Alle Prozesse bestehen
ausschließlich aus einer Aneinanderreihung von Ereignissen, die während des
Prozesses irgendwann einmal auftreten. Für Hardwarebeschreibungen sind
CSPs daher ungeeignet, da die Anzahl der Takte zwischen zwei Ereignissen
nicht oder nur auf Umwegen spezifiziert werden kann. Das äußere Verhalten
eines eingebetteten Systems (4.2.1) kann durch CSPs allerdings repräsentiert
werden.
3.2
uml-diagramme
Generell umfasst die Unified Modeling Language (UML) 13 Diagrammarten,
die sich in Struktur- und Verhaltensdiagramme gliedern. Im Rahmen dieser
Arbeit werden davon ausschließlich Aktivitätsdiagramme verwendet.
Ein Aktivitätsdiagramm dient der Veranschaulichung von Abläufen für einen
bestimmten Anwendungsfall. Dabei kann es sich um die sequentielle Abarbeitung von Testfällen, einen Geschäftsprozess oder einen speziellen Programmdurchlauf handeln. Abb. 6 zeigt die für diese Arbeit relevanten Elemente von
Aktivitätsdiagrammen. Die beiden Hauptelemente eines Aktivitätsdiagramms
bilden Aktion und Objekt. Eine Aktion stellt eine ausführbare Tätigkeit dar,
während ein Objekt Daten enthält. Der Objektfluss bezeichnet daher auch die
Übertragung von Daten zu einem anderen Objekt bzw. die Verwendung von
Daten durch eine Aktion. Der Kontrollfluss wird mit Hilfe von Tokens modelliert.
Tokens bewegen sich entlang des Kontrollflusses und werden immer von der
jeweiligen aktiven Aktion gehalten. Nach Beendigung der Aktion wird das
Token wieder freigegeben und kann zur nächsten Aktion fließen. Hierbei ist es
möglich, dass ein oder mehrere Tokens gleichzeitig im Aktivitätsdiagramm
aktiv sind. Eine Gabelung stellt die Aufspaltung eines Tokens in mehrere dar,
23
24
formale darstellungen
Name
Name
Aktion
Objekt
Startknoten
Kontrollfluss
Objektfluss
Endknoten
Vereinigung
Gabelung
Entscheidung
Abbildung 6: Elemente in Aktivitätsdiagrammen
während eine Vereinigung mehrere Tokens zu einem vereint sobald alle eingehenden Token vorhanden sind. Die Modellierung von nebenläufigen Abläufen
wird so möglich. Eine Entscheidung lenkt den Fluss eines Tokens abhängig
von einer Bedingung. Aktivitätsdiagramme beginnen mit einem Startknoten,
der ein einziges Token auslöst und enden, sobald ein Token einen Endknoten
erreicht.
3.3
eigenschaftsbeschreibungssprachen
Einen integralen Bestandteil dieser Arbeit bildet das Formulieren von Anforderungen mit Hilfe von Eigenschaftsbeschreibungssprachen. Diese bieten
eine eindeutige Semantik und eignen sich daher ideal für die rechnergestützte
Verarbeitung. Die einzelnen Sprachen unterscheiden sich in ihrer Aussagekraft
und in ihrem Anwendungsgebiet. Dabei gibt es Sprachen, wie System Verilog
Assertions (SVA) [IEE07], die Property Specification Language (PSL) [IEE05]
oder die Interval Language (ITL) [Bor09], die ausschließlich im Hardwareentwurf Anwendung finden und solche, wie Z [Spi89], das ausschließlich im
Softwareentwurf verwendet wird. Im Folgenden werden die für diese Arbeit
relevanten Eigenschaftsbeschreibungssprachen genauer erklärt. Diese wurden
gewählt, da sie mit bestehenden Werkzeugen aus der formalen Hardwareverifikation, die die für diese Arbeite relevanten Algorithmen implementieren,
verwendet werden können.
3.3.1
Linear Temporal Logic
Bei Linear Temporal Logic (LTL) [Pnu77] handelt es sich um eine Logik, die
zeitliche Zusammenhänge innerhalb eines Systems, das als Automat model-
3.3 eigenschaftsbeschreibungssprachen
liert werden kann, ausdrückt. LTL-Eigenschaften sind gültig in Bezug auf
die Ausführungspfade eines Systems. In LTL können Literale oder Prädikate
mit booleschen Operatoren ¬, ∨, ∧ sowie durch Implikationspfeile → miteinander verbunden werden. LTL stellt außerdem folgende zeitliche Operatoren zur
Verfügung:
• Xφ: φ muss im nächsten Zustand halten (next).
• Gφ: φ muss in allen Zuständen halten (globally).
• Fφ: φ muss irgendwann in der Zukunft halten (finally).
• ψUφ: ψ muss mindestens halten bis φ folgt (until).
• ψRφ: ψ muss halten bis φ folgt. Wenn φ nie folgt, muss ψ immer halten.
(release).
Die Eigenschaft, in der aus einem Request ein Grant folgen soll, hat in LTL also
folgende Form:
G((Request = 0 1 0 ) → X(Grant = 0 1 0 ))
Ein Problem von LTL ist vor allem, dass die Formulierung komplexer Sachverhalte in unübersichtlichen LTL-Ausdrücken resultiert.
3.3.2
Interval Language
[Bor09] wurde von der Siemens AG (später Infineon Technologies AG und
OneSpin Solutions GmbH) als Eigenschaftsbeschreibungssprache entwickelt,
um ideal mit dem intern entwickelten Tool zu harmonieren. ITL hat folgende
Hauptattribute [Obe10]:
ITL
• Eigenschaften werden als Implikationen geschrieben. Aus einer Annahme
folgt eine Verpflichtung.
• Systemeigenschaften halten global.
• In Eigenschaften werden Signale über die explizite Angabe von Zeitpunkten in einem endlichen Zeitfenster referenziert.
• Die Syntax orientiert sich an der der Very High Speed Integrated Circuit
Hardware Description Language (VHDL) oder an der von Verilog.
• Spezielle Befehlserweiterungen zur Vollständigkeitsanalyse sind vorhanden.
Zur Verdeutlichung ist im Folgenden eine ITL-Eigenschaft gegeben, die beschreibt, dass auf ein Request immer ein Grant folgen muss:
25
26
formale darstellungen
property Beispiel is
assume:
at t: Request = ’1’;
prove:
at t+1: Grant = ’1’;
end property;
Die Eigenschaft besteht aus dem Annahmeteil (assume) und dem Verpflichtungsteil (prove). Trifft die Annahme zu, so muss auch die Verpflichtung
zutreffen. Eine ITL-Eigenschaft beschreibt also immer eine Implikation vom
Annahme- auf den Verpflichtungsteil.
Die Zeitbasis von ITL wird durch einen diskreten Zeitpunkt t angegeben. Dieser
kann mit t ± offset bzw. durch die Funktionen PREV und NEXT relativ zu den
übrigen Zeitpunkten in der Eigenschaft verschoben werden. Da ITL für die
formale Verifikation von Hardwareschaltungen entwickelt wurde, bezieht sich
die Zeit in diesem Bereich auf den Systemtakt. Im Rahmen dieser Arbeit wird
ITL zum Formulieren von Eigenschaften für eingebettete Systeme eingesetzt.
Durch t wird in diesem Fall nicht der Takt definiert, sondern das Fortschreiten
der Zeit durch das Auftreten eines Ereignisses.
Der Vorteil von ITL ist seine bessere Lesbarkeit im Vergleich zu LTL. Die
klare Teilung einer Eigenschaft in Annahme und Verpflichtung sowie die
strukturierte Referenzierung von Zeitpunkten führen zu einer übersichtlichen
Darstellung.
3.3.3
Eigenschaften
Für die Formulierung funktionaler Anforderungen eines Systems können Eigenschaften verwendet werden. Im Rahmen dieser Arbeit wird sowohl ITL
als auch LTL verwendet. Da die verwendeten Eigenschaften immer nur von
einem Zeitpunkt auf den nächsten verweisen, können beide Darstellungsformen äquivalent eingesetzt werden. Dabei werden je nach Anwendungszweck
unterschiedliche Eigenschaftsarten unterschieden.
Sicherheitseigenschaften: Jedes System muss sich stets in einem als sicher
geltenden Zustandsraum befinden. Dabei spezifizieren Sicherheitseigenschaften, dass nur sichere Zustände erreicht werden sollen. Unsichere werden
durch sie ausgeschlossen. Sicherheitseigenschaften müssen daher global und
immer gelten und werden in LTL mit Gφ beschrieben, wobei es sich bei φ
um einen booleschen Ausdruck handelt, der Literale und Prädikate enthält,
aber keine temporalen Operatoren. Für diese Arbeit ist die Beschreibung des
zeitlichen Bezugs zwischen Ereignissen allerdings relevant. Daher wird hier
die Sicherheitseigenschaft als G(φ → ψ) beschrieben, wobei die Verwendung
des LTL-X-Operators in φ bzw. ψ gestattet ist. φ und ψ können also Literale
3.3 eigenschaftsbeschreibungssprachen
zu unterschiedlichen Zeitpunkten enthalten. Eine Eigenschaft in der Form
G(φ → ψ) führt dazu, dass wenn φ auf der linken Seite der Implikation
wahr wird, ψ auch gelten muss. Ansonsten wird die Sicherheitseigenschaft
verletzt.
Lebendigkeitseigenschaften: Um die Erreichbarkeit von Zuständen innerhalb
eines Zustandsraums sicher zu stellen, werden Lebendigkeitseigenschaften
verwendet. Wenn nicht anders beschrieben, ist es unwesentlich, in welchem
Zeitfenster ein Zustand erreicht werden kann. Lebendigkeitseigenschaften werden in LTL mit Fφ ausgedrückt. Im Rahmen dieser Arbeit können ausschließlich
Sicherheitseigenschaften verwendet werden. Lebendigkeitseigenschaften werden mit Sicherheitseigenschaften geeignet umschrieben [Bor09]. Aus folgender
Lebendigkeitseigenschaft werden z.B. zwei Sicherheitseigenschaften, bei denen
ein weiterer Zustand In Bewegung eingefügt wurde.
Lebendigkeitseigenschaft:
G(Start → F(Ziel))
Sicherheitseigenschaften:
G(Start → X(In Bewegung))
G(In Bewegung → X(In Bewegung ∨ Ziel))
Neben diesen beiden Eigenschaftsarten existieren noch weitere (z.B. Fairness-,
Fortdauereigenschaften), die hier nicht genauer behandelt werden.
3.3.4
Eigenschaftsbeschreibungsstile
Eigenschaften können durch eine Eigenschaftsbeschreibungssprache unterschiedlich ausgedrückt werden und trotzdem das selbe Verhalten beschreiben.
Es handelt sich bei Eigenschaften also nicht um eine kanonische Repräsentation des Systemverhaltens. Es ist daher sinnvoll, Richtlinien für das Formulieren
von Eigenschaften aufzustellen. Diese sollten sich am gewünschten Einsatzzweck des entstehenden Eigenschaftssatzes orientieren. Im Folgenden werden
bekannte Eigenschaftsbeschreibungsstile kurz vorgestellt:
Monitorstil: Der Monitorstil wurde 2002 von Shimizu [Shi02] vorgestellt.
Definition 3.5: Monitor - „A monitor is an observer in a group
of interacting modules, or agents which communicate via a set
of protocol rules“ [Shi02]
Ein Monitor überwacht die Kommunikation zwischen Modulen. Die Ausgänge
der Module stellen seine Eingänge dar und sein Ausgang ist ein einzelner
boolescher Wert, der angibt, ob die Kommunikation zwischen den überwachten
Modulen korrekt verläuft. In Monitoreigenschaften wird also ausschließlich das
27
28
formale darstellungen
korrekte Verhalten des Systems spezifiziert. Der Vorteil liegt in der Möglichkeit,
Eigenschaften, die einen großen Teil des Verhaltens abdecken, in mehrere
kleinere zu unterteilen, wobei jede einen Monitor darstellt. Die Konjunktion der
Monitorausgänge repräsentiert den Monitor für die ursprüngliche Eigenschaft.
Monitore sind außerdem ausführbare Verhaltensbeschreibungen, die direkt mit
dem System verbunden werden können und so dessen Funktionsfähigkeit auch
während des Betriebs überwachen können. Die Beschreibung des korrekten
Umgebungsverhaltens kann ebenfalls über Monitore erfolgen.
Transaktionsstil: Eigenschaften, die im Transaktionsstil verfasst sind, argumentieren über ein abgeschlossenes Zeitfenster mit Anfangs- und Endzuständen.
Dabei kann es sich um Zustände handeln, die in der Spezifikation explizit
erwähnt wurden oder um solche, die beim Schreiben der Eigenschaften als
virtuelle Zustände eingeführt wurden. Der Transaktionsstil setzt also voraus,
dass sich eine Spezifikation in einzelne Berechnungsschritte separieren lässt.
Die Menge aller Berechnungsschritte stellt die gesamte Spezifikation als Zustandsautomaten dar. Ein System, das nur die beiden Transaktionen lesen
und schreiben kennt, kann diese in der Realität in jeder Abfolge ausführen.
Die Korrektheit des Systems muss für alle möglichen Abfolgen sichergestellt
sein.
3.3.5
Parallelismus und Nebenläufigkeit
Zum Verständnis des Zeitbegriffs, der durch ITL und LTL festgelegt wird, ist
eine Auseinandersetzung mit den Begriffen Parallelismus und Nebenläufigkeit
[Hoa04] nötig. Abb. 7 zeigt die Übersetzung eines Statecharts in einen parallelen
und einen nebenläufigen Automaten.
Parallelismus
Nebenläufigkeit
Statechart
¬i
¬i
¬i
¬i
AB
A
B
AB
i
i
i
i
i
AY
XY
X
XB
Y
−
−
−
−
−
XY
−
Abbildung 7: Parallelismus und Nebenläufigkeit
3.3 eigenschaftsbeschreibungssprachen
Parallelismus wird in dieser Arbeit immer als synchroner Parallelismus interpretiert. Die parallele Ausführung bei synchronem Parallelismus unterliegt
einem gemeinsamen Takt. Synchron parallel arbeitende Teilsysteme, die als
Automat repräsentierbar sind, lassen sich immer in einen gemeinsamen Automaten übersetzen. Tritt ein Ereignis i auf, dann wechseln alle Automaten
vom Zustand AB in XY. Dieser Wechsel geschieht bei paralleler Ausführung
gleichzeitig in einem Zeitschritt. Beide Transitionen im Statechart werden also
gleichzeitig ausgeführt. Bei nebenläufiger Ausführung werden die Transitionen
nacheinander in zufälliger Reihenfolge ausgeführt.
Sowohl LTL als auch ITL erlauben die synchron parallele Beschreibung des
Verhaltens des Statecharts. Die Formulierung nebenläufigen Verhaltens ist
nur über den Umweg über Random-Inputs möglich. Random-Inputs stellen
Eingänge dar, die Zufallswerte liefern. Dadurch ist die zufällige Auswahl
des Pfades durch den nebenläufigen Automaten modellierbar. Im Rahmen
dieser Arbeit werden Eigenschaften ausschließlich so geschrieben, dass sie die
parallele Ausführung beschreiben. Auf das Einfügen von Random-Inputs wird
verzichtet.
3.3.6
Darstellung von Ereignisfolgen
Im Rahmen dieser Arbeit werden Ereignisfolgen häufig graphisch dargestellt.
Die hierfür verwendet Notation wird anhand der folgenden Beispielereignisfolge erläutert.
time t=0 t=1 t=2 t=3 t=4 t=5
name
4
U
?
Der Wert des Signals name ist zum Zeitpunkt t = 0 eine logische 0 0 0 , zum
Zeitpunkt t = 1 eine logische 0 1 0 , zum Zeitpunkt t = 2 ein ganzzahliger Wert,
zum Zeitpunkt t = 3 ein zu Beginn der Ausführung undefinierter Wert, zum
Zeitpunkt t = 4 ein durch eine Spezifikationslücke undefinierter Wert und
zum Zeitpunkt t = 5 ein Widerspruch, der dazu führt, dass der Wert nicht
eindeutig bestimmbar ist.
29
Teil II
ANFORDERUNGEN UND PRODUKTLINIEN
In diesem Teil werden Anforderungen und Produktlinien eingeführt und ein Bezug zwischen beiden hergestellt.
Dazu werden zuerst funktionale und nicht-funktionale Anforderungen erläutert und die Voraussetzungen für ein gutes Anforderungsdokument definiert. Im Anschluss daran
wird der Begriff der Produktlinie und die Darstellung der
Variabilität genauer erläutert. Außerdem wird beschrieben,
wie man Anforderungen für eine Produktlinie formulieren
kann und auf das Testen von Produktlinien eingegangen.
Weiterhin werden die Algorithmen, die dieser Arbeit zu
Grunde liegen, eingeführt. Dazu zählt die Generierung
von Cando-Objekten. Diese basiert auf der automatisierten
Übersetzung von Eigenschaftssätzen in ein ausführbares
Modell. Weiterhin wird ein Ansatz zur Vollständigkeitsbewertung beschrieben. Dadurch wird es möglich, Aussagen
über die Lücken und Widersprüche in Eigenschaftssätzen
zu treffen und diese genau zu benennen.
4
DARSTELLUNG VON ANFORDERUNGEN
Im Zentrum dieser Arbeit steht die Überprüfung von Anforderungen und
die Generierung von Orakeln. Grundlage dessen bildet die Spezifikation aus
Abb. 8. Hier werden Anforderungen beschrieben, die das Verhalten und die
Anforderungen
Spezifikation
Text
Tabellen
UML-Modelle
Abbildung 8: Spezifikation
Struktur des Systems repräsentieren. Die Spezifikation besteht aus einem oder
mehreren Anforderungsdokumenten, die auf unterschiedliche Art und Weise
(4.2) aufgebaut sein können.
4.1
requirements engineering
Das Requirements Engineering zielt auf die Erhebung, Validierung und Verwaltung von Anforderungen an ein Produkt ab. Eine Anforderung (Requirement)
beschreibt eine einzelne oder eine Menge von Eigenschaften, die das zu entwickelnde System aufweisen soll.
Definition 4.1: Anforderung - „(1) A condition or capability
needed by a user to solve a problem or achieve an objective.
(2) A condition or capability that must be met or possessed by
a system or system component to satisfy a contract, standard,
specification, or other formally imposed documents.“ [IEE90]
Anforderungen werden durch Marketingüberlegungen, Kostenaufwand und
technische Machbarkeit beeinflusst. Man unterscheidet zwei Klassen von Anforderungen, nämlich nicht-funktionale und funktionale Anforderungen. Nichtfunktionale Anforderung beschreiben vor allem äußere Faktoren wie Temperaturstabilität, Aussehen, Maximalgewicht oder Größe eines Produkts. Eine
funktionale Anforderung macht im Gegensatz dazu Vorgaben an das Verhalten
eines Systems.
33
34
darstellung von anforderungen
Definition 4.2: Funktionale Anforderung - „A requirement that
specifies a function that a system or system component must
be able to perform.“ [IEE90]
Stellenweise kommt es vor, dass Anforderungen nicht eindeutig zu einer der
beiden Klassen zuzuordnen sind. Das ist beispielsweise bei Anforderungen an
die Sicherheit oder Bedienbarkeit eines Produkts der Fall. Bei beiden handelt es
sich um Anforderungen, die nicht direkt Aussagen über das gültige Verhalten
des Produkts treffen, bei der Entwicklung der Funktionalität des Systems
aber trotzdem Einfluss auf diese haben können. IEEE 830 [IEE98b] beschreibt
Charakteristiken einer „guten“ Anforderungsspezifikation, wie folgt:
Korrektheit: Eine Anforderungsspezifikation ist nur dann korrekt, wenn nur
solche Anforderungen in ihr formuliert sind, die dann auch für das spätere
System zutreffen müssen. Dabei handelt es sich um eine auf den ersten Blick
eher triviale Definition von Korrektheit. Eine solche Vorgabe ist nötig, da
sich Anforderungen während initialen Projektphasen ändern können und
erweitert bzw. gekürzt werden. Diese Form von Korrektheit kann ausschließlich
durch Projektbeteiligte beurteilt werden. Eine automatisierte Beurteilung der
Korrektheit durch formale Methoden ist nicht möglich.
Eindeutigkeit: Die Eindeutigkeit bezieht sich auf Formulierungen und Darstellungsarten von Anforderungen. Eine Anforderung ist nur dann eindeutig,
wenn sie von allen Projektbeteiligten ausschließlich auf eine einzige Art interpretiert werden kann. Das setzt voraus, dass Anforderungen auf eine Weise
formuliert werden, die für Entwickler, Projektmanager und Kunden nur eine Interpretation zulässt. Es ist fast unmöglich, alle Mehrdeutigkeiten aus
Spezifikationen zu eliminieren, die in natürlicher Sprache verfasst sind. Eine Lösung hierfür stellen Spezifikationssprachen oder Werkzeuge dar, die
in der Lage sind, Anforderungen graphisch, tabellarisch oder in geordneter
Textform darzustellen. Auch hier gilt allerdings die Prämisse, dass Personen
mit nicht technischem Hintergrund die jeweilige Repräsentation ohne großen
Schulungsaufwand verstehen können müssen.
Vollständigkeit: Eine Spezifikation ist vollständig, wenn sie drei Hauptpunkte
erfüllt:
1. Alle Anforderungen, die sich nicht direkt auf das Systemverhalten beziehen, müssen erwähnt und behandelt werden. Dazu zählen Funktionalität,
Leistungsfähigkeit, Designvorgaben, Attribute oder externe Verbindungen.
2. Die Systemantwort auf alle möglichen Eingangskombinationen und internen Zustände, unabhängig davon, ob diese als gültig oder ungültig
angesehen werden, muss spezifiziert sein.
4.1 requirements engineering
3. Alle Zeichnungen, Tabellen und Diagramme müssen durch Text ergänzt
bzw. beschrieben werden und Fachausdrücke sowie Maßeinheiten definiert werden.
Im Verlauf dieser Arbeit wird Vollständigkeit mit Bezug auf die Systemantwort
behandelt.
Konsistenz: Nur solche Anforderungsspezifikationen sind konsistent, die keinen Konflikt von zwei oder mehr Anforderungen enthalten. Es gibt drei
Hauptgruppen möglicher Konflikte:
1. Beobachtbare Konflikte: Ein Beispiel ist die Anforderung, dass die Information über einen aufgetretenen Fehler als Hexadezimalzahl ausgegeben
werden soll, wenn zu Beginn des Anforderungsdokuments festgelegt
wurde, dass nur Dezimalzahlen ausgegeben werden dürfen.
2. Logische oder temporale Konflikte: Ein Beispiel ist ein Ausgang, der
an einer Stelle als Addition zweier Eingänge und an einer anderen als
Multiplikation beschrieben wird oder eine Anforderung beschreibt z.B.,
dass B auf A folgt und eine andere, dass beide gleichzeitig auftreten.
3. Zwei oder mehr Anforderungen benutzen für dasselbe beobachtbare
Objekt verschiedene Terminologien.
Der Konsistenzbegriff wird in dieser Arbeit mit Bezug auf die logischen und
temporalen Konflikte in Anforderungen verwendet.
Priorisierbarkeit: Normalerweise sind nicht alle Anforderungen in einer Spezifikation gleich wichtig. Einige können lebenswichtig sein und andere nur
wünschenswert. Eine Priorisierung der Anforderungen hilft vor allem dabei,
beurteilen zu können, ob die Entwicklung dem Kundenwunsch entspricht und
auf welche Bereiche der Entwicklungsarbeit die meiste Energie konzentriert
werden muss.
Verifizierbarkeit: Damit eine Anforderungsspezifikation verifizierbar ist, muss
jede in ihr enthaltene Anforderung verifizierbar sein. Das ist nur dann der
Fall, wenn es eine endliche, vom Kostenaufwand her vertretbare Möglichkeit gibt, mit der eine Person oder eine technische Einrichtung überprüfen
kann, ob ein entwickeltes System der Anforderung gerecht wird [IEE98b]. Eine
Anforderung, in der relativierende Ausdrücke (z.B. gut, schnell, normalerweise) enthalten sind, die nicht weiter spezifiziert werden, ist generell nicht
verifizierbar.
Modifizierbarkeit: Anforderungen sind nur dann modifizierbar, wenn es ihre
Struktur erlaubt, Änderungen einfach, vollständig und konsistent durchzuführen. Ein klare Struktur mit abgegrenzten Einzelanforderungen bildet die
Grundlage für eine modifizierbare Spezifikation. Weiterhin muss darauf geachtet werden, dass keine Redundanz zwischen den Anforderungen herrscht.
35
36
darstellung von anforderungen
Redundanz an sich ist noch kein Fehler, wenn die Konsistenz gewährleistet
ist. Gerade in der Erhaltung der Konsistenz bei kleinen Änderungen liegt
allerdings die Schwäche redundanter Spezifikationen. Jede Änderung muss
dann nämlich potentiell an mehreren Stellen gemacht werden.
Zuordenbarkeit: Um Zuordenbarkeit zu gewährleisten ist es nötig, dass jede
Anforderung eindeutig referenziert werden kann und Anforderungen, auf
denen sie basiert, eindeutig referenziert. Erweitert eine Anforderung eine
andere oder wird von einer anderen Anforderung erweitert, muss dies also
durch den Betrachter des Anforderungsdokuments nachvollziehbar sein.
4.1.1
Anforderungsanalyse
Um Anforderungen an ein neu zu entwickelndes Produkt zu erheben und
zu analysieren, müssen verschiedene Aufgaben durchgeführt werden. Zuerst
werden alle Projektbeteiligten identifiziert.
Definition 4.3: Anforderungsanalyse - „(1) The process of studying user needs to arrive at a definition of system, hardware,
or software requirements.
(2) The process of studying and refining system, hardware, or
software requirements.“ [IEE90]
Dazu zählen unmittelbar Auftraggeber, Auftragnehmer, Entwickler und Tester.
Weiterhin können potentielle Kunden, Projektgegner, politische Organisationen,
Standardisierungs- und Kontrollinstanzen, Regulierungsbehörden sowie kapitalgebende Körperschaften und Banken zu den direkt oder indirekt am Projekt
Beteiligten gehören. Die Anforderungen an das Produkt werden gemeinsam
mit Hinblick auf Funktionsumfang und Kosten aufgestellt. Als Grundlage
dafür dienen Machbarkeitsstudien, Use-Cases, die Definition messbarer Ziele,
Prototypen und Spezifikationen.
Die entstandenen Anforderungen müssen während der Anforderungsanalyse
mit Hinblick auf die in 4.1 aufgestellten Charakteristiken einer guten Anforderungsspezifikation begutachtet werden. Schwierigkeiten bei der Analyse
entstehen vor allem durch den Faktor Mensch:
• Probleme bei der Kommunikation untereinander (unterschiedliches Vokabular, unklare eigene Vorstellungen)
• Unzureichendes technisches Verständnis
• Kosten- und Aufwandsabschätzung kann im Nachhinein zur Veränderung bestehender Anforderungen führen
4.2 formulieren von anforderungen
• Unfähigkeit einzelner Teilnehmer sich in Reviewsitzungen einzubringen
• Entwickler versuchen die Anforderungen an bereits bestehende Projekte
anzupassen
• Entwickler ohne Kundenbezug analysieren die Anforderungen
Im Rahmen dieser Arbeit spielt die Begutachtung funktionaler Anforderungen
mit Hinblick auf Konsistenz, Vollständigkeit und Redundanz eine wesentliche
Rolle.
4.2
formulieren von anforderungen
Mit Anforderungen werden Bedingungen aufgestellt, die von einem System
eingehalten werden müssen. Dabei ist die Form, in der die Anforderungen
für dem Systementwurf formuliert sind, variabel und nicht festgelegt. Im
Folgenden werden die für diese Arbeit relevanten Vertreter der Anforderungsdefinition näher erläutert:
Textform: Anforderungen durch reinen Fließtext zu beschreiben, birgt das
Risiko der missverständlichen Formulierung und der mehrdeutigen Interpretation. Nicht-funktionale Anforderungen müssen aber meist als Text formuliert
werden, da eine Formalisierung oft schwierig ist. Dabei besteht die Herausforderung vor allem in der eindeutigen und konsistenten Formulierung der
Anforderungen. Ein ausgiebiger Reviewprozess und definierte Formulierungsvorgaben helfen, die Qualität der Anforderungen sicher zu stellen.
Automaten: Ein Automat stellt eine eindeutige Beschreibung einer Funktionalität dar, deren Verhalten durch das Auftreten diskreter Ereignisse und das
Verweilen in definierten Zuständen charakterisiert werden kann. Automaten
können das Verhalten entweder vollständig, d.h., für jede mögliche Eingangskombination sind die Ausgänge und die Transition in jedem Zustand definiert,
oder unvollständig beschreiben. Eine sinnvolle Beschreibung von Anforderungen setzt meist ein deterministisches, also vorhersagbares Verhalten des
Automaten voraus.
Tabellen: Anforderungen in Form einer Tabelle aufzustellen oder durch Tabellen zu ergänzen, kann hilfreich sein, um die Konsistenz der Spezifikation
zu wahren. Dazu dürfen die in der Tabelle enthaltenen Informationen nicht
zusätzlich in anderer Form (z.B. im Fließtext) vorliegen. Die Konsistenzerhaltung würde sonst erschwert. Weiterhin muss die Syntax der Tabelle im
Anforderungsdokument festgehalten werden.
Aktivitätsdiagramme: Durch die Verwendung von Aktivitätsdiagrammen
kann der schematische Verlauf modelliert werden. Sie stellen eine Abstraktionsebene dar, in der die eigentliche Funktionalität in den einzelnen Aktionen
enthalten ist. Ein Aktivitätsdiagramm ist also immer nur ergänzend zu einer
37
38
darstellung von anforderungen
weiteren Art der Anforderungsformulierung. In diesem Fall muss der Tokenfluss durch Eigenschaften modelliert werden. Je nach aktiver Aktion muss
dann der jeweilige Eigenschaftssatz, der hinter der Aktion liegt, wahr sein.
Grundlage dieser Arbeit bilden u.a. Anforderungen, die nach dem 4-VariablenModell aufgestellt wurden.
4.2.1
4-Variablen-Modell
Das 4-Variablen-Modell [PM95] wurde von Parnas et al. definiert, um die
Formulierung von Anforderungen für Echtzeitanwendungen zu unterstützen.
Ihm liegt die Teilung der Anforderungen in ein Modell für das sichtbare
Verhalten und die möglichen Umgebungsbedingungen auf der einen Seite und
die Beschreibung des eigentlichen Softwaresystems auf der anderen Seite zu
Grunde.
Äußeres Verhalten
Beobachtbare
Variablen
(MON)
Mögliche Umgebungsbedingungen (NAT)
Verhaltensspezifikation (REQ)
Abbildung
des Eingangsverhaltens (IN)
Steuerbare
Variablen
(CON)
Abbildung
des Ausgangsverhaltens (OUT)
Inneres Verhalten
Programmeingaben
(INPUT)
Softwarespezifikation (SOF)
Programmausgaben
(OUTPUT)
Abbildung 9: 4-Variablen-Modell [PM95]
Abb. 9 zeigt die Struktur des 4-Variablen-Modells, das im Folgenden genauer
beschrieben wird:
Beobachtbare Variablen (MON): Ein Wert, der vom System überwacht wird,
ist eine beobachtbare Variable. Sie beschreibt ausschließlich die relevante Umgebung (z.B. Luftdruck, Geschwindigkeit, Terminaleingaben) und sagt noch
nichts darüber aus, wie der Wert ermittelt wird und in welchem Format er
im System verarbeitet wird. Im Folgenden werden die beobachtbaren Variablen mit m1 , m2 , . . . mn gekennzeichnet bzw. ihr Wert zum Zeitpunkt t mit
mt1 , mt2 , . . . mtn .
4.2 formulieren von anforderungen
Steuerbare Variablen (CON): Ein Wert, der durch das System kontrolliert
wird, ist eine steuerbare Variable. Eine steuerbare Variable zeigt sich einem
Beobachter durch das mögliche Systemverhalten (Steuerung einer Lampe,
Veränderung des Anstellwinkels, Öffnen einer Tür). Im Folgenden werden
die steuerbaren Variablen mit c1 , c2 , . . . cn gekennzeichnet bzw. ihr Wert zum
Zeitpunkt t mit ct1 , ct2 , . . . ctn .
Mögliche Umgebungsbedingungen (NAT ): Die möglichen Umgebungsbedingungen beschreiben vor allem physikalische Grenzen. Sie wirken sich
gleichermaßen auf beobachtbare wie auf steuerbare Variablen aus. Auf der
beobachtbaren Seite kann z.B. der maximal mögliche Luftdruck, das Maximalgewicht oder die minimale Startgeschwindigkeit stehen, während auf der
steuerbaren Seite die maximale Helligkeit einer Lampe, die maximale Beschleunigung oder die höchste Zuladung definiert sein könnte. Die Domäne
domain(NAT ) von NAT beschreibt alle Instanzen von mt , die auf Grund der
Umgebungsbedingungen möglich sind, während der Bildbereich range(NAT )
von NAT alle durch die Umgebungsbedingungen möglichen Instanzen von
ct definiert. (mt , ct ) ∈ NAT gilt also nur dann, wenn die Umgebungsbedingungen den Wert für ct erlauben und der beobachtbare Wert mt definiert ist.
Wäre z.B. der physikalisch maximal mögliche Anstellwinkel eines Flugzeuges
bei 10°, dann wäre ein Winkel von 11° nicht mehr in range(NAT ).
Verhaltensspezifikation (REQ): Die Verhaltensspezifikation beschreibt, wie
sich die steuerbaren Variablen auf Grund der beobachtbaren Variablen zu
verhalten haben. Da sich die Umgebung nicht durch eine Verhaltensspezifikation einschränken lässt, ist die Domäne domain(REQ) von REQ äquivalent
oder größer als die Domäne von NAT . Der Bildbereich range(REQ) von
REQ beschreibt aber im Unterschied zu NAT nicht mögliches Verhalten, sondern erlaubtes Verhalten. (mt , ct ) ∈ REQ gilt also nur dann, wenn die Werte
ct durch ein korrekt arbeitendes System aus den Werten mt folgen dürfen.
Da das Verhalten für alle möglichen Fälle beschrieben werden muss, muss
domain(REQ) ⊇ domain(NAT ) gelten. Kann sich der Luftdruck z.B. im Bereich zwischen 1 und 10 bar bewegen, so muss in domain(REQ) mindestens
das Verhalten für diesen Bereich beschrieben sein. Es darf allerdings auch das
Verhalten für 11 bar spezifiziert sein.
Programmeingaben (INPUT ): Programmeingaben finden über Register statt.
Es handelt sich also um den quantisierten Eingangswert und dessen Einheit,
der von der Software verarbeitet wird. Im Folgenden werden die Register
für die Programmeingaben mit i1 , i2 , . . . in gekennzeichnet bzw. ihr Wert zum
Zeitpunkt t mit it1 , it2 , . . . itn .
Programmausgaben (OUT PUT ): Programmausgaben finden über Register
statt. Es handelt sich also um den quantisierten Ausgangswert und dessen
Einheit, der von der Software ausgegeben wird. Im Folgenden werden die
39
40
darstellung von anforderungen
Register für die Programmausgaben mit o1 , o2 , . . . on gekennzeichnet bzw. ihr
Wert zum Zeitpunkt t mit ot1 , ot2 , . . . otn .
Abbildung des Eingangsverhaltens (IN): Beobachtbare Variablen, die vom
System verarbeitet werden sollen, müssen eine Entsprechung in den Programmeingaben haben. Die Domäne von IN domain(IN) besteht also aus
allen möglichen Instanzen von mt , während der Bildbereich range(IN) aus allen möglichen Registerwerten it besteht. (mt , it ) ∈ IN gilt also nur dann, wenn
it durch mt mögliche Programmeingaben beschreibt. Eine mögliche Abbildung
des Eingangsverhaltens wäre z.B. die A/D-Wandlung eines Sensorwertes.
Abbildung des Ausgangsverhaltens (OUT ): Steuerbare Variablen, die vom
System gesetzt werden sollen, müssen eine Entsprechung in den Programmausgaben haben. Die Domäne von OUT domain(OUT ) besteht also aus
allen möglichen Instanzen von ot , während der Bildbereich range(OUT ) aus
allen möglichen beobachtbaren Variablen ct besteht. (ot , ct ) ∈ OUT gilt also
nur dann, wenn für alle Werte von ot eine beobachtbare Variable ct gesetzt
werden kann. Eine mögliche Abbildung des Ausgangsverhaltens wäre z.B. die
D/A-Wandlung eines Ausgangswertes und die entsprechende Reaktion eines
Aktors.
Softwarespezifikation (SOF): Die Softwarespezifikation beschreibt das Verhalten der Programmausgaben in Abhängigkeit von den Programmeingaben. Die
Domäne von SOF domain(SOF) besteht aus allen möglichen Instanzen von
it , während der Bildbereich range(SOF) aus allen möglichen Instanzen von
ot besteht. (it , ot ) ∈ SOF gilt also nur dann, wenn die Programmausgaben
ot durch die Programmeingaben it durch eine korrekt arbeitende Software
erlaubt sind.
Das 4-Variablen-Modell wurde ursprünglich aus der SCR entwickelt. Diese stellt
eine Notation für die Beschreibung ereignisbasierter Systeme zur Verfügung,
die im Folgenden beschrieben wird.
4.2.2
Software Cost Reduction
wurde vom Naval Research Laboratory entwickelt, um Echtzeitanforderungen für eingebettete Systeme zu spezifizieren [Mar02, Hen80]. Dabei liegt der
Fokus auf der Beschreibung des von außen sichtbaren Verhaltens des Systems.
Die Ziele, die eine Spezifikation nach SCR erreichen muss, sind:
SCR
1. Es darf nur das Verhalten beschrieben werden. Die eigentliche Implementierung wird dadurch nicht festgelegt, um die Entwicklungsmöglichkeiten nicht unnötig einzuschränken.
2. Das Anforderungsdokument muss einfach zu verändern sein.
4.2 formulieren von anforderungen
3. Das Anforderungsdokument muss einfach durchsuchbar und nachvollziehbar sein.
4. Zukünftig geplante Änderungen und Erweiterungen der Anforderungen müssen ebenso einfach ersichtlich sein, wie die grundlegenden und
unveränderlichen Voraussetzungen, die in jeder Version des Anforderungsdokuments gelten müssen.
5. Die Reaktion des Systems auf Hardwareausfälle muss im Dokument
beschrieben sein.
6. Vorgaben an die Entwicklung (Interface zu anderen Systemen, TimingVorgaben oder Programmiersprache) müssen spezifiziert werden.
Für den Aufbau der Spezifikation gilt daher:
1. Die Themengebiete müssen klar aufgeteilt sein. Es muss eindeutig ersichtlich sein, ob und welche Teilabschnitte abhängig bzw. unabhängig
voneinander sind.
2. Die Spezifikation sollte so formal wie möglich gestaltet werden. Fließtext
zum Beschreiben von Anforderungen ist zu vermeiden.
3. Jede Anforderung sollte nur einmal vorkommen. Erklärungen zu Anforderungen müssen als solche erkennbar sein.
wird vor allem für die Spezifikation von sicherheitskritischen Anwendungen eingesetzt. Im Fokus liegen Anwendungen, die zur Steuerung von
Sicherheitssystemen für industrielle Anlagen, wie Kraftwerke oder Chemiewerke, verwendet werden und die Beschreibung von Systemen aus der Luft- und
Raumfahrt [AFB+ 88, BH00]. Gerade mit Hinblick auf die Gefahren, die von
einem Fehlverhalten der Kontroll- und Steuerungssysteme in diesen Bereichen
ausgehen, muss die zu Grunde liegende Anforderungsbeschreibung eindeutig
und unmissverständlich formuliert sein. Im Folgenden wird genauer auf den
durch die SCR vorgeschriebenen Notationsstil eingegangen.
SCR
verwendet für die Beschreibung des Systemverhaltens boolesche Werte
und Prädikate sowie die logische Verknüpfung beider, die zu einem Zustandswechsel, bzw. zum Setzen eines Ausgangswertes führen. Sie stellt also eine
spezielle Form eines Zustandsautomaten dar. Folglich muss ein System, das
mit SCR modelliert werden soll, ereignisbasiert sein. Ein auftretendes Ereignis
wird mit @T(Bedingung) bzw. mit @F(Bedingung) gekennzeichnet, wobei die
auftretenden Ereignisse im System sequentiell abgearbeitet werden, sodass
pro Zeitschritt immer nur ein Ereignis auftreten kann. Ein Ereignis tritt dann
auf, wenn die Bedingung wahr (@T(Bedingung)) bzw. falsch (@F(Bedingung))
wird. Jedes Ereignis kann durch WHEN(Bedingung) erweitert werden. @T(a =
0) WHEN (b > 5) wird z.B. nur dann wahr, wenn a seinen Wert auf 0 ändert
und b gleichzeitig größer 5 ist.
SCR
41
darstellung von anforderungen
Das Zeichnen des Zustandsautomaten ist bedingt durch die hohe Komplexität
des entstehenden Automaten nicht mehr praktikabel. Ein solcher Automat
wäre weder nachvollziehbar, noch änderbar. Für die Darstellung des Verhaltens
werden daher fünf Arten von Tabellen verwendet. In Abb. 10 ist die Notation
Mode1
Mode2
Mode3
a<0
a=0
a>0
Mode2
Mode3
f @T
@T t
f
t
@F -
1
Current
Mode
Mode1
New
Mode
- Mode2
@F Mode3
- Mode1
@F Mode1
-
c>
Defining Conditions
0
Mode
b>
Mode Transition Table
5
Initial Mode Table
a>
42
Abbildung 10: SCR-Zustandsübergänge
für die Tabellen zur Beschreibung der Zustandsübergänge (Mode Transition
Table) und des Anfangszustands (Initial Mode Table) exemplarisch dargestellt.
Ein Zustand wird in SCR als Mode bzw. ein Zustandsautomat als Mode Class
bezeichnet. Eine Spezifikation kann auch mehrere Zustandsautomaten definieren, die parallel laufen. In der linken Spalte der Initial Mode Table wird der
Zustand vermerkt, der zu Beginn der Ausführung gilt, wenn die Bedingung
auf der rechten Spalte zu Beginn gilt.
Die mittleren Spalten der Mode Transition Table enthalten die Bedingungen,
die gelten müssen, um einen Zustandsübergang auszulösen. ’@F’ und ’@T’
kennzeichnen das Ereignis, das für den Zustandswechsel verantwortlich ist,
’f’ und ’t’ kennzeichnen die Bedingungen, die beim Auftreten des Ereignisses
gelten müssen und ’-’ beschreibt, dass die jeweilige Bedingung für den Zustandsübergang nicht ausgewertet werden muss. Die linke Spalte enthält den
aktuellen Zustand, während in der rechten Spalte der jeweilige Folgezustand
angegeben ist. Das Ausgabeverhalten wird durch die in Abb. 11 gezeigten
Condition Table
Mode
Conditions
Mode1 b != 5
Mode2
b=5
Mode3
Light
On
c != 0
c=0
Off
Event Table
Mode
Mode1
Mode2
Mode3
Action
Events
X
@F(in Mode)
Increase z
@T(b = 5)
@F(a = 0)
WHEN b < 7
Selector Table
Mode
Mode1
Mode2
Mode3
Move Steer
Up
X
Down
Left
Decrease z
Abbildung 11: SCR-Ausgangsverhalten
Tabellen festgelegt. Man unterscheidet hierfür drei Tabellenarten, die Condition
Table, die Event Table und die Selector Table. Ein Ausgangswert kann entweder
fest durch eine Condition Table an einen Eingangswertebereich gebunden werden oder mittels einer Event Table an einem bestimmten Ereignis festgemacht
werden. Durch die Selector Table wird der Ausgangswert alleine durch den
aktuellen Zustand definiert.
4.2 formulieren von anforderungen
Durch die SCR-Notation ist ausschließlich die Beschreibung diskreter Systeme
möglich. Jede Tabelle dient der Beschreibung des nächsten Systemzustands und
dem Ausgangsverhalten abhängig vom jeweiligen Mode und den Eingängen.
Alle gezeigten Tabellen, bis auf die Initial Mode Table, die den Anfangszustand
bei Systemstart festlegt, beschreiben einen zeitlichen vorher-nachher Zusammenhang der Modes bzw. der Ausgänge. So legt die Mode Transition Table z.B.
New Mode in Abhängigkeit von Current Mode und den Eingängen fest. New
Mode kann ausschließlich dann erreicht werden, wenn ein Eingang seinen Wert
ändert und somit ein Ereignis auftritt. Für die Tabellen zur Beschreibung des
Ausgangsverhalten gilt analog, dass sich dieses immer nur dann ändern kann,
wenn eine Bedingung erreicht wurde (Condition Table), ein Ereignis eintritt
(Event Table) oder ein Zustand erreicht wird (Selector Table).
Die CoRE-Methodik ist eine Erweiterung der SCR, die auch auf dem 4-VariablenModell basiert. In CoRE wird SCR durch Elemente aus der Objektorientierung
erweitert. Für nähere Informationen zur CoRE wird auf [FBWJK92] verwiesen.
43
5
P R O D U K T L I N I E N U N D VA R I A B I L I T Ä T
Bei Anforderungen, die Produktlinien beschreiben, muss neben der Formalisierung von Verhalten auch eine Formalisierung der in den Anforderungen
beinhalteten Variabilität stattfinden, um eine automatisierte Verarbeitung zu
ermöglichen. Diese muss durch ein geeignetes Modell darstellbar sein. Eine
Produktlinie bezeichnet eine endliche Menge von Produkten, die aus derselben
Spezifikation abgeleitet werden können [CN01, PBL05].
Definition 5.1: Artefakt - Ein Artefakt ist ein Bestandteil der
Anforderungen, Architektur, der einzelnen Komponenten oder
der Testumgebung eines Systems
Definition 5.2: Variabilität - Durch Variabilität wird beschrieben, dass einzelne Artefakte nicht in allen Konfigurationen
vorkommen müssen.
Definition 5.3: Variationspunkt - Ein Variationspunkt legt Art
und Ort der Variabilität fest.
Definition 5.4: Variante - Durch Varianten werden alle möglichen Belegungen eines Variationspunkts festgelegt.
Definition 5.5: Feature - Ein Feature beschreibt einen charakteristischen Bestandteil eines Systems.
Definition 5.6: Konfiguration - Die Konfiguration eines Produkts beschreibt eine gültige Auswahl von Features mit dem
Ziel das Produkt erstellen zu können.
Definition 5.7: Produkt - Ein Produkt ist die Implementierung
einer gültigen Konfiguration.
45
46
produktlinien und variabilität
Definition 5.8: Produktlinie - Eine Produktlinie ist eine Menge
von Systemen, die eine gemeinsame Menge von Features teilen,
um bestimmte sich ähnelnde Marktbedürfnisse zu befriedigen.
Die zu Grunde liegende Spezifikation darf also nicht starr ein einziges Produkt definieren, sondern muss dem Designer, Kunden oder Anwender eine
Auswahl anbieten. Diese Auswahl bezieht sich auf einzelne Bestandteile, den
Funktionsumfang oder Zusatzmerkmale des Grundprodukts und wird durch
Variationspunkte gekennzeichnet.
Beim Aufstellen der Spezifikation für eine Produktlinie gewinnt das genaue
Differenzieren einzelner Features und deren Bezug zueinander an Bedeutung.
Jede Produktlinie beschreibt im Normalfall eine Reihe grundlegender Features,
die in jeder Konfiguration vorhanden sein müssen. Zusätzlich können optionale
Features in einer Produktlinie enthalten sein. Es ist weiterhin möglich, dass
sich zwei oder mehr Features gegenseitig ausschließen oder bedingen.
Für die Abhängigkeit oder die Notwendigkeit von Features innerhalb einer
Produktlinie gibt es verschiedene Gründe. Meistens sind diese technischer
Natur. So kann die Menge optionaler Features durch die maximale Teilnehmerzahl an einem Bus beschränkt werden. Auch der Energiebedarf und die
damit verbundene Bemessung der Stromversorgung kann innerhalb einer Produktlinie variieren. Der Funktionsumfang der Software eines Produktes kann
frei gewählt werden, verändert aber unter Umständen Anforderungen an die
Prozessorleistung, den Speicherplatz oder den Hauptspeicher. Es existieren
weiterhin marketingstrategische Erwägungen, die einzelne Features einer Produktlinie als Pflichtbestandteil definieren oder eine Abhängigkeit zwischen
mehreren Features herstellen.
Die Definition einer Produktlinie lohnt sich meist erst ab einer größeren
Anzahl ableitbarer Produkte, den Konfigurationen. Das initiale Aufstellen einer
Produktlinie verursacht Kosten, die sich erst ab einem bestimmten Break-EvenPoint, amortisieren. Abb. 12 verdeutlicht diesen Zusammenhang. Weiterhin
sinkt die Time-to-Market, also die Zeit, die bei der Entwicklung nach dem
V-Modell (2.1.4) benötigt wird. Diese ist durch den anfänglichen Aufwand
bei der Produktlinienentwicklung bei den ersten Produkten höher als bei der
Entwicklung einzelner Produkte. Sie fällt dann auf einen konstanten Wert ab,
der unter dem der Entwicklung von Einzelprodukten liegt.
Bei der Produktlinienentwicklung handelt es sich um einen fortlaufenden Prozess,
in den Kundenwünsche und Entwicklungsvorgaben einfließen. Das Aufspalten einer Produktlinie in einzelne voneinander abhängige Features dient der
Strukturierung. Gleichzeitig können einmal entwickelte Features in anderen
Produktlinien wiederverwendet werden. Dadurch sinkt die Entwicklungszeit
zukünftiger Projekte. Die Definition einzelner Features in den Anforderungen,
Einzelprodukt
Produktlinie
1
2
3
4
Anzahl der Produkte
5
Gesamtentwicklungskosten
Time-to-Market pro Produkt
5.1 struktur
Einzelprodukt
Produktlinie
1
2
3
4
Anzahl der Produkte
5
Abbildung 12: Entwicklungskosten und -zeit [PBL05]
die Teil der Produktlinie werden sollen, kann entweder durch den Kunden (kundengetrieben) oder durch den Hersteller (herstellergetrieben) geschehen [LSR07].
Beim kundengetriebenen Vorgehen stehen die Kundenwünsche im Fokus.
Diese sind häufig schwer zu identifizieren und umzusetzen. Demgegenüber
steht der herstellergetriebene Prozess. Der Hersteller analysiert den Markt und
versucht mit Hinblick auf die Entwicklungs- und Produktionskosten sowie
die technische Machbarkeit ein möglichst marktgerechtes Produkt zu entwickeln. In der Praxis wird meist eine Mischung aus kundengetriebenem und
herstellergetriebenem Vorgehen gewählt.
5.1
struktur
Die Produktlinienentwicklung folgt einer vorgegebenen Struktur auf Domänen(domain) und Anwendungsebene (application) (Abb. 13). Diese gliedern sich laut
[PBL05] jeweils in Anforderungen, Design, Realisierung und Testfälle. Über
diesen vier Teilpunkten liegt das Produktmanagement, das sich neben der Entwicklung und Produktion vor allem um das Marketing kümmert. Im Rahmen
des Produktmanagements werden anhand von Marktanalysen die Funktionalitäten und Features auf Domänen- und Anwendungsebene festgelegt. Weiterhin
wird der Zeitplan für die Entwicklung vorgegeben. Das Produktmanagement
steht während des gesamten Lebenszyklus der Produktlinie in Verbindung mit
den Entwicklungsstufen. Es reagiert auf Vorschläge und Rückmeldung aus
dem Entwicklungsprozess und passt die Anforderungen entsprechend an. Das
Produktmanagement einer Produktlinie stellt also einen dynamischen Prozess
dar.
47
Entwicklung auf Domänenebene
produktlinien und variabilität
Anforderungsdokumente
Produktmanagement
Design
Realisierung
Testen
Domäne inkl. Variabilität
Anforderungen
Testartefakte
Architektur
Komponenten
Feedback
Entwicklung auf Anwendungsebene
48
Anforderungsdokumente
Design
Realisierung
Testen
Artefakte von Anwendung n
Artefakte von Anwendung 1
Anforderungen
Architektur
Komponenten
Testartefakte
Abbildung 13: Produktmanagement [PBL05]
5.1.1
Anwendungs- und Domänenebene
Die Domänenebene gibt wiederverwendbare Bestandteile vor und liefert eine globale Beschreibung der gemeinsamen und variablen Bestandteile. Auf ihr wird
die Produktlinie modelliert und die einzelnen Features definiert. Weiterhin werden die Features auf Anforderungen, Software- und Hardwarekomponenten
sowie Testfälle abgebildet. Auf der Domänenebene können bereits gemeinsame
und optionale Bestandteile der Produktlinie entwickelt und getestet werden.
Sie dient also gleichsam als Vorlage für die Anwendungsebene.
Auf der Anwendungsebene werden die Features aus der Domänenebene wiederverwendet und anwendungsspezifisch erweitert. So entstehen auf der Anwendungsebene die einzelnen Produkte, die aus der Beschreibung innerhalb der
Domänenebene abgeleitet wurden. Diese werden aus den für die jeweilige Anwendung benötigten Artefakten der Domänenebene erzeugt. Ein Artefakt stellt
einen abgeschlossenen Bestandteil des Anforderungsdokuments, des Designs,
der Realisierung oder des Tests dar. Es kann äquivalent mit einem Feature
5.1 struktur
sein oder einen Bestandteil eines Features ausmachen. Artefakte bedürfen
unter Umständen Anpassungen, um aus der Domänenebene übernommen
zu werden. Die Anwendungsebene stellt zusammengefasst den Lösungsraum
für die durch die Domänenebene definierte Produktlinie dar. Variabilität kann
dabei beim Kompilieren oder erst während der Programmausführung in das
generierte Produkt einfließen. Es existiert nach [PBL05] eine externe, für den
Kunden relevante, und eine interne, für den Kunden unsichtbare Variabilität.
Nach dem 4-Variablen-Modell (4.2.1) ist Variabilität im äußeren Verhalten
äquivalent zur externen Variabilität und Variabilität im inneren Verhalten äquivalent zur internen Variabilität. Beziehungen zwischen interner und externer
Variabilität werden nicht explizit, wie im 4-Variablen-Modell, definiert.
Den zentralen Nutzen der Aufteilung von Entwicklungsvorhaben in Domänenund Anwendungsebene stellt die Möglichkeit der Wiederverwendung von
Artefakten aus der Domänenebene in der Anwendungsebene dar. Dies führt
zur drastischen Senkung der Entwicklungskosten, da die Artefakte so vom
Anforderungsdokument bis hin zum Abnahmetest entweder komplett übernommen oder mit leichten Veränderungen für verschiedene Konfigurationen
verwendet werden können. Eine wichtige Voraussetzung für diese Aufteilung
stellt die Möglichkeit der Modellierung der gemeinsamen und optionalen
Bestandteile einer Produktlinie dar (5.2).
Eine Anpassung des Modells aus Abb. 13 auf das V-Modell wird in [OWES11]
vorgeschlagen.
5.1.2
Entwicklungsschritte
Im Folgenden soll auf die einzelnen Bestandteile der Domänen- und Anwendungsebene aus Abb. 13 eingegangen werden sowie eine Relation zwischen
denselben dargestellt werden:
Anforderungsdokumente: Die Anforderungsdokumente bestehen auf Domänenebene aus gemeinsamen und variablen Features der Produktlinie sowie
einem Variabilitätsmodell. Beides bildet die Grundlage für das Design. Das
initiale Aufstellen der Anforderungsdokumente wird durch das Produktmanagement durchgeführt. Alle Anforderungen können in beliebiger Form (4.2)
vorliegen. Auf Anwendungsebene bilden die Anforderungen ein Dokument,
das ein einzelnes Produkt beschreibt und als Vorlage für das Design auf
Anwendungsebene dient. Dabei werden Artefakte aus der Domänenebene
wiederverwendet bzw. für das jeweilige Produkt angepasst. Weiterhin können
durch das Produktmanagement produktspezifische Anforderungen hinzugefügt werden. Während der Lebenszeit der Produktlinie besteht die Möglichkeit,
dass die Anforderungen auf Domänenebene durch Vorschläge, die auf Anwendungsebene gemacht werden, erweitert werden.
49
50
produktlinien und variabilität
Design: Während des Designs wird auf Domänenebene eine Referenzarchitektur erstellt, die das System in seine Bestandteile zerlegt und deren Interaktion
abstrahiert. Weiterhin werden auf dieser Ebene Regeln definiert, die während
der Entwicklung einzuhalten sind. Das Design kann unter verschiedenen
Blickwinkeln betrachtet werden. Dazu gehört der Blick auf die logischen Zusammenhänge, auf die Struktur, auf die Prozesse und auf die Abbildung auf
Programmcode. Im Designprozess werden Konkretisierungs- und Verbesserungsanfragen bei Unklarheiten in den Anforderungsdokumenten formuliert.
Weiterhin werden der Realisierung auf Domänenebene und dem Design auf
Anwendungsebene eine Referenzarchitektur und wiederverwendbare Artefakte zur Verfügung gestellt. Das Design auf Anwendungsebene liefert eine
Abschätzung über die Machbarkeit der Anforderungen und die Architektur für
die Realisierung auf Anwendungsebene. Artefakte, die auf Anwendungsebene
dem Design hinzugefügt werden, können auf Domänenebene übernommen
werden, wenn sie für weitere, zukünftige Produkte vorgesehen sind.
Realisierung: Auf Domänenebene werden während der Realisierung wiederverwendbare Artefakte implementiert. Dazu gehören Programmcode, Datenbanken und Protokolle. Die Variabilität kann auf dieser Ebene durch Konfigurationsdateien repräsentiert werden. Die Artefakte und Konfigurationsdateien
werden für den Test auf Domänenebene sowie für die Realisierung auf Anwendungsebene wiederverwendet. Auf Anwendungsebene wird während der
Realisierung die eigentliche zu testende Anwendung fertig gestellt. Während
der Fertigstellung werden Fehler, die im Design gemacht wurden, identifiziert
und können im Design auf Anwendungsebene korrigiert werden. Um die
Anwendung korrekt testen zu können, liefert die Realisierung eine Beschreibung des Umgebungsverhaltens sowie der Ein- und Ausgaben für den Test auf
Anwendungsebene. Artefakte der Realisierung auf Anwendungsebene können
bei Bedarf in die Domänenebene transferiert werden.
Testen: Das Testen dient auf Domänenebene der Überprüfung der Anforderungen, des Designs und der Realisierung. Die Tests basieren auf den
wiederverwendbaren Artefakten der anderen Elemente auf Domänenebene.
Weiterhin werden Testartefakte für den Test auf Anwendungsebene zur Verfügung gestellt. Testartefakte sind Bestandteile einer Testumgebung, wie Testfälle,
ausführbare Modelle oder Klassifikationsbäume. Auf Anwendungsebene dient
der Test der Abnahme der Anwendung für den Betrieb. Er orientiert sich am
V-Modell (2.1.4) und interagiert mit den Anforderungen, dem Design und der
Realisierung auf Anwendungsebene.
Von der Anwendungs- in die Domänenebene gibt es immer ein Feedback.
Neue Entwicklungen oder korrigierte Fehler fließen somit in die Produktlinie
ein. Dadurch profitieren zukünftige Konfigurationen, aus denen Produkte
entstehen sollen. Diese verfügen somit über einen größeren Funktionsumfang
und eine höhere Qualität.
5.2 darstellung
5.2
darstellung
Darstellungen von Variabilität innerhalb einer Produktlinie müssen intuitiv
lesbar sein, um von allen Projektbeteiligten eindeutig verstanden zu werden.
So kann Missverständnissen vorgebeugt werden und Änderungen einfach
nachvollzogen und hinzugefügt werden. Zu diesem Zweck wurden von Kang
et al. [KCH+ 90] 1990 Feature-Modelle vorgestellt. Dabei handelt es sich um einen
azyklischen Graphen, dessen Knoten die einzelnen Features eines Produkts
repräsentieren [CE00]. Ein Feature kann eine einzelne Funktionalität, eine
Gruppe von Funktionalitäten [Bos00] oder eine nicht funktionale Komponente
des Produkts [CHE05] repräsentieren. Die Aufspaltung der Spezifikation in
einzelne Features ist nicht geregelt, sondern kann variabel angepasst werden.
Feature 1
Feature 2
Pflichtknoten
Feature 1
Feature 2
Optionaler Knoten
Feature 1
Feature 2
Feature 3
Alternativgruppe
require
Feature 2
Feature 3
Bedingungskante
Feature 1
Feature 2
Feature 3
Oder-Gruppe
Feature 2
exclude
Feature 3
Ausschlusskante
Abbildung 14: Feature-Modell-Notation
So ist es z.B. möglich, ein globaleres Feature-Modell für Marketingzwecke
aufzubauen und ein feiner strukturiertes für die Entwicklung.
Die Darstellung eines Feature-Modells folgt den Regeln aus Abb. 14:
• Pflichtknoten: Der Knoten muss in jeder Konfiguration der Produktlinie
vorhanden sein.
• Optionaler Knoten: Der Knoten kann Teil einer Konfiguration der Produktlinie sein.
• Alternativgruppe: Es muss immer genau einer der Knoten Teil der Konfiguration sein (1 aus n Bedingung).
• Oder-Gruppe: Es darf eine beliebige Anzahl der Knoten Teil des Produkts sein (n aus m Bedingung).
51
52
produktlinien und variabilität
• Bedingungskante: Ist ein Feature Teil der Produktlinie, so bedingt dies
ein weiteres Feature.
• Ausschlusskante: Ist ein Feature Teil der Produktlinie, so schließt dies
ein weiteres Feature aus.
Alle aus diesem Modell ableitbaren möglichen Kombinationen ergeben ein
gültiges Produkt [HST+ 08]. Das Feature-Modell stellt also die Struktur der
gesamten Produktlinie dar. Diese wird auch als 150%-Modell bezeichnet. Ein
150%-Modell ist im Normalfall durch die Abhängigkeiten zwischen den einzelnen Features nicht implementierbar und somit auch nicht testbar. Es kann
dazu verwendet werden, Produkte durch das Weglassen einzelner Features
zu generieren. Diese Methodik bezeichnet man als 150%-Ansatz, dem der
kompositionale Ansatz gegenüber steht. Beim kompositionalen Ansatz werden
die Features einzeln implementiert und später zu einem Produkt zusammengesetzt. Im Rahmen dieser Arbeit wird der 150%-Ansatz verwendet.
Feature-Modelle können in boolesche Ausdrücke übersetzt werden. In diesem
Ausdruck entspricht jedes Feature einem Literal, dessen logische Verknüpfung
durch die Knotenart und den Zusammenhang mit den anderen Features
bestimmt wird. Der Ausdruck wird nur dann wahr, wenn eine nach der
Struktur des Feature-Modells gültige Featurekombination gewählt wurde.
Definition 5.9: Gültige Featurekombination
f sei ein Feature, das als boolesche Variable interpretiert wird,
und dessen Auswahl mit {1} bzw. dessen Abwesenheit mit {0}
gekennzeichnet ist.
F sei die Menge aller im Feature-Modell vorkommenden Features {f1 , f2 , . . . , fn }.
FK sei eine beliebige Featurekombination, also die Belegung
aller Features in F mit booleschen Werten.
BF sei der nach den Regeln in Tab. 1 aus dem Feature-Modell
abgeleitete boolesche Ausdruck.
Eine gültige Featurekombination FK liegt immer dann vor,
wenn gilt BF (FK ) = 1
Tab. 1 verdeutlicht die logischen Funktionen. Die Zusammenhänge zwischen
Feature-Modellen und boolescher Logik wurden von Czarnecki und Wasowski
in [CW07] dargestellt. Sie stellen ein Feature-Modell als booleschen Ausdruck
in KNF dar und zeichnen einen Implikations-Hypergraphen, der alle aus der
5.2 darstellung
Feature-Modell Komponente
Semantik
Wurzelknoten w
w
f1 optionaler Folgeknoten von f
f1 → f
f1 verpflichtender Folgeknoten von f
f1 ↔ f
f1 , . . . , fn Alternativgruppe unter f (f1 ∨ . . . ∨ fn ↔ f) ∧
V
¬(fi ∧ fj )
i<j
f1 , . . . , fn Odergruppe unter f
f1 ∨ . . . ∨ fn ↔ f
f1 bedingt f2
f1 → f2
f1 schließt f2 aus
¬(f1 ∧ f2 )
Tabelle 1: Boolesche Ausdrücke der Feature-Modell-Konstrukte [CW07]
ableitbaren Implikationen enthält. Weiterhin schlagen sie vor, den logischen Ausdruck in Form eines BDDs darzustellen. Als Herausforderung sehen
sie die Überführung eines booleschen Ausdrucks in ein Feature-Modell. Sie
identifizieren dabei folgende Probleme:
KNF
• Viele äquivalente Feature-Modelle sind aus dem selben booleschen Ausdruck ableitbar.
• Alle durch den Implikations-Hypergraphen implizierten Beziehungen
zwischen Features darzustellen könnte den Betrachter des entstehenden
Feature-Modells überfordern.
• Die logische Struktur ist nicht die einzige strukturierende Voraussetzung
für ein sinnvolles Feature-Modell.
• Eine Brute-Force Suche nach dem optimalen Feature-Modell für einen
booleschen Ausdruck wird nicht skalieren.
Als Lösung für das Problem wird vorgeschlagen, dass ein Algorithmus, der
aus booleschen Ausdrücken Feature-Modelle erzeugt, auf jeden Fall den booleschen Ausdruck vollständig und ohne redundante Teildarstellungen im entstehenden Feature-Modell übersetzen muss. Weiterhin muss der Algorithmus
deterministisch arbeiten. Er muss für äquivalente logische Ausdrücke auch das
selbe Feature-Modell erzeugen. Die Übersetzung von booleschen Ausdrücken
in Feature-Modelle ist weiterhin ein ungelöstes Problem. Eine Lösung könnte
das Zusammenführen von Feature-Modellen, die Erzeugung von anwenderspezifischen Ansichten auf Feature-Modelle sowie das Reverse-Engineering von
Feature-Modellen aus bestehendem Code unterstützen.
53
54
produktlinien und variabilität
5.3
anforderungen im produktlinienkontext
Anforderungen, die nicht nur ein einzelnes Produkt, sondern eine Produktlinie
beschreiben, stellen Entwickler und Tester vor immer größere Herausforderungen. Dabei stellt die Analyse von Anforderungen für eine Produktlinie
sowie die Generierung eines Orakels für den Produktlinientest einen zentralen
Punkt dieser Arbeit dar (8.1). Anforderungen für Produktlinien beinhalten
stets Variabilitätsinformationen, die durch ein Variabilitätsmodell darstellbar
sind. Diese müssen mit den einzelnen Anforderungen verknüpft werden. Zu
diesem Zweck wird das Variabilitätsmodell auf die Anforderungen abgebildet.
Das genaue Vorgehen ist in Kapitel 7 beschrieben.
5.4
produktlinientests
Das Testen einer Produktlinie stellt eine besondere Herausforderung dar. Hierbei soll vermieden werden, dass jedes aus der Produktlinie generierte und
produzierte Produkt immer wieder neu, einzeln und vollständig getestet werden muss. Das Testen von Produktlinien anhand von Orakeln bildet einen
wesentlichen Bestandteil dieser Arbeit, der in Abb. 15 dargestellt ist. Die vor100%-Modell
Modellierung
Feature-Modell
150%-Modell
generieren
durchführen
Analyse des
Modells
Evaluierung
beweisen auf
Cando-Objekt
(Orakel)
Implizite
Annahmen über
das System
Anwendungsszenarien
Eigenschaften
ausführen auf
Testein- und
Ausgaben
Abbildung 15: Evaluierung
geschlagene Ergänzung des Testprozesses setzt sich aus der Vorhersage von
Testergebnissen durch ein Orakel, aus der formalen Überprüfung der Anforderungen und aus dem Beweis von Systemannahmen zusammen und wird in
Kapitel 8 detailliert behandelt.
5.4 produktlinientests
Definition 5.10: Systemannahme - Eine Eigenschaft, der ein
entwickeltes System genügen muss, um Sicherheit zu garantieren, und die nicht explizit Teil der zu implementierenden
Spezifikation ist, ist eine Systemannahme.
Gerade bei Produktlinien sollte das Thema Wiederverwendung einen großen
Stellenwert einnehmen. Aus der Forschung lassen sich drei Hauptansätze
ableiten:
Keine Wiederverwendung für den Test: Dieser Ansatz widerspricht im Wesentlichen der Idee von Produktlinien. Jedes Produkt wird einzeln getestet.
Eine Aufteilung in Anwendungs- und Domänenebene findet nicht statt. Dieser
Ansatz wird in [TTK04] als product-by-product testing bezeichnet und ist auf
Grund der Anzahl ableitbarer Produkte für variantenreiche Systeme heutzutage nicht mehr praktikabel.
Wiederverwendung einzelner Features für den Test: In diesem Ansatz werden Ähnlichkeiten innerhalb der möglichen Konfigurationen ausgenutzt. Es
werden Regressionstests angewendet oder Testfällen aus der Domänenebene
auf der Anwendungsebene wiederverwendet. Beide Techniken finden vor
allem im modellbasierten Testen Anwendung. Einen Überblick mit Hinblick
auf Produktlinientests gibt [OWES11]. Diese Techniken reduzieren zwar durch
Wiederverwendung den Testaufwand, können aber nicht vermeiden, dass jedes
generierte Produkt vollständig, einzeln getestet werden muss.
Wiederverwendung von Feature-Gruppen für den Test: Dieser Ansatz zielt
auf die Extrahierung von Untermengen in der Gestalt von Feature-Gruppen
oder Produkten und wurde von McGregor [McG01] initiiert. Anstatt jedes Produkt einzeln zu testen, werden mögliche Untermengen generiert und getestet.
Cohen et al. [CDS07] entwickelten das combinatorial interaction testing. Dieses
hat zum Ziel, eine repräsentative Menge von Produkten für die Produktlinie
zu finden. Wird diese repräsentative Menge getestet und Fehler korrigiert, so
steigt die Qualität der gesamten Produktlinie. Ein Abdeckungsmaß für Produktlinientests auf Basis des combinatorial interaction testings wurde außerdem
definiert [CDS06].
55
6
VOLLSTÄNDIGKEIT UND CANDO-OBJEKTE
Sind die in einer Spezifikation enthaltenen Eigenschaften durch die Beschreibung in ITL formalisiert, können sie nach Abb. 15 evaluiert werden. Zum einen
wird die Vollständigkeit des Eigenschaftssatzes des 150%-Modells bewertet
und zum anderen wird ein Cando-Objekt daraus generiert. Im Folgenden
werden beide Schemata genauer erklärt.
6.1
cando-objekte
Der Ansatz der Cando-Objekte entstand im Rahmen der Dissertation von Martin Schickel [Sch09]. Diese zielt darauf ab, Eigenschaftssätze in eine möglichst
allgemeine Hardwarebeschreibung zu übersetzen, um die formale Verifikation
von Schaltungen zu unterstützen.
6.1.1
Ursprüngliche Idee von Cando-Objekten
Ein Cando-Objekt ist ein aus einem Eigenschaftssatz erzeugtes, simulierbares
Modell. Abb. 16 zeigt seine Struktur. Es verfügt über die selben Ein- und
Asynchrone
Ausgänge
Eingänge
Schieberegister
Kombinatorisches Netz
Register
Synchrone
Ausgänge
Takt
Abbildung 16: Struktur des Cando-Objekts [Sch09]
Ausgänge, die auch eine Black-Box-Repräsentation des System aufwiese. Da
Cando-Objekte im Bereich der formalen Hardwareverifikation entwickelt wurden, können die Eingänge asynchron oder synchron zum Systemtakt ihre
Werte ändern. Die Funktionalität des Systems wird in einem kombinatorischen
Netzwerk abgebildet, das synchrone Ausgänge über einen Registersatz sowie
asynchrone Ausgänge ermöglicht. Da sich Eigenschaften über ein Zeitfenster
erstrecken, müssen neben den aktuellen Eingangswerten auch vergangene
57
58
vollständigkeit und cando-objekte
Eingangswerte und interne Zustände gespeichert werden. Dies geschieht über
ein Schieberegister, dessen Werte bei jedem Takt eine Ebene weitergeschoben
werden. Der Takt ist das Maß für die Zeit, deren Fortlaufen durch das Auftreten einer steigenden Taktflanke definiert wird. Es handelt sich also um diskrete,
durch den Takt bestimmte Zeitpunkte. Ursprünglich wurden Cando-Objekte
entwickelt, um Systemeigenschaften zu beweisen.
Definition 6.1: Systemeigenschaft - Eine Eigenschaft, die das
Verhalten eines Systems für einen oder mehrere Ausgänge in
Abhängigkeit der Eingänge beschreibt.
Eingänge
Modul II
Eingänge
verifiziere
Eigenschaftssatz Modul II
Ausgänge
generiere
ersetze
Cando-Objekt
Ausgänge
System
Eingänge
Modul I
Modul II /
Cando-Objekt
Modul III
Ausgänge
verifiziere
Systemeigenschften
Abbildung 17: Ursprüngliche Verwendung von Cando-Objekten [Sch09]
Abb. 17 zeigt den ursprünglichen Einsatzzweck von Cando-Objekten. In der
formalen Hardwareverifikation werden im Normalfall zuerst Eigenschaften
für die Module eines Systems geschrieben und auf den Modulen bewiesen.
Enthalten die Eigenschaften für ein Modul die komplette relevante Funktionalität und halten sie beim Beweis auf dem Modul, so ist das Modul korrekt
und vollständig und kann eingesetzt werden. Werden die Module zu einem
System zusammengesetzt, kann der Beweis von Eigenschaften über das System
an der großen Komplexität scheitern. Die Idee von Cando-Objekten besteht
darin, ein Modul in einem System durch sein Cando-Objekt, das aus den zuvor
bewiesenen Eigenschaften erzeugt wird, zu ersetzen und eine Systemeigenschaft auf dem System mit dem eingefügten Cando-Objekt zu beweisen. Die
Komplexität dieses Beweises kann niedriger sein und daher kann der Beweis
in vertretbarer Zeit ausgeführt werden. Als Folge dessen muss sich ein CandoObjekt auch in der Simulation genau so verhalten wie es die Eigenschaften
beschreiben. Ein weiteres Anwendungsgebiet von Cando-Objekten stellt der
Äquivalenzvergleich von Eigenschaftssätzen dar. Um die Äquivalenz zweier Eigenschaftssätze zu zeigen, wird aus beiden ein Cando-Objekt erzeugt. Halten
beide Eigenschaftssätze auf dem aus dem jeweils anderen Eigenschaftssatz
6.2 vollständigkeit von eigenschaftssätzen
erzeugten Cando-Objekt, so sind sie äquivalent. Das Werkzeug, das die Generierung der Cando-Objekte ermöglicht (Candogen), erzeugt eine den initialen
Eigenschaften entsprechende VHDL-Beschreibung. Die initialen Eigenschaften
sind in ITL (3.3.2) verfasst. Freiheitsgrade, die durch Spezifikationslücken in
Eigenschaftssätzen entstehen (8.3.1), werden in einem Cando-Objekt durch
zufälliges Verhalten repräsentiert. Dafür stehen Random-Inputs zur Verfügung,
die ein zufälliges Verhalten simulieren. Ein Cando-Objekt verhält sich also in
den spezifizierten Situationen spezifikationsgetreu und ansonsten zufällig.
6.1.2
Generierung von Cando-Objekte
Ein Eigenschaftssatz, der in ITL oder LTL verfasst wurde, eignet sich in der
Regel nicht direkt für die Generierung von Cando-Objekten. Grund dafür sind
die Freiheitsgrade, die dem Verfasser von Eigenschaften zugestanden werden.
So ist es möglich Eigenschaftssätze, die äquivalentes Verhalten beschreiben, auf
unterschiedliche Art und Weise zu formulieren. Weiterhin können Widersprüche in dem Eigenschaftssatz enthalten sein, die die Generierung eines ausführbaren Modells unmöglich machen. Ein weiteres Problem bei der Generierung
von Cando-Objekten stellt die Einschränkung des Umgebungsverhaltens (environmental restrictions) dar. Eine Einschränkung des Umgebungsverhaltens
ist immer dann gegeben, wenn ein Zustand des Systems existiert, in dem
die Umgebung bestimmte Wertekombinationen nicht annehmen darf, da ansonsten widersprüchliches Verhalten auftritt. Der Eigenschaftssatz muss daher
neu strukturiert werden, um ihn für die Übersetzung in ein Cando-Objekt
vorzubereiten. Für den detaillierten Ablauf des Algorithmus zur Generierung
von Cando-Objekten wird auf [Sch09] verwiesen.
6.2
vollständigkeit von eigenschaftssätzen
Die Überprüfung von Eigenschaftssätzen auf Vollständigkeit ist eine zentrale
Voraussetzung für die vollständige formale Verifikation eines Hardwarebausteins. Ein Eigenschaftssatz ist vollständig, wenn der Wert jedes Ausgangs
für alle möglichen Eingangskombinationen durch die im Eigenschaftssatz
enthaltenen Eigenschaften determiniert ist. Also genau dann, wenn er aus
Anforderungen abgeleitet wurde, die nach IEEE 830 (4.1) vollständig sind. Im
Rahmen dieser Arbeit wird der Algorithmus zur Vollständigkeitsbewertung
aus der Dissertation von Martin Oberkönig [Obe10] verwendet. Dieser Algorithmus ermöglicht es, einen beliebigen Eigenschaftssatz auf Vollständigkeit
zu überprüfen, und definiert weiterhin ein Maß für die Vollständigkeit. Es
werden außerdem im Eigenschaftssatz enthaltene Widersprüche gefunden.
59
60
vollständigkeit und cando-objekte
6.2.1
Normalform für die Vollständigkeitsbewertung
Wie schon bei der Erstellung von Cando-Objekten, muss auch für die Vollständigkeitsbewertung der Eigenschaftssatz angepasst werden. Diese Anpassung,
auch Normalisierung genannt, ist an den Bedürfnissen der formalen Hardwareverifikation ausgerichtet. Für die Normalisierung werden die Ausgänge, die
durch den Eigenschaftssatz beschrieben werden, als einzelne Bits betrachtet.
Zahlenwerte werden als Bitvektoren repräsentiert und können in ihre einzelnen
Bits zerlegt werden. Jedes Bit kann ausschließlich die Werte ’0’ und ’1’ annehmen. Die Normalisierung zerlegt die ursprünglichen Eigenschaften derart, dass
für jedes Ausgangsbit zwei Implikationen entstehen. Nämlich die Implikation,
die alle Eingangskombinationen auf der linken Seite enthält, die den Ausgang
v laut Eigenschaftssatz auf ’0’ setzen, die sogenannte 0-Hülle v0 , und die, die
ihn auf ’1’ setzen, die sogenannte 1-Hülle v1 . Ein Ausgang ist vollständig
determiniert, wenn er für jede mögliche Eingangskombination entweder auf ’0’
oder auf ’1’ gesetzt wird. Daraus ergibt sich die Determiniertheitsfunktion:
D(v) = v0 ∨ v1
Die Funktion über Spezifikationslücken beschreibt alle Eingangskombinationen,
in denen ein Ausgang weder auf ’0’, noch auf ’1’ gesetzt wird. Sie ergibt sich
aus der Negation der Determiniertheitsfunktion:
L(v) = ¬D(v) = ¬(v0 ∨ v1 )
Damit ein Eigenschaftssatz konsistent ist, darf er einen Ausgang für jede
mögliche Eingangskombination nur entweder auf ’0’ oder auf ’1’ setzen. Daraus
ergibt sich die Konsistenzfunktion:
K(v) = v0 ∧ v1
Ein Ausgang ist vollständig determiniert, wenn gilt:
D(v) ≡ 1 bzw. L(v) ≡ 0
Ein Ausgang ist konsistent und damit widerspruchsfrei, wenn gilt:
K(v) ≡ 0
Aussagen über den Grad der Vollständigkeit, den sogenannten Determiniertheitsgrad, der angibt, für welchen prozentualen Anteil aller Eingangskombinationen der Ausgang definiert ist, erhält man durch:
V(v) = #Minterme
2n
#Minterme : Anzahl der durch die Eigenschaften determinierten Situationen
n : Anzahl der Literale
Aussagen über die Determiniertheit des Gesamtsystems, das mehrere Ausgangssignale aufweisen kann, erhält man durch:
6.2 vollständigkeit von eigenschaftssätzen
Pi
G=
V(vi )
#Signale
Freiheitsgrade, die bei der Entwicklung eines Systems dem Entwickler ausdrücklich zugestanden werden, müssen bei der Berechnung der Determiniertheit
berücksichtigt werden. Sie werden als Klauselmenge von Dont-Care-Werten
vdc dem Ausdruck hinzugefügt und es ergibt sich die erweiterte Determiniertheit:
DF (v) = v0 ∨ v1 ∨ vdc
Es ergibt sich folgerichtig die erweiterte Spezifikationslücke:
LF (v) = ¬D(v) = ¬(v0 ∨ v1 ∨ vdc )
Der Ausgang einer Spezifikation mit Freiheitsgraden ist also vollständig determiniert, wenn gilt:
DF (v) ≡ 1 bzw. LF (v) ≡ 0
Weiterhin ergibt sich, analog zur Berechnung ohne Freiheitsgrade:
KF (v) = v0 ∧ v1 ∧ vdc VF (v) =
6.2.2
#Minterme
2n
Pi
GF =
VF (vi )
#Signale
Beispiel
Die Funktionsweise des Algorithmus soll nun beispielhaft mittels folgender
LTL-Ausdrücke erläutert werden:
G(a ∧ b → X(x ∧ y))
G(¬a ∨ b → X(¬x))
G(a ∧ ¬b → X(x ∧ ¬y))
Die Zerlegung in 0- und 1-Hülle ergibt:
1-Hülle von x: G((a ∧ b) ∨ (a ∧ ¬b) → X(x))
0-Hülle von x: G(¬a ∨ b → X(¬x))
1-Hülle von y: G(a ∧ b → X(y))
0-Hülle von y: G(a ∧ ¬b → X(¬y))
Durch die Eigenschaften ergibt sich die Funktionstabelle Tab. 2. Für a ∨ b muss
der Ausgang x laut Eigenschaftssatz sowohl den Wert ’0’ als auch den Wert ’1’
annehmen. Somit besteht ein Widerspruch für x im Eigenschaftssatz und es
ergibt sich:
K(x) = ((a ∧ b) ∨ (a ∧ ¬b)) ∧ (¬a ∨ b) = a ∧ b 6= 0
K(y) = (a ∧ b) ∧ (¬a ∧ b) = 0
Für die Determiniertheit ergibt sich:
61
62
vollständigkeit und cando-objekte
X(x ≡ 0)
X(x ≡ 1)
a
b
0
0
X
0
1
X
1
0
X
1
1
X
X
X(y ≡ 0)
X(y ≡ 1)
X
X
Tabelle 2: Funktionstabelle
D(x) = ((a ∧ b) ∨ (a ∧ ¬b)) ∨ (¬a ∨ b) = 1
D(y) = (a ∧ b) ∨ (¬a ∧ b) 6= 1
Für x ist das Verhalten also in jeder Situation determiniert, während für y das
nicht der Fall ist. Die Lücken von y sind:
L(y) = ¬((a ∧ b) ∨ (a ∧ ¬b) 6= 1) = ¬b
Da y in zwei von vier möglichen Situationen determiniert ist, ergibt sich
V(y) = 50%. Die Determiniertheit des Gesamtsystems ist dann:
G=
100%+50%
2
= 75%
Handelte es sich bei ¬b um einen Freiheitsgrad für y, so ergäben sich folgende
Gleichungen:
DF (y) = (a ∧ b) ∨ (¬a ∧ b) ∨ ¬b = 1
VF (y) = 100%
GF = 100%+100%
= 100%
2
Das System wäre also vollständig determiniert. Trotzdem muss die widersprüchliche Situation für x aufgelöst werden, um seine Konsistenz zu gewährleisten.
Teil III
KONZEPT UND ERGEBNISSE
In diesem Teil werden die Konzepte präsentiert, die die Anwendung formaler Methoden für Produktlinien eingebetteter Systeme ermöglichen. Dazu gehört die Generierung
von Verhaltensmodellen für Produktlinien eingebetteter
Systeme, den sogenannten Orakeln, aus formalen Eigenschaften. Weiterhin wird die Vollständigkeit der formalen
Eigenschaften bewertet und der Begriff der Vollständigkeit erörtert. Als Grundlage dafür müssen die formalen
Eigenschaften um die durch die Produktlinie beschriebene
Variabilität erweitert werden. Weiterhin werden die Vorteile der Einführung von Produktlinienmethodiken in die
Entwicklung eingebetteter Systeme diskutiert. Schließlich
werden die Experimente vorgestellt, die im Rahmen dieser
Arbeit durchgeführt wurden. Sie dienen der Plausibilitätsprüfung der vorgestellten Ansätze und sollen Beispiele für
Anwendungsgebiete geben.
7
FORMALISIERUNG VON ANFORDERUNGEN
Einen fundamentalen Gesichtspunkt dieser Arbeit bildet die Abbildung des äußeren Verhaltens (4.2.1) in formale Eigenschaften, um daraus ein Orakel (2.3.2)
zu generieren und um die Eigenschaften auf Vollständigkeit, Widerspruchsfreiheit und Redundanz zu überprüfen. Abb. 18 zeigt den Zusammenhang
zwischen der Spezifikation und der Modellierung. Handelt es sich eine Spezifikation für eine Produktlinie, so müssen Variabilität und Funktionalität aus
den Anforderungen extrahiert werden und bilden das 150%-Modell (5.2). Bei
Spezifikationen für einzelne Produkte genügt die Extraktion der Funktionalität
und es entsteht das 100%-Modell.
Anforderungen
Spezifikation
Text
Tabellen
UML-Modelle
Variabilität
formalisieren
Verhalten
formalisieren
100%-Modell
Modellierung
Feature-Modell
150%-Modell
Eigenschaften
Abbildung 18: Modellierung
7.1
formalisieren von verhalten
Ein Eigenschaftssatz beschreibt das Verhalten eines Teils oder der gesamten
in den Anforderungen enthaltenen Funktionalität auf eine formale Art und
Weise. Im Rahmen dieser Arbeit wird die Beschreibung von Eigenschaften
mit ITL (3.3.2) oder LTL (3.3.1) vorgeschlagen. Beide Möglichkeiten bieten eine eindeutige Verhaltensbeschreibung des in den Anforderungen definierten
Systems. Das bildet die Voraussetzung für die formale Überprüfbarkeit der
Anforderungen und für die Generierung von Orakeln. Es werden im Gegensatz zur Hardwareverifikation keine Eigenschaften verwendet, die das innere
Verhalten (4.2.1) eines Systems beschreiben, sondern nur solche, die das äußere
Verhalten aufzeigen.
65
66
formalisierung von anforderungen
7.1.1
Anwendung des 4-Variablen-Modells
Durch das 4-Variable-Modell (4.2.1) wird ein Spezifikationsstil vorgeschlagen,
der das System in das äußere, sichtbare Verhalten und das innere, von der
Software beschriebene Verhalten aufteilt. Auf Grund dieser Aufteilung ergeben sich einige Vorteile. So kann dadurch vorerst das äußere Verhalten in
Zusammenarbeit mit dem Kunden spezifiziert werden, ohne unnötige Vorgaben für die Software- bzw. Hardwareimplementierung zu machen. Die
Anforderungen an das Verhalten können bereits auf dieser Ebene analysiert
und verfeinert werden. Weiterhin werden die physikalischen und damit die
Wertebereichsgrenzen des gesamten Systems durch MON und CON festgelegt.
Die Abbildungen des Ein- bzw. Ausgangsverhaltens bleiben dadurch auch
während des Entwicklungsprozesses unverändert und machen gleichzeitig
klare Vorgaben für den Wertebereich von INPUT und OUT PUT des Systems.
Was allerdings nicht vorgegeben wird, ist die Einheit und die Präzision, mit
der der Wert in INPUT und OUT PUT verarbeitet wird. Diese Vorgabe wird
erst durch IN und OUT gemacht und ist daher anpassbar bzw. veränderbar
ohne die übrige Systembeschreibung verändern zu müssen.
Die Softwarespezifikation stellt eine Relation von INPUT und OUT PUT her
und muss das Verhalten, das durch REQ vorgegeben ist, abbilden. Erst in
ihr werden Programmiersprache, Aufteilung des Systems in Soft- und Hardwarekomponenten und zu verwendende Algorithmen definiert. Das Zusammenspiel von INPUT , OUT PUT und SOF beschreibt das innere Verhalten des
Systems und wird in der Literatur oft als das 2-Variablen-Modell bezeichnet. Dieser Teil der Spezifikation bildet meistens die Grundlage für Softwareentwickler,
wobei durch das parallele Verständnis des äußeren Verhaltens Fehler vermieden werden können. Spezifikationen, die nach dem 4-Variable-Modell verfasst
sind, ermöglichen es, das äußere Verhalten unabhängig vom inneren Verhalten
zu modellieren und formal zu überprüfen. Weiterhin ist es möglich, dieses
Modell so anzupassen, dass es sich für die Verwendung mit Produktlinien
eignet (7.1.2).
Im Rahmen dieser Arbeit wird auf das äußere Verhalten eingegangen. Dieses
bildet die Grundlage einer Spezifikation, da es zeitlich vor dem inneren Verhalten definiert wird. Weiterhin abstrahiert das äußere Verhalten Hardware und
Software und ist so auch im Bereich eingebetteter Systeme überprüfbar. Nur
dann, wenn das äußere Verhalten vollständig und widerspruchsfrei definiert
wurde, kann ein zu entwickelndes System fehlerfrei funktionieren. Fehler, die
bei der Definition des äußeren Verhaltens gemacht werden, pflanzen sich immer in die Spezifikation des inneren Verhaltens fort. Dort sind sie, wegen der
Modularisierung und der Aufteilung zwischen Soft- und Hardware, schwerer
zu erkennen und zu beheben.
7.1 formalisieren von verhalten
Durch das 4-Variablen-Modell kann kein Zeitbezug zwischen den Variablen,
die durch die Software verarbeitet bzw. gesetzt werden, und den entsprechenden Variablen aus dem äußeren Verhalten hergestellt werden. Änderungen
in Variablen im äußeren Verhalten werden immer gleichzeitig auch in denen
des inneren Verhaltens wirksam. Eine Erweiterung des 4-Variablen-Modells
wird daher von Miller et al. [MT01] vorgeschlagen. Es wird vorgeschlagen,
den SOF-Bestandteil des 4-Variablen-Modells zu erweitern, um den Bezug
zwischen Software und Hardware besser darstellen zu können. Die Erweiterung bezieht sich auf die detailliertere Darstellung des inneren Verhaltens. Um
Hardwaretreiber beschreiben zu können, werden die Relationen der Software
zu IN und OUT konkretisiert. Weiterhin werden die in Software gespeicherten
Werte von MON und CON separat dargestellt. Das dient der Modellierung
des Zeitbezugs zwischen den in Software gespeicherten Werten und den realen beobachtbaren Werten. Im Normalfall sind beide nicht äquivalent. Der in
Software verarbeitete Wert MON 0 läuft dem realen Wert MON zeitlich nach,
während der in Software festgelegte Wert CON 0 sich in der Realität CON
erst mit Verzögerung einstellt. Die detaillierte Darstellung der Software ist
allerdings nicht Teil dieser Arbeit. Daher wird im Folgenden das ursprüngliche
4-Variablen-Modell verwendet.
7.1.2
Variabilität im 4-Variablen-Modell
Das 4-Variablen-Modell beschreibt ein einzelnes Produkt. Es beinhaltet keinerlei Variabilitätsinformation und ist somit im Bereich von Produktlinien
nicht anwendbar. Es bedarf also einer Erweiterung des 4-Variablen-Modells
durch ein Feature-Modell. Dadurch entsteht das im Rahmen dieser Arbeit
vorgeschlagene variantenreiche 4-Variablen-Modell, dessen Struktur in Abb. 19
dargestellt ist.
Die Struktur des ursprünglichen 4-Variablen-Modells aus Abb. 9 bleibt unverändert. Es wird einzig eine Abbildung eines Feature-Modells F auf die
Bestandteile des 4-Variablen-Modells durchgeführt. Wird eine Konfiguration K gewählt, so wird das variantenreiche 4-Variablen-Modell Varv in das
ursprüngliche 4-Variablen-Modell Var transformiert:
F(K)
Varv −−−→ Var
Damit diese Transformation möglich ist, müssen alle Bestandteile von Varv
transformierbar sein.
Abbildung der Ein- und Ausgänge: Die Menge der Ein- und Ausgänge aus
dem 4-Variablen-Modell MON, CON, INPUT und OUT PUT , wird auf das
Feature-Modell bezogen. Ein Feature kann einen oder mehrere Ein- und Ausgänge bedingen bzw. ausschließen. Da die Auswahl der jeweiligen Features
durch die Konfiguration des Feature-Modells festgelegt wird, gilt:
67
68
formalisierung von anforderungen
Feature-Modell F
Abbildung
Variantenreiches äußeres Verhalten
Beobachtbare
Variablen
(MONv )
Mögliche Umgebungsbedingungen (NATv )
Verhaltensspezifikation (REQv )
Abbildung
des Eingangsverhaltens (INv )
Steuerbare
Variablen
(CONv )
Abbildung
des Ausgangsverhaltens
(OUTv )
Variantenreiches inneres Verhalten
Programmeingaben
(INPUTv )
Softwarespezifikation (SOFv )
Programmausgaben
(OUT PUTv )
Abbildung 19: Variantenreiches 4-Variablen-Modell Varv
F(K)
MONv −−−→ MON
F(K)
CONv −−−→ CON
F(K)
INPUTv −−−→ INPUT
F(K)
OUT PUTv −−−→ OUT PUT
Variabilität kann sich in diesem Fall durch das Vorhandensein eines Ein- oder
Ausgangs auszeichnen sowie durch die Einheit, in der der Wert gemessen
bzw. ausgegeben wird. Das Vorhandensein eines Wertes mx in MON oder
cx in CON bedingt dabei immer die Entsprechung ix in INPUT oder ox in
OUT PUT .
Weiterhin wird die Abbildung des Ein- und Ausgangsverhaltens IN und OUT
also die Beziehung zwischen MON und INPUT sowie CON und OUT PUT
auf das Feature-Modell bezogen:
F(K)
INv −−−→ IN
F(K)
OUTv −−−→ OUT
7.2 formalisieren von funktionalität und zeitverhalten
(mtx , itx ) ∈ IN gilt nur dann, wenn mx und ix durch die gewählte Konfiguration
bedingt werden. Analog gilt (otx , ctx ) ∈ OUT nur dann, wenn ox und cx durch
die gewählte Konfiguration bedingt werden. Außerdem wird durch IN und
OUT der Wertebereich sowie dessen Granularität festgelegt. Diese können
ebenfalls variabel sein.
Abbildung der Spezifikationen und Umgebungsbedingungen: Die Umgebungsbedingungen NAT eines Systems beschreiben die maximalen und minimalen Werte, denen es ausgesetzt sein bzw. die es annehmen kann. Sie legen
also den Wertebereich von MON und CON fest. Variabilität in NAT hat z.B.
folgende Gründe:
• Unterschiedliche klimatischen Bedingungen (Temperatur, Luftdruck)
• Unterschiede in der Konstruktion (steifere Karosserie, stärkerer Motor)
• Unterschiede in der Zielgruppe (privater Einsatz, industrieller Einsatz)
Durch das Feature-Modell ergibt sich die Abbildung:
F(K)
NATv −−−→ NAT
Die Verhaltensspezifikation REQ und die Softwarespezifikation SOF sind ebenfalls variabel. Funktionalität kann je nach gewählter Konfiguration hinzugefügt
oder entfernt werden:
F(K)
REQv −−−→ REQ
F(K)
SOFv −−−→ SOF
Im Folgenden wird beschrieben, wie Funktionalität aus Anforderungen extrahiert werden und mit Variabilitätsinformationen angereichert werden kann.
7.2
formalisieren von funktionalität und zeitverhalten
Die Extraktion von Eigenschaften über die Funktionalität und das Zeitverhalten aus Anforderungen ist auf Grund der unterschiedlichen Möglichkeiten, in
denen eine Anforderungsbeschreibung vorliegen kann, nur bedingt automatisierbar. Im Rahmen dieser Arbeit wird die Extraktion manuell vorgenommen.
Das Verfahren wird im Folgenden genauer beschrieben:
7.2.1
Extraktion aus natürlicher Sprache
Bei der Extraktion aus natürlicher Sprache, müssen die Sprachkonstrukte
geeignet interpretiert und in formale Eigenschaften übersetzt werden. Die
Sprache muss in einen Annahme- und einen Verpflichtungsteil zerlegt werden.
Ein Beispiel hierfür liefert die Anforderung:
69
70
formalisierung von anforderungen
...Die Sitzheizung darf nur aktiv sein, wenn der Sitzgurt angelegt ist...
Diese Anforderung beschreibt, dass die Sitzheizung inaktiv sein muss, wenn
der Sitzgurt nicht angelegt ist. Das führt zu folgender formalen Darstellung:
G(¬sitzgurt → X(¬sitzheizung))
Für die Übersetzung muss also der gesamte Text gelesen und interpretiert
werden. Unzulänglichkeiten oder Mehrdeutigkeiten in der Sprache können
diese Arbeit immens erschweren.
Spezifikationen, die in natürlicher Sprache verfasst sind, definieren meist
nicht, ob die Ausführung parallel oder nebenläufig (3.3.5) von statten gehen
muss. Im Normalfall wird diese Entscheidung erst durch die eigentliche
Implementierung getroffen. Wird z.B. Software entwickelt, die von einem
einzigen Prozessor ausgeführt wird, so ist die Ausführung nebenläufig. Das
innere Verhalten ist folglich durch nebenläufige Prozesse (7.4.2) definiert.
Durch geeignetes Scheduling wird das äußere Verhalten von einem Beobachter
parallel wahrgenommen. Da in dieser Arbeit der Fokus auf der Beschreibung
äußeren Verhaltens liegt, werden die Eigenschaften so geschrieben, dass durch
sie paralleles Verhalten modelliert wird.
7.2.2
Extraktion aus CSP
Anforderungen können auch bereits in formaler Form vorliegen. Problematisch
ist hierbei, dass die Aussagekraft der jeweiligen formalen Beschreibung die von
ITL bzw. LTL übertreffen kann. Eine Übersetzung ist dann nur teilweise oder
überhaupt nicht mehr möglich. Das soll nun am Beispiel der Übersetzung von
CSP in ITL verdeutlicht werden. Bei CSPs wird der Fortlauf der Zeit durch das
Auftreten von Ereignissen definiert. Zu einem Zeitpunkt kann immer nur ein
Ereignis auftreten, das die Änderung eines Ein- bzw. Ausgangs bewirkt. Bei
ITL wird eine abstrakte, diskrete Größe t eingeführt, die den Fortlauf der Zeit
bestimmt. Hier können von einem Zeitpunkt zum Nächsten beliebig viele Einund Ausgänge ihren Wert ändern. Die Beschreibung von parallelem Verhalten
kann durch beide Sprachen erfolgen. Eine nichtdeterministische Auswahl, wie
sie in CSPs existiert, kann nur durch Random-Inputs (3.3.5) in ITL nachgebildet
werden. Spezifikationen, die vollständig oder teilweise in CSP verfasst sind,
können durch den präsentierten Ansatz also nicht korrekt abgebildet werden.
Es ist einzig möglich, das durch den Verfasser der Spezifikation gewünschte
Systemverhalten durch ITL oder LTL geeignet zu interpretieren.
7.2 formalisieren von funktionalität und zeitverhalten
7.2.3
Extraktion aus SCR
[cond2]
[cond3]
Current
Mode
[current mode]
...
[cond1]
Die SCR-Notation (4.2.2) eignet sich ideal dazu, die Extraktion von formalen
Eigenschaften aus Spezifikationen in Tabellenform zu demonstrieren. Liegt die
f
@T
-
New
Mode
[new mode]
...
Abbildung 20: Mode Transition Table
Spezifikation, wie bei SCR, in einer genau definierten Tabellenstruktur vor, so
kann die Extraktion von Eigenschaften schematisiert werden. Dadurch ist auch
eine Automatisierung der Extraktion von Eigenschaften möglich. Eine Mode
Transition Table aus Abb. 20 wird, wie folgt, behandelt:
property [NEW_MODE_NAME] is
assume:
at t:
...
prove:
at t+1:
if
{
PREV(active_mode = [current_mode]) and
[static_conditions] and
[changing_condition = true] and
PREV[changing_condition = false]) or
...
} then
active_mode = [new_mode];
elsif {
...
} then
active_mode = [new_mode];
else
active_mode = [old_mode];
end if;
end property;
Für jeden Zustand (Mode), in den der Automat wechseln kann, wird eine
Eigenschaft geschrieben, die die Bedingungen dafür in einer if -Anweisung
enthält. Die if -Anweisung beinhaltet den derzeitigen Zustand current mode,
die Bedingungen static conditions, die gelten müssen und die Bedingung
71
72
formalisierung von anforderungen
changing condition, die für den Zustandsübergang ihren Wert ändern muss.
active mode beschreibt den Zustand, in dem sich der Automat befindet und
new mode ist der neue Zustand, dessen Erreichen durch die Eigenschaft festgelegt wird. Wird keine Transition zu einem neuen Zustand ausgeführt, so
behält der Automat den aktuellen active mode bei und es gilt active mode =
[old mode]. Bestehen die Anforderungen aus mehreren Mode Transition Tables, so werden alle gleichzeitig ausgewertet und der Wechsel in den neuen
jeweiligen active mode geschieht parallel.
Die Condition Table beschreibt das Verhalten eines Ausgangs in Abhängigkeit vom Zustand und einer statischen Bedingung. Sie führt zur folgenden
Eigenschaftsstruktur:
elsif (
PREV(active_mode = [modes]
property [OUTPUT_NAME] is
and
[static_condition] or
assume:
...
-- true
prove:
at t+1: if (
PREV(active_mode = [modes] and
[static_condition] or
...
) then
[output] = [value];
) then
[output] = [value];
...
elsif(
...
) then
[output] = [value];
else
[output] = PREV[output];
end if;
end property;
Dem Ausgang output, dessen Verhalten durch die Condition Table beschrieben wird, wird ein Wert value zugewiesen. Die Zuweisung richtet sich nach
dem jeweiligen Zustand modes und einem Eingangswert static condition. Eine
Condition Table dient zur Festlegung des Ausgangsverhaltens in statischen
Wertebereichen. So kann z.B. definiert werden, dass eine Warnleuchte aktiviert
wird, wenn der Sensorwert einen bestimmten Bereich überschreitet. Die Event
Table beschreibt das Verhalten eines Ausgangs in Abhängigkeit vom Zustand
und dem Auftreten eines Ereignisses. Sie führt zur folgenden Eigenschaftsstruktur:
7.2 formalisieren von funktionalität und zeitverhalten
elsif (
property [EVENT_NAME] is
assume:
(active_mode = [Modes] and
[changing_condition = true]
and
PREV[changing_condition =
-- true
false])
prove:
at t+1: if (
(active_mode = [Modes] and
[changing_condition = true]
and
PREV[changing_condition =
false])
or ...
) then
[output] = [value];
...
elsif(
...
) then
or ...
[output] = [value];
) then
[output] = [value];
else
[output] = PREV[output];
end if;
end property;
Im Gegensatz zur Condition Table muss bei der Event Table ein Ereignis auftreten,
damit sich der Ausgang ändert. Durch sie wird der Druck auf eine Taste oder
das Überschreiten eines Sensorschwellwertes beschrieben. Der Ausgang stellt
ein Ereignis, wie z.B. das Inkrementieren eines Wertes, dar. Die Selector Table
beschreibt das Ausgangsverhalten in Abhängigkeit vom Zustand. Sie führt zur
folgenden Eigenschaftsstruktur:
property [SELECTOR_NAME] is
assume:
-- true
prove:
at t+1: if (
PREV(active_mode = [current_mode]
or
...
) then
[output] = [value];
end if;
end property;
current mode ist der Zustand, in dem sich der Automat befindet. Dem Ausgang
output wird abhängig vom Zustand immer der Wert value zugewiesen.
Eine in SCR verfasste Spezifikation besteht aus beliebig vielen der oben beschriebenen Tabellen, die in jeder Kombination auftreten können. Wichtig ist
daher die Definition des Zeitbezugs zwischen den Tabellen. Wie in 4.2.2 beschrieben, definieren alle Tabellen eine vorher-nachher Beziehung von Modes
oder Ausgängen. Werden die Tabellen in Eigenschaften übersetzt, so wird
73
formalisierung von anforderungen
der Zeitbezug zwischen ihnen durch die diskrete Zeitgröße t geregelt. Sie
werden parallel an diskreten Zeitpunkten ausgewertet und können gleichzeitig
ihre Werte ändern. Die Änderung des Wertes wird zum nächsten Zeitpunkt
wirksam. Somit kann ein Ausgang einer Tabelle, der gleichzeitig Eingang einer
zweiten Tabelle ist, eine durch die zweite Tabelle definierte Änderung erst
einen Zeitschritt später bewirken. Abb. 21 zeigt eine SCR-Beispielspezifikation,
1
Current
Mode
M1
M2
c=
74
@T
@F
New
Mode
M2
M1
Mode
c
M1
M2
c=1
c=0
property Mode_Table is
assume:
-- true
prove:
property Selector_Table is
at t+1: if (
assume:
PREV(active_mode = Mode1)
-- true
and PREV(c /= 1)
prove:
and c = 1
at t+1: if (
) then
PREV(active_mode = Mode1)
active_mode = Mode2;
) then
elsif (
c = 1;
PREV(active_mode = Mode2)
elsif (
and PREV(c = 1)
PREV(active_mode = Mode2)
and c /= 1
) then
) then
c = 0;
active_mode = Mode1;
end if;
else
end property;
active_mode =
PREV(active_mode);
end if;
end property;
time t=0 t=1 t=2 t=3 t=4
c
1
0
1
0
1
Mode M2 M1 M2 M1 M2
Abbildung 21: SCR-Beispiel
die aus einer Mode Transition Table und einer Selector Table besteht. Weiterhin sind die zur Spezifikation zugehörigen Eigenschaften und ein gültiges
Simulationsbeispiel gegeben. Der Wert von c hängt ausschließlich vom Mode
ab, während die in der Mode Transition Table definierten Übergänge von der
Änderung von c abhängen.
7.2 formalisieren von funktionalität und zeitverhalten
7.2.4
Extraktion aus Aktivitätsdiagrammen
Ein Aktivitätsdiagramm (3.2) stellt den strukturierten Ablauf eines Vorgangs
an Hand von Aktionen und Objekten dar. Hinter jeder Aktion liegt eine
Funktionalität, die das Systemverhalten beschreibt. Um Eigenschaften aus
Aktivitätsdiagammen zu extrahieren, muss im ersten Schritt die Struktur des
Aktivitätsdiagramms in ITL oder LTL nachgebildet werden. In einem zweiten
Schritt muss dann abhängig von der Aktion bzw. den Aktionen, die gerade
ausgeführt werden, eine Funktionalität definiert werden. Die Eigenschaften
für die Funktionalität müssen folglich nur dann halten, wenn sich das System
in der jeweilig zutreffenden Aktion befindet.
Abb. 22 zeigt beispielhaft ein Aktivitätsdiagramm, an dem das Grundlegende
Konzept der Übersetzung in ITL erläutert wird.
Ampel
auswerten
[rot]
[grün]
weiter
laufen
stehen
bleiben
Abbildung 22: Beispielhaftes Aktivitätsdiagrammen
Um das Aktivitätsdiagramm zu starten, wird in ITL, ähnlich wie bei der
Darstellung von Zustandsautomaten, ein Resetsignal verwendet.
property start is
assume:
at t: reset = ’1’;
prove:
at t+1:
activity = Ampel_auswerten;
end property;
75
76
formalisierung von anforderungen
Die weitere Übersetzung beschränkt sich auf die Überführung des Kontrollflusses in ITL. Es wird für jede Aktion eine separate Eigenschaft geschrieben,
die angibt, welche Aktionen auf diese folgen können.
property start is
assume:
at t: reset = ’0’;
at t: activity = Ampel_auswerten;
prove:
at t+1: if (Ampel = grün) then
activity = weiter_laufen;
elsif (Ampel = rot) then
activity = stehen_bleiben;
end if;
end property;
Sind im Aktivitätsdiagramm Gabelungen enthalten, so gibt es mehrere gleichzeitig aktive Aktionen. Um diese in ITL zu übersetzen, muss die gleiche Anzahl
Platzhalter (activity) definiert werden.
Der zeitliche Zusammenhang in Aktivitätsdiagrammen ist durch den Wechsel
von einer in die nächste Aktion gegeben. Die Dauer der einzelnen Aktionen
ist nicht definiert und kann für jede Aktion variieren. Durch die Eigenschaften
wird daher ausschließlich die Struktur des Aktivitätsdiagramms nachgebildet.
Ein Wechsel in eine neue Aktion geschieht von t nach t + 1. Will man die
diskrete Zeitspanne, die eine Aktion für ihre Ausführung benötigt modellieren,
so muss die Möglichkeit geschaffen werden, das Ende der jeweiligen Aktion zu
signalisieren. Dies kann z.B. derart modelliert werden, dass für jede Aktion ein
separates Endesignal eingeführt wird, das gesetzt wird, wenn die Aktion ihre
Ausführung beendet hat und mit der nächsten Aktion fortgefahren werden
kann. Für die Ampel ergäbe sich dann z.B. folgende Eigenschaft:
property start is
assume:
at t: reset = ’0’;
at t: activity = Ampel_auswerten;
prove:
at t+1: if (Ampel = grün and Ampel_auswerten_ende = ’1’) then
activity = weiter_laufen;
elsif (Ampel = rot and Ampel_auswerten_ende = ’1’) then
activity = stehen_bleiben;
else
activity = Ampel_auswerten;
end if;
end property;
7.3 formalisieren von variabilität
7.3
formalisieren von variabilität
Spezifikationen für Systeme, die in mehreren Konfigurationen vorliegen können, beinhalten neben der Information über das Systemverhalten auch Informationen über die Variabilität. Die Behandlung von Variabilität stellt eine
immense Herausforderung dar. Die Menge, der aus einer Produktlinie generierbaren Produkte übersteigt häufig die Millionenmarke. Bei der Überprüfung
der Anforderungen für eine Produktlinie muss sichergestellt werden, dass sie
vollständig und widerspruchsfrei sind. Nach Möglichkeiten sollten auch keine
Anforderungen redundant sein. Die Grundvoraussetzung für eine automatisierte Überprüfung bildet das Hinzufügen von Variabilität zu Eigenschaftssätzen,
das im Folgenden genauer erläutert wird.
7.3.1
Feature-Modelle
Voraussetzung für die Behandlung von Variabilität ist die werkzeuggestützte
Modellierung eines Feature-Modells (5.2) sowie dessen Übersetzung in einen
booleschen Ausdruck. Beides wird durch ein Plugin im Eclipse Framework
erreicht. Es unterstützt die Modellierung beliebiger Feature-Modelle sowie
deren Übersetzung in Konjunktive Normalform (KNF). Die KNF wurde gewählt,
damit der boolesche Ausdruck nicht nur zu Eigenschaftssätzen hinzugefügt
werden kann, sondern auch bei Bedarf direkt durch einen SAT-Solver bearbeitet
werden kann.
7.3.2
Produktlinieneigenschaften
Um die Anforderungen formal überprüfen zu können, müssen die Eigenschaftssätze durch die im Feature-Modell enthaltene Variabilität erweitert
werden. Es entstehen die Produktlinieneigenschaften.
Definition 7.1: Produktlinieneigenschaften - Wird eine Menge
von Eigenschaften durch ein Variabilitätsmodell erweitert, so
entstehen Produktlinieneigenschaften. Diese beschreiben für
jede durch das Variabilitätsmodell gültig auswählbare Konfiguration spezifisches Verhalten.
Der obere Teil von Abb. 23 zeigt das schematische Vorgehen zum Erzeugen
von Produktlinieneigenschaften. Die Voraussetzung für eine Erweiterung stellt
die Übersetzung des Feature-Modells in einen booleschen Ausdruck dar (5.2).
Dieser Ausdruck wird nur dann wahr, wenn eine gültige Konfiguration gewählt
wurde. Er muss gelten, damit die weiteren Eigenschaften über das korrekte
77
78
formalisierung von anforderungen
Anforderungen
Eigenschaften für die Produktlinie erzeugen
Eigenschaften
über die Funktionalität extrahieren
Zu Produktlinieneigenschaften vereinen
Feature-Modell erstellen
Variabilität
Booleschen Ausdruck erstellen
Eigenschaften überprüfen
Prüfung auf
Vollständigkeit
Prüfung auf Widerspruchsfreiheit
Eigenschaftssatz
für die
Produktlinie
Prüfung auf Redundanz
[nicht redundant]
[widerspruchsfrei]
[widersprüchlich]
Widerspruch beheben
[vollständig]
[unvollständig]
Vervollständigen
[redundant]
Redundante Eigenschaften entfernen
Anforderungen
korrigieren
Korrigierter
Eigenschaftssatz für die
Produktlinie
Korrigierte
Anforderungen
Orakel verwenden
Orakel erzeugen
Testmodell/Testfälle
erzeugen
Eigenschaften über
Systemannahmen
formulieren
Systemannahmen
beweisen
Testfälle ausführen
Ergebnisse nutzen
Abbildung 23: Eigenschaften im Produktlinienkontext
7.3 formalisieren von variabilität
Verhalten in Betracht gezogen werden müssen. Eine ungültige Konfiguration
beschreibt kein gültiges Produkt und ist somit nicht durch Eigenschaften
spezifiziert. Es ergibt sich die LTL-Eigenschaft:
G(Feature Model → (eigenschaft1 , eigenschaft2 , . . . , eigenschaftn ))
Dass das Feature-Modell gültig ist, muss zu jeder Eigenschaft im Eigenschaftssatz, der Produktlinien beschreibt, hinzugefügt werden. Weiterhin müssen die
einzelnen Features auf die Eigenschaften abgebildet werden. Eine Eigenschaft
beschreibt im klassischen Sinn nur das gültige Verhalten eines Systems. Durch
eine Abbildung der Features auf die Eigenschaften lässt sich festlegen, welches
Feature oder welche Featurekombination im Produkt enthalten sein muss
bzw. nicht enthalten sein darf, damit die Eigenschaft für diese Konfiguration
relevant ist. Verallgemeinert lassen sich Eigenschaften erweitern, indem der
boolesche Ausdruck über die relevante Feature-Kombination mit der linken
Seite der Implikation konjugiert wird:
G(((feature kombination) ∧ annahme) → X(verpflichtung))
Die in dieser Arbeit betrachteten Implikationen umfassen immer den vorherigen und den aktuellen Zeitpunkt. Alle in 7.2 präsentierten Formen lassen
sich auf diese Form zurückführen. Hängt eine Eigenschaft ausschließlich von
Pflichtknoten im Feature-Modell ab, so erübrigt sich die Abbildung der Pflichtknoten auf die Eigenschaft, da der entstehende boolesche Ausdruck für gültige
Konfigurationen immer wahr ist. Eine Eigenschaft, die das Verhalten der Sitzheizung beschreibt, ist z.B. nur relevant, wenn die Sitzheizung auch Teil des
gewählten Produkts ist.
G((sitzheizungfeature ∧ ¬sitzgurt) → X(¬sitzheizung))
Ein Eigenschaftssatz für die Anforderungen einer Produktlinie besteht also
immer aus den Eigenschaften über die Funktionalität, der Eigenschaft, dass
das Feature-Modell wahr ist sowie der Abbildung der jeweiligen Features
bzw. der Feature-Kombinationen auf die einzelnen Eigenschaften. Eine große
Herausforderung beim Aufstellen von Eigenschaften für Produktlinien stellen
die Definition der einzelnen Features sowie die Abbildung der Features auf
die Elemente in der Domänenebene (5.1) dar. Ein Feature kann eine einzelne
Anforderung oder eine Menge von Anforderungen repräsentieren. Weiterhin
kann ein Feature verwendet werden, um darunter liegende Features zu strukturieren. Repräsentiert ein Feature eine Menge von Anforderungen, so muss
diese Menge abgeschlossen in einem einzelnen Produkt darstellbar sein. Ein
Feature darf nie Anforderungen enthalten, die sich in einem Produkt ausschließen würden. Weiterhin sollten verpflichtende und optionale Anforderungen
nie auf das selbe Feature abgebildet werden.
Die Definition der einzelnen Features kann entweder schon in den Anforderungen vorgegeben sein oder muss manuell geschehen. Jedes Feature wird
79
80
formalisierung von anforderungen
auf eine Menge von Anforderungen oder auf eine einzelne abgebildet. Bei der
Wahl der einzelnen Features muss darauf geachtet werden, dass die ihnen
zugeordneten Anforderungen einen abgeschlossenen Teilbereich des Produkts
repräsentieren.
7.4
formalisierbarkeit von anforderungen
Für die Extraktion von Verhalten aus dem Anforderungsdokument wird neben
LTL die Eigenschaftsbeschreibungssprache ITL verwendet. Die in dieser Arbeit
verwendeten Werkzeuge basieren auf der Interpretation von Eigenschaften
in ITL. Da diese aus dem Bereich der formalen Hardwareverifikation stammt,
muss erörtert werden, in wie fern sich äußeres Verhalten (4.2.1) auf ITL abbilden
lässt. Weiterhin wird das zu Grunde liegende Zeitmodell eingeführt und
genaue Abbildungsvorschriften definiert.
7.4.1
Zeit- und Vollständigkeitsbegriff
Für die Generierung von Orakeln auf Basis von Cando-Objekten (6.1) und die
Prüfung der Eigenschaftssätze auf Vollständigkeit (6.2) werden die Anforderungen als ITL-Eigenschaften formuliert und dann automatisiert bearbeitet.
Das Zeitmodell muss so gewählt werden, dass es eine Verbindung zwischen
der jeweiligen Art (4.2) der Anforderungsformulierung und den in ITL geschriebenen Eigenschaften herstellt. Weiterhin darf das Zeitmodell nicht über
die Beschreibungsmöglichkeiten von ITL hinausgehen.
ist generell ausschließlich dazu in der Lage, synchrones Verhalten zu
definierten Zeitpunkten zu beschreiben. Die Zeitpunkte t stellen nach der
ursprünglichen Intention den Takt eines Hardwarebausteins dar. Diese Betrachtungsweise eignet sich für den in dieser Arbeit präsentierten Ansatz
nicht. Es ist vielmehr nötig, Ereignisse als atomare Aktionen ohne Dauer zu
behandeln, die nacheinander oder auch gleichzeitig auftreten können. Die
Zeit zwischen dem Auftreten der Ereignisse ist nicht spezifiziert. Insofern ist
die Zeitbasis t in der ITL-Beschreibung nicht als fortlaufender Takt zu interpretieren, sondern so, dass das Fortschreiten der Zeit durch das Auftreten
mindestens eines neuen Ereignisses ausgelöst wird. Das Zeitmodell wird im
Folgenden anhand eines Inverters genauer verdeutlicht:
ITL
7.4 formalisierbarkeit von anforderungen
property INVERTER is
assume:
-- true
prove:
at t: if PREV(input = ’0’) then
output = ’1’;
elsif PREV(input = ’1’) then
output = ’0’;
end if;
end property;
Der Zeitpunkt t − 1, der durch PREV referenziert wird, bezieht sich nicht auf
den vorangegangenen Takt, sondern auf ein Ereignis, das zuvor eingetreten
ist. An dieses Ereignis schließt sich das Setzen des Ausgangs an. Die Zeit, die
zwischen den beiden Ereignissen vergeht, ist nicht definiert. Es muss nur sicher
gestellt sein, dass zwischendurch kein weiteres Ereignis eintritt, das output
setzt. Abb. 24 zeigt eine Beispielereignisfolge. In ITL wird im Gegensatz zu CSPs
time t=0 t=1 t=2 t=3
input
output
U
Abbildung 24: Inverter
das parallele Auftreten von input und output erlaubt. output von t hängt
hier von input bei t − 1 ab, während input von t output von t + 1 bedingt.
Hierdurch wird eine kompakte Darstellung möglich, die sich graphisch an der
von Signalen einer Hardwareschaltung orientiert (3.3.6).
Welchen Einfluss eine Spezifikationslücke auf das Ausgangsverhalten hat, wird
im Folgenden beschrieben. Eine Spezifikationslücke liegt dann vor, wenn ein
Ausgang für eine bestimmte Kombination von Eingangswerten nicht definiert
ist und die Eigenschaften somit unvollständig sind. Die Eigenschaften werden
dafür folgendermaßen verändert:
property INC_INVERTER is
assume:
-- true
prove:
at t: if PREV(input = ’0’) then
output = ’1’;
end if;
end property;
81
82
formalisierung von anforderungen
Für den Fall, dass input 1 wird, ist output undefiniert. Abb. 25 zeigt die ITL
Ereignisfolge. ITL erwartet im Gegensatz zu CSPs in jedem Zeitschritt auch
time t=0 t=1 t=2 t=3
input
output
U
?
Abbildung 25: Unvollständiger Inverter
einen Wert für den Ausgang. Dieser ist im vorliegenden Fall undefiniert, wenn
PREV(input = 0 1 0 ). output behält seinen vorherigen Wert dann also nicht. ITL
besitzt folglich keine Halteeigenschaft.
7.4.2
Eigenschaften für Orakel
Im Folgenden werden die möglichen Konzepte und deren Einschränkungen
für die Generierung von Orakeln aus ITL aufgezeigt. Abb. 26 zeigt die Struktur
Modul
Eingang 1
Prozess 1
Parallele
Ausführung
Eingang 2
Prozess 3
Ausgang 1
Prozess 2
Implikation 1
Implikation 2
...
Implikation n
Kanäle
Abbildung 26: Durch ITL beschriebene Struktur
eines durch ITL beschriebenen Moduls. Der Modulbegriff ist äquivalent zu
dem, der im Bereich der Cando-Objekte definiert wurde (6.1). Das Modul
besteht aus drei parallelen Prozessen, deren Verhalten durch Implikationen,
die Berechnungen enthalten können, beschrieben wird und die über Kanäle
miteinander und mit der Umgebung des Moduls kommunizieren.
Prozess: Ein Prozess abstrahiert die Interaktionen von Modulen und ihrer
Umgebung auf mathematische Art und Weise. Es handelt sich also im Wesentlichen um Eigenschaften, denen ein Modul genügen muss, um korrekt zu
7.4 formalisierbarkeit von anforderungen
funktionieren. Ein Prozess beschreibt Reaktionen des Moduls auf Ereignisse,
die während seiner Ausführung auftreten. Ereignisse werden dabei durch eine
Veränderung der Umgebung des Moduls ausgelöst. Ein solches Ereignis kann
z.B. durch das Erreichen eines Sensorschwellwerts oder das Drücken eines
Tasters auftreten. Weitere Prozesse innerhalb des Moduls können ebenfalls zu
Ereignissen führen. Solche Ereignisse können z.B. durch das Ablaufen eines
internen Zählers oder durch das Erreichen eines Fehlerzustands auftreten. Eigenschaften, die in ITL verfasst sind, beschreiben die Interaktion von Modulen
und ihrer Umgebung auf definierte Art und Weise mit dem Ziel, Eigenschaften
für ein korrekt arbeitendes Modul zu formulieren. Jede Eigenschaft stellt also
einen Prozess dar, dessen Verhalten durch die in ihr enthaltenen Implikationen
definiert wird.
Implikation: Eine Implikation beschreibt eine „wenn..., dann...“ Beziehung
zwischen zwei Ereignissen. a → b sagt also aus, dass, wenn das Ereignis a gilt, auch b auftreten muss. Ein Prozess besteht aus Implikationen.
Dabei existiert eine Vielzahl äquivalenter Darstellungsformen (z.B. in CSP
(a → A) k (a → B) = a → (A k B)). In ITL sind mehrere, unterschiedliche
Darstellungen möglich, die alle die selbe Implikation beschreiben (Abb. 27).
Eine ITL-Beschreibung ist also nicht kanonisch.
property IMPLICATION is
property IMPLICATION is
assume:
-- true
prove:
at t: a = 0;
at t+1:
prove:
at t+1: b = 0;
end property;
assume:
if (PREV(a = 0)) then
b = 0;
end if;
end property;
Abbildung 27: Äquivalentes ITL
Berechnung: Die Modellierung eines Moduls erfordert, neben der Modellierung von Zeit, auch die Modellierung von Berechnungen, die durch Prozesse
im Modul durchgeführt werden sollen. In Kapitel 9 werden Orakel als simulierbare VHDL-Beschreibung generiert. Daraus ergeben sich einige Einschränkungen für die Berechnungen, die verwendet werden dürfen. Im Folgenden
wird ein Modul betrachtet, das den Wert an seinem Eingang verdoppelt und
ausgibt [Hoa04].
83
84
formalisierung von anforderungen
property DOUBLE is
assume:
-- true
prove:
at t: right = PREV(left) + PREV(left);
end property;
Abb. 28 zeigt eine nach dieser Eigenschaft gültige Ereignisfolge.
time t=0 t=1 t=2 t=3
left
3
1
4
3
right
U
6
2
8
Abbildung 28: Verdoppeln
Die Darstellung unterliegen wieder dem in 7.4.1 beschriebenen Zeitmodell.
Die Berechnung hängt von einem variablen Eingang ab, der ganzzahlige Werte
verdoppelt.
Kommunikation: Die Kommunikation von Prozessen bzw. Eigenschaften
muss modelliert werden können. Kommunikation ist immer ein gerichteter
Ablauf mit einem Sender und einer beliebigen Anzahl von Empfängern. In CSP
z.B. wird Kommunikation durch Kanäle zwischen Prozessen oder zwischen
einem Prozess und seiner Umgebung modelliert. Auf diesen Kanälen können
Nachrichten gesendet bzw. empfangen werden. Signale in ITL haben generell
keine Richtung. Aus der Eigenschaft für das Verdoppeln von Eingangswerten
geht nicht klar hervor, ob es sich bei left bzw. right um Ein- oder Ausgänge
handelt. Es ist auch nicht möglich, diese Information in ITL zu spezifizieren.
Da ITL aus der Hardwareverifikation stammt, wird diese Information in der
Praxis durch die Komponente, auf der die Eigenschaften bewiesen werden
sollen, festgelegt. In ihr wird beschrieben, welche Signale Eingänge und welche Ausgänge sind. Im Bereich von Cando-Objekten wird zu diesem Zweck
zusätzlich zu den Eigenschaften in ITL eine VHDL-Entity hinterlegt, in der
Ein- und Ausgänge sowie deren Typen definiert sind. Man kann mit ITL also
augenscheinlich Eigenschaften verfassen, die von einem Ausgangswert auf
einen Eingangswert zu einem früheren Zeitpunkt schließen. Solche Eigenschaften sind allerdings nicht beweisbar, wenn der Eingang, auf den geschlossen
wird, durch die Umgebung und nicht durch eine verbundene und bekannte
Komponente festgelegt wird.
Parallelismus: Parallelismus beschreibt die gleichzeitige Ausführung mehrerer Prozesse. Diese können miteinander interagieren. Das Auftreten eines
Ereignisses kann Aktionen mehrerer Prozesse bedingen. Zwei Prozesse sind
unabhängig voneinander, wenn gilt: αP1 ∪ αP2 = {}. Das jeweilige Alphabet
7.4 formalisierbarkeit von anforderungen
des einen Prozesses darf also keine Elemente des anderen enthalten. In einem
Modul sind Prozesse aber in der Regel teilweise oder vollständig voneinander
abhängig. Sind Kanäle definiert, so können Prozesse nicht nur durch ein gemeinsames Alphabet in Bezug auf die Umgebung, sondern auch in Bezug auf
gemeinsam genutzte Kanäle voneinander abhängig sein. Parallelismus wird
dann zur Herausforderung, wenn mehrere Prozesse auf dieselben Ressourcen
zugreifen. Dann kann es z.B. zum Deadlock kommen, der auftritt, wenn sich
mehrere Prozesse gegenseitig blockieren. Deadlock-Situationen sollten schon
während der Entwicklung eines Moduls erkannt und behoben werden. Eine
spezielle Form des Deadlocks bildet der Livelock, in dem das Modul nicht in
einem Zustand verharrt, sondern noch Zustandswechsel durchführt, die aber
nicht zum gewünschten Ergebnis führen. Das Modul befindet dann in einem
abgeschlossenen Zustandsraum, den es nicht mehr verlassen kann. Durch
widerspruchsfreie ITL-Eigenschaften besteht alleine die Möglichkeit durch
den Beweis der ITL-Eigenschaften Deadlock-Situationen in einem bestehenden
Modul zu erkennen. Ein Deadlock wird dadurch nicht erzeugt.
Parallelismus erschwert in ITL vor allem die Modellierung des korrekten Zeitbezugs. Analog zu Hardwarebeschreibungssprachen muss die Formulierung
von Zyklen verhindert werden.
Determinismus: Ein Modul verhält sich deterministisch, wenn die Auswahl,
welches Ereignis eintrifft, einzig durch die Umgebung kontrolliert wird. Im
Umkehrschluss ist ein Modul also nicht-deterministisch, wenn das Ergebnis
nicht durch die Umgebung festgesetzt wird und das Zustandekommen des
jeweiligen Ergebnisses durch die Umgebung nicht nachvollziehbar ist. Dabei
kann das durch die Umgebung kontrollierte Modul intern ein vollkommen
deterministisches Verhalten zeigen, das von außen allerdings nur interpretierbar ist. Die nicht-deterministische Beschreibung von Verhalten ist ein probates
Mittel, um dem Entwickler Freiheitsgrade in der Gestaltung zu eröffnen. So
kann ein Getränkeautomat bei zu viel bezahltem Geld Rückgeld geben. Die
Höhe des zurückzuerstattenden Betrags ist festgelegt. Die Stückelung des
Rückgelds bleibt allerdings dem Getränkeautomaten überlassen. In ITL kann
ohne das Hinzufügen von Random-Inputs einzig beschrieben werden, dass die
korrekte Menge an Rückgeld gegeben werden muss.
property ONEBACK is
assume:
-- true
prove:
at t+1: accumulated_output = 1;
end property;
Die ursprüngliche Intention von ITL ist es, Eigenschaften zu beschreiben, die
auf Modulen oder Systemen bewiesen werden können. Das innere Verhalten
85
86
formalisierung von anforderungen
eines Moduls ist dabei immer deterministisch. Will man die Stückelung steuern,
so muss ein weiterer Eingang back hinzugefügt werden.
property ONEBACK is
assume:
-- true
prove:
at t+1:
if (PREV(back = ’0’)) then
output = one_euro;
elsif (PREV(back = ’1’)) then
output = fifty_cent and
NEXT(output = fifty_cent);
end if;
end property;
In ITL kann das Steuern durch die Umgebung mit Hilfe einer if-Anweisung
modelliert werden. Handelt es sich bei back um einen Eingang, den der
Benutzer des Automaten steuern kann, so ist das Verhalten des Automaten
deterministisch. Stellt back einen Random-Input dar, so ist das Verhalten nicht
deterministisch, da es von einem Zufallswert abhängt.
8
S P E Z I F I K AT I O N S P R Ü F U N G U N D
ORAKELGENERIERUNG
Ziel dieser Arbeit ist es, Eigenschaftssätze, die aus Anforderungen abgeleitet
wurden, zu überprüfen und daraus ein ausführbares Modell zu generieren.
Diese Anforderungen müssen nicht dem klassischen Feld der Hardwareentwicklung zuzuordnen sein, sondern können z.B. auch Verhaltensbeschreibungen für eingebettete Systeme sein oder das äußere Verhalten (4.2.1) eines
Systems beschreiben. Weiterhin sollen neben Anforderungen für einzelne Produkte auch Anforderungen für Produktlinien (Kapitel 5) verwendbar sein,
die sich durch Variabilität auszeichnen. Im Folgenden werden die im Rahmen dieser Arbeit erstellten Konzepte für die Anforderungsanalyse und die
Orakelgenerierung präsentiert.
8.1
problembeschreibung
Die Überprüfung von Anforderungen, die das äußere Verhalten eines Systems
beschreiben, sollte formal unterstützt werden. Lücken und Widersprüche in
den Anforderungen können gerade bei sicherheitsrelevanten Systemen zu
schweren Unglücken führen. Eine formale Überprüfung der Anforderungen
anhand der in Kapitel 6 präsentierten Algorithmen ist daher von großem
Wert.
Das Problem der Anforderungsanalyse wird weiter erschwert, wenn die Anforderungen eine Produktlinie beschreiben. Die Produktlinienentwicklung
beginnt mit der Entwicklung auf Domänenebene (5.1). Auf dieser Ebene sind
bereits ein Großteil bzw. ein kompletter Satz von der Anforderungen für die
Konfigurationen auf Anwendungsebene spezifiziert. Sollte in den Anforderungen auf Domänenebene bereits ein Widerspruch, eine Unvollständigkeit oder
Redundanz (8.3.1) vorhanden sein, so werden sich diese Fehler auf die Anwendungsebene fortpflanzen. Durch die Verwendung von Features müssen in den
Anforderungen enthaltene Fehler nicht zwangsläufig in jeder Konfiguration
vorkommen. Ein Fehler kann z.B. nur bei einer bestimmten Feature-Auswahl
oder Feature-Kombination im Produkt enthalten sein. Würden ausschließlich
die Anforderungen auf Anwendungsebene überprüft, so könnte ein Fehler auf
Domänenebene unerkannt bleiben.
Eine Überprüfung aller Konfigurationen auf Anwendungsebene ist wegen
der meist großen Anzahl der möglichen Konfigurationen nicht praktikabel
87
88
spezifikationsprüfung und orakelgenerierung
und eignet sich daher nur für die Überprüfung von Anforderungen außerhalb
des Produktlinienkontexts. Es muss ein Weg gefunden werden, mit dem
die Anforderungen bereits auf Domänenebene überprüft werden können.
Hierbei besteht das Problem unter anderem darin, dass Anforderungen auf
Domänenebene überspezifiziert sind. Erst durch die Verbindung mit einem
Variabilitätsmodell, wie dem Feature-Modell (5.2), entsteht ein konsistentes
Anforderungsdokument. Ein formaler Ansatz, der die Anforderungen bereits
auf Domänenebene überprüft, muss daher eine Verbindung zwischen dem
Variabilitätsmodell und den Anforderungen herstellen.
Durch die Verwendung eines formalen Ansatzes liegen die Anforderungen
in formaler Form vor. Diese bilden gleichsam ein Modell des System- oder
Modulverhaltens, das als Grundlage für den Test dienen kann. Wird das Modell
in eine ausführbare Form übersetzt, so kann es als Orakel (2.3.2) Verwendung
finden. Anforderungen in formaler Form können weiterhin als Grundlage
für den Beweis von Systemannahmen dienen. Hierdurch wird durch das
Ausschließen unsicherer Situationen gewährleistet, dass sich das System bzw.
Modul nur in sicheren Zuständen befindet.
Durch das im Folgenden präsentierte Konzept sollen Lösungshilfen für die
folgenden Schritte aus Abb. 13 in der Produktlinienentwicklung angeboten
werden:
• Formale Überprüfung der Anforderungsdokumente auf Domänenebene
• Plausibilitätsüberprüfung der Anforderungen auf Domänenebene durch
Systemannahmen
• Automatisierte Generierung eines simulierbaren Orakels für die Überprüfung des Designs auf Domänenebene
• Strukturierte Darstellung der Testfälle auf Domänenebene
Außerdem soll die Entwicklung einzelner Produkte in folgenden Punkten
unterstützt werden:
• Formale Überprüfung der Anforderungsdokumente auf Anwendungsebene
• Plausibilitätsüberprüfung der Anforderungen auf Anwendungsebene
durch Systemannahmen
• Automatisierte Generierung eines simulierbaren Orakels für die Überprüfung des Designs auf Anwendungsebene
Die eingesetzten Techniken für einzelne Produkte bzw. für Produktlinien unterscheiden sich ausschließlich im Vorhandensein eines Variabilitätsmodells. Die
zur Überprüfung der Anforderungen und zur Orakelgenerierung eingesetzten
Algorithmen sind die selben.
8.2 gesamtkonzept
8.2
gesamtkonzept
Abb. 29 zeigt das Konzept, das in dieser Arbeit zur Anforderungsanalyse
und Orakelgenerierung für einzelne Produkte sowie im Zusammenhang mit
Produktlinien vorgeschlagen wird. Es gliedert sich in drei Bereiche, die mitAnforderungen
Spezifikation
Text
Tabellen
UML-Modelle
Variabilität
formalisieren
Verhalten
formalisieren
100%-Modell
Modellierung
150%-Modell
generieren
durchführen
Analyse des
Modells
Eigenschaften
Feedback
Feature-Modell
beweisen auf
Cando-Objekt
(Orakel)
Evaluierung
Annahmen über
das System
Anwendungsszenarien
ausführen auf
Testein- und
Ausgaben
Abbildung 29: Gesamtkonzept
einander verbunden sind. Als Grundlage dient eine Spezifikation, die auf
unterschiedliche Art und Weise (4.2) verfasst sein kann. Diese häufig nur
teilweise formalen Anforderungen werden formalisiert, indem formale Eigenschaften über das Verhalten extrahiert werden (7.1) und die Variabilität
und Gemeinsamkeiten der Produktlinie durch ein Feature-Modell dargestellt
werden. Aus den Modelleigenschaften und dem Feature-Modell wird dann
das 150%-Modell gebildet, das Informationen über alle Konfigurationen der
Produktlinie enthält (7.3). Handelt es sich bei den zu Grunde liegenden Anforderungen nicht um eine Produktlinie, sondern um ein einzelnes Produkt, so
entfällt die Formalisierung der Variabilität und es muss einzig das Verhalten
formalisiert werden und das 100%-Modell entsteht. Das 100%-Modell bzw.
89
90
spezifikationsprüfung und orakelgenerierung
das 150%-Modell wird dann auf Vollständigkeit überprüft und es werden
möglicherweise enthaltene Widersprüche entfernt. Zuletzt wird ein CandoObjekt aus den Eigenschaften des jeweiligen Modells generiert, das als Orakel
dient. Aus der Ausführung von Anwendungsszenarien auf dem Orakel können
Testein- und ausgaben für einen abschließenden Systemtest gewonnen werden.
Des Weiteren können auf dem Orakel Annahmen über das System bewiesen
werden.
Von den unteren Bereichen gibt es ein Feedback in die höheren Bereiche.
Werden Widersprüche, Unvollständigkeit oder Fehler gefunden, so müssen
diese in er Spezifikation korrigiert werden. In folgenden Fällen gibt es ein
Feedback von der Evaluierung in die Spezifikation und Modellierung:
• Eine Systemannahme schlägt fehl, da
– die Systemannahme Fehler enthält.
– die Anforderungen über das Systemverhalten fehlerhaft sind.
– Fehler beim Formalisieren des Verhaltens gemacht wurden.
– Fehler beim Formalisieren der Variabilität gemacht wurden.
• Die Vollständigkeitsbewertung findet eine Lücke, da
– die Anforderungen eine ungewollte Spezifikationslücke enthalten.
– Freiheitsgrade bei der Vollständigkeitsbewertung nicht beachtet
wurden.
• Die Vollständigkeitsbewertung findet einen Widerspruch, da die Anforderungen widersprüchlich sind.
• Die Vollständigkeitsbewertung findet Redundanz, da redundante Information in den Anforderungen formuliert wurden.
In folgenden Fällen gibt es ein Feedback von der Modellierung in die Spezifikation:
• Werden beim Formalisieren des Verhaltens Fehler entdeckt, müssen sie
in den Anforderungen behoben werden.
• Werden beim Formalisieren der Variabilität Fehler entdeckt, müssen sie
in den Anforderungen behoben werden.
Da das Formalisieren von Variabilität und Verhalten manuell geschieht, werden
die Anforderungen in diesem Schritt nicht nur manuell auf ihre Konsistenz
geprüft, sondern auch auf ihre Sinnhaftigkeit. Diese Überprüfung kann nicht
automatisiert werden.
8.3 analyse von eigenschaftssätzen
8.3
analyse von eigenschaftssätzen
Die Eigenschaftssätze, die aus der Spezifikation extrahiert wurden, müssen
nach Abb. 23 überprüft werden. Im Folgenden werden die möglichen in den
Eigenschaftssätzen enthaltenen Fehler erläutert sowie ein Konzept präsentiert,
mit dem diese erkannt werden können.
8.3.1
Fehler in Eigenschaftssätzen
Die dem generierten Eigenschaftssatz zu Grunde liegende Spezifikation kann
Fehler enthalten. Die selben Fehler werden sich bei korrekter Extraktion aus
dem Anforderungsdokument auch in dem Eigenschaftssatz für die Produktlinie wiederfinden. Ein Fehler kann eine Entwicklung entweder unmöglich
machen, mit ungewollten Freiheitsgraden versehen oder erschweren. Das
Anforderungsdokument kann dann nicht mehr als Konform mit IEEE 830
angesehen werden. Die in dieser Arbeit untersuchten Fehler sind in Abb. 30
dargestellt und werden im Folgenden genauer erklärt [MO11].
Widersprüche: Widersprüche in einem Anforderungsdokument führen da(a) Widersprüchlichkeit
v
¬v
E1
E3
Annahme
Verpflichtung
E2
(b) Unvollständigkeit
?
(c) Redundanz
Annahme
Verpflichtung
Abbildung 30: Fehler in Eigenschaftssätzen
zu, dass das beschriebene Systemverhalten nicht implementierbar ist. Ein
Widerspruch besteht genau dann, wenn eine Implikation zwei mögliche widersprüchliche Nachfolgeereignisse definiert. Da in dem im Rahmen dieser Arbeit
verwendeten Algorithmus zur Überprüfung von Anforderungen ausschließlich
auf Bitebene gearbeitet wird, besteht ein Widerspruch genau dann, wenn eine
Situation existiert, die einen Ausgang sowohl auf ’0’ als auch auf ’1’ setzt.
Abb. 30 (a) zeigt einen Pfad durch einen Automaten, der in einem Widerspruch
endet.
91
92
spezifikationsprüfung und orakelgenerierung
Unvollständigkeit: Anforderungen sind unvollständig, wenn ein oder mehrere Fälle existieren, in denen das Systemverhalten für bestimmte Pfade nicht
definiert ist. Also genau dann, wenn der Ausgang in einer oder in mehreren
Situationen nicht determiniert ist. Das führt zu Freiheitsgraden in der Implementierung, die durch den Verfasser der Anforderungen unerwünscht sein
können. Abb. 30 (b) zeigt einen unvollständigen Pfad durch einen Automaten.
Redundanz: Einzelne Anforderungen sind Redundant, wenn ihr Inhalt durch
eine oder mehrere andere Anforderungen im Anforderungsdokument abgedeckt ist. Sie führen dazu, dass der Eigenschaftssatz Eigenschaften enthält,
deren Verhalten durch eine oder mehrere weitere Eigenschaften überdeckt
wird. Abb. 30 (c) zeigt die durch drei Eigenschaften abgedeckte Funktionalität
eines Systems. Die Funktionalität von E3 ist vollständig in E1 und E2 enthalten.
E3 ist also redundant und kann weggelassen werden.
Die beschriebenen Fehler sind bedingt durch die Komplexität nicht intuitiv im
Anforderungsdokument identifizierbar und korrigierbar. Formale Methoden,
die bei ihrer Erkennung helfen, bieten sich daher an.
8.3.2
Konzept
Abb. 23 zeigt die Vorgehensweise zum Überprüfen von Eigenschaften. Als
Grundlage dienen formale Eigenschaften für die Produktlinie. Für deren Erzeugung wird die Variabilität in den ursprünglichen Anforderungen identifiziert
und als Feature-Modell bzw. als dessen logischer Ausdruck (5.2) modelliert.
Weiterhin werden die Eigenschaften, die die Funktionalität der einzelnen
Features beschreiben, extrahiert. Sodann kann der Eigenschaftssatz über die
gesamte Produktlinie gebildet werden (7.1). Nachdem der Eigenschaftssatz für
die Produktlinie erzeugt wurde, kann dieser formal überprüft werden. Dazu
dient der in 6.2 präsentierte Algorithmus. Der Eigenschaftssatz wird nur mit
Bezug auf sich selbst geprüft. Es existiert kein weiteres Modell, das korrektes
oder vollständiges Verhalten definiert.
Zu Beginn werden die Widersprüche im Eigenschaftssatz erkannt und entfernt.
Daraus resultiert ein implementierbares System. Im Beispiel aus 6.2.1 ist der
Widerspruch nur von zwei Eingängen abhängig und wird innerhalb eines
Zeitschritts sichtbar. Situationen, die zu Widersprüchen führen, können sich in
komplexeren Anwendungen über mehrere Zeitschritte erstrecken und mehrere
Eingänge involvieren. Des Weiteren werden ausschließlich Widersprüche von
Eingängen aufgezeigt, die einzelne Bits repräsentieren. Sind diese Teil eines
Bitvektors, der eine Zahl repräsentiert, wird das Auflösen von Widersprüchen
weiter erschwert, da nicht alle enthaltenen Bits zu Widersprüchen führen
müssen oder nur Bestimmte Werte des Bitvektors einen Widerspruch auslösen.
Das Auflösen solcher Widersprüche gestaltet sich als schwierig und führt
8.3 analyse von eigenschaftssätzen
häufig zu neuen Widersprüchen. Daher ist die Erkennung und Behebung
von Widersprüchen in einer Spezifikation ein iterativer Prozess, der so lange
ausgeführt wird, bis eine neue, vollständige Überprüfung keine weiteren
Widersprüche findet. Meist können mehrere Widersprüche in einer Iteration
behoben werden.
Im zweiten Schritt werden Lücken im Eigenschaftssatz erkannt und analysiert.
Handelt es sich beim unvollständig beschriebenen Verhalten um einen ungewollten Freiheitsgrad, so werden die Eigenschaften angepasst. Ansonsten wird
der Freiheitsgrad zur Vollständigkeitsbewertung hinzugefügt. Das Finden und
Bewerten von Lücken gestaltet sich aus den selben Gründen, die auch bereits
im Bereich der Analyse auf Widersprüche galten, als schwierig. Je nach Grad
der Vollständigkeit der ursprünglichen Spezifikation, ist die Behebung von
Lücken mit großem Aufwand verbunden.
Enthält der Eigenschaftssatz keine ungewollten Freiheitsgrade mehr, so wird
er auf Redundanz geprüft. Redundante Eigenschaften werden entfernt. Das
vorgeschlagene Schema findet ausschließlich vollständig redundante Eigenschaften in der Spezifikation. Eigenschaften, die nur zum Teil von einer anderen
überlagert werden, können nicht entdeckt werden. Hierfür müsste der überlagerte Teil genau identifiziert und dargestellt werden. Die Eigenschaften und
damit die Spezifikation müssten so verändert werden, das die entsprechende Funktionalität nicht redundant in ihnen beschrieben wird. Nachdem die
redundanten Eigenschaften entfernt wurden, werden die im Eigenschaftssatz
gefundenen und behobenen Fehler in den ursprünglichen Anforderungen
korrigiert. So entsteht eine vollständige und konsistente Spezifikation, die frei
von Redundanz ist.
Die präsentierte Vorgehensweise hat mehrere Vorteile:
• Es ist kein weiteres Modell zur Beschreibung von vollständigem und
widerspruchsfreiem Verhalten nötig.
• Die Ereignisfolgen, die Lücken oder Widersprüche erzeugen, werden
ausgegeben und können bewertet werden.
• Der formale Eigenschaftssatz kann weiterverwendet werden.
Der Hauptnachteil des Ansatzes liegt im initialen Aufwand für die Modellierung der Anforderungen durch ITL. Weiterhin muss für Anforderungen,
die Produktlinien beschreiben, das Feature-Modell aufgestellt werden und
die einzelnen Features auf die Anforderungen bzw. die daraus abgeleiteten
Eigenschaften abgebildet werden.
93
94
spezifikationsprüfung und orakelgenerierung
8.4
orakelgenerierung
Ein Orakel (2.3.2) ist das ausführbare Modell eines Systems, das aus den
Anforderungen für ein Produkt abgeleitet ist. Seine Generierung ermöglicht
es, Voraussagen über das Systemverhalten treffen zu können. Es wird mit den
selben Eingangswerten wie das System stimuliert und liefert Ausgaben, die das
korrekte Systemverhalten widerspiegeln. So kann ein Testingenieur intuitiv die
Korrektheit des Sytem-Under-Test (SUT) beurteilen. Der aufwendige Abgleich
des Systemverhaltens mit der Spezifikation entfällt und Abweichungen vom
spezifizierten Verhalten können einfach erkannt werden.
8.4.1
Konzept
Die Orakelgenerierung aus formalen Eigenschaften wird durch den in 6.1 präsentierten Ansatz ermöglicht [MO10]. Der Schritt der Orakelgenerierung folgt,
wie in Abb. 23 dargestellt, der Behebung von Fehlern in Eigenschaftssätzen,
nach der ein widerspruchsfreies und vollständiges Anforderungsdokument
entsteht, das frei von redundanter Beschreibung ist. Dieses bzw. die aus ihm
abgeleiteten Produktlinieneigenschaften dienen als Vorlage zur Generierung
eines Orakels auf Basis eines Cando-Objekts. Das Orakel kann auf mehrere Arten verwendet werden. Es können Testfälle, die auf dem entwickelten
System ausgeführt werden sollen, im Vorfeld auf dem Orakel simuliert werden. Ein korrekt implementiertes System muss sich wie das Orakel verhalten.
Somit muss das Ausgangsverhalten des Orakels und des implementierten
Systems äquivalent sein. Dieser Äquivalenzvergleich kann entweder manuell oder automatisiert durchgeführt werden. Weiterhin können, da es sich
beim erzeugten Orakel um eine VHDL-Beschreibung handelt, Metriken (2.2.4)
bei der Simulation des Orakels Anwendung finden, um eine Abschätzung
über die Testabdeckung zu erhalten. Des Weiteren können Systemannahmen,
wie in 8.5.1 beschrieben, auf dem Orakel bewiesen werden. Die Ergebnisse
der Beweise und des Äquivalenzvergleichs können zum Systemtest oder zur
Verbesserung des Anforderungsdokuments verwendet werden.
Abb. 31 zeigt, wie sich die Orakelgenerierung in den Produktlinienkontext
einfügt. Es wird aus den Anforderungen auf Domänenebene erzeugt und
dient dann als Orakel für alle Produkte auf Anwendungsebene. Die übersetzten Anforderungen haben in ITL die in Abb. 32 gezeigte Struktur. Der
Eigenschaftssatz in ITL besteht aus drei Hauptkomponenten. Die Eigenschaft
FEATURE MODEL gibt an, dass der boolesche Ausdruck für das FeatureModells immer wahr sein muss. Es werden also nur Produkte beschrieben, die
als gültige Konfiguration aus den Anforderungen ableitbar sind. Durch die
Eigenschaft INPUTS RANGE wird der gültige Eingabebereich festgelegt. Der
8.4 orakelgenerierung
Anwendungsebene
PL-Entwicklung
Domänenebene
Produkt 1
Anforderungen
erzeugen
Feature-Modell
Produkt n
extrahieren
anwenden
vergleichen
PL-Validierung
beweisen
Testmodelle
ableiten
Testfälle
generieren
Testorakel/CandoObjekt
extrahieren
Formale Systemannahmen
Abbildung 31: Orakel im Produktlinienkontext [MO10]
property FEATURE_MODEL is
assume:
-- true
property INPUTS_RANGE is
prove:
at t+1: if(
assume:
fm = 1) then
validfm = ’1’;
else
validfm = ’0’;
end if;
end property;
-- true
prove:
at t+1: if PREV(
[input1_out_of_range] or
[input2_out_of_range] or
...
[inputn_out_of_range]
property BEHAVIOR_N is
) then
invalid_inputs = ’1’;
assume:
at t:
else
[relevant_combination] = 1
[specified assumptions]
prove:
invalid_inputs = ’0’;
end if;
end property;
at t:
[specified behavior]
end property;
Abbildung 32: Struktur der Eigenschaften in ITL
95
96
spezifikationsprüfung und orakelgenerierung
Ausgang invalid inputs wird immer dann gesetzt, wenn ein Eingabewert angelegt wird, der sich nicht im spezifizierten Bereich bewegt. Diese Eigenschaft ist
nötig, da sich ein Cando-Objekt für nicht spezifizierte Eingabewerte völlig zufällig verhalten darf. Ein nicht definierter Eingabewert muss also erkannt und
angezeigt werden. Die Eigenschaft BEHAVIOR N steht beispielhaft für eine Eigenschaft, die das Verhalten des Systems beschreibt. In ihr wird die Annahme
durch die Feature-Kombination erweitert, die ausgewählt sein muss, damit die
Eigenschaft für das ausgewählte Produkt gilt. Die einzelnen Features werden
so auf die jeweiligen Eigenschaften abgebildet. Weiterhin muss das eigentliche
Verhalten in der Eigenschaft definiert werden. Das geschieht durch das Hinzufügen geeigneter Annahme- und Verpflichtungsteile. Ein Eigenschaftssatz
enthält im Normalfall mehrere verhaltensbeschreibende Eigenschaften. Die
Vorteile der Orakelgenerierung lassen sich wie folgt zusammenfassen:
• Es entsteht ein ausführbares Systemmodell.
• Die generierte Hardwarebeschreibung kann mit gängigen Werkzeugen
simuliert werden.
• Die Generierung erfolgt vollkommen automatisiert aus dem Eigenschaftssatz.
8.4.2
Struktur des generierten Orakels
Die auf einem Orakel ausgeführten Testfälle können mit den Ausgaben der
jeweiligen Produkte verglichen werden. Folglich hat ein Cando-Objekt als
Orakel die Aufgabe der Vorhersage von Testergebnissen. Da es sich bei einem
Cando-Objekt um eine simulierbare VHDL-Beschreibung handelt, können Testfälle auf Orakeln aus Cando-Objekten simuliert werden. Für die Ableitung
der Testfälle kann für einzelne Produkte ein Klassifikationsbaum (2.3.3) oder
für Produktlinien ein Feature-Model for Testing (FMT) (8.6) verwendet werden.
Abb. 33 zeigt die Ein- und Ausgänge des generierten Cando-Objekts. Intern
Testsequenz
Zeit++
Produktauswahl
Cando-Objekt als Universalorakel
Eingangswertebereich gültig?
Ausgangssequenz
Produktauswahl gültig?
Abbildung 33: Struktur des generierten Orakels [MO10]
8.5 beweis von systemannahmen
besteht es, wie in Abb. 26 gezeigt, aus nebenläufigen Prozessen und Kanälen,
die durch ITL-Eigenschaften definiert wurden. Soll ein Testfall ausgeführt werden, so muss zuerst die Produktkonfiguration gewählt werden, die getestet
werden soll. Das geschieht über Eingänge, die die auswählbaren Features im
Feature-Modell betreffen. Die getroffene Auswahl stellt während der Simulation eine Invariante dar. Sie wird also zu Beginn festgelegt und dann nicht
mehr verändert. Die einzige Ausnahme bilden Features, die erst während der
Laufzeit gebunden werden (8.6). Diese können sich während der Ausführung
ändern.
Systeme werden im Rahmen dieses Ansatzes generell als ereignisbasiert angesehen. Die Ereignisdefinition richtet sich dabei nach der Definition von Hoare
in CSPs (3.1). Im Unterschied zu Hoare dürfen allerdings in einem Zeitschritt
mehrere Ereignisse auftreten. Eine Ereignisfolge ist folglich nicht durch eine
Folge von Ereignissen an den Ein- oder Ausgängen zu diskreten Zeitpunkten bestimmt. Vielmehr existiert für jeden Ein- und Ausgang eine separate
Ereignisfolge. In jedem Zeitschritt kann jeder Ein- und Ausgang einen neuen
Wert annehmen bzw. seinen alten Wert beibehalten. Am Eingang des Orakels
liegen die Werte aus der Testsequenz an, die im nächsten Zeitschritt gelten
müssen. Der Fortlauf der Zeit wird durch Zeit++ analog zum Systemtakt eines Hardwarebausteins erreicht. Hierdurch wird die Diskretisierung der Zeit
erreicht. Am Ausgang des Orakels wird angezeigt, ob das gewählte Produkt
nach dem Feature-Modell gültig ist. Weiterhin wird angegeben, ob sich die
Eingangswerte in einem gültigen Bereich befinden. Der gültige Bereich wird
durch die Anforderungen vorgegeben. Er kann sich z.B. auf die maximale
und minimale Geschwindigkeit eines Fahrzeugs beziehen. Weiterhin wird die
Ausgangssequenz in Abhängigkeit von der Testsequenz und des gewählten
Produkts ausgegeben.
8.5
beweis von systemannahmen
Eine Systemannahme beschreibt eine Eigenschaft, die implizit durch den zu
Grunde liegenden Eigenschaftssatz erfüllt sein muss. Es handelt sich um Sicherheitseigenschaften (3.3.3) oder zeitlich begrenzte Lebendigkeitseigenschaften
(3.3.3). Für den Beweis von Systemannahmen wird ein Modell benötigt, auf
dem der Beweis durchgeführt werden kann sowie die zu beweisenden Systemannahmen in formaler Form. Als Modell dient im Rahmen dieser Arbeit
das erzeugte Orakel oder der Eigenschaftssatz selbst. Auf diesen können die
Systemannahmen bewiesen werden.
97
98
spezifikationsprüfung und orakelgenerierung
8.5.1
Beweis auf Oraklen
Der Beweis von Systemannahmen auf einem Orakel zielt darauf ab, Spezifikationen auf ihre Sicherheit zu überprüfen. Abb. 34 (a) zeigt schematisch
das Vorgehen beim Beweis von Systemannahmen auf einem Orakel. Die Extraktion von Systemannahmen aus Spezifikationen muss manuell geschehen.
Sie können entweder als Annahmen über die Sicherheit in der Spezifikation
explizit enthalten sein oder im Nachhinein durch Projektbeteiligte formuliert
werden. Eine Formalisierung der Systemannahmen in ITL oder LTL bildet die
Voraussetzung für ihren Beweis auf dem generierten Orakel. Der eigentliche
Beweis geschieht durch kommerzielle Werkzeuge wie OneSpin 360™ MV
(9.1.5). Eine Systemannahme, die auf dem Orakel hält ist nach der Definition von Redundanz aus 8.3.1 immer zu den ursprünglichen Eigenschaften
redundant.
extrahieren
Formale Eigenschaften
generieren
Spezifikation
Orakel
extrahieren
Systemannahmen
beweisen
(a) Beweis auf Orakeln
extrahieren
Spezifikation
extrahieren
Formale Eigenschaften
Redundanzbewertung
Systemannahmen
(b) Beweis durch Redundanz
Abbildung 34: Beweis von Systemannahmen
8.5.2
Beweis durch Redundanz
Wird aus Zeit- oder Komplexitätsgründen kein Orakel generiert oder steht kein
Werkzeug für den Beweis der Systemannahmen zur Verfügung, so können
Eigenschaften, die Systemannahmen beschreiben, trotzdem bewiesen werden.
Dafür wird der Eigenschaftssatz zuerst auf Vollständigkeit und Widerspruchsfreiheit überprüft. X beschreibt die Menge der gefundenen Lücken.
K(vUE ) ≡ 0
L(vUE ) ≡ X
Sodann wird der Eigenschaftssatz durch eine oder mehrere Eigenschaften über
Systemannahmen erweitert. Im Anschluss wird der entstehende Eigenschaftssatz auf Vollständigkeit und Widerspruchsfreiheit überprüft. Ändert sich die
Anzahl und Art der Lücken im Vergleich zum Eigenschaftssatz ohne die Systemannahmen nicht und werden weiterhin keine Widersprüche gefunden, so
sind die Systemannahmen redundante Eigenschaften.
8.6 integrierter testansatz
K(vUE∧IS ) ≡ 0
L(vUE∧IS ) ≡ X
Sie sind folglich bereits durch den ursprünglichen Eigenschaftssatz beschrieben
worden und müssen somit auf diesem halten. Das Vorgehen ist schematisch in
Abb. 34 (b) dargestellt.
Relevant wird der Beweis von Systemannahmen vor allem dann, wenn es um
die Sicherheit von Systemen geht. ISO 26262 [Int11] definiert Sicherheit als die
Abwesenheit inakzeptabler Risiken. Es muss gezeigt werden, dass eine als sicher geltende Architektur eines Systems bestimmten Sicherheitsanforderungen
genügt. Grundvoraussetzung dafür ist, dass auch die Anforderungen für das
System den selben Sicherheitsanforderungen genügen. Ein Beispiel für eine
Sicherheitsanforderung ist ein Autositz, der ab einer Geschwindigkeit von 15
km/h nicht mehr elektrisch bewegt werden darf. Die Anforderungen für die
Kontrolleinheit der Autositzsteuerung müssen diese Sicherheitsanforderung
abbilden.
8.6
integrierter testansatz
Für die Modellierung von Testfällen im Kontext von Produktlinien wurde
das FMT [OMS09, SOM10] vorgeschlagen. Ein FMT enthält die erforderlichen
Informationen, um einen Klassifikationsbaum für jedes mögliche Produkt einer
Produktlinie automatisiert zu erstellen. Dabei wird der Feature-Modell-Ansatz
mit dem Klassifikationsbaum (2.3.3) kombiniert. Es wird ausgenutzt, dass
Feature-Modelle Variabilität darstellen können und so optionale Parameter
eines Systems strukturieren und Klassifikationsbäume eine ideale Repräsentation für Äquivalenzklassen im Black-Box-Test bilden. Neu im FMT ist die
optionale Angabe der Binding Time.
Definition 8.1: Binding Time - Der Zeitpunkt im Produktgenerierungsprozess, an dem ein Feature ausgewählt bzw. in das
Produkt integriert wird.
Ein Feature kann während der Planung des Produkts, während des Designs,
beim Kompilieren, beim Installieren, beim Startprozess oder erst während der
Laufzeit gebunden werden.
Darüber hinaus wird die Kardinalität bei Oder- und Alternativgruppen angegeben. Abhängigkeiten zwischen den Features können ebenso definiert
werden wie der Feature-Typ oder zum Feature zugehörige Attribute. Die vom
Klassifikationsbaum bekannte Tabelle zum Aufstellen der Testfälle wird auch
durch das FMT übernommen.
99
spezifikationsprüfung und orakelgenerierung
FMT auf Domänenebene
Wird ein Produkt im FMT ausgewählt, so werden alle Features eliminiert, die
nicht Teil des Produkts sind. Dadurch verschwinden auch die jeweiligen Spalten in der Testtabelle des FMTs. Übrig bleiben die Testfälle für das ausgewählte
Produkt. Durch die Eliminierung von Spalten kann es vorkommen, dass zwei
oder mehr gleiche Testfälle übrig bleiben. Diese müssen eliminiert werden.
Abb. 35 verdeutlicht, wie sich das FMT in die Produktlinienentwicklung ein-
FMT auf Anwendungsebene
100
extrahieren
Anforderungsdokumente
150%-Modell
extrahieren
FMT
enthält
Testfälle
instantiieren
auswählen
ausführen
FMT-Instanz
des Produkts
generieren
enthält
Testfall-Instanz
100%-Modell
des Produkts
simulieren
Simulationsskripte
ausführen
Programmcode
Abbildung 35: FMT-Ansatz [OMS09, SOM10]
gliedert. Das FMT wird auf Domänenebene zusammen mit dem 150%-Modell
aus den Anforderungen extrahiert und kann das Feature-Modell entweder
ersetzen oder neben ihm existieren. Alle Testfälle sind in der Tabelle des FMTs
enthalten. Auf Anwendungsebene werden Instanzen des FMTs und des 150%Modells gebildet. Das Aufstellen des 150%-Modells sowie die Bildung des
100%-Modells orientieren sich an der in 5.1 präsentierten Methodik. Aus dem
FMT entsteht eine Struktur, die vergleichbar zum Klassifikationsbaum ist und
in der die Testfälle für das durch das 100%-Modell repräsentierte Produkt
enthalten sind. Diese Testfälle dienen als Vorlage zur Generierung von Testskripten, die automatisiert auf dem Programmcode ausgeführt werden können
bzw. die zur Simulation des 100%-Modells dienen (9.2.5).
8.7 grenzen des ansatzes
8.7
grenzen des ansatzes
Der Ansatz ist durch die Komplexität der Zerlegung der Eigenschaften bei der
Vollständigkeitsbewertung (6.2) und bei der Orakelgenerierung (6.1) begrenzt.
Die Rechenzeit und der Speicherbedarf können bei großen Bitbreiten, auf
denen komplexe Operationen durchgeführt werden, exponentiell wachsen.
Abhilfe schafft bis zu einem gewissen Grad eine geeignete Zerlegung der
Eigenschaftssätze. Eine solche Zerlegung ist zeitaufwendig und führt nicht
in allen Fällen zum Ziel. Die Zerlegung beschränkt sich im Normalfall ausschließlich auf die Zerlegung von Bitvektoren. Zeitfenster müssen nicht zerlegt
werden, da im Rahmen dieser Arbeit stets Implikationen von einem auf den
anderen Zeitschritt durch die Eigenschaften beschrieben werden und größere
Zeitfenster nicht auftreten.
Weiterhin ist die Zahlendarstellung auf Integerzahlen beschränkt. Fließkommawerte können nicht repräsentiert werden. Die Multiplikations- und Divisionsoperation sind, da eine Zerlegung in einzelne Bits stattfindet, nur schwer
darstellbar.
Die Anforderungen, aus denen die Eigenschaften abgeleitet werden sollen,
müssen durch ITL repräsentierbar sein. Das wird vor allem dann zum Problem,
wenn die Anforderungen in einer anderen formalen Sprache, wie z.B. CSP,
vorliegen, deren Aussagekraft nicht vollständig durch ITL abgedeckt ist.
8.8
verwandte arbeiten
Die vorgestellten Konzepte kombiniert Ansätze aus unterschiedlichen Gebieten.
Auf den jeweiligen Gebieten existieren Arbeiten, die mit den hier vorgestellten
Ansätzen in Bezug stehen bzw. die ergänzend angewendet werden können.
Im Folgenden erfolgt eine kritische Auseinandersetzung mit wesentlichen in
Bezug stehenden Arbeiten.
In [GR03] wird auf die grundlegende Formulierung von Anforderungen in
Textform eingegangen. Diese werden vor allem unter psychologischen Gesichtspunkten bewertet. Weiterhin werden Regeln aufgestellt, die beim Formulieren
von Anforderungen als Fließtext zu beachten sind. Dazu gehören u.a.:
• Anforderungen müssen im Aktiv formuliert sein.
• Systemannahmen müssen spezifiziert werden.
• Alle Universalquantoren (immer, jede, nie) müssen überprüft werden.
• Substantive müssen definiert werden.
• Der Text muss klar, kurz ohne unnötige Wiederholungen formuliert sein.
101
102
spezifikationsprüfung und orakelgenerierung
• Generalisierungen im Text sollten vermieden werden, da die Details
durch das Wissen des Lesers ausgefüllt werden und dadurch verfälscht
werden können.
Solche Anforderungsdokumente helfen bei der Extraktion von formalen Eigenschaften immens. Fehlinterpretationen werden nicht nur beim Formulieren
von Eigenschaften, sondern auch bei der Entwicklung und dem Testprozess
vermieden. Durch eine Überprüfung von bestehenden Textdokumenten auf
Basis der formulierten Regeln können die Anzahl der Widersprüche und der
Grad der Unvollständigkeit schon vor der formalen Überprüfung minimiert
werden.
In [KAP08] wird auf die Qualität von Spezifikationen eingegangen, die zum
Testen eines Systems verwendet werden sollen. Die Verwendung einer funktionalen Sprache wird vorgeschlagen, um eine eindeutige und möglichst kompakte Spezifikation mit klarer Semantik zu erhalten. Hierfür wird die Modellierungssprache Clean verwendet. Analog zu Cando-Objekten wird auch
in dieser Arbeit in nicht spezifizierten Fällen ein zufälliges Verhalten erlaubt.
Nicht-deterministische Anforderungen werden generell in deterministische
übersetzt, indem ein möglicher Folgezustand immer erreicht wird. Das System
wird als Black-Box modelliert und nur sein äußeres Verhalten (4.2.1) ist sichtbar.
Der in der Arbeit beschriebene Ansatz überführt eine Spezifikation in einen
Automaten. Determinismus, Vollständigkeit und Erreichbarkeit werden mit
simulativen Ansätzen gezeigt. Dadurch steigt die Komplexität im Gegensatz
zu formalen Ansätzen.
In [HJL96] wird auf die Überprüfung von Anforderungen in SCR-Notation
(4.2.2) mit Hinblick auf Determinismus und Vollständigkeit eingegangen. Hierfür werden die SCR-Anforderungen formal analysiert. Widerspruchsfreiheit
wird gezeigt, indem die Bedingungen jeweils paarweise und-verknüpft werden.
Der daraus entstehende Ausdruck muss gleich ’0’ sein. Vollständigkeit ist dann
gegeben, wenn die oder-Verknüpfung aller Bedingungen eine Tautologie bildet.
Die Definitionen von Konsistenz und Vollständigkeit decken sich also mit der
Definition aus 6.2. [HJL96] ist dazu in der Lage, Fehler in Mode Transition
Tables aufzudecken, die zu einem nicht-deterministischen Verhalten führen.
Die Fehler liegen in der Struktur der Mode Transistion Table begründet. In
ihr werden Bedingungen definiert, die zum Wechseln eines Zustands führen.
Diese werden zeilenweise aufgeschrieben. Dabei darf kein Fall möglich sein,
in dem zwei Zeilen gleichzeitig wahr werden. Diese Fehler werden sowohl
durch Candogen (9.1.2) als auch durch Properlyze (9.1.3) als Widersprüche
aufgedeckt, da für die Zustandsvariable bei gleicher Eingangskombination
mehrere Zuweisungen möglich sind.
In [Fau01] wird die Anwendung von Produktlinien in Zusammenhang mit
SCR und CoRE vorgeschlagen. Die Anforderungen werden zu diesem Zweck
8.8 verwandte arbeiten
in die Product-Line Requirements Specification, die den Anforderungen auf Domänensebene entspricht, und in die Software Requirements Specification, die den
Anforderungen auf Anwendungsebene entspricht, unterteilt. Das ursprüngliche Anforderungsdokument wird in verpflichtende und optionale Features
unterteilt. Weiterhin wird ein Entscheidungsbaum hinterlegt, der alle mögliche Konfigurationen enthält. Wird eine Konfiguration ausgewählt, so wird
automatisch eine Spezifikation in CoRE-Notation für das jeweilige Produkt
erzeugt. Durch diesen Ansatz wird die Verwaltung von Anforderungen für
Produktlinien in SCR oder CoRE-Notation unterstützt. Die Hinterlegung eines graphischen Variabilitätsmodells würde allerdings bei der Strukturierung
komplexer Spezifikationen helfen.
In [LP08] wird ein Ansatz beschrieben, der die Erkennung von Widersprüchen
in Anforderungen auf der Domänenebene ermöglicht. Ein Widerspruch besteht dann, wenn die Anforderungen abgeleiteten Invarianten widersprechen.
Eine Invariante ist eine globale implizite Eigenschaft, die durch die Anforderungen repräsentiert sein muss. Im Kontext dieser Arbeit wird dafür der
Begriff Systemannahme verwendet. Um Anforderungen auf Domänenebene
zu überprüfen, muss, analog zu 7.3.2, eine Verbindung zwischen den Artefakten der Anforderungen und einem Variabilitätsmodell hergestellt werden.
Hierfür werden die Anforderungen in einen Automaten überführt und das
Variabilitätsmodell auf diesen abgebildet. Die Invarianten werden sodann anhand zeitlich logischer Ausdrücke auf dem Automaten bewiesen. Hierdurch
werden, wie auch beim Beweis von Systemannahmen auf Cando-Objekten
8.3.2, Inkonsistenzen aufgedeckt. Allerdings nur die, für die eine Invariante
formuliert wurde. Die Vollständigkeit wird bei diesem Ansatz vernachlässigt.
Außerdem muss manuell ein Automat erzeugt werden, was für komplexere
Systeme nicht praktikabel ist.
In [LGB08] wird ein goal orientierter Ansatz im Zusammenhang von Anforderungen und Produktlinien vorgeschlagen. Ein goal beschreibt ein Ziel der
Entwicklung und somit die Intention der Projektbeteiligten. Es existieren hard
goals, die eine funktionale Anforderung beschreiben und soft goals, die nichtfunktionale Anforderungen darstellen. Zur Modellierung der aus den Anforderungen extrahierten Struktur und der Funktionalität wird die Verwendung
eines plattformunabhängigen Feature-Modells vorgeschlagen dessen einzelne
Features auf die jeweiligen goals abgebildet werden. Dies deckt sich mit der
in dieser Arbeit präsentierten Vorgehensweise. Weiterhin wird vorgeschlagen,
ein zweites plattformabhängiges Feature-Modell zur Modellierung der Variabilität in Soft- und Hardware zu verwenden. Dieses wird auf die einzelnen
Bestandteile der Hardware und auf die in UML definierten Klassen, Methoden
und Variablen der Software abgebildet. Der Aufwand hierfür ist schon bei
kleineren Projekten immens. Des Weiteren müssen plattformunabhängiges
und plattformabhängiges Feature-Modell bei Änderung der Anforderungen
konsistent gehalten werden.
103
104
spezifikationsprüfung und orakelgenerierung
In [vdM07] wird auf die Modellierung von Variabilität in Anforderungen
eingegangen. Es wird ein Metamodell für die Variabilitätsmodellierung eingeführt und verschiedene bestehende Konzepte eingeführt. Weiterhin wird
das Plattform-Feature-Modell vorgeschlagen, das zur Strukturierung auf Domänenebene verwendet wird und in den Anforderungen enthalten sein soll.
Dieses ist syntaktisch und semantisch äquivalent zum Feature-Modell aus
dieser Arbeit. Die Strukturierung einer Produktlinie bereits in den Anforderungen durch ein Feature-Modell unterstützt die weitere Entwicklung sowie
die Anforderungsanalyse und hilft auch im Kontext dieser Arbeit. Für das
Plattform-Feature-Modell werden folgende Qualitätskriterien festgelegt:
• Adäquatheit: Das Plattform-Feature-Modell muss die Produktlinie mit
Bezug auf Granularität und Relevanz angemessen darstellen.
• Vollständigkeit: Vollständig ist das Plattform-Feature-Modell, wenn alle
Features bis zur gewünschten Deatailstufe vollständig beschrieben sind.
• Widerspruchsfreiheit: Das Plattform-Feature-Modell ist widerspruchsfrei, wenn zwischen zwei Features kein Widerspruch besteht. Ein Widerspruch ist z.B. dann gegeben, wenn zwei Pflichtknoten sich durch eine
Ausschlusskante zwischen ihnen gegenseitig ausschließen.
• Redundanz: Redundanz ist dann gegeben, wenn Features mit gleichem
Namen oder gleichen Attributnamen bestehen oder dann, wenn im
Plattform-Feature-Modell Beziehungen bestehen, die zu anderen Beziehungen redundant sein. Das ist z.B. dann der Fall, wenn von einem
optionalen Feature eine Bedingungskante auf ein verpflichtendes Feature
besteht.
Die weiteren Punkte aus IEEE 830 (4.1) sind ebenfalls Qualitätskriterien für das
Plattform-Feature-Modell. Ein konsistentes und nicht-redundantes FeatureModell wird erzeugt. Die Konsistenzprüfung von Feature-Modellen ist über
ein Satisfiability (SAT)-Solver erreichbar. Findet dieser keine Lösung für den
booleschen Ausdruck des Feature-Modells, enthält es Inkonsistenzen. Der
Algorithmus aus [vdM07] geht ausschließlich auf die Struktur des FeatureModells ein und vernachlässigt die dahinter liegende Funktionalität.
9
EXPERIMENTELLE UNTERSUCHUNGEN
Die vorgestellten Konzepte werden im Folgenden an Hand von Beispielen
erprobt. Die Vorlagen dafür stammen aus eigenen und fremden Veröffentlichungen, aus offiziellen Spezifikationen und aus der Industrie. Neben der
Behandlung von Variabilität zielen die Experimente auch auf die Erprobung
des Ansatzes für einzelne Produkte ab. Weiterhin werden die Konzepte zur
Überführung von verschiedenartigen Spezifikationen in formale Eigenschaften
verdeutlicht.
9.1
verwendete werkzeuge
Bei den experimentellen Untersuchungen werden verschiedene Werkzeuge
eingesetzt. Diese sind entweder kommerziell verfügbar oder wurden problemspezifisch entwickelt.
9.1.1
Feature Model Editor
Der Feature Model Editor ist ein für Eclipse entwickeltes Plugin. Er ermöglicht das graphische Zeichnen und Editieren von Feature-Modellen. Weiterhin
kann der boolsche Ausdruck, der alle möglichen Produkte der durch das
Feature-Modell beschriebenen Produktlinie repräsentiert, in KNF ausgegeben
werden. Diese Ausgabe ist in Textform oder in DIMACS-Form [Rut93] für
MiniSAT möglich. Außerdem kann die Anzahl der aus einem Feature-Modell
generierbaren Produkte errechnet werden.
9.1.2
Candogen
Bei Candogen handelt es sich um ein Linux-Kommandozeilenwerkzeug, das den
Algorithmus zur Generierung von Cando-Objekten (6.1) implementiert. Es erwartet als Eingabe einen Satz von Eigenschaften und eine Beschreibung der Einund Ausgänge des Moduls. Als Ausgabe liefert es eine VHDL-Beschreibung des
Moduls. Weiterhin kann die Laufzeit der Generierung ausgegeben werden.
105
106
experimentelle untersuchungen
9.1.3
Properlyze
Die Vollständigkeitsbewertung (6.2) wird mit dem Werkzeug Properlyze durchgeführt. Auch hier bilden ein Eigenschaftssatz und die Modulein- und Ausgänge die Werkzeugeingaben. Ausgegeben werden Widersprüche und Spezifikationslücken sowohl als Eigenschaften als auch als Beschreibungen, die als
Signalfolge graphisch dargestellt werden können. Die Laufzeit des Programms
kann detailliert ausgegeben werden.
9.1.4
ModelSim
ModelSim von Mentor Graphics ist ein kommerzielles Simulationswerkzeug
für VHDL-Beschreibungen. Es bietet die Möglichkeit, Vollständigkeitsmetriken bei der Simulation zu berücksichtigen. Als Eingabe dienen VHDL- oder
Verilog-Beschreibungen. Die Testfälle werden über Stimuli definiert und können entweder manuell eingeben werden oder automatisiert über ein Skript
erzeugt bzw. abgearbeitet werden.
9.1.5
OneSpin 360™ MV
Die formale Verifikation von Eigenschaften auf erzeugten Cando-Objekten
wird mit OneSpin 360™ MV, einem Werkzeug der OneSpin Solutions GmbH,
durchgeführt. Als Eingabe dienen sowohl die VHDL-Beschreibung als auch
ein Eigenschaftssatz in ITL. Die im Eigenschaftssatz enthaltenen einzelnen
Eigenschaften werden nacheinander formal auf der VHDL-Beschreibung bewiesen. Schlägt der Beweis fehl, so wird ein Gegenbeispiel als Signalfolge
ausgegeben.
9.2
autositzsteuerung
Die vorgestellten Konzepte werden an der Steuerungseinheit eines Autositzes
evaluiert.
9.2.1
Spezifikation
Die Spezifikation des Autositzes liegt als reiner Text vor und seine Variabilität
wird durch das Feature-Modell aus Abb. 36 beschrieben. Aus dem FeatureModell ergeben sich insgesamt 18 mögliche Produkte. Die Spezifikation des
Autositzes hat folgende Eckpunkte:
9.2 autositzsteuerung
seat
sensors
internal
sensors
actors
external
sensors
motors
functions
internal
actors
access
support
seat
movement
require
seatbelt
door
speed
aircon
require
position
heater
electrical
manual
Abbildung 36: Feature-Modell der Autositzfunktionen [SOM10]
1. Der Sitz verfügt über drei Motoren für die Bewegungsrichtung hoch/runter, links/rechts und für die Veränderung des Winkels der Rückenlehne.
2. Jeder Motor wird durch einen Schalter gesteuert, der die Positionen vor,
stopp und zurück einnehmen kann.
3. Eine Sitzbewegung ist nur bis zu einer Geschwindigkeit von 15 km/h
möglich.
4. Wahlweise können entweder eine Sitzheizung oder eine Klimaanlage
im Sitz integriert sein, die über einen Schalter mit den Positionen aus,
medium und hoch gesteuert werden.
5. Sitzheizung bzw. Klimaanlage dürfen nur aktiv sein, wenn der Sitzgurt
angelegt ist.
6. Da alle Schalter über das selbe Bussystem mit den jeweiligen Aktoren
kommunizieren, kann immer nur ein Aktor aktiv sein.
7. Der Sitz kann über eine automatische Einstiegsfunktion verfügen.
8. Wenn die Tür geöffnet wird, dann fährt der Sitz komplett zurück und
der Fahrer kann einsteigen.
9. Wenn die Türe schließt, dann fährt der Sitz zurück zur Ausgangsposition.
Diese textuelle Beschreibung muss in formale Eigenschaften übersetzt werden,
die auf die einzelnen Features abgebildet werden.
9.2.2
Extraktion der Eigenschaften
Der Prozess der Eigenschaftsextraktion im Folgenden anhand der Eigenschaft
für die Sitzheizung verdeutlicht.
107
108
experimentelle untersuchungen
property Sitzheizung is
assume:
-- true
prove:
at t+1:
if PREV(SeatBelt = 1 and f_heater = ’1’) then
SHeat_output = PREV(SHeat_request);
else
SHeat_output = 0;
end if;
end property;
Die Sitzheizung darf nur aktiv sein, wenn der Sitzgurt angelegt ist, also
SeatBelt=1 gilt. Weiterhin muss das Feature heater Teil des Produkts sein, was
durch f heater=’1’ zum Ausdruck kommt. Ist die Sitzheizung installiert und
der Sitzgurt angelegt, so wird die Einstellung der Sitzheizung SHeat request
dem Ausgang der Sitzheizung SHeat output zugewiesen. Ansonsten ist die
Sitzheizung immer aus (SHeat output=0).
Im nächsten Schritt muss das Feature-Modell im Feature-Model-Editor (9.1.1)
nachgebildet werden und der boolesche Ausdruck extrahiert werden. Dieser
wird dann als separate Eigenschaft, die eine gültige Feature-Kombination
validfm beschreibt, hinzugefügt. Die Eigenschaft hat folgende Struktur:
property Featuremodel is
assume:
-- true
prove:
at t+1: if (
(f_seat = ’1’) and
(f_seat = ’1’ or f_sensors = ’0’) and
(f_seat = ’1’ or f_actors = ’0’) and
...
(f_electrical = ’1’ or f_manual = ’1’ or f_seatmovement = ’0’) and
(f_electrical = ’0’ or f_manual = ’0’)
) then
validfm = ’1’;
else
validfm = ’0’;
end if;
end property;
Das Argument der if -Anweisung besteht aus dem extrahierten booleschen
Ausdruck, der validfm entweder wahr oder falsch werden lässt. Es entsteht ein
Eigenschaftssatz für die gesamte Produktlinie.
9.2 autositzsteuerung
9.2.3
Vollständigkeitsbewertung
Für die Prüfung auf Vollständigkeit und Widerspruchsfreiheit wird der Algorithmus aus 6.2 auf den Eigenschaftssatz angewendet. Der Eigenschaftssatz
erweist sich nach einer Rechenzeit von drei Minuten als vollständig und widerspruchsfrei. Um Unvollständigkeit zeigen zu können, wird die Eigenschaft
für die Sitzheizung wie folgt verändert:
property Sitzheizung is
assume:
-- true
prove:
at t+1:
if PREV(SeatBelt = 1 and f_heater = ’1’) then
SHeat_output = PREV(SHeat_request);
end if;
end property;
Da es sich bei SHeat output um einen 2-Bit-Wert handelt, ergeben sich vier
Lücken. Die Lücken werden als Eigenschaften und als Signalverläufe ausgegeben.
time t=0 t=1
U
SeatBelt
SHeat output(0)
U
?
Der oben gezeigt Signalverlauf verdeutlicht die gefundene Lücke für das Bit
SHeat output(0). Sein Wert ist nicht definiert, wenn der Sitzgurt nicht angelegt
wird.
Analog zur Analyse auf Vollständigkeit wird der Eigenschaftssatz auf Widerspruchsfreiheit überprüft. Widersprüche werden ebenfalls als Eigenschaften
und als Signalverläufe, die den jeweiligen Widerspruch erzeugen, ausgegeben.
Ein Widerspruch existiert immer dann, wenn ein Ausgang in den Eigenschaften mehrfach so definiert wird, dass er bei der selben Eingangskombination
im selben Zustand des Systems unterschiedliche Werte annehmen muss.
9.2.4
Simulation des Orakels
Um ein simulierbares Orakel zu erhalten, werden die Eigenschaften in eine
VHDL-Beschreibung transformiert (6.1). Die Generierung des Orakels nimmt
eine Rechenzeit von sieben Minuten in Anspruch. Das erzeugte Orakel kann
dann simuliert werden (9.1.4). Für die automatische Einstiegshilfe ergibt sich
z.B. folgender Signalverlauf.
109
110
experimentelle untersuchungen
t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7 t=8
clk
f accesssupport
1
fmvalid
1
invalid inputs
0
door open
0
1
motor1 request
0
0
motor1 output
0
seat back
seat req pos
48
1
49
0
50
2
49
0
48
48
Da es sich bei VHDL um eine Hardwarebeschreibungssprache handelt, benötigt der Simulator einen Takt clk zur Definition der diskreten Zeitpunkte.
Wird die Türe geöffnet door open=1, so fährt der Sitz zurück bis seat back=50.
Im Anschluss daran wird die Türe wieder geschlossen door open=0 und der
Sitz fährt zur Ausgangsposition seat back=seat req pos. Wichtig ist, dass der
Sitz während des Vorgangs nicht durch eine Schaltereingabe verstellt wird
motor1 request=0. Außerdem muss eine gültige Feature-Kombination ausgewählt sein fmvalid=1 und die Einstiegshilfe Teil des Produkts f accesssupport=1
sein. Weiterhin dürfen keine ungültigen Eingaben während des Vorgangs
auftreten ivalid inputs=0.
9.2.5
FMT unterstützte Testfallgenerierung
Durch die Verknüpfung des Feature-Modells mit dem Klassifikationsbaum
entsteht ein FMT (8.6). Das FMT ermöglicht die strukturierte Generierung
Testfällen für Produktlinien. Äquivalenzklassen, die an den Blattknoten des
Feature-Modells angehängt werden, repräsentieren die Wertebereiche, in denen
sich das Feature bewegen kann. Dadurch können verschiedene Kombinationen
von Grenzwerten getestet werden. Weiterhin werden die durchgeführten Tests
durch die unter dem FMT liegende Tabelle dokumentiert. Abb. 37 zeigt einen
Ausschnitt aus dem FMT des Autositzes. Dem Feature Speed werden z.B. die
Äquivalenzklassen [0], [1..15] und [16..200] zugeordnet. Der Autositz soll
in diesen Geschwindigkeitsbereichen ein äquivalentes Verhalten zeigen. Bei
stehendem Fahrzeug greift die Sitzautomatik und der Sitz kann durch die
Schalter bewegt werden. In einem Bereich von 1 km/h und 15 km/h ist nur
noch eine Sitzverstellung per Schalter möglich und ab 16 km/h darf der Sitz
nicht mehr elektrisch verstellbar sein. Die Äquivalenzklassen ergeben sich also
aus der Spezifikation. Testfälle werden in einer Tabelle analog zur Darstellung
im Klassifikationsbaum gekennzeichnet. Jede Zeile der Tabelle stellt einen
9.2 autositzsteuerung
seat
sensors
internal
sensors
seatbelt
[0]
[1]
...
external
sensors
door
[0]
[1]
speed
[0] [1..15] [16..200]
Abbildung 37: Ausschnitt aus dem FMT der Autositzfunktionen
Testfall dar. Die Äquivalenzklasse, in der sich der jeweilige Sensorwert befinden
muss, wird durch einen Punkt gekennzeichnet.
Die Repräsentation der Produktlinie als FMT ermöglicht das strukturierte
Testen jedes ableitbaren Produkts. Wird ein Feature durch die Produktauswahl
entfernt, so werden auch die darunter liegenden Auswahlpunkte entfernt. Es
entsteht ein Klassifikationsbaum für das jeweilige Produkt. Das FMT ist also
eine Darstellungsform für alle möglichen Klassifikationsbäume der aus der
Produktlinie ableitbaren Produkte.
9.2.6
Beweis von Systemannahmen
Mit dem Werkzeug OneSpin 360™ MV (9.1.5) können Eigenschaften auf VHDLBeschreibungen bewiesen werden. Im ersten Schritt wurden die Eigenschaften,
aus denen der Code erzeugt wird, wieder auf dem Code bewiesen. So kann
sicher gestellt werden, dass der Algorithmus, der zur Erzeugung dient, in diesem Fall fehlerfrei funktioniert und somit die erzeugte VHDL-Beschreibung den
Eigenschaften entspricht. Alle Eigenschaften halten auf der VHDL-Beschreibung
und der gesamte Beweis nimmt weniger als fünf Sekunden in Anspruch.
Da Widerspruchsfreiheit und Vollständigkeit bereits für den Eigenschaftssatz gezeigt wurde (9.2.3), ist die VHDL-Beschreibung auch vollständig und
widerspruchsfrei. Daraus folgt allerdings noch nicht, dass die initialen Anforderungen sinnvoll durch die VHDL-Beschreibung repräsentiert werden. Um
das zu zeigen, müssen Sicherheitseigenschaften (3.3.3) über die Anforderungen
formuliert und bewiesen werden. Die folgende Eigenschaft beschreibt, dass
bei einer Geschwindigkeit von über 15 km/h der Sitz nicht elektrisch bewegt
werden darf.
111
112
experimentelle untersuchungen
property NoMovementSpeed is
assume:
at t: Speed_Sensor > 15;
prove:
at t+1:
motor1_output = 0 and
motor2_output = 0 and
motor3_output = 0;
end property;
Sie ist nicht Teil des Eigenschaftssatzes, aus dem das Orakel generiert wird,
beschreibt aber eine Sicherheitseigenschaft, die durch den ursprünglichen
Eigenschaftssatz implizit gegeben sein muss. Die Eigenschaft hält auf dem
generierten Orakel. Diese Eigenschaft hält für alle Produkte. Sogar für solche,
die eigentlich nicht aus dem Feature-Modell ableitbar wären. Anders sieht
es für Sitzheizung und Klimaanlage aus, die sich nach dem Feature-Modell
gegenseitig ausschließen.
property HeaterOrAircon is
assume:
at t: validfm = 1;
prove:
at t+1:
SAircon_output = 0 or SHeat_output = 0;
end property;
Hier muss Teil der Annahme sein, dass das Feature-Modell gültig ist (validfm=1). Die Eigenschaft, die anzeigt, dass die automatische Sitzbewegung
beim Einsteigen durch ein Drücken des Tasters für die Sitzbewegung unterbrochen wird, ist im Folgenden dargestellt.
property AbortAutomatic is
assume:
at t: Speed_Sensor = 0 and Door_open = ’1’ and Seat_Back < 50;
at t: validfm = ’1’ and f_electrical = ’1’;
at t+1: invalid_inputs = ’0’;
prove:
at t+1:
if PREV(motor1_request = 1 and Seat_Back > 0) then
motor1_output = 1;
end if;
end property;
Hier ist neben der Beschreibung der Situation und der Features, die ausgewählt sein müssen, noch die Annahme, dass invalid inputs=’0’ gilt, nötig.
9.2 autositzsteuerung
Weiterhin wird bewiesen, dass immer nur ein Motor aktiv sein darf und dass
der logische Ausdruck, der zur Beschreibung des Feature-Modells dient, die
Zusammenhänge im Feature-Modell korrekt widerspiegelt.
Werden die impliziten Systemannahmen zum Eigenschaftssatz hinzugefügt, so
sind sie redundant (8.3.1), wenn sie durch den ursprünglichen Eigenschaftssatz
erfüllt werden (8.5.2). Diese Vorgehensweise wird mit den auf dem erzeugten
Orakel bewiesenen impliziten Systemannahmen ebenfalls erprobt. Tab. 3 zeigt
PL
AI
VP
AA
OM
HA
SM
Properlyze [s]
6,72
8,49
6,74
8,42
6,71
6,74
6,74
Theoreme [#]
139
147
144
139
141
140
139
Tabelle 3: Beweis impliziter Systemannahmen
die Ergebnisse des Beweises der impliziten Systemannahmen über redundante
Eigenschaften. Hierfür muss weder OneSpin 360™ MV verwendet werden,
noch ein Orakel generiert werden. Verglichen wird die Laufzeit und die Anzahl
der generierten Theoreme für die Eigenschaften der ursprünglichen Produktlinie PL und der Produktlinie inklusive aller impliziter Systemannahmen AI.
Weiterhin werden, um einen Laufzeitvergleich zu erhalten, die Eigenschaften
für die Produktlinie nacheinander mit einzelnen impliziten Systemannahmen
erweitert (VP - nur valide Produkte möglich, AA - Einstiegsautomatik kann
manuell unterbrochen werden, OM - es darf zu jedem Zeitpunkt nur ein Motor laufen, HA - entweder Sitzheizung oder Klimaanlage möglich, SM - eine
Sitzbewegung ist nur bis 15 km/h möglich). Die längste Laufzeit ergibt sich
beim maximalen Eigenschaftssatz AI. Die Verlängerung der Laufzeit ist vor
allem der impliziten Systemannahme AA geschuldet. Alle weiteren impliziten
Systemannahmen verlängern die Laufzeit nur unerheblich. Für die Verwendung dieser Methodik wird daher empfohlen, zuerst nur den ursprünglichen
Eigenschaftssatz PL und den Eigenschaftssatz mit allen impliziten Systemannahmen AI zu vergleichen. Nur, wenn bei diesem Vergleich Fehler festgestellt
werden, müssen die impliziten Systemannahmen einzeln überprüft werden.
Um die Mächtigkeit des Ansatzes zu zeigen, wurde eine Lücke zum Eigenschaftssatz hinzugefügt, indem eine Zeile auskommentiert wird.
113
114
experimentelle untersuchungen
property Motor2 is
assume:
-- true
prove:
at t+1:
if PREV(motor1_request = 0 and motor3_request = 0
and Speed_Sensor < 16 and SHeat_request = 0
and f_electrical = ’1’) then
...
else
--motor2_output = 0 and
Seat_Left = PREV(Seat_Left);
end if;
end property;
Ein Beweis mit OneSpin 360™ MV (9.1.5) ergibt daraufhin, dass zwei implizite
Systemannahmen über die Motorbewegung nicht mehr halten. Eine gleichzeitige Bewegung mehrerer Motoren ist nach Abb. 38 (a) möglich. Außerdem kann
der Sitz nach Abb. 38 (b) auch bei einer Geschwindigkeit von über 15 km/h
bewegt werden. Beide Fehler resultieren aus der Struktur des Orakels, das sich
t=0 t=1
clk
motor3 request
t=0 t=1
2
clk
motor3 output
0
2
speed sensor
motor2 random
motor2 output
0
2
0
2
motor2 random
motor2 output
(a)
16
0
2
0
2
(b)
Abbildung 38: Gegenbeispiele in OneSpin 360™ MV
bei Spezifikationslücken zufällig verhalten darf. Zu diesem Zweck wird dem
Ausgang motor2 output der Zufallswert motor2 random zugewiesen.
Der Beweis der impliziten Systemannahmen über die Anzahl der Lücken beim
Hinzufügen redundanter Eigenschaften wird ebenfalls durchgeführt. Hier
zeigt sich eine Verringerung der Anzahl der Lücken, wenn die Eigenschaften
aus den impliziten Systemannahmen über die Motorbewegung aus dem Eigenschaftssatz entfernt werden. Wird z.B. die implizite Systemannahme über
die Beschränkung der Sitzbewegung ab einer Geschwindigkeit von über 15
km/h entfernt, so ergeben sich entsprechende Lücken. Eine implizite Systemannahme, die auf einem vollständig determinierten Eigenschaftssatz nicht hält,
würde zu Widersprüchen führen.
9.2 autositzsteuerung
9.2.7
Zusammenfassender Vergleich
Existiert ein Eigenschaftssatz für eine Produktlinie, so kann dieser zur Vollständigkeitsbewertung, zur Generierung von Orakeln und zur Verifikation
eingesetzt werden. Die Orakelgenerierung und die Vollständigkeitsbewertung
müssen nur einmal vorgenommen werden und beziehen sich dann auf alle
möglichen Produkte. Tab. 4 zeigt die statistischen Daten, die während der
PL
MP
oS
oA
oSoA
Properlyze [min]
2:24
2:21
2:05
0:07
0:07
Candogen [min]
7:00
5:45
4:54
<0:01
<0:01
Theoreme [#]
139
130
127
112
109
normalisierte Eigenschaften [#]
65
64
62
28
24
Zerlegung [ms]
52
44
44
16
16
216
200
176
24
16
VHDL-Generierung
[ms]
Tabelle 4: Ergebnisse
Generierung erhoben wurden. Sie wurden für die Produktlinieneigenschaften
PL, ein maximal ausgestattetes Produkt MP, den Autositz ohne Sitzheizung
und Klimaanlage oS, ohne Einstiegsautomatik oA und ohne Sitzheizung, Klimaanlage und Einstiegsautomatik oSoA erhoben. Der Eigenschaftssatz für die
Produktlinie beinhaltet die meiste Information und benötigt daher auch die
größte Rechenzeit. Die Vollständigkeitsbewertung ist für die Produktlinie und
das maximal ausgestattete Produkt fast gleich. Die Generierung des CandoObjekts ist bei dem maximale ausgestatteten Produkt ca. 18% schneller. Schon
bei der Generierung von MP und oS ist der Produktlinienansatz schneller. Der
Break-Even-Point (Kapitel 5) liegt also bei ca. 2-3 generierten Produkten, was
sich mit der Definition aus [PBL05] deckt. Im industriellen Umfeld existieren
Produktlinien aus denen Millionen möglicher Produkte abgeleitet werden
können.
Die Komplexität liegt bei der Generierung vor allem an der automatischen Einstiegsfunktion. Ein Produkt ohne diese Funktionalität wird deutlich schneller
durch Candogen und Properlyze bearbeitet. Die Anzahl der Theoreme sinkt
von PL zu oSoA um 28%, während die Anzahl der normalisierten Eigenschaften
um 63% abnimmt.
115
116
experimentelle untersuchungen
9.3
handyspiel
Die Anwendung des Ansatzes auf eine Spezifikation, die in Form von Aktivitätsdiagrammen gegeben ist, wird im Folgenden präsentiert. Als Grundlage
dienen Aktivitätsdiagramme, die den Ablauf des Handyspiels Bomberman
beschreiben [OWES11]. In Abb. 39 ist das Feature-Modell des Handyspiels
bomberman
bluetooth
internet
camera
multiplayer
send
highscore
player
photo
java
singleplayer
Abbildung 39: Bomberman Feature-Modell [OWES11]
dargestellt. Es besteht aus dem Wurzelknoten Bomberman sowie aus den Pflichtknoten Java und Singleplayer. Weiterhin enthält es eine Odergruppe bestehend
aus Bluetooth, Internet und Camera, von der mindestens ein Feature Teil des
Produkts sein muss. Abhängig von den gewählten Features aus der Odergruppe bilden Multiplayer, Send Highscore und Player Photo optionale Bestandteile
des Produkts. Abb. 40 zeigt drei mögliche Produkte, die aus der Produktlinie
Produkt A
Produkt B
Produkt C
Intro
Take Photo
Intro
[Photo]
Take Photo
[Next]
[Next]
Menu
Show
Highscore
[Highscore]
[Exit]
[Play]
Play Game
Show
Score and
Save Local
Send Score
via Internet
[Send]
[Menu]
Intro
[Photo]
[Photo]
Calibrate
Screen
[Next]
Menu
Show
Highscore
[Highscore]
[S.Player]
Menu
[Exit]
[M.Player]
Single
Player Game
Show
Highscore
[Highscore]
[S.Player]
[Exit]
[M.Player]
Single
Player Game
Multi Player
Game
Show
Score and
Save Local
Multi Player
Game
Show
Score and
Save Local
Send Score
via Internet
[Send]
[Menu]
Abbildung 40: Bomberman Aktivitätsdiagramme [OWES11]
generiert werden können. Der Ansatz wird im Folgenden sowohl anhand eines
einzelnen Produkts als auch anhand der gesamten Produktlinie erörtert.
9.4 a-7e flugzeug
9.3.1
Einzelnes Produkt
Für die Betrachtung eines einzelnen Produkts wird Produkt A gewählt. Bei der
korrekten Übersetzung von Aktivitätsdiagrammen in Eigenschaften können
keine Spezifikationslücken auftreten. Ein syntaktisch korrekt geschriebenes
Aktivitätsdiagramm hat vom Start- bis zum Endknoten immer mindestens
eine aktive Aktion. Das Aufschreiben der Eigenschaften zur Definition von
Aktivitätsdiagrammen hilft trotzdem bei der Analyse und dem Verständnis
des Aktivitätsdiagramms.
9.3.2
Produktlinie
Für die Beschreibung der Produktlinie müssen einzelne Teile des Aktivitätsdiagramms mit ihren korrespondierenden Features in Bezug gesetzt werden.
Dies wird durch folgende Beispieleigenschaft verdeutlicht:
assume:
at t: reset = ’0’;
prove:
at t+1:
if PREV(activ = a_intro) then
if (f_playerphoto = ’1’ and c_intro = TAKEPHOTO) then
activ = a_takephoto;
elsif (f_touch = ’1’ and c_intro = FIRSTGAME) then
activ = a_touchscreencal;
else
activ = a_menu;
end if;
end if;
end property;
Die Eigenschaft beschreibt den Aktivitätswechsel aus der Aktivität Intro. Die
Aktivität Take Photo kann nur erreicht werden, wenn Player Photo Teil des
Produkts ist.
Aktivitätsdiagramme im Produktlinienkontext zu verwenden bietet sich also an.
Es ist allerdings nötig, eine Funktionalität hinter den jeweiligen Aktivitäten zu
hinterlegen. Dadurch wird das Verhaltensmodell der Produktlinie strukturiert
und einfacher änderbar.
9.4
a-7e flugzeug
Die Spezifikation des A-7E Flugzeugs [AFB+ 88] ist in SCR-Notation (4.2.2)
verfasst und ist zur öffentlichen Analyse freigegeben. Sie definiert die Reaktion
117
118
experimentelle untersuchungen
des Flugzeugs auf Piloteneingaben. Die Steuerung gliedert sich in vier mode
classes (alignment, navigation, navigation update, weapon delivery), die als parallele
Zustandsautomaten begriffen werden können.
Um ein System von der Komplexität eines Flugzeugs zu beschreiben, muss
ein Großteil der Funktionalität durch einzelne Module gekapselt werden. Ein
Modul bietet vordefinierte Funktionalität an und wird über ein generisches
Interface mit dem Gesamtsystem verbunden. Die genaue Implementierung
innerhalb des Moduls bleibt dem Gesamtsystem verborgen. Weiterhin muss
jedes Modul dafür sorgen, dass es sich beim Start des Systems initialisiert, also
einen vordefinierten Anfangszustand einnimmt. Die Fehlerbehandlung ist außerdem Teil der Modulfunktionalität. Verletzungen der Interfacespezifikation
bzw. interne Fehlerzustände müssen behandelt und dem Gesamtsystem zur
Verfügung gestellt werden. Welche Funktionalität auf welche Weise innerhalb
von Modulen gekapselt wird, stellt im Normalfall eine Designentscheidung dar.
Der Entwickler muss die Wahrscheinlichkeit von Änderungen innerhalb von
Funktionsblöcken abschätzen und anhand dessen den Funktionsumfang der
Module definieren. In einem System kann Hardware, Software oder Verhalten
modularisiert werden. Bei der Hardwaremodularisierung wird die Schnittstelle nicht verändert, während sich die Hardware ändern kann. Im A-7E
Flugzeug ist das z.B. bei der weapon delivery class der Fall. Je nach Bestückung
der Flügelaufhängungen ändert sich die Hardware abhängig vom bestückten
/WEAPTYP/, die Schnittstelle und die Instrumente innerhalb des Cockpits
bleiben unverändert. In der Software werden meistens Algorithmen modularisiert. So wird einem Sortieralgorithmus immer eine Menge unsortierter
Werte übergeben und eine sortierte Menge als Ausgabe erwartet. Der implementierte Algorithmus, der die Sortierung übernimmt, ist allerdings für das
Gesamtsystem nicht sichtbar. Systemverhalten wird im Normalfall auch in
Software modularisiert. Dabei handelt es sich nicht um Berechnungen, sondern
um beobachtbares Verhalten. So kann z.B. der maximale Anstellwinkel eines
Flugzeugs in Abhängigkeit der Geschwindigkeit durch ein Softwaremodul
berechnet werden. Gibt der Pilot das Signal zur Erhöhung des Anstellwinkels,
so kann dieses durch ein Softwaremodul verhindert werden.
9.4.1
Aufstellen der Eigenschaften
Im Rahmen dieses Beispiels wird die navigation update mode class betrachtet. Die
Eigenschaften werden nach den in 7.2 aufgestellten Regeln für die Extraktion
von Eigenschaften aus SCR-Anforderungsdokumenten aufgestellt. Verwendet
wird ausschließlich die mode transition table der navigation update mode class.
In der A7E-Spezifikation sind neben den Eingangswerten, die durch Sensoren
oder Piloteneingaben auftreten können, weitere Situationen beschrieben, die
9.4 a-7e flugzeug
Eingaben zusammenfassen. Ein Beispiel hierfür bietet !station selected!, das wie
folgt definiert ist [AFB+ 88]:
„/STAnRDY/ = $YES$ for any n ∈ {1 2 3 6 7 8}“
Für /STAnRDY/ gilt:
„An item will be $Yes$ if and only if the pilot has selected the corresponding
station using the pushbutton station selectors.“
Jede station beschreibt eine Aufhängung unterhalb des Flügels. Die Nummern
4 und 5 befinden sich am Rumpf des Flugzeugs und werden nicht berücksichtigt. Eine station kann mit einem /WEAPTYP/ bestückt werden, dessen
Eigenschaften in einer Tabelle festgehalten sind. Zu den Eigenschaften gehören
der Klartextname, eine Waffenklassifizierung, die Länge des Abwurfimpulses, die minimale Zeit zwischen zwei Abwürfen und die Information, ob an
einer Aufhängung mehrere Waffen des selben Typs befestigt sein können.
!station selected! ist immer dann wahr, wenn der Pilot eine unter dem Flügel
befindliche Aufhängung ausgewählt hat und wird durch folgende Eigenschaft
repräsentiert:
property stationselected is
assume:
at t: reset = ’0’;
prove:
at t+1:
if PREV(STAnRDY /= b "000000" ) then
station_selected = ’1’;
else
station_selected = ’0’;
end if;
end property;
Durch die Beschreibung von Situationen wird die A7E-Spezifikation kompakter und besser lesbar. Diese Technik wurde daher auch beim Aufstellen der
Eigenschaften angewandt.
9.4.2
Vollständigkeitsbewertung und Orakelgenerierung
Der Eigenschaftssatz für die navigation update mode class umfasst insgesamt
sieben Eigenschaften. Nach dem Aufstellen der Eigenschaften erfolgt eine
Prüfung auf Vollständigkeit und Widerspruchsfreiheit. Diese endet für die
mode transition table der navigation update mode class nach 0:07 Minuten und
zeigt weder Lücken noch Widersprüche in der Spezifikation. Die Generierung
des Orakels 2:45 Minuten in Anspruch.
119
120
experimentelle untersuchungen
9.5
gearomat
Der Gearomat ist ein Produkt der Gearomat GmbH, dessen Spezifizierung und
Entwicklung im Verlauf dieser Arbeit betreut wurde. Neben den bisher gezeigten Beispielen, die Teilaspekte des Ansatzes behandeln, soll der Gearomat dazu
dienen, den Ansatz ganzheitlich zu erörtern. Da es sich um ein kommerzielles
Produkt handelt, unterliegen Teile der Entwicklung und der Spezifikation der
Geheimhaltung. Es wird daher ausschließlich auf die Erfahrungen, die im
Zusammenhang mit den in dieser Arbeit präsentierten Konzepten gewonnen
wurden, eingegangen.
9.5.1
Beschreibung des Systems
Beim Gearomat handelt es sich um einen Automaten, der von einem gewöhnlichen Getränkeautomaten abgeleitet wurde und für Rechenzentren bestimmt
ist. Da in Rechenzentren die Wartung meist nachts erfolgt oder sie sich an
abgelegenen Orten befinden, müssen auch in diesen Situationen Ersatzteile,
wie Kabel, Reinigungstücher oder optische Transceiver, verfügbar sein. Können
fehlende Teile nicht besorgt werden, führt das zu hohen Kosten, da die Wartung verschoben werden muss oder im schlimmsten Fall ein Netzwerkausfall
droht. Der Gearomat muss folgende Eckdaten erfüllen:
• Sicheres Bezahlsystem
• Dokumentation jedes Verkaufs per Foto oder Video
• Verwaltung des Bestands
• Programmierung von optischen Transceivern
• Touch-Screen Bedienung mit Flash-Oberfläche
• Netzwerkanbindung an einen zentralen Server
• Erweiterbarkeit
Diese Funktionalität wird erreicht, indem ein Standardautomat mit einem
eingebettetem System erweitert wird. Weiterhin wird für die Programmierung
von optischen Transceivern die flexBox der Firma Flexoptix GmbH verwendet.
Die flexBox ist bereits vollständig entwickelt und muss mit dem eingebetteten
System, das den Gearomat steuert, verbunden werden. Weiterhin muss der
Gearomat mit der Kontrolleinheit des Automaten und mit einem zentralen
Server für den Bezahlvorgang kommunizieren.
Abb. 41 verdeutlicht den grundlegenden Aufbau des Systems. Ein möglicher
Anwendungsfall ist z.B., dass der Kunde einen optischen Transceiver kaufen
möchte und der Kauf fehlerfrei abläuft:
9.5 gearomat
Smartphone
Server
flexBox
Gearomat
Kunde
Abbildung 41: Überblick über das Gearomat-System
1. Kunde wählt Produkt auf dem Touch-Screen des Gearomat aus
2. Kunde verbindet sich mit seinem Smartphone unter Eingabe seiner Nutzerdaten mit dem Server
3. Kunde gibt den auf dem Touch-Screen des Gearomaten angezeigten
Code auf seinem Smartphone ein, um den Verkauf seinem Nutzerkonto
zuzuordnen
4. Kunde sieht den Gesamtpreis auf seinem Smartphone und bestätigt die
Bezahlung
5. Server teilt Gearomat die erfolgte Bezahlung mit
6. Gearomat gibt gekauftes Produkt aus
7. Kunde entnimmt optischen Transceiver
8. Gearomat fotografiert Entnahme durch den Kunden
9. Kunde programmiert optischen Transceiver an der flexBox
Es existiert noch eine Vielzahl weiterer Anwendungsfälle. Die Gesamtheit aller
Anwendungsfälle dient als Grundlage für die Spezifikation.
9.5.2
Aufstellen des Feature-Modells
Der Gearomat ist ein Produkt, das erweiterbar und auf Kundenwünsche
anpassbar sein soll. Daher bietet sich das Aufstellen eines Feature-Modells
an, um die Möglichkeiten, die der Gearomat bietet, graphisch darzustellen.
Abb. 42 zeigt einen Ausschnitt aus dem Feature-Modell des Gearomaten. Das
vollständige Feature-Modell enthält noch weitergehende Informationen über
den Softwareteil des eingebetteten Systems sowie über die Funktionalität, die
in einem optionalen Field Programmable Gate Array (FPGA) beinhaltet sein
121
122
experimentelle untersuchungen
Gearomat
ES
Software
Hardware
UI
Display
LCD
Type 1
RS232
Touch
HDMI
7“
10“
Type 2
Type 1
Bluetooth
WLAN
5-Wire
Resistive
Capacitive
4-Wire
4-Wire
5-Wire
Type 2
Connectivity
GPIO
FPGA
Generic
SPI
Camera
PCIx
USB
LAN
I2C
Abbildung 42: Ausschnitt des Gearomat-Feature-Modells
kann. Im Feature-Modell sind die Hardwarekomponenten des eingebetteten
Systems dargestellt.
Die Benutzereingaben werden über einen Touchscreen realisiert. Ein TouchScreen besteht immer aus einem regulären LCD-Display und einer separaten
Touch-Oberfläche, die auf den Bildschirm gelegt wird. Das LCD-Display wird
direkt mit dem im eingebetteten System enthaltenen Mikroprozessor verbunden. Hier ist zu beachten, dass es unterschiedliche Verbindungsarten gibt, die
sich mit Hinblick auf Pegel und Signalleitungen unterscheiden. Je nach Typ
der Verbindung muss die Schaltung für die Verbindung angepasst werden.
Weiterhin kann bei Touch-Oberflächen zwischen resistiven und kapazitiven
Varianten gewählt werden, die wiederum über ein 4-wire oder 5-wire Interface
mit dem System verbunden werden.
Die Verbindungsmöglichkeiten des Boards sind sowohl durch den gewählten
Mikroprozessor als auch durch die Anforderungen vorgegeben. LAN, RS232
und Kamera müssen immer Teil des Systems sein. Schaltungsbedingt kann
LAN nur in Zusammenhang mit USB bestückt werden. Eine ähnliche Abhängigkeit besteht zwischen Bluetooth und WLAN, die sich auf dem selben
Modul befinden und daher nur gemeinsam bestückt werden können. Um für
9.5 gearomat
die Zukunft die Erweiterbarkeit des Systems sicherzustellen, müssen noch
unterschiedliche Anschlussmöglichkeiten über einen Steckverbinder realisiert
werden.
9.5.3
Nutzen des Feature-Modells
Das Feature-Modell strukturiert die Menge der möglichen Produkte so, dass
sie für alle Projektbeteiligten einfach nachvollziehbar sind. Die Möglichkeiten
des fertigen Produkts können einfach verstanden und erörtert werden. Auch
kann das Feature-Modell erweitert werden, wenn Features hinzukommen. Die
Abschätzung des Aufwands für die Erweiterung der Produktlinie kann von
den Entwicklungsverantwortlichen durchgeführt werden. Weiterhin hilft das
Feature-Modell während der Entwicklung dabei, den Restaufwand abzuschätzen. Nicht implementierte oder getestete Features können markiert werden.
So entsteht ein optischer Eindruck über den Projektstatus.
Für die Produktion ist das Feature-Modell auch von großem Vorteil. Je nach
ausgewählten Features, muss die Platine des eingebetteten Systems anders bestückt werden. Die Bestückung wird normalerweise nach einem Bestückungsplan durchgeführt, der aus der Bauteilposition mit Name und der Bill of
Materials, in der alle Bauteile mit Position genau festgehalten sind, besteht.
Je nach ausgewählten Features muss die Bestückung geändert werden. Das
Gearomat ES besteht aus über 500 Bauteilen, die entweder bestückt oder nicht
bestückt sein können bzw. mit anderen Werten (Widerstand oder Ram-Größe)
bestückt werden können. Alleine für den Wechsel des Displays von Type 1 auf
Type 2 führt zu Veränderungen an 66 Positionen. Durch die Verwendung des
Feature-Modells kann dieser Prozess vereinfacht werden, indem jedes Feature
auf eine Menge von Bauteilen abgebildet wird. Durch das Zusammenfügen
aller Bauteilmengen erhält man die Bill of Materials des gesamten Produkts.
Weiterhin kann bei der Software-Entwicklung das Feature-Modell dabei helfen,
Abhängigkeiten zwischen einzelnen Modulen zu erkennen und zu dokumentieren. Es kann sogar die Abhängigkeit zwischen einzelnen Softwaremodulen
und Hardwarekomponenten dargestellt werden. So muss ein Treiber für das
WLAN-Modul nur installiert werden, wenn das WLAN-Modul Teil des Produkts ist. Die Verfügbarkeit von WLAN-Funktionalität in der Software hängt
auch von der Wahl des physikalischen WLAN-Moduls ab. Es können automatisiert Konfigurationsdateien und Installationsanleitungen für die Software
generiert werden.
123
124
experimentelle untersuchungen
9.5.4
Vollständigkeit der Anforderungen
Es werden Teile der Anforderungen auf Vollständigkeit geprüft. Dabei handelt
es sich vor allem um den schematischen Ablauf des Verkaufsvorgangs inklusive
der Behandlung von Fehlern. Da der Gearomat im ersten Schritt nur in einer
einzigen Konfiguration ausgeliefert wird, werden, bedingt durch die knappe
Entwicklungszeit, nur die Anforderungen für dieses Produkt überprüft.
Für das Gearomat-System werden drei Eigenschaftssätze geschrieben. Einer beschreibt das mögliche Verhalten des Kundens inkl. Smartphone (5 Eigenschaften), einer beschreibt das Verhalten des Ausgabeautomatens (4 Eigenschaften)
und einer beschreibt das Verhalten des zentralen Servers (6 Eigenschaften).
Diese Aufteilung resultiert in strukturierten und gut lesbaren Eigenschaftssätzen. Die Eigenschaftssätze werden sodann auf Vollständigkeit überprüft und
Lücken entfernt.
Im Verlauf des Projekts wird deutlich, dass die Formulierung von Eigenschaftssätzen während dem Verfassen des Anforderungsdokuments von großer
Hilfe ist. Der Zwang zum eindeutigen und vollständigen Formulieren der Eigenschaften führt zu einem sehr guten Problemverständnis. Des Weiteren
unterstützt die Formulierung der Eigenschaften die Formulierung der Anforderungen. Diese werden mit einer viel größeren Sorgfalt verfasst und zeichnen
sich durch explizite Aussagen und Eindeutigkeit aus. Weiterhin werden implizite Annahmen über das Systemverhalten formuliert und in die Spezifikation
aufgenommen. Es bietet sich daher auch in zukünftigen Projekten an, das
äußere Verhalten des Systems begleitend zum Aufstellen der Anforderungen
zu formalisieren. So kann die Konsistenz der Anforderungen dynamisch überprüft werden und der Grad der Vollständigkeit schrittweise auf 100% erhöht
werden.
9.5.5
Orakel
Das Orakel kann aus den Eigenschaftssätzen generiert werden. Auf seine
Ausführung wird allerdings bisher verzichtet. Der Gearomat befindet sich
noch in der Entwicklungsphase. Die Verwendung eines Orakels für das äußere Verhalten ist erst für den Freigabetest vorgesehen und hilft zu diesem
Zeitpunkt, Testergebnisse vorherzusagen. So kann der Gearomat auch von
Mitarbeitern, die nicht der Entwicklungsabteilung zugehörig sind, getestet
werden. Die Testergebnisse können auf Grund der Vorhersagen durch das
Orakel augenblicklich auf Korrektheit überprüft werden.
10
FA Z I T U N D A U S B L I C K
Produktlinien nehmen einen immer größeren Stellenwert in der Entwicklung
ein. Die Kosten für das Erstellen und Warten von Anforderungen für Produktlinien müssen in einem erträglichen Maß gehalten werden. Das Interesse
an automatisierten Methoden im Kontext von Produktlinien wächst daher
momentan immer stärker im industriellen Umfeld. Formale Methoden gewinnen mit Hinblick auf mögliche Standardisierungen des Entwicklungs- und
Testprozesses stetig an Bedeutung. Diese Arbeit präsentiert Konzepte zur
Anforderungsanalyse und Orakelgenerierung für Produktlinien eingebetteter
Systeme und für einzelne eingebettete Systeme.
Die präsentierten Verfahren vereinigen Techniken aus dem Produktlinienkontext mit solchen, die aus der formalen Verifikation von Hardware bekannt
sind. Dadurch werden Anforderungsdokumente unter Beibehaltung der in
ihnen enthaltenen Variabilitäts- und Abhängigkeitsinformationen formalisiert.
Hierfür muss ein Zusammenhang zwischen den Anforderungen und einem Variabilitätsmodell, wie z.B. dem Feature-Modell, hergestellt werden. Die durch
die Anforderungen definierte Funktionalität muss daraufhin mit den enthaltenen Variabilitätsinformationen in eine formale Form gebracht werden.
Liegt ein Anforderungsdokument vollständig oder in Teilen als Eigenschaftssatz vor, so kann dieses mit formalen Methoden bewertet und verarbeitet
werden. Die Bewertung des Eigenschaftssatzes bezieht sich im Kontext dieser
Arbeit auf die Vollständigkeit, die Widerspruchsfreiheit und die Freiheit von
Redundanz. Es können Lücken und Widersprüche in Anforderungsdokumenten von einzelnen Produkten sowie von Produktlinien aufgedeckt werden. Die
ansonsten nur manuelle Bewertung der Anforderungen wird unterstützt.
Ein Eigenschaftssatz, der keine unbeabsichtigten Lücken enthält und der frei
von Widersprüchen ist, kann in ein Orakel auf Basis eines Cando-Objekts
übersetzt werden. Auch hierfür bedienen sich die präsentierten Konzepte eines
bekannten Ansatzes aus der formalen Verifikation. Ein so generiertes Orakel
kann für zwei Einsatzzwecke dienen. Auf der einen Seite können Testfälle
darauf ausgeführt werden und die Ergebnisse mit den Testfällen auf dem
realen implementierten System verglichen werden. Auf der anderen Seite ist
es möglich, Sicherheitseigenschaften zu formulieren, die für die Spezifikation
implizit gelten müssen. Diese können mit Hilfe eines Werkzeuges formal auf
dem Orakel bewiesen werden. So kann garantiert werden, dass bestimmte, als
unsicher geltende Situationen niemals auftreten können.
125
126
fazit und ausblick
Bei der Anwendbarkeit eines Ansatzes, der auf der Übersetzung von Anforderungen in formale Eigenschaften für Produktlinien basiert, ist die Art, in der
die Anforderungen vorliegen, entscheidend. Teil dieser Arbeit ist aus diesem
Grund auch die Auseinandersetzung mit der Art, in der Anforderungen formuliert sein können. Es werden Anforderungen in Textform, in Tabellenform
und als UML-Aktivitätsdiagramme untersucht und Übersetzungsregeln formuliert. So könnte die Extraktion formaler Eigenschaften in Zukunft teilweise
automatisiert werden. In welchen Ausmaß sich der Prozess der Extraktion
von Eigenschaften aus Anforderungen für Produktlinien automatisieren lässt,
muss noch gezeigt werden. Vor allem, wenn die Anforderungen in Textform
vorliegen, können Mehrdeutigkeiten und missverständliche Formulierungen
die Überführung in formale Eigenschaften erschweren oder unmöglich machen. Klare Vorgaben für die Formulierung der Anforderungen sind nötig bzw.
müssen für die Erstellung von Anforderungen für Produktlinien erweitert
werden.
Die Verwendung einer formalen Sprache, um die Anforderungen zu definieren,
vereinigt mehrere Vorteile in sich. Beim Übersetzen der Anforderungen in die
formale Sprache vertieft der Entwickler sein Verständnis der Spezifikation und
kann Ungereimtheiten oder nicht sinnvolle Anforderungen identifizieren. Die
formale Spezifikation beschreibt das Verhalten des Systems eindeutig und lässt
für das zeitliche und logische Verhalten des Systems keine unerwünschten
Freiheitsgrade. Die Verwendung einer formalen Sprache bietet sich bereits
während dem initialen Aufstellen der Anforderungen an. Daraus resultieren
klare, eindeutige und strukturierte Anforderungsdokumente.
Bei der Übersetzung von Anforderungen in eine formale Sprache besteht
immer die Herausforderung, die gesamten in den Anforderungen enthaltenen
Informationen formal korrekt abzubilden. Die gewählte Formalisierung muss
dafür ausdrucksstark genug sein. Das hier hauptsächlich verwendete ITL ist
dazu in der Lage, Aussagen über das gültige zeitlich-logische Verhalten von
Systemen zu formulieren. Diese müssen während der gesamten Ausführung
des Systems gelten. Weiterhin wird gezeigt, dass durch ein Feature-Modell
repräsentierte Variabilität in die Eigenschaften mit einfließen kann und so ein
Eigenschaftssatz für eine komplette Produktlinie entsteht.
Ein Problem bei der Übersetzung von Anforderungen stellt die Form dar, in
der die Anforderungen vorliegen. Diese kann unter Umständen Aussagen
enthalten, die nicht mehr in ITL repräsentierbar sind. Des Weiteren können
die Anforderungen bereits in einer formalen Form, wie z.B. CSP, vorliegen,
die nicht mit ITL vereinbar ist. Eine äquivalenzerhaltende Umformung ist
dann nicht mehr möglich. Aus diesem Grund sollte die Anwendung der
Vollständigkeits- und Orakelgenerierungsalgorithmen auf weitere formale
Sprachen evaluiert werden. Das ist auch nötig, um komplexere Berechnungen
formulieren und bearbeiten zu können. Ließen die Algorithmen die Verwen-
fazit und ausblick
dung weiterer formaler Sprachen zu, so würde außerdem der Aufwand, der
bei der Übersetzung dieser Sprachen in ITL entsteht, eliminiert.
Die experimentellen Ergebnisse zeigen, dass die beschriebenen Konzepte auf
Praxisprobleme anwendbar sind. Größere Anforderungsdokumente müssen
allerdings erst analysiert und die jeweiligen Teile identifiziert werden, auf die
die Konzepte anwendbar sind. Eigenschaftssätze mit hoher Komplexität stellen
ein Problem mit Hinblick auf die Rechenzeit dar, die eine Vollständigkeitsbewertung oder eine Orakelgenerierung unmöglich machen kann. Hier müssen
Methoden gefunden werden, die Eigenschaftssätze passend zu vereinfachen.
Das kann z.B. durch die Aufteilung des Eigenschaftssatzes in abgeschlossene
Module geschehen. Weiterhin muss evaluiert werden, welche Formulierungen
bzw. welche Teile von Anforderungen die eigentliche Komplexität mit Hinblick
auf die eingesetzten Algorithmen ausmachen.
Von Interesse ist sicher auch die Anwendung des Ansatzes in anderen Domänen. Im Prozessmanagement können Produktlinien helfen, für Entwicklungsprojekte angepasste Prozesse automatisch zu generieren. Das würde
dazu führen, dass der Entwicklungsprozess für jedes Projekt genau auf die
Anforderungen an Qualität, Geschwindigkeit und Projektgröße zugeschnitten
wäre.
Weiterhin sind Produktlinienansätze auf das Management von Produktionsdaten anwendbar. In dieser Domäne ist Vollständigkeit und Wartbarkeit von
großem Interesse für die Industrie. Bei der Bestückung von Leiterplatten
z.B. existieren häufig unterschiedliche bestückbare Varianten. Die Stücklisten
müssen bisher von Hand angelegt und gepflegt werden. Da ein Großteil der
Werkzeuge in diesem Bereich durch Skriptsprachen gesteuert werden kann,
ist auch hier die Möglichkeit gegeben, Stücklisten und Bestückungspläne
automatisiert als einzelne Produkte aus einer Produktlinie abzuleiten. Eine
solche Stückliste muss vollständig und widerspruchsfrei sein. Sie muss für
jede bestückbare Position eindeutige Vorgaben machen. Für die automatisierte
Überprüfung ist der Algorithmus zur Bewertung von Vollständigkeit und
Widerspruchsfreiheit ideal geeignet.
Denkbar ist der Einsatz der präsentierten Konzepte auch auf weiteren Domänen, die sich mit dem Test oder der Produktion variantenreicher Systeme
auseinandersetzen. Dadurch kann sowohl der Grad der Automatisierbarkeit als
auch die Qualität der Anforderungen und damit der entstehenden Produkte
erhöht werden.
127
L I T E R AT U RV E R Z E I C H N I S
[AFB+ 88] Alspaugh, T., S. Faulk, K. Britton, R. Parker, D. Parnas und
J. Shore: Software Requirements for the A-7E Aircraft, March 1988.
[BH00] Bharadwaj, R. und C. Heitmeyer: Developing high assurance avionics systems with the SCR requirements method. 19th Digital Avionics
System Conferences, 2000.
[Bor09] Bormann, J.: Vollständige funktionale Verifikation. Doktorarbeit,
Universität Kaiserslautern, 2009.
[Bos00] Bosch, J.: Design and Use of Software Architectures - Adopting and
Evolving a Product Line Approach. ACM Press/Addison-Wesley
Publishing Co., 2000.
[BY01] Baresi, L. und M. Young: Test Oracles. Technical Report, University
of Oregon, Dept. of Computer and Information Science, Eugene,
Oregon, U.S.A., 2001.
[CDS06] Cohen, M., M. Dwyer und J. Shi: Coverage and Adequacy in Software
Product Line Testing. In: Proceedings of the ISSTA 2006 workshop
ROSATEA ’06, Seiten 53–63, New York, NY, USA, 2006. ACM.
[CDS07] Cohen, M., M. Dwyer und J. Shi: Interaction Testing of HighlyConfigurable Systems in the Presence of Constraints. In: Proceedings of
the ACM/SIGSOFT International Symposium on Software Testing and
Analysis, ISSTA, Seiten 129–139, 2007.
[CE00] Czarnecki, K. und U. Eisenecker: Generative Programming: Methods, Tools, and Applications. ACM Press/Addison-Wesley Publishing Co., June 2000.
[CHE05] Czarnecki, K., S. Helsen und U. Eisenecker: Staged Configuration
Through Specialization and Multilevel Configuration of Feature Models.
Software Process: Improvement and Practice, Seiten 143–169, 2005.
[CN01] Clements, P. und L. Northrop: Software Product Lines: Practices
and Patterns. Addison-Wesley Longman Publishing Co., Inc., 2001.
[CW07] Czarnecki, K. und A. Wasowski: Feature Diagrams and Logics: There
and Back Again. In: Proceedings of the 1th International Conference on
Software Product Lines, Seiten 23–34. IEEE Computer Society, 2007.
[Dep06] Department of Defense: Test Method Standard: Microcircuits (MILSTD-883G), 2006.
129
130
literaturverzeichnis
[Dep07a] Department of Defense: Performance Specification - Integrated Circuits (Microcircuits) Manufacturing (MIL-PRF-38535H), 2007.
[Dep07b] Department of Defense: Requirements for the Control of Electromagnetic Interference Characteristics of Subsystems and Equipment
(MIL-STD-461F), 2007.
[Dep08] Department of Defense: Test Method Standard - Environmental
Engineering Considerations and Laboratory Tests (MIL-STD-810G),
2008.
[DIN95] DIN Deutsches Institut für Normung e. V.: Norm DIN 55350-11:
Begriffe zu Qualitätsmanagement und Statistik - Teil 11: Begriffe des
Qualitätsmanagements, 1995.
[DR96] Dillon, L. und Y. Ramakrishna: Generating Oracles from Your
Favorite Temporal Logic Specifications. In: In Proceedings of the 4th
ACM SIGSOFT Symposium on Foundations of Software Engineering,
Seiten 106–117. ACM Press, 1996.
[Fau01] Faulk, S.: Product-Line Requirements Specification (PRS): An Approach
and Case Study. In: Proceedings of the Fifth IEEE International Symposium on Requirements Engineering, RE ’01, Seiten 48–55, Washington,
DC, USA, 2001. IEEE Computer Society.
[FBWJK92] Faulk, S., J. Brackett, P. Ward und Jr. J. Kirby: The Core Method
for Real-Time Requirements. IEEE Software, 9:22–33, 1992.
[GGWA93] Grochtmann, M., K. Grimm, J. Wegener und Daimler-Benz AG:
Tool-Supported Test Case Design for Black-Box Testing by Means of the
Classification-Tree Editor. In: Proceedings of EuroSTAR ’93, Seiten
169–176, 1993.
[GR03] Goetz, R. und C. Rupp: Psychotherapy for System Requirements. In:
Proceedings of the 2nd IEEE International Conference on Cognitive
Informatics, ICCI ’03, Seiten 75–80, Washington, DC, USA, 2003.
IEEE Computer Society.
[Hen80] Heninger, K.: Specifying Software Requirements for Complex Systems:
New Techniques and Their Application. IEEE Transactions on Software
Engineering, 6:2–13, 1980.
[HJL96] Heitmeyer, C., R. Jeffords und B. Labaw: Automated Consistency Checking of Requirements Specifications. ACM Transactions on
Software Engineering and Methodology, 5:231–261, 1996.
[Hoa04] Hoare, C.: Communicating Sequential Processes. Prentice Hall International, 2004.
literaturverzeichnis
[HST+ 08] Heymans, P., P. Schobbens, J. Trigaux, Y. Bontemps, R. Matulevicius und A. Classen: Evaluating Formal Properties of Feature
Diagram Languages. Software, IET, 2(3):281–302, 2008.
[IEE90] IEEE Computer Society: IEEE Standard Glossary of Software Engineering Terminology (IEEE Std 610). The Institute of Electrical and
Electronics Engineers, Inc., 1990.
[IEE98a] IEEE Computer Society: IEEE Standard for a Software Quality Metrics Methodology (IEEE Std 1061). The Institute of Electrical and
Electronics Engineers, Inc., 1998.
[IEE98b] IEEE Computer Society: Recommended Practice for Software Requirements Specifications (IEEE Std 830). The Institute of Electrical and
Electronics Engineers, Inc., 1998.
[IEE05] IEEE Computer Society: IEEE Standard for Property Specification
Language (PSL) (IEEE Std 1850). The Institute of Electrical and
Electronics Engineers, Inc., 2005.
[IEE07] IEEE Computer Society: IEEE Standard for SystemVerilog - Unified
Hardware Design, Specification, and Verification Language (IEEE Std
1800). The Institute of Electrical and Electronics Engineers, Inc.,
2007.
[IEE08] IEEE Computer Society: IEEE Standard Systems and software engineering - Software life cycle processes (IEEE Std 12207). The Institute
of Electrical and Electronics Engineers, Inc., 2008.
[IEE10] IEEE Computer Society: IEEE Standard Classification for Software
Anomalies (IEEE Std 1044). The Institute of Electrical and Electronics
Engineers, Inc., 2010.
[Int11] International Organization for Standardization: Road vehicles - Functional safety (ISO 26262), 2011.
[KAP08] Koopman, P., P. Achten und R. Plasmeijer: Testing and Validating
the Quality of Specifications. In: ICSTW ’08: Proceedings of the 2008
IEEE International Conference on Software Testing Verification and
Validation Workshop, Seiten 41–52, Washington, DC, USA, 2008.
IEEE Computer Society.
[KCH+ 90] Kang, K., S. Cohen, J. Hess, W. Novak und A. Peterson: FeatureOriented Domain Analysis (FODA) Feasibility Study. Technischer
Bericht, Carnegie-Mellon University Software Engineering Institute, 1990.
[LGB08] Laguna, M. und B. González-Baixauli: Product Line Requirements:
Multi-Paradigm Variability Models. In: Anais do WER ’08, Seiten
211–216, 2008.
131
132
literaturverzeichnis
[LP08] Lauenroth, K. und K. Pohl: Dynamic Consistency Checking of
Domain Requirements in Product Line Engineering. In: RE ’08, Seiten
193–202, Washington, DC, USA, 2008. IEEE Computer Society.
[LSR07] Linden, F. van der, K. Schmid und E. Rommes: Software Product
Lines in Action: The Best Industrial Practice in Product Line Engineering.
Springer-Verlag New York, Inc., Secaucus, NJ, USA, 2007.
[Mar02] Marciniak, J.: Encyclopedia of Software Engineering. John Wiley &
Sons, Inc., New York, NY, USA, 2002.
[McG01] McGregor, J.: Testing a Software Product Line. Technischer Bericht
CMU/SEI-2001-TR-022, Carnegie Mellon, Software Engineering
Institute, 2001.
[MO10] Markert, F. und S. Oster: Model-Based Generation of Test Oracles
for Embedded Software Product Lines. In: Workshop Proceedings of the
14th International Software Product Line Conference, MAPLE 2010
Workshop Proceedings, Seiten 147–154, 2010.
[MO11] Markert, F. und S. Oster: A Formal Method to Identify Deficiencies
of Functional Requirements for Product Lines of Embedded Systems. In:
Workshop Proceedings der Software Engineering Konferenz, GI Workshop. Gesellschaft für Informatik, 2011.
[MT01] Miller, S. und A. Tribble: Extending the four-variable model to bridge
the system-software gap. In: 20th Digital Avionics Systems Conference,
2001.
[Obe10] Oberkönig, M.: Anwendung normalisierter Eigenschaften zur Verbesserung von Qualitätsaussagen in der funktionalen Hardware-Verifikation.
Doktorarbeit, Technische Universität Darmstadt, 2010.
[OMS09] Oster, S., F. Markert und A. Schürr: Integrated Modeling of Software Product Lines with Feature Models and Classification Trees. In:
Proceedings of the 13th International Software Product Line Conference (SPLC09), MAPLE 2009 Workshop Proceedings, Seiten 75–82.
Springer Verlag, 2009.
[OWES11] Oster, S., A. Wübbeke, G. Engels und A. Schürr: Model-Based
Software Product Lines Testing Survey. In: Zander, J., I. Schieferdecker und P. Mosterman (Herausgeber): Model-based Testing
for Embedded Systems, Seiten 339–381. CRC Press/Taylor&Francis,
2011.
[PBL05] Pohl, K., G. Böckle und F. van der Linden: Software Product Line
Engineering: Foundations, Principles and Techniques. Springer-Verlag
New York, Inc., USA, 2005.
literaturverzeichnis
[PM95] Parnas, D. und J. Madey: Functional Documents for Computer Systems. Sci. Comput. Program., 25:41–61, 1995.
[Pnu77] Pnueli, A.: The Temporal Logic of Programs. Symposium on Foundations of Computer Science, Seiten 46–57, 1977.
[Rut93] Rutgers The State University of New Jersey: Satisfiability Suggested Format, 1993.
[Sch09] Schickel, M.: Applications of Property-Based Design in Formal Verification. Doktorarbeit, Technische Universität Darmstadt, 2009.
[Shi02] Shimizu, K.: Writing, Verifying and Exploiting Formal Verifications of
Hardware Designs. Doktorarbeit, Stanford University, 2002.
[SOM10] Schürr, A., S. Oster und F. Markert: Model-Driven Software
Product Line Testing: An Integrated Approach. In: 36th International
Conference on Current Trends in Theory and Practice of Computer
Science, Lecture Notes in Computer Science (LNCS), Seiten 112–
131, 2010.
[Spi89] Spivey, J.: The Z notation: a reference manual. Prentice-Hall, Inc.,
Upper Saddle River, NJ, USA, 1989.
[TTK04] Tevanlinna, A., J. Taina und R. Kauppinen: Product family testing:
a survey. In: ACM SIGSOFT Software Engineering Notes., Seiten
12–17, 2004.
[vdM07] Massen, T. von der: Feature-basierte Modellierung und Analyse von
Variabilität in Produktlinienanforderungen. Doktorarbeit, RWTH Aachen, 2007.
[Vig10] Vigenschow, U.: Testen von Software und Embedded Systems.
dpunkt.verlag GmbH, Deutschland, 2010.
[Wal01] Wallmüller, E.: Software-Qualitätsmanagement in der Praxis. Carl
Hanser Verlag, 2001.
[ZM06] Zultner, R. und G. Mazur: The Kano Model: Recent Developments.
In: The Eighteenth Symposium on Quality Function Development, Seiten 108–116, 2006.
133
WISSENSCHAFTLICHER WERDEGANG
persönliche daten:
Name, Vorname: Markert, Florian
Geburtsdatum: 26. November 1979
Geburtsort: Frankfurt / Main
Staatsangehörigkeit: deutsch
Familienstand: verheiratet, 2 Kinder
werdegang
seit 05/2011
Projektmanager, Gearomat GmbH, Dietzenbach
seit 01/2008
Wissenschaftlicher Mitarbeiter am Fachgebiet Rechnersysteme, Institut für Datentechnik, Technische Universität Darmstadt
08/2006 — 12/2007
Softwareingenieur für eingebettete Systeme,
Pan Dacom Direkt GmbH, Dreieich-Sprendlingen
studium
10/1999 — 06/2006
Studium der Elektrotechnik und Informationstechnik,
Studienrichtung Datentechnik, Technische Universität
Darmstadt
industriepraktika
05/2004 — 09/2004
Thales Air Traffic Management GmbH,
Kornthal-Münchingen
02/2001 — 04/2001
Incatronic Phönix Messtechnik GmbH, Frankfurt
zertifizierungen
ISTQB Certified Tester - Foundation Level
ITIL V3 Foundation Examination
135
EIGENE VERÖFFENTLICHUNGEN
2011
F. Markert, S. Oster: „A Formal Method to Identify Deficiencies of Functional
Requirements for Product Lines of Embedded Systems“, Workshop Proceedings der Software Engineering Konferenz, 2011.
S. Oster, I. Zorcic, F. Markert, M. Lochau: „MoSo-PoLiTe - Tool Support for
Pairwise and Model-Based Software Product Line Testing“, 4th International
Workshop on Variability Modelling of Software-Intensive Systems, 2011.
2010
F. Markert, S. Oster: „Model-Based Generation of Test Oracles for Embedded
Software Product Lines“, Workshop Proceedings of the 14th International
Software Product Line Conference, 2010.
S. Oster, F. Markert, P. Ritter: „Automated Incremental Pairwise Testing of Software Product Lines“, Proceedings of the 14th International Software Product
Line Conference, 2010.
A. Schürr, S. Oster, F. Markert: „Model-Driven Software Product Line Testing:
An Integrated Approach“, 36th International Conference on Current Trends in
Theory and Practice of Computer Science, 2010.
2009
S. Oster, F. Markert, A. Schürr: „Integrated Modeling of Software Product
Lines with Feature Models and Classification Trees“, Workshop Proceedings
of the 13th International Software Product Line Conference, 2009.
136
BETREUTE ARBEITEN
Studien- und Bachelorarbeiten
Till Müller, „Entwurf, Simulation und Synthese des MAC-Layers eines PCI
Ethernet Controllers”
Eugen Bayer, „Entwurf, Simulation und Synthese des “Advanced Encryption
Standards” (AES) als Verschlüsselungsschicht eines PCI Ethernet Controllers”
David Meister, „Realisierung einer Linux-Umgebung für PowerPCs im FPGA”
Stefan Zügel, „Evaluation verschiedener HDL-Simulatoren mit Hinblick auf
Effizienz und Vollständigkeitsmetriken”
Lukas Jung, „Implementierung der Ansteuerung eines Ultraschallsensor-Arrays
in einem FPGA und Auswertung unter Linux”
David de la Chevallerie, „Implementierung der Ansteuerung eines GPS-Moduls
in einem FPGA und Auswertung unter Linux”
Felix Wienker, „Evaluation und Synthese eines OpenSPARC-Prozessors und
Integration auf einem Virtex-5 Entwicklungsboard”
Jens Dorn, „FPGA-Entwicklung eines virtuell analogen, polyphonen Synthesizers”
Björn Richerzhagen, „Implementierung und Synthese eines hardwarebeschleunigten Algorithmus zur Datenkompression”
Diplom- und Masterarbeiten
Alex Schönberger, „Entwicklung und Implementierung eines effizienten Protokolls zur optischen Multi-Gigabit Datenübertragung in einem FPGA”
Atul Athavale, „Automatisierte Generierung von Hard- und Software für Produktlinien eingebetteter Systeme”
Thorsten Kühnel, „Untersuchung von Methoden zur Bestimmung der Qualität
von Verifikationsumgebungen in der SoC-Entwicklung”
137
ERKLÄRUNG
Erklärung laut §9 PromO
Ich versichere hiermit, dass ich die vorliegende Dissertation allein und nur
unter Verwendung der angegebenen Literatur verfasst habe. Die Arbeit hat
bisher noch nicht zu Prüfungszwecken gedient.
Darmstadt, 26. Januar 2012
Florian Markert

Documentos relacionados