- 單元測試的目的
創建完模型后,我們需要驗證模型的行為,即仿真結果,是否跟我們預期的一致,這樣才能保證由模型生成的代碼在嵌入式系統中執行得到結果跟我們預期的一致。單元測試主要是以模型或者模型內的子系統為單位進行測試。
雖然單元測試不能發現所有的問題,比如實際系統中的接口信號跟我們預期的不符,或者一些性能方面的需求。但是單元測試個人感覺還是必須的,測試用例設計的越全面,即把自己能想到的所有情況都測試一遍,后續在實車上出現非預期的情況就越少。
并且在模型單元測試中找問題會比在后續的集成測試,以及實車測試中找問題容易的多,所以盡量能在單元測試中發現的不能就不應該流出到后續的開發流程中。
做好單元測試會極大的提高開發效率。
現在Matlab的Simulink Test工具箱做的也越來越完善,只需要簡單幾步就可以創建出測試環境,方便的修改測試用例,結果的可視化和報告功能也做得很好了,下面就具體介紹一下用法。
- 創建Test Harness測試模型
Test Harness 模型可以理解為一個測試框架。由被測試模型,信號輸入和信號輸出組成。
如果一個模型不是很復雜的話,可以直接對一個模型整體創建一個Test Harness模型,進行測試。具體方法是在模型最外層的空白處,點擊鼠標右鍵,選擇Test Harness -> Create for Model…
如果模型很復雜的話,也可以對模型中的各個子系統分別創建Test Harness模型,然后分別單獨測試這些子系統。具體方法是選中想要測試的子系統,點擊鼠標右鍵,選擇Test Harness -> Create for 'subsystem name'
點擊后,就會出現如下的配置界面
其中,{Name}是給出Test Harness模型的名稱
{Save test harness extern}如果不勾選 ,那么這個test harness模型就不會單獨的生成一個文件,而是保存在原模型里面
{Save test harness extern}如果勾選,那么這個test harness模型就以一個單獨的文件保存
Test Harness模型的可以選擇的輸入輸出如下:
其中Harness模型的輸入,可以選擇為普通的Inport,Signal Builder,Signal Editor,From Workspace,From File,Test Sequence等
Harness模型的輸出,可以選擇為普通的Outport,Scope,To Workspace,To File,Terminator等
實際可以根據自己的習慣和需求進行選擇。
下圖是輸入為Inport,輸出為Outport的Test Harness模型,本篇文章主要介紹針對這種類型的Test Harness模型進行單元測試。這種模型的輸入信號以及期望的輸出信號可以通過excel的測試用例模板來給出。
其中,Signal spec and routing 里的內容如下,會按照原模型的設置,將所有的輸入信號的數據類型和采樣時間做一個轉換。
這樣一個Test Harness模型就創建完了,接下來就準備對這個模型做測試。
- 自動創建excel格式的測試用例模板
首先打開Simulink Test Manager,可以在模型菜單的APPS里面搜索Simulink Test
然后點擊“Simulink Test Manager”
或者直接在窗口輸入命令:
sltest.testmanager.view
就會打開Test Manager的窗口
接下來用AUTO CREATE功能,新建一個Test File,并且自動生成測試用例的模板。點擊New -> Test File from Spreadsheet
然后會跳出如下界面,選擇“Create a test template file for specifying data”
點擊Next后跳出如下的界面,在Model中選擇要被測試的模型,Harness中選擇該模型中創建的需要被測試的Test Harness模型
然后會跳出如下界面,勾選想要在excel中想要包含的項目
Inputs:模型最外層的輸入。這個必須要選的,可以在excel表中編輯輸入的值
Parameters:模型中的參數。如果測試時不需要改變參數值的話,可以不勾選。
這邊推薦是弄清楚Parameters在excel頁中設置的格式后,這邊也都不用勾選了,如果需要修改參數值的話,按照格式,手動添加想要修改的參數值
Comparison signals:信號線上logged的信號。這個必須勾選,并且需要把希望被測試的信號對應的信號線設置為logged。
Include all attributes in the spreadsheet:信號的一些參數設置,比如插值方式,絕對允許誤差等,推薦勾選上。
下一步是設置測試用例的個數和測試用例的基本名稱
比如按照上面的設置,就會在測試用例的excel文件中,生成10個sheet,每一個sheet的名字為我們指定的名稱+序號
最后,指定Test Manager的測試文件名和測試用例的excel文件名和存儲位置。
這樣就會自動生成Test Manager的測試文件和測試用例的excel文件。
Test Manager的測試文件打開后,如下圖。
Test Suite:每一個測試文件中,都可以定義若干個Test Suite,可以把同一類型或同一功能的測試用例放到一個Test Suite中
Test Case:每一個Test Suite中,可以定義若干個Test Case,Test Case中規定了測試詳細的執行信息。實際測試執行的時候也針對每一個Test Case進行測試的
Create Test Case from External File:測試用例的具體信息從excel模板中提取,這篇文章重點介紹以這種形式來創建測試用例
小鎖標記:表示這些設置是通過excel文件中的設置固定的,無法在該頁面進行修改,只能通過excel文件進行修改。
*標記:提示這些設置是有過修改
下面詳細介紹測試用例的每一項設置的內容:
TAGS: 可以給一個標簽名,比如按照功能,測試類型等,方便以后批量查找測試用例
DESCRIPTION: 可以給描述測試用例的測試步驟,方法等,方便理解
REQUIREMENTS: 可以和需求關聯。Matlab現在有“Simulink Requirements”這個Toolbox,可以在里面寫需求文檔,將需求和模型,以及對應的測試用例關聯起來,以滿足A-ASPICE或者ISO26262所規定的軟件開發流程中的可追溯性的要求。
SYSTEM UNDER TEST: 里面設置了要被測試的模型,或者針對模型中所創建的某一個Test Harness模型進行測試。
另外,如果有需要的話,這邊也可以在進行單元測試時,覆蓋掉原模型的設置,比如常用的一個就是仿真時間,可以根據每個測試用例輸入數據的實際結束時間,覆蓋掉原模型的仿真結束時間
PARAMETER OVERRIDES: 這里如果是根據excel模板生成的測試用例的話,是鎖定不能修改的,里面列出了某個測試用例中,需要改變的參數
CALLBACKS: 里面分為3個不同時刻的,運行我們想要的腳本。
其中PER-LOAD是在讀取模型之前,POST-LOAD是在讀取完模型之后,CLEANUP是在測試仿真完成之后。
一種比較常見的用法是,在PER-LOAD中讀取測試模型的數據詞典里數據,在CLEANUP中清除這次測試的所有數據。
INPUTS: 定義測試的輸入信號,這里如果是根據excel模板生成的測試用例的話,是鎖定不能修改的。
另外這邊有兩個選項可以勾選,如果勾選“Include input data in test result”的話,在最后的結果中,也會顯示輸入信號。
如果勾選“Stop simulation at last time point”的話,仿真測試到最后一個輸入點的時候就會停止。
SIMULATION OUTPUTS: 可以在里面再選取模型中logged的信號作為觀測量
CONFIGURATION SETTINGS OVERRIDES: 可以在仿真測試的時候對原模型的設置進行覆蓋
BASELINE CRITERIA: 里面設置了期望值,以及比較仿真測試結果和期望值的一些參數。這里如果是根據excel模板生成的測試用例的話,是鎖定不能修改的。但可以點擊Edit在excel文件中修改。
對比數據時,可以設置絕對誤差,相對誤差,時序領先誤差和時序滯后誤差
這四個參數可以在excel中,對應變量的下方設置,具體格式和參數名稱如下
ITERATIONS: 迭代測試。這里如果是根據excel模板生成的測試用例的話,是鎖定不能修改的。會根據測試用例數自動生成,表示這個測試會根據不同的配置重復進行
COVERAGE SETTINGS: 統計覆蓋度的設置。如果需要統計模型的覆蓋度的話,就勾選“Record coverage for referenced models”和“Record coverage for system under test”
COVERAGE METRICS 的設置要在最外面的工程中設置,一般選擇Decision,Condition和MCDC這三個覆蓋度就夠應付各種檢查了。
點擊Run,就會執行測試
測試的結果會在Result and Artifacts中顯示。如果仿真結果和預期符合就是綠色的勾勾,否則是紅色的叉叉
Baseline Criteria Result里顯示的就是我們給定的信號期望值與實際值之間的比較。
上面的圖是把仿真結果和期望結果放在一張圖上顯示出來,下面的圖是兩者之差和允許誤差范圍
External Inputs里顯示的是輸入信號的值。(在{INPUTS}里勾選了Include input data in test result才會有)
Sim Output里顯示的是模型中logged信號的值
另外如果設置了搜集覆蓋度,那么還可以看到針對被測模型,所有測試用例累積的覆蓋度
- 手動創建excel測試用例模板
了解了Test Manager用的excel測試模板的格式后,有時候手動創建測試模板會更方便一些。被測對象有多個測試用例的話,可以寫多個excel文件,也可以在一個excel文件中的多個sheet上寫。
比如對于下圖的Test Harness模型,有7個輸入和兩個輸出,那我們就要給7個輸入賦值,以及給出對應時刻的輸出的值
首先定義輸入信號,時間序列{time}定義必須寫在最前面,然后在每一列跟著輸入信號的名稱。
對于輸入信號還推薦定義輸入信號的數據類型,用Type:<數據類型>來定義。
另外為了區分信號是輸入還是輸入,需要在輸入信號最開始的一列定義Source:Input
對于輸出信號,也是一樣,首先是時間序列{time},然后在后面的列跟著輸出信號的名稱。
輸出信號也要定義數據類型,以及定義該信號為輸出Source:Output
對于輸出信號還可以定義允許誤差,比較常用的是相對誤差和絕對誤差。一般對于浮點類型的數據,需要給一個相對誤差,因為浮點數沒法比較完全相等
對于輸出信號,還需要指定該信號在模型中的位置,是通過BlockPath加PortIndex來確定的。
比如對于上圖的兩個輸出信號,不但要指定信號名,還要指定連接信號線的模塊{BlockPath}和該模塊對應的端口號{PortIndex}(如果端口號是1的話可以忽略不填)
還可以指定信號的插值方式{Interp},如果時間序列不是最小步長的話,插值方式有兩種,一個是保持上一次時刻的值“zoh”和線性插值”linear“
創建好測試用例的excel模板后,就可以手動創建一個以填寫好的excel模板,在Test Manager中創建Test Case。
點擊New -> Test File,然后給測試文件起一個名字
在{SYSTEM UNDER TEST}下面選擇要被測試的模型以及模型內的Harness模型,然后選中“Create Test Case from External File”,選擇之前創建的excel測試用例文件。系統就會把在excel模板中填寫的輸入和輸出的信息分別在{INPUTS}和{BASELINE CRITERIA}中自動創建好
最后再修改一些其他想要修改的設置,就能進行測試了。
-
仿真器
+關注
關注
14文章
1034瀏覽量
85098 -
MATLAB仿真
+關注
關注
4文章
176瀏覽量
20328 -
simulink仿真
+關注
關注
0文章
75瀏覽量
8748
發布評論請先 登錄
matlab的其他工具箱及SIMULINK
跪求NI LabVIEW Unit Test Framework Toolkit (單元測試架構工具包)
Simulink中STM32工具箱一覽
基于Simulink的STM32工具箱外設一鍵式代碼該如何去生成呢
單元測試/集成測試自動化工具--WinAMS
matlab的其他工具箱及SIMULINK
什么是單元測試_單元測試的目的是什么
使用MATLAB遺傳算法工具箱實現控制系統的設計與仿真資料說明

普查工具箱有哪些以及植保儀器工具箱系列的匯總
什么是單元測試,為什么要做單元測試
MCU如何進行單元測試

單元測試、集成測試自動化工具

評論