當(dāng)前在復(fù)雜的國(guó)際國(guó)內(nèi)環(huán)境下,我國(guó)正在加大工業(yè)投資,爭(zhēng)取實(shí)現(xiàn)彎道超車。雖然不差錢,但是許多公司為了效益,不愿在不能直觀體現(xiàn)效率的基礎(chǔ)環(huán)節(jié)單元測(cè)試上花費(fèi)時(shí)間,不愿投資一點(diǎn)資金到單元測(cè)試工具上。這就導(dǎo)致了一些很小的錯(cuò)誤不能在早期被發(fā)現(xiàn),直到應(yīng)用階段才被發(fā)現(xiàn)。這時(shí)再查找錯(cuò)誤時(shí),勢(shì)必花費(fèi)多得多的人力財(cái)力,這時(shí)才發(fā)現(xiàn)早期省的小錢是得不償失的。
要想變成日本德國(guó)類的工業(yè)強(qiáng)國(guó),必須注重基礎(chǔ)環(huán)節(jié)的精細(xì)化,而不是靠某人的高能力。早期開發(fā)階段必須做單元測(cè)試,發(fā)現(xiàn)錯(cuò)誤即時(shí)修改,經(jīng)過多次迭代,才可以杜絕小問題,從而避免后期大問題的出現(xiàn),這樣才可以做出精品。winAMS是一套針對(duì)C/C++的,取得汽車功能安全標(biāo)準(zhǔn)ISO26262認(rèn)證,集合靜態(tài)分析、單元測(cè)試、集合測(cè)試于一體的工具集。winAMS對(duì)于驗(yàn)證高安全和業(yè)務(wù)關(guān)鍵的嵌入式系統(tǒng)來說是非常必要的。
winAMS既可用于新開發(fā)的程序,也適用于原有應(yīng)用程序的測(cè)試,一般企業(yè)也能從中體會(huì)C/C++單元測(cè)試的好處,幫助開發(fā)者精簡(jiǎn)測(cè)試流程,使測(cè)試可自動(dòng)重復(fù)進(jìn)行。將測(cè)試從手動(dòng)的過程,提升為嚴(yán)謹(jǐn)?shù)墓こ獭W詣?dòng)建立框架來分離新開發(fā)的代碼,從而降低成本。
一般而言, 單元和集成測(cè)試是在開發(fā)人員建立好代碼之后進(jìn)行的。獨(dú)立的軟件組件創(chuàng)建好之后,就會(huì)生成測(cè)試代碼取代被測(cè)單元的外部依賴。這部分測(cè)試代碼,被稱為測(cè)試套件。該測(cè)試套件包含用來調(diào)用被測(cè)對(duì)象的測(cè)試驅(qū)動(dòng)、用于取代外部依賴的樁函數(shù)等。winAMS自動(dòng)建立測(cè)試驅(qū)動(dòng)和樁函數(shù),因此,開發(fā)人員可以更專注于建立高質(zhì)量的代碼和完整的測(cè)試用例。
winAMS是基于目標(biāo)文件,在自帶各種芯片仿真器上進(jìn)行單元測(cè)試。通過仿真器,你可以清楚看到真實(shí)的程序是如何運(yùn)行的,理解各種寄存器的調(diào)用,清楚內(nèi)存的分配。
自動(dòng)化軟件單元測(cè)試最重要的一個(gè)好處就是能夠在源碼變更之后進(jìn)行回歸測(cè)試,確保源碼變更后不會(huì)引入新的錯(cuò)誤。測(cè)試用例生成之后,以文本形式保存,很方便地保存在工具目錄中。winAMS可以同時(shí)選擇所有用例,在空閑時(shí)間自動(dòng)執(zhí)行,生成測(cè)試報(bào)告,方便查看當(dāng)天有沒有引入新錯(cuò)誤。在開發(fā)生命周期里,盡早找到問題,將大幅減少后期的調(diào)試時(shí)間,從而提高代碼質(zhì)量并降低成本。
總而言之,單元測(cè)試將讓我們的開發(fā)工作變得更加輕松,讓我們對(duì)自己的代碼更加自信。無論是項(xiàng)目的規(guī)模大小,無論是時(shí)間緊迫的項(xiàng)目還是時(shí)間寬裕的項(xiàng)目,只要代碼不是一次寫完永不改動(dòng),編寫單元測(cè)試就一定超值。我希望它能成為公司編碼過程中不可缺少的一部分。
單元測(cè)試僅僅是軟件質(zhì)量保證的一個(gè)環(huán)節(jié),軟件的質(zhì)量由組織、流程和技術(shù)三個(gè)維度來決定,任何一個(gè)維度都不能單獨(dú)決定軟件的質(zhì)量。好的組織結(jié)構(gòu)可以保證流程的順利實(shí)施,好的流程能提高軟件開發(fā)的規(guī)范性和可控性,從而提高軟件開發(fā)的效率和質(zhì)量,而采用了好的技術(shù)和有好的技術(shù)的載體--人,則從根本上 保證了軟件的質(zhì)量。
因此單元測(cè)試具有以下意義:
1.單元測(cè)試集中注意力于程序的基本組成部分,首先保證每個(gè)單元測(cè)試通過,才能使下一步把單元組裝成部件并測(cè)試其正確性具有基礎(chǔ)。單元是整個(gè)軟件的構(gòu)成基礎(chǔ),像硬件系統(tǒng)中的零部件一樣,只有保證零部件的質(zhì)量,這個(gè)設(shè)備的質(zhì)量才有基礎(chǔ),單元的質(zhì)量也是整個(gè)軟件質(zhì)量的基礎(chǔ)。因此,單元測(cè)試的效果會(huì)直接影響軟件的后期測(cè)試,最終在很大程度上影響到產(chǎn)品的質(zhì)量。
2.單元測(cè)試可以平行開展,這樣可以使多人同時(shí)測(cè)試多個(gè)單元,提高了測(cè)試的效率。
3.單元規(guī)模較小,復(fù)雜性較低,因而發(fā)現(xiàn)錯(cuò)誤后容易隔離和定位,有利于調(diào)試工作。
4.單元的規(guī)模和復(fù)雜性特點(diǎn),使單元測(cè)試中可以使用包括白盒測(cè)試的覆蓋分析在內(nèi)的許多測(cè)試技術(shù),能夠進(jìn)行比較充分細(xì)致的測(cè)試,是整個(gè)程序測(cè)試滿足語(yǔ)句覆蓋和分支覆蓋要求的基礎(chǔ)。
5.單元測(cè)試的測(cè)試效果是最顯而易見的。做好單元測(cè)試,不僅后期的系統(tǒng)集成聯(lián)調(diào)或集成測(cè)試和系統(tǒng)測(cè)試會(huì)很順利,節(jié)約很多時(shí)間;而且在單元測(cè)試過程中能發(fā)現(xiàn)一些很深層次的問題,同時(shí)還會(huì)發(fā)現(xiàn)一些很容易發(fā)現(xiàn)而在集成測(cè)試和系統(tǒng)測(cè)試很難發(fā)現(xiàn)的問題;更重要的是單元測(cè)試不僅僅是證明這些代碼做了什么,是如何做的,而且證明是否做了它該做的事情而沒有做不該做的事情。
6.單元測(cè)試的好與壞不僅直接關(guān)系到測(cè)試成本(因?yàn)槿绻麊卧獪y(cè)試中易發(fā)現(xiàn)的問題拖到后期測(cè)試發(fā)現(xiàn),那么其成本將成倍數(shù)上升),而且也會(huì)直接影響到產(chǎn)品質(zhì)量,因?yàn)榭赡芫褪怯捎诖a中的某一個(gè)小錯(cuò)誤就導(dǎo)致了整個(gè)產(chǎn)品的質(zhì)量降低一個(gè)指標(biāo),或者導(dǎo)致更嚴(yán)重的后果。