工程師們似乎在嵌入式軟件開(kāi)發(fā)的一個(gè)領(lǐng)域就是測(cè)試。工程師經(jīng)常對(duì)設(shè)計(jì)和實(shí)現(xiàn)階段感到興奮,但是當(dāng)涉及到證明系統(tǒng)工作時(shí),努力和/或興趣真的開(kāi)始減弱。考慮到可能需要的時(shí)間和精力,這是完全可以理解的。嵌入式開(kāi)發(fā)工程師測(cè)試嵌入式系統(tǒng)有許多不同的方法,但它們可以歸結(jié)為兩種主要的測(cè)試類(lèi)型,白盒測(cè)試和黑盒測(cè)試。
黑盒測(cè)試通常由第三方或質(zhì)量保證小組執(zhí)行,他們了解外部系統(tǒng)行為需求,但缺乏對(duì)內(nèi)部結(jié)構(gòu)或代碼操作的深入了解。另一方面,嵌入式軟件工程師更有可能執(zhí)行白盒測(cè)試,因?yàn)樗麄兞私廛浖慕Y(jié)構(gòu)和實(shí)現(xiàn),在這種類(lèi)型的測(cè)試中,工程師會(huì)考慮軟件結(jié)構(gòu),以確保每一個(gè)分支、每一個(gè)案例和每一行代碼都通過(guò)測(cè)試得到了執(zhí)行和驗(yàn)證。
即使對(duì)于相對(duì)較小的程序來(lái)說(shuō),這也是一項(xiàng)令人望而生畏的任務(wù)。值得慶幸的是,有一種簡(jiǎn)單的方法來(lái)理解和生成確保適當(dāng)測(cè)試覆蓋所需的測(cè)試用例數(shù)量,那就是使用條件復(fù)雜度,也稱(chēng)為圈復(fù)雜性。傳統(tǒng)上,在實(shí)現(xiàn)階段推薦條件復(fù)雜度測(cè)試,以確保代碼質(zhì)量。其思想是分析程序中的每個(gè)函數(shù),并提供一個(gè)結(jié)果復(fù)雜度值。值越高,函數(shù)就越復(fù)雜,導(dǎo)致錯(cuò)誤風(fēng)險(xiǎn)更高,測(cè)試和維護(hù)困難。
這個(gè)測(cè)量真正有趣的是,它直接通過(guò)函數(shù)測(cè)量線性無(wú)關(guān)路徑的數(shù)量!復(fù)雜度值提供了完整分支覆蓋所需的測(cè)試用例數(shù)量的上限!這意味著,嵌入式開(kāi)發(fā)人員通過(guò)對(duì)源代碼執(zhí)行這個(gè)簡(jiǎn)單的度量檢查,不僅有助于確保代碼保持簡(jiǎn)單,而且可以用來(lái)檢查是否已經(jīng)為分支覆蓋測(cè)試定義了足夠的測(cè)試用例!
現(xiàn)在想到的問(wèn)題是,我們?nèi)绾问褂眠@個(gè)復(fù)雜度值來(lái)創(chuàng)建測(cè)試用例?答案首先在于條件復(fù)雜度是如何計(jì)算的。有兩種方法可以解決這件事。第一種是簡(jiǎn)單地把if的個(gè)數(shù),循環(huán)的個(gè)數(shù)相加并加一個(gè)。第二種方法是生成控制流圖,確定邊、節(jié)點(diǎn)和連通分量的數(shù)量,然后從邊中減去節(jié)點(diǎn)的數(shù)量,再加上連通分量。因?yàn)檫@比簡(jiǎn)單地查看源代碼要復(fù)雜得多,所以第一種方法要容易得多,也更有可能在開(kāi)發(fā)周期中完成。
在測(cè)試基礎(chǔ)上執(zhí)行測(cè)試有許多不同的類(lèi)型和方式,使用條件復(fù)雜性只是如何執(zhí)行測(cè)試的一個(gè)簡(jiǎn)單例子。測(cè)試通常需要的不僅僅是簡(jiǎn)單的分支測(cè)試,而是需要沿著多個(gè)實(shí)現(xiàn)層和系統(tǒng)行為需求進(jìn)行測(cè)試。無(wú)論如何,嵌入式開(kāi)發(fā)人員從開(kāi)發(fā)周期中使用的代碼度量創(chuàng)建測(cè)試至少是一個(gè)好的開(kāi)始。