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