張 妍 楊遠成 李 萌 李萬利
(首都航天機械有限公司,北京 100076)
由于軟件的復雜性,導致影響軟件質量的因素多種多樣,因此提升和改善軟件質量的途徑也不盡相同,其中最重要的途徑是對軟件進行大量的測試,通過全面、充分地對各種情況進行測試、排查與修正來發現軟件中可能存在的潛在問題,從而提升航天軟件的質量[1]。因此,研究基于軟件測試的航天軟件質量提升具有非常重要的研究價值與意義。
根據航天軟件固有的特點及其任務需求,大體上可以將航天軟件的測試分為如下幾個部分。第一,模塊級測試。該部分的工作通常由軟件開發組的相關人員來統籌規劃,并組織聯合諸如各個子系統負責人、核驗人、模塊編碼工程師等人員來對各個部分進行核驗[2]。第二,分系統級測試。該部分的工作通常由各個子系統負責人聯合軟件開發與質量保證等相關人員進行進一步的查驗。第三,系統級測試。相較于前兩部分,系統級的測試較為復雜,通常可以將其分為兩步來完成:一是由總體單位、參與軟件開發的負責人及工程師共同參與的配置項測試;二是由相關專家、用戶、軟件開發工程師等成員共同參與完成的綜合測試部分[3]。另外,為了保證測試工作嚴格有效完成,盡量避免人為因素的干擾,應明確劃分參與軟件的開發人員及測試人員。
對航天軟件進行有效測試的根本目的是發現由于某些不可預知的原因而導致的軟件漏洞或錯誤,并在該軟件正式應用到實際場景之前進行修正,從而減少不必要的損失。對航天軟件進行有效測試最直接的方法是通過各種測試工具對其進行檢查,并對結果進行分析。在整個軟件測試過程中,最重要的兩個方面為程序的優化和功能與強度測驗[4]。其中:程序優化可通過某些測試軟件對比與分析系統運行過程中消耗的時間、內存等可量化的結果數據;功能和強度檢測主要是根據實際應用的需求一一核對軟件的功能,確保滿足用戶的每一項需求,并保證軟件在不同的場景下具有一定的自適應能力及故障排查能力[5]。由于不同軟件、不同場景下用戶的需求及所要解決的問題不盡相同,因此無法用統一的測試工具進行統一處理。針對上述問題,除了常用的黑盒測試以及白盒測試方法外,還可以采用如下測試方法。
1.2.1 特性分析法
該方法主要包括控制選擇法、設備失效法、故障設置法等。其中:控制選擇法是指人為地對軟件系統進行修改或參數設置,通過分析結果來評估軟件的綜合性能;設備失效法是指人為地使軟件系統的某一模塊停止工作,從而判斷系統的魯棒性及適應性;故障設置法是指根據在實際場景中可能面臨的特殊問題人為設置相應的故障,從而判斷所開發軟件系統的故障恢復能力及異常情況下的容錯能力。
1.2.2 實戰數據模擬法
隨著我國航天技術的飛躍式發展,目前已經積累了大量的實測數據。這些數據能夠更加真實地反映相應的航天應用場景的實際情況,從而更加全面、真實地反映所開發軟件必須面臨的各種實際問題,因此可通過分析結果來判斷軟件的適應性。
在對所開發的航天軟件進行測試的過程中,無論采用上述哪種測試方法,測試用例都是其最核心的部分。對于一個完整的測試用例,通常主要包括名稱、目標、測試方法、輸入數據、期望輸出和實際輸出等內容。需要注意的是,測試用例不僅指測試數據,而且包含測試的結果,其目的就是通過將其與期望結果進行對比來分析所開發的航天軟件能否正常工作以及是否符合用戶或實際場景的需求。為了對結果進行有效評估,測試用例的質量通常可以通過有效性、仿效性、經濟性和修改性等幾個方面進行評估。其中:有效性主要是用來判斷所用的測試用例是否能夠發現或者可能發現軟件的缺陷;仿效性是指該測試用例能否實現同時測試多項內容,從而保證數據的高效可利用性;經濟性是指所用的測試用例在軟件的實際測試中是否經濟、可行;修改性是指對所開發的軟件進行修改或調整后,該測試用例的維護成本。由于測試方法不同,其構造測試用例的方法也不相同,可以簡單地將其分為基于代碼的測試用例設計方法和基于規格說明的測試用例設計方法。
該方法的抽象描述如圖1所示,其測試需求的主要依據來自于所開發的航天軟件代碼,如采用分支測試的方法時,所選用的測試用例集應涵蓋程序代碼中的各個分支。
圖1中,規格說明是所開發的航天軟件編寫代碼的基礎,同時還是生成期望輸出的主要依據。在該方法中,應先根據諸如數據流覆蓋、分支覆蓋等準則,結合所開發的代碼來生成所需的測試用例集,并通過計算機上的程序生成測試用例的實際輸出,然后將其與期望的輸出進行對比分析,從而判斷程序是否正確可行。
該方法的抽象描述如圖2所示,與前文所述方法的不同之處在于其設計方法主要是按照船艦需求生成的。該方法的優點在于:在航天軟件的開發初期就能夠創建測試用例,無需待所有的功能全部實現后再開始創建,從而更加高效地實現了資源的利用。除此之外,該方法的另一個顯著特點是能夠邊開發邊創建測試用例,有助于相關測試人員及時發現需求說明中可能存在的問題,從而縮短整個軟件開發的周期。
與前一種測試用例設計方法相比,該設計方法并不要求相關的測試人員充分了解所開發的航天軟件內部代碼,只需根據實際輸入與期望輸出之間的關系或實際的需求來對測試用例進行設計與確定,因此其操作性相對簡單。此外,該測試用例的設計方法還可以對除基本功能以外的諸如兼容性、邊界和極端情況以及用戶界面友好性等做進一步全方位的測試。
針對不同的航天應用場景,雖然其對測試用例質量的評估方法以及維度大體相似,但是為了切實提升測試用例設計的質量,還需進一步對當前的測試類型及其特有的性能進行更加全面的考慮與分析。本文結合航天軟件測試的實際經驗,提出了一套較為完善的用于航天軟件測試用例設計質量提升的框架,如圖3所示。由圖3可知,本文充分考慮了測試用例設計的用戶界面友好性、功能完整性、完備性以及連續性等內容。該框架可為當前大部分的航天軟件測試用例提供參考。
提升測試用例設計質量的過程中,對于非嵌入式軟件的測試,應當從以下幾個方面進行考慮。第一,關注人機交互體驗。方便操作、易于理解的用戶界面能夠降低測試人員的學習成本,可將測試軟件按功能整理成《用戶操作手冊》,使相關人員根據手冊說明完成相關測試,從而提升人機交互體驗。第二,關注功能和性能覆蓋的完整性。此項要求測試人員根據用戶或系統需求,確保所涉及的測試用例能夠涵蓋全部的流程圖路徑。第三,關注連續性操作。關注連續性操作部分是為了保證測試過程中不同功能之間的數據交互能夠正常、有序、連貫地進行。第四,關注軟件是否具備可恢復性。對于軟件的可恢復性,是為了確保當由于各種可能出現的原因而導致系統運行異常時,軟件能夠進行重啟等可恢復性操作,并且能夠延續之前的工作狀態。第五,關注容錯機制考慮是否完備。對于容錯機制,主要是為了驗證當遇到無效輸入的數據以及非法操作時,所開發的軟件是否能夠進行有效屏蔽,從而確保工作的正常進行。第六,關注是否考慮工作強度。對于航天類的軟件測試,由于數據異常或內存泄漏等問題往往在長時間運行后才會暴露出來,通常要求至少能夠進行不低于8 h的連續強度測試,以保證系統在運行的過程中不會出現數據異常或內存泄漏等問題。通過以上6個方面的質量提升過程,最終能夠形成高質量測試說明文檔,從而為航天軟件質量提升方案的制訂提供依據。
本文針對航天軟件質量提升的問題,研究了基于軟件測試的完整的航天軟件質量提升架構,分析了航天軟件測試的管理方法、軟件測試用例的設計方法以及航天軟件測試用例設計質量的提升方法,并提出了用于測試用例設計質量提升的整體架構,為航天軟件的設計、質量提升、測試用例設計提供了一定的參考方案。