什么是軟件測試?軟件測試有什么用?

軟件測試(SoftwareTesting)描述一種用來促進(jìn)鑒定軟件的正確性、完整性、安全性和質(zhì)量的過程。換句話說,軟件測試是一種實(shí)際輸出與預(yù)期輸出之間的審核或者比較過程。
軟件測試的經(jīng)典定義是:在規(guī)定的條件下對程序進(jìn)行操作,以發(fā)現(xiàn)程序錯誤,衡量軟件質(zhì)量,并對其是否能滿足設(shè)計(jì)要求進(jìn)行評估的過程。
軟件測試是伴隨著軟件的產(chǎn)生而產(chǎn)生的。早期的軟件開發(fā)過程中軟件規(guī)模都很小、復(fù)雜程度低,軟件開發(fā)的過程混亂無序、相當(dāng)隨意,測試的含義比較狹窄,開發(fā)人員將測試等同于“調(diào)試”,目的是糾正軟件中已經(jīng)知道的故障,常常由開發(fā)人員自己完成這部分的工作。
對測試的投入極少,測試介入也晚,常常是等到形成代碼,產(chǎn)品已經(jīng)基本完成時才進(jìn)行測試。到了上世紀(jì)80年代初期,軟件和IT行業(yè)進(jìn)入了大發(fā)展,軟件趨向大型化、高復(fù)雜度,軟件的質(zhì)量越來越重要。
這個時候,一些軟件測試的基礎(chǔ)理論和實(shí)用技術(shù)開始形成,并且人們開始為軟件開發(fā)設(shè)計(jì)了各種流程和管理方法,軟件開發(fā)的方式也逐漸由混亂無序的開發(fā)過程過渡到結(jié)構(gòu)化的開發(fā)過程,以結(jié)構(gòu)化分析與設(shè)計(jì)、結(jié)構(gòu)化評審、結(jié)構(gòu)化程序設(shè)計(jì)以及結(jié)構(gòu)化測試為特征。
人們還將“質(zhì)量”的概念融入其中,軟件測試定義發(fā)生了改變,測試不單純是一個發(fā)現(xiàn)錯誤的過程,而且將測試作為軟件質(zhì)量保證(SQA)的主要職能,包含軟件質(zhì)量評價(jià)的內(nèi)容。
軟件測試的分類
從不同角度,可以對軟件測試(軟件測試技術(shù))有不同的分類。
軟件測試是軟件開發(fā)過程中的一個重要組成部分,是貫穿整個軟件開發(fā)生命周期、對軟件產(chǎn)品(包括階段性產(chǎn)品)進(jìn)行驗(yàn)證和確認(rèn)的活動過程。其目的是盡快發(fā)現(xiàn)軟件產(chǎn)品中存在的問題。
從是否需要執(zhí)行被測試軟件的角度,可以把軟件測試分為靜態(tài)測試和動態(tài)測試。
1)靜態(tài)測試
靜態(tài)測試方式指軟件代碼的靜態(tài)分析測驗(yàn),此類過程中應(yīng)用數(shù)據(jù)較少,主要過程為通過軟件的靜態(tài)性測試(即人工推斷或計(jì)算機(jī)輔助測試)測試程序中運(yùn)算方式、算法的正確性,進(jìn)而完成測試過程。
此類測試的優(yōu)點(diǎn)在于能夠消耗較短時間、較少資源完成對軟件、軟件代碼的測試,能夠較為明顯地發(fā)現(xiàn)此類代碼中出現(xiàn)的錯誤。靜態(tài)測試方法適用范圍較大,尤其適用于較大型的軟件測試。
2)動態(tài)測試
計(jì)算機(jī)動態(tài)測試的主要目的為檢測軟件運(yùn)行中出現(xiàn)的問題,較靜態(tài)測試方式相比,其被稱為動態(tài)的原因即為其測試方式主要依賴程序的運(yùn)用,主要為檢測軟件中動態(tài)行為是否缺失、軟件運(yùn)行效果是否良好。
其最為明顯的特征即為進(jìn)行動態(tài)測試時軟件為運(yùn)轉(zhuǎn)狀態(tài),只有如此才能于使用過程中發(fā)現(xiàn)軟件缺陷,進(jìn)而對此類缺陷進(jìn)行修復(fù)。目前動態(tài)測試過程中可包括兩類因素,即被測試軟件與測試中所需數(shù)據(jù),兩類因素決定動態(tài)測試正確展開、有效展開。
從是否針對軟件結(jié)構(gòu)與算法進(jìn)行測試的角度,可以把軟件測試分為白盒測試和黑盒測試。
1)白盒測試
白盒測試相對于黑盒測試而言具有一定透明性,原理為根據(jù)軟件內(nèi)部應(yīng)用、源代碼等對產(chǎn)品內(nèi)部工作過程進(jìn)行調(diào)試。
測試過程中常將其與軟件內(nèi)部結(jié)構(gòu)協(xié)同展開分析,最大優(yōu)點(diǎn)即為其能夠有效解決軟件內(nèi)部應(yīng)用程序出現(xiàn)的問題,測試過程中常將其與黑盒測試方式結(jié)合,當(dāng)測試軟件功能較多時,白盒測試法亦可對此類情況展開有效調(diào)試。
其中,判定測試作為白盒測試法中最為主要的測試程序結(jié)構(gòu)之一,此類程序結(jié)構(gòu)作為對程序邏輯結(jié)構(gòu)的整體實(shí)現(xiàn),對于程序測試而言具有較為重要的作用。
此類測試方式針對程序中各類型的代碼進(jìn)行覆蓋式檢測,覆蓋范圍較廣,適用于多類型程序。實(shí)際檢測中,白盒測試法常與黑盒檢測法并用,以動態(tài)檢測方式中測試出的未知錯誤為例,首先使用黑盒檢測法,若程序輸入數(shù)據(jù)與輸出數(shù)據(jù)相同,則證明內(nèi)部數(shù)據(jù)未出現(xiàn)問題,應(yīng)從代碼方面進(jìn)行分析,若出現(xiàn)問題則使用白盒測試法,針對軟件內(nèi)部結(jié)構(gòu)進(jìn)行分析,直至檢測出問題所在,及時加以修改。
2)黑盒測試
黑盒測試,顧名思義即為將軟件測試環(huán)境模擬為不可見的“黑盒”。通過數(shù)據(jù)輸入觀察數(shù)據(jù)輸出,檢查軟件內(nèi)部功能是否正常。測試展開時,數(shù)據(jù)輸入軟件中,等待數(shù)據(jù)輸出。數(shù)據(jù)輸出時若與預(yù)計(jì)數(shù)據(jù)一致,則證明該軟件通過測試,若數(shù)據(jù)與預(yù)計(jì)數(shù)據(jù)有出入,即便出入較小亦證明軟件程序內(nèi)部出現(xiàn)問題,需盡快解決。
從測試的階段角度,可以把軟件測試分為單元測試、集成測試、系統(tǒng)測試和驗(yàn)收測試,這里我們介紹一次啊單元測試和集成測試。
1)單元測試
單元測試即為將整個軟件分解為各個單元,隨后對單元進(jìn)行測試。
此類測試策略的優(yōu)點(diǎn)在于所需分析數(shù)據(jù)較少,且針對性較強(qiáng),程序開發(fā)者于開發(fā)過程中可通過操作經(jīng)驗(yàn)明確出現(xiàn)問題的大致區(qū)域,隨后針對此類問題對相關(guān)單元展開分析,進(jìn)行問題排查。但需注意的是,某些程序中無具體單元驅(qū)動程序,即單個單元無法有效驅(qū)動,易出現(xiàn)問題,若針對此類軟件展開測試,需重點(diǎn)注意此類分解單元。
2)集成測試
集成測試也稱聯(lián)合測試、組裝測試,將程序模塊采用適當(dāng)?shù)募刹呗越M裝起來,對系統(tǒng)的接口及集成后的功能進(jìn)行正確性檢測的測試工作。集成測試與單元測試相反,原理為將部分需測試部分作為整體進(jìn)行集成,隨后針對此類集成部分進(jìn)行測試。
測試要求為此類被測試集成題應(yīng)具有一定的結(jié)構(gòu),且屬于非漸增方式集成。對于較大軟件而言,集成測試方式較單元測試方式而言較為繁瑣,目前多數(shù)大型軟件的測試皆采取漸增方式進(jìn)行測試。
漸增測試方式為集成測試方式的衍生,其能夠按照不同次序?qū)浖M(jìn)行測試,日常測試中,常將兩類方式進(jìn)行集成測試,隨后按照次序展開選擇。
不管是什么測試,都基本上有如下幾個環(huán)節(jié)(階段):制訂測試計(jì)劃、分析設(shè)計(jì)測試、開發(fā)測試、運(yùn)行測試、整理測試報(bào)告。