スポンサーリンク

【応用情報技術者試験】システム開発技術を学ぼう!      ~第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. データ結合(低): 単純なデータ(数値、文字列など)のみを引数で渡す。最も良い。 

覚え方
数が多いので、結合度の低い順で「デスセイガイキョウナイ」と各名称の頭の文字をつなげて覚えるのがおすすめです。

大域変数(グローバル変数)
プログラムの全範囲(スコープ)からアクセスや変更が可能な変数です。

スタンプ結合の具体例
顧客情報(名前、住所、電話番号、購買履歴)を管理するシステムで、名前と電話番号しか必要ない関数に、顧客情報の「構造体」全体を渡す場合です。

キーワード

モジュールとは

モジュールは、プログラムを機能ごとに分けた部品です。

たとえば販売システムなら、

  • 受注入力
  • 在庫確認
  • 請求計算
  • 帳票出力

のように役割ごとに分けます。

目的は主に次の3つです。

  • 開発しやすくする
  • 保守しやすくする
  • 変更の影響範囲を小さくする

最重要:モジュール評価の2軸

試験ではここが核心です。

凝集度(きょうしゅうど)
※モジュール強度と同等の意味合いです。

モジュール内部のまとまりの強さ

高いほど良い

つまり、1つのモジュールが1つの明確な役割だけを持つ状態です。

結合度

モジュール同士の依存の強さ

低いほど良い

つまり、他のモジュールにあまり頼らない状態です。


凝集度(高いほどよい)

試験では「どれがよいか」を問われます。

悪い → 良い の順

① 偶発的凝集

関係ない処理がたまたま集まっている

例:ログ出力、計算、印刷が同じモジュール


② 論理的凝集

似た種類の処理をまとめたもの

例:入力処理をまとめたが、条件分岐で処理が変わる


③ 時間的凝集

同じタイミングで実行する処理をまとめる

例:初期化処理、終了処理


④ 手順的凝集

実行順序が決まっている処理をまとめる

例:入力 → チェック → 変換


⑤ 連絡的凝集

同じデータを扱う処理をまとめる

例:顧客情報を読み込み、更新、保存


⑥ 情報的凝集

同じデータ構造に対する複数操作

例:顧客マスタの検索、追加、削除


⑦ 機能的凝集(最良)

単一の明確な機能だけを持つ

例:消費税計算だけ行う


結合度(低いほどよい)

悪い → 良い の順

① 内容結合(最悪)

他モジュール内部を直接参照・変更


② 共通結合

共通領域(グローバル変数)を共有


③ 外部結合

外部装置や外部フォーマットに依存


④ 制御結合

フラグで他モジュールの処理を制御

例:mode=1なら検索、mode=2なら更新


⑤ スタンプ結合

必要ないデータも含めて構造体ごと渡す


⑥ データ結合(最良)

必要なデータだけを引数で渡す


出題されやすいポイント

頻出1

「高凝集・低結合」が理想

これが最重要です。


頻出2

グローバル変数は共通結合

よく問われます。


頻出3

フラグで処理を分岐 → 制御結合

午後問題でよく出ます。


頻出4

必要な値だけ引数で渡す → データ結合

良い設計です。


覚え方(試験向け)

凝集度

機能が最良、偶発が最悪


結合度

データが最良、内容が最悪


知識に自信ができた方は、今度は自身のキャリアアップに向けて準備してみませんか?

未経験から、ITエンジニアへ。
「IT業界に興味はあるけれど、自分にできるか不安」「何から始めればいいのか分からない」そんな方のために、Tech GO は未経験からのIT転職を専門的にサポートします。求人を紹介するだけではなく、あなたの強みを整理し、応募準備から入社後の成…

まずは無料でキャリア相談

コメント