← 最新の論文
💻 computer science

Investigating the application of differential fuzzing to support the identification and suppression of equivalent mutants: An experimental study

この実験的研究は、差分ファジングが、多様な実世界のソフトウェアプロジェクトにおいて、同等のミュータントを効率的に特定および抑制するための実用的かつ言語に依存しないアプローチであり、従来のテストスイートを強化するための実行可能な入力を生成しながら、ほぼ完璧なミューテーションスコアを達成することを実証している。

原著者: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

公開日 2026-08-27
📖 1 分で読めます☕ さくっと読める

原著者: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

原論文は CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む

ソフトウェアテストは、コンピュータプログラムが正しく動作するかどうかを確認するプロセスですが、プログラムは複雑で入力が無限に存在するため、あらゆる間違いを見つけ出すことはほぼ不可能です。これに対処するため、研究者たちは「ミューテーション・テスティング(変異テスト)」と呼ばれる手法を用いています。これは、コードにあえて小さく現実的なエラーを導入し、既存のテストがそれらを検知できるかどうかを確認するというものです。もしテストがエラーを特定できなかった場合、そのテストスイートの強度が不十分であることを意味します。しかし、この手法には厄介な障害があります。これらの偽のエラーの中には、プログラムの挙動を全く変化させないほど極めて微細なものがあり、それらは検出不可能な状態になります。これらは「等価ミュータント(equivalent mutants)」として知られており、これらを特定するには通常、人間の専門家がコードを一行ずつ読み込むために多大な時間を費やす必要があり、この遅くて高価なプロセスが、このテスト手法の広範な普及を長らく阻んできました。

同時に、「ファジング」と呼ばれる別のテスト手法は、セキュリティ上の欠陥を見つけるための標準的なツールとなっています。ファジングは、プログラムに大量のランダムまたは不正なデータを送り込み、クラッシュが発生するかどうかを確認することで機能します。ファジングはプログラムを停止させるようなバグを見つけるのには効果的ですが、従来のファジングは、クラッシュを引き起こすことなく計算方法や挙動を変化させてしまうような、より微妙なエラーを見逃すことがよくあります。サンパウロ大学の研究者による新しい研究は、これら二つの世界を組み合わせる方法を探求しています。彼らは「ディファレンシャル・ファジング(差分ファジング)」と呼ばれる手法を調査しました。これは、オリジナルのプログラムと、微小なエラーを加えたバージョンのプログラムを並行して実行し、全く同じデータを送り込み、結果を比較するというものです。もし二つのバージョンが異なる出力を生成した場合、エラーが検知されます。研究者たちは、このアプローチによって、あの捉えどころのない等価ミュータントを自動的に特定し、人間よりもはるかに速く行うことができるかどうかを検証したいと考えました。

このアイデアをテストするために、チームは4つの異なるプログラミング言語(C++、C、Go、Python)で書かれた、よく知られたオープンソース・ソフトウェア・プロジェクトの4つの異なる関数から、特定の6つの関数を選択しました。これらのプロジェクトには、暗号通貨プロトコルであるBitcoin Core、暗号化ライブラリであるOpenSSL、決済チャネルネットワークであるLND、そして日付と時刻のライブラリであるArrowが含まれていました。あらゆるプログラミング言語に対してエラーを生成できるツールを使用して、彼らはこれらの関数の1,090個の有効なバリエーションを作成しました。自動テストを開始する前に、研究者たちは明らかに等価であるエラーを取り除くためにエラーを手動で検査し、残りの難しいケースを用いて自動システムがそれらを区別できるかを確認しました。その後、標準的なユニットテストから、エラーごとに5分間の制限時間を設けたファジング・セッションに至るまで、5つの異なるテストシナリオを実行しました。

結果は、クラッシュのみを探す従来のファジングが最も効果の低い手法であり、エラーをほとんど検知できなかったことを示しました。対照的に、ディファレンシャル・ファジングのアプローチは驚くほど強力であることが証明されました。各エラーに対して5分間の制限時間を設けたとき、この手法は6つの関数のうち5つでエラーを特定し、その挙動を確認することに成功し、98パーセントから100パーセントの成功率を達成しました。最初に苦戦した一つの関数については、単純な「期待されるキーワード」のリストを追加することで、システムが入力をより良く理解できるようになり、最終的に完璧なスコアに到達できることが分かりました。また、この研究は、エラーを見つけるのに要した時間が驚くほど短いことも明らかにしました。平均して、システムは約30秒で差異を発見しており、これは人間が1つのケースを手動で分析するのに通常かかる15分よりも大幅に速いものでした。

エラーを見つけること以上に、研究者たちはファジングのプロセス中に使用されたデータに隠れた価値があることを発見しました。ファジングツールが生成した入力の集まり(シード・コーパスとして知られる)には、標準的なユニットテストが見逃していた特定のテストケースが含まれていました。これらの入力は、従来のテストスイートでは検出できなかったミュータントを「殺す(検知する)」ことができました。これは、セキュリティチームによって既に生成されているデータが、通常のテストスイートを強化するために再利用できることを示唆しており、セキュリティテストの副産物を一般的なソフトウェア品質のためのリソースへと変えるものです。また、研究では、検出しにくいエラーを見つけるのにかかる時間を分析し、ほとんどのエラーは迅速に見つかる一方で、一部は大幅に多くの時間を必要とし、一部のタスクが少し長くかかったり、あるいは非常に長くかかったりするのと同様に、難易度が大きく変動するパターンがあることを明らかにしました。

研究者たちは、ディファレンシャル・ファジングが、これらの困難なエラーの分類をサポートするための、実用的で言語に依存しない方法を提供すると結論付けました。これは、複雑な新しいツールや言語固有の設定を必要とせず、単に元のコードと修正されたバージョンを比較するだけです。生存しているエラーをすべて分類しようとするのではなく、それらを「手動レビューの候補」として扱うことで、この手法は人間の労力を劇的に削減します。この研究は、このアプローチを既存のワークフローに統合することで、真に等価であるエラーを効率的にフィルタリングし、不確実なまま残った少数のケースに対してのみ人間の専門家が集中できるようにできることを示唆しています。この発見は、単純なプログラム挙動の自動比較が、これまで広範な産業への採用を困難にしてきたコストと時間の問題を解決できることを示しています。

自分の分野の論文に埋もれていませんか?

研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。

Digest を試す →