白盒測試技術-方法與實踐篇
作者:張元禮
http://blog.csdn.net/vincetest
3.1 白盒測試方法
一、用例設計
1、測試案例的組成(在單元測試中測試案例基本上由測試指令碼組成)
1)用例運行前置條件
2)被測模組/單元所需環境(全域變數賦值或初始化實體)
3)啟動測試驅動
4)設定樁
5)調用被測模組【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
6)設定預期輸出條件判斷
7)恢複環境(包括清除樁)
2、測試案例的設計原則
1)一個好的測試案例在於能夠發現至今沒有發現的錯誤;
2)測試案例應由測試輸入資料和與之對應的預期輸出結果這兩部分組成;
3)在測試案例設計時,應當包含合理的輸入條件和不合理的輸入條件;
4)為系統運行起來而設計測試案例;
5)為正向測試而設計測試案例;
6)為逆向測試而設計測試案例;
7)為滿足特殊需求而設計測試案例;
8)為代碼覆蓋而設計測試案例;
3、用例設計方法
1)規範(規格)匯出發
2)等價類別劃分法
3)邊界值分析法
4)狀態轉移測試法
5)分支測試法
6)條件測試法【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
7)資料定義-使用測試法(又名資料流測試法)
8)內部邊界值測試法
9)錯誤猜測法
各種詳細設計方法請參考《測試案例設計白皮書》
4、特定的用例測試設計
1)聲明測試
2)路徑測試
3)迴圈測試
4)迴圈嵌套
5)邊界值測試
6)介面測試
7)確認測試
8)事務測試【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
二、用例執行
- 一般來說,做單元測試均採用的是商用的測試載入器或自行開發的測試載入器,用例的編寫都是在測試載入器上完成,測試案例都是一些測試指令碼,都以檔案的方式來儲存,故其用例的執行過程主要是由測試載入器根據所編寫的具體的測試案例指令碼來完成,這樣對於用例的管理和執行也非常靈活。
- 在特定場合,比如某種壓力測試或極限測試,對於測試執行過程時間很長時(幾個小時以上),一般都預先編寫好用例(確保用例無誤),使用空閑機或非工作時間執行測試案例,這樣操作起來較節約時間。
- 在用例的執行過程中務必注意如下事項:【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
1、程式的執行過程―――便於構造發散用例
2、不要放過任何細節――這種細節可能就是問題
三、測試最佳化和策略
1、測試案例的最佳化
2、測試執行的最佳化
3、測試策略
1)哪些是重點模組?
2)哪些程式是最複雜、最容易出錯的?
3)哪些程式是相對獨立,應當提前測試的?
4)哪些程式最容易擴散錯誤?【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
5)哪些程式是開發人員最沒有信心的?
6)80-20原則:80%的缺陷聚集在20%的模組中,經常出錯的模組改錯後還會經常出錯,這種應該列入測試重點。
3.2 白盒測試評估
1、測試完備性評估,主要檢查測試過程中是否已經執行了所有的測試案例,對新增的測試案例是否已及時更新測試方案等。
2、程式碼涵蓋範圍評估,主要是根據程式碼涵蓋範圍工具提供的語句覆蓋情況報告,檢查是否達到方案中的要求,公司要求語句覆蓋達到100%。但很多情況下,第一輪測試案例執行完後是很難達到的,這時在評估過程中要對覆蓋率進行分析,主要從以下方面來考慮:【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
1)不可能的路徑或條件
2)不可達的或冗餘的代碼
3)不充分的測試案例
3、從覆蓋的角度看,測試應該覆蓋:
1)功能覆蓋
2)輸入欄位覆蓋
3)輸出域覆蓋
4)函數互動覆蓋
5)代碼執行覆蓋
大多數有效測試案例都來自於分析,而不是僅僅為了達到測試覆蓋率目標而草率設計測試案例。千萬不要誤解測試覆蓋,測試覆蓋並不是我們最求的目的,它只是評價測試的一種方式,為測試提供指導和依據。
【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
4、測試覆蓋程度評估:
- 位置無關調用覆蓋率(Location-independent call coverage,LICC)
LICC = (已覆蓋的不重複的函數調用個數 / 全部不重複的函數調用個數) * 100%
- 位置相關調用覆蓋率(Location-dependent call coverage,LDCC)
LDCC = (已覆蓋的函數調用個數 / 全部函數調用個數) * 100%
案例:【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
void Func(int i)
{
call1();
if(i==2)call2();
else if((i==3)call3();
else call1();
}
調用Func(2)和Func(3)後我們對Func()的覆蓋評估如下:
LICC:3/3 = 100%
LDCC:3/4 = 75%
5、測試設計程度評估:
測試設計程度也稱用例覆蓋度(Test Case Coverage,TCC),以被測函數在正式測試中使用頻度與其函數定義中分支總數之間關係作為依據,定義如下:
TCC = 用例中調用被測函數的總次數 / 函數定義的分支總數
其中,某函數的分支總數的定義如下:函數分支總數 = 1 + if語句總數 * 2 + while語句總數 * 2 + for語句總數 * 2 ,if語句有TRUE與FALS兩個分支,原理上說應該設計兩次測試才是完整的,while與for也類似,迴圈至少進入一次應設計一個用例,一次都不進入也應設計一個用例,所以計算出if、while與for語句總數後要乘以2,但如果一個函數沒使用這3個控制語句,也應至少設計一個用例測試它,這是上面公式額外加上1的含義。
3.3 白盒測試推行
前提條件
- 思想上的統一
品質部門及項目責任人足夠重視,將單元測試輸出資料行為與代碼輸出同等重要地位。
- 完備的流程支撐
主要指設計文檔的完備性,比如《詳細設計說明書》,因為《詳細設計說明書》是白盒測試的重要依據。
- 推行方法【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
1)選擇相對重要複雜的模組
2)選擇進度相對不緊張的項目
3)白盒測試人員一般為開發人員
- 測試載入器的選擇
3.4 白盒測試實踐
一、業界測試載入器介紹
1、CodeTest
2、RTRT(Rational Test RealTime)
3、VcTester
4、CppUnit/CUnit
5、Cantata++
6、C++Test
測試載入器詳細介紹參見《常用嵌入式軟體白盒測試載入器介紹》
二、測試載入器VcTester使用實踐(主要參見案例示範)
1、VcTester簡單介紹(測試原理)
2、測試環境搭建
3、指令碼體系【文章來源:張元禮的部落格 http://blog.csdn.net/vincetest】
4、被測元素的訪問(類型、變數、函數)
5、測試元素構造(參數、樁、測試架構)
6、測試執行(線上測試)
7、覆蓋評估(代碼覆蓋、測試覆蓋)
8、代碼編輯、編譯、調試
9、測試報告
以上詳細介紹可訪問VcTester官方網站:www.eztester.com.
相關文章:
白盒測試技術-白盒測試理論篇
白盒測試技術-單元測試理論篇
歡迎轉載此文,轉載時請註明文章來源:張元禮的部落格 http://blog.csdn.net/vincetest