スパイラル1は最初のとっかかりを作る。 ここでも、きちんと要求分析、システム分析、設計、実装、テストの工程を実行する。
要求分析とは「何を作るのか?」を明確にする工程である。
自分がこれから作ろうとしているソフトウェアがどんなものであるか、明確に定義することが目的となる。
要求分析は、以下の3つの手順からなる。
このシステムで登場するユースケースは2つである。 また、登場するアクターはユーザとデータベースの2つである。
&ref(): File not found: "ud1.png" at page "会議室予約システム/スパイラル1";
ユーザは両方のユースケースに関係する。 一方、データベースは片方のユースケースだけに関係する。
- ユーザは年と月と会議室を指定して表示ボタンを押す。
- 表示ボタンが押されたことがシステム管理者に通知される。
- システム管理者はデータベース管理者に指定した年月と会議室の予約状況を取り出すよう指示する。
- システム管理者はカレンダー管理者に予約状況を渡す。
- カレンダー管理者は予約状況をカレンダーに表示する。
- ユーザは会議室予約システムのページにアクセスする。
- システム管理者、データベース管理者、カレンダー管理者、制御パネルが生成される。
- 制御パネルはデータベース管理者に問い合わせて会議室リストを得る。
- 制御パネルは選択項目として会議室リストの会議室と全会議室を設定する。
- 制御パネルは現在の年と月を設定する。
- システム管理者に表示ボタンが押された通知を行う。→カレンダーに今月の予定が表示される。
太郎君は2015年8月の会議室Cの予約を閲覧するため、年に2015を、月に8を、会議室名に会議室Cを入力して表示ボタンを押した。制御パネルはボタンが押されたことをシステム管理者に通知した。システム管理者は受け取った年月と会議室名をデータベース管理者に渡し、データベースから予約リストを取り出した。システム管理者は取り出された予約リストをカレンダー管理者に渡した。カレンダー管理者は渡された予約リストを基にしてカレンダーを更新した。
太郎君は会議室の予約状況を確認するために会議室予約システムのページを開いた。システムが起動し、システム管理者、データベース管理者、カレンダー管理者、制御パネルが生成された。制御パネルはデータベース管理者から会議室のリストを取り出し、自分の選択項目に全会議室と共に追加した。さらに、現在の年と月が取り出され制御パネルに設定した。制御パネルはその年と月を自身の入力欄に設定し、システム管理者に対して年月と全会議室の予定を表示するように通知した。全会議室の今月の予約状況が表示された。
システム分析では、要求分析で明確化したシステム要求を設計につなげるための橋渡しを行う。 具体的には、
を行う。
オブジェクト指向開発においては、システムに登場する「もの」がオブジェクトである。 が、どれが「もの」なのか?、を決めることはなかなか難しい。
システム中に登場する「もの」を決めるには、システム全体を見渡して完成イメージを固めつつ、これまでの経験や勘を動員して行う必要がある。 かなり経験豊富な開発者でも、最初の段階から「もの」を見分けることは難しいし、そもそも「もの」にするのかしないのか、どちらでもよい場合もあるからである。
例えば、「登録」、「編集」、「削除」、「表示」という4つのボタンを持つシステムがあったとしよう。 これら4つのボタンをそれぞれ別な「もの」として分析を進めることもできるし、4つとも同じボタンでラベルが違うだけだ、と見ることもできる。
したがって、スパイラルが進むにつれてオブジェクトが変更になることもありうる。
しかし「もの」を決める方針はある。
それは要求分析の最後に書いたシナリオである。
シナリオは、各ユースケースが実行されるときの様子を具体的に記述した文章であるから、その文章の中にシステムに登場する「もの」がかかれていることが多い。特に名詞や名詞句はその候補となる。
そこで、もう一度シナリオを名詞と名詞句に着目して見なおしてみる。
太郎君は2015年8月の会議室Cの予約を閲覧するため、年に2015を、月に8を、会議室名に会議室Cを入力して表示ボタンを押した。制御パネルはボタンが押されたことをシステム管理者に通知した。システム管理者は受け取った年月と会議室名をデータベース管理者に渡し、データベースから予約リストを取り出した。システム管理者は取り出された予約リストをカレンダー管理者に渡した。カレンダー管理者は渡された予約リストを基にしてカレンダーを更新した。
太郎君は会議室の予約状況を確認するために会議室予約システムのページを開いた。システムが起動し、システム管理者、データベース管理者、カレンダー管理者、制御パネルが生成された。制御パネルはデータベース管理者から会議室リストを取り出し、自分の選択項目に全会議室と共に追加した。さらに、現在の年と月が取り出され制御パネルに設定した。制御パネルはその年と月を自身の入力欄に設定し、システム管理者に対して年月と全会議室の予定を表示するように通知した。全会議室の今月の予約状況が表示された。
この中で、今回のシステムでオブジェクトとして抽出するのは以下の5つである。
このシステムにおいて、ボタンは押されたことを通知するためだけに使用されるので、わざわざオブジェクトにしなくても良いと考えられる。 また、リストはJavaScriptでは標準でサポートされるオブジェクト(ここでいう「もの」ではない)があるので、これもわざわざオブジェクト(=もの)として抽出しなくても良いと考えられる。(C++やJavaなどの一般的な言語ならオブジェクトして抽出するかもしれない)