要求交換フォーマット(ReqIF)を調べてみた。(3)

tacohachi2011-09-04


OMGが公開している要求交換フォーマット(ReqIF:Requirements Interchange Format)について調べている。ReqIFは、要求仕様を企業間やツール間で交換するための新しい標準だ。紛らわしいのだがちょっと古いRIFという標準の後継となっている。ただし、RIFも健在であり、今後両者はそれぞれ進化していくのか、ReqIFに統合・吸収されるのかはまだ見えてこない。以下の記事も参照のこと。

RIFはすでに高機能な要求管理ツールであるIBM DOORSやMKS Integrityなどでは対応されており、ReqIFへの対応も進んでいるようだ。すでに扱えるのかもしれない。また、EclipseではEMFベースのEclipse RMF(Requirement Modeling Framework)の開発が進められており、RIFとReqIFの両方に対応するらしい。スパークシステムズのEAもReqIFに対応して開発を開始したとアナウンスしているようだ。スパークシステムズもRaQuestというツールでReqIFへの対応を検討しているようだ。また日本でReqIFを推進する可能性のあるJasparという組織にチェンジビジョンが参加しており、アナウンスはされていないがastah*もひそかにReqIFに対応しようとしているのではないだろうか。

個人的には、スパークシステムズのEAはSysML(要求を扱える要求ダイアグラムを持っている)に対応しているので、期待が大きい。やはり、要求はWORDやEXCELなどにベタに記述するだけでは、要求間の依存関係がモデリングしにくいと思っている。

ReqIFの再利用性

要求仕様を企業間やツール間で交換できるメリットは何だろうか。要求仕様の再利用性だろう。コードの再利用は当り前だが、要求や要求仕様といったものまで再利用が進んできたのだ。過去のプロジェクトやプロダクトでの要求を、新たなプロジェクトやプロダクトで再利用するということもあるだろうが、それだけではない。どうも自動車や複写機といったファミリーで製品開発するような、派生開発が適用されるような、同じ部品を各社に提供するようなドメインでの期待が大きいようだ。部品メーカにしてみれば、同じ部品なのに各社からの要求仕様はWORDであったり、EXCELであったり、記述も不統一で苦労させられてきたのだろう。また、複写機メーカなどもファミリーやシリーズとして定期的に製品をリリースする必要があり、他社競合製品の最新情報やトレンドは、常に自社製品の仕様に反映しなければならない。製品仕様は変更要求でつぎはぎだらけとなり、構成管理しにくく、再利用も容易ではなかったはずだ。

要求が統一されたフォーマットで扱え、企業間やツール間で要求が交換できることで、要求仕様の再利用が加速するだろう。要求管理ツールや要求記述ツールでもこれまで、CSV,XML,RTFなどツール独自のフォーマットでしかImport/Exportできなかったものが、ReqIFフォーマットのインタフェースを提供するだけでよくなる。ReqIFフォーマットとWORD,EXCEL,PDFとの変換ができるツールやアドインも、今後おそらく数多く出てくるだろうからツールベンダはReqIFのImport/Exportに専念するだけでよくなるかもしれない。

話を少しもどし、RIFとReqIFはどのような差異があるものなのか、ネットで得られた情報を整理しておこう。

RIFとReqIFの差異

ReqIFはRIFから進化したものだ。RIF 1.2とReqIF 1.0には大きく4つの差異があるとの記事があった。両者のDTDは微妙に異なることを示している。

(1) 要素名に異なるものがある。例えば、RIFという要素名はREQIFになっている。SpecHierarchyRootは Specificationになっているなどだ。

(2) 仕様の型が多くなった。RIFモデルでのSpecTypesのコンセプトをご存知だろうか。SpecTypes要素は新しい型を作成できる。RIFとReqIFでは、SpecObject (インスタンス) とSpecRelation (インスタンス間の関係) は型を持つ。これが、RIFでは両方とも同じSpecType要素になるが、ReqIFではSpecObjectに対しては SpecObjectTypeという型を、SpecRelationに対してはSpecRelationTypeという型を持っている。

(3) 属性定義と値の型が多くなった。RIFはAttributeDefinitionSimpleという単一の属性定義しか待たなかった。ReqIFではAttributeDefinitionInteger, AttributeDefinitionReal, AttributeDefinitionStringといった異なったデータ型に拡張され、対応したAttributeValueInteger, AttributeValueReal, AttributeValueStringといった属性値の型も用意されている。

(4) RIFのXMLは属性(attribute)を使用していないが、ReqIFでは属性が多用されている。例えば、RIFではIDENTIFIERはXMLの要素(element)であるが、ReqIFでは XMLの属性(attribute)である。

細部については知らないのだが、この4つのポイントを見る限り、ReqIFはモデルとして、またXMLとしてより洗練されたといえる。概念をより鮮明し、必要な部分では拡張性と自由度を加えている。それでいて不要な多義を与えるような部分を排除し、仕様としての完成度が上がっている。以前に「XMLでは属性にすべきか要素にすべきか」でも書いたが、XMLの要素(element)を属性(attribute)に変更するといことは、自由度や拡張性を制限することであり、仕様として厳格さを増すことになる。

今回は以上だ。RIFとReqIFがそれぞれの路線で進化していくのか、ReqIFに統合・吸収されるのかは分からないが、当然ReqIFに一本化してくれることを期待するしかない。ReqIFの内部の説明をせずに、いきなりSpecObjectsやSpecRelationsの話を持ち出したので分かりにくかったかも知れない。次回、ReqIFの内部構造に触れてみたい。