すこし古いが「日経ソフトウェア」2003年8月号の第2特集に「設計/分析ができますか?」というものがある。この特集のPart3「実践!オブジェクト指向分析/設計」において(株)豆蔵の岡村敦彦氏が述べている「リクエストと要求は違う」ということについて考えてみる。
氏は記事の中でシステム開発(RUPでの定義と断わって)においては両者を以下のように定義している。
- 要求(Requirement)とは
- システムが満たすべき性能
- リクエスト(Request)とは
- して欲しいこと
その上でこの違いを明確にすることで、「システム化の対象範囲を明確にできる」
としている。
つまり、両者は似てはいるけれどもリクエストの中からシステム化されると決定されたものが要求となるという違いがある。そこにシステムと外部との境界が生まれるということなのだろう。
これをきっちり実践するならば、リクエスト・リストを作成しその中からシステム化の対象となるリクエストを要求として抽出しなければならない。この作業にはリクエストからユースケースを洗い出すことが含まれるだろう。(機能列挙)そして、要求となりうる可能性について分析する必要があるだろう。そのためには分析上は、全リクエストが洗い出されたユースケースのいずれかと関連があり、ユースケースが実装されればリクエストが満たされるということにしなければならない。
システム化の範囲を明確にすることは常に重要である。開発者サイドからすれば見積りにおおきく影響する部分であるのでとても神経を使うと思う。上述の手法は顧客のリクエストを全てリスト化するところから入るので煩わしく感じるかもしれない。しかし、顧客の生の声(*)からきっちり実現するシステム像を導くことができ、誤差の少ないシステムを提供することに近づけるだろう。
(*)リクエストとは顧客の生の声をそのままであるべきだろう。顧客との意志疎通を取るためにはそのまま管理し、変に翻訳しない方がよい。リクエスト中のムリ、ムラ、ムダの排除(翻訳)は分析の時に行い、システム範囲を決定する段階でリクエスト対する回答として提示すれば良いだろう。