戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

システムアーキテクト 2010年 午前205


問題文

プログラムの構造化設計におけるモジュール分割技法の説明のうち、適切なものはどれか。

選択肢

STS分割はプログラムをデータの流れに着目して分割する技法であり、入力データの処理、入力から出力への変換処理及び出力データの処理の三つの部分で構成することで、モジュールの独立性が高まる。(正解)
TR分割はプログラムをデータの構造に着目して分割する技法であり、オンラインリアルタイム処理のように、入力トランザクションの種類に応じて処理が異なる場合に有効である。
共通機能分割は、プログラムをデータの構造に着目して分割する技法であり、共通の処理を一つにまとめ、モジュール化する。
ジャクソン法は、プログラムをデータの流れに着目して分割する技法であり、バッチ処理プログラムの分割に適している。

🔒 解説は解答すると表示されます

STS分割【午前2解説】

正解の理由

選択肢のうち、が正しいのは、STS分割がデータの流れ(Source → Transformation → Sink)に着目してプログラムを「入力処理」「変換処理」「出力処理」の三つの部分に分ける技法であるためです。STS(Source‑Transformation‑Sink)はデータの流れ構造を直接プログラム構造に反映させる手法で、各部分を独立したモジュールにすることで単一責任化が進み、モジュールの結合度を低く保ちやすくなります。したがって、選択肢の記述は正しい構造化設計の説明です。

解法ステップ

  1. 出題語句(STS、TR、共通機能分割、ジャクソン法)それぞれの「着目点」を整理する。
    • STS:データの流れ(Source/Transformation/Sink)
    • TR:Transaction/Record(入力トランザクションとデータレコード)
    • 共通機能分割:機能(処理の共通部分)の抽出
    • ジャクソン法:データ構造(入力/出力レコード構造)に基づく分割
  2. 各選択肢の記述と整理した着目点を照合する。着目点が一致すれば正解候補になる。
  3. 照合の結果、STSに関する説明が正しく表現されている選択肢がであると判断する。

選択肢別の誤答解説

  • ア(正しい)
    STS分割はSource(入力側の処理)・Transformation(入力→出力への変換)・Sink(出力側の処理)に分ける考え方で、データの流れを基準にモジュール化するため記述通り正しい。
  • イ(誤り)
    TR分割は「データの構造に着目して分割する技法」であるとは言えません。TRはTransaction/Record分割の略で、入力トランザクションの種類ごとに処理(トランザクションモジュール)と共通のデータ構造(レコードモジュール)を分ける考え方です。したがって「オンラインリアルタイム処理のように入力トランザクションの種類に応じて処理が異なる場合に有効」という後半は適切ですが、前半の「データの構造に着目して分割する」という表現が誤りで説明の整合性が取れていません。
  • ウ(誤り)
    共通機能分割は「共通の処理を一つにまとめる」点は合っていますが、「データの構造に着目して分割する技法」であるという説明は誤りです。共通機能分割は機能(処理)に着目した分割で、同一処理をまとめることでコード重複を防ぎ再利用性を高めます。
  • エ(誤り)
    ジャクソン法(Jackson Structured Programming)はプログラムを主にデータ構造に基づいて分ける手法で、入力や出力のレコード構造をプログラム構造に対応させる点が特徴です。バッチ処理に適しているという点は概ね正しいものの、「データの流れに着目して分割する技法」という前半は誤りで、したがって選択肢全体として不適切です。

よくある誤解

  • STSを「State‑Transition(状態遷移)」に基づく手法と混同する。
    → 正しくは Source‑Transformation‑Sink の略で、データの流れ(入力→変換→出力)に着目する方式です。
  • TR分割は「データ構造中心」と言ってしまう誤り。
    → TRはトランザクション(入力種別)とレコード(データ)という観点の混成で、特にトランザクションの分類が重要なオンライン処理に適します。
  • ジャクソン法とSTSを同義に扱う。
    → 両者ともデータに関連するが、ジャクソン法はデータ構造そのものをプログラム構造に写像するのに対し、STSは処理の流れ(Source→Transformation→Sink)に分割します。

補足コラム

STS分割は単純で理解しやすく、入力形式が安定しているバッチ系だけでなく、パイプライン処理やETL(抽出→変換→投入)などデータ処理パイプライン設計にも適用しやすいです。たとえば、次のように処理を明確に分離するとテストや保守が容易になります。
# STS分割のイメージ
def read_source(path):
    # 入力データの読み取り(Source)
    with open(path) as f:
        return [line.strip() for line in f]

def transform(records):
    # 変換処理(Transformation)
    return [r.upper() for r in records if r]

def write_sink(path, records):
    # 出力処理(Sink)
    with open(path, 'w') as f:
        f.writelines(r + '\n' for r in records)

# メインは各モジュールを結合するだけ
data = read_source('in.txt')
out = transform(data)
write_sink('out.txt', out)
この分離により、例えば入力形式が変わってもread_sourceだけを修正すれば済むケースが多く、結合テストの範囲も限定できます。

FAQ

Q: STSとジャクソン法、どちらを選ぶべきですか?
A: 入力/出力のデータ構造が処理ロジックを強く決める場合(例:複雑なレコード構造)はジャクソン法、処理を「取り込み→変換→出力」のパイプラインで整理したい場合はSTSが有効です。システム特性に応じて使い分けます。
Q: TR分割はどんな場面で有効ですか?
A: 入力トランザクションの種類ごとに処理が大きく異なるオンライン業務処理(受付、照会、更新など)で有効です。トランザクションモジュールとレコード(データ)モジュールに分ける設計が適しています。
Q: 共通機能分割とモジュールの再利用はどう関係しますか?
A: 共通処理を独立モジュールにまとめることで、重複実装を防ぎ保守性と再利用性が向上します。ただし、粒度が粗すぎると単一責任原則に反し、逆に結合度が高くなることがあるので注意が必要です。

関連キーワード: STS分割、Source‑Transformation‑Sink、TR分割、Transaction‑Record、ジャクソン法、Jackson Structured Programming、共通機能分割、構造化設計、モジュール分割、単一責任原则
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

システムアーキテクト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について