如今,大多數(shù)為工程應(yīng)用開發(fā)軟件的團(tuán)隊(duì)都意識(shí)到了傳統(tǒng)開發(fā)方法(瀑布式)的缺點(diǎn)。這包括在項(xiàng)目后期發(fā)現(xiàn)缺陷和設(shè)計(jì)問題,無(wú)法適應(yīng)需求的更改,以及交付的系統(tǒng)不滿足客戶需求的風(fēng)險(xiǎn)。為了克服這些缺點(diǎn),許多團(tuán)隊(duì)采用了將敏捷方法與基于模型的設(shè)計(jì)相結(jié)合的開發(fā)流程。
有關(guān)基于模型的設(shè)計(jì)和敏捷方法的研究表明,對(duì)工程應(yīng)用而言,基于模型的設(shè)計(jì)不僅是敏捷開發(fā)的有效補(bǔ)充,甚至有時(shí)使敏捷開發(fā)成為可能。像敏捷開發(fā)一樣,基于模型的設(shè)計(jì)最初是為了支持快速迭代,其還滿足了系統(tǒng)工程方面的挑戰(zhàn),而這些挑戰(zhàn)不是敏捷開發(fā)單獨(dú)能夠解決的:
如何在不使用設(shè)備的情況下進(jìn)行早期測(cè)試
如何管理工程系統(tǒng)的復(fù)雜性
如何降低在昂貴的硬件上測(cè)試未經(jīng)驗(yàn)證的軟件的風(fēng)險(xiǎn)
如何滿足功能安全及其他標(biāo)準(zhǔn)的要求,包括 DO-178B/C 和 ISO 26262
本文通過一個(gè)自適應(yīng)巡航控制示例,解釋基于模型的設(shè)計(jì)是如何支持敏捷開發(fā)的核心價(jià)值體系。該示例結(jié)合了基于模型的設(shè)計(jì)、敏捷方法和 Scrum 框架。
敏捷開發(fā)和基于模型的設(shè)計(jì)——基礎(chǔ)
軟件敏捷開發(fā)方法建立在2001年出版的《敏捷宣言》中概述的核心價(jià)值體系和原則之上。如今,敏捷開發(fā)最廣泛使用的框架之一是Scrum。在Scrum中,開發(fā)以稱為sprint的一系列周期進(jìn)行,在每個(gè)周期中,開發(fā)團(tuán)隊(duì)在項(xiàng)目待辦事項(xiàng)列表中的一個(gè)子集上工作一段時(shí)間(通常是一到兩個(gè)星期或者一個(gè)月)。在每個(gè)sprint中,開發(fā)團(tuán)隊(duì)對(duì)軟件進(jìn)行開發(fā)、測(cè)試、集成,最后對(duì)可工作的軟件設(shè)計(jì)文檔(圖1)。
基于 Scrum 框架的敏捷開發(fā)
基于模型的設(shè)計(jì)是一種以模型為中心的系統(tǒng)開發(fā)方法?;谀P偷脑O(shè)計(jì)在整個(gè)開發(fā)過程中使用模型作為設(shè)計(jì)載體,而不是依賴物理原型和文本規(guī)范的在團(tuán)隊(duì)內(nèi)傳遞。模型包含了與系統(tǒng)行為相關(guān)的所有組件——包括算法、控制邏輯、物理組件和環(huán)境組件。一旦模型被開發(fā)(細(xì)化)出來,就可以用其來生成代碼(C/C++、HDL或結(jié)構(gòu)化文本)、報(bào)告和其他類型的文檔?;谀P驮O(shè)計(jì)的核心要素包括系統(tǒng)級(jí)和組件級(jí)的設(shè)計(jì)和仿真、自動(dòng)代碼生成,以及持續(xù)測(cè)試與驗(yàn)證。
將敏捷開發(fā)的核心價(jià)值體系映射至基于模型的設(shè)計(jì)
敏捷宣言定義了軟件開發(fā)的四個(gè)核心價(jià)值觀:
個(gè)體和互動(dòng)高于流程和工具
工作的軟件高于詳盡的文檔
客戶合作高于合同談判
響應(yīng)變化高于遵循計(jì)劃
宣言作者指出,“高于”并不意味著“否定”。他們所倡議的是開發(fā)要素要有所側(cè)重:“雖然右邊的開發(fā)要素也有價(jià)值,但我們更注重左邊的要素?!?/p>
讓我們看看這些敏捷方法的價(jià)值觀如何映射到基于模型的設(shè)計(jì):
專注個(gè)體和互動(dòng)
基于模型設(shè)計(jì)的流程和工具——特別是建模和仿真——能夠促進(jìn)個(gè)人和團(tuán)隊(duì)之間進(jìn)行高效的交互。模型可以直接通過Simulink,報(bào)告或web頁(yè)面進(jìn)行共享, 使所有相關(guān)人員能夠使用模型作為一個(gè)共同的工作參考點(diǎn),避免產(chǎn)生分歧。仿真結(jié)果清晰可見,有助于設(shè)計(jì)決策、Scrum規(guī)劃以及促進(jìn)相關(guān)人員的討論。
注重客戶合作
客戶合作是敏捷方法的核心。每個(gè)sprint以計(jì)劃會(huì)議開始,以評(píng)審會(huì)議結(jié)束,在會(huì)議上,客戶經(jīng)常被邀請(qǐng)?zhí)峁┹斎?。建模和仿真不僅支持高效的客戶合作,還支持跨團(tuán)隊(duì)、跨領(lǐng)域和跨學(xué)科的合作。采用MathWorks公司基于模型的設(shè)計(jì)工具,來自硬件設(shè)計(jì)、系統(tǒng)設(shè)計(jì)、功能和組件開發(fā)的工程師們使用共同的語(yǔ)言/平臺(tái),可以集中精力在一起工作,而不必?fù)?dān)心工具兼容問題。
關(guān)注可工作的軟件
對(duì)于采用敏捷開發(fā)的團(tuán)隊(duì)來說,基于模型設(shè)計(jì)的主要優(yōu)勢(shì)之一是,即使沒有嵌入式目標(biāo)硬件、被控對(duì)象實(shí)物、傳感器或其他硬件,也能夠在最初的sprint中開發(fā)出一個(gè)可工作的系統(tǒng)。通過仿真驗(yàn)證后的Simulink模型可以作為可工作的軟件服務(wù)于整個(gè)項(xiàng)目的開發(fā)。模型作為系統(tǒng)開發(fā)過程中的可執(zhí)行規(guī)范,在早期的sprint中,當(dāng)硬件還不存在時(shí),作為硬件測(cè)試結(jié)果的替代,也可以與客戶共享模型的仿真結(jié)果,以用于評(píng)估項(xiàng)目進(jìn)度、尋求支持或計(jì)劃下一次sprint。模型還提供了一種清晰而便捷的方法來評(píng)估項(xiàng)目進(jìn)度。隨著模型的細(xì)化,可以用其生成代碼,用于軟件在環(huán)(SIL)、處理器在環(huán)(PIL)和硬件在環(huán)(HIL)測(cè)試,以及用于實(shí)時(shí)原型和生產(chǎn)系統(tǒng)。
模型還可以作為文檔的載體。在基于模型的設(shè)計(jì)中,文檔是模型設(shè)計(jì)過程的輸出,而不是一個(gè)單獨(dú)的任務(wù),文檔和報(bào)告可以根據(jù)需要從模型直接生成。
注重響應(yīng)變化
瀑布開發(fā)的一個(gè)主要障礙是不能對(duì)不斷演化的需求和條件做出足夠的反應(yīng)。敏捷開發(fā)和基于模型的設(shè)計(jì)解決了這一缺陷,使團(tuán)隊(duì)能夠更有效地應(yīng)對(duì)變化。對(duì)于工程應(yīng)用軟件中的任何重大更改,使用基于模型設(shè)計(jì)的工程師可以修改模型,然后簡(jiǎn)單地重新生成代碼。在實(shí)現(xiàn)任何更改之前,開發(fā)團(tuán)隊(duì)可以執(zhí)行假設(shè)分析來確定適應(yīng)特定更改請(qǐng)求的最佳方法。對(duì)模型進(jìn)行更改后,工程師可以進(jìn)行回歸測(cè)試,以確保更改不會(huì)為系統(tǒng)引入意外行為。當(dāng)模型與需求相鏈接后,開發(fā)團(tuán)隊(duì)還可以進(jìn)行影響分析,以了解對(duì)模型其中一個(gè)部分的更改將如何影響其他部分。
案例——
將敏捷開發(fā)與基于模型的設(shè)計(jì)相結(jié)合
開發(fā)自適應(yīng)巡航控制器
在這個(gè)例子中,某汽車工程團(tuán)隊(duì)正在開發(fā)一套具有傳感器融合算法的自適應(yīng)巡航控制系統(tǒng)軟件。該系統(tǒng)融合了車載雷達(dá)和視覺傳感器的輸入數(shù)據(jù),識(shí)別出最重要的目標(biāo)及其與當(dāng)前車輛的距離,以調(diào)整車速并保持安全距離。
項(xiàng)目中,其中一組工程師負(fù)責(zé)開發(fā)控制算法,另一組工程師負(fù)責(zé)開發(fā)駕駛場(chǎng)景和傳感器數(shù)據(jù)綜合算法。這些合成數(shù)據(jù)將使工程師能夠在獲得實(shí)際的傳感器數(shù)據(jù)之前開發(fā)和測(cè)試算法。在開發(fā)的早期階段,使用合成數(shù)據(jù)進(jìn)行仿真可以為設(shè)計(jì)決策提供信息,例如車內(nèi)傳感器的類型、數(shù)量和位置。
在第一個(gè)sprint中,每個(gè)子團(tuán)隊(duì)(或工程團(tuán)隊(duì))都對(duì)各自負(fù)責(zé)的子系統(tǒng)進(jìn)行建模,使用共享的系統(tǒng)級(jí)的Simulink模型來協(xié)調(diào)各自的工作(圖2)。甚至在這個(gè)初期階段,工程師們可以運(yùn)行仿真以觀察在不同工況下控制器的行為。在編寫或生成代碼之前,工程師們可以調(diào)試控制器,識(shí)別出要優(yōu)化的參數(shù),并利用可工作的系統(tǒng)模型來可視化關(guān)鍵性能指標(biāo)。
帶傳感器融合算法的自適應(yīng)巡航控制系統(tǒng)的Simulink模型
在隨后的sprint中,開發(fā)團(tuán)隊(duì)基于客戶反饋對(duì)模型進(jìn)行改進(jìn)或增強(qiáng)——例如,通過調(diào)整安全跟蹤距離或改變車輛加速或減速的速率——對(duì)這些參數(shù)進(jìn)行優(yōu)化,并生成代碼,部署到ECU上。生成的代碼可以按照原樣使用,也可以作為較大系統(tǒng)的一部分與已有代碼集成。Jenkins提供的持續(xù)集成(CI)功能可以用來不斷檢查生成代碼與手工代碼的集成活動(dòng), 比如運(yùn)行模型測(cè)試,檢查建模規(guī)范的符合性,對(duì)生成的代碼進(jìn)行測(cè)試等。所有這些活動(dòng)的結(jié)果都會(huì)被自動(dòng)報(bào)告,以跟蹤進(jìn)度,并且提供給不使用開發(fā)工具的相關(guān)人員。
自適應(yīng)巡航控制模型的仿真結(jié)果
在之后的sprint中,開發(fā)團(tuán)隊(duì)加入了更嚴(yán)格的驗(yàn)證和確認(rèn)活動(dòng),包括SIL、PIL或HIL測(cè)試,以確保設(shè)計(jì)滿足需求。此外,開發(fā)人員還檢查模型和代碼是否符合已建立的標(biāo)準(zhǔn)和指南,使用靜態(tài)分析和形式化方法來證明軟件不存在嚴(yán)重的運(yùn)行時(shí)錯(cuò)誤,并為標(biāo)準(zhǔn)的認(rèn)證生成認(rèn)證報(bào)告及其他所需文件。
隨著項(xiàng)目的進(jìn)行,客戶需求可能會(huì)發(fā)生變化。例如,客戶可能要求模型使用預(yù)測(cè)控制,而不是經(jīng)典的控制算法,因?yàn)橄冗M(jìn)的MPC(模型預(yù)測(cè)控制)控制器使車輛能夠?qū)?chǎng)景中其他車輛的激進(jìn)動(dòng)作更好地做出反應(yīng)。由于在這個(gè)項(xiàng)目中使用了系統(tǒng)模型,算法團(tuán)隊(duì)可以很容易地用新開發(fā)的模型預(yù)測(cè)控制器替換原來的控制算法,并保持模型的其余部分不變。團(tuán)隊(duì)重新運(yùn)行仿真并與客戶分享結(jié)果,進(jìn)而就是否繼續(xù)進(jìn)行設(shè)計(jì)更改還是恢復(fù)到原先的控制算法設(shè)計(jì)做出更好的決定。
該團(tuán)隊(duì)在其敏捷開發(fā)工作流中使用了基于模型的設(shè)計(jì),并且在涉及到具體硬件之前就交付了可以工作的軟件。建模和仿真使得團(tuán)隊(duì)能夠根據(jù)客戶反饋不斷改進(jìn)設(shè)計(jì),甚至在項(xiàng)目后期適應(yīng)重大的需求更改。
-
控制器
+關(guān)注
關(guān)注
114文章
17113瀏覽量
184319 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91884
發(fā)布評(píng)論請(qǐng)先 登錄
知識(shí)分享 | 敏捷方法在基于模型的軟件開發(fā)項(xiàng)目中的應(yīng)用

大模型推理顯存和計(jì)算量估計(jì)方法研究
提高SEA模型PBNR計(jì)算精度的方法及策略

FA模型的ServiceAbility的切換介紹
FA模型綁定Stage模型ServiceExtensionAbility介紹
Stage模型綁定FA模型ServiceAbility的方法
Stage模型啟動(dòng)FA模型PageAbility方法
KaihongOS操作系統(tǒng)FA模型與Stage模型介紹
IBIS模型中的Corner參數(shù)處理

評(píng)論