いものやま。

雑多な知識の寄せ集め

ソフト開発における「設計」とは何なのか。(その6)

前回は以下のようなことを書いた:

  • 開発は「Why(要求)→What(要件)→How(設計)」の順にブレークダウンしていく必要がある
  • ブレークダウンでは複数の選択肢が考えられるので取捨選択が必要
  • 選択した方針が間違ってないかのコミュニケーションが必要で、そのために要件定義書や設計書を書くといい
  • コミュニケーションが不要なら文書はなくてもいい(ただし要件定義や設計自体は必要)

今回は、要件定義を考えていくために、要求と要件について深く考えてみる。

要求と要件の違い

要件定義について考える前に、そもそもの話として「要求」と「要件」の違いが何なのかをハッキリさせておいた方がいい。 「要求と要件の違いって何?」ってあらためて聞かれると、ちゃんと答えられない人は多いと思う。

かく言う自分も、昔はこの違いでかなり悩んだ。 というのも、会社で用意されていた要件定義書のテンプレートで、要求を書く章と要件を書く章が分かれてたから。 要求も要件も同じじゃね?ってなってると、それぞれに何を書いたらいいのか分からないとなる。

要求と要件の違い、それは何かというと、「主語」が違う。

要求の主語は基本的に「顧客」となる。 「顧客は〜〜したい」「顧客は〜〜がほしい」のように、「顧客が」望んでいることが要求であり、その要求を満たすために開発は行われる。

一方で、要件の主語は常に「開発者」となる。 要求を満たすために「開発者は〜〜する」のように、「開発者が」やること(および守るべき条件)が要件となる。

ここで少し補足しておくと、要求の主語は「顧客」以外の場合もある。 たとえば「リファクタリングしたい」とか「ログを出せるようにしたい」とかは顧客ではなく開発者の要求なので。 もちろん、そのさらに奥には「顧客は新規機能の開発速度を上げてほしい」「顧客はバグを踏みたくない」「顧客は問題が起きたときに早く修正が入ってほしい」などの顧客の要求があるわけだけど。

それに対して、要件の主語は常に「開発者」であることに気をつけたい。 要求が何であれ、それを満たすために手を動かすのは「開発者」以外にありえないから。

いずれにせよ、「主語」を意識することがすごく重要。 そしてそれは、要求を考えるときと要件を考えるときでは、視点を変える必要があるということにも繋がる。

その話はまた次にしたい。

今日はここまで!