版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第九次廣州軟件測試交流會
1單元測試經(jīng)驗分享
王彤Copyright?WWW.GZTEST.NET2007-2-32內(nèi)容介紹從經(jīng)歷談單元測試的意義如何測試?由誰測試?難于實施的原因及對策測試工具開發(fā)測試用例設(shè)計提高測試效果效率的方法3從經(jīng)歷談單元測試的意義做與不做,反差強烈保證局部代碼質(zhì)量改良代碼整體結(jié)構(gòu)
回歸測試降低后期測試、維護升級成本
回歸測試適應(yīng)頻繁變化的需求
使開發(fā)過程可控4如何測試?單元是什么?錯誤分類測試方法分類測試方法選擇人工動態(tài)測試簡述5單元是什么?類?(太復雜)函數(shù)?(簡單實用)6崩潰異常超時7測試方法人工根據(jù)語法特征或行為特征判斷錯誤,只能發(fā)現(xiàn)有特征錯誤自動靜態(tài)動態(tài)(分析代碼)(執(zhí)行代碼)根據(jù)人工定義的程序的行為判斷錯誤需測試用例8從簡單示例看方法選擇
int
Add(inta,intb)
{
returna-b;
};
自動方法(無效)人工動態(tài)方法
(輸入兩個1,判斷輸出是否為2)將+寫成-9人工動態(tài)測試
設(shè)定初始狀態(tài)(輸入)執(zhí)行程序判斷結(jié)果是否正確?(輸出)人工設(shè)定用例的輸入和輸出其他工作可以自動化10小結(jié)以函數(shù)為“單元”分為有特征錯誤和無特征錯誤,后者占大多數(shù)測試方法有:
人工靜態(tài)人工動態(tài)自動靜態(tài)自動動態(tài)以人工動態(tài)測試為主要方法11由誰測試?開發(fā)還是測試?根據(jù)成本來決定成本對比存在問題及解決辦法12事項邊開發(fā)邊測試由測試部門測試理解代碼
無需額外費時理解代碼
理解別人寫的代碼難度大,耗時多可測性問題及時解決
累積人員要求
無需額外能力需有編程經(jīng)驗,且三日不寫手生
文檔要求
有無文檔均可
須有詳細設(shè)計文檔
溝通自行修正
反復溝通
促進編程
提高編程效率無成本對比13由測試實施的話……成本,在三倍以上?兩個條件:
詳細設(shè)計文檔
足夠的具有編碼能力的測試員可能的額外代價:
耽誤對系統(tǒng)測試、性能測試的準備工作14由開發(fā)實施的話……影響開發(fā)進度?(由測試做更慢)測不出問題?(否,存在完整性問題)解決完整性問題的方法:
覆蓋率檢查
測試部門核查最佳方式:邊開發(fā)邊測試(無需重復理解代碼,測試促進開發(fā))15測試部門的責任能否實施,測試部門是關(guān)鍵推動培訓工具開發(fā)完整性核查16小結(jié)應(yīng)由開發(fā)部門實施解決完整性問題
(覆蓋率檢查)
(測試部門人工檢查)測試部門是關(guān)鍵
(推動、培訓、工具開發(fā)、復核)17難于實施的原因及對策
難于實施的原因?qū)Σ?8也許是這樣……
程序員工作的主題是……解決問題思維周期豈干擾、中斷思維學習與實踐有何不同?對策?19測試行為分解行為特點對策編寫
測試代碼費時長,會中斷、干擾思維自動生成編寫
樁代碼費時長,會中斷、干擾思維,可選盡量避免設(shè)計
測試用例使設(shè)計明確化和細化,可能促進思維。復雜方法費時多,干擾思維使用簡單方法20小結(jié)
對中斷/干擾編程思維的本能抵制?對策1:自動生成測試代碼對策2:避免編寫樁代碼對策3:用簡單方法設(shè)計測試用例簡單高效,即使不對癥,也大有補益21測試工具開發(fā)基本功能測試代碼編寫及生成幾個要點與其他工具比較22測試工具基本功能自動生成測試代碼開發(fā)成本不高應(yīng)用效益顯著
(節(jié)約時間保持思維延續(xù)性)23測試代碼---產(chǎn)品類classCMyClass{
public:
int
Add(inti,intj);
void
Grow(intyears)
CMyClass();
virtual~CMyClass();
private:
int
mAge;
//年齡
CString
mPhase;//年齡階段
};24測試代碼---測試類class
CMyClassTester{
CMyClass*pObj;//被測試類的對象指針
CaseBegin();//用例初始化
CaseEnd();//用例結(jié)束
ClassTest();//執(zhí)行本類中的所有測試函數(shù)
//各個測試函數(shù)加到此后};25測試代碼---測試函數(shù)void
CMyClassTester::Add_int_int(){
//第一個測試用例
{CaseBegin();
//1
inti=0;
//2
intj=0;
//3
intret=pObj->Add(i,j);//4
TestAssert(ret==0);
//5
CaseEnd();}
//6}26生成這樣子的代碼就OK了void
CMyClassTester::Add_int_int(){
//第一個測試用例
{CaseBegin();
//輸入?yún)^(qū)
intret=pObj->Add(i,j);
//輸出區(qū)
CaseEnd();}
}27更進一步……void
CMyClassTester::Add_int_int(){
//第一個測試用例
{CaseBegin();
//1
inti=;
//2
intj=;
//3
intret=pObj->Add(i,j);//4
TestAssert(ret==);
//5
CaseEnd();}
//6}28測試代碼---成員訪問void
CMyClassTester::Grow_int{
{CaseBegin();
intyears=1;
pObj->mAge=8;
pObj->Grow(years);
TestAssert(pObj->mAge==9);
TestAssert(pObj->mPhase=="兒童");
CaseEnd();}
}29工作方式測試工具負責生成測試代碼,接收/處理測試結(jié)果由開發(fā)環(huán)境編譯測試代碼,執(zhí)行測試工程即運行測試測試結(jié)果通過進程間通訊技術(shù)發(fā)送到工具測試代碼相當單純30要點---運行控制voidRunTest()
{
CMyClassTestertester;
tester.Add_int_int();
}通過修改代碼來控制執(zhí)行哪個測試31要點---預(yù)期輸出的判斷
TestAssert(boolresult,
char*file=__FILE__,
intline=__LINE){
if(!result)
SendMsgToTool(file,line);}測試失敗時,發(fā)送文件名和行號給工具32要點---訪問私有成員測試私有函數(shù)讀寫私有成員前/后置操作
友元拷貝33與其他工具的比較
與xUnit比較(效率差異)
與自動測試工具比較(應(yīng)用方式不同)無特征錯誤有特征錯誤人工測試效果自動測試效果34演示免費工具演示35小結(jié)基本功能
(自動生成測試代碼)編寫規(guī)范的測試代碼作為模板,用工具生成之可以參考現(xiàn)有產(chǎn)品36測試用例設(shè)計簡單地設(shè)計測試用例37測試用例基本要素設(shè)定輸入執(zhí)行判斷輸出38有限證明程序正確?已測試的輸入
可以證明正確未測試的輸入
可能含有錯誤假設(shè)用例本身沒有錯誤!39完整性問題????未測試的輸入
往往不知道還有多少……40好的用例好的用例就是完整性高的用例集合每一種可能輸入都有對應(yīng)用例完整地定義了程序的行為在用例所覆蓋的范圍內(nèi),任何修改引入的錯誤都可以發(fā)現(xiàn)(回歸測試)是“每一種輸入”,非“每一個輸入”41什么叫一種輸入?如…char*strtrm(char*pstr);去除字符串兩邊的空格“ABCD”(右邊有空格)“AAAA”(兩邊無空格)NULL(空指針)就是“等價類”42如何編寫健壯的程序?即使不考慮測試……編程時各種輸入都要考慮正常輸入(幾種正常輸入?)邊界輸入(幾種邊界輸入?)非法輸入(幾種非常輸入?)就是“功能點”43功能點等價類只有左邊有空格,返回刪除左邊空格后的結(jié)果左邊有空格只有右邊有空格,返回刪除右邊空格后的結(jié)果右邊有空格兩邊都有空格,返回刪除兩邊空格后的結(jié)果兩邊有空格兩邊都沒有空格,返回原串兩邊無空格空串,直接返回空串空指針,直接返回空指針功能點與等價類對應(yīng)關(guān)系示例44設(shè)計用例的簡單方法用例與功能點具有對應(yīng)關(guān)系程序功能細化、明確化,列成“什么輸入,應(yīng)產(chǎn)生什么輸出”的形式,就是測試用例45輸入輸出是……輸入(讀取的數(shù)據(jù))
參數(shù)成員變量全局變量外部媒體輸出(改寫的數(shù)據(jù))
返回值輸出參數(shù)成員變量全局變量
外部媒體輸入要設(shè)定初始值,輸出要判斷結(jié)果是否符合預(yù)期只考慮真正需讀/寫的數(shù)據(jù)46小結(jié)完整性高的用例集就是好用例程序功能細化、明確化,就是測試用例47開發(fā)測試過程開始編寫實現(xiàn)代碼時才生成測試代碼
(函數(shù)名/參數(shù)等已確定)完善第一個用例將程序功能細化,用拷貝/修改的方式建立其他用例只調(diào)試失敗的測試,使用測試代碼調(diào)試其實并沒有多做什么48提高效果效率的方法如何提高測試效果?如何提高測試效率?49提高測試效果效果就是測試用例完整性如何衡量完整性?
如果保證完整性?50白盒覆蓋找出遺漏用例void
Func(int*p){
if(p){*p=0;}
else{return;}}假如未測試空指針,則else分支未覆蓋理想的覆蓋組合:
100%語句、條件、分支、路徑覆蓋51白盒覆蓋的缺陷void
Func(int*p){*p=0;}特殊輸入通常導致崩潰、異常、超時,正是自動
動態(tài)測試的理想獵物不能發(fā)現(xiàn)“忘記處理某些特殊輸入”形成的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度餐飲連鎖品牌直營店加盟合同
- 事業(yè)單位人員第五輪聘用合同續(xù)簽(2024版)
- 2025年度高品質(zhì)打印業(yè)務(wù)承攬合同模板下載3篇
- 二零二五年房產(chǎn)交易稅費減免預(yù)約買賣合同定金3篇
- 二零二四年度物流服務(wù)與運輸合同
- 2025年外研版選擇性必修3物理下冊月考試卷
- 2025年人教新課標選擇性必修2生物下冊階段測試試卷含答案
- 2025年華東師大版八年級科學下冊階段測試試卷含答案
- 2024版商家業(yè)務(wù)合作合同規(guī)范版B版
- 2025年度跨境電子商務(wù)平臺合同2篇
- 臺區(qū)線損綜合分析臺區(qū)線損分類及計算方法
- 2023年《早》舒淇早期古裝掰全照原創(chuàng)
- 警用無人機考試題庫(全真題庫)
- 預(yù)應(yīng)力簡支梁施工
- GB/T 37046-2018信息安全技術(shù)災(zāi)難恢復服務(wù)能力評估準則
- 機井工程抽水試驗質(zhì)量驗收表
- GA/T 1504-2018互聯(lián)網(wǎng)交通安全綜合服務(wù)管理平臺數(shù)據(jù)接入規(guī)范
- 八年級思想品德中期試卷
- 江西省宜春市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細及行政區(qū)劃代碼
- 氣體滅火系統(tǒng)驗收表1
- 幼兒系列故事繪本課件鴨子當總統(tǒng)-
評論
0/150
提交評論