応用情報技術者 2016年 秋期 午後 問08
モジュール分割に関する次の記述を読んで、設問1~4に答えよ。
E社は、英会話教室や料理教室などのカルチャースクール向けにSaaSを提供する会社である。E社のサービスは、画面デザインやシステム機能を顧客向けにカスタマイズできる点が人気を集めており、約100社の顧客が利用している。E社のサービスを提供するシステムには、顧客向けのカスタマイズを容易にするために、システム機能の部品化による高い再利用性が求められている。
E社では、ビジネス拡大を目的としてスポーツクラブ向けの施設利用状況管理サービスを提供することになった。施設利用状況管理サービスを提供するシステム(以下、新システムという)の開発は、E社開発部のF君が担当することになった。
〔新システムの概要〕
新システムは、会員管理機能、利用管理機能、利用状況集計機能の三つの機能を提供する。会員管理機能は、会員の氏名や連絡先などの情報を登録・更新・削除する機能である。利用管理機能は、スポーツクラブの店に設置する受付機を用いて、会員の利用施設や利用開始・終了日時などの施設利用実績を記録する機能である。利用状況集計機能は、各施設の利用状況を集計してレポート出力する機能である。
〔新システムのプログラムの開発方針〕
F君は、E社のサービス提供方法を考慮したプログラムの開発方針を策定し、上司の承認を得た。F君が策定したプログラム開発方針を図1に示す。

〔モジュール分割手法の選定〕
F君は、新システムのモジュール設計を行うに当たり、モジュール分割手法の調査を行った。モジュール分割手法には、データを処理するトランザクションに着目して
一連の処理をトランザクション単位にまとめてモジュールに分割するa、データの流れに着目してデータの入力・変換・出力の観点からモジュールに分割するb、データ構造に着目して入力データ構造と出力データ構造の対応関係からモジュールに分割するcなどがあることが分かった。
F君は、新システムは、会員の施設利用実績データを蓄積し、それを集計した結果をレポート出力するので、cが最適な手法であることを調査報告書にまとめ、上司の承認を得た。
〔利用状況集計機能の入出力データ分析〕
利用状況集計機能のプログラムは、施設利用実績データを集計し、店ごとに施設の利用状況をレポート出力する。
プログラムへの入力は、受付機で記録した施設利用実績データである。プログラムからの出力は、店ごとの施設の月間利用者数、最多利用者情報などを記載した施設利用レポートである。施設利用実績データの例を表1に、施設利用レポートの例を図2に示す。


F君は、プログラムへの入出力データの分析を行い、入力データ構造図及び出力データ構造図を作成した。F君が作成した入力データ構造図を図3に示す。

〔利用状況集計機能のプログラム構造の設計〕
F君は、〔利用状況集計機能の入出力データ分析〕の結果を基に、プログラム構造の設計を行った。F君が設計したプログラム構造図を図4に示す。

〔利用状況集計機能のモジュール分割〕
F君は設計したプログラム構造図を基に、プログラム開発方針に従ってモジュール分割の検討を行った。F君が検討したプール利用状況出力処理のモジュール分割案を図5に示す。図5中の①〜④の破線は、モジュール分割案を示している。

F君は、利用状況集約機能以外の機能についてもモジュール分割を行い、モジュール設計を完了させた。
設問1:
本文中のa〜cに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:STS分割
イ:TR分割
ウ:オブジェクト指向
エ:共通機能分割
オ:ジャクソン法
カ:ワーニエ法
模範解答
a:イ
b:ア
c:オ
解説
解答の論理構成
- 問題文の確認
- 【問題文】では次のように三つの手法を説明しています。
「データを処理するトランザクションに着目して一連の処理をトランザクション単位にまとめてモジュールに分割するa」
「データの流れに着目してデータの入力・変換・出力の観点からモジュールに分割するb」
「データ構造に着目して入力データ構造と出力データ構造の対応関係からモジュールに分割するc」
- 【問題文】では次のように三つの手法を説明しています。
- 各手法の特徴と記号対応
- トランザクション単位での分割は、Transaction を表す 「TR分割」 と一致します。
従って a = イ。 - 入力(Source)―変換(Transform)―出力(Sink)のデータ流れで分割するのは 「STS分割」。
よって b = ア。 - 入出力データ構造を対応付けてプログラム構造を導く手法は 「ジャクソン法」 が代表例です。
したがって c = オ。
- トランザクション単位での分割は、Transaction を表す 「TR分割」 と一致します。
誤りやすいポイント
- 「STS分割」と「ジャクソン法」をどちらも“データ指向”と覚えて混同しがちです。前者はデータの流れ、後者はデータの構造に着目する点が決定的に異なります。
- 「TR分割」を“トランザクション処理システム(TPS)の略”と誤解し、別の言葉を探してしまうケースがあります。ここでの TR は Transaction の頭文字です。
- 「共通機能分割」「オブジェクト指向」など解答群の他選択肢は名前の汎用性が高く一見正答にも見えますが、問題文が示す三分類の説明とは合致しません。
FAQ
Q: STS分割はバッチ処理にしか使えませんか?
A: いいえ。リアルタイムシステムでも「入力―変換―出力」が明確に分離できる場合は適用可能です。
A: いいえ。リアルタイムシステムでも「入力―変換―出力」が明確に分離できる場合は適用可能です。
Q: ジャクソン法と構造化設計の関係は?
A: ジャクソン法は構造化設計の一技法で、データ構造に基づいてプログラム構造を導く点が特徴です。
A: ジャクソン法は構造化設計の一技法で、データ構造に基づいてプログラム構造を導く点が特徴です。
Q: TR分割を選ぶときの決め手は?
A: システムの主目的が「多数のトランザクションを確実に処理すること」であり、各トランザクションが独立して完結している場合に適しています。
A: システムの主目的が「多数のトランザクションを確実に処理すること」であり、各トランザクションが独立して完結している場合に適しています。
関連キーワード: TR分割、STS分割、ジャクソン法、モジュール分割、データ流れ設計
設問2:
図3中のd、eて答えよ。
模範解答
d:施設名
e:会員氏名
解説
解答の論理構成
-
入力データの項目確認
問題文の表1には、列見出しとして
「利用店」「施設名」「会員番号」「会員氏名」「利用日」「利用開始時刻」「利用終了時刻」
が示されています。これは入力となる「施設利用実績データ」の構造そのものです。 -
図3での位置づけ
図3の入力データ構造図は、表1の項目を
・基本データ
・反復データ
・連接データ
・選択データ
に分類して階層化したものです。- d は「施設利用実績*」直下にある反復データであり、表1の列見出しのうち「利用店」に続く項目です。したがって「施設名」となります。
- 「会員情報」連接データの内部には既に「会員番号」が基本データとして示されています。ここでe としてもう一つ反復データが求められており、表1の「会員番号」に対応するもう一つの会員属性は「会員氏名」です。
-
結論
よって
d:施設名
e:会員氏名
誤りやすいポイント
- 「利用店」と「施設名」の位置を取り違える
図3のdは「利用店」の次に来る反復データなので「施設名」ですが、「利用店」と勘違いしがちです。 - 「会員氏名」を基本データと誤解
「会員番号」に対して「会員氏名」は通常一意に付随しますが、図3では「会員情報」が連接データであり、その内部に反復データが含まれる形です。ここを基本データと見てしまうと誤答になります。 - 図3の凡例読み落とし
反復データ(*付き)・連接データ(枝分かれ)・選択データ(○付き)を区別しないまま項目を当てはめると、階層の対応関係を誤ります。
FAQ
Q: 反復データと連接データの違いが分かりません。
A: 反復データは同一レベルの同一構造が繰り返される場合を示します(例:複数施設名)。連接データは複数の要素を束ねて一つの意味を持つ場合に使われます(例:「会員情報」=番号と氏名のペア)。
A: 反復データは同一レベルの同一構造が繰り返される場合を示します(例:複数施設名)。連接データは複数の要素を束ねて一つの意味を持つ場合に使われます(例:「会員情報」=番号と氏名のペア)。
Q: なぜ「会員氏名」は反復データになるのですか。
A: 「会員情報」が複数件存在し得るため、その内部の各項目も件数分繰り返される可能性があります。図3では*が付いていないものの、連接内で繰り返し現れることを示すために反復データとして表現されています。
A: 「会員情報」が複数件存在し得るため、その内部の各項目も件数分繰り返される可能性があります。図3では*が付いていないものの、連接内で繰り返し現れることを示すために反復データとして表現されています。
Q: 「利用開始時刻」「利用終了時刻」は選択データなのですか。
A: 図3では「利用時刻」を親とした選択データで「開始」「終了」が分岐しています。選択データは「どちらか一方」という意味ではなく、「一組を構成する対の要素」を示すために使われる場合もあります。
A: 図3では「利用時刻」を親とした選択データで「開始」「終了」が分岐しています。選択データは「どちらか一方」という意味ではなく、「一組を構成する対の要素」を示すために使われる場合もあります。
関連キーワード: データ構造図、反復データ、連接データ、モジュール分割、入出力分析
設問3:
図4中のf、gに入れる適切な字句を20字以内で答えよ。
模範解答
f:店ごとの施設利用レポート出力処理
g:利用者なし表示出力処理
解説
解答の論理構成
-
ループ対象の特定
- 【問題文】には「施設利用レポートは、店ごとに施設の利用状況を集計してレポート出力する」とあります。
- 図4の最上段は反復処理を示す長方形で、下位に「ヘッダ情報出力処理」「プール利用状況出力処理」など店別に繰り返される処理がぶら下がっています。
- したがって f は “店” を単位に各施設のレポートをまとめて出力する処理であると分かります。
→ f:店ごとの施設利用レポート出力処理
-
選択処理の内容確認
- 図2の注記に「当月の施設の利用者がいないときは、… “※当月の<施設名>利用者なし” という利用者なし表示を出力する」と明記されています。
- 図4で「最多利用者情報出力処理」の下に選択処理(○付き)があり、利用者有無で処理を分岐していることが分かります。
- その選択肢に相当するモジュール名は “利用者なし表示” を出力する処理です。
→ g:利用者なし表示出力処理
誤りやすいポイント
- 反復対象を「施設」と誤解し「施設ごとの…」と書いてしまう。図4では店単位で反復している点に注意が必要です。
- g を「最多利用者情報出力処理」と重複させるミス。図4で既に同名の基本処理が存在し、選択処理は別物です。
- 図2の注記を読み落とし、利用者なし場合の処理があることに気付かない。
FAQ
Q: 上位利用者情報はどのモジュールで出力しますか?
A: 図4では「上位利用者○出力処理」が担当します。ここで○は施設別に「プール」「ジム」などに置換されます。
A: 図4では「上位利用者○出力処理」が担当します。ここで○は施設別に「プール」「ジム」などに置換されます。
Q: 利用者なしの場合でも「最多利用者情報出力処理」は呼ばれますか?
A: 呼ばれますが、その直下の選択処理で利用者なしを判定し、g(利用者なし表示出力処理)だけが実行されるフローになります。
A: 呼ばれますが、その直下の選択処理で利用者なしを判定し、g(利用者なし表示出力処理)だけが実行されるフローになります。
Q: モジュール分割手法でcが選ばれた理由は?
A: 「システムは、会員の施設利用実績データを蓄積し、それを集計した結果をレポート出力する」とあり、入出力データ構造の対応が明確なため“データ構造図によるモジュール分割”が最適と判断されています。
A: 「システムは、会員の施設利用実績データを蓄積し、それを集計した結果をレポート出力する」とあり、入出力データ構造の対応が明確なため“データ構造図によるモジュール分割”が最適と判断されています。
関連キーワード: モジュール分割、反復処理、データ構造図、強度、結合度
設問4:〔利用状況集計機能のモジュール分割〕について(1)、(2)に答えよ。
(1)図5中の②の破線の下の処理を複数の施設の利用状況出力処理で共通して利用するモジュールとする場合、モジュールの結合度は何結合となるか、解答群の中から選び記号で答えよ。
解答群
ア:データ結合
イ:スタンプ結合
ウ:制褂結合
エ:外部結合
オ:共通結合
カ:内容結合
模範解答
ウ
解説
解答の論理構成
-
【問題文】の指示
“図5中の②の破線の下の処理を複数の施設の利用状況出力処理で共通して利用するモジュールとする場合” とあります。
つまり「上位利用者○出力処理」以下を一つの汎用モジュールにし、プール・ジム・スタジオのいずれからも呼び出す設計です。 -
共通モジュールに必要な引数
プール用に呼ばれたときは “プール” のデータを、ジム用に呼ばれたときは “ジム” のデータを出力しなければなりません。
さらに
設問4:〔利用状況集計機能のモジュール分割〕について(1)、(2)に答えよ。
(2)図5中の処理をプログラム開発方針に従って、モジュール強度を高め、モジュール結合度を下げるようにモジュール分割するとき、最適な分割を図5中の①〜④の番号を用いて答えよ。また、その理由を40字以内で述べよ。
模範解答
分割:④
理由:データ結合のモジュールに分割でき、再利用やカスタマイズが容易となるから
解説
解答の論理構成
- 【問題文】の図1には
・「共通機能をモジュール化し、モジュール強度を高め、モジュール結合度を下げる。」
と明記されています。したがって再利用性と結合度低減が評価軸になります。 - 図5の破線①は「プール利用状況出力処理」と下位処理群を一体化させた大きなモジュールです。ここでは機能が多岐にわたり、内容結合になりやすく強度が低下します。
- 破線②・③は「最多利用者情報出力処理」と「上位利用者○出力処理」「利用者ごと*の出力処理」をまとめています。ここでも“制御フラグ”による選択処理が混在し、制御結合の懸念があります。
- 破線④は
・「会員氏名出力処理」
・「利用回数出力処理」
・「総利用時間出力処理」
の3個を独立モジュールとして切り出しており、各モジュールは“1種類のデータ項目”だけを扱うデータ結合です。 - データ結合はモジュール強度の序列で上位に位置し、要求された「モジュール強度を高め」「モジュール結合度を下げる」に合致するため、最適な分割は「④」となります。
誤りやすいポイント
- 「大きくまとめた方が呼び出し回数が減り効率的」と考え破線①を選択すると、内容結合のリスクを見落とす点。
- 「選択処理があるから柔軟」と破線②・③を選ぶと、制御情報の授受が発生し制御結合となる点。
- モジュール強度と結合度の序列を混同し、「共通機能 = 同じ画面単位」と早合点してしまう点。
FAQ
Q: データ項目ごとの小粒なモジュールはオーバーヘッドが増えませんか?
A: 物理的な呼び出しコストより保守・再利用の効果が大きい場合に採用します。本問は「約100社の顧客」向けに「カスタマイズ」が頻発する前提なので、保守性が優先されます。
A: 物理的な呼び出しコストより保守・再利用の効果が大きい場合に採用します。本問は「約100社の顧客」向けに「カスタマイズ」が頻発する前提なので、保守性が優先されます。
Q: 破線②を選ぶと具体的にどのような結合になりますか?
A: 「最多利用者情報出力処理」が「上位利用者○出力処理」に制御フラグを渡すため制御結合となり、要件変更時に両モジュールを同時に修正する恐れがあります。
A: 「最多利用者情報出力処理」が「上位利用者○出力処理」に制御フラグを渡すため制御結合となり、要件変更時に両モジュールを同時に修正する恐れがあります。
Q: データ結合とスタンプ結合の違いは?
A: データ結合は必要なデータだけを渡すのに対し、スタンプ結合は構造体のような集合データ全体を渡します。本問の「会員氏名」など単一項目はデータ結合です。
A: データ結合は必要なデータだけを渡すのに対し、スタンプ結合は構造体のような集合データ全体を渡します。本問の「会員氏名」など単一項目はデータ結合です。
関連キーワード: モジュール強度、モジュール結合度、データ結合、再利用性、保守性


