Hatena::ブログ(Diary)

日々の記録 このページをアンテナに追加 RSSフィード Twitter

2010-05-27

Hudsonの使い方21 Hudsonでユニットテスト網羅率測定(C言語)

C言語プロジェクトでも、

ユニットテストの網羅率(カバレッジ)測定をしてみます。


ど〜でもいいことですけど・・・

丸数字って、 銑瓦泙任靴ないのね(;´Д`)


Slave端末にgcovインストールします。

gccが入っていればgcov入っていると思います。


Slave端末にlcovをインストールします。

lcovでgcovが出力したカバレッジHTMLに変換します。

Ubuntuでは以下のコマンドでインストールします。

sudo apt-get install lcov

gcov、lcovをmakeから実行できるようにMakefileを変更します。

ついでにMakefileを少し整理してみました。


Makefile


TARGET=TEST_sort
SRCS=$(shell ls *.c)
OBJS=$(SRCS:.c=.o)

CC=gcc
CFLAGS=-L/usr/local/lib
LDFLAGS=-lcunit

##############################################################################

# コンパイル
all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CLFAGS) $(LDFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -c $<

# コンパイル(カバレッジ測定)
coverage:
	make CFLAGS="$(CFLAGS) -fprofile-arcs -ftest-coverage" LDFLAGS="$(LDFLAGS) -fprofile-arcs -ftest-coverage"


##############################################################################

# ユニットテスト実行
run:
	./$(TARGET)
	xsltproc cunit-to-junit.xsl CUnitAutomated-Results.xml > UnitTestResults.xml

# ユニットテスト実行(カバレッジ測定)
run-coverage:
	make run
	lcov -c -d . -o lcov.info
	lcov -r lcov.info *.h -o lcov-temp.info
	lcov -r lcov-temp.info TEST_*.c -o lcov-html.info
	genhtml -o html lcov-html.info


##############################################################################

# ディレクトリクリア
clean:
	rm -f $(TARGET) *.o core *.xml *.log *.gcno *.gcda *.info
	rm -r -f html temp

# 静的解析
analysis:
	mkdir temp
	mv TEST_*.c temp
	/usr/local/bin/splint.sh -weak -I /usr/local/include *.c > splint.log
	mv temp/* .

# コンパイルカバレッジ測定)

coverage: で、「-fprofile-arcs -ftest-coverag」をつけてコンパイルします。


# ユニットテスト実行(カバレッジ測定)

run-coverage:で、lcovを実行してHTMLを生成します。

lcov -r でテストソースとヘッダファイルをカバレッジ対象外にしています。


プロジェクトの設定でシェルの実行を変更します。(赤枠の部分です)


HTML Publisher pluginをインストールします。


ジョブの設定でPublish HTML reportsをチェック

lcovの出力結果ファイルを指定します。(赤枠の部分です)


ジョブを実行します。

カバレッジが表示されます。(赤枠の部分です)


Summaryが表示されます。


ファイル毎のカバレッジが表示されます。

ソース内でのユニットテスト実行と非実行の行がハイライト表示されます。

discypusdiscypus 2010/06/01 23:55 自分はlcov 1.7を使っていて、genhtml が標準出力に出す行カバレッジと関数カバレッジをperlで加工して、Hudsonのplot pluginでグラフを書いてます。

lcov〜genhtml、およびplot plugin用のデータファイル作成はこんな感じです:
lcov --capture --directory hoge --output-file app.info --test-name "$JOB_NAME build:$BUILD_NUMBER $BUILD_ID"
genhtml --output-directory html --legend --title "$JOB_NAME build:$BUILD_NUMBER $BUILD_ID" app.info | tee coverage-summary
perl -n -e 'if (/lines[^0-9]+([0-9.]+)%/) {print "YVALUE=$1"}' coverage-summary > coverage-lines
perl -n -e 'if (/functions[^0-9]+([0-9.]+)%/) {print "YVALUE=$1"}' coverage-summary > coverage-functions

nekozeoyajinekozeoyaji 2010/06/02 22:54 なるほど〜 勉強になります^^
Hudsonのplot pluginでグラフも書けるのですねφ(`д´)メモメモ...

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証