4.2JUnit框架
單元測(cè)試
編寫單元測(cè)試的目的是為了
提高身為一個(gè)程序員的生產(chǎn)性能。至于讓質(zhì)保部門開心,那只是附帶效果而以。單元測(cè)試是
高度本地化的東西,每個(gè)test class只對(duì)單一package運(yùn)作。它能夠測(cè)試其他packages的接口,除此之外它將假設(shè)其他package一切正常。
功能測(cè)試
用來保證軟件能夠正常運(yùn)作。他們只負(fù)責(zé)向客戶提供質(zhì)量保證,并不關(guān)心程序員的生產(chǎn)力。它們應(yīng)該由一個(gè)喜歡尋找臭蟲的個(gè)別團(tuán)隊(duì)來開發(fā)。這個(gè)團(tuán)隊(duì)?wèi)?yīng)該使用重量級(jí)
工具和技術(shù)來幫助自己開發(fā)良好的功能測(cè)試。
一般而言,功能測(cè)試盡可能把整個(gè)系統(tǒng)當(dāng)作一個(gè)黑箱。面對(duì)一個(gè)GUI待測(cè)系統(tǒng),它們通過GUI來操作那個(gè)系統(tǒng)。而對(duì)文件更新程序或數(shù)據(jù)庫(kù)更新程序,功能測(cè)試只觀察
待定輸入所導(dǎo)致的數(shù)據(jù)變化。
一旦功能測(cè)試者或最終用戶找到軟件中的一個(gè)bug,要除掉它至少需要做兩件事。當(dāng)然你必須修改代碼,才得以排除錯(cuò)誤,但你還應(yīng)該
添加一個(gè)
單元測(cè)試,讓它
揭發(fā)這只臭蟲。
4.3添加更多的測(cè)試
觀察class該做的所有事情,然后針對(duì)任何一項(xiàng)功能的任何一種可能失敗的情況,進(jìn)行測(cè)試。這不同于某些程序員提倡的“測(cè)試所有public函數(shù)”。記住,測(cè)試應(yīng)該是一種
風(fēng)險(xiǎn)驅(qū)動(dòng)行為,測(cè)試的目的是希望找出現(xiàn)在或未來可能出現(xiàn)的錯(cuò)誤。所以我不會(huì)去測(cè)試那些僅僅讀或?qū)懸粋€(gè)值域的訪問函數(shù),因?yàn)樗鼈兲?jiǎn)單了,不大可能出錯(cuò)。這一點(diǎn)很重要,因?yàn)槟闳绻珜戇^多測(cè)試,結(jié)果往往測(cè)試量反而不夠。測(cè)試的要訣是:測(cè)試你最擔(dān)心出錯(cuò)的部分,這樣你就能從測(cè)試工作中得到最大收益。
考慮可能出錯(cuò)的邊界條件,把測(cè)試火力集中在那兒。
尋找邊界條件,也包括尋找特殊的、可能導(dǎo)致測(cè)試失敗的情況。對(duì)于文件相關(guān)測(cè)試,空文件是個(gè)不錯(cuò)的邊界條件。當(dāng)事情被大家認(rèn)為應(yīng)該會(huì)出錯(cuò)時(shí),別忘了檢查彼時(shí)是否有異常如預(yù)期般的被拋出。
不要因?yàn)?#8220;測(cè)試無法捕捉所有臭蟲”,就不撰寫測(cè)試代碼,因?yàn)闇y(cè)試的確可以捕捉大多數(shù)臭蟲。
對(duì)象技術(shù)有個(gè)微妙處:繼承和多態(tài)會(huì)讓測(cè)試變得比較困難,因?yàn)閷⒂性S多組合需要測(cè)試。如果你有三個(gè)彼此合作的abstract class有三個(gè)subclass,那么你總共有九個(gè)可供選擇的classes,和27種組合。我并不總是試著測(cè)試所有可能組合,但我會(huì)盡量測(cè)試
每一個(gè)classes,這可以大大減少各種組合所造成的風(fēng)險(xiǎn)。如果這些classes之間彼此有合理的獨(dú)立性,我很可能不會(huì)嘗試所有組合。是的,我總有可能遺漏些什么,但我覺得“花合理時(shí)間抓出大多數(shù)臭蟲”要好過“窮盡一生抓出所有臭蟲”。
測(cè)試代碼和產(chǎn)品代碼之間有個(gè)區(qū)別:你可以放心的拷貝、編輯測(cè)試代碼。
posted on 2007-08-06 21:50
littlegai 閱讀(283)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
我的讀書筆記