軟件單元測(cè)試?yán)碚撝R(shí)問(wèn)答
為什么需要單元測(cè)試?
徹底測(cè)試:僅依靠系統(tǒng)測(cè)試會(huì)存在大量未覆蓋的“死角”,單元測(cè)試可以實(shí)現(xiàn)代碼級(jí)徹底測(cè)試,從根本上保證代碼質(zhì)量。
成本最低:排錯(cuò)成本隨時(shí)間推移和范圍擴(kuò)大直線(xiàn)上升,單元測(cè)試是最早階段的測(cè)試,且目標(biāo)最小,因此,排錯(cuò)成本最低。
自動(dòng)回歸:?jiǎn)卧獪y(cè)試將代碼功能“定格”,代碼修改后自動(dòng)檢查是否引入新的錯(cuò)誤,避免陷入“系統(tǒng)測(cè)試->修改->引入新的錯(cuò)誤->新一輪系統(tǒng)測(cè)試->修改->引入新的錯(cuò)誤”的怪圈。自動(dòng)回歸也使開(kāi)發(fā)過(guò)程適應(yīng)頻繁變更的需求,使開(kāi)發(fā)過(guò)程自動(dòng)“敏捷”。
促進(jìn)開(kāi)發(fā):利用單元測(cè)試還可以實(shí)現(xiàn)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)和可視編程?梢暰幊淌归_(kāi)發(fā)過(guò)程中程序行為可視,大幅提升開(kāi)發(fā)效率、降低勞動(dòng)強(qiáng)度。
什么是單元測(cè)試?
單元測(cè)試是針對(duì)代碼單元的獨(dú)立測(cè)試。從實(shí)用角度出發(fā),“單元”是指函數(shù),以類(lèi)為單元?jiǎng)t過(guò)于復(fù)雜。“獨(dú)立”是指將代碼從原始項(xiàng)目中隔離出來(lái),針對(duì)各個(gè)單元單獨(dú)進(jìn)行測(cè)試。
單元測(cè)試的基本方法是?
根據(jù)程序功能設(shè)定輸入、執(zhí)行測(cè)試、自動(dòng)判斷輸出是否符合預(yù)期。測(cè)試過(guò)程需要以下關(guān)鍵元素:驅(qū)動(dòng)(用于執(zhí)行測(cè)試的代碼)、用例(輸入及預(yù)期輸出)、樁(用于隔離耦合代碼、或代替未實(shí)現(xiàn)代碼)。
企業(yè)項(xiàng)目的單元測(cè)試面臨哪些難點(diǎn)?
測(cè)試簡(jiǎn)單獨(dú)立的代碼是很容易的,測(cè)試復(fù)雜項(xiàng)目則是另一回事。企業(yè)項(xiàng)目的單元測(cè)試面臨以下難點(diǎn):可測(cè)性問(wèn)題、失真、不可控、靜態(tài)局部變量的外部控制、內(nèi)部輸出的自動(dòng)判斷、復(fù)雜間接輸入難于初始化、白盒覆蓋逾后逾難等等。不解決這些難題。測(cè)試將無(wú)法進(jìn)行,后面的`條目將進(jìn)一步闡述。
單元測(cè)試的具體目標(biāo)是?
單元測(cè)試是針對(duì)代碼單元的獨(dú)立測(cè)試,“獨(dú)立”狀態(tài)下易于發(fā)現(xiàn)的錯(cuò)誤,都是單元測(cè)試的目標(biāo);集成后才易于發(fā)現(xiàn)的問(wèn)題,則不是單元測(cè)試的目標(biāo)。
代碼單元本身的功能錯(cuò)誤都是單元測(cè)試的目標(biāo),而性能問(wèn)題(時(shí)間性能如執(zhí)行速度,空間性能如存儲(chǔ)空間大小、內(nèi)存泄漏)難于在最小單元內(nèi)測(cè)試,不是單元測(cè)試目標(biāo)。
編碼規(guī)范檢查與單元測(cè)試無(wú)關(guān),無(wú)論是否實(shí)施單元測(cè)試,編碼規(guī)范檢查都是必不可少的工作。
靜態(tài)分析屬于全局掃描,嚴(yán)格來(lái)說(shuō)也不是單元測(cè)試,提高編譯器的警告級(jí)別,就是最簡(jiǎn)單高效的靜態(tài)分析。
單元測(cè)試是意義重大且困難的工作,目標(biāo)應(yīng)該具體而明確,將不屬于單元測(cè)試的工作牽扯進(jìn)來(lái),其結(jié)果往往是“揀了芝麻,丟了西瓜”。
選擇工具時(shí)不要被“功能多多”所迷惑,要首先檢查工具能否解決企業(yè)項(xiàng)目單元測(cè)試的難點(diǎn),并用實(shí)際項(xiàng)目評(píng)估。“多”和“精”從來(lái)就是一對(duì)矛盾,要判斷工具是不是因?yàn)闊o(wú)法解決單元測(cè)試的難題,故意把其他東西牽扯進(jìn)來(lái)轉(zhuǎn)移視線(xiàn)。
什么是測(cè)試用例?
測(cè)試用例就是程序功能的實(shí)例,對(duì)于單元測(cè)試來(lái)說(shuō),把函數(shù)功能明確化、實(shí)例化,用什么輸入應(yīng)該產(chǎn)生什么輸出的形式記錄下來(lái),就是測(cè)試用例。
如何設(shè)計(jì)用例?
根據(jù)功能點(diǎn)設(shè)定輸入,再根據(jù)設(shè)計(jì)功能設(shè)定預(yù)期的正確輸出,這樣就構(gòu)成了一個(gè)測(cè)試用例。
通常,一個(gè)功能點(diǎn)對(duì)應(yīng)一個(gè)等價(jià)類(lèi),“等價(jià)”是指測(cè)試效果上的等價(jià),等價(jià)類(lèi)中可能存在一個(gè)、多個(gè)或無(wú)數(shù)個(gè)值,取其中任何一個(gè),如果測(cè)試通過(guò),就表示同類(lèi)中所有值都會(huì)測(cè)試通過(guò)。
所謂“徹底測(cè)試”,是指等價(jià)類(lèi)劃分正確且完整,且設(shè)定了正確的預(yù)期輸出,做到了這一點(diǎn),代碼可以保證不存在功能錯(cuò)誤。
什么是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)?
首先編寫(xiě)測(cè)試代碼,然后編寫(xiě)產(chǎn)品代碼,使編譯和測(cè)試通過(guò)。
優(yōu)點(diǎn):編寫(xiě)測(cè)試代碼是一種設(shè)計(jì)行為,將程序功能細(xì)化、明確化;編程時(shí)目標(biāo)具體而明確,避免多余動(dòng)作;強(qiáng)制實(shí)施單元測(cè)試,避免編碼后忽略測(cè)試。
缺點(diǎn):手工編寫(xiě)測(cè)試代碼,比較費(fèi)時(shí);過(guò)于強(qiáng)調(diào)測(cè)試,很多代碼是不需測(cè)試的,且往往在編寫(xiě)實(shí)現(xiàn)時(shí)才知道是否有必要測(cè)試;對(duì)編程過(guò)程的幫助不足,很多函數(shù),都是在代碼基本完成時(shí),主要用例才能通過(guò),在此過(guò)程中,TDD不能提供幫助;改變思維習(xí)慣,有些程序員難于接受。
http://fnhaliao.com/【軟件單元測(cè)試?yán)碚撝R(shí)問(wèn)答】相關(guān)文章:
職場(chǎng)問(wèn)答02-07
塑膠理論知識(shí)測(cè)試02-12
面試經(jīng)典問(wèn)答(雙語(yǔ))08-14
地震的知識(shí)問(wèn)答02-28
管理問(wèn)答三則07-16