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