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