メインコンテンツへ
開発技術リファクタリング

リファクタリングを実施するにあたって最も重要なこととして適切なものはどれか。

ア.リファクタリング前に新機能の要件を整理し、リファクタリングと同時に新機能を実装することで効率を最大化する。
イ.リファクタリング後のパフォーマンス向上を証明するために、必ず実行速度のベンチマーク測定を実施してから着手する。
ウ.外部から見た振る舞いが変わっていないことを確認するために、リファクタリング前後で自動テストが通ることを確認する。正解
エ.リファクタリングはソースコードの行数を削減することが最終目標であり、行数が増えるリファクタリングは実施すべきでない。

解説

リファクタリングは「建物の耐震補強工事」のようなもの。外から見た建物(機能)は変えずに内部の柱・骨格(コード構造)を強化します。工事中に「ちゃんと同じ建物か」を確認するのが自動テストの役割です。

なぜ ウ が正解か

リファクタリングの核心は「外部から見た振る舞いを変えない」ことです。この条件を安全に満たすためには、変更前後で自動テスト(ユニットテスト等)が全て通ることを確認しながら小さな変更を繰り返します。テストなしのリファクタリングはデグレード(バグの混入)リスクが高く、Kent Beckも「テストなしのリファクタリングはリファクタリングではない」と述べています。ウが正解です。

なぜ ア は間違いか

リファクタリングと新機能追加は同時に行うべきではありません。外部振る舞いを変えないのがリファクタリングの定義であり、新機能追加は「振る舞いを変える行為」です。混在させると問題の原因特定が困難になります。

なぜ イ は間違いか

リファクタリングの目的は主にコードの可読性・保守性向上であり、必ずしもパフォーマンスが向上するとは限りません。ベンチマーク測定が前提条件というのは誤りです。

なぜ エ は間違いか

リファクタリングの目標は行数削減ではありません。長すぎるメソッドの分割(行数が増える)、重複コードの関数化(行数が減る)など、行数に関わらず可読性・保守性の向上が目標です。

出典: AI生成問題(学習用)