This is v2 of the test coverage series. It addresses all the points that were raised for v1. Here's the diffstat against v1: .gitignore | 15 +++------------ Makefile | 19 +++++++++---------- t/README | 21 ++++++++++++++++----- 3 files changed, 28 insertions(+), 27 deletions(-) And the diff since v2: diff --git a/.gitignore b/.gitignore index e02f1f9..baed247 100644 --- a/.gitignore +++ b/.gitignore @@ -207,12 +207,3 @@ -/*.gcda -/*.gcno -/*.gcov -/builtin/*.gcda -/builtin/*.gcno -/builtin/*.gcov -/xdiff/*.gcda -/xdiff/*.gcno -/xdiff/*.gcov -/compat/*.gcda -/compat/*.gcno -/compat/*.gcov +*.gcda +*.gcno +*.gcov diff --git a/Makefile b/Makefile index c35c348..b6975aa 100644 --- a/Makefile +++ b/Makefile @@ -2282,0 +2283 @@ coverage: +object_dirs := $(sort $(dir $(OBJECTS))) @@ -2284,4 +2285,3 @@ coverage-clean: - $(RM) *.gcov *.gcda *.gcno - $(RM) builtin/*.gcov - $(RM) builtin/*.gcda - $(RM) builtin/*.gcno + $(RM) $(addsuffix *.gcov,$(object_dirs)) + $(RM) $(addsuffix *.gcda,$(object_dirs)) + $(RM) $(addsuffix *.gcno,$(object_dirs)) @@ -2298,4 +2298,3 @@ coverage-report: - gcov -b *.c - gcov -b -o builtin builtin/*.c - gcov -b -o xdiff xdiff/*.c - gcov -b -o compat compat/*.c + for dir in $(object_dirs); do \ + gcov --preserve-paths --branch-probabilities --all-blocks --object-directory=$$dir $$dir*.c; \ + done @@ -2303 +2302 @@ coverage-report: -coverage-report-untested-functions: +coverage-untested-functions: coverage-report @@ -2308 +2307 @@ coverage-report-untested-functions: -coverage-report-cover-db: +coverage-report-cover-db: coverage-report diff --git a/t/README b/t/README index 718f35d..400e2da 100644 --- a/t/README +++ b/t/README @@ -273,0 +274,9 @@ Do: + Don't blindly follow test coverage metrics, they're a good way to + spot if you've missed something. If a new function you added + doesn't have any coverage you're probably doing something wrong, + but having 100% coverage doesn't necessarily mean that you tested + everything. + + Tests that are likely to smoke out future regressions are better + than tests that just inflate the coverage metrics. + @@ -518,3 +527,5 @@ Test coverage -You can use the coverage tests to find out if your tests are really -testing your code code. To do that, run the coverage target at the -top-level (not in the t/ directory): +You can use the coverage tests to find code paths that are not being +used or properly exercised yet. + +To do that, run the coverage target at the top-level (not in the t/ +directory): @@ -532 +543 @@ functions: - make coverage-report-untested-functions + make coverage-untested-functions @@ -537 +548 @@ Devel::Cover module. To install it do: - # On Debian: + # On Debian or Ubuntu: I also rewrote some of the commit messages. Ævar Arnfjörð Bjarmason (7): gitignore: Ignore files generated by "make coverage" Makefile: Include subdirectories in "make cover" reports Makefile: Split out the untested functions target Makefile: Add coverage-report-cover-db target Makefile: Add coverage-report-cover-db-html target t/README: A new section about test coverage t/README: Add a note about the dangers of coverage chasing .gitignore | 6 ++++++ Makefile | 17 +++++++++++++++-- t/README | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html