●モジュール分割の技法 プログラムをモジュール単位に分割してこれを階層化することを「モジュールの分割」と言います。以下の方法があります。
【 STS ( Source Transform Sink ) 分割 】
データの流れを「S(Source)源泉」「T(Transform)変換」「S(Sink)吸収」に分割して、モジュールの階層構造を設計する技法です。それぞれ、「入力モジュール」「処理モジュール」「出力モジュール」となります。
「最大抽象入力点」これ以降は入力データが発生しない区切りの場所。
「最大抽象出力点」こり以降は出力データが発生しない区切りの場所。
STS分割の手順
【 TR ( Transaction :トランザクション)分割 】
機能の分割を行った際にデータの流れが分岐する場合に適用し、入力されたトランザクションにより、異なる処理を実行する場合に使用されます。
システムの処理単位ごとにモジュールを分割する。
TR分割の手順
【 共通機能分割 】
STS分割・TR分割で分割されたモジュール中に共通する機能を持ったモジュールがある時、これを共通モジュールとして独立させる方法。
【 ジャクソン法(JSP) 】
入出力のデータ構造に着目してモジュールの階層構造を導きます。「JSP木構造図」を使用します。これは、「基本」「連続」「選択」「繰返し」の構成要素からなります。
入出力データの構造に基づいてモジュール分割を行なう技法であり、データの流れに着目する構造化設計とは異なります。Michael Jackson氏によって提唱されました。
入出力データを構造化して上下関係などを作った後に、入力と出力データの構造の間に対応関係を作成します。そしてその対応を写像と考えてモジュールとします。データ構造の上下関係がそのままモジュールの上下関係となります。ここで、データ構造の記述にはJSP木構造図と呼ばれるものが用いられます。
きれいな対応関係がない場合は構造不一致と呼ばれ、コルーチンを用いて解決します。
※コルーチンとは、主従関係がないプログラム単位である。コルーチンは自分の実行を中断して、ほかのコルーチンに制御を渡すことができる。これはサブルーチンにおけるリターンと似ているが、中断直後の処理から再開できる点(resume)に本質的な違いがある。サブルーチン実行中のコンテクスト(局所変数)はその終了とともに消え去るが、実行が中断されているコルーチンのコンテクストはそのまま存在しているからである。
【 ワーニエ法 】
入出力データの関係からモジュールの階層構造を導く技法です。「ワーニエ図」を使用します。
入力データを集合論によって分析し、データが「いつ,どこで,何回」使われるかを3
種類の制御構造(順次,選択,繰返し)の構造に整理する。
モジュールは次の3種類で構成される。
ジャクソン法と異なり、ワーニエ法は入力データ構造のみからプログラム構造を決める。
【 NSチャート 】
矢印や線を使用せず、四角い枠の組み合わせで表現するため、構造化プログラミングの設計に適している。
【 HIPO 】
ソフトウェアの設計では、入出力データとの対応を図示したほうがわかりやすいということで考案された。HIPO は次の2つの図から成り立つ。
機能を階層的に表現した図式目次とデータの入力(Input) - 処理(Process) - 出力(Output)に着目したIPOダイアグラムからなる。
H 部分:各モジュールの階層構造を表現したもの。
IPO 部分:個々のモジュールについて入力・処理・出力を図式表現したもの。
図式目次
総括ダイアグラム
詳細ダイアグラム
モジュールの制御領域とは、モジュール同士が制御しあう領域のこと。上位から下位に制御が移る(呼び出す)とき、下位は上位の制御領域になる。
モジュールの影響領域とは、下位から上位への影響が及ぶ範囲
プログラムはモジュールに分割され、モジュールの階層構造で構成される。
全体の制御を行う最上位モジュールの下位に、いくつかの従属モジュールがある。
●分割の評価プログラムは、モジュール単位に分割しますが、良いモジュール分割とは、「独立性の高い分割」であり、「モジュール強度」と「モジュール結合度」で評価できます。
【 モジュール強度 】
モジュールがどれだけの機能を実現しているかを示す尺度で、強いほど独立性が高い。モジュール内の関連性の強さを示すもので、強いほど独立性が高くなる。
種類 |
モジュール内 |
独立性 | |
機能的強度 |
1つの機能を実現するためだけのモジュール |
強 |
高 |
情報的強度 |
同一のデータを利用する複数の機能を持ち、複数の機能は個別に実行する | ||
連絡的強度 |
複数の機能を持ち、同一のデータを使用し、順番に実行する機能をまとめたモジュール。機能間でデータの受け渡し(関連性)がある。 | ||
手順的強度 |
関連のある逐次的に実行する機能をまとめたモジュール。機能間の関連性は時間的強度より強い。 | ||
時間的強度 |
同一時間に実行する複数の機能を扱うモジュール | ||
論理的強度 |
関連のある複数の機能を持つモジュール。モジュールが呼び出される時の引数(パラメータ)でモジュール内の複数の機能の1つの機能が選択・実行されるもの。 | ||
暗号的強度 |
複数の機能を持つがお互いに関連性のないモジュール。 |
【 モジュール結合度 】
モジュール同士の連結の度合いを示す尺度で、弱いほど独立性は高い。モジュール間の関連性の強さを示すもので、弱いほど独立性が高くなる。
種類 |
モジュール間 |
独立性 | |
データ結合 |
データのパラメータのみを明け渡す結合。相手モジュールをブラックボックスとして扱い、必要なデータだけを引数として渡す。 |
弱 |
高 |
スタンプ結合 |
データの構造を決めるパラメータを渡す結合。構造体データ(レコード)を引数として相手モジュールに渡すが、呼ばれたモジュールではその一部分しか使用しない。 | ||
制御結合 |
他のモジュールの制御情報のパラメータを渡す結合。モジュールを制御する要素(機能コードや制御スイッチ)を引数として、相手モジュールに渡し、モジュール内の機能や実行を制御する関係にある (論理的強度のモジュールとそのモジュールに機能コードを渡すモジュールとの関係)。 | ||
外部結合 |
共通領域(グローバル領域)に定義されたデータを参照するモジュール。かつ必要なデータだけを外部宣言し共有する。 (機能的には関連性はない)。 | ||
共通結合 |
共通領域(グローバル領域)に定義されたデータ構造を参照するモジュール。 | ||
内容結合 |
アドレスやポインタなどにより他のモジュール内部のデータを直接参照している結合 |
※「パラメータ」とは、あるモジュールから別のモジュールを参照する際に必要となる変数のことを言います。
※「グローバル領域(大域変数)」とは、プログラム全体に対して定義される変数で、プログラムのどこからでも参照・更新することができる。
www.it-shikaku.jp