要件定義・仕様書・設計書・実装の違いについて

要件定義・仕様書・設計書・実装の違いについて

ソフトウェア開発には、色々なドキュメントがあって混合するので、備忘録として書き出してみよう。

1, 要件定義(Requirements Definition)
出来る、出来ないはともかく、作って欲しいシステム・機能を定義する。
どちらかというと依頼側が書くものだが、慣れていない場合は、開発側がヒアリングシート等を使って定義する。

依頼側「うちのECサイトも、アマゾンみたいにしたいねん」
開発側「ええ、Amazonみたいにですか!?」
依頼側「そうそう、この商品を買った人は、こんな商品も買ってますみたいな奴!」
開発側「ああ、リコメンド機能が欲しいのですね…。」

2, 仕様書(Specifications)
要件・要望は曖昧な部分が多いので、より具体的に、どんな物を作るか?どんな機能を持たせるか?を定義する。
作る物と作らない事を明確にする。
テスト仕様書もココで書く(何ならOKで、何ならNGなのか?)
逆に言うと「それ、どうやって作るの?」みたいな事は、このフェーズでは定義しない
※とは言っても、明らかに無理な物はダメなので、実装・設計をイメージ出来ない人には無理。

3, 設計書(Design Document)
仕様書で定義された仕様を、具体的にどうやって作るのかを設計(定義)する。
画面設計・DB設計・画面遷移・MVCモデル・UML図などなど具体的な手法に入ってくる。
さらに外部設計・内部設計という分け方があり、外部=ユーザに見える部分・内部=システム的な処理、という風に分けたりもします。

4, 実装(Implementation)
実際にプログラミングを行い、ユーザが使える状態にする。

具体的な例を挙げると、以下の通り。

1, 要件定義(Requirements Definition)
朝、電車が遅れたら、スマホに通知して欲しい!

2, 仕様書(Specifications)
朝とは具体的には?
時間帯指定できるのにする?平日のみにする?
指定方法は路線?駅?複数指定OK?
通知方法はメール?アプリ?電話?
設定画面はどうする?
そもそも遅延情報は、どこから取得する?
など、具体的な機能を決める。

3, 設計書(Design Document)
PHP+MySQLで作る。設定画面は無し(設定ファイルのみ)
サーバを立ててcronを使用する、朝6-9時の間に一分毎にTwitter検索する。
「路線名+遅延」で検索して、一定数(10件)を超えたら、指定されたメールに通知する。

4, 実装(Implementation)
仕様に従い、実際にPHPでコーディング。テストして問題がなければリリース。

現場だと、わりと仕様書と設計書が区別無く、ごっちゃに使われている気がする。
そして、ユーザは実際に出来上がった物を見ると、ここはこうして欲しい!と言ってくるんですけどね(^_^;)
実装もしてみたら、設計に矛盾があったり…。まあ、人は完璧ではないからね…。
「百聞は一見にしかず」じゃないけど、やっぱり実物を見てみないと分からない事が一杯!