1、用例設(shè)計
1)測試用例的組成(在單元測試中測試用例基本上由測試腳本組成)
① 用例運(yùn)行前置條件
?、?被測模塊/單元所需環(huán)境(全局變量賦值或初始化實體)
?、?啟動測試驅(qū)動
④ 設(shè)置樁
?、?調(diào)用被測模塊
?、?設(shè)置預(yù)期輸出條件判斷
?、?恢復(fù)環(huán)境(包括清除樁)
2)測試用例的設(shè)計原則
① 一個好的測試用例在于能夠發(fā)現(xiàn)至今沒有發(fā)現(xiàn)的錯誤;
?、?測試用例應(yīng)由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成;
?、?在測試用例設(shè)計時,應(yīng)當(dāng)包含合理的輸入條件和不合理的輸入條件;
?、?為系統(tǒng)運(yùn)行起來而設(shè)計測試用例;
?、?為正向測試而設(shè)計測試用例;
?、?為逆向測試而設(shè)計測試用例;
⑦ 為滿足特殊需求而設(shè)計測試用例;
⑧ 為代碼覆蓋而設(shè)計測試用例;
3)用例設(shè)計方法
?、?規(guī)范(規(guī)格)導(dǎo)出發(fā)
?、?等價類劃分法
?、?邊界值分析法
④ 狀態(tài)轉(zhuǎn)移測試法
?、?分支測試法
?、?條件測試法
?、?數(shù)據(jù)定義-使用測試法(又名數(shù)據(jù)流測試法)
?、?內(nèi)部邊界值測試法
?、?錯誤猜測法
各種詳細(xì)設(shè)計方法請參考《測試用例設(shè)計白皮書》
4)特定的用例測試設(shè)計
?、?聲明測試
② 路徑測試
?、?循環(huán)測試
④ 循環(huán)嵌套
?、?邊界值測試
⑥ 接口測試
⑦ 確認(rèn)測試
?、?事務(wù)測試
2、用例執(zhí)行
● 一般來說,做單元測試均采用的是商用的測試工具或自行開發(fā)的測試工具,用例的編寫都是在測試工具上完成,測試用例都是一些測試腳本,都以文件的方式來保存,故其用例的執(zhí)行過程主要是由測試工具根據(jù)所編寫的具體的測試用例腳本來完成,這樣對于用例的管理和執(zhí)行也非常靈活。
● 在特定場合,比如某種壓力測試或極限測試,對于測試執(zhí)行過程時間很長時(幾個小時以上),一般都預(yù)先編寫好用例(確保用例無誤),使用空閑機(jī)或非工作時間執(zhí)行測試用例,這樣操作起來較節(jié)約時間。
● 在用例的執(zhí)行過程中務(wù)必注意如下事項:
1)程序的執(zhí)行過程―――便于構(gòu)造發(fā)散用例
2)不要放過任何細(xì)節(jié)――這種細(xì)節(jié)可能就是問題
3、測試優(yōu)化和策略
1)測試用例的優(yōu)化
2)測試執(zhí)行的優(yōu)化
3)測試策略
?、?哪些是重點模塊?
?、?哪些程序是最復(fù)雜、最容易出錯的?
?、?哪些程序是相對獨立,應(yīng)當(dāng)提前測試的?
?、?哪些程序最容易擴(kuò)散錯誤?
?、?哪些程序是開發(fā)者最沒有信心的?
1、測試完備性評估,主要檢查測試過程中是否已經(jīng)執(zhí)行了所有的測試用例,對新增的測試用例是否已及時更新測試方案等。
2、代碼覆蓋率評估,主要是根據(jù)代碼覆蓋率工具提供的語句覆蓋情況報告,檢查是否達(dá)到方案中的要求,公司要求語句覆蓋達(dá)到100%。但很多情況下,第一輪測試用例執(zhí)行完后是很難達(dá)到的,這時在評估過程中要對覆蓋率進(jìn)行分析,主要從以下方面來考慮:
1)不可能的路徑或條件
2)不可達(dá)的或冗余的代碼
3)不充分的測試用例
3、從覆蓋的角度看,測試應(yīng)該覆蓋:
1)功能覆蓋
2)輸入域覆蓋
3)輸出域覆蓋
4)函數(shù)交互覆蓋
5)代碼執(zhí)行覆蓋
大多數(shù)有效的測試用例都來自于分析,而不是僅僅為了達(dá)到測試覆蓋率目標(biāo)而草率設(shè)計測試用例。千萬不要誤解測試覆蓋,測試覆蓋并不是我們最求的目的,它只是評價測試的一種方式,為測試提供指導(dǎo)和依據(jù)。
4、測試覆蓋程度評估:
● 位置無關(guān)調(diào)用覆蓋率(Location-independent call coverage,LICC)
LICC = (已覆蓋的不重復(fù)的函數(shù)調(diào)用個數(shù) / 全部不重復(fù)的函數(shù)調(diào)用個數(shù)) * 100%
● 位置相關(guān)調(diào)用覆蓋率(Location-dependent call coverage,LDCC)
LDCC = (已覆蓋的函數(shù)調(diào)用個數(shù) / 全部函數(shù)調(diào)用個數(shù)) * 100%
案例:
void Func(int i)
{
call1();
if(i==2)call2();
else if((i==3)call3();
else call1();
}
調(diào)用Func(2)和Func(3)后我們對Func()的覆蓋評估如下:
LICC:3/3 = 100%
LDCC:3/4 = 75%
5、測試設(shè)計程度評估:
測試設(shè)計程度也稱用例覆蓋度(Test Case Coverage,TCC),以被測函數(shù)在正式測試中使用頻度與其函數(shù)定義中分支總數(shù)之間關(guān)系作為依據(jù),定義如下:
TCC = 用例中調(diào)用被測函數(shù)的總次數(shù) / 函數(shù)定義的分支總數(shù)
前提條件
● 思想上的統(tǒng)一
質(zhì)量部門及項目責(zé)任人足夠重視,將單元測試輸出列為與代碼輸出同等重要地位。
● 完備的流程支撐
主要指設(shè)計文檔的完備性,比如《詳細(xì)設(shè)計說明書》,因為《詳細(xì)設(shè)計說明書》是白盒測試的重要依據(jù)。
● 推行方法
1)選擇相對重要復(fù)雜的模塊
2)選擇進(jìn)度相對不緊張的項目
3)白盒測試人員一般為開發(fā)人員
● 測試工具的選擇
四、 白盒測試實踐
1、業(yè)界測試工具介紹
1)CodeTest
2)RTRT(Rational Test RealTime)
3)VcTester
4)CppUnit/CUnit
5)Cantata++
6)C++Test
測試工具詳細(xì)介紹參見《常用嵌入式軟件白盒測試工具介紹》
2、測試工具VcTester使用實踐
1)VcTester簡單介紹(測試原理)
2)測試環(huán)境搭建
3)腳本體系
4)被測元素的訪問(類型、變量、函數(shù))
5)測試元素構(gòu)造(參數(shù)、樁、測試框架)
6)測試執(zhí)行(在線測試)
7)覆蓋評估(代碼覆蓋、測試覆蓋)
8)代碼編輯、編譯、調(diào)試
9)測試報告