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