<<

Testing code … a short intro Sufficient flags

-pedantic -Wconversion -Wall -Werror -Wextra -Wstrict-prototypes

http://virt08.itu.chalmers.se/mediawiki/index.php/Chapter:C_testing#Compiling_wit h_sufficient_flags

“Black-box testing is a method of testing that examines the functionality of an application without peering into its internal structures or workings. This method of test can be applied to virtually every level of : unit, integration, system and acceptance. It typically comprises most if not all higher level testing, but can also dominate as well.”

https://en.wikipedia.org/wiki/Black-box_testing Unit test

“In programming, unit testing is a software testing method by which individual units of , sets of one or more computer modules together with associated control data, usage procedures, and operating procedures, are tested to determine whether they are fit for use.[1] Intuitively, one can view a unit as the smallest testable part of an application. In , a unit could be an entire module, but it is more commonly an individual or procedure.”

https://en.wikipedia.org/wiki/Unit_testing max.c

int max(int a, int b)

{

if (a>b)

{

return a;

}

return b;

} simple-math.c https://github.com/progund/programming-with-c/blob/master/te sting/presentation-material/simple-math.c

https://github.com/progund/programming-with-c/blob/master/te sting/presentation-material/simple-math.h Assert - example NOT using assert value = max(13,14); if (value!=14)

{

printf (" FAILED\n");

…...

} printf (" OK\n"); Assert - example using assert

printf ("Test max using assert: ");

assert (max(13,14)==14);

printf (" OK\n");

https://github.com/progund/programming-with-c/blob/master/te sting/presentation-material/assert.c Assert - example using assert

$ gcc assert.c simple-math.c -o assert -lm && ./assert

Test max using assert: OK Assert - disabling assert in GCC

gcc -DNDEBUG assert.c simple-math.c -o assert -lm && ./assert Unit test frameworks - check

Check - https://libcheck.github.io/check/

Example: https://github.com/progund/programming-with-c/blob/master/testing/presentation- material/check-max.c Unit test frameworks - check

$ gcc check-max.c simple-math.c -lm -lcheck -o check-max && ./check-max

Running suite(s): Max

Test max using assert: OK

100%: Checks: 1, Failures: 0, Errors: 0 Unit test frameworks - CUnit

CUnit - http://cunit.sourceforge.net/

Example: https://github.com/progund/programming-with-c/blob/master/testing/presentation- material/cu-max.c Unit test frameworks - CUnit

$ gcc cu-max.c simple-math.c -lcunit -lm -o cu-max && ./cu-max

CUnit - A unit testing framework for C - Version 2.1-3

http://cunit.sourceforge.net/ Unit test frameworks - CUnit

Suite: Suite_1

Test: test of max() ...Test max using assert: OK passed

Run Summary: Type Total Ran Passed Failed Inactive

suites 1 1 n/a 0 0

tests 1 1 1 0 0

asserts 1 1 1 0 n/a

Elapsed time = 0.000 seconds

“In , code coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite runs. A program with high code coverage, measured as a percentage, has had more of its source code executed during testing which suggests it has a lower chance of containing undetected software bugs compared to a program with low code coverage. Many different metrics can be used to calculate code coverage; some of the most are the percent of program and the percent of program statements called during execution of the test suite.” https://en.wikipedia.org/wiki/Code_coverage Code coverage - gcov

$ gcc -fprofile-arcs -ftest-coverage assert.c simple-math.c -o assert -lm

$ ./assert

$ gcov -b math.c Code coverage - gcov math.c.gcov:

-: 43: // Check if the sum fits in an int

#####: 44: if ((sum>INT_MAX) || (sum

$ gcc -g --coverage -fprofile-arcs -ftest-coverage assert.c simple-math.c -o assert -lm

$ ./assert

$ lcov --directory . --capture --output-file simple-math.info

$ genhtml -o coverage simple-math.info

Test

“In software testing, test automation is the use of special software (separate from the software being tested) to control the execution of tests and the comparison of actual outcomes with predicted outcomes.[1] Test automation can automate some repetitive but necessary tasks in a formalized testing already in place, or add additional testing that would be difficult to perform manually. Test automation is critical for continuous testing.”

https://en.wikipedia.org/wiki/Test_automation jenkins https://builds.apache.org/