劉宇軒
摘 要:當今社會的軟件行業發展迅速,軟件產品的規模和質量都有了顯著的提升。然而由于其知識密集度高、復雜程度高,不可避免會出現錯誤,而軟件測試方法正是解決這一棘手問題的主要途徑。其能夠有效地降低軟件產品的錯誤率,減少不必要的軟件投資,對于軟件開發有非常重要的意義。本文簡要闡述軟件測試的各種方法和測試過程。
關鍵詞: 計算機軟件;軟件測試方法;軟件開發
計算機的發明吹起了科技革命的號角,從一開始的計算復雜數據到今天的信息傳遞,計算機成為當今世界發展最為迅猛的一門科學技術。近些年,微電子技術的突破直接帶動計算機硬件設備高速發展,成本大幅下降,使計算機真正進入人們的日常生活。軟件作為計算機不可或缺的“靈魂”也有著重要作用。但總體看,軟件技術在成本質量和技術性能方面都要低于硬件技術的發展。隨著軟件規模的擴大和復雜性增加,由軟件發生錯誤導致的經濟損失必然增加。當前解決這一問題的主要手段是通過軟件測試來對軟件的設計和功能進行最終審定。簡要闡述現有的計算機軟件測試方法[1]。
1 軟件測試方法
早在1983年IEEE就在軟件工程標準術語中給出了軟件測試的定義:“使用人工或自動手段來運行或測定某個系統的過程,其目的在于檢驗它是否滿足規定的需求或是弄清預期結果與實際結果之間的差別”[2]。即以發現和消除軟件內部隱藏的問題為核心,為提高軟件的質量所采用的方法。軟件測試方法的分類有很多種,以測試過程中程序執行狀態為依據可分為靜態測試(Static Testing,ST)和動態測試(Dynamic Testing,DT);以具體實現算法細節和系統內部結構的相關情況為根據可分黑盒測試、白盒測試和灰盒測試三類;從程序執行的方式來分類,可分為人工測試(Manual Testing,MT)和自動化測試(Automatic Testing,AT)。
1.1 靜態測試和動態測試
(1) 靜態測試。
靜態測試的含義是被測程序不運行,只依靠分析或檢查源程序的語句、結構、過程等來檢查程序是否有錯誤。即通過對軟件的需求規格說明書、設計說明書以及源程序做結構分析和流程圖分析,從而來找出錯誤。例如不匹配的參數,未定義的變量等。
(2) 動態測試。
動態測試與靜態測試相對應,其是通過運行被測試程序,對得到的運行結果與預期的結果進行比較分析,同時分析運行效率和健壯性能等。這種方法可簡單分為三個步驟:構造測試實例、執行程序以及分析結果。
1.2 黑盒測試、白盒測試和灰盒測試
(1) 黑盒測試。
之所以被稱為黑盒測試是因為可以將被測程序看成是一個無法打開的黑盒,而工作人員在不考慮任何程序內部結構和特性的條件下,根據需求規格說明書設計測試實例,并檢查程序的功能是否能夠按照規范說明準確無誤的運行[3]。其主要是對軟件界面和軟件功能進行測試。對于黑盒測試行為必須加以量化才能夠有效的保證軟件的質量。
(2) 白盒測試。
其與黑盒測試不同,它主要是借助程序內部的邏輯和相關信息,通過檢測內部動作是否按照設計規格說明書的設定進行,檢查每一條通路能否正常工作。白盒測試是從程序結構方面出發對測試用例進行設計。其主要用于檢查各個邏輯結構是否合理,對應的模塊獨立路徑是否正常以及內部結構是否有效。常用的白盒測試法有控制流分析、數據流分析、路徑分析、程序變異等,其中邏輯覆蓋法是主要的測試方法。
(3) 灰盒測試。
灰盒測試則介于黑盒測試和白盒測試之間。灰盒測試除了重視輸出相對于出入的正確性,也看重其內部表現。但是它不可能像白盒測試那樣詳細和完整。它只是簡單的靠一些象征性的現象或標志來判斷其內部的運行情況,因此在內部結果出現錯誤,但輸出結果正確的情況下可以采取灰盒測試方法。因為在此情況下灰盒比白盒高效,比黑盒適用性廣的優勢就凸顯出來了。
1.3 手動測試和自動化測試
自動化測試,顧名思義就是軟件測試的自動化,即在預先設定的條件下運行被測程序,并分析運行結果。總的來說,這種測試方法就是將以人驅動的測試行為轉化為機器執行的一種過程。對于手動測試,其在設計了測試用例之后,需要測試人員根據設計的測試用例一步一步來執行測試得到實際結果,并將其與期望結果進行比對 [4]。
2 軟件測試過程
軟件測試并不等同于程序測試,因為軟件測試是在軟件定義與開發的整個過程中進行的。軟件開發是一個從上到下,分步細化的過程。而測試過程則與其不同,測試過程是從下而上,逐步集成的過程。軟件測試過程可以分為四個主要步驟。即單元測試→集成測試→確認測試→系統測試。
(1) 單元測試。
單元測試是正確檢查軟件設計中的最小單位,也可理解為程序模塊。其目的是為了發現各個模塊內部的錯誤。單元測試的工作原理是通過測試單元模塊中所有數據的完整性和正確性來檢測其出現的錯誤。同時利用模塊接口處流動數據和模塊算法來檢查操作數據庫中各個字段所儲存的信息的準確性和完整性。在這里完整性不僅包括長度與位數,也包括表中狀態的正確性[]。
(2) 集成測試。
單位測試全部完成之后,就需要進行集成測試。集成測試又常常被稱為聯合測試或組裝測試。其原理是將所有模塊根據設計和需求合成一個系統,借助之前設計好的文檔進行測試,內容包括功能性、可靠性、易用性、效率、維護性和可移植性中有關的部分。
(3) 確認測試。
確認測試也可以叫做有效性測試,它是用于檢查軟件的性能、特性和功能能否滿足用戶的需要。其大多采用的方法是先清空數據庫,然后在某個開發環境或模擬實際環境下進行測試,以此來確定是否滿足客戶的需求。
(4) 系統測試。
作為最后一步的系統測試是通過測試軟件將自身作為整個計算機系統的一個元素,并且和工作人員、計算機硬件、外設、一部分能夠支持的軟件以及數據等其他元素結合在一起,對計算機進行相關的集成測試和確認測試。其主要目的是通過對比系統需求來發現系統設定和軟件之間是否存在相互矛盾。
3 結語
綜上所述,軟件測試能夠有效降低軟件的錯誤,提升軟件的質量。因此軟件測試在軟件開發中起著不可替代的作用。但是,其最大的局限性就是軟件測試費用相對較高。由此來看,改進傳統的測試方法或者開發新的測試方法來降低成本和提高軟件測試效率,有著十分重要的現實意義。
參考文獻:
[1]趙瑞蓮. 軟件測試方法研究[D]. 中國科學院計算技術研究所, 2001.
[2]IEEEComputerSociety. IEEE standard glossary of software engineering terminology[M].The Institute of Electrical and Electronics Engineers, 1983.
[3]Kaner C, Falk J L, Nguyen H Q. Testing Computer Software, Second Edition[M]. John Wiley & Sons, Inc. 1999.
[4]戴凌宸, 張朕榮, 黎豐澤.傳統的軟件測試方法淺析[J].科技風, 2011(16):136-137.
[5]楊培培,趙海生,李振星.實用軟件測試方法研究[J].計算機應用, 2015(s1):166-167.