decode

技術ブログ 本の紹介

課題定義と要求定義

Code Completeのメモ

課題定義

コンストラクションを始める前に完了しなければならない最初の準備はシステムが何を解決するかである。
これを課題定義と呼ぶ。
課題とは「〜ができない、不可能だ」などの様な直接の問題の事である。
「〜する必要がある」「〜をしなくてはならない」などはソリューションなのでふさわしくはない。
何を解決しないといけないのか、一文程度の文章で明確にする。

要求定義

要求定義は、ソフトウェアシステムが何をすべきかを詳述したものである。
明確な要求が文章化されているとユーザはそれを読んで同意する事ができる。
明確な要求があればユーザが何を求めているか悩まずに済む。

要求を定義する際に次の要素を満たしているか検討する。  

機能要求
  • システムの入出力の、精度、範囲、頻度

  • 外部ハードウェアインタフェースとソフトウェアインタフェース

  • ハンドシェイク、エラーチェック、通信プロトコルといった通信インタフェース

  • 各タスクで使用するデータと生じるデータ

品質要求
  • ユーザ側から見た応答時間、必要な操作

  • 処理時間、データ転送速度、スループットなどの時間に関する検討事項

  • セキュリティレベル

  • ソフトウェアの障害による影響、障害から保護しなければならない重要なデータ、エラー検出と回復の手順含めた信頼性のレベル

  • 最低限必要なメモリ容量と空きディスク容量

  • 特定機能の変更、動作環境の変更、他ソフトウェアとのインタフェースの変更に対応する機能を含めたシステムの保守性

  • 何をもって成功、または失敗とするかの定義

要求の定義
  • 要求はユーザの使う言葉で書かれているか、ユーザがそのように考えているか

  • それぞれの要求が他の要求と矛盾していないか

  • 要求が設計を規定していないか

  • 要求の粒度が一定であるか(曖昧すぎる、詳細すぎる要求はないか)

  • 他人が見ても充分に明確で理解できる様な内容であるか

  • 各項目が課題とソリューションに関連しているか

  • 各要求はテストに対応しているか、要求が満たされたかどうかをテストで判断できるか

  • 要求に対して考えられる変更とその可能性が全て明記されているか

要求の完全性
  • 開発を始める前に情報を入手出来ない様な不完全な領域が明記されているか

*「 製品が全ての要求を満たしていれば受け入れ可能である」という意味において要求は完全であるか

  • 全ての要求が納得できるものか。実装不可能な要求や顧客や上司をなだめるための要求は削除されているか
広告を非表示にする