ホーム > システムアーキテクト試験 > 2009年
システムアーキテクト試験 2009年 午前2 問05
あるプログラム言語の解説書の中に次の記述がある。この記述中の“良いプログラム”がもっている特徴はどれか。
このプログラム言語では、関数を呼び出すときに引数を保持するためにスタックが使用される。引数で受け渡すデータを、どの関数からでも参照できる共通域に移せば、スタックの使用量を減らすことができるが、“良いプログラム”とは見なされないこともある。
エ:プログラムのステップ数が少なく、分かりやすい。
ア:実行するときのメモリの使用量が、一定以下に必ず収まる。
イ:実行速度について、最適化が行われている。
ウ:プログラムの一部(モジュール)を変更しても、残りの部分への影響が少ない。(正解)
解説
あるプログラム言語の解説書の中に次の記述がある。この記述中の“良いプログラム”がもっている特徴はどれか。【午前2 解説】
要点まとめ
- 結論:良いプログラムはモジュールの変更が他に影響しにくい設計を持つことが重要です。
- 根拠:共通域にデータを置くとスタック使用量は減るが、どこからでも参照可能なため依存関係が強まり影響範囲が広がります。
- 差がつくポイント:メモリ使用量や速度だけでなく、プログラムの保守性やモジュールの独立性を重視する視点が問われています。
正解の理由
選択肢ウ「プログラムの一部(モジュール)を変更しても、残りの部分への影響が少ない」が正解です。
問題文では「共通域にデータを置くとスタック使用量は減るが良いプログラムとは限らない」とあります。これは共通域の使用がモジュール間の依存を強め、変更時の影響範囲が広がるためです。
良いプログラムはモジュールの独立性を保ち、変更の影響を局所化することが求められます。
問題文では「共通域にデータを置くとスタック使用量は減るが良いプログラムとは限らない」とあります。これは共通域の使用がモジュール間の依存を強め、変更時の影響範囲が広がるためです。
良いプログラムはモジュールの独立性を保ち、変更の影響を局所化することが求められます。
よくある誤解
共通域を使うことでメモリ使用量が減るため「良いプログラム」と考えがちですが、保守性や影響範囲の観点が重要です。
また、実行速度やステップ数の少なさだけで良否を判断するのは誤りです。
また、実行速度やステップ数の少なさだけで良否を判断するのは誤りです。
解法ステップ
- 問題文の「共通域に移すとスタック使用量が減るが良いプログラムとは限らない」を理解する。
- 共通域の特徴として「どの関数からでも参照可能」=依存関係が強くなることを認識する。
- 良いプログラムの特徴として「モジュールの独立性」「変更の影響範囲の限定」が重要であることを思い出す。
- 選択肢を比較し、保守性に関するウが最も適切と判断する。
選択肢別の誤答解説
- ア:メモリ使用量が一定以下に必ず収まることは保証できず、良いプログラムの定義としては不十分です。
- イ:実行速度の最適化は重要ですが、問題文の共通域の話とは直接関係がありません。
- ウ:モジュールの独立性を保ち、変更の影響を少なくすることは良いプログラムの本質です。
- エ:ステップ数の少なさや分かりやすさは重要ですが、共通域の問題点を考慮すると保守性の方が優先されます。
補足コラム
共通域(グローバル変数など)を多用すると、プログラムの可読性や保守性が低下し、バグの原因となりやすいです。
モジュール設計ではデータのカプセル化や情報隠蔽を行い、依存関係を最小限に抑えることが推奨されます。
これにより、変更時の影響範囲を限定し、プログラムの品質を高めることができます。
モジュール設計ではデータのカプセル化や情報隠蔽を行い、依存関係を最小限に抑えることが推奨されます。
これにより、変更時の影響範囲を限定し、プログラムの品質を高めることができます。
FAQ
Q: なぜ共通域の使用は良いプログラムと見なされにくいのですか?
A: 共通域はどの関数からもアクセス可能なため、依存関係が強まり変更時の影響範囲が広がりやすいからです。
A: 共通域はどの関数からもアクセス可能なため、依存関係が強まり変更時の影響範囲が広がりやすいからです。
Q: スタックの使用量を減らすことは悪いことですか?
A: 減らすこと自体は悪くありませんが、共通域を使って減らすと保守性が低下するリスクがあります。
A: 減らすこと自体は悪くありませんが、共通域を使って減らすと保守性が低下するリスクがあります。
Q: モジュールの独立性を保つ具体的な方法は?
A: データのカプセル化やインターフェースの明確化、グローバル変数の使用を避けることが挙げられます。
A: データのカプセル化やインターフェースの明確化、グローバル変数の使用を避けることが挙げられます。
関連キーワード: モジュール設計, 共通域, スタック, 保守性, カプセル化, 依存関係, プログラム品質