Drucken

ReqIF im Kontext von MBSE

ReqIF (Requirements Interchange Format, auch: RIF) ist seit April 2011 ein neuer formaler Standard der Object Management Group (OMG). Ziel von ReqIF ist es, Anforderungen samt zugehöriger Metadaten in einem standardisierten Dateiformat verlustfrei zwischen Herstellern (z.B. zwischen General- und Subunternehmern) und zwischen unterschiedlichen Requirements-Management-Tools austauschen zu können. Auch im Kontext von MBSE kann das Format nützliche Dienste leisten, ließe sich doch aus einem ReqIF-Dokument ein Anforderungsmodell in einem Modellierungswerkzeug generieren.

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.

<SPEC-OBJECT-TYPE DESC = "A functional requirement describes a function of the system, i.e. what the system must do resp. a service the system provides to its users." IDENTIFIER = "FUNC-REQ" LAST-CHANGE = "2011-06-13T10:24:18+01:00" LONG-NAME = "Functional Requirement">
  <SPEC-ATTRIBUTES>
    <ATTRIBUTE-DEFINITION-STRING DESC = "The textual description of the requirement." LAST-CHANGE = "2011-06-13T10:24:18+01:00" IDENTIFIER = "FUNC-REQ-TXT">
      <TYPE>
        <DATATYPE-DEFINITION-STRING-REF>Text</DATATYPE-DEFINITION-STRING-REF>
      </TYPE>
    </ATTRIBUTE-DEFINITION-STRING>
    <ATTRIBUTE-DEFINITION-ENUMERATION DESC = "The status of the requirement." LAST-CHANGE = "2011-06-13T10:24:18+01:00" IDENTIFIER = "FUNC-REQ-STATUS" MULTI-VALUED = "false">
      <TYPE>
        <DATATYPE-DEFINITION-ENUMERATION-REF>Status</DATATYPE-DEFINITION-ENUMERATION-REF>
      </TYPE>
    </ATTRIBUTE-DEFINITION-ENUMERATION>
  </SPEC-ATTRIBUTES>
</SPEC-OBJECT-TYPE>

Die Anwendung dieses Typs mit dem Identifier "FUNC-REQ" bei einem konkreten SpecObject sieht dann so aus:

<SPEC-OBJECT IDENTIFIER = "REQ-001" LAST-CHANGE = "2011-06-13T10:24:18+01:00" LONG-NAME = "ReqIF Import">
  <TYPE>
    <SPEC-OBJECT-TYPE-REF>FUNC-REQ</SPEC-OBJECT-TYPE-REF>
  </TYPE>
  <VALUES>
    <ATTRIBUTE-VALUE-STRING THE-VALUE = "The EA ReqIF add-in shall be able to import all parts of a ReqIF document.">
      <DEFINITION>
        <ATTRIBUTE-DEFINITION-STRING-REF>FUNC-REQ-TXT</ATTRIBUTE-DEFINITION-STRING-REF>
      </DEFINITION>
    </ATTRIBUTE-VALUE-STRING>
    <ATTRIBUTE-VALUE-ENUMERATION>
      <DEFINITION>
        <ATTRIBUTE-DEFINITION-ENUMERATION-REF>FUNC-REQ-STATUS</ATTRIBUTE-DEFINITION-ENUMERATION-REF>
      </DEFINITION>
      <VALUES>
        <ENUM-VALUE-REF>Proposed</ENUM-VALUE-REF>
      </VALUES>
    </ATTRIBUTE-VALUE-ENUMERATION>
  </VALUES>
</SPEC-OBJECT>

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:

<SPEC-RELATION-TYPE DESC = "The deriveReqt relationship can be used to specify when one requirement is a derivation from another requirement. This relationship expresses the relation between a particular requirement and the requirements that support this requirement." IDENTIFIER = "deriveReqt" LAST-CHANGE = "2011-06-13T10:24:18+01:00" LONG-NAME = "Derive Requirement Relationship">
</SPEC-RELATION-TYPE>

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:

<SPEC-RELATION  IDENTIFIER = "ADB3C6E4-8014-4167-9D21-A8E13D98C6CA" LAST-CHANGE = "2011-06-13T10:24:18+01:00">
  <SOURCE>
    <SPEC-OBJECT-REF>REQ-001</SPEC-OBJECT-REF>
  </SOURCE>
  <TARGET>
    <SPEC-OBJECT-REF>REQ-002</SPEC-OBJECT-REF>
  </TARGET>
  <TYPE>
    <SPEC-RELATION-TYPE-REF>deriveReqt</SPEC-RELATION-TYPE-REF>
  </TYPE>
</SPEC-RELATION>

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.

GitHub LogoFü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.

Amazon Ads...

Hosted by...

Publicons

Google Ads...

Creative Commons License

Dieses Werk bzw. dieser Inhalt steht unter einer Creative Commons Namensnennung-Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Fork me on GitHub