|
一個(gè)產(chǎn)品只有通過(guò)檢驗(yàn)才能投放市場(chǎng),同樣的,一個(gè)業(yè)務(wù)類也只有在經(jīng)驗(yàn)測(cè)試后才能保證功能的正確性,以便被其他類或程序調(diào)用,否則隱藏其中的Bug就蔓延開(kāi)了。業(yè)務(wù)功能點(diǎn)測(cè)試是測(cè)試人員的職責(zé),但業(yè)務(wù)類API的正確性必須由開(kāi)發(fā)人員保證。
回憶一下最近你所開(kāi)發(fā)的系統(tǒng),往往一個(gè)最難忘的情節(jié)是通宵達(dá)旦地毯式搜索某個(gè)刁專的Bug,歷盡千辛萬(wàn)苦,最終找到并解決了它。查找一個(gè)隱藏的Bug往往是踏破鐵蹄無(wú)覓處,而找到后卻是:解決全不費(fèi)功夫。
造成這尷尬窘局有以下幾點(diǎn)原因:
其一是使用增量式測(cè)試策略,即先編寫(xiě)功能代碼,在模塊開(kāi)發(fā)完畢后才回過(guò)頭來(lái)編寫(xiě)測(cè)試用例,因?yàn)橐粋€(gè)功能模塊可能包含許多相互關(guān)聯(lián)的類,形成了層層調(diào)用,交錯(cuò)復(fù)雜的調(diào)用網(wǎng)絡(luò),一旦發(fā)現(xiàn)了Bug,只得查戶口似的逐一排查,其艱辛程度可想而知。
其二是使用不正確的測(cè)試方法,如在每個(gè)類中提供一個(gè)main()測(cè)試函數(shù),對(duì)類中的功能方法進(jìn)行測(cè)試,通過(guò)運(yùn)行類的main()方法查看類功能的正確性。在某種程序上,這或許是一個(gè)值得贊揚(yáng)的工作習(xí)慣,但工作方式卻不足取。因?yàn)槊總€(gè)類都必須單獨(dú)運(yùn)行,以執(zhí)行其測(cè)試功能,并由開(kāi)發(fā)人員觀察測(cè)試的正確性。隨著程序規(guī)模的擴(kuò)大,類數(shù)目直線上升,原有的類也會(huì)發(fā)生代碼的調(diào)整,一些功能點(diǎn)可能就變成了漏網(wǎng)之魚(yú),變成了茫茫"類"海里的黑戶口,將來(lái)"違法亂紀(jì)"起來(lái)就很難監(jiān)控了。
針對(duì)這些傳統(tǒng)測(cè)試思想的不足,測(cè)試先行、頻繁測(cè)試、自動(dòng)測(cè)試的測(cè)試思想被越來(lái)越多的開(kāi)發(fā)人員所接受并付諸實(shí)踐。
測(cè)試先行乍聽(tīng)起來(lái)有點(diǎn)讓人不可思議,一件東西還沒(méi)有做出來(lái)就想著怎么去測(cè)試它?仔細(xì)分析,這并不荒唐,因?yàn)檫@讓你在設(shè)計(jì)類時(shí),站在調(diào)用者的角度去理解類的對(duì)外接口,迫使你深入理解類的外在關(guān)系,考慮接口的用途,而在具體編寫(xiě)程序時(shí)才去具體考慮內(nèi)部實(shí)現(xiàn)細(xì)節(jié),這樣設(shè)計(jì)出接口將更易使用,結(jié)構(gòu)也會(huì)更趨合理。
頻繁測(cè)試,即指測(cè)試不應(yīng)當(dāng)是階段性的工作,而應(yīng)當(dāng)在程序編寫(xiě)過(guò)程中不斷進(jìn)行。因?yàn)橄到y(tǒng)中的類之間往往都存在較多的關(guān)聯(lián)關(guān)系,當(dāng)更改了類的功能時(shí),往往會(huì)有多個(gè)類受到直接或間接的影響。所以你應(yīng)該頻繁測(cè)試以及早發(fā)現(xiàn)這種因功能、調(diào)整而引起的Bug,越早發(fā)現(xiàn)錯(cuò)誤解決它的代價(jià)越小。頻繁測(cè)試也是XP編程的一個(gè)重要環(huán)節(jié),XP編程總讓人覺(jué)得他們注重功能實(shí)現(xiàn)而忽視測(cè)試,其實(shí)他們也非常關(guān)注測(cè)試,畢竟測(cè)試可以使他們盡可能快的穩(wěn)步前進(jìn)。
所謂自動(dòng)測(cè)試并不是說(shuō)有一個(gè)工具可以讓你像安檢器一樣,自動(dòng)測(cè)試出你類中的問(wèn)題。而是指應(yīng)用一定的測(cè)試框架,為每個(gè)業(yè)務(wù)類編寫(xiě)?yīng)毩⒌臏y(cè)試用例,類代碼調(diào)整后,對(duì)應(yīng)的測(cè)試用例同步調(diào)整。多個(gè)測(cè)試用例組成一個(gè)測(cè)試套件一起批量運(yùn)行,它們就像一個(gè)強(qiáng)大的Bug嗅探器,一旦發(fā)現(xiàn)Bug就會(huì)輸出特定的信息報(bào)告錯(cuò)誤,只要一個(gè)測(cè)試用例沒(méi)有通過(guò)測(cè)試就說(shuō)明程序中有問(wèn)題。測(cè)試用例中所包含的測(cè)試規(guī)則完成由你定制,這個(gè)測(cè)試套件對(duì)Bug嗅探的"靈敏度"完全取決于測(cè)試用例的測(cè)試規(guī)則,框架提供編寫(xiě)和運(yùn)行測(cè)試用例的規(guī)范性方法。
在編寫(xiě)一個(gè)業(yè)務(wù)類時(shí),需要相應(yīng)編寫(xiě)對(duì)應(yīng)的測(cè)試用例,一開(kāi)始挺招"慣性定律"抵觸的,因?yàn)樗竽銓?chuàng)建一個(gè)測(cè)試用例類,似乎需要更多的工作。但你的付出是會(huì)得到加倍回報(bào)的,隨著軟件類規(guī)模的增大你會(huì)發(fā)現(xiàn),當(dāng)傳統(tǒng)測(cè)試方法越來(lái)越捉襟見(jiàn)肘,窮于應(yīng)付時(shí),基于測(cè)試框架的測(cè)試技術(shù)依然"談笑自如"。當(dāng)然別人這么說(shuō),我們也不應(yīng)當(dāng)馬上就深信不疑,疑惑永遠(yuǎn)是值得推崇的科學(xué)精神,我們應(yīng)該通過(guò)自己的實(shí)踐卻真真切切地體會(huì)這種改進(jìn)所帶來(lái)的快樂(lè)。
jsp技術(shù):JBuilder 2005單元測(cè)試之慨述,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。