# Requirements Interchange Format

RIF/ReqIF (Requirements Interchange Format, englisch Austauschformat für Anforderungen) ist ein XML-Dateiformat, mit dessen Hilfe Anforderungen samt zugehöriger Metadaten zwischen Software-Werkzeugen verschiedener Hersteller ausgetauscht werden können. Mit dem Änderungsaustauschformat zusammen ist auch eine Vorgehensweise („Workflow“) definiert, der die Übermittlung der Status von Anforderungen zwischen Auftraggeber und Auftragnehmer beschreibt. Obwohl in der Automobilindustrie entstanden, ist ReqIF ein generell für den verlustfreien Austausch von Anforderungen taugliches Format.

## Entstehungsgeschichte

Die Herstellerinitiative Software (HIS) begann 2004 unter der Bezeichnung RIF mit der Definition eines generischen Änderungsaustauschformats.
Zur weiteren Pflege wurde RIF 2008 an den ProSTEP iViP e. V. übergeben. Dort treibt eine Projektgruppe die internationale Standardisierung voran und reichte 2010 eine überarbeitete Version des Änderungsaustauschformat als Request for Comment bei der Object Management Group (OMG) ein.
Um Verwechslungen mit dem W3C-Standard RIF (dem Rule Interchange Format) zu vermeiden, wurde 2010 ReqIF als Kurzschreibweise des OMG Requirements Interchange Formats eingeführt.
Im April 2011 wurde ReqIF von der OMG in der Version 1.0.1 als formale Spezifikation (OMG Document Number: formal/2011-04-02) angenommen.
Im Oktober 2013 wurde die Version 1.1 freigegeben (OMG Document Number: formal/2013-10-01). Lediglich der Text des Standards hat sich geändert, aber nicht das XML Schema oder das zugrundeliegende Datenmodell. Daher sind ReqIF-Dateien der Versionen 1.1 und 1.0.1 äquivalent.
Im Juli 2016 wurde die Version 1.2 freigegeben (OMG Document Number: formal/2016-07-01). Wie schon bei Version 1.1 sind die Änderungen an der Spezifikation abwärts-kompatibel. Daher sind ReqIF-Dateien der Versionen 1.2, 1.1 und 1.0.1 äquivalent.

## Eigenschaften

ReqIF erlaubt mittels exchange files den Austausch von Anforderungen, Anforderungs-Attributen sowie zusätzlichen Dateien (z. B. für Grafiken) über mehrere Ebenen von Auftraggebern, Auftragnehmern und Unterauftragnehmern hinweg. Zur eindeutigen Identifizierung einer Anforderung dient dabei eine GUID, die über die gesamte Prozesskette unabhängig von Änderungen des Inhalts unverändert bleibt. Durch die Verwendung einer GUID sind auch Beziehungen zwischen verschiedenen Ebenen von Anforderungen eindeutig möglich.

## Einsatzgebiete

Anforderungen werden in erster Linie während der frühen Phasen der Produktentwicklung erfasst, gemeinsam bewertet und festgelegt. Hieraus leitet sich das primäre Einsatzgebiet von ReqIF ab, denn die Produktentwicklung erfolgt zunehmend firmenübergreifend. ReqIF wird genutzt, um Anforderungen zwischen mehreren in einem Projekt beteiligten Partnern mit möglicherweise unterschiedlichen Software-Werkzeugen auszutauschen und zu aktualisieren. Im Gegensatz zur Verwendung von Word-, Excel- oder PDF-Dateien ermöglicht ReqIF dabei den verlustfreien Datenaustausch.
Eine Vorreiterrolle beim Einsatz von ReqIF nehmen die Automobilhersteller ein, die insbesondere bei der Entwicklung von Steuergeräten ReqIF als Standard-Austauschformat fordern.
ReqIF wird inzwischen auch als Datenmodell für Implementierungen benutzt. Insbesondere ist dies bei der ReqIF Referenzimplementierung (Eclipse RMF) der Fall, die in einem Implementierer-Forum der ProStep eingesetzt wird, um sicherzustellen, dass kommerzielle Software bezüglich ReqIF interoperabel ist.

## Arbeitsweise von ReqIF

RIF/ReqIF ist ein standardisiertes Meta-Modell und ist durch ein XML-Schema definiert. RIF/ReqIF-Dateien sollen dem Schema entsprechen und enthalten sowohl die Beschreibung des Modells (der Datentypen) als auch die Daten selbst. Ein erfolgreicher Datenaustausch zwischen verschiedenen Anforderungs-Management-Werkzeugen gelingt also nur, wenn zuvor ein gemeinsames Datenmodell vereinbart wird, nachdem die RIF/ReqIF-Daten exportiert und importiert werden. Aktuell (2012) erarbeitet das „ProSTEP ReqIF Implementor Forum“ ein derartiges gemeinsames Modell und organisiert einen Test mit Werkzeugen der beteiligten Software-Hersteller, um die Interoperabilität zukünftig sicherzustellen.

## Aufbau von ReqIF-Dateien

Eine OMG-ReqIF-XML-Datei besteht aus dem Wurzelelement „REQ-IF“, in das Informationen über die Datei selbst sowie die in der Datei verwendeten Datentypen und Anforderungen eingebettet sind.
ReqIF verwendet zur Beschreibung von Anforderungen („requirements“) sogenannte specification objects mit definierbaren Attributen. Jedes Attribut eines specification objects hat jeweils einen Datentyp, darunter Boolean, Integer, Real, String, Auswahltypen mit definierten Werten oder XHTML-Texte, wodurch auch formatierte Texte und eingebettete Bilder darstellbar sind. Numerische Datentypen können projektspezifisch in ihrem Wertebereich eingeschränkt werden.
Relationen können Beziehungen zwischen Objekten darstellen, also beispielsweise Abhängigkeiten oder Widersprüche. Auch Relationen können wie Objekte Attribute besitzen.
Schließlich werden hierarchische Bäume (specifications) verwendet, um gegliederte Sichten auf die Anforderungen zu bilden, wobei Objekte in einem Baum mehrfach oder in mehreren Bäumen vorkommen können.

## Implementierungsrichtlinien

Im Rahmen des ProSTEP Implementor Forums wurden eine Anzahl von Empfehlungen ausgesprochen, die in einer Implementation Guideline zusammengefasst wurden. Zu den Empfehlungen gehört:
* Nutzung der Endungen .reqif und .reqifz (gezippte Archive) für Dateien.
* Einführung von Standard-Namen für Attribute, die von Werkzeugen dann automatisch auf die interne Darstellung übertragen werden können (ReqIF.Name, ReqIF.ForeignID, u.v. a.m.)
* Richtlinien für den Umgang mit schreibgeschützten Systemattributen
* Richtlinien für den Umgang mit DOORS-Tabellen
* Richtlinien für den Umgang mit eingebetteten Objekten
* Weitere Richtlinien zu Themen wie Conversation ID, RelationGroupType, XHTML-Vereinfachung, SpecHierarchy Zugriffsrechte und Schema Referenzierung.