標籤:style blog http color io ar strong for 檔案
關鍵詞:軟體測試, 代碼覆蓋,品質
測試環境:ubuntu 12.04
代碼覆蓋 CFG(Control flow graph)圖。控制流程圖(CFG)是一個有向圖抽象資料結構。它是一個過程或程式的抽象表現。每個在圖形中的節點代表一個基本塊,例如,沒有任何跳躍或跳躍目標的直線代碼塊;跳躍目標以一個塊開始,和以一個塊結束。定向邊緣被用於代表在控制流程中的跳躍。CFG中的每個結點至多隻能有兩個直接後繼。
插樁技術
在實現覆蓋測試的過程中,往往需要知道某些資訊,如:程式中可執行語句被執行(即被覆蓋)的情況,程式執行的路徑,變數的引用、定義等。要想擷取這類資訊,需要跟蹤被測程式的執行過程,或者是由電腦在被測程式執行的過程中自動記錄。需要在被測程式中插入完成相應工作的代碼,即代碼插樁技術。如今大多數的覆蓋測試載入器均採用代碼插樁技術。
它是在保證被測程式原有邏輯完整性的基礎上在程式中插入一些探針,通過探針的執行並拋出程式啟動並執行特徵資料,通過對這些資料的分析,可以獲得程式的控制流程和資料流資訊,進而得到邏輯覆蓋等動態資訊,從而實現測試目的的方法。根據探針插入的時間可以分為目標代碼插樁和原始碼插樁。
原始碼插樁
原始碼插樁是在對源檔案進行完整的詞法分析和文法分析的基礎上進行的,這就保證對源檔案的插樁能夠達到很高的準確度和針對性。但是原始碼插樁需要接觸到原始碼,而且隨著編碼語言和版本的不同需要做一定的修改。
目標代碼插樁
例如gdb插入到目標機的stub代理,實現嵌入式的遠端偵錯。目標作業系統提供支援遠端偵錯協議的通訊模組和多任務調試介面,並改寫異常處理的有關部分。另外目標作業系統還需要定義一個設定斷點的函數;因為有的硬體平台提供能產生特定調試陷阱異常(debug trap)的斷點指令以支援調試(如X86的INT 3),而另一些機器沒有類似的指令,就用任意一條不能被解釋執行的非法(保留)指令代替。目標作業系統添加的這些模組統稱為"插樁"。
GCOV工具
Gcov is GCC Coverage, 是一個測試程式碼涵蓋範圍的工具, 是一個命令列方式的控制台程式。
testcov.c
#include <stdio.h> int main(void){ int i, total; total = 0; for(i=0; i<10; i++){ total += i; } if (total != 45){ printf("failure\n"); } else { printf("success\n"); } return 0;}
編譯,並執行。
gcc -fprofile-arcs -ftest-coverage -o testcov testcov.c./testcov
查看testcov程式碼覆蓋情況
$ gcov testcov.cFile ‘testcov.c‘Lines executed:87.50% of 8testcov.c:creating ‘testcov.c.gcov‘
軟體測試--代碼覆蓋