JA EN
体系開発プロセス
·★ 会員·14分で読めます

要件定義の技術 — 「言われた通り」が失敗する理由

依頼者の言葉をそのまま実装すると、なぜ動くのに使われないものができるのか。顕在要求と潜在要求、ユースケース、非機能要件の数値化、そして曖昧さをその場で炙り出す質問の型を、前提知識ゼロから解説します。

対象textタスクsystems

4分の1インチのドリルと、4分の1インチの穴

マーケティングの古典に「人はドリルが欲しいのではない、穴が欲しいのだ」という言い回しがあります。依頼者が口にするのは道具の名前で、本当に必要なのは結果のほうだ、という話です。

ソフトウェアの現場でも同じことが起きます。「CSVでダウンロードできるボタンを付けてほしい」と言われて、その通りボタンを付ける。動くものは納品され、検収も通る。ところが半年後、その機能はほとんど使われていません。改めて聞くと、依頼者がやりたかったのは「月末に経理へ数字を渡すこと」で、CSVは相談の時点で思いついた唯一の手段だっただけでした。本当に効いたのは会計システムへ自動で送る仕組みだったかもしれません。

「言われた通りに作りました」は、失敗の弁明としては最も通りやすく、最も何も救わない言葉です。要件定義とは、依頼者の言葉を鵜呑みにも無視にもせず、その裏にある目的まで降りたうえで、検証できる形に書き直す作業のことです。書き直した結果が元の言葉と同じになることもありますが、確かめたうえで同じなのと確かめずに同じなのとでは、後で起きることがまったく違います。

要求は3階建てになっている

依頼者の頭の中にあるものは、口に出される順に並んでいるわけではありません。おおまかに3つの層に分かれています。

顕在要求は、依頼者が自分で言葉にできるものです。「CSVを出したい」「ログイン画面が欲しい」。これは聞けば出てきます。ただし出てきた時点ですでに、依頼者なりの解決策の形をしています。

潜在要求は、あれば喜ぶのに自分からは言えないものです。理由は単純で、そういうものが作れると知らないからです。「毎月20分かけて手で転記している」という事実は、聞き方さえ変えれば出てきます。しかし「その転記を自動化してほしい」という要求の形では、まず出てきません。人は自分が知っている選択肢の中でしか要求を組み立てられないからです。

暗黙の前提は、当たり前すぎて言葉にする価値がないと思われているものです。「金額がずれない」「他人の給与が見えない」「保存を押したら保存される」。満たしても誰も褒めませんが、破ると一発で信用を失います。品質工学の狩野モデルはこの非対称性を、当たり前品質(あって当然、無いと不満)と魅力的品質(無くても不満ではないが、あると嬉しい)に分けて説明しています。要件定義で事故になるのは前者で、誰も言わなかったせいで誰も実装せず、リリース後に「そんなの当たり前でしょう」と言われる層です。

顕在要求だけを丁寧に拾って作ると何が起きるか。聞き取れた事例に対しては完璧に動き、聞き取れなかった事例で急に崩れるシステムができます。これは機械学習の過学習とよく似た形をしています。

FIG 1たとえ話として。ヒアリングで出た事例(訓練データ)に合わせ込むほど、そこでの誤差は下がるのに、聞けなかったケース(テストデータ)での誤差は途中から上がっていく。次数スライダーが「言われた通りへの合わせ込みの強さ」に当たります

「要求」と「要件」は別の言葉

日本語だと1文字違いで紛らわしいのですが、この2つは工程が違います。要件工学の国際規格 ISO/IEC/IEEE 29148 は、利害関係者の要求(stakeholder requirements)とシステム要件(system requirements)を明確に別の成果物として扱っています。

「経理への転記をなくしたい」は要求です。「システムは、締め日の翌営業日09:00までに、当月分の仕訳データを会計システムのAPIへ送信しなければならない」は要件です。後者は、満たしたかどうかを人によらず判定できます。要件の良し悪しを測る基準はここに尽きます — 読んだ人が全員同じテストを書けるか

ユースケース: 主語を人に戻す

機能を箇条書きにすると、いつのまにか主語がシステムだけになり、「誰が、何のために、どういう順序で」が抜け落ちます。ユースケースは、それを人の側から書き直す形式です。最低限、次の要素があれば形になります。

価値の大半は代替フローと事後条件にあります。主シナリオは誰が書いてもだいたい同じものになりますが、代替フローを書こうとすると「そこで失敗したらどうするんですか」という問いが必ず発生し、それが未定義であることがその場で露見します。事後条件は、検収のときに何を見れば合格と言えるかを先に決める作業です。

機能要件が「何ができるか」なら、非機能要件は「どのくらいの品質でできるか」です。ISO/IEC 25010 は、性能効率性・信頼性・セキュリティ・保守性・使用性などの品質特性としてこれを整理しています。厄介なのは、非機能要件が設計を後戻りできない形で縛ることです。機能はあとから足せますが、「1秒以内」「無停止で更新できる」は、アーキテクチャを決めたあとで足すのが極端に高くつきます。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です