原創(chuàng)|使用教程|編輯:龔雪|2015-12-15 13:37:20.000|閱讀 545 次
概述:關(guān)于Parasoft C / C ++test的嵌入式單元測(cè)試實(shí)踐,本文主要介紹了單元測(cè)試的結(jié)果驗(yàn)證和擴(kuò)大覆蓋率。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
接下來(lái)的一步是運(yùn)行測(cè)試用例,然后審查結(jié)果。如果你想,你也可以在運(yùn)行之前檢查它們。但從實(shí)際來(lái)看,最好是先運(yùn)行它們。我們選中“proc.c”文件,然后在配置菜單中選擇“運(yùn)行單元測(cè)試(Run Unit Tests)”。不到一分鐘(包括下載、執(zhí)行和上傳),我們得到結(jié)果:11個(gè)測(cè)試用例通過(guò),27個(gè)測(cè)試用例運(yùn)行異常。當(dāng)我們仔細(xì)檢查失敗的原因時(shí),我們會(huì)發(fā)現(xiàn)這主要是由三個(gè)功能導(dǎo)致的: “average”、 “update_brake_signal” 和 “brake_control”。 它們都需要指針作為參數(shù)(如下圖所示),而在測(cè)試用例中給它們傳遞了空值。
現(xiàn)在我們必須做出決定。如果我們的代碼是非常安全的,當(dāng)傳遞空值時(shí)是不會(huì)崩潰的。否則,我們就姑且認(rèn)為這樣的情況不會(huì)發(fā)生,并刪除這些測(cè)試用例。 我們采用一種混合的方法。因?yàn)楣δ?ldquo;average” 和“brake_control”是用來(lái)被其他功能調(diào)用的,我們放置一個(gè)“if”保護(hù)語(yǔ)句。功能“update_brake_signal”僅僅從“brake_control”而來(lái),所以我們不需要對(duì)它進(jìn)行多余的保護(hù)。我只需要?jiǎng)h除那些通過(guò)右鍵單擊的測(cè)試案例,并選擇適當(dāng)?shù)腃++test操作。
再一次的運(yùn)行,我們完成了25個(gè)測(cè)試用例和72%的語(yǔ)句覆蓋率,得到了77個(gè)結(jié)果驗(yàn)證。下圖顯示的代碼是與功能“brake_control”和“average”相關(guān)。語(yǔ)句覆蓋通過(guò)高亮顯示。它也顯示在小窗口的右下角中。測(cè)試用例顯示在“test case explorer”的左側(cè)。需要進(jìn)行驗(yàn)證的結(jié)果顯示在下面的窗口面板中。
現(xiàn)在,我們要進(jìn)行測(cè)試并驗(yàn)證結(jié)果。通過(guò)這樣的步驟,才會(huì)得到有意義的斷言。因?yàn)橛辛薈++test,需要的工作量大大減少。如果你決定將斷言作為最重要的變量,C++test會(huì)進(jìn)一步減少你的工作量。如果代碼運(yùn)行良好,可以將結(jié)果一起驗(yàn)證。這基本上是“凍結(jié)(freezes)”的當(dāng)前狀態(tài)。然后,你需要仔細(xì)檢查代碼中最重要的部分。如果它影響到系統(tǒng)安全,那么需要檢查所有的內(nèi)容。
目前我們的語(yǔ)句覆蓋率為72%,而我們的目標(biāo)是100%。“brake_control”只有25%的語(yǔ)句覆蓋。我們可以看到,它基本上在第一個(gè)“if”語(yǔ)句中就退出了,這是我們?cè)黾拥膶?duì)空指標(biāo)的一種保護(hù)。顯然,我們需要提供一個(gè)測(cè)試案例,可以通過(guò)非空指針到制動(dòng)信號(hào)變量。我們可以復(fù)制、修改現(xiàn)有的測(cè)試案例,或者使用測(cè)試用例向?qū)Аy(cè)試用例向?qū)е兄该髂男┕δ芤獪y(cè)試,然后圖形編輯器引導(dǎo)設(shè)置前置條件,參數(shù),后置條件和預(yù)期值。這種方法可以限定測(cè)試案例。對(duì)于簡(jiǎn)單的類(lèi)型,向?qū)欠浅S行У摹5珜?duì)于沒(méi)有工廠(chǎng)函數(shù)的復(fù)雜類(lèi)型,復(fù)制和修改可能更有效。關(guān)于向?qū)в幸患轮档藐P(guān)注:功能里使用的和要求進(jìn)行初始化的所有變量,它都可以自動(dòng)識(shí)別。如果手動(dòng)編寫(xiě)測(cè)試用例, 你最初可能會(huì)忽略這一點(diǎn)。這種情況下,需要額外的調(diào)試以便弄清楚為什么測(cè)試案例沒(méi)有按照預(yù)期進(jìn)行。
在本例中,使用向?qū)?chuàng)建一個(gè)傳遞指針到分配s32類(lèi)型(“spd_diff” equal to +100 for one and -100 for the other),并設(shè)置兩個(gè)值為10的變量(“Speed_Diff_Threshold” 和“Brake_Signal_Coeff” )的測(cè)試用例只用了一兩分鐘。同時(shí)運(yùn)行這兩個(gè)案例之后,我們的覆蓋率提高到了97%,其中“update_brake_signal”和“brake_control”全部覆蓋。要達(dá)到覆蓋率100%需要使用向?qū)В@一次是針對(duì)功能“update_speed”的。這一過(guò)程同樣只需要一兩分鐘。這個(gè)功能并不復(fù)雜,和容易在沒(méi)有覆蓋到的if語(yǔ)句中找到一組變量值。最后,我們的覆蓋率就達(dá)到了100%。
購(gòu)買(mǎi)最新正版授權(quán)Parasoft贈(zèng)送Macbook!""
慧都年終盛典火爆開(kāi)啟,一年僅一次的最強(qiáng)促銷(xiāo),破冰鉅惠不容錯(cuò)過(guò)(12.01~12.31)!!優(yōu)惠詳情點(diǎn)擊查看>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn