作者 |蔡喁上海控安可信軟件創(chuàng)新研究院副院長
版塊 |鑒源論壇 · 觀擎
01機載軟件過程保證的目的和背景
民機機載軟件研制過程一直是行業(yè)內(nèi)公認的要求最為嚴苛、開發(fā)驗證難度最大的軟件開發(fā)實例之一。由于其高安全以及嚴格的政府監(jiān)管特性,使得傳統(tǒng)其他領(lǐng)域的軟件開發(fā)人員往往難以適應(yīng)。這里有必要分析和解釋民用飛機機載軟件體系下的語境和對過程的基本要求出發(fā)點。
1.1 機載軟件的研制過程僅指從嚴密的系統(tǒng)需求定義到代碼實現(xiàn)和集成的過程
由于飛機自身層次化的研發(fā)體系存在,以及民用飛機對功能安全的苛刻要求,民用飛機體系下軟件研制活動實際上包括傳統(tǒng)軟件工程的需求收集和系統(tǒng)/產(chǎn)品級驗證活動。民機工程中的軟件驗證過程起自經(jīng)過確認,完整、準確、無二義性的系統(tǒng)需求。任何系統(tǒng)需求方面的錯誤和不完善則應(yīng)退回到上級過程進行,任何軟件設(shè)計過程中對系統(tǒng)需求的補充,則也不應(yīng)由軟件工程師決定其存在合理性。
產(chǎn)生這一現(xiàn)象的原因在于民機整體研制過程中,非常強調(diào)對需求和設(shè)計的確認、分析和安全性工作。而幾乎所有的確認(確定功能和要求的合理性)以及安全性工作都必須充分結(jié)合使用條件和使用場景開展。大家可能還記得本系列第一篇中所描述的民用飛機安全性相關(guān)工作介紹。而民用飛機的設(shè)計,實際上并不是最求極致的正確,而是根據(jù)所能產(chǎn)生的安全影響提出相應(yīng)的要求。在機載軟件設(shè)計層次,實際上并不能充分理解其所提供的飛機級功能及其使用場景,因此民機研制者通常將軟件定義為只需要按照要求的功能和性能實現(xiàn)軟件代碼,并確定可執(zhí)行目標代碼能夠在預(yù)期的目標機環(huán)境下正確實現(xiàn)分配給他的功能即可。
1.2 民機機載軟件過程及其適航評估關(guān)注的軟件缺陷種類
在上述這種語境下,機載軟件的缺陷很大程度上被理解為是由于人為錯誤。這種人為錯誤發(fā)生的誘因可能是人的認識水平、理解能力、勞累疲憊、利益考慮等諸多方面。這種誘因可能導(dǎo)致軟件需求的問題、軟件設(shè)計的問題、軟件編碼的問題、軟件質(zhì)量的問題。這些問題表現(xiàn)出來可能是軟件與硬件的不兼容,軟件不能滿足用戶的預(yù)期用途,軟件在邊界輸入上不能正確響應(yīng),軟件結(jié)構(gòu)復(fù)雜帶來的維護和擴展問題,軟件能力不能滿足負載和容量壓力。這些問題可以列舉很多,但歸根結(jié)底,軟件要么對輸入沒有進行正確的理解,要么技術(shù)方案出現(xiàn)了問題,要么自身的研發(fā)出現(xiàn)了問題。以上的這些軟件缺陷或者錯誤在軟件運行之后其發(fā)生的方式或者暴露的原因,不具有偶然性,一定是在滿足一定的條件下才能夠發(fā)生。這種軟件的錯誤不像某些硬件失效那樣,會表現(xiàn)為一定的中間狀態(tài),軟件的錯誤不會介乎于好與不好之間的無法定性的狀態(tài)。所以軟件的錯誤在統(tǒng)計學(xué)上不呈現(xiàn)任何的規(guī)律。
鑒于軟件錯誤的發(fā)生一定是滿足一定的觸發(fā)條件才能發(fā)生。因此,這種錯誤的存在可以得到人為的控制而減少。不像硬件的失效,硬件的失效并不因為人為的努力而不會發(fā)生,其更多的是一種物理或者化學(xué)現(xiàn)象,是一種自然科學(xué)上的必然現(xiàn)象。所以硬件的不能滿足要求,是一種失效,而非錯誤。硬件失效則呈現(xiàn)統(tǒng)計規(guī)律,統(tǒng)計學(xué)上稱之為失效概率。軟件的錯誤和硬件的失效在機載系統(tǒng)上的處理截然不同。硬件的失效要求滿足失效率的要求,對于可能造成單點失效的硬件,則必須設(shè)置相應(yīng)的冗余、備份手段。軟件錯誤的防范在機載領(lǐng)域則應(yīng)用過程保證的方法。通過較少引入錯誤的機會,提高檢出錯誤的能力,來規(guī)范軟件的質(zhì)量要求。
1.3 機載軟件過程保證的基本出發(fā)點
過程保證以層次化方法為核心,通過劃分軟件的研發(fā)層次,以不同的視角和角色開發(fā)軟件生命周期數(shù)據(jù)。軟件的開發(fā)不能一蹴而就,必然是從系統(tǒng)視角到軟件視角,軟件視角是一種以審視軟件輪廓和外部行為的黑盒角度。軟件黑盒被進一步打開,軟件模塊及框架和邏輯被明確出來。當(dāng)軟件框架和框架內(nèi)部子模塊的行為被充分細化,此時才可走向編程語言及編譯鏈接。簡單來講,是一種外部-內(nèi)部-實現(xiàn)-可執(zhí)行的層次化框架。這種層次化方法,避免編碼人員的自由發(fā)揮,通過軟件架構(gòu)和低級需求的設(shè)計,表面軟件代碼行為與外部要求的不一致;這種層次化方法,通過設(shè)置軟件高級需求,對軟件的預(yù)期和利益人意見進行匯總和權(quán)衡,避免了軟件實現(xiàn)與軟件預(yù)期的不匹配。因此,機載軟件為了保證軟件本身與系統(tǒng)或設(shè)備需求的一致性,設(shè)置了目前呈現(xiàn)出來的研發(fā)層次。
1.4 設(shè)計的顆粒度、層次依據(jù)和界面原則
過程保證以界面原則作為特定層次顆粒度/模塊化定義的依據(jù)。拿一個通常算賬使用的簡單計算器來舉例講,劃分輸入模塊、處理模塊、輸出模塊是一種顆粒度,劃分機械鍵盤、防抖模塊、計算模塊、存儲模塊、電源模塊、顯示處理和液晶模塊等也是一種顆粒度的定義方式。其實這種顆粒度的不同定位,就是一種何為內(nèi)何為外的界面劃分。對于軟件高級需求來說這種界面可以按照不同的業(yè)務(wù)流程劃分,也可以按照不同的任務(wù)系統(tǒng)進行劃分,也可以按照面向外部交互角色進行劃分。對于軟件低級需求來講,這種界面可以按照數(shù)據(jù)流向進行劃分、可以按照更為細致的服務(wù)或者功能進行劃分,可以按照業(yè)務(wù)步驟進行劃分。這種界面決定了顆粒度的大小。界面原則可以保證需求、設(shè)計、代碼各層次內(nèi)部組合和解耦的合理性,也對該層次抽象程度的合理性進行定義。
過程保證以內(nèi)外關(guān)聯(lián)為界面原則的依賴性策劃依據(jù)。內(nèi)外關(guān)聯(lián)的原則是將那些牢固的不易變化的界面關(guān)系明確為模塊間的外部耦合關(guān)系,將那些內(nèi)部可靈活處置的關(guān)系內(nèi)化為內(nèi)部耦合。外部耦合宜松,內(nèi)部耦合宜緊。模塊功能內(nèi)聚,則不會失去聚焦,不會偏離模塊的中心任務(wù);模塊間關(guān)聯(lián)松散,則模塊間的開發(fā)與維護都相對便捷,不會有過多顧慮。對于每個層次的內(nèi)部需求/設(shè)計之間的關(guān)聯(lián)關(guān)系,有不同的劃分方法,正如同統(tǒng)一建模語(Unified Modeling Language,UML)將類間關(guān)系劃分為關(guān)聯(lián)、泛化、聚合和組合一般,依據(jù)這種關(guān)聯(lián)原則的定義,將上下游、同層間的需求設(shè)計關(guān)系進行梳理和凈化,進一步將需求和設(shè)計的形式與內(nèi)容進行雕琢。
02機載軟件的開發(fā)過程
在軟件開發(fā)過程中,DO-178C定義了如下四個子過程:
(1)軟件需求過程:該過程的輸入是分配給軟件的系統(tǒng)需求,主要輸出是軟件系統(tǒng)的高級需求(HLR)。它包含了軟件的功能需求、性能需求、軟硬件接口和安全相關(guān)需求等內(nèi)容。
(2)軟件設(shè)計過程:該過程的輸入是軟件高級需求、軟件開發(fā)計劃和軟件設(shè)計標準,主要輸出是設(shè)計描述,包括軟件架構(gòu)和低級需求(LLR)。
(3)軟件編碼過程:這一過程根據(jù)軟件低級需求和軟件架構(gòu)編寫軟件的源代碼。過程的主要輸出結(jié)果是源碼和目標碼。
(4)軟件集成過程:該過程對源碼和目標碼進行編譯、鏈接,并加載到機載系統(tǒng)或設(shè)備中。該過程應(yīng)包含軟件集成和軟/硬件集成兩個子過程。
下圖給出了DO-178C標準中系統(tǒng)需求和軟件開發(fā)四個過程之間的關(guān)系。
圖1 DO-178C開發(fā)過程
軟件開發(fā)過程在DO-178C中分為四個階段,這四個子階段的劃分要求保證軟件行為的整體性、內(nèi)在模塊之間的協(xié)調(diào)性、內(nèi)部耦合之間的正確性、內(nèi)部異常與錯誤之間的隔離性、上級功能與下層資源分配之間的合理性和適當(dāng)裕度,同時還要兼顧到軟件的效率。這四個子階段的劃分可以從軟件行為到結(jié)構(gòu),再到編程語言的轉(zhuǎn)換,也可以是從軟件能力到軟件規(guī)格,再到軟件實現(xiàn)的轉(zhuǎn)換,也可以是去粗求精、去偽存真的不斷迭代過程,還可以是更為復(fù)雜的從外在到多視角描述肢解系統(tǒng)需求的過程。但是不管怎樣,這是一個從整體出發(fā)到各個部分,然后再到整體的一個開發(fā)過程。層次化的步進是為了順利完成視角的轉(zhuǎn)換。每個層次的切割和分配是功能聚焦和開發(fā)人員關(guān)注點聚焦的現(xiàn)實需要。在這個過程中,復(fù)雜度隨著模塊、組件、單元的降維,開發(fā)難度不斷降低,但是軟件整體的行為卻變得越來越不受控。在軟件開發(fā)不斷的開發(fā)過程中,仍然有一種總體的行為變得尤為重要,仍有一個角色在以總體的責(zé)任性視角審視各個實體的綜合行為。所以在這四個子階段的實施過程中,要么前期規(guī)劃非常明確,各個部分的定義在頂層需求中已經(jīng)框定,要么在演進過程中,總是有一個全局考慮的機制在發(fā)揮作用。否則局面將變得不可收拾。
03機載軟件的綜合過程
在軟件綜合過程中,DO-178C又包含如下四個過程:
(1)軟件驗證過程
該過程由軟件驗證計劃定義,用于檢測和報告在軟件開發(fā)過程中可能引入的錯誤,而錯誤的消除屬于軟件開發(fā)過程的活動;
(2)軟件構(gòu)型管理過程
該過程由軟件構(gòu)型管理計劃定義,與其它軟件生命周期過程協(xié)同執(zhí)行,其主要功能包括:
● 用于在軟件生命周期中提供確定的、可控的軟件構(gòu)型;
● 提供可執(zhí)行目標代碼的復(fù)制能力,當(dāng)需要檢查和修改時可快速復(fù)制;
● 在軟件生命周期中提供過程輸入/輸出控制能力,保證過程活動的一致性和可重復(fù)性;
● 通過控制構(gòu)型項、建立構(gòu)型基礎(chǔ),提供用于走查、狀態(tài)判斷、修改控制的節(jié)點;
● 提供控制,保證所有問題都被處理,所有修改都被記錄、提交和實現(xiàn);
● 通過控制軟件生命過程的輸出提供軟件的證明;
● 輔助判斷軟件產(chǎn)品與需求是否兼容;
● 保證構(gòu)型項維護了加密、恢復(fù)和控制數(shù)據(jù)等;
(3)軟件質(zhì)量保證過程
該過程由軟件質(zhì)量保證計劃定義,用于審核軟件的生命周期過程及其輸出,確保其目標被實現(xiàn),錯誤被檢測、評估、跟蹤和解決,以及保證其它軟件生命周期數(shù)據(jù)能夠滿足軟件需求。軟件質(zhì)量保證過程用于提供相關(guān)證據(jù)來表明經(jīng)過軟件生命周期生產(chǎn)的軟件產(chǎn)品與需求相一致,保證這些過程的執(zhí)行與軟件計劃和標準一致。
(4)審定聯(lián)絡(luò)過程
該過程用于在整個軟件生命周期中建立應(yīng)用程序與證明授權(quán)之間的通訊和理解,輔助軟件的證明過程。
在機載軟件開發(fā)過程中,軟件綜合過程與軟件開發(fā)過程是并行執(zhí)行的。在整個軟件生命周期中,以軟件開發(fā)過程為主線,在其各個子過程中實施相應(yīng)的軟件綜合過程,其執(zhí)行根據(jù)獨立性要求等可由兩個以上的不同團隊來完成,實現(xiàn)軟件開發(fā)與軟件綜合的分離。軟件生命周期中各個過程的關(guān)系可用下圖表示,圖中軟件計劃過程是所有過程的起始點,根據(jù)軟件計劃過程制定的各種軟件計劃執(zhí)行相應(yīng)的軟件生命周期活動。
圖2 DO-178C軟件生命周期方陣
綜合過程也稱之為整體過程,預(yù)示其長期性和伴生性。這種綜合性還體現(xiàn)在其支持性,其是保證在日復(fù)一日的開發(fā)過程中的軟件中間產(chǎn)品的質(zhì)量特性、清晰的數(shù)據(jù)變化路徑、過程和產(chǎn)品的監(jiān)督監(jiān)理。綜合過程的設(shè)置不但適用于軟件,對于其它層級甚至其它行業(yè)都是非常必要的,其是現(xiàn)代工業(yè)活動長期實施過程中的寶貴經(jīng)驗總結(jié)。
筆者在這里想到豐田的精益管理,其中蘊含的思路也對綜合過程的設(shè)置給出了一些提示和指導(dǎo)。例如透明的信息與數(shù)字看板,軟件項目研制中的構(gòu)型管理和質(zhì)量保證其實就為實現(xiàn)這一目的,提供了良好的手段。通過構(gòu)型管理和質(zhì)量保證,可以為管理層提供診斷、監(jiān)控、管理的依據(jù)。管理層要實施有效的管理,總是離不開管控范圍、問題定位、解決措施、效果統(tǒng)計等這些俗套的環(huán)節(jié)或者要素。軟件綜合過程的這些項目可以系統(tǒng)性的提供這種手段,如構(gòu)型項的梳理、構(gòu)型項狀態(tài)的管控、問題報告機制和構(gòu)型變更管理機制等,為項目的范圍狀態(tài),人力時間資源的投入等提供決策依據(jù)。精而有益、由精益而形成良好循環(huán),最終質(zhì)變。這與習(xí)近平總書記提到的精準思維有異曲同工之妙。
當(dāng)然,軟件適航本身堅持的更多是一種底線思維。如果軟件研制企業(yè)想在人力、進度、成本上取得進一步的收益,還必須在流程優(yōu)化、技術(shù)視野、管理與激勵機制上做出更廣闊層面上的革新。
參考資料:
[1]《機載軟件適航符合性教程》,2022,ISBN:9787313241344,上海交通大學(xué)出版社.
[2] Software Considerations in Airborne Systems and Equipment Certification(DO-178C),RTCA,2011.
審核編輯黃宇
-
軟件
+關(guān)注
關(guān)注
69文章
5114瀏覽量
88883
發(fā)布評論請先 登錄
硬件輔助驗證(HAV) 對軟件驗證的價值
中航光電民機與工業(yè)互連產(chǎn)業(yè)園投產(chǎn)
FPGA EDA軟件的位流驗證

“Quantum Origin”成首個獲NIST驗證的軟件量子隨機數(shù)生成器
EPSON的IMU M-G330PDG0可應(yīng)用于測繪巡檢機載掛載

愛普生M-G330PDG在測繪巡檢機載掛載的應(yīng)用

快速部署原型驗證:從子卡到調(diào)試的全方位優(yōu)化

ECU電控軟件開發(fā)及測試介紹

潤和軟件啟動鯤鵬原生開發(fā)合作
軟件開發(fā)分為多少個階段
無人機機載高光譜成像系統(tǒng)的應(yīng)用及優(yōu)勢

評論