陳豪文 周璐雨 寧志豪
摘要:隨著信息技術的快速發展,人們對軟件的認知發生著階段性的變化,對軟件的質量和功能等方面的要求也變得越來越高。一個優秀的軟件在每個完成階段都應經歷嚴格的質量檢測和功能測試。那么如何更好的保證軟件的質量,進行系統規范的測試,本篇文章將詳細的介紹軟件測試中常用的方法和技術。
關鍵詞:軟件測試;目的;方法
一、為什么要進行軟件測試
軟件危機的出現讓我們將目光更多的聚焦在軟件測試上來。軟件危機泛指在計算機軟件的開發和維護過程中所遇到的一系列嚴重問題。[1]
軟件危機產生的原因主要有4個方面。①軟件自身的特點。軟件是由許多程序代碼組成的,它不能像硬件那樣通過規定的標準來衡量。②缺乏正規的理論性指導,沒有開發工具和嚴謹的方法學的提供。③不能清楚的明確用戶的需求。因為在軟件開發出來前,用戶可能也不清楚自己的需求,或者開發人員對用戶的需求可能出現二義性等都會產生軟件危機。④軟件開發的規模變大,復雜度更高。規模太大有可能會產生交流,管理等方面問題。復雜度太高,人們的智力和能力將沒有能力解決。
二、軟件測試的定義和目的
軟件測試是對程序或系統能否完成特定任務建立信心的過程,也是幫助識別開發完成(中間或最終的版本)的計算機軟件(部分或整體)的正確性,完整性,和質量的軟件過程。[2]
軟件測試的目的——盡可能早的發現并改正被測試軟件中的錯誤,提高被測軟件的可靠性。[3]
三、軟件測試的主要方法
軟件測試按靜態和動態可分為兩大類:(1)靜態測試。(2)動態測試。
靜態測試——不需要運行程序,通過對源代碼進行檢查發現軟件缺陷,主要包括各階段評審,軟件復雜度、質量度量,結構分析,代碼檢查。各階段評審的主要內容包括同行評審即讓除開發軟件的其他人檢查軟件是否有缺陷,需求階段的需求規格說明書是否符合規范等。代碼檢查的主要內容包括正確性檢查、健壯性檢查、完整性檢查、可修改性檢查和結構化檢查。
動態測試——需要運行程序,分析預期的結果和真是結果的差異,主要包括單元測試(對源碼的一個獨立的一小段代碼進行測試,該代碼實現一個規定的功能)、集成測試(將進行單元測試后的模塊組裝起來進行測試,一般多用于檢驗接口)、確認測試(檢查軟件是否滿足需求規格說明書上的要求,配置是否正確)、系統測試(針對系統中各個組成部分進行綜合性檢驗,測試系統性能)、驗收測試(向用戶證明軟件可以像用戶要求的那樣工作)。
軟件測試按對內部程序的了解程度也可分為兩大類:(1)白盒測試。(2)黑盒測試。
白盒測試——只測試程序的處理過程和內部結構,不測試軟件的功能。將被測程序看成是打開的黑盒,測試人員不考慮程序的功能,只根據內部結構設計測試用例。測試方法主要是邏輯覆蓋測試(包括語句覆蓋、條件覆蓋、判斷覆蓋、判斷/條件覆蓋、條件組合覆蓋)路徑覆蓋測試(控制流測試)。
黑盒測試——不關心程序的內部,根據需求規格說明書的要求,通過輸入和輸出的關系設計測試用例,檢驗是否滿足功能需求。測試方法主要有等價類劃分法(把所有的輸入數據劃分為若干部分,然后從各個部分中選幾個代表的數據作為測試用例。有效等價類是驗證規定的性能和功能和無效等價類是驗證不符合規格說的地方)、邊界值分析法(在有效等價類的基礎上選取剛剛大于,剛剛小于邊界的數據作為測試用例)、決策表法(利用表格式的圖形描述條件和動作的關系)、因果圖法(用于描述多種組合的測試,一般是根據輸入,輸出,以及約束之間的因果關系來設計測試用例)。
四、其他測試方法
(1)配置測試——軟件在多種平臺的運行情況。一般的過程為:①確定需要的硬件種類。②確定廠家的硬件。③確定硬件特征。④縮小到可控制的硬件位置范圍。⑤為每一個配置設計測試用例。⑥執行每一種測試并反復測試。
(2)兼容性測試——檢測軟件之間是否能正確地交互和共享信息,目的是保證軟件按照用戶期望的方式進行交互。[4]
(3)外國語言測試——主要解決翻譯問題,熱鍵和快捷鍵問題,字符計算問題,文本擴展問題,本地化問題等由于語言的形式不同造成的問題。
(4)易用性測試——主要包括用戶界面是否符合規范和標準,是否有為有殘疾障礙人員提供幫助的測試。
(5)安全性測試——檢查軟件對不法盜取信息,侵入系統的防御能力,測試軟件是否存在漏洞,該測試是在非正常的條件下進行的測試。其中包括網絡安全性,數據庫安全性,系統安全性等方面。
五、未來的軟件測試
近幾年,人工智能發展迅速,掀起一股熱潮。通過人工智能進行其他軟件的測試,從現在來看,已經取得了不錯的進展。人工神經網絡就是AI 技術在軟件測試方面應用較流行的一個典型例子,當然,還有遺傳算法等等。在軟件開發過程中敏捷開發是一個高效快速的模型,軟件測試也可以借鑒此方法,從用戶的角度思考問題,重點關在與迭代地進行測試。
參考文獻:
[1]韓利凱.軟件測試[M].北京:清華大學出版社,2013:23.
[2]蔡建平.軟件測試方法與技術[M].清華大學出版社,2014:23.
[3]蔡建平.軟件測試方法與技術[M].清華大學出版社,2014:24.
[4]Ron Patton.軟件測試[M].機械工業出版社,2011:96.