劉軍
(中國航天科工集團第二研究院七〇六所 北京市 100854)
隨著裝備信息化程度的提升,裝備的“軟件密集型系統(tǒng)”特征日益凸顯,系統(tǒng)的軟件組成復雜,一般都會包含多達幾十個處理器軟件配置項以及若干個FPGA/CPLD軟件配置項。軟件呈現(xiàn)“規(guī)模龐大、結構復雜、一體化綜合”的趨勢,為適應未來戰(zhàn)爭對信息化、網絡化、體系化使用的需求,對互聯(lián)互通互操作提出了更高要求。
然而,目前對裝備的軟件測評仍然以單一配置項為主,軟件系統(tǒng)層次的需求分析和架構設計,以及系統(tǒng)級測試驗證都是薄弱環(huán)節(jié)。近幾年裝備軟件定型測評數據分析表明,在完整、充分的配置項測試后,裝備系統(tǒng)級測試依然能發(fā)現(xiàn)不少涉及系統(tǒng)層面的軟件缺陷,它們多為配置項之間、分系統(tǒng)之間的協(xié)調匹配性問題,其中的關鍵、重要問題將直接影響裝備系統(tǒng)任務使命的完成。重要級以上的軟件質量歸零問題中,有51.4%的歸零問題涉及系統(tǒng)層面,暴露在系統(tǒng)聯(lián)試、靶場飛行試驗前。這些數據表明,盡管對軟件配置項的功能、性能進行了全面驗證,并通過了特定使用模式下的系統(tǒng)聯(lián)試,但是面向使命任務的軟件系統(tǒng)級測試驗證仍然很不充分。
目前裝備軟件的特點主要表現(xiàn)在以下幾方面:
(1)大多系統(tǒng)裝備已初步具備組網能力,部分系統(tǒng)還可與其他裝備進行混編,與外圍指揮單元通訊多元化;
(2)裝備系統(tǒng)內部結構復雜,軟件規(guī)模龐大,甚至包含多層子系統(tǒng),軟件規(guī)模一般在幾十萬至幾百萬行不等;
(3)為滿足當前發(fā)展需求,各裝備系統(tǒng)軟件研發(fā)、硬件選型中已適應了復雜電磁環(huán)境下的能力需要,完成了相關設計內容;
(4)對于研制總要求或等效文件中提到的性能指標,在系統(tǒng)/子系統(tǒng)規(guī)格說明中,很少能做到軟/硬件性能指標分離、指標實現(xiàn)的有效分解。
面對以上軟件系統(tǒng)特點,傳統(tǒng)的軟件配置項測試充分暴露自身“只見樹木、不見森林”的缺陷:測試力度不夠,無法驗證軟件配置項之間的功能協(xié)調性和接口協(xié)調性。
面對復雜的使用需求、日趨龐大的裝備系統(tǒng)軟件規(guī)模,相關訂購部門更需要得到的是這些裝備投入到復雜戰(zhàn)場環(huán)境中的應用能力評價,而不是單一設備和單一軟件的運行能力,這樣對裝備軟件的測試評價提出了更高的要求。軟件測評從以單一配置項的功能測試為主,轉變?yōu)閷δ芎托阅芸己瞬⒅?,突出對面向使命任務的軟件系統(tǒng)的考核,對體系貢獻度的評估。
在此背景下,系統(tǒng)級軟件測試能夠為全面評價裝備軟件效能提供有效手段,為全面評價裝備系統(tǒng)效能提供了依據。
目前軟件系統(tǒng)級測試主要采用動態(tài)測試為主的策略,以裝備研制總要求、系統(tǒng)任務書、系統(tǒng)需求規(guī)格說明為測試依據,在真實環(huán)境下開展測試,普遍采用的測試方法包括:
(1)基于使命任務和典型應用場景的測試。
(2)基于工作流程和控制流程覆蓋的測試。
(3)專項審查:接口分析、安全性分析、時序審查、使用流程審查。
專項審查的采用彌補了裝備軟件缺乏有效動態(tài)測試環(huán)境的問題,可以發(fā)現(xiàn)各分系統(tǒng)或配置項對于系統(tǒng)需求分解、指標分解、接口協(xié)議理解不一致的問題。
(4)采用“系統(tǒng)特征狀態(tài)驗證率”的系統(tǒng)測試充分性量化指標度量方法,針對系統(tǒng)關鍵特征狀態(tài)測試覆蓋情況進行分析和測試。
在對各裝備件系統(tǒng)級測試發(fā)現(xiàn)的問題分析中,發(fā)現(xiàn)有以下產生原因:
(1)系統(tǒng)級測試特點決定的:單個軟件配置項執(zhí)行沒有問題,但作為系統(tǒng)執(zhí)行時就有問題,此類問題為典型的系統(tǒng)級問題,配置項無法發(fā)現(xiàn);
(2)系統(tǒng)工作流程問題,對于需要各個分系統(tǒng)或配置項配合才能完成的任務,任務完成過程中會暴露出配置項測試未暴露的問題;
(3)系統(tǒng)設計缺陷(邏輯缺陷、異常處理、邊界處理、臨界點處理)導致的問題;
(4)各分系統(tǒng)或配置項設計師對于系統(tǒng)模型(協(xié)議)理解不一致或不到位導致的問題;
(5)各分系統(tǒng)或配置項在需求分析、設計時重點關注了對其本身的要求,忽略了研制總要求等頂層輸入文件中項目的設計通用要求對本分系統(tǒng)/配置項的相關性分析和分解;
(6)配置項測試環(huán)境和系統(tǒng)實裝環(huán)境的差異性導致的配置項測試遺漏的部分問題;
(7)測試人員認識提高,測試用例設計足夠復雜激活潛在的軟件缺陷。
看到以上問題產生的原因,不難發(fā)現(xiàn)如果在軟件研制過程中采取一些措施,上述(1)~(5)問題在一定程度上是可以避免的。對此在軟件研制過程中,應采取以下措施:
4.2.1 重視軟件系統(tǒng)需求分析與系統(tǒng)設計
系統(tǒng)需求是介于用戶需求和軟件需求之間的重要橋梁,是確保用戶需求能正確實現(xiàn)的重要保障,更是系統(tǒng)級測試的唯一依據。提供的系統(tǒng)軟件需求類文檔中,應明確系統(tǒng)軟件用途,重點描述系統(tǒng)軟件的任務使命、系統(tǒng)能力(覆蓋技術指標)、軟硬件環(huán)境要求、系統(tǒng)/分系統(tǒng)軟件體系結構設計等(即系統(tǒng)的任務流、功能流、信息流)。
存在工作狀態(tài)轉換的,在提供的需求類文檔中,應詳細說明系統(tǒng)軟件所包含的各種工作狀態(tài)、轉換方式,必要時,給出狀態(tài)轉換圖進行說明轉換條件、轉換點。對于各種工作方式,應描述清楚對應的能力需求組,以及參與實現(xiàn)的軟件,推薦使用表格進行說明。
提供的需求類文檔中,在對系統(tǒng)能力需求展開描述時,建議從系統(tǒng)/分系統(tǒng)的角度出發(fā),對每一組能力需求進行詳細描述,建議給出工作流程圖、數據流圖,文字描述實現(xiàn)路徑,哪些軟件參與了哪些操作,并說明執(zhí)行過程中的重點數據判讀要求、數據執(zhí)行周期要求(處理時間分布情況),應列出研制總要求中與軟件相關的所有技術指標,并進行有效分解。
提供的需求類文檔中,應詳細描述整個系統(tǒng)軟件的內/外部接口通訊內容,應詳細描述切實可行的安全性需求與措施。
4.2.2 加強使用總體與設計總體、設計總體與設計師的溝通
軟件研制中設計總體、設計師應定期與使用總體進行溝通,這樣才能保證系統(tǒng)貼近用戶使用;設計總體和設計師定期溝通,能夠消除彼此理解上的一些差異,同時形成頭腦風暴,完善模型設計,提高軟件質量。
基于提高軟件質量的要求,只在軟件驗收階段進行系統(tǒng)級測試又顯得有些不夠,那在軟件研制過程中是否可以實施系統(tǒng)級測試呢?而軟件研制過程中各軟件狀態(tài)不定、測試周期短,導致無法完全進行系統(tǒng)級測試。針對此種情況,應從軟件測試的思路和方法進行改進:
(1)測試設計時應多從使用者的角度進行設計,而不應只對軟件進行覆蓋性測試;
(2)需對軟件任務剖面進行分析,構造任務應用場景;
(3)充分考慮與軟件有關的所有硬件和設備對軟件的影響;
(4)測試用例設計應增加針對飽和或滿負荷情況下的設計且用例應盡量復雜;
(5)測試執(zhí)行時耦合度高的軟件應協(xié)同測試。
軟件系統(tǒng)聯(lián)調一般是依據實驗任務對軟件系統(tǒng)主要功能和流程進行驗證,缺乏充分性。軟件系統(tǒng)級測試是以測試的角度對軟件系統(tǒng)的所有設計分支進行測試,功能覆蓋全面充分。在對系統(tǒng)級測試結果分析中,發(fā)現(xiàn)有些問題如果系統(tǒng)聯(lián)調能夠測試充分一些,那這些問題本可以很早就能發(fā)現(xiàn)。針對此種情況,應該在軟件系統(tǒng)聯(lián)調中采取以下措施,提高軟件可靠性。
(1)軟件系統(tǒng)聯(lián)調應轉變思想:系統(tǒng)聯(lián)調不應只為實驗任務服務,而是應該提高軟件系統(tǒng)可靠性為目的;
(2)組織軟件系統(tǒng)聯(lián)調的總體人員應了解軟件測試,以軟件測試的角度結合軟件系統(tǒng)聯(lián)調本身的特點,綜合考慮制定聯(lián)調方案;
(3)軟件系統(tǒng)聯(lián)調依據實驗任務制定聯(lián)調方案時,應盡可能充分考慮系統(tǒng)功能,提高測試充分性;
(4)軟件系統(tǒng)聯(lián)調應多考慮異常分支、異常情況,驗證系統(tǒng)可靠性;
(5)必要時,軟件系統(tǒng)聯(lián)調應請測試人員參與。
調研多個項目的軟件系統(tǒng)級測試,發(fā)現(xiàn)軟件系統(tǒng)級測試存在以下問題:
軟件配置項級測試的依據是軟件研制任務書、軟件需求規(guī)格說明、軟件用戶手冊等技術文檔;那么裝備軟件系統(tǒng)級測評的依據應該是什么?作為軟件系統(tǒng)級測評,既然要摸清裝備的性能底數、使用的邊界條件和運行的極限狀態(tài),除了裝備軟件之間的接口協(xié)議、用戶使用需求,還應該具有描述系統(tǒng)軟件能力和使用條件頂層技術文檔,以及具備領域知識的使用約束條件,如軟件系統(tǒng)設計方案、軟件系統(tǒng)運行方案、軟件系統(tǒng)能力技術要求等。
目前,通過部分測評機構開展的一些系統(tǒng)級測評項目來看,研制方提交的軟件系統(tǒng)級文檔,仍然以配置項級功能、性能“塊狀”描述為主,不能轉化為系統(tǒng)典型應用場景的用戶需求和任務需求,難以作為系統(tǒng)測評的依據,這就需要系統(tǒng)軟件設計人員充分了解裝備使用需求,提出與軟件相關的能力需求和使用需求,測評人員根據輸入的使用需求和領域知識開展對軟件能力需求的驗證和摸底。
裝備軟件系統(tǒng)級測評主要方法應以為黑盒測試方法或灰盒測試方法為主,一般不包括代碼級的白盒測試,除非對于系統(tǒng)級發(fā)現(xiàn)問題,進行問題定位和歸零時進行專項的代碼級白盒測試。
各項標準中都規(guī)定系統(tǒng)級測試需要在實裝環(huán)境中測試,但在實裝中測試能否保證測試充分性?有些操作不能確定不損傷裝備,誰敢去操作?有些裝備屬于小子樣裝備,無法提供給測試,如果沒有條件怎么辦,如何給出結論?
系統(tǒng)級測試不同于配置項測試,傳統(tǒng)配置項測試只針對單軟件單功能的驗證,很少針對系統(tǒng)整個流程進行驗證。相應地系統(tǒng)級測試應以貼近實際、貼近用戶、貼近使用為基本原則,以摸清系統(tǒng)軟件的性能底數、極限狀態(tài)、邊界條件為根本要求,盡可能發(fā)現(xiàn)影響用戶使用、影響任務流程、影響使用效能的軟件問題,而如何對系統(tǒng)進行測試設計、測試執(zhí)行則需要建立一套有別于傳統(tǒng)配置項測試的操作流程或指南。
由于裝備中軟件數量眾多、軟件規(guī)模大,依據文件種類、內容繁多,有研制總要求、系統(tǒng)需求規(guī)格說明、工作流程描述、模型和協(xié)議等一系列文檔,雖然系統(tǒng)需求規(guī)格說明是系統(tǒng)及測試的主要依據已達成共識,文檔的描述應該覆蓋到哪些內容、哪個層次就是完備的從技術上未有好的理論指導,因此這種覆蓋是一種弱覆蓋。
現(xiàn)階段,系統(tǒng)級測試主要是基于任務使命和典型應用場景的測試,測試過程中需要構建符合測試要求的應用場景,但應用場景覆蓋是否充分,并沒有理論進行指導。
對于整體性,是現(xiàn)在大多數系統(tǒng)級測試最關注的,也是考慮最多的,多集中在典型工作場景測試、功能覆蓋測試、工作流程測試等等,但筆者認為,真正體現(xiàn)系統(tǒng)整體性的除了以上幾種覆蓋性測試,更應該關注系統(tǒng)輸出,具體為任務使命是否達成、受軟件影響的工作效能是否達標。對此類系統(tǒng)輸出的覆蓋性測試在配置項級測試時往往會弱化,應在系統(tǒng)級測試強化。
目前的軟件測試充分性指標主要是針對程序代碼的,適用于單元測試、部件測試和軟件配置項測試,針對系統(tǒng)測試均顯得無能為力。系統(tǒng)測試關心的是系統(tǒng)任務的驗證充分性,針對程序代碼的充分性指標顯然無法適應系統(tǒng)測試的工程需求。
細化頂層論證,提供輸入依據。應在研制總要求、裝備立項論證報告等頂層文件明確裝備試驗鑒定中軟件系統(tǒng)級測試涉及哪些系統(tǒng)/分系統(tǒng)/子系統(tǒng),每個系統(tǒng)包括哪些軟件配置項,明確測試的軟件工作過程要求以及遵循的標準規(guī)范,如果在頂層文件制定時來不及明確,應該最晚在試驗鑒定初案和試驗鑒定總案中明確,在軍方主導下完成相關各方參與的評審,作為系統(tǒng)級測試頂層的管理性依據。
在技術層面,對軟件系統(tǒng)的描述應該是有層次的,在頂層輸入之下,應該按層次構建完整的裝備軟件系統(tǒng)架構,對頂層需求逐層分解,對系統(tǒng)需求的描述也應該本著從宏觀到具體的原則,裝備的應該是從任務使命和任務要求,分解到具體的分系統(tǒng)/子系統(tǒng)。而針對不同層次,應解決當前層次系統(tǒng)的多元性、相關性和整體性描述問題,為系統(tǒng)級測試提供技術輸入。
系統(tǒng)級的測評需求分析,應以用戶使用需求為主,結合用戶使用的典型場景,覆蓋系統(tǒng)/子系統(tǒng)/分系統(tǒng)的能力需求為基本原則開展測評需求分析,測試需求分析內容應覆蓋用戶使用剖面、功能剖面,對于軟件的使用邊界、極限狀態(tài)進行驗證和摸底。
系統(tǒng)級測試應在配置項級測試完成,軟件版本狀態(tài)相對固化的狀態(tài)下開展,先開展分系統(tǒng)級,再開在子系統(tǒng)級,最后開展系統(tǒng)級測試。系統(tǒng)級測試設計,應按照測試需求分析,依據用戶使用需求的輸入組合開展測試設計,包含正常的用戶使用流程和異常的用戶使用流程設計。對于典型的使用場景,應增加測試用例設計密度,盡可能覆蓋典型使用場景下不同輸入的多種組合。
系統(tǒng)測試執(zhí)行,應嚴格按照用戶使用需求說明書開展測試用例的執(zhí)行。對于異常流程的測試用例,應充分評估對系統(tǒng)實物設備的影響,避免損壞實際設備。對于測試環(huán)境不支持的測試用例,應盡可能的模擬外圍的環(huán)境,提高測試用例環(huán)境的執(zhí)行率。系統(tǒng)測試數據分析不限于對測試用例、執(zhí)行過程發(fā)現(xiàn)的軟件缺陷的數據分析,還應該對系統(tǒng)測試用例執(zhí)行過程產生的軟件配置項之間實時交互的數據進行分析。通過對該部分的數據發(fā)現(xiàn)系統(tǒng)軟件配置項之間存在不協(xié)調、不一致、不正確的蛛絲馬跡;通過對該部分的數據分析定量評估系統(tǒng)級測試覆蓋性,確定測試是否可以終止;通過對該部分數據分析,定位軟件故障,發(fā)現(xiàn)軟件缺陷,修正軟件錯誤。
軟件系統(tǒng)級測評環(huán)境構建,應借助一定的實物設備,構建的半實物的系統(tǒng)級測試環(huán)境,對于指揮信息化裝備,也可構建全數字的系統(tǒng)級測試環(huán)境。構建的環(huán)境應苛刻或等效于實際使用環(huán)境,能夠支持系統(tǒng)邊界外異常數據的輸入能力,能夠模擬軟件運行極限狀態(tài)的外部環(huán)境條件,支撐全過程的軟件配置項之間交互數據的采集和重演。如圖1 所示,對于被測系統(tǒng)而言,構建系統(tǒng)測試的關鍵是外圍環(huán)境的模擬,如果外圍環(huán)境能以軟件模擬的方式實現(xiàn)的,盡量以軟件的方式實現(xiàn);對于外圍實物難以直接模擬的,可以增加一層實物設備。
圖1:系統(tǒng)級測試環(huán)境示意圖
針對裝備軟件研制特點以及系統(tǒng)測試或系統(tǒng)試驗發(fā)現(xiàn)的問題,本文開展了研究,建議裝備軟件系統(tǒng)級測試應從以下兩方面進行研究:
6.4.1 面向使用過程的系統(tǒng)級測試用例生成技術
裝備軟件系統(tǒng)使用環(huán)境復雜,使用過程綜合程度高,軟件系統(tǒng)級高精度、抗干擾、快速反應性能的考核需要在系統(tǒng)級集成測試環(huán)境下開展。面對復雜軟件系統(tǒng),測試用例是一個與被測軟件的交互執(zhí)行過程相對應的、由輸入控制點及其輸入指令或數據等要素組成的多元組的序列。裝備軟件系統(tǒng)作為復雜大系統(tǒng),對于裝備軟件系統(tǒng)級測試用例的描述應包括使用環(huán)境情景想定、使用過程描述、測試激勵數據三個層次。系統(tǒng)級測試用例的描述示意圖如圖2所示。
圖2:系統(tǒng)級測試用例的描述示意圖
(1)使用環(huán)境情景想定??刂葡到y(tǒng)裝備軟件系統(tǒng)級測試用例的前置條件需要想定符合實際使用過程的情景,涵蓋系統(tǒng)要求的各個性能指標、系統(tǒng)功能、任務剖面等。
(2)基于UML順序圖的使用過程描述。UML順序圖可以用來描述控制系統(tǒng)中不同對象之間的動態(tài)交互,顯示一個使用過程中涉及對象間的消息傳遞關系。而消息是由系統(tǒng)特征狀態(tài)構成的,課題研究應用UML順序圖依照由系統(tǒng)特征狀態(tài)構造的任務剖面描述控制系統(tǒng)的測試場景,將輸入、輸出及約束條件合理組合生成覆蓋該場景的測試流程,提高測試充分性。
(3)針對GUI的測試激勵數據生成。裝備軟件系統(tǒng)包括嵌入式軟件和GUI軟件,針對嵌入式軟件通常采用數據文件形式的測試用例,包括時間驅動和事件響應兩類用例激勵方式,目前已經較好的解決了這類軟件的用例生成和用例加載方式。
6.4.2 軟件系統(tǒng)級驗證技術
(1)系統(tǒng)級形式化驗證。將組成控制系統(tǒng)的各分系統(tǒng)作為對象,構建狀態(tài)圖,應用形式化語言描述上層設計的軟件模型規(guī)格,研究形式化方法驗證系統(tǒng)行為正確性和完備性。狀態(tài)圖用于對系統(tǒng)模型元素的動態(tài)行為進行建模,它描述一個實體基于事件反應的動態(tài)行為,顯示該實體如何根據當前所處的狀態(tài)對不同的事件做出不同的反應。形成狀態(tài)機模型后,定義驗證規(guī)則使用CTL語句對模型進行仿真驗證。
(2)系統(tǒng)級協(xié)議分析。調研發(fā)現(xiàn),近年的系統(tǒng)試驗所暴露出的軟件問題,誘因已經不是單一軟件配置項處理的特殊數據或異常數據,而是在系統(tǒng)/子系統(tǒng)內、系統(tǒng)/子系統(tǒng)外流轉的數據流在實際使用過程中發(fā)生的特例,也許基于本系統(tǒng),它是有效數據,但由于它到來的時序特殊、與其他數據產生了疊加、軟件集成后與整系統(tǒng)硬件未良好匹配等因素,導致其觸發(fā)軟件缺陷,因此需要通過系統(tǒng)地分析、審查接口通訊的協(xié)議,發(fā)現(xiàn)設備之間接口通訊方面可能存在的潛在隱患,進一步提高軟件接口以及系統(tǒng)的可靠性水平。協(xié)議分析技術包括接口設計與實現(xiàn)審查、通訊設計與實現(xiàn)審查兩部分。
針對裝備軟件系統(tǒng)級測試中的應用場景設計是否充分、任務使命是否達標的問題,現(xiàn)階段本文認為基于裝備系統(tǒng)的使用效能分析評估指標體系,構造適用于系統(tǒng)級測試的指標評價體系能夠較好解決該問題。系統(tǒng)級測試最終是希望能夠對系統(tǒng)軟件的使用效能進行評價,裝備系統(tǒng)的使用效能分析評估指標體系是用來對整個裝備系統(tǒng)的使用效能進行評價的,而基于此構建的適用系統(tǒng)級測試的評價體系能夠很好地貼合使用效能評價體系。那么該如何構建適用系統(tǒng)級測試的評價體系?本文認為應該從以下步驟進行操作:
(1)根據裝備系統(tǒng)的使用效能分析評估的指標體系,對相關指標進行裁剪,保留軟件指標或與軟件相關的指標,分析出適用系統(tǒng)級測試的評價指標;
(2)根據系統(tǒng)規(guī)格說明、模型和協(xié)議等輸入類文檔,增補、完善軟件評價指標體系(功能、性能、安全性),并最終構建適用于系統(tǒng)測試的指標評價體系;
(3)針對軟件系統(tǒng)級測試的指標評價體系,依據系統(tǒng)規(guī)格說明、模型等文檔,由功能反推應用場景,設計應用場景。
軟件系統(tǒng)級測試評估不僅應該關注系統(tǒng)測試充分性的評估,包括用戶對典型用戶場景的覆蓋、使用功能剖面的覆蓋、軟件能力項目的覆蓋、系統(tǒng)配置項目交互數據的覆蓋等;還應該對系統(tǒng)級的軟件能力、適用條件、極限狀態(tài)以及完成任務的能力給出評價的指標體系和評價方法,通過此項的評價能夠給出軟件系統(tǒng)的質量評價,為軟件系統(tǒng)的試驗鑒定提供依據和支撐。
采用“系統(tǒng)特征狀態(tài)驗證率”的系統(tǒng)測試充分性量化指標度量方法,針對系統(tǒng)關鍵特征狀態(tài)測試覆蓋情況進行分析和測試,理論上回答了面向使用任務的測試是否充分的問題。系統(tǒng)具有許多特征,每一特征具有若干狀態(tài),所有的系統(tǒng)特征狀態(tài)刻畫了系統(tǒng)的行為特性。系統(tǒng)特征狀態(tài)測試驗證的是否充分理應成為系統(tǒng)測試所關心的核心問題。
系統(tǒng)級測試在未來很長一段時間,將是裝備鑒定或大型試驗前需要面臨的一道考題,現(xiàn)有的軟件測試技術應用于系統(tǒng)級測試不能很好的兼顧效率和成本、滿足各方對系統(tǒng)級測試的期望,從某種層面上來說,隨著裝備的快速迭代,系統(tǒng)級測試的有效性將會成為制約裝備軟件測試有效性的決定性因素,因此,加大系統(tǒng)級測試技術、環(huán)境、人力等資源的投入將會是必然趨勢。