版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第九次廣州軟件測試交流會
1單元測試經(jīng)驗(yàn)分享
王彤Copyright?WWW.GZTEST.NET2007-2-32內(nèi)容介紹從經(jīng)歷談單元測試的意義如何測試?由誰測試?難于實(shí)施的原因及對策測試工具開發(fā)測試用例設(shè)計(jì)提高測試效果效率的方法3從經(jīng)歷談單元測試的意義做與不做,反差強(qiáng)烈保證局部代碼質(zhì)量改良代碼整體結(jié)構(gòu)
回歸測試降低后期測試、維護(hù)升級成本
回歸測試適應(yīng)頻繁變化的需求
使開發(fā)過程可控4如何測試?單元是什么?錯(cuò)誤分類測試方法分類測試方法選擇人工動態(tài)測試簡述5單元是什么?類?(太復(fù)雜)函數(shù)?(簡單實(shí)用)6崩潰異常超時(shí)7測試方法人工根據(jù)語法特征或行為特征判斷錯(cuò)誤,只能發(fā)現(xiàn)有特征錯(cuò)誤自動靜態(tài)動態(tài)(分析代碼)(執(zhí)行代碼)根據(jù)人工定義的程序的行為判斷錯(cuò)誤需測試用例8從簡單示例看方法選擇
int
Add(inta,intb)
{
returna-b;
};
自動方法(無效)人工動態(tài)方法
(輸入兩個(gè)1,判斷輸出是否為2)將+寫成-9人工動態(tài)測試
設(shè)定初始狀態(tài)(輸入)執(zhí)行程序判斷結(jié)果是否正確?(輸出)人工設(shè)定用例的輸入和輸出其他工作可以自動化10小結(jié)以函數(shù)為“單元”分為有特征錯(cuò)誤和無特征錯(cuò)誤,后者占大多數(shù)測試方法有:
人工靜態(tài)人工動態(tài)自動靜態(tài)自動動態(tài)以人工動態(tài)測試為主要方法11由誰測試?開發(fā)還是測試?根據(jù)成本來決定成本對比存在問題及解決辦法12事項(xiàng)邊開發(fā)邊測試由測試部門測試?yán)斫獯a
無需額外費(fèi)時(shí)理解代碼
理解別人寫的代碼難度大,耗時(shí)多可測性問題及時(shí)解決
累積人員要求
無需額外能力需有編程經(jīng)驗(yàn),且三日不寫手生
文檔要求
有無文檔均可
須有詳細(xì)設(shè)計(jì)文檔
溝通自行修正
反復(fù)溝通
促進(jìn)編程
提高編程效率無成本對比13由測試實(shí)施的話……成本,在三倍以上?兩個(gè)條件:
詳細(xì)設(shè)計(jì)文檔
足夠的具有編碼能力的測試員可能的額外代價(jià):
耽誤對系統(tǒng)測試、性能測試的準(zhǔn)備工作14由開發(fā)實(shí)施的話……影響開發(fā)進(jìn)度?(由測試做更慢)測不出問題?(否,存在完整性問題)解決完整性問題的方法:
覆蓋率檢查
測試部門核查最佳方式:邊開發(fā)邊測試(無需重復(fù)理解代碼,測試促進(jìn)開發(fā))15測試部門的責(zé)任能否實(shí)施,測試部門是關(guān)鍵推動培訓(xùn)工具開發(fā)完整性核查16小結(jié)應(yīng)由開發(fā)部門實(shí)施解決完整性問題
(覆蓋率檢查)
(測試部門人工檢查)測試部門是關(guān)鍵
(推動、培訓(xùn)、工具開發(fā)、復(fù)核)17難于實(shí)施的原因及對策
難于實(shí)施的原因?qū)Σ?8也許是這樣……
程序員工作的主題是……解決問題思維周期豈干擾、中斷思維學(xué)習(xí)與實(shí)踐有何不同?對策?19測試行為分解行為特點(diǎn)對策編寫
測試代碼費(fèi)時(shí)長,會中斷、干擾思維自動生成編寫
樁代碼費(fèi)時(shí)長,會中斷、干擾思維,可選盡量避免設(shè)計(jì)
測試用例使設(shè)計(jì)明確化和細(xì)化,可能促進(jìn)思維。復(fù)雜方法費(fèi)時(shí)多,干擾思維使用簡單方法20小結(jié)
對中斷/干擾編程思維的本能抵制?對策1:自動生成測試代碼對策2:避免編寫樁代碼對策3:用簡單方法設(shè)計(jì)測試用例簡單高效,即使不對癥,也大有補(bǔ)益21測試工具開發(fā)基本功能測試代碼編寫及生成幾個(gè)要點(diǎn)與其他工具比較22測試工具基本功能自動生成測試代碼開發(fā)成本不高應(yīng)用效益顯著
(節(jié)約時(shí)間保持思維延續(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ù)
//各個(gè)測試函數(shù)加到此后};25測試代碼---測試函數(shù)void
CMyClassTester::Add_int_int(){
//第一個(gè)測試用例
{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(){
//第一個(gè)測試用例
{CaseBegin();
//輸入?yún)^(qū)
intret=pObj->Add(i,j);
//輸出區(qū)
CaseEnd();}
}27更進(jìn)一步……void
CMyClassTester::Add_int_int(){
//第一個(gè)測試用例
{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工作方式測試工具負(fù)責(zé)生成測試代碼,接收/處理測試結(jié)果由開發(fā)環(huán)境編譯測試代碼,執(zhí)行測試工程即運(yùn)行測試測試結(jié)果通過進(jìn)程間通訊技術(shù)發(fā)送到工具測試代碼相當(dāng)單純30要點(diǎn)---運(yùn)行控制voidRunTest()
{
CMyClassTestertester;
tester.Add_int_int();
}通過修改代碼來控制執(zhí)行哪個(gè)測試31要點(diǎn)---預(yù)期輸出的判斷
TestAssert(boolresult,
char*file=__FILE__,
intline=__LINE){
if(!result)
SendMsgToTool(file,line);}測試失敗時(shí),發(fā)送文件名和行號給工具32要點(diǎn)---訪問私有成員測試私有函數(shù)讀寫私有成員前/后置操作
友元拷貝33與其他工具的比較
與xUnit比較(效率差異)
與自動測試工具比較(應(yīng)用方式不同)無特征錯(cuò)誤有特征錯(cuò)誤人工測試效果自動測試效果34演示免費(fèi)工具演示35小結(jié)基本功能
(自動生成測試代碼)編寫規(guī)范的測試代碼作為模板,用工具生成之可以參考現(xiàn)有產(chǎn)品36測試用例設(shè)計(jì)簡單地設(shè)計(jì)測試用例37測試用例基本要素設(shè)定輸入執(zhí)行判斷輸出38有限證明程序正確?已測試的輸入
可以證明正確未測試的輸入
可能含有錯(cuò)誤假設(shè)用例本身沒有錯(cuò)誤!39完整性問題????未測試的輸入
往往不知道還有多少……40好的用例好的用例就是完整性高的用例集合每一種可能輸入都有對應(yīng)用例完整地定義了程序的行為在用例所覆蓋的范圍內(nèi),任何修改引入的錯(cuò)誤都可以發(fā)現(xiàn)(回歸測試)是“每一種輸入”,非“每一個(gè)輸入”41什么叫一種輸入?如…char*strtrm(char*pstr);去除字符串兩邊的空格“ABCD”(右邊有空格)“AAAA”(兩邊無空格)NULL(空指針)就是“等價(jià)類”42如何編寫健壯的程序?即使不考慮測試……編程時(shí)各種輸入都要考慮正常輸入(幾種正常輸入?)邊界輸入(幾種邊界輸入?)非法輸入(幾種非常輸入?)就是“功能點(diǎn)”43功能點(diǎn)等價(jià)類只有左邊有空格,返回刪除左邊空格后的結(jié)果左邊有空格只有右邊有空格,返回刪除右邊空格后的結(jié)果右邊有空格兩邊都有空格,返回刪除兩邊空格后的結(jié)果兩邊有空格兩邊都沒有空格,返回原串兩邊無空格空串,直接返回空串空指針,直接返回空指針功能點(diǎn)與等價(jià)類對應(yīng)關(guān)系示例44設(shè)計(jì)用例的簡單方法用例與功能點(diǎn)具有對應(yīng)關(guān)系程序功能細(xì)化、明確化,列成“什么輸入,應(yīng)產(chǎn)生什么輸出”的形式,就是測試用例45輸入輸出是……輸入(讀取的數(shù)據(jù))
參數(shù)成員變量全局變量外部媒體輸出(改寫的數(shù)據(jù))
返回值輸出參數(shù)成員變量全局變量
外部媒體輸入要設(shè)定初始值,輸出要判斷結(jié)果是否符合預(yù)期只考慮真正需讀/寫的數(shù)據(jù)46小結(jié)完整性高的用例集就是好用例程序功能細(xì)化、明確化,就是測試用例47開發(fā)測試過程開始編寫實(shí)現(xiàn)代碼時(shí)才生成測試代碼
(函數(shù)名/參數(shù)等已確定)完善第一個(gè)用例將程序功能細(xì)化,用拷貝/修改的方式建立其他用例只調(diào)試失敗的測試,使用測試代碼調(diào)試其實(shí)并沒有多做什么48提高效果效率的方法如何提高測試效果?如何提高測試效率?49提高測試效果效果就是測試用例完整性如何衡量完整性?
如果保證完整性?50白盒覆蓋找出遺漏用例void
Func(int*p){
if(p){*p=0;}
else{return;}}假如未測試空指針,則else分支未覆蓋理想的覆蓋組合:
100%語句、條件、分支、路徑覆蓋51白盒覆蓋的缺陷void
Func(int*p){*p=0;}特殊輸入通常導(dǎo)致崩潰、異常、超時(shí),正是自動
動態(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能交通系統(tǒng)建設(shè)合同4篇
- 2025年度產(chǎn)品上樣研發(fā)創(chuàng)新合作框架協(xié)議4篇
- 二零二四年專業(yè)調(diào)解離婚財(cái)產(chǎn)分配協(xié)議3篇
- 2025年度廠房租賃合同補(bǔ)充協(xié)議(含租賃物保險(xiǎn)及理賠)4篇
- 2025年度柴油產(chǎn)品售后服務(wù)協(xié)議3篇
- 女性職工知識培訓(xùn)課件
- 2024藝術(shù)品經(jīng)營公司與藝術(shù)家前期藝術(shù)品交易合同
- 不動產(chǎn)企業(yè)股權(quán)轉(zhuǎn)讓標(biāo)準(zhǔn)協(xié)議版B版
- 專業(yè)辦公設(shè)備配送及維護(hù)服務(wù)協(xié)議版A版
- 2024藥品、醫(yī)療器械質(zhì)量保證協(xié)議書
- 醫(yī)養(yǎng)康養(yǎng)園項(xiàng)目商業(yè)計(jì)劃書
- 《穿越迷宮》課件
- 《C語言從入門到精通》培訓(xùn)教程課件
- 2023年中國半導(dǎo)體行業(yè)薪酬及股權(quán)激勵(lì)白皮書
- 2024年Minitab全面培訓(xùn)教程
- 社區(qū)電動車棚新(擴(kuò))建及修建充電車棚施工方案(純方案-)
- 項(xiàng)目推進(jìn)與成果交付情況總結(jié)與評估
- 鐵路項(xiàng)目征地拆遷工作體會課件
- 醫(yī)院死亡報(bào)告年終分析報(bào)告
- 建設(shè)用地報(bào)批服務(wù)投標(biāo)方案(技術(shù)方案)
- 工會工作人年度考核個(gè)人總結(jié)
評論
0/150
提交評論