30.06.2014 Aufrufe

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!