効果的プログラム開発技法2
この本の第2章
情報システム開発工程
綺麗にまとめるのやめて
雑に書きます
情報システムの開発を
効果的に行う
=
開発のために
必要な作業を理解する
標準化された開発工程
- ウォータフォールモデル
- スパイラルモデル
- プロトタイプモデル
- アジャイルモデル
1. ウォータフォールモデル
開発工程を6つに分類整理
- システム要件定義
- 外部設計
- 内部設計
- プログラム実装
- システムテスト
- 導入
システム要件定義
製品を使用するユーザのニーズを把握し、それを満足させるための製品仕様を決定する
・業務モデルの作成
どんな機能、処理をしているかを明確にしていく。分析結果を文書化し、開発関係者の業務に対する共通の理解を得るために使用する
これが、報告書というやつか
業務モデルをわかりやすく表現するためには、データフローダイアグラム(Data Flow Diagram)が有効
DFDはシステムの静的な分析に向いている。しかし、近年のWEBアプリケーションでは動的な側面を考えなければならない。そこで、システムの動的な分析のためにオブジェクト指向開発、Unified Modeling Languageが必要である。
システムの静的な分析
- DFD
システムの動的な分析
・データモデルの作成
データ間にはどんな関係性があるのかわかりやすく表現したもの。データモデルをわかりやすく表現するために、エンティティリレーションシップダイアグラム(Entity Relationship Diagram)が有効
エンティティリレーションシップダイアグラム
データモデルを
ER図で表現することで
業務で扱うデータを容易に
理解できるように
なったそうです
・非機能要件の定義
システムに対する要求には、機能やデータ以外に明確にしておかなければならないものがある。その一つに性能に対する要求がある。
ATMが早く遅延なしに
動いてもらわないと
腹が立ちます
腹が立つから
ATMが早く遅延なしに
動いてほしいという要求が
性能に対する要求?
データのセキュリティが要求される場合は、安全保護対象になるデータ、安全保護対策などもシステム仕様に必ず含める必要がある。このような性能やセキュリティに対する要件を、非機能要件と呼ぶ場合もある。
・システムスコープの明確化
業務モデルやデータモデルの内容が、全て情報システムとして、コンピュータ化されるとは限らない。人手で行った方が効率的なものも含まれる。コンピュータ化しない機能も明確にすることも重要である。
外部設計
目的:システムとユーザとの間のインターフェースを設計すること
システムの使い方を設計
外部設計での主な作業
- 機能設計
- 入出力設計
- データベース
・機能設計
業務モデルを詳細化。詳細化した機能に対し、関連する入出力データや処理形態を明確にする。処理形態では、一括処理かリアルタイム処理かなどを定義しておく
とりあえず詳細化
・入出力設計
機能設計のところで明確化された入出力データを設計、データ項目レベルまで定義する。
ここは、
画面設計が特に大事だそう
画面はユーザに見えるから
・データベース設計
データベース
=
論理設計 + 物理設計
論理設計
業務の視点から見た
データベース設計
物理設計
コンピュータの視点から見た
データベース設計
外部設計は、論理データベース設計(要件定義段階で作成されたデータモデルと入出力設計の結果)を行う。
データベースは流動的に変化し、それに対しての変更を最小限にするようにデータベースの設計を考える必要がある。
そのためには
データ正規化が重要らしい
内部設計
目的:システムの内部構造の設計
内部構造を設計するときはコンピュータからみた視点が必要。外部設計で行った機能設計、入出力設計、論理データベース設計の結果を、コンピュータでどのように稼働させるか。
外部設計
=
論理データベース設計
内部設計
=
物理データベース設計
画面のボタン操作にそって実行するプログラムは、イベントドリブンプログラム(Event Driven Program)という。
プログラム実装
目的:コンピュータで稼働するプログラムの作成
内部設計で作成したプログラム仕様書をもとに、プログラムの論理設計、コーディング、テストを行う。
ここがjavaとかかな
目的:開発したシステムが要件定義で作成されたシステム仕様書通りに稼働するかどうかを確認すること
みんな、この時に
ビクビクしてるんやろなー
導入
目的:システムユーザに対しシステムを導入すること
ここで、
ウォータフォールモデルの特徴
最初に何を行うかを
システム仕様で決定
↓
システム設計
↓
設計結果
↓
プログラム実装
↓
テスト
↓
稼働するか確認
⬇️
情報システムとなる
メリット:大規模システムを開発する時に適している
デメリット:時間がかかりすぎる