コンテンツにスキップ

2025年8月2日

テーマ

コードの時系列変化を考慮した保守性低下の要因分析と改善

背景

ソフトウェア開発における長期的な品質維持において、保守性は重要な指標である。リファクタリングに関する実証研究[^1]では、リファクタリングの効果的な適用に必要となる要素がいくつか指摘されている。OpenStackプロジェクトを対象とした研究[^2]では、コードレビューコメントから保守性低下の兆候を捉えている。そしてTDDにおける静的解析ツールの有用性の研究[^3]では、静的解析ツールがリファクタリングを促進し、保守性を改善することが判明している。

しかし、従来のバグ予測手法には問題が存在する。1つ目は時系列情報を活用していないことである。既存手法は特定時点でのメトリクス値(スナップショット分析)に依存しており、コードがどのように変化してきたかという時系列的な変化傾向を特徴量として活用していない。例えば、同じ循環的複雑度10のメソッドでも、「5から10に急激に増加したメソッド」と「長期間10を維持しているメソッド」では、バグ発生リスクが大きく異なる可能性がある。しかし、従来のスナップショット分析では、この重要な違いを捉えることができない。

2つ目の問題は、バグの原因と保守性メトリクスの関係性が解明されていないことである。現在のバグ予測研究は「バグの有無」の単純な二値分類に焦点を当てており、バグの原因や保守性メトリクスとの関係性の分析が不十分である。その結果、予測精度の向上は図れても、保守性改善のために開発者が具体的にどのような行動を取るべきかの指針が得られず、実用性に限界がある。これらの課題により、効果的な品質管理の実現が阻まれている。

目的

本研究では、時系列変化量を活用したバグ予測精度の向上に加え、バグの原因と保守性メトリクスの関係性の解明に取り組む。これにより、従来の課題を克服し、実用的な保守性改善指針を提供する新しい手法を開発することを目的とする。

目的1: 時系列変化量を用いたバグ混入の予測精度の向上 従来のスナップショット分析の課題を克服するため、コード行数、トークン数、循環的複雑度などのメトリクス変化量を新たな特徴量として導入する。これまでの予備実験において、変化量を新たな特徴量として追加することでF1スコアが有意に改善されることを確認している。本研究では、時系列データの活用により、異なるドメインのソフトウェア開発プロジェクトでF1スコアを改善することを目指す。

目的2: バグの原因と保守性メトリクスの関係性の解明 バグを体系的に分類することで、バグの原因と保守性メトリクス(Halsteadメトリクス、Maintainability Indexなど)の詳細な関係性を明らかにする。例えば、ODC(Orthogonal Defect Classification)などの既存の分類手法を参考に、バグの原因を体系的に分類し、「インターフェースに関するバグは結合度メトリクス(CBOなど)の変化傾向と関連する」、「検証に関するバグは循環的複雑度の増加とつながりがある」といったように、特定の種類のバグが保守性に与える影響を明確化する。これにより、開発者は「結合度の増加により特定の種類のバグが混入するリスクが高まっているため、モジュール分割を検討すべき」といった具体的な改善策を得ることができる。

新規性・重要性

本研究の新規性は、既存のバグ予測研究に対する2つの拡張にある。

新規性1: 静的分析から動的分析への転換 既存研究では単一時点でのメトリクス値(スナップショット)を用いたバグ予測が主流であるが、本研究はメトリクスの時系列変化量を特徴量として体系的に活用する初の試みである。これにより、同一のメトリクス値でも変化傾向の違いを捉えることが可能になり、従来手法では検出困難なバグ発生リスクの特定を実現する。

新規性2: 分類から関係性解明への発展 従来のバグ予測研究は「バグの有無」の二値分類に留まっているが、本研究はバグの原因とそれに関連する保守性メトリクスの因果関係を定量的に解明する。これにより、予測結果に対する解釈可能性と、開発者への具体的な改善指針の提供が可能になる。

方法論と評価

本研究は以下の2段階で構成される。

段階1: 時系列変化量の自動計算システムの開発(1か月) 短期的な変化量と長期的な変化量を自動で計算するプログラムを開発する。既に開発済みのプログラムを基盤として、BugHunter Datasetからコードメトリクスの時系列変化量を抽出するシステムを構築する。

評価方法: データの欠損率や、従来手法に対するF1スコアの改善度を測定することで、時系列変化量を特徴量として追加した場合の効果を検証する。

段階2: バグの原因と保守性メトリクスの関係性の解明(2か月) バグの原因を自動で分類するプログラムを開発する。さらに、イシューやプルリクエストを分析することでバグの原因を体系的に分類する。そして、バグの原因と保守性メトリクスの因果関係を分析し、特定の種類のバグが保守性に与える影響を定量的に測定する。

評価方法: バグの原因とコードメトリクス間の相関の強さを測定することで、手法の有効性を評価する。また、従来の抽象的な予測結果と比較して、具体的な改善指針の提供能力がどの程度向上したかを定性的に評価する。

参考文献

[1]: Microsoft Research, "An Empirical Study of Refactoring Challenges and Benefits at Microsoft", https://www.microsoft.com/en-us/research/publication/an-empirical-study-of-refactoring-challenges-and-benefits-at-microsoft/ [2]: X.Han, A. Tahir, P. Liang, S. Counsell and Y. Luo, "Understanding Code Smell Detection via Code Review: A Study of the OpenStack Community," 2021 IEEE/ACM 29th International Conference on Program Comprehension (ICPC) [3]: Simone Romano, Fiorella Zampetti, Maria Teresa Baldassarre, Massimiliano Di Penta, and Giuseppe Scanniello, "Do Static Analysis Tools Affect Software Quality when Using Test-driven Development?", Proceedings of the 16th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement