
關(guān)注公眾號,點擊公眾號主頁右上角“ ··· ”,設(shè)置星標(biāo),實時關(guān)注智能汽車電子與軟件最新資訊

1 引言
自動駕駛汽車開發(fā)越來越重視性能、質(zhì)量和性價比,自動駕駛口碑成為新技術(shù)應(yīng)用取得市場成功的關(guān)鍵,而口碑的建立依賴于相關(guān)軟件開發(fā)流程、周期、時間和質(zhì)量。一家汽車企業(yè)只有擁有或者其軟件開發(fā)供應(yīng)商具有成熟的軟件開發(fā)團(tuán)隊、軟件開發(fā)流程、可復(fù)用的軟件流程資源庫,才能在日益激烈的自動駕駛產(chǎn)業(yè)競爭中獲得一席之地。
目前,國際上應(yīng)用于汽車行業(yè)的軟件開發(fā)成熟度評估標(biāo)準(zhǔn)主要有能力成熟度模型集成(Capability Ma?turity Model Integration,CMMI)和汽車軟件過程改進(jìn)及能力評定模型框架(Automotive Software Process Im?provement and Capacity Determination,ASPICE)。CMMI擁有全球公認(rèn)的軟件、產(chǎn)品和系統(tǒng)開發(fā)優(yōu)良實踐過程改進(jìn)模型,能夠幫助組織提升績效,具有普適性,而ASPICE標(biāo)準(zhǔn)基于軟件過程評估國際標(biāo)準(zhǔn)ISO15504,主要針對汽車行業(yè)軟件開發(fā)過程框架,是現(xiàn)今汽車企業(yè)主要依據(jù)的過程評估標(biāo)準(zhǔn)。與典型傳統(tǒng)軟件開發(fā)過程,例如線性瀑布模型相比,以V開發(fā)模式為導(dǎo)向的ASPICE軟件過程域,從客戶需求、系統(tǒng)架構(gòu)、軟件需求、軟件架構(gòu)、軟件詳細(xì)設(shè)計、單元構(gòu)建到測試驗證之間都存在一致性與雙向追溯性關(guān)系,從最初的系統(tǒng)需求分析開始,測試人員就參與進(jìn)行對應(yīng)驗證標(biāo)準(zhǔn)的設(shè)計,將設(shè)計和測試在項目開始初期就關(guān)聯(lián)起來,在整個軟件開發(fā)生命周期都有著重要的指導(dǎo)意義。
傳統(tǒng)軟件開發(fā)重視業(yè)務(wù)過程和文檔,若軟件開發(fā)人員完全按照設(shè)計文檔進(jìn)行程序開發(fā),經(jīng)過很長的開發(fā)周期后提交軟件程序,會導(dǎo)致早期錯誤可能要等到開發(fā)過程后期才能發(fā)現(xiàn),風(fēng)險與修正成本不可控制。敏捷軟件開發(fā)模式強調(diào)溝通,通過各子項目的集成和運行,構(gòu)建成上層軟件項目,軟件開發(fā)成員擁有充分的自主權(quán),可自行尋找最佳工作方式完成工作,不必拘泥于設(shè)計文檔。開發(fā)過程循環(huán)迭代,開發(fā)人員針對前期需求,盡可能早地提交一個完整可獨立運行的源程序,供測試驗證,發(fā)現(xiàn)問題后提出需求變更請求,開發(fā)人員再次按照新需求開發(fā)并提交源程序,如此循環(huán)直至軟件從整體構(gòu)架至各個細(xì)節(jié)完全符合需求,從而實現(xiàn)完美的人機結(jié)合。
敏捷方法主包括:Scrum方法,自適應(yīng)軟件開發(fā)(Adaptive Software Development,ASD),水晶方法,以及最重要的極限編程(eXtreme Programming,XP)。Scrum偏重于過程,XP則偏重于實踐,實際開發(fā)中,兩者經(jīng)常結(jié)合一起應(yīng)用。
由于汽車自動駕駛軟件的復(fù)雜性與專業(yè)性,一味遵循敏捷開發(fā),專注市場變化和客戶反饋,會對整個軟件的架構(gòu)、開發(fā)、測試造成很大的波動。控制不好,會使得項目失控,造成嚴(yán)重的質(zhì)量問題,比如Bug多,架構(gòu)不合理,易用性差,性能不佳等。除此之外,汽車軟件項目開發(fā)周期很長,很難保證開發(fā)的人員不更換,而沒有規(guī)范體系文檔就會造成在交接的過程中出現(xiàn)很大的困難。因此,采取有效方法保證過程質(zhì)量,對于提高產(chǎn)品質(zhì)量具有十分重要的意義。
為滿足自動駕駛車輛的安全性需求,根據(jù)ISO PAS 21448標(biāo)準(zhǔn),智能駕駛系統(tǒng)本身傳感器/控制器/執(zhí)行器的設(shè)計不足、性能局限在遇到一定的場景觸發(fā)條件(如環(huán)境干擾或人員誤用)時,將可能導(dǎo)致整車級失效危害,進(jìn)而威脅人身安全。究其根本,應(yīng)在軟件開發(fā)階段充分降低預(yù)期功能安全SOTIF危害事件的潛在風(fēng)險、提高軟件安全性能、明確安全邊界。因此,本文在結(jié)合傳統(tǒng)與敏捷開發(fā)流程基礎(chǔ)上,融入SOTIF對部件軟件層級的安全需求與測試驗證,合理控制軟件已知/未知風(fēng)險,開發(fā)自動駕駛軟件流程,促進(jìn)自動駕駛車輛系統(tǒng)安全提升和順利發(fā)布。
設(shè)計智能駕駛軟件產(chǎn)品開發(fā)流程如圖1所示。主要由8個階段構(gòu)成,即包括軟件需求分析、軟件架構(gòu)設(shè)計、軟件敏捷設(shè)計、軟件詳細(xì)設(shè)計和單元構(gòu)建、軟件單元驗證、軟件敏捷集成、軟件集成和集成測試及軟件合格性測試。增加軟件敏捷設(shè)計與集成活動,以應(yīng)對實際軟件開發(fā)項目中開發(fā)周期短,軟件需求預(yù)開發(fā)架構(gòu)的問題。

圖1 汽車自動駕駛安全軟件開發(fā)流程
第1階段(Step-01),軟件需求分析:
主要工作內(nèi)容:根據(jù)項目目標(biāo)與計劃,承接系統(tǒng)需求,SOTIF危害分析與項目內(nèi)各專業(yè)確認(rèn)軟件需求,進(jìn)行需求評審。
第2階段(Step-02),軟件架構(gòu)設(shè)計:
主要工作內(nèi)容:識別軟件需求,形成軟件架構(gòu)設(shè)計說明,并進(jìn)行軟件架構(gòu)設(shè)計評審。
第3階段(Step-03),軟件敏捷設(shè)計:
主要工作內(nèi)容:識別軟件敏捷設(shè)計需求,形成軟件敏捷設(shè)計說明與計劃,并進(jìn)行軟件敏捷設(shè)計評審。
第4階段(Step-04),軟件詳細(xì)設(shè)計和單元構(gòu)建:
主要工作內(nèi)容:結(jié)合敏捷設(shè)計需求,根據(jù)軟件需求和軟件架構(gòu)定義軟件詳細(xì)設(shè)計,包括任務(wù)設(shè)置、調(diào)度機制、優(yōu)先級、時序、函數(shù)接口關(guān)系、數(shù)據(jù)定義、算法策略說明,根據(jù)軟件詳細(xì)設(shè)計進(jìn)行軟件單元構(gòu)建工作,并進(jìn)行軟件詳細(xì)設(shè)計和單元構(gòu)建評審。
第5階段(Step-05),軟件單元驗證:
主要工作內(nèi)容:完成靜態(tài)檢查,編寫軟件單元測試需求文檔、測試用例,自動或手動進(jìn)行單元測試工作,并進(jìn)行軟件單元測試評審。
第6階段(Step-06),軟件敏捷集成:
主要工作內(nèi)容:完成軟件敏捷集成計劃,形成軟件敏捷集成說明,并進(jìn)行軟件敏捷集成評審。
第7階段(Step-07),軟件集成和集成測試:
主要工作內(nèi)容:按照集成計劃,完成軟件單元集成,編寫軟件集成測試需求文檔,自動或手動進(jìn)行集成測試工作,并進(jìn)行軟件集成和集成測試評審。
第8階段(Step-08),軟件合格性測試:
主要工作內(nèi)容:根據(jù)軟件需求進(jìn)行軟件合格性測試,并進(jìn)行軟件合格性測試評審。
體現(xiàn)SOTIF分析與開發(fā)過程,具體開發(fā)活動如圖2所示。

圖2?汽車自動駕駛安全軟件開發(fā)過程
本軟件開發(fā)過程體系具有ASPICE雙向追溯[的特點:
(1)縱向/橫向雙向追溯性
從上到下的追溯,便于確認(rèn)是否所有需求都執(zhí)行;從左到右的追溯,便于確認(rèn)是否所有需求都被測試;從下到上的追溯,便于發(fā)現(xiàn)哪些需求被錯誤的執(zhí)行或曲解;從右到左的追溯,通過測試的過程發(fā)現(xiàn)問題或者缺陷來源于哪個需求。
(2)需求變更定位
在出現(xiàn)新的需求或者需求變更時,通過快速追溯便于V模型從上到下、從左到右準(zhǔn)確的定位,發(fā)現(xiàn)從設(shè)計到測試整個工程開發(fā)中不同階段需求變更具體位置。
(3)評估評審
通過需求的縱向和橫向的追溯就可以知道該項目是否嚴(yán)格按照ASPICE標(biāo)準(zhǔn)流程執(zhí)行開發(fā)過程。
將敏捷開發(fā)過程融入軟件開發(fā)端與軟件測試端,軟件敏捷集成與軟件敏捷設(shè)計過程同樣具有雙向追溯性,并強調(diào)以下關(guān)鍵實踐:
(1)以人為核心
敏捷開發(fā)注重人員與溝通,只有軟件開發(fā)人員與業(yè)務(wù)人員達(dá)到事件的敏捷處理,整個軟件開發(fā)過程才能實現(xiàn)敏捷化。
(2)迭代—增量開發(fā)
整個軟件的開發(fā)過程通過迭代式開發(fā)分成若干階段,開發(fā)人員根據(jù)優(yōu)先級或風(fēng)險高低選擇需求,對程序進(jìn)行增量的設(shè)計和開發(fā)。每次迭代完成對應(yīng)一個經(jīng)過測試的最終產(chǎn)品,開發(fā)團(tuán)隊通過它獲得更多反饋,再繼續(xù)完善軟件產(chǎn)品。
(3)測試驅(qū)動開發(fā)
基本思想就是在明確要開發(fā)某個功能和在開發(fā)功能代碼之前,先編寫測試用例,思考如何進(jìn)行功能測試,然后編寫相關(guān)的代碼滿足這些測試用例,循環(huán)進(jìn)行功能添加。直到完成全部功能開發(fā)。
(4)持續(xù)集成
持續(xù)集成的主要思路是為了增加集成測試效率,將軟件開發(fā)過程后期的軟件集成分?jǐn)偟杰浖娜^程靈活進(jìn)行。
在軟件設(shè)計與測試階段,同步進(jìn)行SOTIF開發(fā)活動,對軟件開發(fā)起到安全約束的作用,對應(yīng)以下5項活動:

