廖麗華
(1.上海儀器儀表自控系統(tǒng)檢驗測試所有限公司,上海 200233;2.上海工業(yè)自動化儀表研究院有限公司,上海 200233)
由于功能安全相關產(chǎn)品的軟件驗證與確認在安全性和可靠性上有獨立性要求(技術獨立性、管理獨立性和財務獨立性),為了保證軟件測試獨立性要求的有效性,需委托獨立的第三方軟件測試機構進行安全相關產(chǎn)品的軟件測試,且要求該測試機構一般在軟件測試領域具有專業(yè)技術能力,并且是取得國家認可的測試實施機構。對于獨立性要求低的軟件,即使不交付于獨立的第三方軟件測試機構,也要交付于與軟件設計和開發(fā)人員獨立的部門進行測試。由于測試人員不直接參加軟件的設計與開發(fā),所以必須依據(jù)標準、文檔和測試技術全面深入分析,才能進行軟件測試,發(fā)現(xiàn)軟件中存在的問題,從而確保軟件僅執(zhí)行預期功能而不執(zhí)行非預期功能。
軟件確認測試是通過檢查和提供客觀依據(jù),證明軟件是否滿足特定預期用途的需求[1]。安全相關產(chǎn)品的軟件確認一般要經(jīng)過三個確認階段,分別是軟件確認、軟硬件集成后的嵌入式軟件確認和整體系統(tǒng)安全確認。本文的安全相關軟件的確認是指將軟件需求規(guī)格說明書中每一個安全、安全相關、約束的功能、條件以及性能進行逐條確認的測試,針對的是整個軟件與硬件集合的嵌入式軟件系統(tǒng)。安全相關產(chǎn)品軟件確認的主要目標是檢查和解決需求規(guī)格書的不合理性、檢查和解決設計階段中的設計錯誤和確認軟件是否完全實現(xiàn)了軟件需求規(guī)格書規(guī)定的要求。
軟件確認的主要方法是以測試為主,分析和建模仿真等為輔;選擇手動或自動技術對軟件的每個功能作確認測試。一般以功能為單位、標準規(guī)范與約束條件為前提,將軟件的功能與軟件模塊作對應分析,實現(xiàn)這些功能的測試數(shù)據(jù)、測試規(guī)程,通過手動/自動、靜態(tài)/動態(tài)、分析/統(tǒng)計等技術實施。其測試結果的接受準則除了需滿足軟件需求規(guī)格書要求,還要滿足安全相關產(chǎn)品的特性或?qū)<遗袛嗟戎饔^要求。
安全確認測試應按照軟件確認計劃進行,測試計劃應包括被測軟件的范圍、測試環(huán)境的搭建、測試工具的選擇、測試進度的規(guī)劃、測試技術/措施的選擇等,具體如下。
(1)確認組織的安排。
① 確認測試的進入條件。
② 確認測試的人員:確認期間評審人員都必須在場。
(2)安全相關產(chǎn)品相關運行模式的確定,包括[1]:
① 系統(tǒng)運行前的配置,包括設置和調(diào)整;
② 啟動、教學、自動、手動、半自動、穩(wěn)定狀態(tài)運行;
③ 重啟、關機和維護;
④ 合理可預見的異常事件和誤操作。
(3)確認測試的內(nèi)容應[2]:
① 覆蓋軟件需求規(guī)格書的所有需求;
② 非常有代表性地覆蓋所有信號范圍以及計算
的參數(shù)的范圍;
③ 全面覆蓋表決邏輯和其他邏輯以及邏輯組合;
④ 用最終的組裝配置測試所有的保護信號;
⑤ 確保數(shù)據(jù)的精度與系統(tǒng)的響應時間得到證實;
⑥ 確保對所有設備故障或故障組合采取正確的行動。
(4)確認測試時要求的工具和設備在使用前應進行校準和配置(軟件和硬件參數(shù))。
(5)確認的技術及措施(如靜態(tài)測試、動態(tài)測試)。
(6)定義通過/失敗準則,包括[1]:
① 輸入的信號和順序以及輸入值;
② 期望輸出的信號和順序以及輸出值;
③ 其他可接受的準則,如存儲使用、時序和數(shù)值允差。
(7)確認測試記錄的相關要求。
(8)確認測試報告的相關要求。
靜態(tài)測試[3]是指不運行程序,通過人工對軟件程序和文檔進行分析與檢查。靜態(tài)測試主要方式有人工審查、符號執(zhí)行、需求確認等。
軟件系統(tǒng)確認測試的靜態(tài)測試主要是對被測軟件的需求規(guī)格書文檔等進行靜態(tài)測試,目的是滿足安全軟件需求規(guī)格書的可測試性、正確性、一致性、完備性、向前和向后的追溯性的要求。
軟件確認測試的靜態(tài)測試活動如表1所示。
表1 軟件確認測試的靜態(tài)測試活動
靜態(tài)測試需滿足以下準則:系統(tǒng)合格性的可行性、軟件的可測性、系統(tǒng)需求的測試覆蓋率、所用測試方法與標準的適合性、對預期結果的依從性、運行和維護的可行性。
動態(tài)測試是指通過人工或使用工具運行程序進行檢查、分析程序的執(zhí)行狀態(tài)和程序的外部表現(xiàn)。軟件系統(tǒng)確認測試的動態(tài)測試,一般包括概率測試、過程仿真、建模、功能和黑盒測試(black-box testing)。其中:功能和黑盒測試是軟件確認測試的必要測試方法,其余測試方法均適用于安全要求較高的軟件;而概率測試主要適用于安全要求最高的軟件(如核級安全軟件)。
黑盒測試[4]又稱功能測試、數(shù)據(jù)驅(qū)動測試或基于軟件需求規(guī)格說明的測試。在完全不考慮程序內(nèi)部結構和內(nèi)部特性的情況下,僅依據(jù)程序功能的需求規(guī)格書確定測試用例和推斷測試結果的正確性。黑盒測試典型方法如表2所示。
表2 黑盒測試典型方法
概率測試[8]的目的是為了得到被測軟件的可靠性屬性的定量數(shù)值。該定量數(shù)值與置信度的要求密切相關,并能給出每一個功能要求的一個失效概率、在某一時段的一個失效概率和錯誤控制的一個概率。
概率測試的用例選擇方法有:隨機選擇、依概率大小選擇、選取特殊狀態(tài)插入到序列中、用區(qū)間估計的方法對總體進行抽樣測試、直接在期望值附近抽樣取值、基于馬爾可夫鏈的序列選擇等。這些方法各有如下優(yōu)勢。
①在輸入域內(nèi)選擇隨機的均勻分布的測試數(shù)據(jù)。
②可靠性預測,通過測試軟件來預測軟件的使用性能。
③自動生成測試用例,通過軟件測試工具和編制程序自動生成測試序列。
④通過對軟件的量化處理,序列中每個操作都有明確的概率。
軟件確認測試的評價應滿足如下要求。
(1)軟件確認的結果應文檔化。
(2)對每一個功能,軟件確認應對以下結果文檔化。
① 確認活動的按時間順序的記錄,以便追溯活動的順序;
② 所用的軟件確認計劃的版本;
③ 確認的功能(通過測試或分析);
④ 使用的工具和設備及其校準數(shù)據(jù);
⑤ 確認活動的結果;
⑥ 期望結果和實際結果的差異。
(3)當期望結果和實際結果出現(xiàn)差異時,要對其進行分析,確認是繼續(xù)進行測試還是提出變更請求,并且其都應作為確認結果而被文檔化。
(4)如有變更請求,應先對其進行影響分析,以確定修改的范圍以及是否會引發(fā)新的危險或風險。這些分析結果應文檔化。
如有修改,軟件確認需作回歸測試。根據(jù)影響分析的結果確定回歸測試的范圍,回歸測試的過程及結果也需文檔化。
安全確認測試結果進行評審需考慮:測試應表明軟件需求規(guī)格書中規(guī)定的要求都已正確滿足,且沒有執(zhí)行非預定的功能;測試用例及其結果應文檔化以便用于后續(xù)分析,以及有安全要求的獨立評估;已歸檔的軟件確認的結果應表明軟件已通過確認或未通過確認的原因。
安全軟件的確認貫穿于安全相關產(chǎn)品軟件實現(xiàn)的全過程[9]。為了確保安全相關產(chǎn)品能起到真正的安全防范作用,軟件的確認一定要與產(chǎn)品信息需求達到正確性、一致性與完備性。由于軟件確認測試是一個可重復的過程,所以配置管理很重要,需滿足以下要求:①完備性,確認擁有用于描述軟件產(chǎn)品功能性、跟蹤程序版本和管理變化的過程;②充分性,確認配置管理過程對于開發(fā)復雜性、軟件和系統(tǒng)規(guī)模、軟件安全級別、項目計劃和用戶要求是充分的。