3 Konfigurationsmöglichkeiten von Software

3.2.2 Programmierparadigmen



3.2.2.1 Generative Programmierung

Ausgehend von den bereits beschriebenen Ansprüchen von Softwareentwicklung modelliert die ganzheitliche Generative Programmierung Softwaresysteme so, dass „ausgehend von einer Anforderungsspezifikation mittels Konfigurationswissen aus elementaren, wiederverwendbaren Implementierungskomponenten ein hochangepasstes und optimiertes Zwischenoder Endprodukt nach Bedarf automatisch erzeugt werden kann“87.
Dazu verwendet die Generative Programmierung aufeinander abgestimmte Methoden und Techniken zur Entwicklung von Softwaresystemfamilien. Wesentliche Bestandteile des Generativen Programmierens sind die merkmalbasierte Modellierung von Gemeinsamkeiten und Unterschieden der Familienmitglieder und die Entwicklung von Sprachmitteln zur Beschreibung einzelner Systeme sowie die Entwicklung von Generatoren, die diese aufgrund ermittelter Anforderungen weitgehend automatisch erzeugen87.
Die Vorgehensweise des Generativen Programmierens ist in der folgenden Abbildung dargestellt:


Abbildung 4: Systemfamilienentwicklung nach Czarnecki88
Die grundlegenden Bestandteile des Generativen Programmierens sind das Domain Engineering und das Application Engineering. Im Domain Engineering wird zuerst das Umfeld analysiert: Welche Personen mit welchen Interessen sind beteiligt, welche Anforderungen werden gestellt. Im wichtigsten Teil, dem Merkmalmodell wird zusammenfasst, welche Beziehungen die Merkmale der Familie haben. Ein solches Modell ist z.B. das in Kapitel 2.1.2 vorgestellte FORE-Modell. Zur Konsistenzüberprüfung des Merkmalmodells gibt es derzeit an der TU Ilmenau ein Forschungsprojekt. Für die pluginbasierte Software Eclipse gibt es bereits ein solches Überprüfungsplugin namens pure::variants89.
Dazu müssen Tabellen und Bibliotheken entstehen, die das entsprechende Wissen über Abhängigkeiten, Wechselwirkungen, Beschreibungen, Herkunft und Verwendung von Merkmalen, sowie die Standardvorgaben, Bindungszeitpunkte etc. protokollieren. Daraus lässt sich ableiten, welche Funktionen im Basissystem zwingend dazugehören müssen und welche sich optional in Familienmitgliedern realisieren lassen. Dafür muss untersucht werden, welche relevanten Bausteine sich in entsprechenden Kategorien verschiedener Implementierungen zusammenfassen lassen und welche Abhängigkeiten bestehen.
Grundstein dieses Vorgehens ist das Generative Domain Model, welches den Problemraum, also die Fachbereiche und die spezifischen Anforderungen enthält, den Lösungsraum, der alle Komponenten des Systems beschreibt, und das Konfigurationswissen, welches den Bauplan für die Komponenten zur Lösung konkreter Problembeschreibungen liefert.
Diese Ergebnisse fließen in den Entwurf der flexiblen Softwarearchitektur für die komplette Anwendungsfamilie und werden dann von wieder verwendbaren Komponenten, einer dafür entwickelten domänenspezifischen Beschreibungssprache, der Domain Specific Language, und von Konfigurationsgeneratoren implementiert. Die Ergebnisse des Domain Engineering sind eine Art Katalog für mögliche automatische Ableitungen ähnlich einer Angebotsbroschüre von Automobilherstellern. Dieser Katalog ist die Grundlage für die Entwicklung echter Kundenanwendungen im Application Engineering. Hier werden die spezifischen Kundenanforderungen erhoben und mittels der bestehenden Komponenten, Sprachen und Generatoren mit Hilfe von Templates und dem Konfigurationswissen zusammengesetzt. Anforderungen, die hier neu erhoben werden, fließen über das nötige Konfigurationsmanagement wieder in das Domain Engineering ein90.
Das Vorgehen des Generativen Programmierens hat folgende Vor- und Nachteile:

Bewertung der Generative Programmierung91
Vorteile Nachteile
  • Ganzheitliches Konzept
  • Fokussiert Softwareerstellung auf „Knopfdruck“
  • Verringert den Rückstand der Softwareentwicklung gegenüber der Industrie
  • Komponentenbasierte Denkweise verbessert Wartung von Einzelteilen und die parallele Entwicklung
  • Kürzere Entwicklungszeit bei höherer Produktivität
  • Zukunftsweisendes Vorgehen
  • Fehlerreduzierung durch Automatisierung, Fehlerbehebung direkt im Lösungsraum
  • Aufteilung in einzelne Abschnitte erleichtert Projektmanagement mit kürzeren Analyse- und Einwicklungszeiten von Varianten
  • Plattform- und Programmiersprachenunabhängigkeit
  • Im bestehenden System übernimmt der Generator die Codegenerierung, Programmierer werden entlastet
  • Das Domain Engineering ist ein fehleranfälliger Prozess, hier vergessene Features führen zu eingeschränkten Entwicklungsmöglichkeiten
  • Überarbeitungen sind hier schwierig und langwierig
  • Der Aufwand ist enorm, es können Jahre bis zum ersten Produkt vergehen
  • Die Vielschichtigkeit erfordert sehr erfahrene Teammitglieder
  • Integrationsprobleme bei Verwendung verschiedener Programmiersprachen für die Ableitung und damit verbundene Performanceprobleme

  • Tabelle 14: Bewertung der Generativen Programmierung



     


    Top| Home| << Zurück | Nächste >>
    " TARGET="_blank"> >> Home Page <<