リファクタリング
ソフトウェアの外部から見た振る舞いを変えずに、内部の構造を整理して、読みやすく保守しやすいプログラムに書き直すこと。
イマシルちゃんの解説
おもちゃ箱がぐちゃぐちゃだと、遊びたいおもちゃがなかなか見つからないよね。
中身は同じままで、種類ごとに分けて、取り出しやすく並べ直したら、すっきりするよね。
プログラムも、動きは何も変えずに、中をきれいに整理し直すことがあるんだ。
そうすると、あとから直したり、機能を足したりするのが、ぐっと楽になるんだよ。
より深い解説
定義
リファクタリングは、プログラムの機能(入力に対する出力)を変えずに、内部の構造を改善する作業である。重複したコードをまとめる、長い関数を分ける、分かりにくい名前を変える、といった小さな変更を積み重ねて行う。
主な例
| 手法 | 内容 |
|---|---|
| 関数の抽出 | 長い処理の一部を、名前を付けた関数に切り出す |
| 名前の変更 | 変数や関数に、役割が分かる名前を付ける |
| 重複の除去 | 同じ処理が何か所にもあるとき、1か所にまとめる |
| 条件の整理 | 複雑な条件分岐を、分かりやすい形に書き換える |
進め方
振る舞いを変えていないことを確かめるため、変更の前後で、同じテストがすべて通ることを確認する。小さく変更してはテストする、を繰り返す。修正がほかの部分に影響していないかを確かめるテストを、回帰テスト(リグレッションテスト、退行テスト)という。
アジャイル開発(特にXP:エクストリームプログラミング)では、テスト駆動開発とともに、日常的に行う作業とされる。
似た用語との区別
| 用語 | 内容 |
|---|---|
| リファクタリング | 外部から見た振る舞いを変えずに、保守性の高いプログラムに書き直す |
| リバースエンジニアリング | ソースコードから、設計書や仕様書を作り直す |
| コンポーネント指向の開発 | ソフトウェア部品を組み合わせて、システムを開発する |
| 回帰テスト | プログラムの修正が、ほかの部分に影響していないかを確かめる |