在基于模型設計的開發過程中,一定要拿正確的模型去生成代碼。
有人要問:什么樣的模型才算得上正確的模型?
我認為:
至少,正確的模型應該是經過充分驗證的。
除了“充分驗證”,還應該滿足什么條件呢?
我能想到的就是“可驗證”。
“可驗證”也是充分驗證的前提。
模型的“可驗證”以后會專門介紹,本文就說說模型中代碼生成之前可以做哪些驗證。按照模型是否需要運行來劃分,可以把驗證分為靜態驗證和動態驗證兩大類。
M靜態驗證
靜態驗證有評審、靜態檢查、形式化驗證等方式。
評審是質量體系要求的
通常我們模型畫完之后,需要通過評審的方式去評審模型是否實現了相應的需求。那么,評審發生的時刻應該如何把握?是否在畫完模型之后緊跟著就去做評審呢?我個人認為,如果有工具可以幫我們實現靜態檢查,我們為什么不先做靜態檢查呢?先做靜態檢查的好處是把可以通過工具發現的軟件缺陷在評審之前消除掉,這樣可以避免在評審的時候在此類問題上浪費時間。
靜態檢查
目前MATLAB通過Simulink Verification & Validation(以下簡稱SLVnV)提供了Model Advisor,可以實現建模標準的靜態檢查,實現起來也不困難,并且工具還具有可定制功能,可以在SLVnV提供的諸多檢查項里挑選適合自己開發團隊的檢查集,也有可能有一些檢查是Model Advisor沒有提供的,這種情況下,也可以通過編寫MATLAB程序的方式定制檢查項。
形式化驗證
MATLAB提供了Simulink Design Verifier(以下簡稱SLDV)產品,可以對模型進行形式化驗證。SLDV可以檢查模型中是否有整數溢出,或者是否有死邏輯。這兩類錯誤都是很容易被評審和功能測試錯過的錯誤,其實,軟件里一旦發現有這兩類錯誤,復現或者定位這兩類錯誤都非常困難,而SLDV可以通過分析模型的給出發生或者可能發生錯誤的環節。另外,需要注意的是,在模型評審或者功能測試過程中,我們都可能發現一些軟件缺陷,發現這些缺陷之后,我們需要修改模型,模型經過修改可能會再次引入數據溢出或者死邏輯之類的錯誤,所以建議做功能測試之后,再次使用SLDV檢查一下模型。
M動態驗證
動態驗證主要有功能測試。功能測試可以分為單元級功能測試和集成級功能測試兩個階段。如果系統比較大,集成級功能測試還會繼續劃分為組件級集成測試和系統級集成測試。
單元級功能測試
也就是我們經常提到的單元測試,單元測試的測試用例需要用戶根據需求編寫,寫完測試用例就是執行測試過程,測試過程的執行要盡量自動化。這個階段的測試工作量非常大,通常花在單元測試上的時間會明顯大于建模的時間,這往往是很多開發者難以接受的,很多人從心理上沒有這個準備,一般認為模型畫完就接近大功告成,所以不會計劃很多時間在模型測試上,這個想法是非常危險的。當然,這個階段的測試是否完善可以通過“測試覆蓋率”這個數據來把握。覆蓋率沒有達到預定的目標就要繼續增加測試用例。
測試覆蓋率應該從兩個層面去度量:
一需求覆蓋率,測試用例所覆蓋的需求比例;
一結構覆蓋率,測試用例所覆蓋的軟件實現的分支。
對于工具,Simulink只能從結構上度量哪些分支測過哪些分支沒測過,需求覆蓋率通常需要測試者自己去把握。對于結構覆蓋率,我們有條件覆蓋(Condition Coverage)、判定覆蓋(Decision Coverage)、MC/DC覆蓋等。
集成級功能測試
集成測試的目的和單元測試是不同的,集成測試要求做單元測試結束之后才可以進行。集成測試主要測試不同單元模塊之間從接口上、調度上是否有問題,有時候集成測試也可以發現不同單元模塊之間需求上的沖突。集成測試不會有結構覆蓋率要求。
集成測試的實現方式有模型上的集成測試,也可能會結合硬件進行測試,比如我們經常提到的快速原型,是否要結合硬件要取決于是否有條件和是否有必要這樣做,這里不做展開。
到此,如果模型經過了各種靜態驗證,再經過足夠的動態驗證,我們可以認為模型已經正確了吧?
接下來,就可以對正確的模型進行代碼生成工作了。
當然,上述驗證活動都是建立在“模型可驗證”的基礎上的,模型的“可驗證”如何去把握,這我們后面再專門討論。
-
數據管理
+關注
關注
1文章
311瀏覽量
19940 -
靜態驗證
+關注
關注
0文章
8瀏覽量
6040
發布評論請先 登錄
評論