あなたはこんな経験はありませんか?
仕様書で書いてたモノと違う!
わからないならば、もっと早く言えば良いのに。
仕様書の漏れがあって、手戻りが発生した!
勝手に判断せずに言ってくれれば良いのに。
仕様書を引き継いだけど、なぜこの仕様なのかわからない!
決まった経緯とか書いてくれれば良いのに。
私もこのような経験をたくさん経験してきました。プロジェクトマネージャーは正しく情報が伝達されているかを確認することも大事な仕事になります。インプット・アウトプットになる要求仕様書は品質を重視するために私は必ず全文チェックをするようにしています。
全文チェックをするにあたり、記載する人や機能によって品質レベルに差があります。多くの要求仕様書を見た私があなたに提案できる品質向上の方法について解説していきます。かなり多くの方法や基準がありますが、今回は重要な10選に絞っています。もっと知りたい人が多いのであれば、もっと詳しい記事にしていこうと思います。
この記事で解決できること
- 要求仕様書を書くコツを理解できる。
- 要求仕様書の抜け漏れを防ぐことができる。
- 要求仕様書のアウトプット前のチェック方法がわかる。
要求仕様書の書くコツ5選
ここでは「自動車を前進させること」を例に記載いたします。
【方法1】①何が ②どの状態で ③どうなったら ④どうする を書く
効果的な要求仕様書を作成することはプロジェクトの成功に直結します。要求仕様書を作成するには、以下の4つのポイントが重要です。
何が?
何(What)は、具体的かつ明確に定義すること
抽象的な言葉や曖昧な表現を避け、具体的で理解しやすい形で要件や機能を述べましょう。
例えば、「自動車のアクセル」だと何か明確ではないため、「自動車のアクセルペダル」と書くことが大事になります。
どの状態で?
どの状態で(When)は内部状態や外的要因をすべて定義すること
どのような状況や条件下で特定の動作や機能が発生するのかを明確に示します。その際はコンテキストが重要となります。コンテキストとは、内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすることを指しています。
例えば、「自動車が走る準備ができている状態」ではなく、「イグニッションがオンの場合」と明確な状態を定義してください。
どうなったら?
どうなったら?(How)は、詳細の状態変化を明確に定義することになります。
詳細の状態変化を明確に示します。状態変化とは、具体的にできれば数値的に記載することが望ましいです。
例えば、「アクセルペダルを踏んだら」ではなく、「アクセルペダルの角度が下方向に5度以上になったら」と書いてください。
どうする?(どうなる?)
どうする?(What to do)は、上記の何がどの状態でどうなったらの結果
曖昧な結果ではなく、具体的な動作を書きます。
「自動車が前進する」ではなく、「タイヤが前方向に回転する」「シャフトが前方向に回転する」
【方法2】なぜこの要求にしたのか?を明記
要求仕様書に要求した理由を明確に記述することは、透明性とコミュニケーションの向上につながります。その理由はいくつかのポイントがありますので、解説をしていきます。
-
理解の共有
要求仕様書は共通の理解を持つための重要な文書です。要求した理由を書くことで、なぜ特定の要求があるのかが明確になり、関係者間での認識が違うことを避けることができます。 -
意図の明確化
要求仕様書に要求した理由を記述することで、お客様への価値提供を明確にすることができます。これにより、開発者やテスターが実装やテストにおいて、要求の本質的な目的を正確に把握できます。 -
優先順位の明確化
どの要求がなぜ重要であるかを説明することで、優先順位付けが容易になります。プロジェクトが制約されたリソースや時間の中で進行する場合、要求の重要性を理解することは計画の立て直しや優先順位の変更に役立ちます。 -
変更管理
要求仕様書に要求した理由を書くことで、将来的な変更が必要な場合に、要求にどのように影響するかを容易に把握できます。これは変更管理プロセスを効果的に適用するのに役立ちます。 -
コミュニケーションの促進
要求仕様書は開発者、テスター、プロジェクトマネージャー、ステークホルダーなど様々な関係者が参照する文書です。要求した理由を書くことで、異なるバックグラウンドを持つ関係者間でのコミュニケーションが促進されます。
例えば、「アクセルペダルの角度が下方向に5度以上になったら」の角度が5度を取っている理由は何か?10度に変更しても良いのかが後でわからずに、大丈夫でしょうと10度に変更したら、リコールにつながってしまったということがあり得ます。
法律で決められていることや、お客様の使い勝手を何百人の被験者で調査したとか、仕様定義には必ず定義した理由があります。あなたは当たり前だと思っていても、他の人にとっては当たり前ではないことも多いです。
そのため、しっかりとなぜこの要求にしたのかは明記しておきましょう。
【方法3】具体的な例を入れる
具体的な例を入れるとは?例えば、自動車が前進する機能では、「ユーザーがアクセルペダルを踏むと、自動車は前進すること。」と明記するようなイメージとなります。
なぜ具体例を入れるのかのポイントを解説します。
-
理解の容易化
具体的な例は抽象的な概念を具体的かつ現実的な状況に結びつけます。これにより、関係者が要求を理解しやすくなり、誤解を避けることができます。例を通じて、具体的なケースでの動作や挙動がどのように期待されているかを明示できます。 -
開発者やテスターへのガイダンス
具体的な例は開発者やテスターにとってのガイダンスとなります。抽象的な要求だけでは、実際の実装やテストが難しくなります。具体的な例を挙げることで、要求の実現方法やテストケースを開発者やテスターが理解しやすくなります。 -
顧客との確認や合意形成
具体的な例は顧客との確認や合意形成のプロセスを支援します。抽象的な要求だけでは、顧客と開発チームの期待がズレる可能性があります。具体的な例を挙げることで、顧客が望んでいる機能や動作に対して、開発チームとの間で明確な合意を築くのに役立ちます。 -
エッジケースの考慮
具体的な例を含めることで、エッジケースや極端なシナリオに対する要求も明確になります。これにより、開発やテストの際にエッジケースが見落とされないようになります。 -
変更管理のサポート
具体的な例を挙げることで、将来的な変更が必要な場合にも、変更がプロジェクトの全体的な要求にどのように影響するかを評価しやすくなります。変更が必要な場合、具体的な例を参照することで、変更の範囲や影響をより正確に理解できます。
【方法4】制約を明確に
制約事項は明確に入れてください。でも、制約事項って何でしょうか?自動車を前進させる機能の場合は、例えば「ブレーキペダルと同時に検知した場合はブレーキを優先すること」や「パーキングブレーキを入れている時は、前進をやめる」等です。
制約事項を入れるポイントを解説します。
-
開発者へのガイダンス
制約事項は開発者に対して特定の制限や条件を提供します。これにより、開発者は実装段階で必要な制約を理解し、それに基づいて機能を開発できます。制約がない場合、開発者は不確実性や誤解を抱える可能性があります。 - 品質管理の向上
制約事項は品質管理に寄与します。特定の制約がある場合、それが満たされているかどうかを検証することができます。これにより、システムが制約を満たし、期待通りの品質を持つことが確保されます。 - コスト削減
制約事項が早い段階で明示されることで、開発プロセスやプロジェクトの進行において追加の手戻りや修正が発生しにくくなります。これにより、コストの削減やプロジェクトの効率向上が期待できます。
【方法5】要求は単純化
要求は単純になっていた方が良いです。そんなの当たり前でしょと思っている人ほど、自分には理解できるが人には理解しづらい要求をしがちです。結果的に誤解を招いてしまう結果になります。
例えば、自動車の前進機能の場合、「アクセルペダルを5度以上下方向に行ったときに、ブレーキペダルが5度以上になっておらず、パーキングブレーキがONではない状態で、車両の周りに障害物がない場合を検知した時に前進すること。」
複雑にするつもりはないのかもしれませんし、理解ができると思われるかもしれませんが、全ての開発者に正しく伝わる要求仕様書ではないです。
では要求は単純化するポイントについて解説をします。
-
単一の目的
各要求は単一の目的を持つようにします。複数の目的や機能を1つの要求にまとめないようにし、それぞれの要求がクリアで理解しやすいものとなるようにします。 -
分割と階層構造
大きな要求を複数の小さなサブ要求に分割し、階層構造にすることで、複雑な要求を理解しやすくします。これにより、プロジェクト全体が管理しやすくなります。 -
不要な詳細の省略
不要な詳細や細かい実装の詳細は省略します。要求仕様書は高レベルな要求や機能を記述するものであり、実装の詳細は設計仕様書やテクニカルドキュメントなどに委ねます。 -
使用者の視点
要求を使用者の視点から記述します。ユーザーエクスペリエンスやユーザーの期待に焦点を当て、彼らが理解しやすい形で要求を表現します。 -
関連する要素の統合
関連する要素や機能を適切に統合します。類似する機能や要求はまとめ、関連性を強調することで理解がしやすくなります。 -
言葉の選択
シンプルで一般的な言葉を使用します。専門用語や技術的な言葉を極力避け、ステークホルダー全体が理解しやすい表現を心がけます。
要求の抜け漏れを防ぐ2選
【方法6】ではなかったらどうする?を明記
要求仕様書において、特に「ではない場合」のふるまいを定義することは重要です。例えば、自動車が前進する機能の場合に、アクセルペダルが下方向5度の場合はシャフトを回すとしても、では5度に達しない場合はシャフトを止めることを明記していないと、逆方向に回すとご解釈される可能性はあります。
「ではない場合」のふるまいを定義する、いくつかの重要な理由を解説します。
-
全体的な理解の向上
「ではない場合」のふるまいを定義することで、システムの全体的な理解が向上します。要求仕様書が肯定的な要求だけでなく、否定的な条件も考慮していることで、開発者やテスターはシステムが期待通りに動作する範囲をより正確に理解できます。 -
期待しない結果の防止
「ではない場合」を考慮することで、期待しない結果や動作を防ぐことができます。プロジェクトメンバーが特定の条件下でのシステムの挙動を理解していないと、バグやエラーが発生しやすくなります。これを防ぐために、期待しない結果についても要求仕様書で定義します。 -
エッジケースの考慮
特に否定的な条件は、エッジケースや極端なシナリオを考慮する重要な手段となります。正常な操作以外の状況や予期せぬ状態に対しても、システムが適切に挙動することを確認するために、「ではない場合」を明示します。 -
テストケースの作成
テストケースの作成において、「ではない場合」のふるまいを考慮することで、テスターが必要なテストケースをより網羅的に作成できます。肯定的な条件だけでなく、否定的な条件も考慮することで、システムの品質を確保するためのテストが行いやすくなります。 -
クライアントとの合意形成
クライアントやステークホルダーとの合意形成において、「ではない場合」のふるまいを明示することで、期待値が一致しているかどうかを確認できます。クライアントが期待する挙動が否定的な条件下でも適切であるかを確認することは重要です。
【方法7】性能要件の漏れを無くす
性能要件って定義していますか?非機能要件という場合もあります。例えばアクセルペダルの動作を10万回動作させてもアクセル動作をすることを定義するような形です。
性能要件を定義するポイントを解説します。
-
明確な定義
性能要件を明確かつ具体的に定義します。抽象的な表現や曖昧な言葉を避け、どのような性能が期待されているのかを明示します。例えば、レスポンス時間が3秒以内であるなど。 -
測定可能性
性能要件は測定可能であることが重要です。具体的な数値や基準を設け、その数値を測定できる手段や方法を示します。これにより、実際に性能が要件を満たしているかどうかを検証できます。 -
シナリオの考慮
実際の使用シナリオや負荷条件を考慮して性能要件を設定します。システムがどのような状況で運用されるかに応じて、性能要件を適切に設計します。 -
未来の拡張を考慮
将来的な拡張や増加する利用者数に対応するために、性能要件を設定する際にも余裕を持たせることが重要です。システムが成長しても性能が確保されるような設計を考慮します。 -
ベンチマークの活用
既存の同様のシステムや業界標準のベンチマークを参考にすることで、性能要件を設定する際の指針となります。業界のベストプラクティスを取り入れることで、信頼性のある性能要件が得られます。
アウトプット前のチェック方法3選
【方法8】要求仕様書のチェックリストを作成する
要求仕様書のチェックリストに入れるべき項目と、チェックリストを作成する理由について解説します。
まずは、チェックリストに入れるべき項目について
チェックリストに入れるべき項目
-
一貫性
同じ用語や概念が異なる場所で異なるように使われていないか。 -
完全性
全ての主要な機能や要件が記載されているか。 -
明確性
要求が明確で理解しやすいか。 -
テスト可能性
各要求がテスト可能であるか。 -
ステークホルダーの合意
要求仕様書がステークホルダーとの合意を得ているか。 -
法規制との整合性
要求が関連する法規制や業界標準と整合しているか。
次にチェックリストを作成する理由です。チェックリストは面倒だと思っている人も多いと思いますが、しっかりとしたチェックリストを作ることは重要です。
チェックリストを作成する理由
-
一貫性の確認
チェックリストを使用することで、要求仕様書内の情報が一貫しているかどうかを確認できます。同じ概念や用語が複数の場所で異なる方法で使用されていないかを確認します。 -
完全性の確認
チェックリストは要求が漏れていないかどうかを確認する手段として役立ちます。全ての機能や要件が明示されており、何も抜け漏れていないかを確認します。 -
テスト可能性の確認
チェックリストは要求がテスト可能であるかどうかを確認するのに役立ちます。具体的で測定可能な要求が適切に設定されているかを確認します。 -
ステークホルダーとの合意形成
チェックリストはステークホルダーとの合意形成にも使用できます。プロジェクト関係者が要求仕様書の内容に同意しているかどうかを確認します。
【方法9】要求仕様書は関係者とレビューをする
要求仕様書を関係者とレビューする理由はいくつかあります
-
共通の理解の確認
要求仕様書のレビューを通じて、プロジェクトに関わるすべての関係者が共通の理解を確立することが重要です。異なる部門や役割の関係者が一致したビジョンを持つことで、コミュニケーションの効率性が向上し、誤解や不確実性が減少します。 -
不明瞭な点や矛盾の発見
レビューを通じて、要求仕様書内に不明瞭な点や矛盾がないかを発見することができます。異なる関係者の視点からのフィードバックを得ることで、要求が正確で一貫性があり、理解しやすい形になるように調整できます。 -
技術的・ビジネス的適合性の確認
関係者のレビューを通じて、要求が技術的に実現可能であり、ビジネス目標に適合しているかどうかを確認します。技術者やビジネス担当者からの意見を取り入れることで、実現可能性やビジネス価値が最大化されます。 -
フィードバックの統合
を通じて得られたフィードバックを要求仕様書に統合することで、プロジェクトの品質が向上します。関係者が提供する洞察や経験を反映させることで、より優れた要求仕様書が完成します。 -
変更の早期発見
レビューを通じて関係者が異なる視点から要求を見つめることで、潜在的な問題や変更が早い段階で発見されます。早期に変更を取り入れることで、後の段階での手戻りやコストの削減が可能になります。 -
コミュニケーションの促進
レビューはプロジェクトメンバーや関係者とのコミュニケーションを促進します。議論や質問を通じて、参加者間でのコミュニケーションが深まり、プロジェクト全体の理解が向上します。
要求仕様書のレビューは、プロジェクトの成功に向けた共通の理解と協力を確立するために不可欠なプロセスです。
【方法10】他の仕様書との整合性を確認する
要求仕様書と他の仕様書との整合性を確認する理由は以下となります。
-
全体的な一貫性の確保
要求仕様書はシステムの要件に焦点を当てていますが、他の仕様書(設計仕様書、テスト仕様書など)と整合性が取れていないと、プロジェクト全体で一貫性が欠如する可能性があります。これは、システムが要求通りに機能することや、設計が要求を満たしていることを確認する上で重要です。 -
設計との整合性
要求仕様書と設計仕様書の整合性を確認することで、要求が実際のシステムの設計に反映されているかどうかを確認できます。設計が要求を満たしていない場合、プロジェクトが期待通りに進行しない可能性があります。 -
テストとの整合性
要求仕様書とテスト仕様書の整合性を確認することで、テストケースが要求を適切にカバーしているかどうかを確認できます。テストが要求を十分に検証していない場合、システムが期待通りに動作するかどうかを確認できない可能性があります。 -
変更の追跡
要求仕様書と他の仕様書との整合性を確認することで、変更がどの段階で入ったかやそれが他の仕様書にどのように影響するかを追跡できます。変更が適切に管理されていないと、プロジェクト全体に混乱が生じ、品質が低下する可能性があります。 -
リスクの最小化
要求仕様書と他の仕様書との整合性を確認することで、プロジェクトにおけるリスクを最小化できます。整合性が取れていない場合、システムの品質や機能に問題が生じ、それがプロジェクトに対するリスクとなり得ます。
整合性の確認は、プロジェクトの異なるフェーズや関係する文書間で一貫性を維持し、プロジェクトの成功に向けて確実性を高めるために重要です。
まとめ
要求仕様書はプロジェクトの品質を担保するために必要なアウトプットとなります。その要求仕様書自体の品質担保をするための具体的な方法を解説しました。あなたのプロジェクトが失敗しないように、プロジェクトマネージャーは関連する仕様書をすべて読むことをおススメします。
コメント