Entstehungsgeschichte
Ursprünglich entstand RIF im Jahr 2004 in der Automobilindustrie, vorangetrieben durch die Hersteller Initiative Software (HIS), einem Zusammenschluss der Automobilhersteller Audi, BMW, Daimler, Porsche und Volkswagen. Grund für die Schaffung von RIF war die offensichtliche Notwendigkeit, Anforderungen und Spezifikationen zwischen verschiedenen Partnern, die ihrerseits zumeist unterschiedliche RM-Tools einsetzen, auszutauschen, z.B. zwischen dem Fahrzeughersteller und dessen zahlreichen Zulieferern.
2008 wurde RIF zur Weiterentwicklung an den Verein ProSTEP iViP e.V. übergeben, welcher Lösungsansätze und Standards für das Produktdatenmanagement und die Entwicklung offener, herstellerunabhängiger PLM-Standards vorantreibt. 2010 hat ProSTEP iViP eine überarbeitete Version von RIF als sog. Request for Comments bei der OMG eingereicht. Da das Akronym RIF bei der OMG bereits für das Rule Interchange Format vergeben war, wurde RIF in ReqIF umbenannt. Anfang April 2011 wurde ReqIF dann als formaler Standard in der Version 1.0.1 veröffentlicht. Ein fiktives Einsatzszenario eines Austauschs von Anforderungsspezifikationen zwischen verschiedenen Organisationen und deren Tools zeigt die nebenstehende Abbildung.
Was ist ReqIF?
ReqIF ist ein XML-Dateiformat, mit dessen Hilfe sich komplette Anforderungsspezifikationen erstellen lassen. Wer sich die ReqIF-Spezifikation und die zugehörige XML Schema Definition (XSD) näher anschaut wird als erstes vielleicht erstaunt feststellen, das es kein XML-Element <REQUIREMENT>…</REQUIREMENT> gibt. Das liegt daran, das ReqIF mehr den Charakter eines Meta-Modells hat, d.h. der Anwender benutzt abstrakte ReqIF-Elemente, um konkrete Objekte aus seiner Anforderungsdomäne abzubilden. Das zentrale Element ist hierbei das SpecObject: der Anwender kann mit Hilfe von Typdefinitionen (SpecObjectType) festlegen, welche Typen von SpecObjects es in seinem ReqIF-Dokument geben soll. Das können z.B. natürlichsprachliche Anforderungen ("Requirement") sein, User-Stories, oder Use-Cases. Verbunden mit einem solchen SpecObjectType sind auch die Attribute, die das SpecObject enthalten darf bzw. soll. So kann z.B. definiert werden, das ein SpecObject vom Typ "Requirement" eine Enumeration vom Typ "Status" mit entsprechenden Enumerationsliteralen ("Proposed", "Accepted", "Implemented", "Verified", etc.) enthält.
Der folgende Ausschnitt aus einem ReqIF Dokument zeigt beispielhaft die Typdefinition für solche SpecObjects, die funktionale Anforderungen repräsentieren sollen. Eine funktionale Anforderung enthält zwei Attribute: die textuelle Beschreibung der Anforderung als Zeichenkette (String), sowie den Status der Anforderung, wobei es sich um einen Aufzählungstyp (Enumeration) handelt.
Die Anwendung dieses Typs mit dem Identifier "FUNC-REQ" bei einem konkreten SpecObject sieht dann so aus:
Darüber hinaus existieren auch Beziehungstypen (SpecRelationType), um Beziehungen (SpecRelation) zwischen SpecObjects ausdrücken zu können. Beispielsweise kann der Requirements Engineer damit darstellen, das zwischen einem SpecObject vom Typ "Functional Requirement" und einem weiteren SpecObject vom Typ "Use-Case" eine Verfeinerungsbeziehung ("refine") existiert, weil der Use-Case die Anforderung detaillierter beschreibt. Ebenso lassen sich damit Beziehungen zwischen Anforderungen auf unterschiedlichen Spezifikationsebenen abbilden, z.B. um die notwendige Tracability zwischen Anforderungen in einer "User Requirements Specification" zu den Anforderungen in einer "System Requirements Specification" herzustellen.
Die aus SysML bekannte Ableitungsbeziehung (derive requirement), die beschreibt, dass eine Anforderung von einer anderen Anforderung abgeleitet worden ist, kann z.B. als SpecRelationType wie folgt definiert werden:
Konkret auf zwei Anforderungen mit den ID's REQ-001 und REQ-002 angewendet, kann nun ausgedrückt werden, das REQ-002 von REQ-001 angeleitet wurde:
Wie vielseitig ReqIF einsetzbar ist wird auch dadurch deutlich, dass die Elemente SpecObjectType und SpecObject nicht nur für Anforderungen und Use-Cases verwendet werden können, sondern das es damit auch möglich ist Testfall-Typen und Testfälle abzubilden, und somit die enorm wichtige Testspezifikation (z.B. Nutzer-Akzeptanztests) in die Anforderungsspezifikationen mit aufzunehmen.
ReqIF und MBSE
Systems Engineering als interdisziplinärer Ansatz zur erfolgreichen Entwicklung, Betrieb und Wartung komplexer Systeme sieht natürlich das Requirements Engineering als zentralen Erfolgsfaktor an. Im Kontext modellbasierter Systementwicklung (MBSE) werden Anforderungen zu einem integralen Bestandteil (first class citizens) der Systemmodelle. Nicht ohne Grund kennt OMG™ SysML ein requirements diagram und entsprechende Modellelemente, um eine tracability (Nachverfolgbarkeit) von Anforderungen zu anderen Modellelementen des Systems (u.a. Systembausteine oder Testfälle) herstellen zu können. Daher liegt es Nahe, das die Generierung eines Anforderungs- und Testmodells aus einem ReqIF-Dokument in Modellierungstools in Zukunft möglich sein muss, um die notwendige Brücke zwischen Anforderungsspezifikation und der daraus resultierenden Systemarchitektur und das Systemdesign herzustellen.
Für das UML/SysML-Modellierungstool Enterprise Architect von SparxSystems existiert derzeit noch keine Funktion, um Anforderungen aus einem ReqIF-Dokument in ein Modell zu importieren bzw. ein Anforderungsmodell als ReqIf-Spezifikation zu exportieren. Auf dem Server GitHub habe ich daher ein Open-Source-Projekt aufgesetzt, um ein entsprechendes Enterprise Architect ReqIF Add-In zu entwickeln. Das Add-In kann direkt aus dem EA aufgerufen werden. Derzeit befindet es sich noch in einem sehr frühen Entwicklungsstadium und unterstützt lediglich den Import, allerdings auch noch nicht vollumfänglich. So werden derzeit u.a. die wichtigen Datatypes und einige Attributtypen noch nicht unterstützt. Das Add-In wird in der Programmiersprache C# und auf der Basis des .NET 4 Frameworks entwickelt. Über die weiteren Fortschritte werde ich hier natürlich regelmäßig berichten. Darüber hinaus würde es mich natürlich sehr freuen, den einen oder anderen Entwickler zur Mitarbeit bewegen zu können.
Fazit
ReqIF wurde entworfen, um einen standardisierten Austausch von Anforderungsspezifikationen zwischen Organisationen und deren zumeist unterschiedlichen Werkzeugen/Werkzeuglandschaften zu ermöglichen. Ich glaube, das ReqIF in Zukunft im Kontext Model Based Systems Engineering (MBSE) eine signifikante Rolle spielen wird, da Anforderungsmodellierung eine der elementaren Domänen des MBSE ist. Die Hersteller von Modellierungstools werden nicht umhinkommen, in ihren Produkten das Format in Zukunft zu unterstützen.




