generated at
リファクタリング
> 外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること

定義
> リファクタリング (名刺) : 外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること
> リファクタリングする (動詞) : 一連のリファクタリングを適用して、外部から見た振る舞いの変更なしに、ソフトウェアを再構築すること
個々のリファクタリングは非常に小さいステップ、またはそれらの組み合わせ
それゆえに、たとえ未完成であってもいつでも中断が可能
一度に行えそうな場面でも非常に小さなステップで進んでいく → 一見非効率に見えるが、各要素が秩序だっており、デバッグにかかる時間も短くなるため、速く進む
リファクタリングはフレームワークの開発に不可欠
リファクタリングは、コードを読みやすくして、修正しやすいものに保つための鍵
リファクタリングはリスクが高い
体系的に行う必要がある

アジャイルにおいては、事前設計の代わりに、設計上のコードの臭いを探して修正していく (= リファクタリング)
コードの臭いの典型例は重複
だが、ゴミをリファクタリングしてもゴミ (GIGO : Garbage In, Garbage Out)
完璧ではないが健全なアーキテクチャへの適用と、事前の設計と組み合わせて使うのが良い