リファクタリングとは,ソフトウェアの品質を向上させることを目的として,ソフトウェアを再構成する作業のことを指します.
ソフトウェアのソースコードや設計モデルを修正や拡張が容易な構造にしておくと,その後の開発作業(機能拡張やバグの修正に伴う作業)をより容易にすることができます. このため,いったん完成したソフトウェアであっても,将来行う開発作業に備えてリファクタリングを行うことは重要であると言えます.
下図に示すリファクタリングでは,2つのクラスに含まれていたgetNameメソッドを新たに作成した共通の親クラスにまとめています. このリファクタリングを行うことで,同様のクラス(例:accountantクラス)を追加する作業や,getNameメソッドを修正する作業が容易になります.
リファクタリングの対象は,大まかに2種類に分けることができます.
ソースコードの中から,修正や拡張が難しそうな構造になっている部分を見つけ出し,良い構造になるようにソースコードを再構成します.
設計モデルの中から,修正や拡張が難しそうな構造になっている部分を見つけ出し,良い構造になるように設計モデルを再構成します.
肥後研究室では,リファクタリングを行うソフトウェア開発者を支援する手法・ツールの実現に取り組んできました. 具体的には,以下のテーマを扱ってきました.
コードクローンとは,ソースコード中の一致もしくは類似したコードを持つコードのことであり,優先的にリファクタリングを検討すべきと言われています. 下図のように,コードクローンの部分を1つのメソッドに集約し,コードクローンであった部分をメソッド呼出文に置き換えることで,リファクタリングを行うことができます. 私たちは,コードクローンの内容に応じた効果的なリファクタリング方法を提示する手法を実現しました.
リファクタリングの効果は必ずしも一定ではないため,これから行うリファクタリングの効果を予測することは難しいと言えます. 私たちは,CKメトリクスという尺度を用いて,リファクタリングの効果を予測する手法を実現しました.
ソフトウェアの設計に良く用いられるUML図の1つであるクラス図を対象としたリファクタリング支援手法について研究を行っています. UMLモデルからリファクタリングを行うことが可能な部分を抽出し,リファクタリングの適用例を提示することで支援を行っています.