Hatena::ブログ(Diary)

keigoiの日記

2010-05-15

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

いきなり何を言い出すのかと思われるかもしれないが、最近はCやJavaソースコードを解析してカバレッジテストを自動化する方法を調べている。

私、この分野に関しては全くの素人なので、何か知っている人はぜひコメント欄や twitter (@keigoi) で教えて欲しいです。

論文とか

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

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

  • C0, C1, C2
  • ステートメント網羅、分岐網羅、パス網羅など

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

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

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

concolic execution.

C言語カバレッジテスト。CIL で書いたプリプロセッサ でソースコードに仕込みを入れ、同時に 制御フロー解析。gccコンパイルして実行。SMTソルバ yices を使っている

オープンソースでまだ小さいので扱いやすい。ソースはOCamlとC++で書かれている。 CFGの様々な探索アルゴリズムが実装されている。

  • KLEE (LLVM)

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

  • Symbolic PathFinder (Java)
  • CUTE (C)

その他

Cの意味解析はCILでやるのが筋のようだ。幸い、CILは OCamlで書かれており、control flow analysis までの基本的なライブラリはそろっている。

同僚の id:yoshihiro503 はいきなり Cのsymbolic execution エンジンの実装をはじめている。頼もしい限りだ。

トラックバック - http://d.hatena.ne.jp/keigoi/20100515/1273900651