For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認真做教育 專心促就業(yè)
單元測試由一組獨立的測試構(gòu)成,每個測試針對軟件中的一個單獨的程序單元。如果對單元測試的內(nèi)容不清楚的同學(xué),可以參考這篇文章,詳細講解單元測試的內(nèi)容。
對于單元測試,人們往往存在很多的誤解:
1)浪費的時間太多
一旦編碼完成,缺乏軟件工程實踐經(jīng)驗的開發(fā)人員就會迫不及待地進行軟件集成工作,這樣就能看到實際系統(tǒng)開始啟動工作,在這種開發(fā)步驟中,真正意義上的進步被表面上的進步所取代。系統(tǒng)能進行正常工作的可能性很小,更多的情況是充滿了各式各樣的Bug。這些Bug包含在獨立的單元里,其本身也許是瑣碎、微不足道的,但在軟件集成為一個系統(tǒng)時會增加額外的工期和費用。
其實進行完整的單元測試和編寫代碼所花費的精力大致上是相同的,一旦完成了單元測試,在確保手頭擁有穩(wěn)定可靠部件的情況下,再進行高效的軟件集成才是真正意義上的進步。
程序的可靠性對軟件產(chǎn)品的質(zhì)量有很大的影響,在大型軟件公司,每寫一行程序,都可能要測試很多遍。由此可見大型軟件公司對測試的重視程度。
2)軟件開發(fā)人員不應(yīng)參與單元測試
單元測試常常和編碼同步進行,每完成一個模塊就應(yīng)進行單元測試。在對每個模塊進行單元測試時,不能忽略和其他模塊的關(guān)系,為模擬這一關(guān)系,需要輔助模塊,因此若單獨的測試人員進行單元測試,往往工作量大,周期長,耗費巨大,其結(jié)果事倍功半。軟件的開發(fā)者總是應(yīng)當負責(zé)程序的單個單元的測試,保證每個單元能夠完成設(shè)計的功能,其實在很多情況下,開發(fā)者也應(yīng)進行集成測試。
3)我是很棒的程序員,不需要進行單元測試
如果我們真正擅長編程并且有絕招,就應(yīng)當不會有錯誤,但這只是一個神話。編碼不是可以一次性通過的,必須經(jīng)過各種各樣的測試,單元測試只是其中一種。缺乏測試的程序代碼可能包含許多Bug,程序員在沒有測試保護的情況下修改Bug,會引發(fā)更多的Bug,忙于除蟲,于是更沒有時間測試。如此循環(huán)往往會導(dǎo)致項目的崩潰。為避免產(chǎn)生惡性循環(huán),代碼必須有一張安全網(wǎng)來保護,隨時進行的單元測試就是這張安全網(wǎng)。
4)不管怎樣,集成測試將會抓住所有的Bug
集成測試的目標是把通過單元測試的模塊拿來,構(gòu)造一個在設(shè)計中所描述的程序結(jié)構(gòu),通過測試發(fā)現(xiàn)和接口有關(guān)的問題。我們在測試工作開展的過程中,發(fā)現(xiàn)并提交進行合格性測試的軟件,在測試過程中有很多Bug,有些嚴重問題,甚至導(dǎo)致死機,以至于不能再測試其他功能,進行錯誤修改,回歸測試時又發(fā)現(xiàn)其他新的問題,使得測試工作很難開展下去。
5)單元測試效率不高
在實際工作中,開發(fā)人員不想進行單元測試,認為沒有必要且效率不高,其實錯誤發(fā)生和被發(fā)現(xiàn)之間的時間與發(fā)現(xiàn)和改正該錯誤的成本是指數(shù)關(guān)系,頻繁的單元測試能使開發(fā)人員排錯的范圍縮得很小,大大節(jié)約排錯所需的時間,同時錯誤盡可能早地被發(fā)現(xiàn)和消滅會減少由于錯誤而引起的連鎖反應(yīng)。
在某一功能點上進行準備測試、執(zhí)行測試和修改缺陷的時間,單元測試的效率大約是集成測試的兩倍、系統(tǒng)測試的三倍。
通過對這些誤解的分析,可以對單元測試有進一步的了解,其實作為軟件系統(tǒng)的最小組成單位,單元測試具有以下屬性:
它是由一個程序員完成的。
它有一個詳細的設(shè)計說明,包括輸入定義、輸出定義和加工說明。
它是一個可識別的看得見的程序組成部分,并容易被組合成程序。
能被單獨地匯編和測試。
它的規(guī)模比較小,邏輯比較簡單。
因此單元測試具有以下意義:
1)單元測試集中注意力于程序的基本組成部分,首先保證每個單元測試通過,才能使下一步把單元組裝成部件并測試其正確性具有基礎(chǔ)。單元是整個軟件的構(gòu)成基礎(chǔ),像硬件系統(tǒng)中的零部件一樣,只有保證零部件的質(zhì)量,這個設(shè)備的質(zhì)量才有基礎(chǔ),單元的質(zhì)量也是整個軟件質(zhì)量的基礎(chǔ)。因此,單元測試的效果會直接影響軟件的后期測試,最終在很大程度上影響到產(chǎn)品的質(zhì)量。
2)單元測試可以平行開展,這樣可以使多人同時測試多個單元,提高了測試的效率。
3)單元規(guī)模較小,復(fù)雜性較低,因而發(fā)現(xiàn)錯誤后容易隔離和定位,有利于調(diào)試工作。
4)單元的規(guī)模和復(fù)雜性特點,使單元測試中可以使用包括白盒測試的覆蓋分析在內(nèi)的許多測試技術(shù),能夠進行比較充分細致的測試,是整個程序測試滿足語句覆蓋和分支覆蓋要求的基礎(chǔ)。
5)單元測試的測試效果是最顯而易見的。做好單元測試,不僅后期的系統(tǒng)集成聯(lián)調(diào)或集成測試和系統(tǒng)測試會很順利,節(jié)約很多時間;而且在單元測試過程中能發(fā)現(xiàn)一些很深層次的問題,同時還會發(fā)現(xiàn)一些很容易發(fā)現(xiàn)而在集成測試和系統(tǒng)測試很難發(fā)現(xiàn)的問題;更重要的是單元測試不僅僅是證明這些代碼做了什么,是如何做的,而且證明是否做了它該做的事情而沒有做不該做的事情。
6)單元測試的好與壞不僅直接關(guān)系到測試成本(因為如果單元測試中易發(fā)現(xiàn)的問題拖到后期測試發(fā)現(xiàn),那么其成本將成倍數(shù)上升),而且也會直接影響到產(chǎn)品質(zhì)量,因為可能就是由于代碼中的某一個小錯誤就導(dǎo)致了整個產(chǎn)品的質(zhì)量降低一個指標,或者導(dǎo)致更嚴重的后果。
事實上,單元測試是一種驗證行為—— 測試和驗證程序中每一項功能的正確性,為以后的開發(fā)提供支持;單元測試是一種設(shè)計行為—— 編寫單元測試將使我們從調(diào)用者觀察、思考,特別是要先考慮測試,這樣就可把程序設(shè)計成易于調(diào)用和可測試的,并努力降低軟件中的耦合,還可以使編碼人員在編碼時產(chǎn)生預(yù)測試,將程序的缺陷降低到最小;單元測試是一種編寫文檔的行為—— 是展示函數(shù)或類如何使用的最佳文檔;單元測試具有回歸性—— 自動化的單元測試有助于進行回歸測試。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與聯(lián)系我們,我們會予以更改或刪除相關(guān)文章,以保證您的權(quán)益!