テストデータを、AI に作らせる

生成側(Generator)と判別側(Discriminator)を向かい合わせ、双方向の矢印で競わせて学習させる(Trained by competing)ことを示した図。右へ矢印を伸ばした先に、濃淡の混じった小さな四角の集まりを置き、多様なテスト入力(Test inputs)が作り出されることを表す。

テストを書くとき、いちばん手間がかかるのは「どんな入力を与えるか」を考える部分です。網羅しようとすれば数が膨らみ、絞れば見落としが出ます。

この研究では、敵対的生成ネットワーク (GAN) を使ってテストデータを自動生成しました。GAN は「本物らしいデータを作る側」と「本物と偽物を見分ける側」を競わせて学習する仕組みで、画像生成でよく知られています。これをテスト入力の生成に応用しました。

過去のテストデータを学習させると、それらしい入力を大量に作れます。人が思いつきにくい組み合わせも含まれるため、欠陥の検出につながります。

拡散モデルを用いる手法へと発展しており、生成 AI をソフトウェアテストに使う流れの出発点になった研究です。

元になった論文

Automated Software Test Data Generation With Generative Adversarial Networks

IEEE Access (2022)