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”
之後,執行測試用例。在測試結果中,可以看到一個覆蓋率報告
最後,點選上圖中的紅框“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);該報錯提示消失。