1. 程式人生 > >第4代白盒測試方法實踐之“VcTester插裝原理與各種覆蓋率配置”

第4代白盒測試方法實踐之“VcTester插裝原理與各種覆蓋率配置”

VcTester與常見C/C++語言覆蓋測試工具一樣,提供多種覆蓋率統計,已涵蓋語句覆蓋、分支覆蓋、條件分支覆蓋、MCDC覆蓋。本文講解VcTester的插裝實現原理、描述該工具的覆蓋率使用特點。

VcTester插裝實現原理

VcTester是基於函式呼叫進行覆蓋統計的,比如下面被測語句:

int i = printf(”I am here”);

原始碼經過插裝改造,變為:

int i = (hit_(),printf(”I am here”));

上面藉助逗號表示式,在不影響原語句的語法含義前提下插入hit_呼叫,hit_函式執行過程中自動記錄該行語句是否已執行。

除了hit_函式,VcTester

還對if語句的條件表示式中插入if_0if_1函式,if_0用來記錄判斷結果為FALSE的情況,if_1用來記錄判斷為TRUR的情況。類似的,針對whilefor語句,插裝函式是while_0while_1for_0for_1,另外,針對組合子條件,插入cond_0cond_1函式,針對MCDC覆蓋統計,還插入resetMcdc_函式。

VcTester的插裝不僅支援覆蓋率統計,單步除錯功能也由插裝來支援,VcSmithVcTester在某一行語句設斷點支援單步停住,就是在上述hit_函式中實現的。

VcTester覆蓋率統計特點

首先,VcTester針對CSE指令碼也提供覆蓋率統計,即,大家用指令碼編寫測試用例,這樣的指令碼也可以當作被測程式碼進行除錯與測試。

CSE指令碼的覆蓋率統計與分析在共享版VcSmith已提供,可免費使用。

其次,VcTester可配置按指令碼程式碼的覆蓋率(即LICCLDCC)方式統計,還是按C/C++的覆蓋方式進行統計。這兩者實際是基於同一原理,都是分析函式主調與被調關係實現統計的,若按C/C++方式統計額外附加一點轉換即可,我們在Option對話方塊中將“Translate to Statement Coverage and Condition/Decision Coverage”選擇框置上,如下圖:

圖:轉成C/C++風格覆蓋率

然後,VcTester支援的覆蓋率統計還可靈活配置,配置包括“例外被測函式列表”(Except definition)與“例外被調函式列表”(

Except function call),前者決定特定被測函式不納入測試統計,比如某些特定的異常處理函式,因為實現邏輯簡單,但模擬出異常實現覆蓋測試的代價很高,就可以把這些異常處理函式定義到“例外被測函式列表”。

這一特點使VcTester覆蓋統計具備一種柔性,對在各種型別風格的程式碼都維持確定的質量標準,還適應在不同階段(如原型階段、聯調階段、測試階段)分別按不同質量標準進行控制。

CSE指令碼風格與C/C++風格的覆蓋統計還可統一起來,只需配置按LICCLDCC的方式(即指令碼方式)統計覆蓋率,然後在“例外被調函式列表”(Except function call)指定哪些插裝函式不作統計,即定製各種類別的覆蓋率。比如預設情況下針對C/C++統計的是條件判定覆蓋率,如果配置if_0if_1while_0while_1for_0for_1cond_0cond_1不統計,把這些函式定義到例外被調函式列表,系統對C/C++程式碼就只統計hit_,統計結果就變成語句覆蓋,如果只排除cond_0與、cond_1則得到判定覆蓋。上述這些配置對指令碼的覆蓋統計不產生影響。

CSE軟體在V1.6以後版本支援混合程式設計後,上述指令碼與C/C++合一的覆蓋率統計顯得比較有價值,產品程式碼可以用CSE指令碼來寫,以除錯與測試,自動翻譯成C/C++程式碼,產品研發過程中,指令碼形式的產品程式碼與C/C++形式的產品程式碼會長時間並存。

支援寫一點測一點的開發模式

採用持續整合開發模式的專案,程式碼往往寫一點、調一點、測一點,依次不停的做迭代。該方式要求測試工具對測試過程評估要更加“過程化”,要適應對每一步迭代過程的研發質量做出評價。

VcTester工具的Option對話方塊可定義程式碼過程質量的通過標準(請參考見VcSmithVcTester使用手冊)。VcTester提供一種紅綠燈通行機制,在主介面右上角設計3個紅綠燈,如下圖:

圖:測試紅綠燈與覆蓋率

分別表示當前測試的狀態、覆蓋率與測試程度情況,如果當前測試未通過,最左邊的標誌燈會亮紅燈,這時使用者應先解決問題,如果程式碼覆蓋率或用例覆蓋度沒達標,中間或右邊的標誌燈會亮黃燈,使用者應加強測試,直至這兩個標誌燈都變綠色。遵循紅綠燈機制的基本規則就是:

3個綠燈時時亮起,亮綠燈是常態,亮紅燈是暫態。

如果團隊每位成員都很好的遵守這個規則,就能保證軟體開發一直按照確定質量標準平穩向前推進,研發進度與風險都在受控範圍內。

參考文獻:

,《VcSmith使用手冊》

,《VcTester使用手冊》

================ END ==========================

本專題相關的文章: