李海浩 費 琪 盧重陽
(1.91404部隊 秦皇島 066000)(2.江蘇自動化研究所 連云港 222061)
全艦計算環境(Total Ship Computing Environment,TSCE)是美海軍提出的新一代水面艦艇艦載系統集成技術[1],是將艦艇各類運算操作、基礎數據等集成計算,是美海軍新一代艦載一體化信息系統的關鍵技術[2]。TSCE利用高性能計算機資源,以分布式方式實現各系統間的互聯互通,具有標準性、通用性、可裁剪、可移植等特點[3]。隨著裝備技術體系和國家戰略的發展、調整,我軍正處于平臺中心戰向網絡中心戰轉型的重要時期,艦艇裝備系統也將逐步從原來結構復雜、接口繁多、系統緊密集成、可擴展能力差、重復建設與投資、緊耦合向全分布、構件化、服務化、開放式的方向發展[4],在借鑒TSCE技術的同時,探索出適應于我軍艦艇裝備特色的公共計算環境新技術體制。該技術體系下,裝備系統是一個結構復雜、功能強大、體系靈活的信息系統,具有面向任務、動態重組等新的特性,給測試技術要求和測試充分性等提出了巨大的挑戰。
對公共計算環境結構層次和主要特征介紹的基礎上,對該環境下服務組合流程剖面、服務實體測試技術等進行了研究,并提出了基于組合服務測試用例的生成方法,為新一代公共計算環境系統軟件設計研制、測試試驗等提供理論支撐,促進該環境下系統軟件測試的充分性和完整性。
公共計算環境的核心內涵就是“集成”,能夠快速高效地將功能不同、規模不同、粒度不同的系統軟件進行有效集成[5],其框架由底向上分為3個層次,即基礎設施、通用服務、功能應用,結構層次如圖1所示。
以“一體化網絡”和“面向任務、基于服務”等特征為出發點,公共計算環境的結構特征主要有以下幾點。
1)資源集中部署、統一管理。基礎設施中海量的計算和存儲資源進行集中部署,根據各功能系統和通用服務所需資源進行動態分配和調度,優化了資源利用效率。
2)全艦采用統一的結構框架。根據通用服務,全艦系統的結構進行統一設計,各功能系統在通用服務基礎和統一結構框架約束下,實現各功能需求和系統間的互聯互通,無需再各自部署相關服務,減少了功能系統應用的開發成本。
3)具有較強的可裁剪、可擴展能力。公共計算環境為應用系統提供了“即插即用”式的開發和運行環境,應用功能系統之間相對較為獨立,可根據后期需求進行簡單、快速的功能裁剪、擴展和螺旋式升級。
針對任務的多樣性,對系統的使命任務進行分析,形成自頂向下的任務能力框架,采用面向功能域的服務組合方法,將任務涉及的各領域功能進行最小粒度的原子能力劃分,驗證原子能力對能力框架的覆蓋情況,基于原子能力構建面向任務流程剖面,分析基于服務的使命任務。結合一般任務屬性,以層次化的任務網絡為基礎,進行任務剖面構建,具體步驟如下:
1)根據能力選取規則,分析任務能力所需的元活動集合,將元活動組合成任務活動集合,每一個任務子集能夠完成指定的能力;
2)根據對象選取規則,獲得任務對象集合,給出任務對象所影響的子任務元活動結合;
3)以任務活動集合和任務對象集合為基礎,根據規劃設定規則,進行正常任務規劃、任務不同原因部分失效和完全失效的任務規劃;
4)根據任務過程及任務重復與中斷集合,結合人工干預,構建任務流程的主題框架;
5)根據編成要素選取規則,綜合分析系統編成的改變時機,形成活動編成集合;
6)在任務流程主體框架的基礎上,結合人工干預和活動編成集合,將任務流程細化;
7)根據操作人員經驗、數據庫知識積累和環境要素選取規則,綜合元活動執行水平與環境集合的映射關系,分析環境要素對能力實現的影響,給出環境集合,描述環境因素影響任務成功的概率;
8)根據環境集合和任務區域集合,結合人工干預,得到場景集合,給出任務子集的持續時間及環境影響概率分布情況;
9)根據場景集合結合人工干預,在任務流程細化的基礎上細化任務環境、子任務的持續時間以及子任務的成功概率,最終得到任務剖面集合。
根據基于公共計算環境的系統架構,服務實體是通用服務層組成的基礎,也是實現服務組合的基本單元,基于公共計算環境的系統軟件測試相當于傳統系統級測試,而對服務實體的測試相當于配置項測試。

圖1 公共計算環境的結構層次圖

圖2 服務實體描述語言概念模型
基于公共計算環境的系統中,服務實體的功能、QoS等屬性主要通過服務化描述語言的形式對外暴露給服務請求者[6]。因此,可以根據服務化描述語言進行服務實體的測試。
服務實體的描述語言包括服務實體功能描述語言和組合服務流程編排語言,服務實體描述語言的概念模型如圖2所示。
作為服務對外提供的描述文件,服務化描述語言和服務都需要作為測試對象進行測試和驗證。因此,服務實體測試技術研究主要從靜態、動態兩方面對服務進行測試。靜態測試技術主要研究服務化描述語言中元素結構、取值的正確性,尤其需要驗證元數據的應用領域、數據類型、數據精度等屬性是否滿足特定領域下,數據元素的描述和表示要求。
3.2.1 靜態缺陷檢測技術
首先,根據XML的語法、格式和服務化描述語言的結構要求設計典型缺陷模式,常見的缺陷模式包括命名空間錯誤、變量類型錯誤等。
然后,采用面向對象的思想,將服務化描述語言中的標簽元素映射為對象及其屬性,從而構造出面向對象的DOM樹。
最后,遍歷DOM樹并逐一與缺陷模式進行匹配。并結合人工審查根據需求規格說明、設計文檔驗證服務化描述文件中功能描述的正確性、一致性和完整性,靜態缺陷檢測的流程如圖3所示。
3.2.2 動態測試用例設計方法研究
基于服務實體規則的動態測試用例設計如圖4所示,測試用例設計過程主要分為六個步驟。

圖3 服務化描述語言靜態缺陷檢測
1)解析服務實體描述語言,獲取功能描述的主要元素,如Operation,Message等;
2)根據領域知識,設計系統運行中的時間約束、狀態約束、數據約束等規則;
3)根據Operation之間的輸入輸出關系構造Operation組合流程;
4)針對各類數據以及int、string等基礎類型為Message生成測試數據,包括正常值異常值邊界值;
5)根據服務的功能描述,匹配出服務運行的上下文約束信息;
6)組合生成測試用例。
測試用例設計中重點研究帶約束的服務操作序列,根據業務特性提出時序、服務狀態等約束,并將約束規則自動加入服務操作組合,生成帶約束的服務操作序列模型,遍歷模型生成測試用例。

圖4 測試用例設計流程圖
為滿足多樣化任務需求,根據典型作戰任務需求,將多個服務以業務流程執行語言的形式組合成新的組合服務。為了描述復合服務之間各種不同的互動關系,BPEL(業務流程執行語言:Business Process Execution Language)規范了多樣化的流程,包括可同時執行多個動作、非同步執行的事件處理器及錯誤補償處理等,導致找出所有可能的執行路徑非常困難。為實現測試路徑的全面覆蓋,提出基于流程編排的服務組合測試路徑推導技術,主要分為:支持約束的變強度組合測試用例生成技術和組基于BPEL文件的服務組合測試路徑遍歷技術。
支持約束的變強度組合測試用例生成主要是為保證測試的充分性和高效性,分析測試過程中增加約束的可滿足性檢查,淘汰無效測試,增加對變強度因素交互覆蓋情況的評估,改變搜索過程的目標函數,適時調整搜索導向,從而滿足不同約束、不同交互強度的組合測試需求。
對要覆蓋的變強度因素組合進行分解,得到部分交互強度低的因素組合和其他交互強度高的組合,對于交互強度低的組合,作為組合測試中待覆蓋的局部,可以考慮用代數方法來處理,對于代數方法不易處理的情況,可采用搜索來獲得覆蓋目標因素組合的測試集,對不同部分的結果進行復合,可得到完整的測試用例集,具體流程見圖5。
服務組合測試路徑遍歷算法描述如圖6所示。
為更清晰地對該算法進行介紹,給模型中的各個子模塊編號,共為6部分,編號依次從1到6,測試路徑遍歷過程和各模塊的功能作用如下所示。
1)建立BPEL控制流程圖的鄰接矩陣,編號為子模塊①,在鄰接矩陣中寫入包含condition的條件信息,用于存儲每條路徑上服務節點間的狀態信息,子模塊①為BPEL控制流程圖的矩陣不僅有能力描述服務間的連邊關系,還有能力描述服務間的狀態信息,該狀態信息指的是:連邊前端服務到連邊后端服務的條件信息(例如if語句的condition條件信息)、循環結構的名稱與循環條件的信息(比如while語句的condition條件信息),但是該子模塊不能描述并行路徑的信息,并行路徑的信息由子模塊③進行描述。

圖5 支持約束的變強度組合測試用例生成技術流程
2)根據BPEL控制流程圖的鄰接矩陣即子模塊①生成不考慮并行路徑的所有基本服務路徑,將其存入默認無并行的路徑存儲空間中,如圖6所示編號為②的子模塊,該子模塊包含的內容為不考慮并行路徑的所有基本服務路徑,但是它又包含了并行路徑的基本組成路徑,這里以一個示例來解釋:假設有兩條并行路徑:(服務節點用字母表示)路徑1,a-b-c、a-e-f;路徑2,a-b-d、a-e-f。這兩條并行路徑中每條路徑均有兩條基本路徑在同時執行,總共有三條基本路徑a-b-c、a-b-d、a-e-f,這三條基本路徑指的就是子模塊②中存儲的不考慮并行路徑的所有基本服務路徑,但是它包含的這三條基本路徑組成了并行路徑1和并行路徑2。子模塊②的作用:為并行路徑的生成(子模塊④的建立)提供并行路徑的基本組成路徑,為子模塊⑤中的無并行正常路徑提供基本路徑。
3)讀取邊的信息,提取flow=true的所有邊,將并行分支的標志節點信息存入特定的集合中,如圖6所示子模塊③。子模塊③的實現方式為數組,子模塊③內容為標志并行的所有節點,步驟2)中提到的例子,兩條并行路徑(服務節點用字母表示)路徑1,a-b-c、a-e-f;路徑2,a-b-d、a-e-f的并行開始節點為服務節點a,不存在并行結束的節點,即并行路徑不會合并到一個節點上,這時子模塊存儲的內容即為節點a。子模塊③的作用為結合模塊②提供的所有的基本路徑生成模塊④的并行路徑處理集——特定flow節點下的非并行分支路徑。
4)利用2)中默認的無并行的路徑(子模塊②)以及3)中的并行分支標志節點集合(子模塊③)生成多個特定flow節點下非并行分支路徑集合(子模塊④)。子模塊④中存儲了多個塊結構,圖6子模塊④顯示了有兩個塊結構,每個塊結構對應了子模塊③中提供的節點集合中的一個節點,這種對應關系因為在塊結構的內容中存在所以不需要單獨標記,該塊結構的內容為對應flow=true當前節點的組成并行路徑的基本路徑的集合,例如并行路徑的(服務節點用字母表示)路徑1,a-b-c、a-e-f;路徑2,a-b-d、a-e-f,塊結構1中第一個特定flow節點下的非并行分支路徑存儲的為基本路徑a-b-c、a-b-d,第二個特定flow節點下的非并行分支路徑存儲的為基本路徑a-e-f,塊結構內的多組特定flow節點下的非并行分支路徑集合組合即可得到所有的并行路徑并寫入子模塊⑤。這個例子中就是通過組合a-b-c、a-b-d和a-e-f生成路徑1,a-b-c、a-e-f;路徑2,a-b-d、a-e-f存入模塊⑤。另外在一條路徑上存在多個并行節點開始節點,即一條路徑上依次存在多個并行路徑時,首先確定并行開始節點和并行結束節點,然后從每個路徑開始節點到路徑結束節點之間的路徑生成一個塊結構,塊結構內路徑重組形成針對每個塊結構的并行路徑,然后用同樣的原理將整個的模塊④看成最大的塊結構繼續進行路徑重組生成并行路徑,最后將塊與塊之間的單路徑加入形成本次并行處理的路徑。

圖6 基于BPEL組合的測試路徑搜索算法
針對并行嵌套的情況,即并行結構中如果還有并行結構時,會出現累乘的現象,累乘現象是指先找到并行嵌套結構的最內層并行結構,利用上述塊結構處理后得到最內層的路徑,然后再將包含最內層的當前外層并行結構作為當前處理的并行結構,這時需要考慮最內層生成的路徑,同樣需要一個塊結構來處理當前層并行結構,最內層的路徑與當前層其他路徑相乘得到新的復雜的并行路徑,如果層級到達一定的程度,累乘的結果會越來越復雜,最終造成路徑的組合爆炸。因此本方法將并行嵌套進行簡化處理。不考慮并行嵌套導致路徑組合爆炸的問題。
5)對這些集合按照一定的規則提取元素進行組合,生成并行的服務組合路徑(子模塊⑤);組合的思想在4)中已經詳細寫出。同時從默認無并行的路徑存儲空間(子模塊②)中提取沒有并行屬性的路徑寫入服務組合路徑(子模塊⑤)。兩種路徑結合起來就是總的服務組合路徑。
6)讀取1)中BPEL控制流程圖鄰接矩陣(子模塊①)中的condition,在輸出中的路徑(子模塊⑥)中寫入當前服務組合路徑的條件,寫入的方法為遍歷子模塊⑤中的路徑,同時讀取子模塊①的鄰接矩陣,如果路徑上的連邊有條件,對應的子模塊①的鄰接矩陣元素condition不為空,則將條件寫入子模塊⑥的路徑中。
公共計算環境為全艦各功能設備提供了開放、通用、標準的研發和運行集成環境[7],便于各功能系統的有效組織運行,為全艦減員增效提供技術保障,能夠更好地支撐全艦裝備的后續改造升級,促進裝備的通用化、模塊化、系列化的發展[8]。針對公共計算環境的特點,探索研究了該環境下系統軟件的測試技術和用例生成方法,對裝備試驗鑒定和系統軟件測評工作具有一定的借鑒意義。