Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# ソフトウェア工学

新しいデータセットがソフトウェアの欠陥予測を向上させる

欠陥者データセットは、ソフトウェアの欠陥を効果的に予測するための包括的なリソースを提供してるよ。

― 1 分で読む


脱走者:次世代欠陥データ脱走者:次世代欠陥データ予測を再定義する。先駆的なデータセットがソフトウェアの欠陥
目次

欠陥予測はソフトウェア開発において重要なテーマだよね。人が使う前にコードの問題を見つけるのを助けるんだ。この問題は「バグ」って呼ばれることが多くて、ソフトウェアが正しく動かなくなる原因になっちゃう。これらのバグを修正するのには毎年かなりのコストがかかるし、質の良いチェックがあっても、バグが最終製品に残ってしまうことがあるんだ。最近の研究では、小さなコードがほとんどのバグの原因になるってわかったから、リスクの高いコード部分に注目することが重要なんだよ。

良いデータセットの必要性

欠陥を効果的に予測するために、機械学習(ML)や深層学習(DL)技術がよく使われるんだけど、これらの技術は大規模で質の高いデータセットがあるときに最も効果的に機能するんだ。現在の欠陥予測のためのデータセットは、十分に大きくなかったり、バグのあるコードとないコードのバランスが悪かったりすることが多いんだ。これが原因で、訓練されたモデルのパフォーマンスが悪くなっちゃうことがある。ほとんどのデータセットは限られたプロジェクトや特定の組織から来ているから、異なるタイプのソフトウェアに対応するのが難しいんだよ。

Defectorsデータセットの紹介

現在のデータセットの問題に対処するために、Defectorsっていう新しいデータセットが作られたんだ。このデータセットには213,000以上のソースコードファイルが含まれていて、そのうち93,000が欠陥があって、約120,000は欠陥がないんだ。ファイルは、機械学習、自動化、IoTなど、18の異なる分野にわたる24の有名なPythonプロジェクトから集められたんだ。データセットの大きさと多様性が、欠陥予測のモデルを訓練するのに優れているんだよ。

多様性の重要性

Defectorsは、異なる分野や組織のプロジェクトを含んでいるからユニークなんだ。この多様性のおかげで、このデータセットで訓練されたモデルは、さまざまなソフトウェアプロジェクトに適用したときにパフォーマンスが良くなる可能性が高いんだ。Javaプロジェクトに焦点を当てた既存のデータセットとは違って、DefectorsはPythonプロジェクトから構成されているから、さらに多様性があるんだよ。

データセットの詳細な説明

データセットは整理された形式で構成されていて、使いやすいんだ。ユーザーは、欠陥のあるファイルと欠陥のないファイルを見つけることができ、コードに加えられた変更に関する情報も得られるよ。このデータセットはトレーニング、バリデーション、テストセットに分かれていて、大きなモデルの訓練に適しているんだ。トレーニングセットは、バグのあるインスタンスとないインスタンスのバランスを保ちつつ、テストとバリデーションセットは元の欠陥分布を反映しているんだ。

データセットの構築方法

Defectorsの作成には、品質と信頼性を確保するためにいくつかのステップがあったんだ。まず、人気やバグの一貫したラベリングなどの品質要因に基づいてプロジェクトが選ばれたんだ。研究者たちは、これらのプロジェクトからバグ修正の変更を集めたよ。

その後、どのコードの変更がバグを引き起こしたのかを特定するためにアルゴリズムを適用したんだ。そして、無関係な変更をフィルタリングしたよ。このフィルタリングは、良い変更が間違ってバグとしてラベル付けされる「偽陽性」を減らすために必要だったんだ。最終的なデータセットが正確で信頼できるものになるように、複数のステップが取られたんだ。

バグ修正コミットの収集

データセットを構築する過程で、研究者たちはプロジェクトのバグ管理システムを調査して、バグ修正の変更を集めたんだ。何千ものプルリクエスト(PR)を集めて、プロジェクトに対して行われた更新を取得したの。その後、バグを修正した対応するコミットを得たんだ。意味のある分析のために十分なデータを集めることが目的だったんだよ。

バグを引き起こすコミットの特定

どの変更がバグを引き起こしたのかを特定するために、研究者たちはSZZという特定のアルゴリズムを使用したんだ。このアルゴリズムは、バグにつながった変更を追跡するのを助けるんだ。ただ、これには多くの偽陽性が出ることが多くて、結果を混乱させることがあるんだ。だから、データをクリーンアップするためにいくつかのフィルタリングステップが適用されて、関連するバグを引き起こす変更だけが残されたんだよ。

データのクリーニング

データセットをクリーニングするには、いくつかの方法があったんだ。例えば、多くのバグを引き起こす変更が一つのバグ修正コミットにリンクされていた場合、これはノイズのサインと見なされたんだ。だから、あまりにも多くの変更に関連しているコミットは捨てられたんだ。また、あまりにも多くのファイルやコード行に影響を与える変更は、無関係な修正を示す可能性があるから取り除かれたよ。

さらに、データセットの一貫性を保つために、Pythonファイルに関連する変更だけが残されたんだ。コメントやフォーマットの更新などの些細な変更も、新しいバグを引き起こさないから捨てられたよ。

テストとバリデーション

データセットが準備できたら、トレーニングとテスト用に異なるセットに分けられたんだ。トレーニングセットは、欠陥のあるインスタンスと欠陥がないインスタンスの数が等しくなるようにバランスが取られていたんだ。一方、バリデーションとテストセットは、元の欠陥分布を維持しているんだ。このアプローチにより、このデータセットで訓練されたモデルを効果的に評価し、改善することができるんだよ。

可能な応用

Defectorsデータセットはいろんな方法で使われる可能性があるんだ。行、メソッド、ファイルレベルなど、異なるレベルで欠陥を予測するのに役立つし、その構造のおかげでバグ修正プロセスの詳細な分析にデータセットを適応することも可能なんだ。このデータセットを活用することで、開発者は欠陥を検出して説明するためのより良いツールを作れるし、最終的にはソフトウェアの品質が向上するんだよ。

結論

欠陥予測はソフトウェアの品質を向上させるために重要で、Defectorsデータセットはこの分野で強力なリソースとして際立っているんだ。大規模で、バランスの取れたクラス分布、プロジェクトやドメイン全体にわたる多様性を持つことで、MLやDLモデルのソフトウェア欠陥予測の効果を大きく高めることができるんだ。この信頼性のある包括的なデータセットを提供することで、ソフトウェア工学の分野を進展させて、バグが早期に見つかって素早く修正されることを保証できるんだよ。

オリジナルソース

タイトル: Defectors: A Large, Diverse Python Dataset for Defect Prediction

概要: Defect prediction has been a popular research topic where machine learning (ML) and deep learning (DL) have found numerous applications. However, these ML/DL-based defect prediction models are often limited by the quality and size of their datasets. In this paper, we present Defectors, a large dataset for just-in-time and line-level defect prediction. Defectors consists of $\approx$ 213K source code files ($\approx$ 93K defective and $\approx$ 120K defect-free) that span across 24 popular Python projects. These projects come from 18 different domains, including machine learning, automation, and internet-of-things. Such a scale and diversity make Defectors a suitable dataset for training ML/DL models, especially transformer models that require large and diverse datasets. We also foresee several application areas of our dataset including defect prediction and defect explanation. Dataset link: https://doi.org/10.5281/zenodo.7708984

著者: Parvez Mahbub, Ohiduzzaman Shuvo, Mohammad Masudur Rahman

最終更新: 2023-07-25 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2303.04738

ソースPDF: https://arxiv.org/pdf/2303.04738

ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事

機械学習ディープラーニングのためのインメモリコンピューティングの進展

新しいアルゴリズムは、インメモリコンピューティングを使って深層ニューラルネットワークのトレーニング効率を向上させる。

― 1 分で読む