でんきびりびり

一日やりくり

ウォーターフォールモデルでマインスイーパーアプリを作ってみる

経緯

 卒研も大方終わり、丁度マインスイーパーアプリを作りたいと思っていたのでその開発をすることに決めた。 今まで行き当たりばったりなコーディングでソフトウェア開発をしていたので、この機会にしっかり準備をした上での開発をしたいと思う。

具体的には最低限以下の3つをコーディング前に決めてから開発に移りたい。

1.変数命名規則

2.わかりやすいデータ構造(後から自分で読んでも理解出来る)

3.処理の流れ(フローチャート、状態遷移図等)

 これらを踏まえて、ウォーターフォールモデルで開発をしたいと思う。ウォーターフォール型を選んだ理由は開発手法の主流であること、知っていて損は無いはず、という二点から。

 

ウォーターフォールモデルとは?

 ウォーターフォールモデルとは、古くからあるソフトウェア開発の手法。

メリット:

・計画を立てやすい

 上流工程から要求機能を詳細に落とし込む手順を踏んでゆくため、事前に今後必要となる事項を想定しながら開発できる。

進捗管理がしやすい

 全体を把握した上で工程別・タスク別に管理可能なことから、プロジェクト全体や各開発要員の進捗管理を行いやすい。

・成果物ベースでの開発

 ドキュメントなどの成果物がある状態で開発を行うため、どのような開発者でも仕様書を読めば開発する事が出来る。

デメリット:

・上流工程でしか要件定義できない

 後から変更点が合っても対応出来ない。

・仕様変更時の影響

 前工程での成果物をベースに開発を進めるので、設計ミス・仕様変更があればテストのやり直しやプログラムの修正にコストがかかる。

 ※参考

 「要求定義段階で誤りを修正するコストを1とすると、コーディング段階で要求定義の誤りを修正するコストは5倍から10倍かかる。保守段階に誤りを修正するコストは200倍となる。」(Davis, Alan M. Software Requirements: Objects, Functions, and States, Englewood Cliffs, NJ:Prentice-Hall, 1993)

 

以上、メリットとデメリットは下記サイト様より引用。

開発手法の基礎、ウォーターフォールモデルの特徴とは | エンジニアへの道|リナックスアカデミー公式ブログ

 

ウォーターフォールモデルの流れ

(1) 要件定義

・システム要件定義

 ユーザーとなる人たちにヒアリングを行い、システム化する範囲や対象業務を明確にし、新システムに必要な機能を検討する。

・ソフトウェア要件定義

 業務の手順を整理して、システムで扱うデータや処理の流れ、ソフトウェアの内容を決める。インターフェース部分の仕様、セキュリティ対策やシステムの保守方法などについてもこの段階で決めておく。

(2) 基本設計

 要件定義で決定された事項を具体化する。主な設計内容として、

・ハードウェア、データベース、ソフトウェアの選定

・データベース設計、テーブル設計

・システム・サブシステムの機能概要の設計

・入出力内容の決定

等が挙げられる。

(3) 詳細設計

 基本設計で決定された事項を画面単位、プログラム単位など、より詳細に機能分割して設計する。具体的には、

・画面、帳票のレイアウト及び機能設計

・自動実行処理の設計

・メッセージ(画面に表示する内容)仕様の設計

・クラス設計などのプログラム設計

・システムで使用するコード設計

・開発規約、コーディング規約などの検討

単体テスト仕様書の設計

(4) 製造(プログラミング)

 詳細設計書を元にプログラムをコーディングしていく。

(5) 単体テスト

 作成されたプログラムに対し、単体テスト仕様書を元にテストを行う。全てのテスト項目が完了したら結合テストに移る。

(6) 結合テスト

 各プログラムを結合し、画面遷移やデータの受け渡し等、画面・プログラム・サブシステム間の連携が正しく行われているかを確認する。具体的には、実際の業務を想定したテストケースを作成し、最初のインプットから想定される正しいアウトプットが得られるかを確認する。

(7) 結合テストシステムテスト

 実際にユーザーと同じ環境か、それと同等の環境で行うテスト。

(8) 運用テスト

 実際にユーザーに使用してもらい、要求機能を満たしているか、操作感はどうかなどを確認してもらう。

(9) リリース・保守

 不具合の修正等。ウォーターフォール・モデルに限らず保守は開発の中で最も重要なフェーズ。

 

 以上の流れで開発をしていく。マインスイーパアプリ開発における、一つ一つの工程の詳細を本ブログに書いていく予定。大半の工程がインターンシップで学んだことを流用出来るのでスムーズに進むはず。