一、什么是單元測(cè)試?
我先給你分享一個(gè)工廠生產(chǎn)電視機(jī)的例子。
工廠首先會(huì)將各種電子元器件按照?qǐng)D紙組裝在一起構(gòu)成各個(gè)功能電路板,比如供電板、音視頻解碼板、射頻接收板等,然后再將這些電路板組裝起來(lái)構(gòu)成一個(gè)完整的電視機(jī)。
如果一切順利,接通電源后,你就可以開(kāi)始觀看電視節(jié)目了。但是很不幸,大多數(shù)情況下組裝完成的電視機(jī)根本無(wú)法開(kāi)機(jī),這時(shí)你就需要把電視機(jī)拆開(kāi),然后逐個(gè)模塊排查問(wèn)題。
假設(shè)你發(fā)現(xiàn)是供電板的供電電壓不足,那你就要繼續(xù)逐級(jí)排查組成供電板的各個(gè)電子元器件,最終你可能發(fā)現(xiàn)罪魁禍?zhǔn)资且粋€(gè)電容的故障。這時(shí),為了定位到這個(gè)問(wèn)題,你已經(jīng)花費(fèi)了大量的時(shí)間和精力。
那在后續(xù)的生產(chǎn)中,如何才能避免類(lèi)似的問(wèn)題呢?
你可能立即就會(huì)想到,為什么不在組裝前,就先測(cè)試每個(gè)要用到的電子元器件呢?這樣你就可以先排除有問(wèn)題的元器件,最大程度地防止組裝完成后逐級(jí)排查問(wèn)題的事情發(fā)生。
實(shí)踐也證明,這的確是一個(gè)行之有效的好辦法。
如果把電視機(jī)的生產(chǎn)、測(cè)試和軟件的開(kāi)發(fā)、測(cè)試進(jìn)行類(lèi)比,你可以發(fā)現(xiàn):
電子元器件就像是軟件中的單元,通常是函數(shù)或者類(lèi),對(duì)單個(gè)元器件的測(cè)試就像是軟件測(cè)試中的單元測(cè)試;
組裝完成的功能電路板就像是軟件中的模塊,對(duì)電路板的測(cè)試就像是軟件中的集成測(cè)試;
電視機(jī)全部組裝完成就像是軟件完成了預(yù)發(fā)布版本,電視機(jī)全部組裝完成后的開(kāi)機(jī)測(cè)試就像是軟件中的系統(tǒng)測(cè)試。
通過(guò)這個(gè)類(lèi)比,相信你已經(jīng)體會(huì)到了單元測(cè)試對(duì)于軟件整體質(zhì)量的重要性,那么單元測(cè)試到底是什么呢?
單元測(cè)試是指,對(duì)軟件中的最小可測(cè)試單元在與程序其他部分相隔離的情況下進(jìn)行檢查和驗(yàn)證的工作,這里的最小可測(cè)試單元通常是指函數(shù)或者類(lèi)。
單元測(cè)試通常由開(kāi)發(fā)工程師完成,一般會(huì)伴隨開(kāi)發(fā)代碼一起遞交至代碼庫(kù)。單元測(cè)試屬于最嚴(yán)格的軟件測(cè)試手段,是最接近代碼底層實(shí)現(xiàn)的驗(yàn)證手段,可以在軟件開(kāi)發(fā)的早期以最小的成本保證局部代碼的質(zhì)量。
另外,單元測(cè)試都是以自動(dòng)化的方式執(zhí)行,所以在大量回歸測(cè)試的場(chǎng)景下更能帶來(lái)高收益。
同時(shí),你還會(huì)發(fā)現(xiàn),單元測(cè)試的實(shí)施過(guò)程還可以幫助開(kāi)發(fā)工程師改善代碼的設(shè)計(jì)與實(shí)現(xiàn),并能在單元測(cè)試代碼里提供函數(shù)的使用示例,因?yàn)閱卧獪y(cè)試的具體表現(xiàn)形式就是對(duì)函數(shù)以各種不同輸入?yún)?shù)組合進(jìn)行調(diào)用,這些調(diào)用方法構(gòu)成了函數(shù)的使用說(shuō)明。
軟件測(cè)試52講---筆記整理