IPA ソフトウェア設計・保守・再利用 — 頻出論点と過去問
頻出論点
1. この分野は何か
1つのプログラムをどんな部品に分け、部品どうしをどうつなぐかで、直しやすさや使い回しやすさが大きく変わります。部品の結びつきの強さ、クラスどうしの関係、繰り返し使える設計の型、稼働後の手直しの種類は、名前と中身の組合せを取り違えやすいところです。
2. 実際の出題のされ方
ソースコードから仕様書を起こす手法、外から見た動きを保ったまま中を整理する活動、公開されたサービスを組み合わせて新しいコンテンツを作る手法については、名前と定義の組合せを選ぶ問題があります。これらはいずれもITパスポートで出ており、ソフトウェア保守に含まれる作業の範囲を判断する問題もあります。
モジュール結合度とオブジェクト指向におけるクラスどうしの関係、保守の分類は、応用情報技術者の午前と高度試験の午前Iの両方にまたがる論点です。結合度では、受け渡し方の説明から結合の名前を当てる問題や、いくつかの受け渡し方のうち結合度が最も低いものを選ぶ問題が繰り返し出題されています。クラスについては、サブクラスとスーパークラスの操作の関係や集約の正誤を判断する問題と、図形描画ツールのクラス図に「継承の分割」を行った後の図を選ぶ問題があります。保守では、問題が起きていないのに仕様書を作り直す作業がどの分類に当たるかが問われています。
高度試験の午前IIでは、設計原則やパターン、システム全体の組み立て方まで踏み込みます。設計原則の説明の見分け、クラス図に示したパターンを当てはめたときの効果、Observerパターンで実現できること、共通の処理を呼び出す記述を外にまとめる技法の名前が出ています。アーキテクチャパターンでは、特徴の説明から名前を選ぶ問題と、名前から説明を選ぶ問題の両方があります。マイクロサービスについては利点と、障害が広がるのを抑える仕組みが問われ、再利用の手法ではマッシュアップの例や、特定の業務分野の知識や部品を整えて使い回す活動の名前を選ぶ問題もあります。
3. 学習のポイント
モジュール結合度は、モジュール同士の結びつきの強さを表す指標であり、結合度が低い(弱い)ほど独立性が高く、保守や再利用がしやすくなります。弱い順(独立性が高い順)に並べて、それぞれのデータの受け渡し方を区別できるようにします。
| 結合度(弱い順) | モジュール間の受け渡し・共有の仕組み |
|---|---|
| データ結合 | 処理に必要な単一のデータ項目(単純な変数)だけを引数として渡します。 |
| スタンプ結合 | レコードや構造体などのデータ構造を引数として渡します。 |
| 制御結合 | 相手の処理論理や実行順序を切り替えるための制御フラグなどを引数として渡します。 |
| 外部結合 | 外部宣言された単一のデータ項目(大域的な変数)を複数モジュールで共有します。 |
| 共通結合 | 大域的な共通データ領域(構造体や共通ブロック)を複数モジュールで共有します。 |
| 内容結合 | 他モジュールの内部データを直接参照・変更したり、内部へ直接分岐したりします。 |
引数で渡す方が大域的データを共有するよりも結合度が低く、同じ引数渡しや大域共有の中では、データ構造全体よりも必要な単一項目だけを扱う方が結合度は低くなります。
オブジェクト指向の基本概念と設計原則は、クラス間の関係と役割分担に着目して整理します。
- 汎化と継承: 似たクラスから共通する部分を取り出して上位のクラスにまとめるのが汎化で、下位のクラスはその属性や操作を引き継ぎ、必要なら中身を自分用に書き換えます(オーバーライド)。抽象クラスは、引き継がせるための枠として定義し、それ自身からはインスタンスを作らないクラスです。
- 継承の分割: 性質の違う2つの軸(たとえば通知の手段と通知の内容)を1本の継承の木で表すと、組合せの数だけサブクラスが増えます。継承の分割は、この増え方を止め、どちらの軸を増やすときもクラスを1つ足すだけで済むようにするリファクタリングです。
- 設計原則: 開放・閉鎖原則は、機能を足すときに出来上がった部分のコードを書き換えずに済むよう、拡張の口を開けておく考え方です。依存性逆転の原則は、上位の部品も下位の部品も、具体的な作りではなく両者の間に置いた抽象(インタフェース)に依存させる考え方です。また、権限の確認のように複数のプログラムに散らばる共通処理を分離し、呼び出し方の宣言を別に書いて組み込む技法としてアスペクト指向プログラミングがあります。
再利用可能な設計の定石であるソフトウェアパターンは、対象とする粒度によってデザインパターンとアーキテクチャパターンに分かれます。
- デザインパターン: オブジェクト指向で繰り返し現れる設計上の問題と、その解き方の型に名前を付けたもので、GoFのパターンは生成・構造・振る舞いの3つに分かれます。システム全体の骨組みを決めるアーキテクチャパターンとは粒度が違います。たとえばStrategyパターンは処理の手順を差し替えのきく別のクラスに切り出す型で、Observerパターンは、あるオブジェクトの変化を、それを見張る側のオブジェクトへまとめて知らせる型です。
- アーキテクチャパターン: ソフトウェア全体の骨組みの型です。MVCは、データと処理(Model)、画面の表示(View)、入力の受け付け(Controller)を分け、画面を作り替えても中の処理に手を入れずに済むようにします。Brokerは、分散したサービスの間に仲介役を置き、呼び出す側が相手の場所や作りを知らなくても済むようにします。
- マイクロサービスアーキテクチャ: アプリケーションを、それぞれ単独で動かせる小さなサービスに分けて組み立てる方式です。サービスごとに作り替えや配備ができる代わりに、サービス間の呼出しはネットワーク越しになります。呼出し先の不調が全体に広がらないよう、失敗が続いた相手への呼出しをしばらく止める仕組み(サーキットブレーカー)を組み込みます。
保守と既存資産の活用に関する用語は、稼働後の作業かどうか、外から見た動きを変えるかどうか、何を調べ何を整えるかで整理します。
- ソフトウェア保守(JIS X 0161): 本番稼働(引き渡し)後に行う変更作業です。納入前の開発期間中に行うバグ修正は保守に含まれません。保守は目的に応じて次の4つに分類されます。
- 是正保守: 引き渡し後に見つかった不具合(バグ)を訂正する保守です。
- 適応保守: 法改正やOSの更新など、変化した外部環境でも使い続けられるようにする保守です。
- 完全化保守: 利用者のための改良や、性能・保守性を高めるための手直しとして行う保守です。
- 予防保守: 潜在的な不良を見つけ、障害として顕在化する前に修正する保守です。
- 既存コードの解析・改善と再利用技法:
- リファクタリング: 外部から見た機能仕様や振る舞いを変えずに、プログラムの内部構造を改善して保守性を高める手法です。
- リバースエンジニアリング: 出来上がったプログラムや製品を調べ、そこから仕様や設計を書き起こすことです。
- ドメインエンジニアリング: 対象とする業務分野を絞り、その分野で繰り返し使う知識や部品、道具を前もって整えておく活動です。
- マッシュアップ: 他者が公開しているWebの機能やデータを取り込み、組み合わせて新しいサービスやページを作ることです。
4. 間違えやすいところ
- 結合度の名前と受け渡し方の取り違え: 結合度の記述の正誤を問う問題では、JUMP命令で他のモジュールへ直接飛び込む関係を外部結合とする誤答肢がありました。相手の中へ直接入り込むのは、結合度が最も高い内容結合です。引数で渡すのか、大域的なデータを共有するのか、相手の内部に直接触れるのかを先に分け、次に単一のデータ項目かデータ構造かで絞り込みます。
- マイクロサービスの利点と引き換えの取り違え: 利点を選ぶ問題では、各サービスのデータの整合性を確保しやすいとする誤答肢がありました。データがサービスごとに分かれるので、整合性をそろえるのはむしろ難しくなります。
- 継承と集約の取り違え: クラス間の関係の正誤を問う問題では、集約の関係にあるオブジェクトどうしが属性と操作を共有するとする誤答肢がありました。集約は全体と部分のつながりを表すだけで、属性や操作を分け合う関係ではありません。
- 保守の分類の判断: 仕様書と現状のコードの不整合を解消するために仕様書を作り直す作業の分類を問う問題では、これを是正保守とする誤答肢がありました。是正保守は引き渡し後に見つかった不具合を直す作業であり、問題が起きていない状態で行う作業には当たりません。
- リバースエンジニアリングとリファクタリングの取り違え: リバースエンジニアリングに当たるものを選ぶ問題では、ソースプログラムを読みやすく書き換える作業が誤答肢にありました。外から見た動きを保ったままコードを書き換えるのはリファクタリングであり、仕様を書き起こす作業ではありません。
ソフトウェア設計・保守・再利用の理解度チェック
ソフトウェア設計・保守・再利用の過去問一覧
- 2025(R7)秋 データベーススペシャリスト 午前II 問24 オブジェクト指向における抽象クラスで,できないことはどれか。…
- 2025(R7)秋 エンベデッドシステムスペシャリスト 午前II 問20 銀行の勘定系システムといった特定の分野のシステムに対して,業務知識,再利用部品,ツールなどを体系的に整備し,再利用を促進…
- 2025(R7)春 ネットワークスペシャリスト 午前II 問24 Pattern-Oriented Software Architectureのアーキテクチャパターンのうち,ブローカーの…
- 2025(R7)春 システムアーキテクト 午前II 問2 オブジェクト指向設計における設計原則の説明のうち, 開放・閉鎖原則のものはどれか。…
- 2025(R7)春 システムアーキテクト 午前II 問5 デザインパターンの一つであるObserverパターンを利用して実現できることはどれか。…
- 2024(R6)秋 応用情報技術者 午前 問47 マイクロサービスアーキテクチャを利用するとき,システム構築上の利点はどれか。…
- 2024(R6)秋 プロジェクトマネージャ 午前II 問13 ソフトウェアパターンのうち,GoFのデザインパターンの説明はどれか。…
- 2024(R6)秋 情報処理安全確保支援士 午前II 問22 ソフトウェアパターンのうち,GoFのデザインパターンの説明はどれか。…
- 2024(R6)春 応用情報技術者 午前 問45 オブジェクト指向におけるクラス間の関係のうち,適切なものはどれか。…
- 2024(R6)春 応用情報技術者 午前 問46 モジュール結合度に関する記述のうち,適切なものはどれか。…
- 2024(R6)春 高度試験共通 午前I 問16 オブジェクト指向におけるクラス間の関係のうち,適切なものはどれか。…
- 2024(R6)春 システムアーキテクト 午前II 問3 マイクロサービスアーキテクチャを採用してアプリケーションソフトウェアを設計している。障害発生による影響の範囲を局所化して…
- 2024(R6)春 システムアーキテクト 午前II 問4 オブジェクト指向におけるデザインパターンに関する記述として,適切なものはどれか。…
- 2024(R6)春 システムアーキテクト 午前II 問5 モジュール間のデータの受渡し方法のうち,最も低いモジュール結合度となるものはどれか。…
- 2024(R6)春 システムアーキテクト 午前II 問7 現在のプログラム A, B に, 在庫テーブルを更新した後に更新ログを出力する機能を追加する。この機能は共通モジュールで…
- 2023(R5)秋 応用情報技術者 午前 問48 問題は発生していないが,プログラムの仕様書と現状のソースコードとの不整合を解消するために,リバースエンジニアリングの手法…
- 2023(R5)秋 エンベデッドシステムスペシャリスト 午前II 問17 デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。…
- 2023(R5)秋 エンベデッドシステムスペシャリスト 午前II 問18 ドメインエンジニアリングの説明として,適切なものはどれか。…
- 2023(R5)秋 プロジェクトマネージャ 午前II 問14 オブジェクト指向における汎化の説明として,適切なものはどれか。…
- 2023(R5)春 応用情報技術者 午前 問46 モジュールの独立性を高めるには,モジュール結合度を低くする必要がある。モジュール間の情報の受渡し方法のうち,モジュール結…
- 2023(R5)春 高度試験共通 午前I 問16 モジュールの独立性を高めるには,モジュール結合度を低くする必要がある。モジュール間の情報の受渡し方法のうち,モジュール結…
- 2023(R5)春 ネットワークスペシャリスト 午前II 問25 マッシュアップを利用してWebコンテンツを表示する例として,最も適切なものはどれか。…
- 2023(R5)春 システムアーキテクト 午前II 問4 ヒューマンインタフェースをもつシステムにおいて,機能とヒューマンインタフェースとの相互依存を弱めることによって,修正性や…
- 2023(R5)春 システムアーキテクト 午前II 問6 デザインパターンの説明はどれか。…
- 2023年度(R5) ITパスポート 問39 運用中のソフトウェアの仕様書がないので,ソースコードを解析してプログラムの仕様書を作成した。この手法を何というか。…
- 2023年度(R5) ITパスポート 問49 リファクタリングの説明として,適切なものはどれか。…
- 2022(R4)秋 エンベデッドシステムスペシャリスト 午前II 問20 マイクロサービスアーキテクチャを利用してシステムを構築する利点はどれか。…
- 2022(R4)春 応用情報技術者 午前 問46 モジュールの独立性の尺度であるモジュール結合度は,低いほど独立性が高くなる。 次のうち,モジュールの独立性が最も高い結合…
- 2022(R4)春 応用情報技術者 午前 問48 問題は発生していないが,プログラムの仕様書と現状のソースコードとの不整合を解消するために,リバースエンジニアリングの手法…
- 2022(R4)春 高度試験共通 午前I 問17 問題は発生していないが,プログラムの仕様書と現状のソースコードとの不整合を解消するために,リバースエンジニアリングの手法…
- 2022(R4)春 システムアーキテクト 午前II 問2 ソフトウェアパターンのうち,GoFのデザインパターンの説明はどれか。…
- 2022(R4)春 システムアーキテクト 午前II 問3 Pattern-Oriented Software Architecture (POSA)のアーキテクチャパターンのうち…
- 2022(R4)春 システムアーキテクト 午前II 問5 デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。…
- 2022(R4)春 システムアーキテクト 午前II 問6 モジュール間のデータの受渡し方法のうち,最も低いモジュール結合度となるものはどれか。…
- 2022年度(R4) ITパスポート 問47 ソフトウェア保守に関する記述のうち,適切なものはどれか。…
- 2022年度(R4) ITパスポート 問61 大学のキャンパス案内のWebページ内に他のWebサービスが提供する地図情報を組み込んで表示するなど,公開されているWeb…
- 2021(R3)秋 応用情報技術者 午前 問48 図は,ある図形描画ツールのクラス図の一部である。新たな形状や線種で図形を描画する機能の追加を容易にするために,リファクタ…
- 2021(R3)秋 データベーススペシャリスト 午前II 問25 マッシュアップの説明はどれか。…
- 2021(R3)秋 エンベデッドシステムスペシャリスト 午前II 問21 ヒューマンインタフェースをもつシステムにおいて,機能とヒューマンインタフェースの相互依存を弱めることによって,修正性や再…
- 2021(R3)秋 プロジェクトマネージャ 午前II 問17 マッシュアップの説明はどれか。…
- 2021(R3)春 ネットワークスペシャリスト 午前II 問25 ソフトウェアを保守するときなどに利用される技術であるリバースエンジニアリングに該当するものはどれか。…
- 2021(R3)春 システムアーキテクト 午前II 問5 マイクロサービスアーキテクチャを利用してシステムを構築する利点はどれか。…
- 2021(R3)春 システムアーキテクト 午前II 問6 オブジェクト指向における汎化の説明として,適切なものはどれか。…
- 2021年度(R3) ITパスポート 問41 クラスや継承という概念を利用して,ソフトウェアを部品化したり再利用することで,ソフトウェア開発の生産性向上を図る手法とし…
- 2021年度(R3) ITパスポート 問48 既存のプログラムを,外側から見たソフトウェアの動きを変えずに内部構造を改善する活動として,最も適切なものはどれか。…
- 2019(R1)秋 システムアーキテクト 午前II 問3 ソフトウェアパターンのうち,GoFのデザインパターンの説明はどれか。…
- 2019(R1)秋 システムアーキテクト 午前II 問4 Javaサーブレットを用いたWebアプリケーションソフトウェアの開発では,例えば,doGetやdoPostなどのメソッド…
- 2019(R1)秋 システムアーキテクト 午前II 問5 あるプログラム言語によるプログラミングの解説書の中に次の記述がある。この記述中の“良いプログラム”がもっている特性はどれ…
- 2017(H29)秋 システムアーキテクト 午前II 問5 ソフトウェアパターンのうち,GoFのデザインパターンの説明はどれか。…
- 2017(H29)秋 システムアーキテクト 午前II 問13 銀行の勘定系システムなどのような特定の分野のシステムに対して,業務知識,再利用部品,ツールなどを体系的に整備し,再利用を…
- 2016(H28)秋 システムアーキテクト 午前II 問7 プログラムの構造化設計におけるモジュール分割技法の説明のうち,適切なものはどれか。…
- 2015(H27)秋 システムアーキテクト 午前II 問4 オブジェクト指向設計における設計原則のうち,開放・閉鎖原則はどれか。…
- 2015(H27)秋 システムアーキテクト 午前II 問5 デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。…
- 2015(H27)秋 システムアーキテクト 午前II 問7 オブジェクト指向におけるデザインパターンに関する記述として,適切なものはどれか。…
- 2015(H27)秋 システムアーキテクト 午前II 問13 銀行の勘定系システムなどのような特定の分野のシステムに対して,業務知識,再利用部品,ツールなどを体系的に整備し,再利用を…