使用基于模型的設(shè)計(jì)進(jìn)行早期驗(yàn)證和確認(rèn)
MATLAB 簡(jiǎn)化了線性控制設(shè)計(jì),但是在實(shí)際應(yīng)用中,系統(tǒng)很少是線性的。因此,即使在設(shè)計(jì)了控制器后,對(duì)其進(jìn)行測(cè)試和調(diào)整仍然意味著需要構(gòu)建系統(tǒng)的硬件原型,并對(duì)算法進(jìn)行編碼?;蛘?,因?yàn)闆](méi)有樣機(jī)而無(wú)法進(jìn)行測(cè)試,只有等到開(kāi)發(fā)流程后期才能開(kāi)展測(cè)試活動(dòng)。
為了將算法應(yīng)用到硬件之前驗(yàn)證這些算法,工程師們借助數(shù)值技術(shù)來(lái)仿真控制算法對(duì)系統(tǒng)(也稱為“對(duì)象”)的控制行為??刂乒こ處焸儗W(xué)習(xí)編寫 C 或 Fortran 程序來(lái)嘗試構(gòu)建系統(tǒng)模型,借用他們認(rèn)為可能會(huì)適用于其系統(tǒng)類型的數(shù)值積分例程,在系統(tǒng)模型程序中復(fù)制其控制算法,并仿真整個(gè)系統(tǒng)。如果要使系統(tǒng)完全正常工作,那么整個(gè)仿真-開(kāi)發(fā)流程需要耗費(fèi)大量時(shí)間并且極具挑戰(zhàn)性。
The MathWorks 在 1990 年發(fā)布了Simulink,一種用于對(duì)動(dòng)態(tài)系統(tǒng)進(jìn)行建模和仿真的軟件環(huán)境。在控制設(shè)計(jì)中使用 Simulink 可帶來(lái)兩大好處。首先,該軟件提供了一種直觀的框圖環(huán)境,可用于對(duì)算法和對(duì)象以及可能影響系統(tǒng)行為的非線性實(shí)際效果進(jìn)行建模。其次,該軟件包括一個(gè)基于一流數(shù)值積分方法創(chuàng)建的仿真引擎。這些核心功能極大地簡(jiǎn)化了控制工程師通過(guò)仿真來(lái)驗(yàn)證控制算法的工作。但是控制工程師們?nèi)匀槐仨氃谧詈髮?duì)算法進(jìn)行編碼,以在硬件樣機(jī)或?qū)嶋H系統(tǒng)上測(cè)試這些算法。
大約五年后,隨著 Simulink 模型自動(dòng)代碼生成的推出,此流程變得簡(jiǎn)單得多。對(duì)于調(diào)試和測(cè)試在原型系統(tǒng)中運(yùn)行的代碼,控制工程師們不必再擔(dān)心將算法模型轉(zhuǎn)換為代碼時(shí)出現(xiàn)錯(cuò)誤。
控制工程發(fā)展的下一步曾是個(gè)很大的挑戰(zhàn):產(chǎn)品級(jí)的代碼生成。快速原型代碼通常包含許多調(diào)試?yán)?、?shù)據(jù)收集代碼、主機(jī)-目標(biāo)通信代碼以及用于交互測(cè)試的其他補(bǔ)充代碼。一般而言,這些代碼的優(yōu)化程度不足以將其運(yùn)用在可交付使用的系統(tǒng)中。代碼生成工具經(jīng)過(guò)改進(jìn)后,可以生成高效率的代碼,足以部署到產(chǎn)品級(jí)嵌入式系統(tǒng)中。今天,許多行業(yè)都認(rèn)為從控制模型自動(dòng)生成產(chǎn)品級(jí)代碼是最佳的做法。
Model-Based Design(基于模型的設(shè)計(jì))
處理器速度和內(nèi)存的快速增加有助于在桌面上開(kāi)發(fā)建模、仿真和代碼生成工具,同樣也使嵌入式軟件開(kāi)發(fā)人員可以改進(jìn)嵌入式控制器的功能和復(fù)雜性。此步驟繼而推動(dòng)了這樣一種需求:即使用文本編輯器和調(diào)試器的傳統(tǒng)代碼開(kāi)發(fā)技術(shù)不再是一種局限,未來(lái)的設(shè)計(jì)將以模型為中心。這種以模型為中心的開(kāi)發(fā)方法稱為 Model-Based Design(基于模型的設(shè)計(jì))(圖 1)。
圖1:以模型為中心的開(kāi)發(fā)方法稱為 Model-Based Design(基于模型的設(shè)計(jì))。
通過(guò)基于模型的設(shè)計(jì),團(tuán)隊(duì)可根據(jù)書面需求使用模型開(kāi)發(fā)其設(shè)計(jì)。由于采用了仿真引擎,因此這些模型成為“可執(zhí)行的規(guī)范”。對(duì)于開(kāi)發(fā)和檢查規(guī)范的團(tuán)隊(duì)而言,“規(guī)范可執(zhí)行”是個(gè)極大的好處。檢查完高級(jí)模型后,可使用設(shè)計(jì)詳細(xì)信息修改模型,以便將其轉(zhuǎn)換為代碼。從詳細(xì)設(shè)計(jì)模型自動(dòng)生成代碼極大優(yōu)化了實(shí)現(xiàn)過(guò)程,并避免了從設(shè)計(jì)到代碼轉(zhuǎn)換過(guò)程中引入錯(cuò)誤的可能。
傳統(tǒng)的嵌入式控制系統(tǒng)的開(kāi)發(fā)過(guò)程和V 型圖一致(圖 2)。
圖2:傳統(tǒng)的嵌入式控制系統(tǒng)的開(kāi)發(fā)過(guò)程和V 型圖一致。
此過(guò)程使所有驗(yàn)證和測(cè)試都位于 V 型圖右側(cè),即完成設(shè)計(jì)和實(shí)現(xiàn)之后。對(duì)于基于 C 代碼的傳統(tǒng)嵌入式控制開(kāi)發(fā)流程,集成測(cè)試通常在其他形式且級(jí)別逐漸提高的測(cè)試(例如硬件在環(huán)測(cè)試以及全系統(tǒng)測(cè)試)之前。雖然此開(kāi)發(fā)順序有助于組織復(fù)雜的系統(tǒng)設(shè)計(jì),但還是有一些缺點(diǎn):該順序直到開(kāi)發(fā)末期才考慮驗(yàn)證和測(cè)試,而此時(shí)修復(fù)所找到的任何錯(cuò)誤都要付出最高代價(jià)且最耗時(shí);用戶必須實(shí)現(xiàn)所有組件后才能測(cè)試系統(tǒng);并且該順序未能考慮開(kāi)發(fā)過(guò)程中的迭代。
通過(guò)基于模型的設(shè)計(jì),可以將驗(yàn)證作為并行活動(dòng),貫穿整個(gè)開(kāi)發(fā)流程(圖 3)。
圖3:通過(guò)基于模型的設(shè)計(jì),可以將驗(yàn)證作為并行活動(dòng),貫穿整個(gè)開(kāi)發(fā)流程。
在開(kāi)發(fā)流程的每一步進(jìn)行測(cè)試和驗(yàn)證,意味著可在引入錯(cuò)誤之處發(fā)現(xiàn)這些錯(cuò)誤。與傳統(tǒng)的 V 型圖流程相比,可以更快地重復(fù)、修復(fù)和驗(yàn)證設(shè)計(jì)。那么該如何著手實(shí)現(xiàn)早期驗(yàn)證,從而減少在開(kāi)發(fā)末期花費(fèi)在測(cè)試和調(diào)試設(shè)計(jì)上的時(shí)間呢?下文概述了一些最佳做法。
模型驗(yàn)證和確認(rèn)
基于模型的設(shè)計(jì)實(shí)現(xiàn)驗(yàn)證和確認(rèn)的主要方式是通過(guò)在仿真的過(guò)程中進(jìn)行測(cè)試。雖然許多組織都進(jìn)行某種形式的建模,但是大多是以專門的方式應(yīng)用仿真,因此無(wú)法在最大程度上實(shí)現(xiàn)潛在的驗(yàn)證好處。單靠仿真無(wú)法發(fā)現(xiàn)所有錯(cuò)誤;但這是一個(gè)巨大的進(jìn)步,您幾乎在開(kāi)始設(shè)計(jì)模型時(shí)就可以進(jìn)行仿真。建模環(huán)境中的迭代快速且方便。
對(duì)各個(gè)組件進(jìn)行建模非常有用,可能是完成復(fù)雜設(shè)計(jì)所必需的;然而,不要因?yàn)檫@種優(yōu)勢(shì),就不再對(duì)將在其中運(yùn)行組件的系統(tǒng)或環(huán)境進(jìn)行建模。通過(guò)在單一環(huán)境中對(duì)整個(gè)系統(tǒng)進(jìn)行建模,您可以快速了解組件功能與其他組件的交互方式,以及集成組件在已部署的系統(tǒng)或環(huán)境中的行為方式。可能會(huì)發(fā)現(xiàn)對(duì)組件或其他方面的遺漏需求。通過(guò)使系統(tǒng)模型還原為迭代一個(gè)組件時(shí)的狀態(tài),可以評(píng)估設(shè)計(jì)迭代對(duì)系統(tǒng)功能的影響。
與設(shè)計(jì)和開(kāi)發(fā)同時(shí)進(jìn)行測(cè)試有助于檢測(cè)出潛在問(wèn)題,并可顯著減少修復(fù)這些問(wèn)題的成本和時(shí)間。通過(guò)在開(kāi)發(fā)模型期間考慮測(cè)試,可使設(shè)計(jì)更適合于進(jìn)行測(cè)試,從而確??蓪?duì)設(shè)計(jì)進(jìn)行完整測(cè)試。此原則的應(yīng)用范圍遠(yuǎn)不止嵌入式系統(tǒng)領(lǐng)域,但是嵌入式系統(tǒng)開(kāi)發(fā)人員卻常常忽視了此原則。原因是用戶以為可以在軟件中完成任何事情,也可能是文檔化的開(kāi)發(fā)流程忽視了此原則。然而,與新型靈活的軟件開(kāi)發(fā)流程一樣,在設(shè)計(jì)模型之前或與設(shè)計(jì)模型并行開(kāi)發(fā)測(cè)試是最佳做法。
幾乎每種測(cè)試方案都涉及到某些變數(shù):輸入、對(duì)象參數(shù)、環(huán)境因素或其他要素。時(shí)間和開(kāi)支通常限制了測(cè)試方案的靈活度;然而,通過(guò)在仿真環(huán)境中進(jìn)行測(cè)試,您可以更加快速且并行(如果處理能力夠用)地仿真測(cè)試案例。在仿真中探查整個(gè)參數(shù)空間還可以縮小要實(shí)時(shí)運(yùn)行的關(guān)鍵測(cè)試的范圍。
每個(gè)組織都有針對(duì)設(shè)計(jì)和實(shí)現(xiàn)的標(biāo)準(zhǔn)或最佳做法。這其中有許多標(biāo)準(zhǔn)并未形成文檔,但是卻被關(guān)鍵人員銘記在心。使標(biāo)準(zhǔn)書面化并將標(biāo)準(zhǔn)檢查加入模型開(kāi)發(fā)流程是很簡(jiǎn)單的做法,但卻可以產(chǎn)生巨大的影響,因?yàn)檫@樣做可盡早減少“愚蠢”錯(cuò)誤的數(shù)量,確保模型在團(tuán)隊(duì)成員之間共享時(shí)更具可讀性,并且更加容易在將來(lái)進(jìn)行維護(hù)。對(duì)標(biāo)準(zhǔn)進(jìn)行建??梢苑浅:?jiǎn)單(如驗(yàn)證所有輸入和輸出是否已連接),也可以非常復(fù)雜(如是否滿足行業(yè)標(biāo)準(zhǔn))。關(guān)鍵在于開(kāi)發(fā)一致的檢查,然后在整個(gè)組織中推動(dòng)對(duì)這些檢查的遵從性。
確定測(cè)試組件何時(shí)能夠滿足需要通常不僅是一門科學(xué),更是一門藝術(shù),因?yàn)槟ǔR鶕?jù)設(shè)計(jì)或測(cè)試工程師的判斷來(lái)確定。對(duì)于軟件組件,許多團(tuán)隊(duì)使用代碼覆蓋率作為更客觀的標(biāo)準(zhǔn)來(lái)衡量測(cè)試的完整性。您同樣可以將模型覆蓋率用于模型測(cè)試。覆蓋率用于衡量您在測(cè)試過(guò)程中測(cè)試了模型中(或源代碼中)的多少邏輯。修改的條件/決策覆蓋率是一種針對(duì)覆蓋率的嚴(yán)格衡量標(biāo)準(zhǔn),得到廣泛接受。
大多數(shù)質(zhì)量標(biāo)準(zhǔn)的核心原則是進(jìn)行文檔化。把需求,流程。結(jié)果記錄下來(lái)。如果不進(jìn)行記錄,則不可能跟蹤做過(guò)的事情;不可能向別人(如客戶)證明您滿足了他們的需求;也不可能重復(fù)您的結(jié)果。雖然記錄通常很單調(diào)乏味,但是有許多工具可通過(guò)生成標(biāo)準(zhǔn)報(bào)告,來(lái)幫助自動(dòng)記錄活動(dòng)。在您以后發(fā)現(xiàn)問(wèn)題或希望重復(fù)使用設(shè)計(jì)時(shí),良好的記錄可幫助您節(jié)省時(shí)間,這也是非常重要的。
代碼驗(yàn)證
這些做法是在模型級(jí)別開(kāi)始早期驗(yàn)證的良好起點(diǎn)。最后,需要實(shí)現(xiàn)并部署到產(chǎn)品化硬件上。此時(shí),代碼驗(yàn)證成為重點(diǎn)?;谀P偷脑O(shè)計(jì)可以提供哪些幫助呢?
自動(dòng)代碼生成是一種非常有用的方法。通過(guò)在模型級(jí)別驗(yàn)證您的設(shè)計(jì),然后直接從模型生成代碼,您只需要驗(yàn)證模型和代碼是否等效。這是一種理想狀態(tài)的工作流程。在實(shí)際情況中,有時(shí)不可能從模型生成需要的所有代碼。您可能使用傳統(tǒng)流程開(kāi)發(fā)了一些中間件和設(shè)備驅(qū)動(dòng)程序代碼,或是可能將舊有代碼用于某些功能。對(duì)于這些情況,可通過(guò)一些其他的最佳做法來(lái)驗(yàn)證代碼。
用戶幾乎可以在任何位置測(cè)試硬件;然而,硬件通常沒(méi)有與仿真中的測(cè)試有連接。許多因素都可能導(dǎo)致這種沒(méi)有聯(lián)系的情況:在硬件上運(yùn)行測(cè)試的小組與對(duì)設(shè)計(jì)建模的小組不是同一批人,在實(shí)驗(yàn)室中運(yùn)行的軟件與設(shè)計(jì)中的軟件也不相同。然而,當(dāng)您在模型上運(yùn)行的測(cè)試與在實(shí)驗(yàn)室中運(yùn)行的測(cè)試相同時(shí),您就可以確切地了解設(shè)計(jì)在實(shí)驗(yàn)室中的執(zhí)行情況。若要驗(yàn)證代碼是否等效于設(shè)計(jì)模型,您可以將相同的測(cè)試工具用于模型測(cè)試,來(lái)測(cè)試已編譯并在嵌入式目標(biāo)上運(yùn)行的模型軟件實(shí)現(xiàn)。同時(shí)對(duì)組件設(shè)計(jì)模型和嵌入式目標(biāo)上的代碼運(yùn)行測(cè)試是一種協(xié)同仿真步驟,稱為 PIL(處理器在環(huán))測(cè)試?,F(xiàn)在,可以使用一些工具在軟件上執(zhí)行測(cè)試(開(kāi)發(fā)人員在主機(jī)(如 PC)上創(chuàng)建的測(cè)試),同時(shí)也在嵌入式處理器上運(yùn)行測(cè)試。將嵌入式代碼與原始模型的測(cè)試結(jié)果進(jìn)行比較,可幫助您確保組件的行為在編譯和下載后保持不變,并確保代碼可正確運(yùn)行。
嵌入式代碼中的運(yùn)行時(shí)錯(cuò)誤特別難以發(fā)現(xiàn),一旦發(fā)現(xiàn)后,又難以進(jìn)行調(diào)試。這類例子包括溢出和下溢、被零除和其他算術(shù)錯(cuò)誤、超出范圍的數(shù)組訪問(wèn)、非法取消引用的指針、對(duì)非初始化數(shù)據(jù)的只讀訪問(wèn)以及危險(xiǎn)的類型轉(zhuǎn)換等。直到最近,基本上只有三種選擇可用于檢測(cè)嵌入式軟件中的運(yùn)行時(shí)錯(cuò)誤:代碼檢查、靜態(tài)分析器和試錯(cuò)法動(dòng)態(tài)測(cè)試。代碼檢查所需的人工工作量很大,通常不適用于大型的復(fù)雜應(yīng)用程序。靜態(tài)分析器可發(fā)現(xiàn)的問(wèn)題相對(duì)較少,更重要的是,無(wú)法診斷大多數(shù)源代碼。動(dòng)態(tài)(或“白盒”)測(cè)試要求您編寫并執(zhí)行大量測(cè)試用例。如果測(cè)試失敗,可能難以調(diào)試問(wèn)題?;谛问津?yàn)證的代碼驗(yàn)證工具可以證明不存在運(yùn)行時(shí)錯(cuò)誤,并可為代碼的可靠性提供強(qiáng)有力的保證。當(dāng)在開(kāi)發(fā)流程中使用代碼驗(yàn)證工具進(jìn)行測(cè)試時(shí),這些工具還可提供其他技術(shù),用于發(fā)現(xiàn)在后期測(cè)試階段中難以發(fā)現(xiàn)并需要花費(fèi)很高代價(jià)進(jìn)行更正的設(shè)計(jì)和實(shí)現(xiàn)錯(cuò)誤。
系統(tǒng)建模和仿真工具(如 Simulink)可幫助優(yōu)化設(shè)計(jì)和驗(yàn)證復(fù)雜算法的任務(wù),而無(wú)需昂貴的硬件。摒棄手工編碼、難以維護(hù)的仿真后,控制設(shè)計(jì)人員可以快速開(kāi)發(fā)復(fù)雜算法和系統(tǒng)模型,并在將算法應(yīng)用到硬件上之前測(cè)試這些算法。經(jīng)過(guò)多年經(jīng)驗(yàn)的積累,現(xiàn)在已形成了可提供自動(dòng)代碼生成的方法,以支持原型系統(tǒng)中的實(shí)時(shí)測(cè)試并在以后用于可部署的嵌入式代碼?,F(xiàn)在,基于模型的設(shè)計(jì)已廣泛應(yīng)用于各種領(lǐng)域,包括控制、圖像處理、音頻、通信和信號(hào)處理。
基于模型的設(shè)計(jì)的一個(gè)主要好處在于,我們有機(jī)會(huì)隨所有其他開(kāi)發(fā)步驟(尤其是在開(kāi)發(fā)流程早期)一起,并行地進(jìn)行嚴(yán)格驗(yàn)證和確認(rèn)?;谀P偷脑O(shè)計(jì)的采用者通過(guò)不懈的實(shí)踐已發(fā)現(xiàn)了一系列最佳做法,使用這些最佳做法可以在最大程度上獲得這種設(shè)計(jì)帶來(lái)的好處。這些做法(特別是隨模型一起開(kāi)發(fā)測(cè)試并在代碼和硬件上重復(fù)使用模型測(cè)試)可以顯著降低開(kāi)發(fā)項(xiàng)目由于在流程后期發(fā)現(xiàn)錯(cuò)誤而導(dǎo)致未能達(dá)到質(zhì)量或交付目標(biāo)的風(fēng)險(xiǎn)。
作者信息
Brett Murphy 在 The MathWorks 管理技術(shù)營(yíng)銷團(tuán)隊(duì),該團(tuán)隊(duì)負(fù)責(zé)驗(yàn)證和確認(rèn)、測(cè)試和測(cè)量、快速原型設(shè)計(jì)以及硬件在環(huán)產(chǎn)品。他畢業(yè)于斯坦福大學(xué)(位于加利福利亞州的帕洛阿爾托),持有航空航天工程學(xué)士和碩士學(xué)位。
Amory Wakefield 是 The MathWorks 的仿真和測(cè)試應(yīng)用程序的產(chǎn)品經(jīng)理。她畢業(yè)于麻省理工學(xué)院(劍橋),持有電子科學(xué)和工程學(xué)士和碩士學(xué)位。