ソフトウェア設計手法には、プロセス中心アプローチで主に使われる構造化設計や、オブジェクト指向設計がある。
構造化設計とは、機能を中心にプログラムの構造を考える設計手法です。機能分割を行い、段階別詳細化をすることで段階構造を作成します。このとき、プログラムの最小単位であるモジュールにまで分割する。また、構造化プログラミングの考え方に基づいた設計手法である。構造化プログラムでは、構造化定理と呼ばれる、「一つの入り口と一つの出口を持つプログラムは、順次・選択・反復の三つの論理構造によって記述できる」という考え方により、プログラム上の手続きをいくつかの単位に分け、モジュールに分割する。
モジュール分割手法
STS (Source Transform Sink)分割
データの流れに着目する。データの入力処理(Source)、データの変換処理(Transform)、データの出力処理(Sink)の三つのモジュールに分割する。
TR (Transaction)分割
トランザクションの種類ごとに一つのモジュールにする。データの種類によってトランザクションが分かれる場合などにモジュール分割する手法。
共通機能分割
システム全体で同じような機能を洗い出し、それを共通機能としてモジュールにする方法
ジャクソン法とワー二エ法
ジャクソン法:データの構造に着目する。入力データと出力データ構造からプログラムの構造を求めるの。
ワーニエ法: 入力データのデータ構造を分析し、プログラムの論理構造図(ワーニエ図)を作成する。
モジュール分割の基準
モジュール分割を行った後のモジュールは、それぞれのモジュールの独立性が高いほど良いとされている。モジュールの独立性を高めることで、あるモジュールを変更しても他の影響が最小限にとどまるために、保守性が上がる。また、独立したモジュールは別のソフトウェアで利用しやすくなるので、再利用性が上がる。
モジュール強度(モジュール凝集度、結束度)
モジュール強度 | 説明 |
機能的強度 (強度強い↑) | 一つの機能だけを実現するモジュール |
情報的強度 | 特定のデータを扱う複数の機能を一つのモジュールにまとめたもの |
連絡的強度 | モジュールの要素間で同じデータの受け渡しや参照が行われるもの。 |
手順的強度 | 順番に行う複数の機能をまとめたもの |
時間的強度 | 時間的に連続した複数の機能をまとめたもの |
論理的強度 | 論理的に関連のある複数の機能をまとまたもの |
暗号的強度 (強度弱い↓) | 関係のない複数の機能をまとめたもの |
昨日(機能)の常連(情 連)って(手)ジロリアン(時 論 暗)?
機能的強度がもっとも強度が強い(独立性が高い)
暗号的強度がもっとも強度が弱い(独立性が低い)
語呂の先頭に行くほど、強度が強くなる(独立性が高くなる)
モジュール結合度
モジュール同士の関連性の強さを示す概念です。モジュール同士の結合度合いが強ければ、関連するモジュールに変更があった場合の影響は大きく、反対に結合度が弱ければ影響を受けにくくなります。独立性と保守性の観点から、モジュール分割の際にはモジュール結合度が低くなるように設計することが望まれます。
モジュール結合 | 説明 |
データ結合 (結合度弱い↑) | 単一データの変数を引数として受け渡すもの |
スタンプ結合 | データ構造(構造体、レコードなど)を引数として受け渡すもの |
制御結合 | 制御情報を引数として与えるもの |
外部結合 | 単一データの変数をグローバル変数として宣言し、参照するもの |
共通結合 | データ構造をグローバル変数として宣言して、参照するもの |
内容結合 (結合度強い↓) | ほかのモジュールの内部を直接参照しているもの |
結合です(デ ス)制御が(外)できない(共 内)
データ結合がもっとも結合度が弱い(独立性が高い)
内容結合がもっとも結合度が強い(独立性が低い)
語呂の先頭に行くほど、結合度が弱くなる(独立性が高くなる)