孫寶亮,王 毅,薛 凱,紀祖赑
(空間物理重點實驗室,北京 100071)
隨著技術的發展,航天器作為我國航天技術的集中體現,有著系統復雜、研制難度高、測試檢驗流程多、質量要求高的特點[1-2]。當前形勢下,對航天器軟件系統的研制提出了更高的要求,如何實現航天器的快速裝備已成為當前工作的重點。面向裝備使用的航天器軟件系統的研制、生產相較傳統航天型號的研制,除具有更高質量要求外,還有面向使用、兼顧平時訓練、國產化的使用需求。航天軟件系統的研制側重測試數據的有效性、完整性,用戶多為工程研究人員;而面向裝備的航天器軟件系統研制則更側重可靠性、易用性以及使用的長期性,用戶多為一線操作人員。在當前形勢下,航天軟件研制模式已不能適應裝備自動化程度高、使用狀態多、長期值守的要求。如何實現航天研究研制向裝備型號研制的快速轉變,成為當下亟待解決的問題。
針對國產操作系統下,軟件產品化研制要求,本文提出一種面向測試流程自動化的軟件系統一體化設計方法,實現了在中標麒麟環境下基于QT的測發控流程自動控制軟件設計與實現。方法以兼顧頂層設計與底層實現、提高系統自動化程度為原則,開展軟件系統設計工作,通過系統頂層設計、信息流設計,逐層下沉到軟件配置項設計,識別配置項級功能點,確保軟件更改影響域最小化;通過軟件接口模塊化、通用化設計,降低軟件測試、維護成本,有效縮短軟件研制周期、提高軟件質量。此外,通過信息流設計識別關鍵控制節點、提取流程控制判據,實現了基于信息流的測發控系統自動控制技術,有效提高了測發控系統的自動化程度,降低了人員操作與判讀的介入程度,保障了系統運行的實時性、可靠性。本文以航天器某監控類軟件研制過程為例詳細說明本文所提出方法的實施過程。
傳統航天器軟件設計方法往往在電氣系統方案確定后,以電氣系統功能需求為輸入,反復迭代軟件配置項功能,該方法的缺點在于系統接口不明確、軟件功能不明晰,軟件功能設計強烈依賴系統方案設計,導致軟件設計滯后、設計反復。本文所提出方法,通過從系統級到配置項級、再到功能模塊級逐級多維統一化設計方式,實現了軟件系統各功能點的解耦,降低了由于系統變更引起的軟件維護成本。同時,由于采用統一化設計,保證了軟件系統研制質量,降低了軟件系統研制成本。本文以系統頂層需求為輸入、兼顧電氣系統方案,通過軟件系統功能需求開發、配置項功能劃分、靜態信息流設計、動態信息流設計,明確了軟件系統中各軟件配置項的功能要求,同時,依據變更影響最小化原則,指導軟件配置項設計,以某監控軟件為例,說明設計過程。
某監控軟件主要實現多個下位目標設備的監控,同時與多個外系統設備通過網絡實現通信。軟件通過接收外部設備指令并按指令要求自動控制下位目標設備完成指令動作,同時周期性將監測信息反饋給外部監控設備以圖表化方式實時輸出。軟件功能分解如圖1所示。

圖1 某監控軟件功能框圖
本文所設計軟件架構為“平臺+數據總線+組件”架構。其中,平臺完成軟件初始化、總線初始化、組件初始化、數據記錄、日志記錄以及其它公共基礎功能初始工作;數據總線為全軟件共享數據接口,設計了標準的數據交互接口;組件為具體業務模塊。軟件中,各功能模塊以標準接口接入總線,完成模塊間的數據交互的同時避免了模塊間資源的競爭與調用,避免了軟件跨線程調用和線程競爭的風險。軟件結構如圖2所示。

圖2 軟件結構框圖
軟件系統接口設計工作依據軟件配置項功能分解和控測一體化系統的要求,對軟件系統內各個配置項之間的通信接口進行了設計。
依據軟件系統功能劃分,基于接口統一化、標準化設計原則,設計了系統間、子系統內接口關系,實現了軟件配置項級的接口與實現分離,確保了軟件配置項的松耦合,同時針對各子系統設計了配置項級的邏輯架構圖。某監控軟件靜態信息流如圖3所示。

圖3 監控軟件靜態信息流設計
其中,靜態信息流說明如表1所示。

表1 某監控軟件靜態信息流說明
針對測控系統自動測試及控制需求,進一步的,梳理系統關鍵動作時序關系,開展軟件系統動態信息流設計,進一步細化軟件功能點與系統時序關系,本文針對系統間的邏輯關系、時序動態、數據判讀設計了子系統動態信息流如圖4所示。

圖4 某子系統自動化控制信息流
依據系統信息流設計流程判據文件,判據文件為系統自動化執行的依據,考慮到系統通用性和使用需求,本文設計了適用于測發控系統自動控制流程的判據管理模塊、流程配置模塊、分支執行模塊、消息通知模塊,軟件能夠根據測發控需求靈活配置,實現跨型號測發控系統流程自動控制技術,提升測發控系統的自動化程度。其中,流程配置模塊針對測控系統常用判讀邏輯—與、或、非、大于、等于、小于等基礎邏輯及其組合形成通用化流程控制邏輯配置文件,能夠適應大部分測控系統流程控制需求。
經過以上軟件系統功能分解、時序設計、功能點拆解,明確了軟件系統的工作模式和運行狀態,實現了系統數據流控制流動態設計,確保了接口設計匹配性,保證了系統設計無死角、無歧義,進而為系統的自動化控制技術提供了技術和方案支撐。在此基礎上進一步開展測發控自動控制技術研究。本項目通過梳理系統信息流間的關系結合電氣系統方案,設計了基于信息流的自動化控制方案,軟件自動控制流程如圖5所示。

圖5 某監控子系統自動化控制流程
其中,流程中主要包含外部指令、執行機構、數據判讀等關鍵動作外部指令為系統輸入,結合外系統使用及系統設計方案完成關鍵檢查點控制;執行機構為系統內部控制單元,根據指令執行相應動作;數據判讀為流程關鍵數據、指標的判讀,只有符合預置數據包絡范圍內,方可自動執行控制流程。測控系統自動控制需求源自系統方案設計,其中數據判讀結合系統信息流開展設計,綜合系統時許設置合理的判據包絡支撐后續控制流程的自動化。
軟件研制過程中,打破了系統、配置項的界限,建立以系統信息流、控制流為導向的設計模式。然而,方法的效率提升離不開軟件產品化設計,反過來細粒度軟件產品化設計能夠拓展方法的靈活性和標的性。以可重用構件為原材料,以自主研發的通用化平臺框架為基輔,實現型號軟件的快速研發和生產范式。在軟件項目管理方面,軟件采用集成項目管理模式開展統一管理,充分優化管理成本。
在軟件研制階段,軟件以功能組件為基本單位,進行“積木式”開發。軟件通過平臺功能擴展,實現軟件應用層功能。平臺提供標準公共接口,可靈活加載/卸載功能組件,且不影響軟件主體功能實現。該技術能極大程度地提高軟件產品黑盒復用率,提高代碼質量,同時能夠有效配合本文所提出方法的設計思想,實現對成熟構件的可靠性和安全性的繼承。
數據總線為軟件內部各功能組件進行數據交互的共用數據訪問模塊。該模塊設計有標準數據訪問接口,各功能組件按需訪問總線數據,同時與其它組件實現隔離,避免數據讀寫操作造成的錯誤。同時,數據總線維護總線數據結構,各組件可根據實際需要完成對數據的新建、刪除、修改等操作,總線維護數據的介入保護,避免不同線程訪問數據時造成的不穩定問題。
功能組件在軟件系統功能設計階段完成后,各軟件配置項功能既定的情況下,開展各軟件配置項需求分析,進而實現功能劃分,識別其中可重用功能,通過組件標準化實現并擴充至組織資產。可重用構件應盡可能地只規定所需的功能和性能指標,詳細描述構建的接口、配置參數、功能范圍等,允許開發者決定操作上和實現上的細節,提高構件的可重用性。
構件實現需以設計階段輸出為標的,對標功能、性能指標開展實現,并考慮提高每個構件的可復用性。重用構件的質量是開展過程中的重要一環,每個構件作為獨立的產品進行測試。對構件的測試也作為構件的一部分來管理。可重用構件實現完成后必須進行較通常軟件開發更加嚴格的代碼審查、單元測試、組裝測試和確認測試,必要時開展第三方測試。
其中,新研構件開發流程,如圖6所示。

圖6 新研構件開發流程
重用構件研制流程,如圖7所示。

圖7 重用構件研制流程
在軟件各功能組件研制完成后,軟件進入集成封裝階段。組件完成所有研制流程后進行入庫,入庫前需準備詳細的構件配套文檔。如果構建研制隨項目進行,那么在項目結束時從項目工程文檔中提取構件相關內容,完成構件配套文檔編寫,構件需根據接口規范,生成標準文件。其中構件需維護標準接口如圖8所示。

圖8 構件標準接口
當前,主流國產操作系統以中標麒麟[3-5]、銀河麒麟為代表。其中,中標麒麟是國內首款支持龍芯64位平臺的高安全等級可信的、自主可控的操作系統操作系統,兼容主流的軟硬件和自主CPU平臺,如飛騰、龍芯、申威[6-7]。與Vxworks[8-9]等操作系統不同,中標麒麟兼容主流的軟硬件和自主CPU平臺,如飛騰、龍芯、申威[10]。
目前中標麒麟可安裝的應用開發環境有Qt、Eclipse、GCC和腳本語言[11-13]。其中,Qt是由TrollTech公司出品的可跨平臺圖形用戶界面應用程序開發框架[13]。其基于C++語言的面向對象的框架,既可以開發GUI程序,也可用于開發非GUI程序,目前被廣泛應用于桌面應用、嵌入式、軍工系統等有跨平臺需求的、要與硬件交互的軟件系統中[14]。
本文采用中標麒麟5.0版、Qt5.6.2版完成案例開發。
軟件開發過程中,應完成需求分析,設計功能組件組成,區分可重用組件、新研組件;可重用組件移植,再識別軟件可重用功能組件后,需要將基于windows平臺下編寫的功能組件,編寫適用于QT環境的.pro文件,在目標平臺上重新編譯,實現組件的移植。總結如下:
1)需求分析,完成軟件功能劃分,如有需要開發驅動加載至系統內核;
2)使用Qt Creator等開發環境開發軟件界面及邏輯代碼實現,由于中標麒麟目前支持集成開發環境較少,當前主流集成開發環境為Qt Creator;
3)可執行文件或動態鏈接庫(.so)文件,軟件完成開發后,需將各功能組件編譯生成可調用執行的文件,同時生成軟件的可執行文件,打包發布軟件。
軟件發布階段,需將用戶程序編譯后與所依賴的動態鏈接庫、配置文件等文件一起打包生成可安裝程序,由于中標麒麟在X86平臺、龍芯平臺下編譯生成的程序具備廣泛通用性,因此,需分別在不同目標平臺重新編譯并分別發布軟件安裝包,其主要工作內容y有:
1)release文件文件生成,復制release文件內所有文件至新建文件夾,重命名,并建立pack.sh腳本文件和.h文件。
2)編寫pack.sh文件,主要為需要發布的程序名稱和創建文件夾位置等信息,例如:
!/bin/sh
Exe=“mynewName”
Des=/mypath/mynewName
Deplist=(lddexe|awk’{if(match(3,”/”)){printf(“%s”),3}}’)
cp deplist des
3)在終端中運行pack.sh指令,執行文件所依賴的鏈接庫會自動復制到項目文件夾中。在其他龍芯平臺上運行項目.h腳本文件即可啟動軟件。
本文所述一體化軟件設計方法,能夠在系統設計之初考慮軟件配置項功能分配、接口定義,在縮短系統設計反復、避免冗余迭代的同時,縮短系統軟件研制周期降低軟件成本,本方法在某項目中已成功應用,相比WPS軟件設計方法,在相同功能點的情況下,本項目中統計數據如表2所示。數據來源于其它型號類似軟件研制過程數據,其中,代碼缺陷率以第三方測試檢出問題數量統計。

表2 本項目相關數據統計情況
本文所提出方法以系統需求為輸入依據,開展頂層需求分解,實現了軟件系統的功能劃分,通過接口設計、信息流設計進一步細化了軟件功能點與系統的關系,解耦各功能點的耦合關系,實現了變更影響最小化設計,提高了軟件系統質量。從頂層設計到底層實現的設計思路,解決了由于系統需求傳遞不準確導致的設計反復問題,有效提升了型號軟件研制效率。此外,采用多維逐級分解的設計思路,在進行系統設計的同時,形成了軟件系統自動化控制依據,通過軟件接口模塊化、通用化設計解耦了不同流程判據不同的問題,實現了測發控系統的自動化控制技術,同時為豐富自主可控軟件生態環境提供技術儲備,為未來基于國產軟硬件平臺的軟件研制提供可借鑒案例。