おかげさまで増刷を重ねてきた『[入門+実践]要求を仕様化する技術・表現する技術』がこのたび「改訂第2版」を刊行することになりました。この改訂第2版は第1版とどこが違うのかを、本書からの引用を交えて紹介させていただきます。
「要求」の表現が重要
ソフトウェア開発の現場では相次ぐ「仕様の変更」や「バグの発生」に悩まされています。その原因と考えられるのが「要求仕様」が曖昧なまま作業に入っていること。仕様のモレや仕様の勘違いにより、あいつぐ仕様の変更やバグ発生につながり、納期が近づくなかで現場のエンジニアは疲労していっています。
ではどうすればよいのか。そこで著者が提唱するのが「USDM」という手法です。開発プロジェクトのテストや実装中に発見される仕様モレや仕様の衝突が起きる最大の原因は、仕様書に「要求」が表現されないことにあるという考え方に基づいています。適切な仕様を導くためには、適切な「要求の表現」が欠かせません。しかし、いかに「要求」を捉えて表現するのかが難しいところ。本書では、要求の捉え方、「範囲」を示すことで要求を適切に表現することなどを提案します。
要求は「振る舞い」を表現しますが、振る舞いの範囲が広いままでは仕様の抽出がぶれたり、漏れたりします。その場合は「時系列分割」などの方法で分割・階層化して下位層の要求はそれぞれ範囲を狭めます。扱う振る舞いの範囲を狭くしてそこで扱うテーマを絞ることで、その中で必要な仕様の抽出を漏れにくくしていきます。
第2版では「動詞」に注目!
以上が第1版の記述です。第2版でも上記の基本的な考えは変わりませんが、より完成度を高めています。
第2版では、上位要求の表現や分割・階層化したときの下位層の要求を表現する際に「動詞」を意識することを打ち出しています。
- 機能要求は「振る舞い」であり、振る舞いは複数の「動詞」で構成される。
- 「仕様」は、基本的にこの「動詞」およびその「目的語」に存在する。つまり、「仕様化」の目的は、要求としての振る舞いに含まれる「動詞」をコンピュータに実行させることであり、場合によっては、その動詞が扱う「目的語」の中にある選択肢を行使しながら「動詞」を実行することもある。こうして抽出された仕様は、すべてソースコードになる。
- 従って、要求を表現する目的は、そこに含まれる「動詞」をすべて出し切ることにあり、そのために、必要に応じて分割・階層化を行って動詞を表現しやすくする。
という考え方です。
また、USDMでは「仕様が漏れる」というのは、要求の表現が悪いという考えですが、第2版では、これも少し踏み込んで、要求の表現そのものが悪いケースの他に、要求に含まれている「動詞」を見つけ損ねた場合に起きる、ということを追加しています。
つまり、要求を表現する意図、さらに分割・階層化の意図を「動詞」を表現するという方向をより明確に打ち出しています。
要求の階層化-内包する動詞から分割階層化した例
第1版出版以来5年あまりが過ぎましたが、この5年間に読者の皆さんから頂いたコメントや質問、著者が実際のコンサルティングのなかで新たに発見できたこと、あるいは第1版の表現の曖昧な箇所なども一緒に書き直し、「USDM」としての完成度を高めました。ご覧いただけましたら幸いです。