モジュールの独立性

モジュールが,そのモジュールで完結し,他のモジュールと影響し合わない性質をモジュールの独立性という。良い設計で導出されたモジュールは独立性が高く,プログラムの保守性が高くなる。

JIS X 25010:2013 で定義される製品品質特性「保守性」の副特性「モジュール性」 (modularity) には,次のように記載されている。

一つの構成要素に対する変更が他の構成要素に与える影響が最小になるように,システム又はコンピュータプログラムが別々の構成要素から構成されている度合い。

JIS X 25010:2013,「システム及びソフトウェア製品の品質要求及び評価(SQuaRE)−システム及びソフトウェア品質モデル」

モジュールの独立性を評価する尺度に,モジュール強度とモジュール結合度がある。モジュール強度を高く,モジュール結合度を低くするようにモジュール分割を行うことが,モジュールの独立性を高めるために需要となる。

(ソフトウェアアーキテクチャに関する)言説の 95 % は,「モジュール性」の利点を称賛するために費やされている。しかし,それを実現する方法については,多少はあるにしても,ほとんど語られていない。

Glenford J. Myers (1978)

モジュール強度

モジュール強度(結束性)とは,モジュールを構成する機能がどの程度強く関連しているかを表す尺度である。

ただ一つの機能を実行するようなモジュールでは,モジュール強度が強くなる。モジュール強度が強いほどモジュールの独立性は高くなり,モジュール強度が低い場合は,モジュールの分割を検討する必要がある。

モジュール強度は強い順に,機能的強度,情報的強度,連絡的強度,手順的強度,時間的強度,論理的強度,暗号的強度に分類できる。

機械的強度

一つの固有の機能だけを実行するために,モジュールを構成するすべての要素が関連し合っている状態。

情報的強度

同一のデータ構造を扱う複数の機能的強度のモジュールを,それぞれに入口点と出口点を設けて,一つにパッケージ化したもの。操作対象となるデータに関連する情報を,特定モジュールに限定できるため,独立性が高められる。

連絡的強度

(手順的強度+データを通じての関わり合い)一連の手順に従って逐次的に実行されること,およびデータの受渡しや同一データの参照を行うことで,モジュールを構成する要素が関連し合っている状態。

手順的強度

一連の手順に従って,逐次的に実行することで,モジュールを構成する要素が関連し合っている状態。

時間的強度

ある特定の時期に実行されるという観点で,モジュールを構成する要素が関連し合っている状態。

論理的強度

機能を提議することができない(何を行うモジュールであるかがあいまいである),構成要素間に特定の関係がない(お互い無関係に近い)状態。

モジュール結合度

モジュール結合度は,モジュール同士の関連の強さを示す尺度である。このモジュール結合度が低いほど,モジュール独立性は高くなる。

モジュール間インタフェース
(データの受渡し方)
種類定義補足
特殊(例外的)内部結合あるモジュールが他のモジュールの内容を直接参照する,または他のモジュールに直接分岐
大域的データ
(グローバル)
共通結合データ構造を大域的データ(共通域)として共用不要なものまで公開してしまう
外部結合構造を持たない大域的データ(外部宣言したデータ)を共用必要なものだけ公開する
引数
(パラメタ)
制御結合制御情報(機能コード,スイッチなど)を引数として受け渡し,相手のモジュールに影響を与える呼出し側が内部論理を知る必要がある
スタンプ結合構造を持つ引数(構造体など)を受け渡す不要なものまで受け渡す
データ結合構造を持たない引数(単なるデータ項目:スカラ型データ要素)を受け渡す必要なものだけ受け渡す
表 モジュール結合度

モジュール結合度には大きく,直接参照 > 外部(大域)データ共有 > 引数 という関係がある。モジュール結合度を低くするためには,モジュール間インタフェースに引数を用いることが望ましい。

共通フレームの各プロセスのモジュール化

共通フレーム 2013 によると,共通フレームの各プロセスは,必要に応じて組み合わせて実施できるようにモジュール化されている。また,モジュール性について,「強い結合」と「弱い結合」という点から,以下のように説明されている。

強い結合

一つのプロセスは特定の機能のみを果たし,そこに含まれるアクティビティ及びタスクは,互いに強い関係で結ばれている。例えばシステム開発プロセスの中には開発に関する作業項目が,互いに関連する形で網羅されている。このとき,これらの作業項目は「強い密着」関係にあるという。

弱い結合

例えば,システム開発プロセスと運用・サービスプロセスは「弱い結合」関係にあるという。システム開発プロセスは,運用・サービスプロセスの機能は実行しない。もし運用・サービスプロセスの実行中にソフトウェアの修正が必要になれば,保守プロセスを呼び出して行うことになる。このように,各プロセスは,一つのモジュールとなり,プロセス間のインタフェースは最少になるように設定されている。ただし,一つのプロセスは特定の機能のみを果たすが,特別に何かの機能を果たすためには,他のプロセスを使用することが可能である。例えば,システム開発プロセスの中で教育訓練が必要になれば,人的資源管理プロセスを組込むことになる。モジュール化することにより,これが可能となってくる。

モジュール分割技法

プログラムの構造化設計におけるモジュール分割技法について説明する。

STS 分割

STS 分割は,データの流れに着目してモジュールを分割する,モジュール分割技法である。入力データや出力データであることを認識できなくなる点を最大抽象点といい,この最大抽象点で,源泉(Source),変換(Transform),吸収(Sink)の三つのモジュールに分割する。さらに,それぞれのモジュールを階層化して,全体の制御モジュールを最上位に設けたモジュール階層構造図を作成する。

TR 分割

TR 分割では,トランザクションの処理の流れに着目して,モジュールに分割する。

共通機能分割

共通機能分割では,プログラムの機能の共通性に着目して,モジュールに分割する。

ジャクソン法

ジャクソン法では,データの構造に着目して,モジュールに分割する。

過去問題

システムアーキテクト試験に出題された過去問題を示す。

平成23年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問5

モジュールの独立性を高めるには,モジュール結合度を弱くする必要がある。モジュール間の情報の受渡し方法のうち,モジュール結合度の最も弱いものはどれか。

  1. 共通域に定義したデータを関係するモジュールが参照する。
  2. 制御パラメタを引数として渡し,モジュールの実行順序を制御する。
  3. 入出力に必要なデータ項目だけをモジュール間の引数として渡す。
  4. 必要なデータを外部宣言して共有する。
平成23年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問5

モジュール結合度の強い順に,内部結合,共通結合,外部結合,制御結合,スタンプ結合,データ結合に分類できる。入出力に必要なデータ項目だけをモジュール間の引数として渡すのは,データ結合であり,モジュール結合度が最も弱い。

1)共通域に定義したデータを関係するモジュールが参照するのは,共通結合である。

2)制御パラメタを引数として渡し,モジュールの実行順序を制御するのは,制御結合である。

4)必要なデータを外部宣言して共有するのは,外部結合である。

平成21年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問6

モジュール設計書を基にモジュール強度を評価した。適切な評価はどれか。

[モジュール設計書(抜粋)]上位モジュールから渡される処理コードに対応した処理をする。処理コードが “1” のときは挿入処理,処理コードが “U” のときは更新処理,処理コードが “D” のときは削除処理である。

  1. これは “暗号的強度” のモジュールである。モジュール内の機能間に特別な関係はなく,むしろほかのモジュールとの強い関係性をもつ可能性が高いので,モジュール分割をやり直した方がよい。
  2. これは “情報的強度” のモジュールである。同一の情報を扱う複数の機能を,一つのモジュールにまとめている。モジュール内の各処理の入口点を設けているので,制御の結びつきがなく,これ以上のモジュール分割は不可能である。
  3. これは “連絡的強度” のモジュールである。モジュール内でデータの受け渡し又は参照を行いながら,複数の機能を逐次的に実行している。再度見直しを図り,必要に応じて更にモジュール分割を行った方がよい。
  4. これは “論理的強度” のモジュールである。関連した幾つかの機能を含み,パラメタによっていずれかの機能を選択して実行している。現状では大きな問題となっていないとしても,仕様変更に伴うパラメタの変更による影響を最小限に抑えるために,機能ごとのモジュールを分割するか入口点を設ける方がよい。
平成21年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問6

正解は,4. 「論理的強度のモジュール」である。パラメタが 1 のときは挿入処理,U のときは更新処理,D のときは削除処理を実行する。

参考文献

  • JIS X 25010:2013,「システム及びソフトウェア製品の品質要求及び評価(SQuaRE)−システム及びソフトウェア品質モデル」,”Systems and software engineering-Systems and software Quality Requirements and Evaluation (SQuaRE)-System and software quality models”
  • 共通フレーム 2013

更新履歴

  • 2022年11月18日 新規作成
  • 2022年11月19日 JIS X 25010:2013 で定義される製品品質特性「保守性」の副特性「モジュール性」を追加
  • 2022年11月20日 過去問題「平成23年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問5」を追加
  • 2022年11月25日 過去問題「平成21年度 秋期 システムアーキテクト試験 午前Ⅱ 問題 問6」を追加
  • 2022年12月9日 参考文献に「共通フレーム 2013」を追加
  • 2023年2月18日 モジュール分割技法を追加
  • 2024年3月7日 フォーカスキーフレーズ,メタディスクリプションを追加
  • 2024年3月17日 Glenford J. Myers (1978) の言葉を追加

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です