基本情報 平成29年度 秋期 問59:マネジメント系に関する問題
ソフトウェア開発の活動のうち, アジャイル開発においても重視されているリフ ァクタリングはどれか。
- aソフトウェアの品質を高めるために, 2 人のプログラマが協力して, 一つのプ ログラムをコーディジグする。
- bソフトウェアの保守性を高めるために, 外部仕様を変更することなく, プログ ラムの内部構造を変更する。正答
- c動作するソフトウェエアを迅速に開発するために, テストケースを先に設定して から, プログラムをコーディングする。
- d利用者からのフィードバックを得るために, 提供予定のソフトウェアの試作品 を早期に作成する。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
リファクタリング=「動作は変えずに、中身の構造をきれいにする」作業。
部屋の模様替えで例えると、「部屋にあるモノ(機能)はそのまま」「配置や収納方法だけ整理して使いやすくする」というイメージ。
コードでは、変数名を分かりやすくしたり、長い関数を小分けにしたり、重複を統合したり。外から見ると動作は変わらないけど、保守しやすくなります。
👉 覚え方:リファクタリング=中身の整理整頓(動作はそのまま)!
ほかの選択肢:a 2人で書く=ペアプログラミング/c テスト先=TDD/d 試作品=プロトタイピング。
なぜこれが正解か
正解は b。リファクタリング(refactoring)は、ソフトウェアの外部仕様(振る舞い)を変えずに、内部構造を改善する活動。可読性・保守性・拡張性の向上が目的で、テストで動作不変を保証しながら進める。Martin Fowlerの著書『Refactoring』(1999)で体系化、XP・アジャイル開発の中核技法として定着。
各選択肢の解説
- a 2人で1つのコードを協力作成:ペアプログラミング。XP(エクストリームプログラミング)の代表的プラクティス。
- b 外部仕様変更なし・内部構造変更:リファクタリング → 正解。
- c テストケース先・後でコーディング:TDD(テスト駆動開発)。Red-Green-Refactorサイクル。
- d 利用者フィードバック用の試作品:プロトタイピング。
覚え方・ひっかけ注意
リファクタリングの大原則は 「外側から見て動作が変わらない」。これを保証するため、事前に自動テストを十分に整備することが前提条件。テストなしでのリファクタリングは「ただのコード書き直し」で危険。TDD のRefactorステップがリファクタリングそのもの、と理解。
理論的背景
リファクタリングはMartin Fowlerが1999年に体系化した。「コードの臭い(code smell)」を検出し、対応する「リファクタリング技法」を適用する手順論で、約60〜70の標準技法がカタログ化されている。
主要なコードの臭い
- 重複コード(Duplicated Code):DRY原則違反。
- 長すぎるメソッド(Long Method):単一責任原則違反、可読性低下。
- 巨大クラス(Large Class):責務過多、God Class。
- 長すぎる引数リスト(Long Parameter List):Introduce Parameter Object等で改善。
- データクラス(Data Class):振る舞いを持たない貧血モデル。
- switch文の濫用(Switch Statements):ポリモーフィズムで置換。
- 散弾銃手術(Shotgun Surgery):1つの変更が複数箇所に波及。
代表的リファクタリング技法
- Extract Method:長いメソッドから処理を抽出。
- Inline Method:呼び出しが冗長な場合に展開。
- Rename Variable/Method:意図を明確化。
- Extract Class:神クラスを分割。
- Move Method:責務を持つクラスへ移動。
- Replace Conditional with Polymorphism:switch→継承。
- Introduce Parameter Object:引数群をオブジェクト化。
アジャイルでの位置づけ
- TDD のRefactorフェーズ:Red(失敗テスト)→Green(最小コードで合格)→Refactor(構造改善)の3段サイクル。
- 継続的リファクタリング:機能追加と並行して常時改善(ボーイスカウト・ルール:来た時より綺麗に)。
- 技術的負債(technical debt)の返済:Ward Cunninghamの比喩。リファクタリングは利息支払い+元本返済。
IDE/ツール支援
- IntelliJ IDEA, Eclipse, Visual Studio:抽出・名前変更・移動等の自動リファクタリング機能。
- SonarQube:コードの臭いを静的解析で自動検出。
- GitHub Copilot, Cursor:AI支援によるリファクタリング提案。
試験での位置づけ
FE「ソフトウェア開発・アジャイル」分野で頻出。XP(リファクタリング、TDD、ペアプロ、継続的インテグレーション、計画ゲーム等)の主要プラクティスの定義が中心。応用情報・PM・SAではアジャイル開発の運用、スケーリング(SAFe、LeSS、Scrum@Scale)まで踏み込む。
選択肢の発展補足
cのTDDはKent Beckが提唱、リファクタリングと表裏一体の関係。aのペアプログラミングはモブプログラミング(3人以上)へ発展、リモートワーク時代はMobsterやVSCode Live Share等のツール支援。dのプロトタイピングは画面モックアップ(Figma、Sketch)から動作プロトタイプ(CodePen、StackBlitz)まで段階的に進化、要件定義段階の重要技法。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成29年度 秋期 問59/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。