Automatische Generierung Von Feature-Orientierten Produktlinien Aus Varianten Von Funktionsblockorientierten Modellen
Total Page:16
File Type:pdf, Size:1020Kb
Uwe Ryssel Automatische Generierung von feature-orientierten Produktlinien aus Varianten von funktionsblockorientierten Modellen Automatische Generierung von feature-orientierten Produktlinien aus Varianten von funktionsblockorientierten Modellen Dissertation zur Erlangung des akademischen Grades Doktoringenieur (Dr.-Ing.) vorgelegt an der Technischen Universität Dresden Fakultät Informatik eingereicht von Dipl.-Inf. Uwe Ryssel geboren am 1. Juli 1980 in Pirna Gutachter: Prof. Dr.-Ing. habil. Klaus Kabitzsch, Technische Universität Dresden Prof. Dr. rer. nat. habil. Gunter Saake, Universität Magdeburg Tag der Einreichung: 28. November 2013 Tag der Verteidigung: 24. April 2014 Dresden im November 2014 Inhaltsverzeichnis 1. Einleitung 1 1.1. Problemstellung . 2 1.2. Zielstellung . 5 2. Softwareproduktlinien und deren Erzeugung 7 2.1. Softwareproduktlinien . 7 2.1.1. Domänenanalyse . 8 2.1.2. Domänenentwurf und -implementierung . 11 2.1.3. Multi-Softwareproduktlinien . 13 2.1.4. Anwendungsentwicklung . 14 2.2. Erzeugung und Refactoring von Produktlinien . 14 2.2.1. Refactoring von Produktlinien . 14 2.2.2. Finden der Abhängigkeiten zwischen den Features . 19 2.3. Voraussetzungen und Anforderungen an eine automatisierte Migra- tion . 20 2.4. Lösungskonzept . 22 3. Funktionsblockorientierte Modelle 25 3.1. Standards und Spezifikationen . 25 3.2. Ein Metamodell für funktionsblockorientierte Modelle . 32 3.3. Funktionsblockmodelle in MATLAB/Simulink . 35 3.3.1. Das Simulink-Metamodell . 35 3.3.2. Variabilität in Simulink-Modellen . 40 3.4. Eine Regelkreisbibliothek als Beispielmodell . 43 4. Identifikation von Varianten und Erstellung der Modell-Templates 45 4.1. Ausgangspunkt und Lösungsidee . 45 4.2. Clusteranalyse . 46 4.2.1. Hierarchische Verfahren . 47 4.2.2. Partitionierende Verfahren . 48 4.2.3. Dichtebasierte Verfahren . 49 4.2.4. Inkrementelle Verfahren . 50 4.2.5. Fazit . 50 4.3. Model-Matching . 51 4.3.1. Matching und dessen Anwendungsgebiete . 51 v Inhaltsverzeichnis 4.3.2. Klassifizierung von Model-Matching-Verfahren . 52 4.3.3. Frameworks . 54 4.3.4. Ansätze für das Matching von Simulink-Modellen . 55 4.3.5. Fazit . 56 4.4. Model-Matching für funktionsblockorientierte Modelle . 56 4.4.1. Paarbildung in der Modellhierarchie . 56 4.4.2. Vergleichskriterien bei funktionsblockorientierten Modellen . 58 4.4.3. Ähnlichkeitsermittlung von Subsystemen am Beispiel . 60 4.4.4. Bestes Matching und Modellähnlichkeit . 62 4.4.5. Schneller Vorvergleich . 64 4.5. Clustering der Subsysteme . 65 4.5.1. Agglomerierendes Single-Linkage-Clustering der Subsysteme 65 4.5.2. Dichtebasiertes Clustering der Subsysteme . 67 4.5.3. Komplexität beider Verfahren . 70 4.5.4. Nutzerintegration zum Finden der optimalen Lösung . 71 4.6. Variantenübergreifendes Matching . 73 4.6.1. Variantenübergreifendes Matching der Funktionsblöcke . 73 4.6.2. Variantenübergreifendes Matching von Subsystemfunktions- blöcken . 79 4.6.3. Variantenübergreifendes Matching von Verbindungen und Parameterzuweisungen . 80 4.6.4. Erstellen des Modell-Templates . 81 4.7. Identifikation der Features . 82 4.8. Zusammenfassung . 83 5. Synthese von Feature-Modellen und Feature-Mappings 85 5.1. Ausgangspunkt und Lösungsidee . 85 5.2. Existierende Verfahren zur Feature-Modell-Synthese . 86 5.2.1. Ansätze basierend auf aussagenlogischen Formeln . 87 5.2.2. Ansätze basierend auf der Formalen Begriffsanalyse . 88 5.2.3. Andere Ansätze . 89 5.2.4. Fazit . 89 5.3. Grundlagen der Formalen Begriffsanalyse . 90 5.3.1. Mathematische Grundlagen . 90 5.3.2. Algorithmen . 96 5.4. Extraktion des Feature-Diagramms . 100 5.4.1. Aufstellen der Grundstruktur . 100 5.4.2. Redundante Features . 105 5.4.3. Implikationen zwischen Features . 110 5.4.4. Entfernen redundanter Features . 120 5.4.5. Inklusiv-Oder- und Alternativ-Relationen . 121 5.4.6. Reduzierung auf einen Feature-Baum . 127 vi Inhaltsverzeichnis 5.4.7. Vergleich der Komplexität zur DNF-basierten Methode . 141 5.5. Extraktion der Feature-Constraints . 143 5.6. Aufstellen des Feature-Mappings . 145 5.7. Zusammenführen zu einer Multi-Softwareproduktlinie . 148 5.8. Umsetzung in FeatureMapper . 150 5.8.1. Feature-Modell . 150 5.8.2. Feature-Mapping . 151 5.8.3. Generieren von Produktlinien-Instanzen . 151 5.9. Zusammenfassung . 151 6. Bewertung der Lösung 153 6.1. Validierung der Lösung . 153 6.1.1. Gültigkeit des Modell-Templates . 153 6.1.2. Gültigkeit der Features und des Feature-Mappings . 155 6.1.3. Gültigkeit der Synthese von Feature-Modellen . 156 6.1.4. Gültigkeit der Multiproduktlinie . 157 6.1.5. Fazit . 158 6.2. Eine Simulink-Fallstudie zur Evaluation der Lösung . 158 6.2.1. Verwendete Simulink-Fallstudienbeispiele . 158 6.2.2. Transformation von Simulink-Modellen ins FB-Metamodell . 159 6.2.3. Die generierte Multiproduktlinie Regelkreise . 160 6.2.4. Bewertung des Model-Matchings . 176 6.2.5. Bewertung der Variantenidentifikation . 183 6.3. Performance der Lösung . 189 6.3.1. Performance des Model-Matchings . 189 6.3.2. Performance der Implikationsberechnung . 192 6.3.3. Performance der Berechnung der Feature-Relationen . 192 6.3.4. Auswahl der Feature-Relationen . 193 6.3.5. Performance-Vergleich zwischen FCA- und DNF-basierter Be- rechnung der Feature-Relationen . 195 6.3.6. Gesamtperformance . 204 6.4. Zusammenfassung . 204 7. Zusammenfassung und Ausblick 207 7.1. Zusammenfassung . 207 7.2. Ausblick . 210 7.2.1. Nutzerintegration . 210 7.2.2. Semantik im Model-Matching . 211 7.2.3. Zulassen von neuen Varianten . 211 7.2.4. Übertragbarkeit auf andere Modellklassen und Code . 213 vii Inhaltsverzeichnis A. Algorithmen 217 A.1. Aufzählen aller minimalen Mengenüberdeckungen . 217 B. Tabellen 221 Abbildungsverzeichnis 225 Tabellenverzeichnis 229 Algorithmenverzeichnis 231 Literaturverzeichnis 233 viii 1. Einleitung Eingebettete Systeme, d. h. Mikrocontroller, die mit Sensoren und Aktoren agieren, werden seit langer Zeit zur Steuerung und Regelung in vielen Anwendungen ein- gesetzt. So wurde bereits 1970 ein eingebettetes System in einem Militärflugzeug zur Verarbeitung und Anzeige von Sensorwerten verwendet [63]. Jedoch wurden Mikrocontroller erst in den 1980er Jahren so erschwinglich, dass eingebettete Sys- teme auch in größeren Mengen, beispielsweise in Kraftfahrzeugen, Haushaltsgerä- ten und Geldautomaten, eingesetzt werden konnten. Die Programmierung des eingebetteten Systems in [63] erfolgte am Anfang di- rekt in Maschinencode, da zu der Zeit noch kein Assembler zur Verfügung stand, der mit dem Befehlssatz und den Datenflüssen zwischen den enthaltenen Rechen- einheiten umgehen konnte. Später wurden hardware-abhängige, maschinennahe Assemblersprachen ver- wendet, die einen Teil der Komplexität des Maschinencodes abstrahieren konn- ten. Der Nachteil dieser Sprachen war, dass gleiche Algorithmen und Funktionen immer noch für jede Hardware neugeschrieben werden mussten. Der Einsatz von hardware-unabhängigen, imperativen Sprachen, wie ANSI C, erlaubte eine portable Programmierung von eingebettenen Systemen. Da sich die Komplexität von Funktionen, die von eingebetteten Systemen erfüllt werden soll- ten, immer weiter erhöhte und diese komplexen Funktionen auch in sicherheits- relevanten Bereichen wie der Steuerung von Flugzeugen eingesetzt wurden, war eine Programmierung in imperativen Sprachen nicht mehr anforderungsgerecht. Im Automobilbau kam noch der Kostendruck hinzu, da dort neue Fahrzeugmo- delle und damit auch neue Funktionen in den eingebetteten Systemen in immer kürzeren Zyklen entwickelt werden. Aus diesem Grund werden zunehmend graphische Programmiersprachen ge- nutzt, welche die Komplexität der Funktionen in graphischen Blöcken, den soge- nannten Funktionsblöcken, kapseln. Diese werden vom Nutzer auf einer Zeichenflä- che platziert und deren Aus- und Eingänge, die einzelnen Signalen entsprechen, mit Linien verbunden, um ein Gesamtsystem zu entwickeln. Beispiele für solche Programmiersprachen sind Matlab/Simulink [149] und LabVIEW [102]. Abbil- dung 1.1 zeigt ein Beispiel für die Darstellung von verbundenen Funktionsblöcken in Simulink. Die graphische Programmierung ist eine Form der sogenannten modellbasierten Softwareentwicklung (MDSD), bei der mithilfe von Werkzeugen aus graphischen Modellen automatisiert lauffähiger Code für eingebettete Systeme generiert wer- 1 1. Einleitung Q1 1 p1 1 Q p Q2 T4 -K- 2 QL F scale p2 T8 x x1 1 1e5 F1 z v v1 Constant3 pL Unit Delay1 a x2 T11 G5 F2 V1 v2 T9 T12 G6 F V2 Compression spring T13 Cylinder+mass double rod horizontal Abbildung 1.1.: Entwurf mit Funktionsblöcken in Simulink den kann [141]. Für Simulink-Modelle wird dies beispielsweise mit dem Simulink Coder (ehemals Real-Time Workshop) [150] realisiert. Neben der Entwicklung von eingebetteten Systemen werden graphische Pro- grammiersprachen auch für Simulationen und für die Messwertverarbeitung ver- wendet. Simuliert werden kann beispielsweise die Umgebung von eingebetteten Systemen im Automotive-Bereich, um diese Systeme unter kritischen Situationen testen zu können, die in der Realität nur mit hohem Aufwand bzw. Risiko erreicht werden [136]. Ein Beispiel ist die Simulation des physikalischen Verhaltens der Bremse für den Test eines Bremssystems. Bei der Messwertverarbeitung werden Signale von realen Systemen aufgezeichnet und über einzelne graphisch editierba- re Operatoren transformiert und für den Nutzer aufbereitet angezeigt. Einige der graphischen Programmiersprachen sind auch standardisiert: Beispie- le hierfür sind die Funktionsbausteinsprache (FBS) [64] für speicherprogrammier- bare Steuerungen und das Funktionsbausteinkonzept