投稿

11月, 2020の投稿を表示しています

コードカヴァレッジ計測

イメージ
コードカヴァレッジとは あるプログラムコードについて実行した際に、実際にコード中の命令を何割実行したかを数値に表したものを言う。 計測手法 方法は様々である。たとえば、Linux kernel の fuzzer である Google の syzkaller を用いれば、ユーザーアプリケーションへの入力を自動で変化させつつコードカヴァレッジを確認させてくれる。また、Linux kernel のコンフィグ自体にもカヴァレッジについてのコンフィグが存在する。これは masami256 さんのブログなどが詳しい 。 今回は gcc に組込みの手法でカヴァレッジテストを実行する手法についてメモをする gcov gcov がカヴァレッジ情報を .gcov という拡張子でダンプすることでカヴァレッジを確認できる。このコマンドは gcc に附属している。 使い方を見ていく このようなソースコードを用意し、次のようにコンパイルする。 $ gcc -fprofile-arcs -ftest-coverage -o cov_test cov_test.c すると次のようなファイルが用意されるはずだ。 $ ls cov_test cov_test.c cov_test.gcno これでカヴァレッジテストの準備は完了した。では、実際にカヴァレッジテストを行なってみよう。まずは、何も引数を与えずコンパイルしたコードを実行する。 $ ./cov_test ./cov_test: you need to pass arguments at least 1 $ ls cov_test cov_test.c cov_test.gcda cov_test.gcno .gcno に加えて .gcda が追加されている。このファイルがカヴァレッジテストの結果を格納している。ここで、 gcov コマンドを用いてみよう。 $ gcov cov_test.gcda File 'cov_test.c' Lines executed:38.89% of 18 Creating 'cov_test.c.gcov' cov_test.c というコード全体が 18 行で、そのうち 38.89% が実行されたということを物語っている。また、