Top Banner
Embedded Test Code Coverage
21

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

Apr 12, 2017

Download

Software

Taeyeop Kim
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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