リファクタリングは『動作を変えずに内部構造を改善』する活動。Fowler の古典書籍の典型手法を覚えます。
リファクタリング は外部仕様を変えずに内部構造を改善する活動。
Martin Fowler の書籍 (1999, 2018) が古典で、メソッド抽出・変数のインライン化・条件分岐の整理など多数の手法があります。
なんでわざわざやるの?
技術的負債を継続的に返済して、変更容易性を保つためなのよ。
リファクタしないとコードはエントロピー的にどんどん複雑になって、最後は誰も触れなくなっちゃうの。
失敗しないコツって、あるのかなぁ?
(1) テストを揃える、(2) 小さく頻繁に行う、(3) 1つのリファクタでは1つの目的に絞る、(4) コミットを細かく分ける、ですね。
テストがない部分は『キャラクタライズテスト』で動作を固定してから着手します。
AP では『リファクタリングの定義』や『コードの不吉な臭い (重複・長すぎるメソッド・神クラス等)』が問われやすいわね。
確認クイズ
リファクタリングの定義として、最も適切なものはどれか。
- 外部仕様も内部構造も大幅に書き直して別の設計にすること
- 外部仕様を変えずに、コードの内部構造を改善すること
- 新機能を追加してプログラムを拡張すること
- テストを書きながら開発を進める手法
こたえを見る
正解: 2. 外部仕様を変えずに、コードの内部構造を改善すること
リファクタリングは『外部仕様 (動作・I/F) を変えずに、内部構造のみ改善する』活動。新機能追加や仕様変更とは明確に区別され、変更前後でテストが同じく通ることが必須です。