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が表示されます。


ファイル毎のカバレッジが表示されます。
ソース内でのユニットテスト実行と非実行の行がハイライト表示されます。