リファクタリング

hongkongKimchee2005-12-01

リファクタリングとは、外部的・内部的の動作を変えずにソースコードを変更すること(主に可読性の向上、つまりメンテしやすさのため)。
しかし「リファクタが必要なのでもう少し時間がかかります」「リファクタしたのでテストをやり直さなければなりません」なんて発言を聞くと、げんなりする。そういうのはリファクタリングとデバッギングを混同している。
リファクタリングとは動作が変わらないことだから、基本的にテストのやり直しは必要ない(ただし回帰テストは除く)。
とはいえ、リファクタリングといえどもコードを変更することには違いないのだから、動作が変更される危険性はゼロではない。
とくに手作業でリファクタすると(もちろんコピペでやるのだが)危険性が高い。最近はリファクタリングツールが普及しているので手作業でリファクタすることは少ないが、自動化されたリファクタリングでも、複数のリファクタリングを繰り返すと危険性は高くなる。
そんなリファクタリングでどうやって「外部的・内部的の動作が変わらないこと」を保障するのかというと、そこにテストの存在意義がある。
何回でも実行できる回帰テストがあるからこそ、リファクタリングは安全に実行できる。
理想的にいうと、テストがそろってない状況でリファクタリングはすべきではないが、現実にはそうも言っていられない状況が多いのも事実だ。
*1