スポンサーリンク

【応用情報技術者試験】システム開発技術を学ぼう!      ~第3章~モジュール分割技法と評価

システム開発技術とは、企業や組織の「業務課題を解決し、効率化する仕組み(システム)」をIT技術を用いて、企画・設計・プログラミング・テスト・運用するまでの一連の技術とプロセスの総称で、具体的には、要件定義、設計、コーディング、テスト、運用・保守などの工程があり、ウォーターフォールやアジャイルといった様々な開発手法が存在します。 

画像参照:https://www.co-well.jp/blog/system_dev_flow

モジュール分割

モジュール分割とは、プログラム全体を特定の機能や役割を持つ独立した部品(モジュール)に分割する設計手法で、大規模開発の効率化、可読性向上、保守性・再利用性の向上、複数人での並行開発を可能にするために行われます。

目的とメリット

  • 並行開発・分担: チームで担当箇所を分け、同時並行で開発できる。
  • 保守性の向上: 問題発生時に修正箇所を特定しやすく、影響範囲を限定できる。
  • コードの再利用: 共通機能をモジュール化し、他の場所やシステムで使い回せる。
  • 可読性と理解しやすさ: プログラムの全体像が把握しやすくなり、コードが読みやすくなる。
  • テストの容易さ: モジュールごとに独立してテスト(単体テスト)を行える。 

STS分割

STS分割(Source-Transform-Sink分割)とは、プログラムをデータの流れに着目し、「Source(源泉:入力)」「Transform(変換:処理)」「Sink(吸収:出力)」の3つの主要なモジュールに分割する構造化設計手法です。データの入力から出力までの一連の流れを、「最大抽象点」というデータが入力データとも出力データともみなされなくなる地点を見つけて分割することで、モジュールの独立性を高め、保守性や再利用性を向上させます。 

ポイント

  • 着目点: データの流れ(データフロー)。
  • 3つのモジュール:
    • Source (源泉): データの入力、読み込み、取得など。
    • Transform (変換): データ計算、加工、変換処理など。
    • Sink (吸収): データ出力、表示、書き出しなど。
  • 最大抽象点:
    • 入力の最大抽象点: 入力データが処理されて、もはや入力データとして認識できなくなる地点。
    • 出力の最大抽象点: 処理されたデータが出力データとして認識されなくなる地点。
  • 目的: 入力・変換・出力の役割を明確に分けることで、モジュールの機能的な独立性を高め、全体の設計をシンプルにし、保守性を向上させる。 

どのような時に使うか

  • バッチ処理: 未加工のデータを集めて、業務に役立つ形に加工・出力するような、データの流れが明確なシステム設計に適しています。 

TR分割

TR分割(トランザクション分割)とは、ソフトウェア開発において、データの流れや処理の単位(トランザクション)に着目してプログラムを機能ごとに分割するモジュール設計手法の一つで、入力データの種類によって処理が分岐する場合に、それぞれの処理を独立したモジュールとして作成することで、コードの再利用性や保守性を高め、独立性の高い設計を実現するための重要な技法です。 

主な特徴

  • 着目点: データ処理の「流れ」や「種類(トランザクション)」に着目します。
  • 目的: トランザクション(一連の処理)ごとにモジュールを分割し、各モジュールが特定のトランザクションのみを処理するように設計します。
  • 効果:
    • 高独立性: 各モジュールは担当するトランザクションのみを処理すればよいため、他の処理に影響されにくく、高い独立性を持ちます。
    • 保守性向上: 変更が必要な際も、特定のトランザクション部分のモジュールだけを修正すればよいため、影響範囲が限定されます。
    • 再利用性: 共通する処理があれば、共通機能分割などと組み合わせて、他のモジュールから呼び出すことも可能です。
  • 適用例: オンラインリアルタイム処理で、入力データ(トランザクション)の種類に応じて処理が異なる場合(例:給与計算の基本給・残業手当などの更新処理)に特に有効です。 

モジュール強度

モジュール強度とは、ソフトウェアの部品(モジュール)内部に含まれる機能同士の関連性の強さを示す指標で、「凝集度」とも呼ばれ、強度が高いほど「1モジュール1機能」に近く、独立性が高く、保守性・再利用性が良い設計とされます。具体的には、単一の機能に特化した「機能的強度(高い)」から、関連のない機能の寄せ集めである「暗合的強度(低い)」まで7段階あり、目標は機能的強度です。 

概要

  • 目的: モジュール内の機能がどれだけ「まとまっているか」を示す。
  • 強度が高い(高凝集):
    • 1つの機能に特化している(例: 1モジュール1機能)。
    • 独立性が高く、他のモジュールへの影響が少ない。
    • 保守性・再利用性が向上する。
  • 強度が低い(低凝集):
    • 関連性の低い複数の機能が混在している。
    • 独立性が低く、変更時の影響範囲が広がりやすい。 

強度の種類(高い順)

  1. 機能的強度: 1つのモジュールが1つの機能のみを提供。
  2. 情報的強度: 同じデータを扱う機能群。
  3. 連絡的強度: モジュール内でデータを受け渡す機能群。
  4. 手順的強度: 決まった順序で実行される機能群。
  5. 時間的強度: ある時点でまとめて実行される機能群(初期化処理など)。
  6. 論理的強度: 論理的に関連するが、引数で使い分けられる機能群。
  7. 暗合的強度: 全く関連性のない機能群(最も低い)。 

「モジュール結合度」との違い

  • モジュール強度: モジュール『内』の機能の関連性。
  • モジュール結合度: モジュール『間』の関連性の強さ。
  • 設計目標は、モジュール強度を高め(高凝集)、モジュール結合度を弱くする(低結合)こと。 

モジュール結合度

モジュール結合度とは、ソフトウェアを構成する部品(モジュール)同士の結びつきの強さを示す指標で、結合度が低い(疎結合)ほど独立性が高く、保守性・再利用性が向上する良い設計とされています。結合度が高い(密結合)と、一つのモジュールを変更した際の影響が他のモジュールに広がりやすくなるため、一般的にはデータ連携に引数(パラメータ)を用いる「データ結合」が最も低く、内部実装に依存する「内容結合」が最も高くなります。 

結合度の低い(良い)状態

  • 疎結合: モジュール間の依存関係が弱い状態。
  • メリット: 変更に強く、テストしやすく、再利用しやすい。
  • 理想: モジュールの機能が独立しており、インターフェース(引数など)だけ決めて開発できる。 

結合度の高い(悪い)状態

  • 密結合: モジュール間の依存関係が強い状態。
  • デメリット: 変更の影響範囲が広がり、メンテナンスが困難になる。
  • : 他のモジュールの内部データや実装に直接依存している状態。 

代表的な結合度の種類(高い順)

  1. 内容結合(高): 他のモジュールの内部にまで依存。最も悪い。
  2. 共通結合: 複数のモジュールが共通の大域変数(グローバル変数)を参照。
  3. 外部結合: モジュールが単一の大域変数を参照。
  4. 制御結合: 引数で制御情報(フラグなど)を渡し、処理を変える。
  5. スタンプ結合: 構造体などのまとまったデータを引数で渡す。
  6. データ結合(低): 単純なデータ(数値、文字列など)のみを引数で渡す。最も良い。 

コメント