CUnit Test Code Coverage - ntut.edu.twjykuo/course/CUnitCodeCoverage.pdf · 2 Gcovand Gprof...
Transcript of CUnit Test Code Coverage - ntut.edu.twjykuo/course/CUnitCodeCoverage.pdf · 2 Gcovand Gprof...
-
C Unit TestCode Coverage
國立臺北科技大學資訊工程系
郭忠義
1
-
2
Gcov and Gprof Gcov (GCC coverage)
程式碼測試覆蓋率工具,統計每一行程式執行次數
Gprof (profiling tool) 程式分析工具,評估哪一段程式最耗時
-
3
Gcov - GCC Coverage Code::Blocks開啟project: Console Application,寫以下程式
//main.c#include #include int getFinal(int, int);void test01() {
assert(final(50,1)>=60);assert(final(50,0)
-
開一個專案
File – New – Project – Console application – Go – Next - C
4
-
開一個專案
File – New – File – C/C++ source – Go – main.c
5
-
開一個專案
File – New – File – C/C++ source – Go – getScore.c
6
-
7
Gcov - GCC Coverage 選擇Project > Build options…
在Pre/Post build steps,填入gcc -pg -fprofile-arcs -ftest-coverage -o main main.c getScore.cmain
-
8
Gcov - GCC Coverage 選擇Tools > Configure tools…
在Add新增一個Tools
-
9
Gcov - GCC Coverage 填入
gcovC:\Program Files (x86)\CodeBlocks-EP\MinGW\bin\gcov.exemain.c getScore.c${PROJECT_DIR}
-
10
Gcov - GCC Coverage 編譯執行,產生
main.gcda文件(gcov data文件) main.gcno文件(gcov note文件) getScore.gcda文件(gcov data文件) getScore.gcno文件(gcov note文件) 可執行程式main.exe
-
11
Gcov - GCC Coverage 執行剛新增的Tools
Tools > gcov 看到code coverage為100.00%
同時產生main.c.gcov, getScore.gcov 紀錄每行程式碼執行次數
-
12
Gcov - GCC Coverage 使用記事本打開main.c.gcov
查看執行次數(黃色)與行數(紅色)
-
13
Gprof 選擇Tools > Configure tools…
在Add新增一個Tools
-
14
Gprof 填入
gprofC:\Program Files (x86)\CodeBlocks-EP\MinGW\bin\gprof.exe-b main.exe gmon.out${PROJECT_DIR}
-
15
Gprof 修改程式getFinal.c
// getScore.cvoid delay(int t) {
long goal=99900000*t, i=0;while (goal > i) {
t = t*t*t*t-t*t*t*t; i++;}
}void wait(int t) {
long goal=49900000*t, i=0;while (goal > i) {
t = t*t*t*t-t*t*t*t; i++;}
}
/int getPresent(int p) {delay(8);if (p==0) return 0;else return 1;
}int getFinal(int score, int present) {
present = getPresent(present);wait(4);if (score>=50) {
if (present==1) {score=60;
}}return score;
}
-
16
Gprof 重新編譯執行,分析執行時間,專案資料夾產生檔案
gmon.out是gprof用來分析檔案
-
17
Gprof 執行Tools > gprof ,分析結果
%time function使用占全部時間的百分比
cumulative seconds function累積執行的時間
self seconds function本身執行的時間
calls function被呼叫的次數
self Ts/call 每次呼叫,花費在function上的時間
total Ts/call 每次呼叫,花費在function及子function平均時間
name 檔案名稱
-
18
Gprof- call graph
Spontaneous自發的
呼叫它的function
被呼叫的function
被呼叫的function
執行時間占比
被它呼叫的時間
被它呼叫的時間
自己執行所佔時間
自己執行所佔時間
getPresent呼叫delay執行所佔時間
Function的編號
自發的