1 引言
高可靠性軟件泛指一類軟件:該類軟件運行過程中若出現故障會引發重大災難性事故或經濟損失。通常航天型號軟件、銀行系統軟件、醫療行業軟件、通訊行業軟件等均屬此范疇。目前,越來越多的軟件企業涉及高可靠性軟件項目,如何保證軟件質量成為眾多企業面臨的一個很重要的課題。這篇文章結合某航天項目地面應用系統模型(本文命名為CraftGS),重點討論如何從軟件測試的角度保證此類產品的軟件質量。
2 CraftGS項目簡介
CraftGS是一個很經典的衛星地面應用系統模擬項目。它分為5個子系統:數據接收子系統(DAS)、數據預處理子系統(DPS)、運行管理子系統(OMS)、數據管理子系統(DMS)以及數據產品實現(DPRS)子系統。CraftGS的總體可靠度要求是0.95。各分系統分配到的可靠度指標是如下:
分系統名 可靠度指標
DAS 0.99994
DPS 0.99865
OMS 0.99910
DMS 0.99950
DPRS 0.99502
CraftGS的業務邏輯是Data Package從衛星傳入DAS,DAS負責解包,將解包后數據傳入OMS及DPS,OMS通過DAS傳來的數據檢測衛星是否正常運行并負責衛星飛行姿態調整;DPS負責調制DAS傳來的數據,轉換成有意義的邏輯數據。DPS處理后的邏輯數據傳入DMS以及DPRS。其中DMS負責數據備份、數據查詢及數據鏈路維護等操作;DPRS負責將DPS處理過的邏輯數據分門別類地轉換成數據產品,并封裝發布。
考慮到項目固有的可靠性安全性要求,CraftGS系統采用Java+Unix技術架構實現。該架構從編程語言級和系統級對軟件產品質量做了保證。為了控制軟件產品開發過程中的質量,筆者推薦采用如下軟件測試方案。
3 測試方案:軟件驗證技術+軟件確認技術+軟件測試管理
CraftGS系統的軟件測試方案由三個部分組成,即軟件驗證技術、軟件確認技術和軟件測試管理技術。它們內涵及相互之間的關系如下圖所示:YSR中國可靠性資源網
CraftGS測試方案
測試技術層面 測試管理層面
軟件驗證技術 需求規格說明驗證 軟件測試團隊組織管理
設計規格說明驗證
代碼驗證 軟件測試計劃管理
交付驗證
軟件確認技術 單元測試 軟件缺陷(錯誤)跟蹤管理
集成測試
系統測試 軟件測試件管理
交付測試
YSR中國可靠性資源網
其中,軟件驗證技術著眼于排除軟件開發文檔中的錯誤。驗證活動涉及的文檔按開發流程主要涉及需求規格說明、設計規格說明(包括概要設計規格說明、詳細設計規格說明、數據庫設計規格說明)、編碼規格說明、產品交付文檔等一系列書面材料。目前驗證技術的實施在很大程度上是依靠測試人員手工完成的。驗證活動視實際需要有時還會涉及到開發人員和目標客戶,需要得到他們必要的理解和支持。驗證測試采用的主要測試手段有:面對面質詢、文檔抽查、非正式會議、同行評審等等。
相對于軟件驗證技術,軟件確認技術則主要著眼于排除程序代碼中的錯誤。活動涉及的對象主要是程序部件的代碼或軟件成品。在實施過程中,常常按被測代碼的規模和測試所處的層次將軟件確認測試分為四個階段,即:單元測試(也叫類測試)、集成測試(也叫組裝測試)、系統測試和交付測試。確認測試基本上由軟件測試人員對照相關開發文檔運行程序獨立完成的。必要時,也可讓設計人員帶領測試人員閱讀程序代碼共同發現其中的錯誤,(即所謂代碼評審會)。有意見認為,在單元測試(或類測試)階段,應該有軟件編碼人員參與,這樣能減輕測試人員閱讀代碼障礙。原則上,測試理論不提倡程序作者負責把關自己編寫的程序的質量。在實際實施過程中,可視實際情況靈活處理。(如成對編程可能會較好的處理單元測試這個難題,上面提到的代碼評審會也是為應對這個難題而想出的一個好辦法。),軟件確認技術目前已經部分地實現了測試工具的自動化,市面上已有不少自動化工具能在測試人員的輔助下完成相應的測試工作(例如用于Java代碼單元測試的Junit工具,又如用于GUI測試的Rational Visual Test工具,等等)。
軟件驗證技術和軟件確認技術均屬于測試技術層面的東西。然而對于工程質量的保證而言,光靠軟件測試技術還遠遠不夠,還需要技術管理層面上的東西。軟件測試管理技術的誕生正是為彌補這個不足。按照管理的對象不同,測試管理技術大致涵蓋軟件測試團隊組織管理、軟件測試計劃管理、軟件缺陷(錯誤)跟蹤管理以及軟件測試件管理四大部分。下面,筆者將結合CraftGS項目對該測試方案做一個詳細的詮釋。
4 在CraftGS項目中具體應用上述測試方案
CraftGS五個分系統的開發過程均在CraftGS測試團隊的質量控制下有序進行,嚴格地實施了上述測試方案。經專家評定,各分系統及最后集成后的系統總體均達到了任務書中所分配的可靠性指標。
4.1 在CraftGS項目中應用軟件驗證技術
CraftGS項目中應用的軟件驗證技術主要包括需求規格說明驗證、設計規格說明驗證、代碼驗證以及交付驗證。以下逐一說明。
需求規格說明驗證的主要任務是保證用戶的功能需求、業務需求、以及其他的一些需求(如非功能性需求、約束性需求等等)都已經被分配到軟件需求規格說明的各需求項中。
設計規格說明驗證相對需求規格說明驗證而言,稍微復雜些,它包括3個部分的內容:即概要設計規格說明驗證、詳細設計規格說明驗證以及數據庫設計規格說明驗證。其中概要設計規格說明驗證的主要任務是確保軟件需求規格說明中的需求項全部已經分配到了概要設計規格說明的各軟件模塊之中并且無多余物,詳細設計規格說明驗證的主要任務是確保概要設計規格說明中的模塊已經全部分配到詳細設計規格說明的各軟件單元之中并且無多余物,數據庫設計規格說明雖然從范疇上講應該屬于詳細設計規格說明范疇,但筆者認為因改把它獨立出來實施驗證活動。(數據庫設計和軟件設計畢竟有很多不同之處。)數據庫設計規格說明驗證的重點任務是驗證數據庫與外部應用程序的接口是否正確、數據操作實現界面是否清晰、數據庫整體設計是否合理、數據表設計是否符合3NF要求(如違反范式要說明詳細理由)以及數據表中的字段(鍵)和索引的設計是否高效合理等等。完成設計規格說明以后,下一步要做代碼驗證。
代碼驗證的內容包括:代碼編寫規范審查、代碼審查和代碼靜態分析三個部分。代碼編寫規范審查主要是審核代碼排版的格式以及注解的格式是否符合開發團隊的相應規范;代碼審查的任務主要是驗證詳細設計中的軟件單元是否都已被代碼覆蓋并正確實現,并且代碼中不含冗余物;代碼靜態分析技術主要任務是檢查變量或標號的定義與使用、表達式運算以及程序的流程設計上是否存在缺陷或錯誤。
做完代碼驗證以后,軟件系統需要依次做單元測試、集成測試和系統測試,這部分內容屬軟件確認技術范疇,下面有專門的論述。軟件系統在做完系統測試后,就面臨著交付使用的問題,在系統正式移交給用戶之前,還需要做交付驗證和交付測試。交付測試技術下文有專門的論述,不贅述,這里主要談交付驗證技術。交付驗證包括安裝驗證和使用驗證兩部分內容。其中,安裝驗證的主要任務是保證程序能按照用戶手冊的提示正確安裝到目標機器上,使用驗證的主要任務是確保程序能按照用戶手冊的提示的操作正確完成某項功能或事務處理。這兩部分工作通常是由測試人員完成的,用以核實相關安裝和使用手冊是否正確無誤。
評論