吳文慶,修雅慧
(1.蘇州市職業大學 計算機工程學院,江蘇 蘇州 215104;2.齊齊哈爾醫學院,黑龍江 齊齊哈爾 161006)
軟件開發(Software development)是根據用戶要求建設、開發軟件系統或者部分軟件的過程,涵蓋需求捕捉、分析、設計、實現和測試等工作。軟件測試(Software Testing)則是促進軟件的正確性、完整性、安全性和質量的過程,主要用于比較預期輸出和實際輸出之間的差異。現代社會發展對軟件的需求越來越大、越來越復雜,這要求相關單位和工作人員加大軟件開發力度,同時通過測試等工作保證軟件性能,滿足實際要求。
軟件測試是一系列工作的總稱,是指在規定的條件下對程序進行操作,發現錯誤、衡量質量,評估它是否能滿足設計要求的過程,該過程的對照目標是預期設計要求。通常軟件測試的目標包括三個方面,即避免開發風險、降低常見風險、了解軟件性能,測試對象則包括程序、數據和文檔。以性能評估為例,一款軟件的交互價值、程序完善度、性價比都會影響其性能。如常見的游戲軟件,若界面清晰簡潔,操作就比較容易,交互體驗良好;如果界面元素過多且復雜難辨,玩家的興趣就難以保證了。這是在軟件開發過程中將測試列為五個基本項目的主要原因之一。
軟件測試的流程包括六個基本步驟,即擬定測試計劃、挑選測試用例、啟動測試計劃、提交缺陷問題、設計優化調整、提交測試成果。軟件測試過程中也應進行管理,主要包括軟件測試的過程、評價方法、參數選取,進行配置管理和測試風險分析、控制測試成本,等等。
測試計劃是軟件測試的第一步,要求針對不同對象目標分別擬定,如測試對象為數據,要了解數據在軟件中是否能夠被讀取、執行,是否滿足系統上下限,等等。在軟件測試過程中,尤其是大型軟件,需要了解的項目較多,難以一一測試,因此會選擇較具代表性的軟件作為用例,要求其覆蓋到關鍵性的測試需求,如主程序、核心參數等。測試活動開始前,需對選定對象進行分析,判斷其是否滿足“啟動準則”(EntryCriteria),如果分析結果理想,則啟動測試,反之則繼續重復“挑選測試用例”環節。測試工作中,要將測試結果與標準參數比對,了解其中差異,明確問題以及缺陷,進行提交、設法消除。完成消除后,還要進行二次測試甚至三次、四次測試,直到選定的目標對象在參數、性能上達到或高于設計標準,滿足“完成準則”(ExitCriteria),結束主體測試工作,撰寫并提交測試報告,記錄核心參數用于實際工作。軟件測試工作的流程如圖1所示。

圖1 軟件測試工作的流程
在需求分析階段,軟件測試的主要工作內容是記錄客戶需求,根據客戶的要求提煉各類核心信息,并與開發項目負責人進行溝通,了解各項工作的進度安排,擬定測試計劃。如客戶需求設計一款智能軟件,用于掃地機器人的性能改善,根據客戶需求,軟件核心參數應該是設備對作用力的感知、障礙物的感知、工作目標(垃圾)的處理以及與之對應的集成技術、傳感技術等。由于集成技術和傳感技術屬于通用技術,不必額外進行技術測試,因此選定“對作用力的感知、障礙物的感知、工作目標(垃圾)的處理”作為測試對象。計劃擬定后,了解整體軟件開發計劃,假定開發活動預期為90天,則將第一輪測試活動定在第51個工作日,以保證調整優化的時間充沛[1]。
進入設計階段后,軟件開發已經處于實質工作中,這一階段的測試工作包括兩項基本內容,一是不斷根據實際工作情況調整原定測試計劃,二是根據階段設計結果進行必要的分項目測試。通常來說,軟件開發過程會存在一些未知變數,比如客戶需求的變化,此前客戶需要軟件辨識5種語言,隨著業務變更,客戶又要求軟件辨識至少7種語言,這意味著測試時必須在語言相關環節增加兩項內容,以滿足客戶的實際需要[2]。分項目測試在大型軟件設計過程中十分常見,如電子競技類游戲,涉及到很多程序,每完成一個階段工作后,需要進行一次小范圍測試,了解包括參數設定、人物動作、游戲背景等軟件的情況。
在對人物動作進行測試時,一般應用骨骼動作法或者有限元分析法,以虛擬軟件操作人物的動作,了解動作協調性、變形幅度等,再按標準參數進行微調,直至漸趨完善。
代碼編寫是指技術人員應用各類程序進行軟件設計、制作,該階段的測試內容包括單元測試、測試用例編寫、接受代碼完成報告,等等,核心工作是編寫測試用例。在軟件設計開發的過程中,很多環節需要單獨進行測試,單元測試可由設計人員自己負責,而較為復雜的多參數測試則需要人員提供測試用例、測試腳本等,供項目小組審閱、共同進行測試[3]。
如一款指紋密碼鎖軟件的開發,在代碼編寫階段,要求重視按壓強度、手指紋理之間的細微差別,這種差別難以通過一個模型完全涵蓋,設計人員完成小單元的簡單測試后,根據設計要求出具測試用例,供項目組進行有效性分析[4]。在編寫用例的過程中,要求嚴格應用代碼語言,避免出現代碼輸入錯誤、產生程序BUG等情況。代碼是程序員用開發工具所支持的語言寫出來的源文件,是一組由字符、符號或信號碼元以離散形式表示信息的明確的規則體系。在軟件開發過程中,不同軟件制作所使用的代碼存在差別,編寫過程中,也要求注意書寫的準確性。圖3中,代碼出現錯誤,將其應用于測試用例編寫,必然影響測試成果,正確的編寫如圖4所示。

圖3 測試用例編寫中出現的錯誤代碼

圖4 測試用例編寫的正確代碼
軟件測試一般被看做是軟件開發工作的組成部分之一,相關工作服從于項目整體安排,大型軟件系統的設計開發被分成多個階段,每一個階段都是相對獨立的,軟件測試工作也因此需要在初步完成階段進行,以便及時發現、處理問題。初步完成階段測試工作的內容包括更新測試用例、追蹤處理缺陷、出具階段測試報告三個方面,完成后進入下一輪測試循環[5]。
在上一輪代碼編寫階段,出具了覆蓋核心技術的測試用例,初步完成階段需要針對該用例進行測試,包括集成測試、確認測試、性能測試等,一般采用應用模擬、應用實踐兩種方式進行測試,應用模擬主要通過參數代入法在計算機環境下直接進行,由于工作狀態為理想狀態,因此不考慮誤差影響,對所獲數據進行記錄,與標準參數(客戶需求)進行對比,了解誤差值和問題。應用實踐是指將設計完成的測試用例應用于具體工作中,根據工作情況判斷軟件的性能,記錄數據,與標準參數(客戶需求)進行對比,了解設計上的問題和誤差等。
在軟件投入運行后,測試工作并不能立即停止,由于很多軟件問題在測試階段并不會完全暴露,如果投入運行后聽之任之,很可能導致問題集中出現,客戶的滿意度、軟件開發的成效也就無從談起了。較為典型的問題比如軟件漏洞,部分軟件在測試時環境相對理想,但在應用中則面臨來自系統兼容性、木馬攻擊等方面的威脅,一旦出現漏洞、造成木馬侵入,軟件開發的價值會大大降低。在運行維護階段,要求軟件開發方積極與客戶進行聯絡,根據用戶反映進行運維測試。
通過分析軟件測試在軟件開發中的應用,了解了相關理論內容。軟件測試的目標與流程一般是固定的,主要目的是降低風險、修復問題、消除軟件缺陷,利用擬好的規劃、針對固定的目標進行測試和優化。從應用上看,軟件測試涵蓋需求分析階段、設計過程、代碼編寫階段、初步完成階段以及運行維護階段,要求工作人員在進行軟件開發的過程中嚴格遵照標準進行測試,保證軟件功能。