動的テスト生成の実用性

Microsoft Researchによるソフトウェアテストの論文が日経エレクトロニクス2009年4月20日号に載っていた。自動テスト生成の方法として静的テスト生成と動的テスト生成の2つがあるが、前者は複雑な命令文(ポインタ等)やOSのシステムコール等の制約のせいでテスト生成がうまくいかないケースが多い。これは良く聞く話。後者の動的テスト生成手法として、最近は誘導型自動ランダム・テスト(DART: directed automated random testing)が注目を集めているという。その特徴は、上記のような静的テスト生成で問題となる箇所について、障害を乗り越えるようなテストケースを作り出して処理を進めてしまうところにある。

制約条件「x==hash(y)」を満足する(または条件に違反する)二つの入力値xとyを与えることが静的に不可能だとしても、yの定数値およびhash(y)に等しいxの値を生成するのは簡単だ。なぜなら、後者(xの値)はプログラム実行時に動的に取得できるからである。

プログラム解析による自動テスト生成の可能性 | 日経 xTECH(クロステック)

初回のテストは失敗しても、その結果として「成功する条件」が分かるので、次回以降のテストでは失敗することがない。こうして、テストの障害となる箇所を次々と突破していけば、全てのケースについて自動的にテストが実行可能になるという。理屈しては分かるけれど、実用レベルのテストを実行出来るのだろうか?この疑問に応えるべく、Microsoftによる不具合発見の実例が紹介されている。

我々は、正規のANIファイルのライブラリから入力の種となるファイルを任意に選び、ANIファイルを構文解析する「user32.dll」と呼ぶ小さなテスト・プログラムを解析した。最初のプログラム実行で、1万72バイトのシンボリックな入力に対して127万9939個の命令が構文解析され、341個の分岐制約を持つパス制約が生成された。そして、動作周波数2GHzのAMD Opteron 270デュアルコア・プロセッサと4Gバイトの主記憶搭載し、32ビット版Windows Vistaが動作するパソコンを使って、7時間36分にわたり7706に及ぶテスト・ケースを実行した結果、SAGEは破壊活動を行うANIファイルの生成に成功した。

プログラム解析による自動テスト生成の可能性 | 日経 xTECH(クロステック)

へぇ、こんなテスト手法が既に実用化されて、他の方法では見つけられないバグを発見できているとは驚きでした。製品ではないので表舞台に出てくる機会は少なくあまり知られていないけれど、Microsoftソフトウェアテスト技術は実は凄いものがあるようだ。