ミューテーションテストはしばらく前から行われており、C /C++用の商用ミューテーションテストフレームワークが少なくとも1つまたは2つあるようです。それらを使用しましたか?あなたの経験は何ですか?オープンソースの代替手段はありますか?
6 に答える
簡単に検索すると、次の結果が得られました。
- PlexTest : http://www.itregister.com.au/products/plextest_detail.htm
- Insure++ : http://www.parasoft.com/jsp/products/insure.jsp;jsessionid=baacpvbaDywLID?itemId=63
- MILU (C のみの場合があります): http://www.dcs.kcl.ac.uk/pg/jiayue/milu/
そうは言っても、突然変異テストは特に有用ではないことを認識する必要があります (少なくとも、以前に読んだいくつかのものから)。これは、難しい (比喩的に言えば) アサーションに直面したときや、(状況に対処するときにif and only if
) データ要件が確実に守られていることを確認するための興味深いツールです。
私の意見では、コードの堅牢性を分析する方法はもっと確立されています。
Parasoft のツールは同等のミューテーションのみを生成することに注意してください。これは、変異テストに関するウィキペディアの記事で説明されている問題を反映しています。同等の変異と同等でない変異を区別するのは難しいため、同等のものに固執することにしました。
インストルメント化された C および C++ コードで不変条件を自動的に検出できる別の興味深いツールを試してみました。それは「Daikon」と呼ばれます。基本的に、同等のミューテーションを生成するツールと同じことを行っていますが、問題のあるコードを特定する代わりに、「A == B + 1」などの一連の不変条件を提供します。発見された不変条件を見ると、不変条件が意味をなす場合にコードが正しいことを保証し、不変条件をアサートに変換できるため、コードを変更するときに自信が持てるようになるため、不変条件の方が便利だと思います。
Cプログラムを変更するための簡単なpythonスクリプトは、次の場所で入手できます。
https://github.com/parunbabu/mutate.py
著者は、テスト対象のコードのコメントを外してインデントすると、よりうまく機能すると述べています。
それは無料でオープンソースでもあります...これはあなたが探しているものだと思います.
- Mullは LLVM ベースで、活発に開発されており、使いやすいようです。
- dextool mutateも LLVM ベースで活発に開発されており、使用がより複雑ですが、生きているミュータントを再実行したり、導入された変更のみをミューテーションに基づいてミューテーションするなど、より多くの機能を備えています。
git diff