基本情報技術者 2017年 春期 午前(科目A) 問50
問題文
ソフトウェア開発の活動のうち、アジャイル開発においても重視されているリファクタリングはどれか。
選択肢
ア:ソフトウェアの品質を高めるために、2人のプログラマが協力して、一つのプログラムをコーディングする。
イ:ソフトウェアの保守性を高めるために、外部仕様を変更することなく、プログラムの内部構造を変更する。(正解)
ウ:動作するソフトウェアを迅速に開発するために、テストケースを先に設定してから、プログラムをコーディングする。
エ:利用者からのフィードバックを得るために、提供予定のソフトウェアの試作品を早期に作成する。
🔒 解説は解答すると表示されます
リファクタリングの定義と目的【午前解説】
正解の理由
イは「ソフトウェアの保守性を高めるために、外部仕様を変更することなく、プログラムの内部構造を変更する。」とあり、これはリファクタリングの定義そのものです。リファクタリングは機能(外部振る舞い)を変えずにコードの可読性、拡張性、保守性を高める一連の小さな設計改善のことを指します。アジャイル開発では継続的デリバリと頻繁な変更に耐えうるコードベースを維持するため、テストと組み合わせてリファクタリングを繰り返すことが推奨されます。
解法ステップ
- 問題文のキーワードを確認:「外部仕様を変更することなく」「内部構造を変更する」→リファクタリングの定義を思い出す。
- 各選択肢の目的を素早く判別:協働開発/内部改善/テスト先行/試作品作成のどれかを対応づける。
- 「外部仕様を変えるかどうか」で絞り込み:外部挙動を保つものがリファクタリングであるため正答を特定する。
- 正答を確認:イが該当し、他はそれぞれ別のソフトウェア開発手法であると判断する。
選択肢別の誤答解説
- ア: ソフトウェアの品質を高めるために、2人のプログラマが協力して、一つのプログラムをコーディングする。
→ これはペアプログラミングの説明で、コードの品質向上や知識共有に有効ですが、リファクタリングの定義ではありません。 - イ: ソフトウェアの保守性を高めるために、外部仕様を変更することなく、プログラムの内部構造を変更する。
→ 正解。リファクタリングの定義に完全に一致します。 - ウ: 動作するソフトウェアを迅速に開発するために、テストケースを先に設定してから、プログラムをコーディングする。
→ これはテスト駆動開発(TDD: Test-Driven Development)の説明で、テストを先に書いてから実装する手法です。 - エ: 利用者からのフィードバックを得るために、提供予定のソフトウェアの試作品を早期に作成する。
→ これはプロトタイピング(またはMVP)で、早期に動く試作品を作って評価を得るアプローチであり、リファクタリングの定義ではありません。
よくある誤解
- リファクタリング=ペアプログラミングと誤解する:ペアプログラミングは協働でコーディングする手法で、リファクタリングは「内部構造を変える技術的作業」です。
- リファクタリング=外部仕様変更と混同する:仕様を変える改修や機能追加はリファクタリングではなく、要求変更やリライトに該当します。
- リファクタリングはテスト不要という誤解:安全にリファクタリングするためには自動化されたテスト(ユニットテスト等)が不可欠です。
補足コラム
リファクタリングは小さな変更を積み重ねることが基本です。典型的な手法には「メソッド抽出(Extract Method)」「変数やメソッドのリネーム」「条件文の簡素化」などがあり、これらはコードの意図を明確にしてバグ発見を容易にします。安全に行うためにはユニットテストや自動結合テストが前提となり、アジャイルでは「リファクタリングのルール」をチームで合意して継続的に実施します。リファクタリングは設計の健康診断とも言え、短期的には時間を要するように見えても長期的には保守コストを下げます。
FAQ
Q: リファクタリングとリライト(書き直し)の違いは何ですか?
A: リファクタリングは外部挙動を保ったまま内部構造を改善する作業。リライトは仕様や実装を大幅に見直し外部挙動やインターフェースが変わる場合が多いです。
A: リファクタリングは外部挙動を保ったまま内部構造を改善する作業。リライトは仕様や実装を大幅に見直し外部挙動やインターフェースが変わる場合が多いです。
Q: リファクタリングはいつ行うべきですか?
A: 新機能追加の前後、バグ修正時、コードを読む際に改善の余地が見つかったときなど、継続的に小さく行うのが最適です。
A: 新機能追加の前後、バグ修正時、コードを読む際に改善の余地が見つかったときなど、継続的に小さく行うのが最適です。
Q: テストがないとリファクタリングしてはいけませんか?
A: 自動テストがないと安全性が確保できないため、テストを整備してから行うか、段階的にテストを追加しつつ進めるべきです。
A: 自動テストがないと安全性が確保できないため、テストを整備してから行うか、段階的にテストを追加しつつ進めるべきです。
Q: アジャイルでは誰がリファクタリングを行いますか?
A: 開発チーム全員の責任です。コード品質はチームで維持し、レビューやペアプログラミングで支援します。
A: 開発チーム全員の責任です。コード品質はチームで維持し、レビューやペアプログラミングで支援します。
関連キーワード: アジャイル, リファクタリング, 保守性, リファクタリング 定義, ペアプログラミング, テスト駆動開発, プロトタイピング, コードスメル, 継続的リファクタリング, リファクタリング 手法

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

