Anforderungsmanagement mit RMF und ProR

ProR integrieren

Es ist schön und gut, Anforderungen strukturiert zu erfassen, aber der eigentliche Mehrwert kommt durch die Integration von ProR in bestehende Werkzeugketten. Das ist bis zu einem gewissen Grad durch den ReqIf-Standard gegeben. Aber dank Eclipse können wir noch ein gutes Stück weitergehen.

ProR bietet einen Extension Point an, über den so genannte Präsentationen in die GUI und das Modell eingeklinkt werden. Eine Präsentation besteht aus einer Serviceklasse und aus einem Datenelement, das sich in das Modell einklinkt. Wie das in der Praxis aussieht, haben wir ja eben schon bei der ID-Generierung gesehen. Die Serviceklasse bietet viele Möglichkeiten, die GUI anzupassen und mit anderen Eclipse-basierten Werkzeugen zu integrieren. Die Serviceklasse muss das Interface PresentationService implementieren. Oft bietet es sich an, die abstrakte Klasse AbstractPresentationService zu überschreiben, die für alle Methoden eine Default-Implementierung zur Verfügung stellt. Das Datenelement erlaubt es der Präsentation, eigene Daten abzulegen. ReqIf hat eigens das Vater-Element ReqIfToolExtension, das Werkzeuge beliebig nutzen dürfen. Präsentationen müssen immer mit einer DatatypeDefinition assoziiert sein. Warum das so ist und wie das funktioniert, werden wir gleich sehen. Was kann man mit Präsentationen überhaupt machen? Wir stellen im Folgenden drei einfache Präsentationen vor und beschreiben anschließend, wie diese in ProR realisiert wurden.

HeadlinePresentation: Da im Moment noch kein formatierter Text unterstützt wird, haben wir die HeadlinePresentation entwickelt. Dieses erlaubt es, bestimmte Attribute in einer größeren Schrift darzustellen, ohne auf Rich Text zugreifen zu müssen. Dabei wird die Präsentation mit einer DatatypeDefinition vom Typ String assoziiert. Alle Attribute, die diese DatatypeDefinition nutzen, werden dann groß und fett dargestellt.

IDPresentation: Die von ReqIf vergebenen IDs sind für Menschen nicht gut lesbar, für uns ist eine ID wie REQ-27 wesentlich einfacher zu handhaben. Diese Präsentation hatten wir ja bereits vorgestellt.

RodinPresentation: Rodin [3] ist ein Eclipse-basiertes Werkzeug für die formale Modellierung. Wir wollen auf das Werkzeug nicht im Detail eingehen; wichtig zu wissen ist jedoch, dass Systemelemente mit Variablen und anderen Konstrukten modelliert werden können. Wir wollen bestimmte Konstrukte des Modells mit Anforderungen assoziieren (z. B. eine Variable im Modell mit deren textueller Definition im Anforderungsdokument). Unsere Präsentation erlaubt es, per Drag and Drop solche Verbindungen herzustellen und die Modellelemente direkt im Anforderungsdokument anzuzeigen.

Wie können nun diese Präsentationen mit ProR realisiert werden? Für eine Präsentation wird zunächst ein neues Plug-in angelegt, das den Extension Point org.eclipse.rmf.pror.reqif10.presentation implementiert und ein eigenes EMF-Modell hat, das ProrPresentationConfiguration erweitert. Fast alles Weitere wird durch die Implementierung der Serviceklasse geregelt, die das Interface PresentationService implementiert. Schauen wir uns einmal einige ausgewählte Methoden dieses Interface an: IProrCellRenderer getCellRenderer(AttributeValue av); . Diese Methode erlaubt es, einen alternativen CellRenderer zu implementieren (um den Default Renderer zu nutzen, wird null zurückgegeben). Wir überschreiben diese Methode für die HeadlinePresentation und stellen einen Renderer zu Verfügung, der die Schrift anpasst. Das System garantiert, dass der übergebene AttributeValue die korrekte DatatypeDefinition hat, die über das Modellelement HeadlineConfiguration konfiguriert wurde. Schauen wir uns nun die HeadlineConfiguration genauer an. Abbildung 6 zeigt den entsprechenden Teil des Modells. Wir sehen, dass HeadlineConfiguration ein neues Attribut aufweist (size). Da HeadlineConfiguration von ProRPresenationConfiguration erbt, hat es ebenfalls das Attribut datatype, über das wir die relevanten AttributeValues identifizieren. Nun zu weiteren Methoden von PresentationService:

Abb. 6: Das EMF-Modell für die HeadlinePresentation
CellEditor getCellEditor(AgileGrid agileGrid, EditingDomain editingDomain, AttributeValue av);

Ähnlich wie beim CellRenderer kann man auch einen CellEditor einklinken. Wir können beispielsweise einen Xtext-basierten Editor einbinden, sodass beim Editieren Syntax Highlighting, Autocompletion und ähnliche Features zur Verfügung stehen. Wie beim Renderer kann der Default-Editor benutzt werden, indem null zurückgegeben wird. Die Methode public void openReqIf(ReqIf reqif) erlaubt einer Präsentation, sich direkt beim Öffnen des ReqIf-Modells in dieses einzuklinken. Wir nutzen das bei unserer IdPresentation, um bei neu eingefügten Elementen eine neue ID zu vergeben. Sobald die Präsentation das ReqIf-Objekt erhalten hat, kann man die normalen EMF-Mechanismen benutzen (Notifier, Adpater etc.):

public Command handleDragAndDrop(Collection> source, Object target, EditingDomain editingDomain, int operation)

Um eine wirklich intuitive Integration in der Eclipse-Umgebung zu realisieren, ermöglichen wir es Präsentationen, Drag-and-Drop-Operationen zu bedienen. Der zurückgegebene Wert ist ein EMF Command, der dann von ProR ausgeführt wird. Wir manipulieren unser Modell über Commands, damit Undo, Redo und ähnliche Funktionen wie gewohnt funktionieren. Wir benutzen diesen Mechanismus zum Beispiel für die Rodin-Integration. Modellelemente werden in einer Baumstruktur dargestellt und können direkt in den ReqIf-Editor gezogen werden, wo sie dann entweder visualisiert oder verlinkt werden. Um diese Elemente überhaupt darstellen zu können, enthält das ReqIf-Attribut lediglich die ID des referenzierten Elements. Der Renderer der Präsentation findet dann den entsprechenden Inhalt und stellt ihn grafisch dar.

Fazit

Wir hoffen, mit RMF einen wertvollen Beitrag im Bereich Open-Source-Werkzeuge zum Anforderungsmanagement geleistet haben; das bisherige Interesse bestätigt das. Das Projekt ist zurzeit mächtig in Bewegung. Wir haben gerade die Eclipse-Proposal-Phase beendet (August 2011) und sind nun dabei, die Migration von Code und Entwicklungsinfrastruktur zur Eclipse Foundation durchzuführen. Parallel entwickeln wir das Werkzeug weiter. Daher ist es gut möglich, dass zum Zeitpunkt der Veröffentlichung sich bereits einiges geändert hat: Namen werden angepasst, Code wird umstrukturiert, neue Features implementiert. Aktuelle Informationen gibt es auf unserer Eclipse-Seite [1]. Und wir freuen uns auf viele Rückmeldungen im Eclipse-Forum [4].

Michael Jastram ist Gründer und Geschäftsführer der Formal Mind
GmbH, einem Spin-Off der Universität Düsseldorf, wo er zurzeit
auch promoviert. Sein Forschungsschwerpunkt ist die Integration
und Nachverfolgbarkeit zwischen Anforderungen und formalen
Spezifikationen. Er ist Gründer und Vorsitzender der Düsseldorfer
Java User Group (rheinjug e.V.) und Mitverfasser des Buchs „Eclipse Rich Client
Platform“ (2008). Bevor er zwei Jahre für die HOOD Group als Abteilungsleiter
der Software Division tätig war, hat er zehn Jahre lang als
Softwareentwickler
im US-amerikanischen Umfeld Erfahrung gesammelt. Er
machte 1997 einen Doppelabschluss mit einem Dipl.-Ing. von der Universität
Hamburg und einen Master of Science vom Massachusetts Institute of Technology
in Cambridge, USA.

Andreas Graf ist Business Development Manager Automotive bei
itemis.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.