カバレッジテストの自動化

いきなり何を言い出すのかと思われるかもしれないが、最近はCやJavaソースコードを解析してカバレッジテストを自動化する方法を調べている。
私、この分野に関しては全くの素人なので、何か知っている人はぜひコメント欄や twitter (@keigoi) で教えて欲しいです。

論文とか

ざっくり http://www.citeulike.org/user/keigoi/tag/testgeneration に貯めている。

ソースコードカバレッジの種類

カバレッジテスト自動化の基本的な技術

  • ソースコードの意味を解析する方法として、シンボリック実行 (symbolic execution) が 1970年代から広く知られている。シンボリック実行により、プログラムの実行があるソースコードの位置に到達するために必要な入力値の制約を抽出できる。
  • 制約ソルバ は、抽出された制約から具体的なテスト入力を計算する。

カバレッジテストの自動実行 および symbolic execution のツール

  • CREST (C)

concolic execution.
C言語カバレッジテスト。CIL で書いたプリプロセッサソースコードに仕込みを入れ、同時に 制御フロー解析。gccコンパイルして実行。SMTソルバ yices を使っている
オープンソースでまだ小さいので扱いやすい。ソースはOCamlC++で書かれている。 CFGの様々な探索アルゴリズムが実装されている。

LLVM を使っている。詳細はまだ調べていない

  • Symbolic PathFinder (Java)
  • CUTE (C)

その他

Cの意味解析はCILでやるのが筋のようだ。幸い、CILは OCamlで書かれており、control flow analysis までの基本的なライブラリはそろっている。
同僚の id:yoshihiro503 はいきなり Cのsymbolic execution エンジンの実装をはじめている。頼もしい限りだ。