介紹
單元測(cè)試已經(jīng)存在了許多年。 “Test early, test often” 是一個(gè)涉及單元測(cè)試的口頭禪,但不是每一個(gè)軟件項(xiàng)目都有合適的和先進(jìn)的單元測(cè)試套件。當(dāng)面對(duì)嵌入式系統(tǒng)的時(shí)候,這個(gè)想法需要改變了,因?yàn)閷?duì)軟件質(zhì)量的要求在持續(xù)增長(zhǎng)。國(guó)際標(biāo)準(zhǔn),如IEC-61508-3, ISO/DIS-26262或DO-178B/C,需要模塊測(cè)試以達(dá)到要求的功能安全級(jí)別。模塊級(jí)的單元測(cè)試有助于達(dá)到這一要求。然而,功能安全不僅僅是一個(gè)成本回收的問(wèn)題,還會(huì)損失信用。我們需要多花一些時(shí)間和精力,以確保我們發(fā)布的軟件不會(huì)造成任何不愉快的意外。
在這篇文章中,我們將介紹如何編寫,維護(hù),建立關(guān)于ASR的簡(jiǎn)化模擬模塊的單元測(cè)試并從中受益。我們將使用Keil評(píng)估板MCBSTM32E與Cortex-M3 MCU,帶有新的ULINK Pro debug和trace adapter的MDK-ARM,Parasoft C / C ++test。您將看到如何最大化利用IDE/測(cè)試框架的整合,并通過(guò)測(cè)試工具專用主機(jī)的通信通道ULINK Pro簡(jiǎn)化了初始設(shè)置。您還將看到對(duì)于擴(kuò)大測(cè)試能力而言,這安裝工作如何起到重要的作用。
單元測(cè)試的基礎(chǔ)知識(shí)
單元測(cè)試是一個(gè)眾所周知的概念。本質(zhì)上,它包括單個(gè)功能或一類方法,并用一組給定的參數(shù)調(diào)用它。當(dāng)執(zhí)行完畢時(shí),最好的結(jié)果是達(dá)到了預(yù)期要求。這樣一個(gè)代碼的完成成為一個(gè)測(cè)試用例。檢查結(jié)果通常是使用斷言的形式完成的。例如,假設(shè)您有以下功能“foo”:
int foo (int a, int b) { return b – a -1; }
一個(gè)測(cè)試用例可能是這樣的:
void test_foo () { int Ret = foo(1,2); assertTrue(ret = 0, “Wrong value returned!”); }
優(yōu)點(diǎn)
單元測(cè)試有許多好處。當(dāng)創(chuàng)建了一個(gè)單元測(cè)試案例,即使開發(fā)測(cè)試人員的水平有些低也能夠執(zhí)行,甚至包括高級(jí)別功能測(cè)試的代碼部分。這樣一來(lái),測(cè)試人員可以測(cè)試“角落示例(corner cases)”,處理異常情況。
第二個(gè)重要的優(yōu)點(diǎn),可以促使開發(fā)人員編寫“可測(cè)試”的代碼。這樣使得代碼不過(guò)與復(fù)雜,容易分解,更好的全面設(shè)計(jì)。
另一個(gè)好處是,單元測(cè)試用例套件為您的應(yīng)用程序建立一個(gè)巨大的安全網(wǎng)。無(wú)論您是重構(gòu)代碼還是處理舊的代碼,這一點(diǎn)都是非常重要的。通常這種情況下,開發(fā)人員都害怕引入新的錯(cuò)誤。有了這個(gè)安全網(wǎng),您可以放心的修改代碼。如果您出現(xiàn)了什么錯(cuò)誤,安全網(wǎng)會(huì)立即發(fā)出警報(bào)。這可以提高您的工作效率并寫出質(zhì)量更高的代碼。
最后一點(diǎn)同樣很重要,單元測(cè)試用例可以將錯(cuò)誤在開發(fā)周期的早期暴露。眾所周知,在集成測(cè)試階段修復(fù)錯(cuò)誤比在系統(tǒng)測(cè)試階段后期的成本要少很多。
上述原因?qū)е聹y(cè)試驅(qū)動(dòng)開發(fā)(TDD)的發(fā)明。TDD促使開發(fā)人員為每個(gè)功能創(chuàng)建一個(gè)單元測(cè)試案例,并實(shí)現(xiàn)它。