Code Coverage
===
###### tags: `III` `DevOps` `Testing` `CI/CD`
## Code Coverage
It allows you to find the areas of a program which is not exercised by a set of test cases, then it allows you to create extra test cases to increase coverage.
- [What is Code coverage?](https://www.guru99.com/code-coverage.html)
---
## gcovr
* [gcovr](https://gcovr.com/en/stable/guide.html#getting-started) will manage the use of gcov to output code coverage report.
* Add logic to let g++ generate output files (``*.gcno`` from `` -ftest-coverage`` and ``*.gcda`` from ``-fprofile-arcs``) that can be processed by the gcov command.
* ``*.gcno`` files are generated after compilation.
* ``*.gcda`` files are generated after execution.
### 待測 shared (dynamic) library
source code 要被編譯成``.o``時,要加
```
GITLAB_GCOV_LDFLAGS += -fprofile-arcs -ftest-coverage -O0 -fPIC
```
``.o``要連結成``.so``時,要加
```
GITLAB_GCOV_FLAGS += -fprofile-arcs -O0 -fPIC -shared
```
---
## Useful Commands
列出執行檔相依的動態函式庫
```
$ ldd unit-test/authTest/authTest.exe
```
搜索某檔名的路徑
```
$ find . -name 'libauth.so'
```
搜索含有某內容的檔案路徑
```
$ grep -rnw '\-lauth' .
```
展開 Makefile
```
$ make -nprR -C ulibs/auth | less
# makefile (from 'Makefile', line 7)
LIB_NAME = libauth.so
```