A Systematic Survey of Just-in-Time Software Defect Prediction
アブストラクト¶
- 近年、ソフトウェア欠陥の発生確率を予測することを目的としたソフトウェア欠陥予測に関する県空が継続的に行われている
- さらに、継続的デプロイメントへの関心の高まりに伴い、ソフトウェア欠陥予測の一種であるJust-in-Time Software Defect Prediction(JIT-SDP)は、段階的なソフトウェア変更のそれぞれに欠陥があるかどうかを予測することに重点を置いている
- 本研究では、JIT-SDPに関する67件の研究を体系的に調査し、研究者がJIT-SDPの最先端技術を発展させ、実務家が最新の進歩を把握できるよう支援することを目的としている
- JIT-SDPのワークフローの各フェーズにおけるベストプラクティスをまとめ、先行研究のメタ分析を実施し、今後の研究の方向性を提案
- JIT-SDP研究のメタ分析では、予測性能が変更欠陥率と相関関係にあることが示され、JIT-SDPは比較的欠陥率の高いプロジェクトで最も優れたパフォーマンスを発揮することが示唆された
- JIT-SDPの今後の方向性としては、各手法をそれぞれの適用分野に位置付ける、信頼性を考慮したJIT-SDP、ユーザー中心のJIT-SDPなどが挙げられる
はじめに¶
- ソフトウェア欠陥予測(SDP)は、ソフトウェア成果物、特に粒度の異なるソースコード要素(メソッド、クラス、ファイル、コンポーネントなど)における欠陥の発生確率を予測することを目的としている
- SDPは予測される欠陥発生確率を知ることでソフトウェアの品質向上とコスト削減につながるため、研究者や業界関係者の間で長年関心を集めて北
- 現代のソフトウェア開発は協調的でアジャイルであり、継続的デリバリーや継続的デプロイメントといった、ソフトウェアをより迅速かつ高頻度に構築、修正、リリースすることが人気を集めている
- このトレンドの高まりを受けて、近年、SDPの新しい領域であるジャストインタイムソフトウェア欠陥予測(JIT-SDP)の活動が活発化している
- これは、各ソフトウェア変更における欠陥の発生確率を予測することを目的としている
- 本調査の目的
- 研究者がJIT-SDPワークフローの様々な段階における典型的な懸念事項と現在の手法について包括的な理解を深め、この分野に参入する研究者が迅速に理解を深められるようにすること
- 研究者がこの分野における今後の研究のギャップと機会を特定できるようにすること
- 実務家がQAニーズに合わせてJIT-SDPモデルを洗濯、調整できるようにすること
レビュー方法¶
JIT-SDP調査のための研究論文の特定¶
- 2000年から2021年11月までにジャーナルや会議の議事録に掲載された英語の査読済み研究論文が対象
- ソフトウェアの変更のレベルやサブレベルでの予測を行うJIT-SDPの予測モデルを研究した論文のみを含める
- デジタルライブラリのキーワード検索
- 研究者はJIT-SDPを様々な用語で呼んでいる
- Kameiらは「ジャストインタイム」ソフトウェアQAと呼んだ
- Jiangらは「変更レベル」の欠陥予測と呼んだ
- その他のJIT-SDPのキーワードとしては、defect、fault、bug、error、failure、exceptionがある
- これらのキーワードを用いて定式化された検索クエリを作成
- このクエリを使用して記事のタイトル、要約、メタデータに出現するキーワードをデジタルライブラリで検索
ジャストインタイムソフトウェア欠陥予測¶
- ソフトウェア障害は観察できるソフトウェアのご動作であるが、欠陥が必ずしも障害につながる訳ではない
- SDPはソフトウェアのソースコード内にあるバグの存在を予測することを目的としている
JIT-SDPの定義と概要¶
- これまでの研究の大部分は、SDPがプロジェクトのリリーススケジュールに厳密に従うこと、つまり、過去のリリースからソフトウェアのスナップショットと欠陥を活用して、様々な粒度のソフトウェアモジュール(パッケージ、ファイル、クラス、メソッド)の欠陥密度や欠陥の重大度などの欠陥関連の変数を予測することを前提としていた
- この種類のSDPを「Release SDP」と呼ぶ
- Release SDPの最近の代替手段は、ソフトウェアの変更履歴を活用して、リポジトリにコミットされるとすぐに(ジャストインタイム)、欠陥を誘発する可能性のあるソフトウェアの変更を予測すること
- この種類のSDPを「JIT-SDP」と呼ぶ
- 開発者は通常、全てのソフトウェアの変更をソースコード管理(SCM)システムやバージョン管理システム(VCS)へのコミットとして記録
- JIT-SDPの利点
- ソフトウェアの変更セットが小さく、それぞれに説明的なログメッセージがある
- 各変更には単一のコミッターが割り当てられるため、変更に関するQA活動を実施するための専門知識を持つ人材を見つけやすくなる
- 開発者は、SCMにコミットする際に、バグを誘発する可能性がある自分の潜在的なソフトウェア変更を迅速に調査できる
- このときに、開発者は最近の変更について新鮮な記憶を持っている可能性が高いため、認知負荷が軽減される
- JIT-SDPのワークフロー
- モデルを構築するために様々なデータソースを活用
- 例: ソフトウェアコードの変更、イシューレポート、コミットメッセージ
- データを生の特徴量に変換
- 生の特徴量をモデル構築にすぐに使用できる特徴量に変換(前処理)
- モデルを構築して評価
- モデルを構築するために様々なデータソースを活用
データソース¶
ソフトウェアの変更履歴と変更セット¶
- ソフトウェアの変更(チェンジセット)とは、GitなどのSCMにおけるソフトウェアの2つのリビジョン間の差分のこと
コミットメッセージ¶
- ほとんどのSCMでは、開発者がコミットログメッセージを入力することで、コミットされた変更の性質を簡潔に記述することが求められる
ITS(Issue Tracking System)データ¶
- プロジェクトのITSデータは、変更セットとバグを報告するイシューの関係を構築するのに役立つ
- JIT-SDPにおけるバグ予測に直接利用されることは稀
静的プログラム分析の警告メッセージ¶
- lintなどの静的プログラム分析ツールによって生成される警告メッセージも、稀ではあるがJIT-SDPモデルを構築するための情報のデータソースとして使用されることがある
特徴の取得と処理¶
- データをJIT-SDPモデルで使用できる形式に変換
- JIT-SDPモデルを構築するために使用する独立変数とその抽出方法
- 独立変数
- 差分: 変更がどのように変化しているか
- 目的: 変更の目的
- サイズ: 変化の大きさ
- 履歴: 変更履歴
- 経験: 開発者の経験
- コードチャーン: コード変更の大きさ
- 変更の文脈: コードの変更箇所の内容
- インデント: 変更のインデント数
- ファイルレベルのプロセスメトリクス: ファイルレベルの変更特性
- コミットメッセージ: コミットメッセージを特徴付ける特徴
- ITSの機能: イシュー報告から実際のコード変更までに行われる議論
- 静的分析: 静的プログラム解析の警告メッセージ
- 抽出方法
- 特徴量学習
- 特徴量エンジニアリング
- 独立変数
ソフトウェア変更メトリクス¶
- ソフトウェア変更メトリクスは、コードから直接計算されるメトリクス
- カテゴリー
- 差分
- 変更されたサブシステムの数
- 変更されたディレクトリの数
- 変更されたファイルの数
- 各ファイルにおける変更されたコードの分散
- サイズ
- 追加されたLOC
- 削除されたLOC
- 変更前のファイルのLOC
- 変化の大きさ
- 目的
- 変更がバグ修正であるかどうか
- 履歴
- ファイルを変更した開発者の数
- 変更されたファイルにおける一意な変更の数
- 前回の変更と今回の変更の間の平均時間間隔
- 経験
- 開発者の経験
- 最近の開発者の経験
- サブシステムにおける開発者の経験
- 差分
コミットメッセージの特徴¶
- コミットメッセージは自然言語テキストとして記述されるため、それを表す特徴量は通常、自然言語処理によって得られる
ITSデータの特徴¶
- ITSには自然言語テキストとメタデータの2種類のデータが含まれる
静的プログラム分析のメトリクス¶
- Trautschらは、PMDとOpenStaticAnalyzarという2つのツールを用いて静的プログラム解析の警告メッセージを収集
特徴表現¶
- アルゴリズムによって自動的に学習される特徴の種類を特徴表現と呼ぶ
欠陥を誘発するラベルの割り当て¶
- ソフトウェアの変更を、欠陥を誘発する変更かクリーンな変更かに分類するためには、ソフトウェアプロジェクトの変更履歴を調べる際に2段階のアプローチを取る
- 1) 欠陥を修正する変更を特定
- 2) ステップ1の欠陥を導入した以前の変更を特定
- Śliwerskiらは、欠陥修正のための変更に基づいて、欠陥を誘発する変更を自動的に特定するアルゴリズム(SZZアルゴリズム)を提案
データ変換¶
- JIT-SDPモデルを構築する際は、ほとんどの場合、事前にデータ変換が必要
列ベースの処理¶
- 特徴量の歪みに対処するために標準化、対数変換、Zスコア、max-min法を適用
- 共線性と多重共線性に対処するために相関分析、独立性分先、冗長性分析を実施
行ベースの処理とクラスの不均衡¶
- クラスの不均衡に対処するためにアンダーサンプリング、オーバーサンプリング、少数派クラスへの重み付けを行う
モデリング¶
- 機械学習アルゴリズムと予測対象を決める必要がある
- 機械学習アルゴリズム: 教師あり学習と教師なし学習のどちらか?
- 予測対象: プロジェクト内の予測とプロジェクト間の予測のどちらか?
欠陥予測¶
- 教師あり学習が予測性能において優勢
労力を考慮した予測¶
- ソフトウェア変更の順位付けを行う
- 基準の例: 変更欠陥発生率、変更欠陥密度、QA労力
プロジェクト間予測¶
- 教師ありJIT-SDPモデルは、プロジェクト内JIT-SDP(WP-JIT-SDP)とプロジェクト間JIT-SDP(CP-JIT-SDP)の2つに分けられる
- WP-JIT-SDP: 1つのプロジェクトのソフトウェア変更履歴と欠陥データから予測モデルを訓練し、そのモデルを使用して同じプロジェクトの欠陥予測を実行
- CP-JIT-SDP: 1つ以上のプロジェクトの変更・欠陥データから予測モデルを構築し、そのモデルを使用してプロジェクトの欠陥が発生しやすい変更を予測
- CP-JIT-SDPでは学習データとテストデータが共通の特性を持たない可能性があるため、優れた予測性能を得られない場合がある
ソフトウェア開発プロセスとデータの設計¶
- JIT-SDPでは、データの規則性が徐々に変化するコンセプトドリフトと呼ばれる現象が起き、以前構築したモデルの予測性能が低下
- 外部APIのエラーのような外在的な欠陥は、プロジェクトにおいて欠陥を誘発する変更ではないが、ITSでは欠陥として報告されることが多い
- 外在的な欠陥はJIT-SDPモデルに悪影響を及ぼす
- 開発者の能力や癖に基づいたJIT-SDPモデルは、そうでないモデルよりも多くの欠陥を予測できる
複雑なモデルと単純なモデルに関する議論¶
- 複雑なモデルは正確さにおいて優れているが、単純なモデルは解釈可能性において優れている
評価¶
欠陥予測の評価基準¶
- 一般的な評価基準
- 正解率、適合率、再現率、F値、AUC-ROC
労力を考慮した予測の評価基準¶
- 正規化された費用対効果曲線の下の面積
- \(P_{opt}(m) = 1 - (Area(m_{optimal}) - Area(m))/ ({Area(m_{optimal}) - Area(m_{worst})})\)
オンライン学習や時間制限のある学習の評価基準¶
- CabralらとTabassumらは2つの再現率の時間変動幾何平均を提案した
検証戦略と評価設定¶
- 頻繁に採用される検証方法はk分割交差検証
分析と未解決の疑問¶
研究選択基準¶
- 67件の研究から表形式のパフォーマンス結果を持つ研究のみを選択に48件になった
- パフォーマンス結果を比較できるように、交差検証とバッチ学習を行った研究のみを選択
- 最終的に22件の論文を選択
欠陥予測の性能¶
- 欠陥予測は2値分類であるため、F1スコアが最も一般的に報告されている評価基準である
- F1スコアはプロジェクト間で大きく異なる
- アンサンブルモデルが有利であり、中でもランダムフォレストが特に優れている
労力を考慮した予測の性能¶
- 欠陥予測モデルと労力と考慮した予測モデルの性能は反比例関係にある
ソフトウェアプロジェクトと変更セットデータのコンテキスト要因¶
- 先行研究では、SDPモデルの性能を向上させるために、以下のコンテキスト要因が重要であることが示されている
- コミット数、欠陥のある変更の割合、平均変更サイズ、変更されたファイルあたりの平均開発者数
- F1スコアが、変更数や欠陥のある変更の比率と相関している
- コミット数が増加するとF1スコアが小さくなる傾向がある
- 欠陥を誘発する変更の比率が大きくなるとF1スコアが大きくなる傾向がある
- 以上のことから、変更数はプロジェクト成熟度、欠陥を誘発する変更の比率はプロジェクト品質と考えることができる
- F1スコアと変更サイズ、F1スコアとコミットで変更されたファイルあたりの平均開発者数の相関はない
- 要約すると、欠陥が多いプロジェクトでは、JIT-SDPが欠陥を誘発する変更を予測しやすくなる
将来の研究のための5つのアイデアと考察¶
JIT-SDPアプリケーションドメイン¶
- それぞれのアプリケーションドメイン(保守タスクの優先順位付け、技術的負債の削減に向けた活動の計画)ごとにJIT-SDPモデルに対する独自の要求がある
欠陥とソフトウェアの使用の関係¶
- 欠陥は障害の原因であるため、欠陥を減らすことは障害を減らすことに繋がる
JIT-SDPにおける労力の定量化¶
- 労力を考慮したJIT-SDPでは、QA労力はレビューされたLOCとして測定される
JIT-SDPにおける不確実性の定量化¶
- 訓練データセットとテストデータセットは同様の分布を持たない可能性がある
- コンセプトドリフト問題もある
- 不確実性を定量化してユーザーに示せるとモデルの使用方法の改善に役立つ
説明可能で実行可能な予測¶
- 欠陥予測モデルの構築では、欠陥の発生しやすさを予測することだけでなく、どのようなリスクが存在するかを分析することも重要
- これにより、ソフトウェア品質に関する運用上の意思決定のガイダンスを提供できる
- JIT-SDPの最近の研究では、ソフトウェアの変更などのコンテキスト要因に加えて、ソフトウェアメトリクスも欠陥予測のパフォーマンスを向上させることが分かっている
- 両者の関係を調査する必要がある
結論¶
- リリースSDPとJIT-SDPはどちらもリスク評価手法であり、デバッグを支援するものではない
- リリースSDPはソフトウェアスナップショットを入力とするが、JIT-SDPはソフトウェアの変更履歴が入力となる
引用情報¶
- 著者: Yunhua Zhao, Kostadin Damevski, Hui Chen
- タイトル: A Systematic Survey of Just-in-Time Software Defect Prediction
- 雑誌 / 会議名: ACM Computing Surveys
- 巻号: vol. 55
- 出版日: February 2023
- DOI: https://doi.org/10.1145/3567550