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