(邦訳:コンテキスト情報に基づいたリアクティブおよびプロアクティブなソースコード・リファクタリング支援)
Sae-Lim Natthawute (株)ヤフー |
キーワード
ソースコード品質 | リファクタリング | コードの臭い |
[背景]低品質ソースコードを改善(リファクタリング)する開発者を支援
[問題]リファクタリングすべき個所の特定が困難
[貢献]リファクタリングすべき個所の特定時間の軽減
コードの臭いは,ソースコードの設計上の欠陥や問題の指標としてよく使用される.コードの臭いを含むコード個所にリファクタリング手法を適用することにより,その品質を向上させる.リファクタリングは,ソースコードの品質を向上させるために,外的振る舞いを変更せずにソースコードを再構築する手法であり,その適用タイミングと目的によって,リアクティブリファクタリングとプロアクティブリファクタリングに分類される.リアクティブリファクタリングは,コードが臭いを発した後に,その臭いを取り除くために適用されるリファクタリングである.一方,プロアクティブリファクタリングは,コードの臭いを防ぐために,コードが臭いを発する前に適用されるリファクタリングである.
ソフトウェア開発プロジェクトでは,開発タスクを管理するためにイシュー管理システムが利用されている.この状況では,開発者がイシューで取り上げられた機能を実装するために変更するモジュールがコンテキストに相当する.多くの研究は,開発者が,コンテキストに関連するコードをリファクタリングする可能性が高いことを示している. ただし,リファクタリング適用個所を推薦するほとんどのツールは,このような情報を考慮していない.したがって,開発者はリファクタリングするモジュールを識別する時間のかかるプロセスを実行する必要がある.
本研究では,開発者のコンテキストを考慮し,リアクティブおよびプロアクティブなリファクタリングを支援する手法を提案した. 本研究の成果は,大きく3つに分けられる.
(1)開発者によるコードの臭いのフィルタリング・優先順位付けの要因に関する調査
既存のコードの臭い検出ツールの結果を改善するために,開発者がコードの臭いをフィルタリングしたり優先順位付けたりする方法について調査した.その結果,開発者はコンテキストに関連するコードの臭いをリファクタリングする可能性が高いことが分かった.この結果は,リファクタリングするモジュールを推奨する際に開発者のコンテキストを考慮する必要があるという意味で,本研究の基礎を築いている.
(2)リアクティブなリファクタリングを支援する手法
本研究では,既存のコード臭い検出ツールの結果を改善するために,開発者のコンテキストを利用してコードの臭いを推薦する手法を提案した.変更影響分析手法を使用し,開発者が変更する可能性が高く,コンテキストと見なすモジュールを予測する.そのような情報に基づいて,コードの臭いを推薦する.評価結果から,本手法が,既存ツールより関連性の高い結果を提供できることが分かった.
(3)プロアクティブなリファクタリングを支援する手法
プロアクティブなリファクタリングの対象を特定するために,コードの臭いには至っていないものの,臭いの発生に近づきつつある腐敗モジュールの概念を提案した.腐敗モジュールを積極的にリファクタリングすることで,コードの臭いの発生を防ぐことができる.本研究では,リファクタリング戦略を計画する開発者を支援するために腐敗モジュールを予測する手法を提案した.予測手法では,ソースコードの品質メトリクスを説明変数として使用し,モジュールが次のリリースで腐敗するかどうかを目的変数として定めた.また,予測モデルの性能を向上させるための開発者のコンテキストの使用についても調査した.
[貢献]リファクタリングすべき個所の特定時間の軽減
コードの臭いは,ソースコードの設計上の欠陥や問題の指標としてよく使用される.コードの臭いを含むコード個所にリファクタリング手法を適用することにより,その品質を向上させる.リファクタリングは,ソースコードの品質を向上させるために,外的振る舞いを変更せずにソースコードを再構築する手法であり,その適用タイミングと目的によって,リアクティブリファクタリングとプロアクティブリファクタリングに分類される.リアクティブリファクタリングは,コードが臭いを発した後に,その臭いを取り除くために適用されるリファクタリングである.一方,プロアクティブリファクタリングは,コードの臭いを防ぐために,コードが臭いを発する前に適用されるリファクタリングである.
ソフトウェア開発プロジェクトでは,開発タスクを管理するためにイシュー管理システムが利用されている.この状況では,開発者がイシューで取り上げられた機能を実装するために変更するモジュールがコンテキストに相当する.多くの研究は,開発者が,コンテキストに関連するコードをリファクタリングする可能性が高いことを示している. ただし,リファクタリング適用個所を推薦するほとんどのツールは,このような情報を考慮していない.したがって,開発者はリファクタリングするモジュールを識別する時間のかかるプロセスを実行する必要がある.
本研究では,開発者のコンテキストを考慮し,リアクティブおよびプロアクティブなリファクタリングを支援する手法を提案した. 本研究の成果は,大きく3つに分けられる.
(1)開発者によるコードの臭いのフィルタリング・優先順位付けの要因に関する調査
既存のコードの臭い検出ツールの結果を改善するために,開発者がコードの臭いをフィルタリングしたり優先順位付けたりする方法について調査した.その結果,開発者はコンテキストに関連するコードの臭いをリファクタリングする可能性が高いことが分かった.この結果は,リファクタリングするモジュールを推奨する際に開発者のコンテキストを考慮する必要があるという意味で,本研究の基礎を築いている.
(2)リアクティブなリファクタリングを支援する手法
本研究では,既存のコード臭い検出ツールの結果を改善するために,開発者のコンテキストを利用してコードの臭いを推薦する手法を提案した.変更影響分析手法を使用し,開発者が変更する可能性が高く,コンテキストと見なすモジュールを予測する.そのような情報に基づいて,コードの臭いを推薦する.評価結果から,本手法が,既存ツールより関連性の高い結果を提供できることが分かった.
(3)プロアクティブなリファクタリングを支援する手法
プロアクティブなリファクタリングの対象を特定するために,コードの臭いには至っていないものの,臭いの発生に近づきつつある腐敗モジュールの概念を提案した.腐敗モジュールを積極的にリファクタリングすることで,コードの臭いの発生を防ぐことができる.本研究では,リファクタリング戦略を計画する開発者を支援するために腐敗モジュールを予測する手法を提案した.予測手法では,ソースコードの品質メトリクスを説明変数として使用し,モジュールが次のリリースで腐敗するかどうかを目的変数として定めた.また,予測モデルの性能を向上させるための開発者のコンテキストの使用についても調査した.

(2020年5月6日受付)