要件定義



要件定義というのは、システムが行わなければならない何かや、その質を明確に定義したものを指します。
この定義が曖昧だったり抜けがあると、そのシステムは機能不足で使えなかったり、使い心地の悪いものになります。
 
上の説明じゃピンってこないですよね...
んでは、普段使っている「椅子」を例にして、要件を簡単に書き出してみると

  • 人が座って休むことができること
  • 座り心地がいいこと
  • ぶつかってもけがをしないこと
  • お年寄りが楽に座ることができる
  • 1万円ぐらいで買えること

という感じになります。
 
この要件の出し方にはコツがあって、以下の3つの分類で要件を見つけていけば、ほぼ問題なく要件を書き出すことができます。

  • 機能要件
  • 非機能要件
  • システム制約

それじゃ、各項目の説明をします。

機能要件

この機能要件は、システムが行わなければならないことを指していて、システムに対して期待されている問題解決のための行動や振る舞いを書いたものです。
さっきの椅子の例でいえば、「人が座って休むことができること」がそれにあたります。
 

この機能要件としてピックアップすべき要素は、以下の3点になります。

  1. システムの機能性の仕様
  2. システムが取らなければならない行動(例えば計算するとか記録するなど)
  3. システムの質ではないもの(軽いとか速いといったものは機能ではない)

非機能要件

この非機能要件は、システムが持たなければならない属性のことを指していて、システムを使いやすいとか信頼性が高いといった性質または質を書いたものです。
またさっきの椅子の例でいえば、「座り心地がいいこと」や「ぶつかってもけがをしないこと」がそれにあたります。
 

この非機能要件の中にもいくつかパターンがあります。

  1. ルックアンドフィール要件
  2. 使用性要件
  3. パフォーマンス要件
  4. 運用・操作要件
  5. 保守性・可搬性要件
  6. セキュリティ要件
  7. 文化的および政治的要件
  8. 法的要件

今までの経験から、実はこの非機能要件が、一般的にCOTSといわれているものを組み合わせてシステムを開発するときの大きな弊害になると考えています。機能のカスタマイズについては方針が明確になっているのに比べ、この非機能要件を満たすためのカスタマイズについてはほとんど考慮されたいないし、あまり考えられていないCOTSが多いと思っています。また複数の会社の製品を組み合わせると、さらに難しくなるんですよね :-(

システム制約

このシステム制約は、言葉の通りシステムに課せられた制限事項のことを指していて、システムはこの制約の範囲で構築する必要がある。
この制約というのがくせ者で、開発中心でやってきた人にはなかなかピンとこない部分だと思います。
 
で、またまたさっきの椅子の例でいえば、「お年寄りが楽に座ることができる」や「1万円ぐらいで買えること」がそれにあたります。
 
これだけじゃわかりにくいと思いますので、システム制約に必要な要素を書いてみます。

  1. システムの目的
    1. システムの原因となったユーザの問題または背景
    2. ビジネスチャンスなどもここに明記することが必要
  2. システムの目標

 
まだ書きかけ