ソフトウェア要求の記述単位
ISO/IEC/IEEE 29148によると、要求の書き方は
[Condition] [Subject] [Action] [Object] [Constraint]
[Condition] [Action or Constraint] [Value]
[Subject] [Action] [Value]
となる、と書かれています。 ただの枠組みなので何を書くかは対象ソフトウェアによります。
実際の業務になると、要求ごとにIDをつけて管理したりすると思うのですが、どの単位でIDをつけるかというのが議論になることがあります。いわゆる「1要求1ID」というやつです。これに失敗すると要求とのトレーサビリティをとっても必ずしも安心できない、ということが発生します。
では、「1要求」というのは何をもって1要求とするのでしょうか。
結論から言うと、純粋に1要求1IDを実現するのは不可能、だと思います。不可能というか、現実的ではない、ですね。
例えば、Windowsの電卓アプリで考えてみます。要求の一例が以下です。
要求A-1:電卓が開いている状態で×を押下した場合、電卓アプリが閉じること
ただ、類似の条件でふるまいが同じ場合、一つの要求にまとめたくなります。
要求A-2:電卓が開いている状態で×またはファイル>閉じるを押下した場合、電卓アプリが閉じること
と書きたくなります。この「または」の条件を別要求とするかは議論の余地がありそうです。また、同一条件で複数のふるまいをする場合にもどうするか問題になりそうです。
要求A-3:電卓が開いている状態で×またはファイル>閉じるを押下した場合、電卓アプリが閉じ、電卓アプリが保持しているメモリを消去すること
こんな風に書きたくなりますよね。これも1要求なのか、微妙なところです。
で、僕の意見ですが、要求仕様書という人間が読むものを書く場合は、理解しやすければまとめて書いてしまう、で問題ないと思っています。ですが、それを機械的に扱う場合(例えばトレーサビリティを取るなど)には、その要求を細分化して最小単位にして扱う必要がある、と思います。要求A-3-1, 要求A-3-2などなど、です。
そうすることで、人にも優しく、機械にも優しい要求仕様となるのかな、と。実際にまだ試していないですが、次要求仕様を書く機会があれば試してみようと思います。