1. 程式人生 > >Simulink Test筆記(含一些小技巧)

Simulink Test筆記(含一些小技巧)

說明

本文記錄simulink test在使用過程中的心得,包含使用過程中新的發現及提高測試效率的一些技巧。

本文提到的內容均基於以下執行環境:

MATLAB   版本 9.3 (R2017b)
Simulink   版本 9.0 (R2017b)

Win10系統

1、simulink test 如何得出模型覆蓋度報告?

首先,兩個設定:

1)模型介面下,進入analysis --> Coverage -->Settings,勾選最上面的“Enable coverage analysis”,並設定需要做的覆蓋率測試專案

模型的設定

2)simulink test中測試用例的設定

進入analysis --> test managerment,點選對應test file或者test suite的 open in tab,在裡面設定 coverage settings,勾選“record coverage for referenced models”

simulink test的設定

之後,執行測試用例。在測試結果中,可以看到一個覆蓋率報告

測試結果中覆蓋率情況

 最後,點選上圖中的紅框“add tests for missing coverage”,軟體會自動補充測試用例。

自動生成用例結果

 點選上圖中的最後一條,便可以看到覆蓋率測試報告了,且是涵蓋了步驟一種的所有覆蓋率測試專案。

最終的覆蓋率測試結果

2 如何用verify檢視結果

3、測試時間較長如何保證模擬步驟能夠被執行

需要將模擬時長加長至能夠滿足測試的最長時間,在harness模型中設定即可

4、關於時序問題

1)測試時需涉及到時序問題,需關注stateflow,stateflow中兩個狀態之間跳轉時會經歷過一個單元模組的執行週期(也即模擬步長)

2)simulink test每一個step都為一個單元模組執行週期

3)simulink test搭建的測試模型,其輸出有一個步長的延時。也即,simulink test模擬的輸出值與模型實際輸出值的對應要錯開一個步長

5、如何使其不受模擬時間約束,停止在最後一個測試步驟

在原有用例的最後再新增一個step(命名為DoNothing,內容為空),讓該步驟作為用例執行的最後一個步驟 。

解決的問題:假如希望測試軟體執行到某個步驟後停止,而又不明確總的執行時間。這時候執行到最後一個步驟後,模擬總時長還剩餘,則模型會繼續往下執行,而simulink test的測試結果判定語句則會停留在最後一步。這樣就可能出現,模型的執行結果發生了變化,而simulink test判定結果的語句卻維持不變。顯然,simulink test給出的最終結果是測試fail。

利用該方法,可以不管設定的模擬時長,用例執行到這一DoNothing步驟後,模型即不會再往下執行,從而保證測試執行結果的唯一性。

6、simulink test用例指令碼中需不需要對數值加強制型別轉換?

答案是:一定要。simulink test的測試指令碼中預設數值為single型別,如果不加強制型別轉換,則很可能會報錯。

舉例: 用verify寫了個判定語句 verify(v_BROBMSChrgRdy_u8 == 0, 'The real value is %d', v_BROBMSChrgRdy_u8);

執行後的測試結果中,提示可能產生非預期的結果:

測試結果中以紅色字型報錯

而修改後verify(v_BROBMSChrgRdy_u8 == uint16(0), 'The real value is %d', v_BROBMSChrgRdy_u8);該報錯提示消失。