MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
30 Kapitel 2 – Entwurf und Einsatz <strong>von</strong> DSLs in der Softwareentwicklung<br />
2.3.4 Validierung/Verifikation<br />
Die Validierung und Verifikation <strong>von</strong> DSL-Werkzeugen dient zur Qualitätssicherung innerhalb<br />
der Softwareentwicklung. Dadurch kann gesichert werden, dass die vom Entwickler<br />
erstellten DSL-Modelle, sofern sie zu den fachlichen Anforderungen passen, auch korrekt<br />
in ein Softwaresystem übersetzt werden.<br />
Für die Validierung der DSL sollten positive und negative Testfälle verwendet werden.<br />
Bei generativen Ansätzen ist eine erfolgreiche Kompilierung der erzeugten Ausgabedateien<br />
ein erster positiver Test. Dieser sollte, sofern dieses möglich ist, durch die Ausführung des<br />
generierten Quellcodes und die Überprüfung bestimmter dynamischer Eigenschaften, die<br />
sich aus der Domäne ergeben, ergänzt werden. Diese Art der Überprüfung ist oft robust<br />
gegenüber Änderungen der Codeerzeugung, da nur die funktionalen Eigenschaften des entstehenden<br />
Quellcodes überprüft werden, und nicht die genaue Form der Implementierung.<br />
In negativen Testfällen sollte insbesondere geprüft werden, ob die Kontextbedingungen für<br />
diese Instanzen fehlschlagen und so der Entwickler eine entsprechende Fehlermeldung bekommt.<br />
Ein ausschließliches Fehlschlagen der Codegenerierung oder gar ein Erzeugen <strong>von</strong><br />
nicht übersetzbarem Quellcode sind zu vermeiden.<br />
Zur Beurteilung der Testgüte können Abdeckungskriterien [Pur72, Läm01b] auf der<br />
Sprachdefinition verwendet werden. Diese können auch konstruktiv eingesetzt werden, indem<br />
sie als Instanzgenerator verwendet werden. Da die generierten Instanzen oftmals jedoch<br />
Kontextbedingungen verletzen und die Erzeugung <strong>von</strong> Instanzen, die <strong>von</strong> menschlichen<br />
Testern als sinnvoll eingestuft werden, eine schwierige Aufgabe ist, sollte die automatische<br />
Erzeugung nur als Ergänzung manuell erstellter Instanzen verstanden werden.<br />
Als eine Alternative für die bisher dargestellten funktionalen Tests, bei denen die Abdeckung<br />
bezüglich der DSL das maßgebende Gütekriterium ist, können natürlich auch<br />
wie bei jeder Softwareentwicklung Unittests verwendet werden. Deren Güte wird dann<br />
durch die Abdeckung der Implementierung bestimmt. Diese eignen sich insbesondere für<br />
die Überprüfung der Laufzeitumgebung und weniger für die eigentliche Codegenerierung,<br />
weil hier oft aufwändige Zeichenkettenvergleiche notwendig wären und diese wenig robust<br />
gegen unwesentliche Änderungen in der Codeerzeugung sind.<br />
Ausführbare DSLs ermöglichen das Testen des Codegenerators, sofern die DSL unabhängig<br />
<strong>von</strong> der Generierung interpretiert werden kann. In [Stü06] wird dieses Vorgehen für<br />
Matlab Simulink verwendet, um Codegeneratoren für verschiedene Plattformen automatisiert<br />
testen zu können. Dazu wird die Kosimulation des Interpreters und der durch die<br />
Codegenerierung entstandenen Software mit einer automatischen Instanzerzeugung kombiniert.<br />
2.3.5 Auslieferung<br />
Die Auslieferung eines Generators umfasst die Sprachdefinition, den Generator, die Laufzeitumgebung<br />
und eine geeignete Dokumentation. Dabei ist insbesondere eine Versionierung<br />
notwendig, wenn die Generatoren fortlaufend weiterentwickelt und in unterschiedlichen<br />
Projekten eingesetzt werden.<br />
Die Integration in andere Projekte erfolgt dabei idealerweise über Build-Werkzeuge,<br />
die bereits ein Abhängigkeitsmanagement integriert haben, wie Maven [Mav] oder Ant<br />
[Ant] (mit der Erweiterung Ivy [Ivy]). So kann die komplexe Auslieferung der benötigten<br />
Generatorversion automatisiert werden, und die Entwickler verwenden stets die aktuelle<br />
Version der Software.