21
Embedded Test Code Coverage

IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Embed Size (px)

Citation preview

Page 1: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Embedded Test Code Coverage

Page 2: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Coverage Tools

1. tcov2. gcov

3. "C Test Coverage Tool"4. "C++ Test Coverage Tool"

5. "Squish Coco" 6. "C++ Coverage Validator"

Page 3: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Common program

Page 4: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

gcovgcov is a tool you can use in conjunction with GCC to test code coverage in your programs.

Page 5: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

How it works?

Page 6: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

gcov● how often each line of code executes

● what lines of code are actually executed● how much computing time each section of code uses

Page 7: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

How to use?

Page 8: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

$ gcc -fprofile-arcs -ftest-coverage tmp.c$ a.out$ gcov tmp.cFile 'tmp.c'Lines executed:90.00% of 10Creating 'tmp.c.gcov'

Page 9: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

-: 0:Source:tmp.c-: 0:Graph:tmp.gcno-: 0:Data:tmp.gcda-: 0:Runs:1-: 0:Programs:1-: 1:#include <stdio.h>-: 2:-: 3:int main (void)1: 4:{1: 5: int i, total;-: 6:1: 7: total = 0;-: 8: 11: 9: for (i = 0; i < 10; i++) 10: 10: total += i;-: 11:1: 12: if (total != 45) #####: 13: printf ("Failure\n");-: 14: else1: 15: printf ("Success\n");1: 16: return 0;-: 17:}

Page 10: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Beyond..

Page 11: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

lcovlcov is a graphical front-end for GCC's coverage testing tool gcov.

Page 12: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

CFLAGS += -fprofile-arcs -ftest-coverageLDFLAGS += -lgcovlcov --base-directory . --directory . --capture --output-file example.infogenhtml -o /coverage/example.info

Page 14: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

cpputest frameworkCppUTest is a C /C++ based unit xUnit test framework for unit testing and for test-driving

your code.

Page 15: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

Basic Makefile

Page 16: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

PROJECT_HOME_DIR = .CPP_PLATFORM = Gcc

CPPUTEST_USE_EXTENSIONS = YCPPUTEST_WARNINGFLAGS += -Wall CPPUTEST_WARNINGFLAGS += -Werror CPPUTEST_WARNINGFLAGS += -Wswitch-default CPPUTEST_WARNINGFLAGS += -Wswitch-enum CPPUTEST_WARNINGFLAGS += -Wno-self-assignCPPUTEST_CFLAGS += -std=c89CPPUTEST_CFLAGS += -Wextra CPPUTEST_CFLAGS += -pedantic CPPUTEST_CFLAGS += -Wstrict-prototypes

Flags

Page 17: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

SRC_DIRS = \src/*\

TEST_SRC_DIRS = \tests \tests/util \tests/devices \tests/HomeAutomation\mocks

INCLUDE_DIRS =\ $(CPPUTEST_HOME)/include/\ include/*\ mocks

Path

Page 18: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

include $(CPPUTEST_HOME)/build/MakefileWorker.mk

Include Framwork

Page 19: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

CPPUTEST_HOME/build/MakefileWorker.mk

CPPUTEST_USE_GCOV = Y

Enable gcov

Page 20: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

$ cd PROJECT_HOME_DIR$ make gcov

Get gcov output

Page 21: IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자

lcov --base-directory . --directory objs/ -c -o temp.infolcov --remove temp.info "/usr*" -o temp.inform -rf test_coveragemkdir test_coveragegenhtml -o test_coverage temp.info

Generate lcov html