こんにちは。beaglesoftの真鍋です。
リファクタリングという言葉を当たり前のように聞くようになって久しいですが、意外とリファクタリングが何かと言うことについてはきちんと定義されていないように思います。
というのも、コーディングが一段落したところでプログラムの内容を整理する作業がリファクタリングと呼ばれているように思えるからです。ただ、実際のところそのような場合には仕様の認識間違いや対応漏れなどへの追加のコーディングも行われるケースが多いわけです。
マーチン・ファウラーが 新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES) で記述している「リファクタリングとは」では次のように記述されています。
リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善していく作業を指します。非常に統制された方法でコードを洗練していくため、バグの入り込む余地はほとんどありません。リファクタリングを行えば、以前に書いたコードの設計が向上することになります。
新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)
- 作者: Martin Fowler,児玉公信,友野晶夫,平澤章,梅澤真史
- 出版社/メーカー: オーム社
- 発売日: 2014/07/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る
つまり、「外部の振る舞いを保ったままで、内部の構造を改善していく」ことがリファクタリングだと述べています。また、リファクタリングは「非常に統制された方法でコードを洗練していく」とありリファクタリングの手法についても定義されています。
リファクタリングという言葉が開発工程の後の方でプログラムの内容を整理する作業として使われることに疑問を持っているわけではないのですが、「リファクタリング」という言葉が何を指すのかについていつも意識しなければならないなぁと思ったりしてます。どこか最近のアジャイル開発という言葉と似ているようにも感じます。^1
さて、本来の意味でのリファクタリングですが、マーチン・ファウラーによるとコーディングテクニックではなく設計の見直しによるコードの洗練と位置づけられています。これはユニットテストが設計と不可分であるということと同じように思います。
私もソフトウェア開発は開発工程が進むにつれてあるべきことが明確になると感じているので、可能な限り局所的な設計の見直しは随所で行えることは必要なことだと思います。もちろん、根本的な見直しはソフトウェアの鮮度を下げることになるためよほどのことがない限り難しいでしょうが…。
テスト駆動開発、リファクタリング、そしてエクストリームプログラミング(XP)の流れが私は大好きです。自分が開発をするときに、足がかりとなる思想で、原則論ですよね。
リファクタリングが絶版にならず再版されたことはとても喜ばしいことです。願わくばケント・ベックのテスト駆動開発も再版されるとうれしいですが…。
- 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2003/09
- メディア: 単行本
- 購入: 45人 クリック: 1,058回
- この商品を含むブログ (161件) を見る
- 作者: ケントベック,シンシアアンドレス,Kent Beck,Cynthia Andres,角征典
- 出版社/メーカー: オーム社
- 発売日: 2015/06/26
- メディア: 単行本
- この商品を含むブログ (5件) を見る