邯鄲外貿(mào)網(wǎng)站建設公司成都網(wǎng)站建設公司
本文描述單元測試的概念,以及Test Harness建立的方法和簡單的單元測試過程。
文章目錄
- 1 單元測試
- 1.1 場景舉例
- 1.2 簡單的測試方法
- 2 Test Harness建立
- 2.1 模型配置
- 2.2 創(chuàng)建Test Harness
- 3 總結(jié)
1 單元測試
單元測試,簡單來說就是在Simulink模型中只測試一小部分單元的功能。關于單元測試的概念網(wǎng)上有很多資料了,這里不再贅述。博主從實際工作經(jīng)驗的角度來談談單元測試的價值。
1.1 場景舉例
舉個簡單的例子,某個工程師需要設計一個邏輯,當毫米波雷達跟蹤的目標的置信度大于等于90時,認為該目標是有效目標。于是該工程師設計模型如下:
工程師不小心把判斷條件寫成大于號,而不是大于等于號。這就導致了置信度為90的目標全部被視為Invalid,從而影響了后面一大片的算法丟失了重要的輸入信息。如果沒有單元測試,這個問題就會被帶到開發(fā)流程的后期。例如,該模型生成代碼、編譯集成、刷到車上以后,實車測試的時候發(fā)現(xiàn)后面的功能狀態(tài)機一直不激活,或者控制信號一直不激活。然后再回頭一點點往前擼信號,查找半天才定位到模型中的這個小bug。
這種情況在工作中時常發(fā)生,而且并不能因此責怪工程師的水平不行,因為人總會犯錯誤,避免不了“寫bug”這種情況。因此,需要從流程體系的角度來盡可能提早發(fā)現(xiàn)設計問題。單元測試就可以做到這樣的保障,譬如給上圖這一小部分單元輸入一個數(shù)值為90的Confidence信號,通過模型仿真發(fā)現(xiàn)輸出竟然是False,就可以快速地定位這個缺陷,盡早地修復他。
1.2 簡單的測試方法
既然知道了要在模型中先測試一下,不了解Test Harness的人可能會這么做。把已有的模型改造一下,把inport和outport端口去掉,給他幾個輸入,再用Scope或者disp模塊看看輸出對不對。模型改造成如下所示。
仿真后可以看到disp中的結(jié)果。這么做確實看到了輸出的結(jié)果,發(fā)現(xiàn)了輸入的置信度為90時,輸出的是0。但是這樣操作模型會有很多問題:
- 為了仿真改掉了原有的模型,測完了還得改回去;
- 測試用例不方便保留下來,以后復測的時候還得手動操作一番;
- 如果想要多個不同的測試輸入得把輸入改來改去,不好切換;
針對這些問題,可以直接使用Simulink Test工具箱里的Test Harness,為設計專屬的單元測試環(huán)境,引用原來模型的某個子系統(tǒng)或者整個模型的算法。后文會用一個例子來說明搭建Test Harness的過程,然后直觀地看到他的好處。
2 Test Harness建立
這一節(jié)用以前的一篇博客搭建的模型,來演示一下Test Harness的建立過程,并且通過簡單的輸入進行仿真。
2.1 模型配置
1)首先打開需要測試的模型,這里用以前博主做的一個模型來演示:《Simulink建模:LKA系統(tǒng)功能狀態(tài)機建模》。
2)在模型設置里,需要設置為離散,并且仿真步長設置為和實際控制器中的調(diào)度周期一致;
這樣的話,模型就配置完畢了。
2.2 創(chuàng)建Test Harness
創(chuàng)建Test Harness有兩種做法,為整個slx模型創(chuàng)建,或者為模型中的某個子系統(tǒng)創(chuàng)建。
博主比較傾向于后者,因為單元更小一點,可以聚焦于這部分的功能進行測試。即使是想測試整個模型,也可以將整個模型的最上層打包成一個大型的子系統(tǒng)進行測試。后文就以頂層的子系統(tǒng)LKA_StateMachine為例,來創(chuàng)建TestHarness。
1)右鍵點擊這個子系統(tǒng),選中Create for XXX
2)在界面中定一個名字,企鵝定好輸入輸出的形式;
這里博主選擇了輸入為Signal Builder,因為用的比較順手,也可以選擇From Workspace導入外部數(shù)據(jù),或者Test Sequence等等。Signal Builder的用法參照《仿真與測試:通過Signal Builder模塊生成輸入信號》。
另外,如果勾選了Save test harness extern選項后,會生成一個用來保存harness模型的外部文件,否則生成的harness會依附于當前的模型。博主習慣后者,減少一些文件的管理。
3)點擊OK后生成了一個Harness模型,按照之前的選擇配置了輸入為Signal Builder,引用了原模型的子系統(tǒng)作為中間算法;
這樣的話,就不需要對原來的模型進行改造,也能進行單元測試。
4)打開Signal Builder設計一個簡單的測試用例輸入;
測試用例輸入表示,3s時開關打開,1-5s時,車速從0加到80。然后通過信號log可以看到輸出的LKA_Status是否符合該輸入的預期。
這樣就完成了一個Test Harness的創(chuàng)建及一個簡單的單元測試。這個測試環(huán)境可以和
3 總結(jié)
本文描述單元測試的概念,以及Test Harness建立的方法和簡單的單元測試過程。本文只是一個簡單的單元測試,還沒有發(fā)揮出Test Harness的更多功能。Test Harness配合Test Manager和Design Verify,可以搭建一套成體系的測試方法。
>>返回個人博客總目錄