複数のコードクローンの集約を支援するツール
コードクローンの集約
コードクローン(Code Clone)とは,プログラム中に存在する形や構造の似た部分のことです. プログラムにコードクローンがたくさん存在すると,そのプログラムに新機能を付け加えたり,プログラムからバグを取り除いたりすることが困難になります.このようなコードクローンが引き起こす問題への対策として,コードクローンを1つに集約する方法があります.
しかし,銀行や人工衛星で使われているような巨大なプログラムの場合,コードクローンを1つに集約する作業は,簡単ではありません. なぜなら,巨大なプログラムからコードクローンを探し出し,そのコードクローンの特徴に適した方法で集約することは難しいからです.
そこで私達は,コードクローンを集約するソフトウェア開発者を支援するツールを開発しています.
コードクローンのグループを探し出す
巨大なプログラムの中には,たくさんのコードクローンが存在します.これらコードクローンを1つ1つ集約することは大変です.もっと効率的に作業を進めるには,複数のコードクローンを1つのグループにまとめ,一度に集約する必要があります.
一度に集約できるコードクローンのグループは,類似した機能を表すプログラム間に存在することがあります.下図は,そのようなコードクローンのグループの例です.下図は,機能1と機能2の間に存在する3つのコードクローンを表しています.2つの機能に含まれる長方形は,コード片(プログラムの一部)を表しています.全てのコード片がコードクローンになっており,機能1と機能2はかなり似ていることから,一度に集約するべきです.
これらを踏まえて,プログラムから一度に集約できるコードクローンのグループを探し出すツールを開発しました.
適切な集約先の提示
一度に集約できるコードクローンのグループを見つけた後は,プログラムの中のどこにそれらを集約するかが問題となります.
例えば,あるグループは既に存在するファイルに集約すると良いが,もう一方のグループは,新しいファイルを作成し,そのファイルに集約すると良いというように,グループごとに適切な集約先が異なります.しかし,集約先を判断するには,コードクローンだけでなくプログラム全体を考慮する必要があり,簡単に適切な集約先を決定することはできません.
そこで,プログラム全体を分析することにより,グループの特徴を調査し,適切な集約先を開発者に提示する機能をツールに追加しました.
今後の課題
今後の課題は,主に2つあります. 1つ目は,更に大きなコードクローンのグループを探し,その適切な集約先を提示する方法を考案することです. 2つ目は,適切な集約先を提示するだけでなく,その集約を行うリスクや効果を開発者に提示することです.
このような技術を実現することができれば,より効率的にコードクローンを集約することができると考えられます.