要件定義ではあいまいな表現をしないこと【初心者向け】

システム開発における要件定義は重要です。

そもそも、どのようなシステムを作るかが明確になっていないと何も作れませんよね。ちゃんとやっているつもりでも、意外と要件定義書の内容があいまいな表現になっていて後の工程で致命的な不具合になりかねません。

この記事では、小数点の端数計算を例にあいまいな表現が危険なことをお伝えしていきます。

あいまいな表現は危険

日本語はもともとあいまいな言語だと思います。特に相手のことを察して行動する、ということが日本人は往々にしてあります。そういえば、忖度という言葉が流行語に選ばれていましたね。

そのため、システム開発における要件を出す時も言わなくてもわかるだろうとか、こんなの当たり前だよね、と考えてしまいがちです。

そんなことはないんじゃないか、と思うかもしれませんが以下のような要件を伝えられたらどうでしょうか。

1つあたりの単価が98円の商品を発売する。この商品を一度に5個以上買ってくたら10%の割引をする。システムではこの内容をもとに料金を計算してほしい。

どうでしょうか。まあ、電卓でも計算できる内容ですよね。内容を読んでも難しくなさそうです。ただ、そこに落とし穴があります。

ただ、熟練のエンジニアの方や実際にプログラムを作っている人なら気づくと思いますが、このままでは問題です。運良く認識があっていればいいですが、そうでなかったら想定外のシステムが出来上がってしまいます。

まず、ここで問題の記述は「10%の割引をするです。何が問題かというと、何に対して10%を割り引くかが書いていません。

つまりは、単価の98円に対して割引をするのか、それとも合計の金額から割り引くのかが書いていないのです。

また、この場合小数点以下の端数が出てしまうことがあります。その場合、小数点以下の端数に対して四捨五入するのか切り捨てるのか、それとも切り上げるのかがこの要件からはわかりません。

もし、このまま発注してしまうと発注側が思った通りのシステムができません。

発注側の思い ⇒ 合計金額から10%を割り引き、小数点以下の端数は切り捨てよう
受注側の思い ⇒ 単価から10%を割り引いて、小数点以下を切り捨てよう

このように意識のずれがあると最悪ですね。計算結果がまったく違います。

例えば、この98円の商品を5個買った場合の計算結果は次の通りになります。

発注側:98×5×(1-0.1)=441円

受注側:98×(1-0.1)=88.2円 四捨五入すると88円

88×5=440円

このような認識の齟齬をなくすためには、要件定義の際には明確に計算方法まで記載しておく必要があります。

1つあたりの単価が98円の商品を発売する。この商品を一度に5個以上買ってくたら10%の割引をする。割り引く際には、合計金額(単価×個数)を計算した後、10%の割引を計算(合計金額×(1-0.1))する。また、小数点以下の端数が発生した場合は小数点第1位を切り捨てることとする。システムではこの内容をもとに料金を計算してほしい。
このような感じでしょうか。最初から、以下の計算方法により割引後の計算を行うというように計算式を提示しても良いと思います。
えっ、ここまで書かないといけないの?、と思われるかもしれませんが実際にここまで記載しておかないと後々の工程で大きな手戻りになります。
そのため、要件定義の時にあいまいな表現はすべて排除して誰が読んでもわかるように明確に記載する必要があります。
特に外部に発注するときは、会社内で使われている用語は発注側にとっては当たり前の用語であっても外部の人間からすると全く意味の分からない用語になってしまったり別の意味にとらえられてしまったりすることがありますので注意が必要です。

あいまいな表現にならないためには

私も過去のプロジェクトで、あいまいな表現を使ってしまったためにシステムテスト工程で不具合を発生させてしまったことがあります。その時の反省で、以下のことを心がけています。
開発側と密にコミュニケーションを取り、やりたいことだけでなく結果も明確に示すこと
これは、このくらい大丈夫だろうという意識にならず発注する側としてシステム化することを明確に示して発注側と開発側の考えを一致させることです。
意外とやってしまいがちなのは、システム化したい内容はこれだから後はよろしく!、となり開発側の管理を怠ってしまうことです。システムは専門家がやるべき、のようなことをいう人もいます。
ただし、これでは開発する側が自分たちの思い通りに作ってしまい実際に発注した側が自分たちの思った通りのシステムができずにシステム化が失敗しいてしまいます。
そのため、発注側は自分たちのシステムができるように明確に要件を伝え開発側が自分たちの発注した機能を作るように管理していかなくてはいけません。そのためには開発側と密にコミュニケーションをとり、やりたいことだけでなくシステム化したうえでどのような結果を得たいかを示す必要があります。
先に記載した割引の計算ですが、これも実際に割引をしてどのような計算結果が出るのか、を明確にしておけば発注側と開発側の思いも一致したのではないでしょうか。

最後に

いかがでしたでしょうか。簡単なことでも意外とあいまいな表現になっていることも多々あります。

あいまいな表現を残したままだと、自分たちの望むシステムが完成せずにプロジェクトの失敗につながります。システム開発を外注する企業の責任として、自分たちの望むシステムができるように要件は明確に記載しておくことが大切なのです。

関連記事

システムの要件定義を行う際は、5W1Hを意識すると良いです。これは、ビジネスの基本でもありますがシステムの要件を決める際にも重要です。 ただ、意外と忘れやすいものです。なかなか普段でも5W1Hを意識してメールを書いたり会話をしたりする[…]

最新情報をチェックしよう!