詳解四種基于模型的嵌入式軟件開發(fā)、測(cè)試與驗(yàn)證方法
嵌入式軟件的開發(fā)是一項(xiàng)相對(duì)于傳統(tǒng)軟件開發(fā)而言更為復(fù)雜的任務(wù)。嵌入式軟件的特點(diǎn)是需要在硬件環(huán)境下運(yùn)行,并且往往需要考慮實(shí)時(shí)性、穩(wěn)定性和安全性等多方面的因素。因此,嵌入式軟件開發(fā)的流程和技巧也有其獨(dú)特性。
嵌入式軟件(如航空電子和汽車系統(tǒng))的設(shè)計(jì)、開發(fā)、測(cè)試和驗(yàn)證正變得越來(lái)越復(fù)雜。傳統(tǒng)的文檔驅(qū)動(dòng)式環(huán)境中,一旦開發(fā)人員之間缺乏協(xié)調(diào),軟件程序生命周期的質(zhì)量和成本就會(huì)受到嚴(yán)重影響,顯然已經(jīng)無(wú)法應(yīng)對(duì)日益復(fù)雜的嵌入式軟件生產(chǎn)。
正確使用基于模型的設(shè)計(jì)(Model-Based Design,以下簡(jiǎn)稱MBD)方法可以有效規(guī)避此類問(wèn)題:通過(guò)MBD提供的統(tǒng)一設(shè)計(jì)環(huán)境,開發(fā)人員可在軟件的整個(gè)生命周期中使用同一套模型來(lái)進(jìn)行需求驗(yàn)證、數(shù)據(jù)分析、模型可視化、測(cè)試和驗(yàn)證,并進(jìn)行最終的產(chǎn)品部署(無(wú)論是否有自動(dòng)代碼生成)。
1.MBD是什么?
MBD是一種圍繞嵌入式軟件虛擬原型搭建展開的項(xiàng)目開發(fā)方法,其技術(shù)發(fā)展是為了克服應(yīng)用于閉環(huán)控制系統(tǒng)(Closed-loop Control System)或DSP(Digital Signal Processing,數(shù)字信號(hào)處理)的嵌入式軟件設(shè)計(jì)中常見的困難和復(fù)雜問(wèn)題。
在大多數(shù)實(shí)際場(chǎng)景中,此類嵌入式軟件的設(shè)計(jì)與測(cè)試需要在物理原型和系統(tǒng)可用之前就開始。由于整個(gè)項(xiàng)目開發(fā)過(guò)程往往需要多個(gè)團(tuán)隊(duì)的廣泛參與,如果直至后期才發(fā)現(xiàn)設(shè)計(jì)和需求的錯(cuò)誤,就會(huì)導(dǎo)致項(xiàng)目周期整體延遲、成本大大增加——使用MBD就是為了在項(xiàng)目早期階段解決這些問(wèn)題,以減少后期返工。
MBD還與仿真、圖形化的生產(chǎn)能力模型相關(guān)聯(lián),能夠?qū)浖_發(fā)所涉及的每個(gè)階段加強(qiáng)驗(yàn)證與確認(rèn)過(guò)程。對(duì)嵌入式CPU(Central Processing Unit,中央處理器)或DSP上的代碼進(jìn)行驗(yàn)證是一個(gè)關(guān)鍵步驟,不僅能夠檢測(cè)算法設(shè)計(jì)轉(zhuǎn)換至C代碼過(guò)程中的缺陷,還能針對(duì)代碼編譯、二進(jìn)制代碼優(yōu)化以及CPU/DSP體系結(jié)構(gòu)的限制等問(wèn)題采取先發(fā)制人的措施。
▲基于模型的設(shè)計(jì)(MBD)概述
2.基于模型的開發(fā)和測(cè)試
在使用MBD方法時(shí),設(shè)計(jì)團(tuán)隊(duì)往往通過(guò)開發(fā)模型來(lái)分析和制定高層次的需求以及更為細(xì)致的底層需求。此類模型可具備解決方案的主要架構(gòu),但通常獨(dú)立于嵌入式目標(biāo)平臺(tái)。模型所實(shí)現(xiàn)的主要需求能夠在仿真過(guò)程中以精確的方式得到證明,并能說(shuō)明可演繹的頂層需求,通常被指定為可執(zhí)行的規(guī)范。
應(yīng)用MBD的設(shè)計(jì)和測(cè)試團(tuán)隊(duì)之間共享模型組件和相關(guān)工作,有助于進(jìn)一步確認(rèn)嵌入式軟件代碼是否符合硬件的具體要求,并在較短時(shí)間內(nèi)對(duì)代碼進(jìn)行更為集中的測(cè)試和Bug修正。
MBD的驗(yàn)證、確認(rèn)、測(cè)試模型和軟件的測(cè)試機(jī)制(任務(wù))通常被分為下列四項(xiàng):
模型在環(huán)(Model-in-Loop,MIL):驗(yàn)證算法模型是否滿足功能需求;
軟件在環(huán)(Software-in-Loop,SIL):驗(yàn)證【模型】與【模型代碼實(shí)現(xiàn)】之間的一致性;
處理器在環(huán)(Processor-in-Loop,PIL):驗(yàn)證【模型】與【模型代碼實(shí)現(xiàn)在目標(biāo)處理器上運(yùn)行】之間的一致性;
硬件在環(huán)(Hardware-in-Loop,HIL):在實(shí)際系統(tǒng)上驗(yàn)證代碼與需求功能之間的一致性。
1. MIL - 模型在環(huán)測(cè)試
從集成層面來(lái)看,基于系統(tǒng)本身的模型尤為重要。在MIL層面測(cè)試嵌入式系統(tǒng)設(shè)計(jì)意味著模型及其環(huán)境在建模框架中進(jìn)行仿真模擬,無(wú)需任何物理硬件組件的介入。這使得在開發(fā)周期的初始階段進(jìn)行測(cè)試成為可能,并能驗(yàn)證開發(fā)早期階段的需求。代碼驗(yàn)證的基準(zhǔn)主要在于通過(guò)模擬收集到的信息。
▲ MIL測(cè)試
2. SIL - 軟件在環(huán)測(cè)試
SIL層面,模型會(huì)根據(jù)嵌入式平臺(tái)的最終目標(biāo)進(jìn)行進(jìn)一步調(diào)整。控制器模型一般使用C或C++編寫(可以是自動(dòng)生成的代碼),插入到仿真環(huán)境中與仿真的被控對(duì)象一起評(píng)估。
這種驗(yàn)證方式對(duì)于驗(yàn)證由自動(dòng)生成代碼和手寫代碼(代碼需要集成并在嵌入式目標(biāo)平臺(tái)上執(zhí)行)組成的軟件組件尤其有用。SIL測(cè)試通常會(huì)重復(fù)使用MIL測(cè)試中的數(shù)據(jù)和模型結(jié)構(gòu),以檢查仿真中的代碼行為是否正確。通常,嵌入式軟件和仿真環(huán)境模型在同一臺(tái)機(jī)器上運(yùn)行。
▲ SIL測(cè)試
3. PIL - 處理器在環(huán)測(cè)試
PIL與MIL、SIL的不同之處在于其代碼在目標(biāo)微控制器或DSP上執(zhí)行:將已編譯的目標(biāo)代碼加載到目標(biāo)處理器或DSP上,然后在被控對(duì)象模型上運(yùn)行模擬以進(jìn)行驗(yàn)證。PIL可執(zhí)行大量V&V測(cè)試套件,以評(píng)估嵌入式CPU/DSP運(yùn)行控制器算法的能力。如果SIL和PIL結(jié)果之間存在差異,可對(duì)PIL目標(biāo)代碼針對(duì)定點(diǎn)精度、內(nèi)存占用或編譯器優(yōu)化標(biāo)志等部分進(jìn)行微調(diào)。
▲PIL測(cè)試
PIL可以彌補(bǔ)仿真軟件中執(zhí)行的控制器模型設(shè)計(jì)和在目標(biāo)機(jī)上執(zhí)行的實(shí)際控制器代碼之間的差距,不僅能夠識(shí)別出可能源自編譯器的錯(cuò)誤,還支持調(diào)試算法功能和評(píng)估嵌入式微控制器或DSP的性能,并可提供軟件系統(tǒng)的重要測(cè)量數(shù)據(jù),如內(nèi)存使用和執(zhí)行時(shí)間。這些數(shù)據(jù)可用來(lái)在仿真環(huán)境中微調(diào)控制器功能,并應(yīng)用于嵌入式硬件設(shè)計(jì)的早期階段。
▲PIL實(shí)際應(yīng)用
4. HIL - 硬件在環(huán)測(cè)試
PIL測(cè)試結(jié)束后的下一步動(dòng)作,通常會(huì)使用實(shí)際系統(tǒng)(或?qū)嶒?yàn)室原型)或運(yùn)行被控對(duì)象模型的實(shí)時(shí)模擬器來(lái)替換被控對(duì)象模型。例如,如果工程師正在設(shè)計(jì)直流電機(jī)速度控制器,那么控制器代碼將部署在微控制器或DSP板上,然后通過(guò)IO(輸入輸出)接口連接到真正的直流電動(dòng)機(jī)。
由于HIL測(cè)試允許在實(shí)時(shí)環(huán)境中以可管理的方式調(diào)試和評(píng)估功能測(cè)試/運(yùn)行測(cè)試,因此實(shí)現(xiàn)可靠的HIL測(cè)試通常需要用到大量的自動(dòng)化測(cè)試、日志以及硬件的接口組件。相對(duì)而言,PIL的設(shè)置相對(duì)容易,需要的硬件和軟件資源也會(huì)更少。
▲ HIL測(cè)試
四個(gè)測(cè)試手段的對(duì)比如下:
SkyEye,中文全稱天目全數(shù)字實(shí)時(shí)仿真軟件,是基于可視化建模的硬件行為級(jí)仿真平臺(tái),支持用戶通過(guò)拖拽的方式對(duì)硬件進(jìn)行行為級(jí)別的仿真和建模。SkyEye采用“面向?qū)ο蟆钡脑O(shè)計(jì)思想,將虛擬目標(biāo)系統(tǒng)上的所有組件都設(shè)計(jì)為獨(dú)立的模塊,支持通過(guò)手動(dòng)修改和界面圖形拖拽的方式快速生成虛擬目標(biāo)系統(tǒng)的“硬件配置文件”,從而快速構(gòu)建虛擬目標(biāo)系統(tǒng),達(dá)到加載和運(yùn)行二進(jìn)制目標(biāo)程序并進(jìn)行仿真測(cè)試的目的。
SkyEye目前支持仿真的處理器架構(gòu)有:ARM、DSP、POWERPC、SPARC、X86、MIPS、MCS-51、TriCore等,可支持SIL和PIL仿真測(cè)試,對(duì)嵌入式實(shí)時(shí)軟件開發(fā)極具價(jià)值。
總之,嵌入式軟件的開發(fā)流程和技巧需要我們?cè)趯?shí)踐中不斷探索和總結(jié)。只有不斷地提高開發(fā)效率和軟件的質(zhì)量,才能滿足客戶的需求。