ITパスポート 2021年 問48
問題文
既存のプログラムを、外側から見たソフトウェアの動きを変えずに内部構造を改善する活動として、最も適切なものはどれか。
選択肢
ア:テスト駆動開発
イ:ペアプログラミング
ウ:リバースエンジニアリング
エ:リファクタリング(正解)
🔒 解説は解答すると表示されます
既存プログラムの内部構造改善(外から見た動きを変えない)【ITパスポート 解説】
正解の理由
問題文は「外側から見たソフトウェアの動きを変えずに内部構造を改善する活動」を問うています。これはソフトウェアの振る舞い(外から見える動作)はそのままに、コードの読みやすさ・保守しやすさ・設計の整理といった内部の質を向上させる作業です。こうした作業を指す用語がリファクタリングです。リファクタリング(英: refactoring、コードの内部構造を改善すること)は、機能を変えずに内部を整理することを目的とします。したがって選択肢の中では エ が最も適切です。
ポイント:
- 「外側から見た動きを変えずに」=振る舞いは維持する。
- 「内部構造を改善する」=設計やコードの品質を高める。 この2点が両方満たされるのがリファクタリングです。
解法ステップ
- 問題文からキーワードを抜き出す:外側から見た動きを変えない、内部構造を改善。
- 各選択肢の意味を短く思い出す:
- テスト駆動開発(TDD)=先にテストを書く開発手法。
- ペアプログラミング=2人で同時にコードを書く作業スタイル。
- リバースエンジニアリング=既存の成果物から設計や仕様を解析すること。
- リファクタリング=動作を変えずに内部を改善すること。
- 問題文の条件に合うものを選ぶ:内部だけを改善し振る舞いを変えない、に合致するのはリファクタリング(エ)。
選択肢別の誤答解説
-
ア: テスト駆動開発(Test-Driven Development, TDD)
- 説明:先にテストを書くことで仕様を明確にしてからコードを書く開発手法です。テストを書くこととコードを書く手順の話で、目的は品質向上や設計の改善に寄与しますが、「既存プログラムの内部構造をそのまま改善する」ことを直接指す言葉ではありません。
- なぜ不正解か:TDDは開発の進め方であり、必ずしも既存コードの内部整理(振る舞いを変えずに改善)を意味しないため。
-
イ: ペアプログラミング
- 説明:2人で1台のコンピュータに向かって共同でコードを書く作業形態です。役割分担(ドライバーとナビゲーター)で行うことが多いです。
- なぜ不正解か:作業方法・チームの働き方に関する用語で、「プログラムの内部構造を改善する」という固有の目的を表す語ではありません。
-
ウ: リバースエンジニアリング(reverse engineering)
- 説明:既存のソフトウェアや製品から設計や仕様を解析・再現する作業です。バイナリや動作から設計図を作るイメージです。
- なぜ不正解か:解析や再現が目的で、必ずしも「振る舞いを変えずに内部を改善する」ことを示さないため。場合によっては元と同じ振る舞いを再現するための作業ですが、「内部構造の改善を目的とする」という点でリファクタリングと異なります。
-
エ: リファクタリング(refactoring)
- 説明:既存のコードの外部から見える動作(振る舞い)を変えずに、内部コードの構造や設計を改善することです。可読性や保守性、拡張性を高めるために行います。
- なぜ正解か:問題文の「動きを変えずに内部構造を改善する」という条件に完全に一致します。よくある作業例としては、長い関数を分割する(Extract Method)や変数名の変更、重複コードの削除などがあります。
よくある誤解
-
「リファクタリングは機能追加と同じ」
- 誤解:リファクタリングは機能を変える・追加する作業だと思う。
- 正しくは:リファクタリングは振る舞いを変えない前提で内部を改善することです。機能追加や仕様変更は別の作業です。
-
「リファクタリングはテストが不要」
- 誤解:動作を変えないならテストは不要だろう。
- 正しくは:リファクタリング中にミスで振る舞いが変わることがあるため、単体テストや自動テストがあると安全に進められます。テストは安全ネットです。
-
「リバースエンジニアリングと同じ」
- 誤解:既存のコードを解析して綺麗にするならリバースエンジニアリングでも良い。
- 正しくは:リバースエンジニアリングは設計や仕様を解析する行為で、改善(リファクタリング)とは目的が違います。
補足コラム
-
よく使われるリファクタリング手法(例)
- Rename(名前をわかりやすくする)
- Extract Method(長い処理を小さなメソッドに分ける)
- Remove Duplicate Code(重複コードをまとめる)
- Inline(不要なメソッドや変数を元に戻す)
これらは「読みやすさ」「変更しやすさ」「バグを見つけやすさ」を改善します。
-
ツールの利用:多くの統合開発環境(IDE, Integrated Development Environment:統合開発環境)は安全に名前変更や抽出を自動で行うリファクタリング機能を備えています。手作業より安全で速いです。
-
テストとの関係:リファクタリングを安全に行うために、自動テスト(単体テストや結合テスト)を整備しておくと、リファクタリング後に機能が壊れていないか素早く確認できます。TDD(Test-Driven Development:テスト駆動開発)は、リファクタリングを行うための良い補助になります。
FAQ
Q1. リファクタリングでコードの動作を変えてはいけないのですか?
A1. 基本的には「外から見える動作を変えない」ことが前提です。ただし、設計変更や仕様改善の一環で振る舞いを変える場合は、それは機能変更でありリファクタリングとは区別します。
A1. 基本的には「外から見える動作を変えない」ことが前提です。ただし、設計変更や仕様改善の一環で振る舞いを変える場合は、それは機能変更でありリファクタリングとは区別します。
Q2. 既存のシステムを大幅に書き換えるとき、それはリファクタリングですか?
A2. 大幅な書き換えで内部だけでなく振る舞いや仕様が変わる場合は「リライト」や「リプレース」と呼びます。少しずつ内部を整理して振る舞いを保つのがリファクタリングです。
A2. 大幅な書き換えで内部だけでなく振る舞いや仕様が変わる場合は「リライト」や「リプレース」と呼びます。少しずつ内部を整理して振る舞いを保つのがリファクタリングです。
Q3. リファクタリングは誰が行うべきですか?
A3. 開発者チームが行います。小さな改善は日常的に行い、大きなリファクタリングは計画してテストを整えた上で行うのが安全です。
A3. 開発者チームが行います。小さな改善は日常的に行い、大きなリファクタリングは計画してテストを整えた上で行うのが安全です。
関連キーワード: リファクタリング、コード品質、可読性、保守性、テスト駆動開発(TDD)、ペアプログラミング、リバースエンジニアリング、リファクタリング手法、IDEリファクタリングツール、自動テスト

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

