世界上沒(méi)有任何軟件能夠保證是完美無(wú)缺的。但是這不應(yīng)當(dāng)成為軟件缺陷的托詞。為了提高產(chǎn)品的質(zhì)量,確保軟件應(yīng)用的有效性、以及應(yīng)用的平穩(wěn)運(yùn)行,我們需要進(jìn)行各種有計(jì)劃有步驟的軟件測(cè)試。在本文中,我們將通過(guò)向您介紹有關(guān)軟件測(cè)試的基本方面,以幫助您把控軟件質(zhì)量,并能交付出滿意的產(chǎn)品。
軟件測(cè)試簡(jiǎn)介
從概念上說(shuō),軟件測(cè)試是一個(gè)評(píng)估已開(kāi)發(fā)軟件的功能,審查應(yīng)用是否滿足既定的要求,識(shí)別程序中任何潛在的缺陷,進(jìn)而提高產(chǎn)品質(zhì)量的過(guò)程。它的輸出是發(fā)現(xiàn)目標(biāo)系統(tǒng)與實(shí)際需求之間的差距,以及自身存在的錯(cuò)誤與缺失。
在業(yè)界,我們通常將軟件測(cè)試稱(chēng)為驗(yàn)證和確證軟件產(chǎn)品的過(guò)程。因此,它關(guān)注軟件產(chǎn)品的如下三個(gè)方面:
軟件開(kāi)發(fā)生命周期
首先,我們來(lái)了解一下軟件開(kāi)發(fā)生命周期( Life Cycle,SDLC)的概念。它是整個(gè)軟件行業(yè)用于設(shè)計(jì)、開(kāi)發(fā)和測(cè)試高質(zhì)量軟件的過(guò)程。SDLC旨在規(guī)定的時(shí)間和成本預(yù)算之內(nèi),生產(chǎn)出那些滿足甚至超出客戶期望的高質(zhì)量軟件。下圖概括性地描繪了SDLC所涉及的各個(gè)階段。
要求階段
需求的收集和分析是軟件開(kāi)發(fā)生命周期中最重要的階段。業(yè)務(wù)分析師們會(huì)從客戶和用戶處收集他們的業(yè)務(wù)需求,并在既有的業(yè)務(wù)需求規(guī)范(具體文檔名稱(chēng)會(huì)因組織的不同而有所差異)中記錄這些需求要點(diǎn)。
分析階段
在完成對(duì)需求的收集和分析后,下一步就是要定義并記錄產(chǎn)品的規(guī)范需求,進(jìn)而獲得客戶的確認(rèn)。我們一般需要通過(guò)軟件需求規(guī)范( ,SRS)文檔來(lái)實(shí)現(xiàn)。SRS一般包含了在項(xiàng)目生命周期中,那些與設(shè)計(jì)和開(kāi)發(fā)相關(guān)的所有產(chǎn)品需求。
設(shè)計(jì)階段
此階段分為兩個(gè)步驟:
可見(jiàn),此階段的輸出:高級(jí)文檔和低級(jí)文檔,將作為下一階段的輸入。
開(kāi)發(fā)階段
所有級(jí)別的開(kāi)發(fā)人員(從資深到初級(jí))都參與到該階段當(dāng)中,著手編寫(xiě)并構(gòu)建軟件的相關(guān)代碼。
測(cè)試階段
軟件在完成編碼之后,會(huì)被發(fā)送到測(cè)試部門(mén),對(duì)可能出現(xiàn)的缺陷進(jìn)行全面的測(cè)試。他們既可以手動(dòng)測(cè)試軟件,又可以通過(guò)自動(dòng)化測(cè)試工具,以確保軟件的每個(gè)組件都能夠正常工作。軟件只有通過(guò)了測(cè)試,才能得到質(zhì)量保證(QA),也才能進(jìn)入下面的實(shí)施階段。
部署和維護(hù)階段
最終,軟件產(chǎn)品需要交付和部署,以供客戶使用。此階段通常是由部署與實(shí)施工程師來(lái)完成。而在客戶使用系統(tǒng)與服務(wù)的過(guò)程中,他們所碰到的任何實(shí)際問(wèn)題,都需要在維護(hù)階段,得到持續(xù)并及時(shí)地解決。
如果您想深入了解上述軟件開(kāi)發(fā)生命周期中有關(guān)測(cè)試環(huán)境的具體內(nèi)容,請(qǐng)參閱軟件測(cè)試生命周期一文()。下面我們來(lái)討論一下所謂的V模型。
驗(yàn)證和確證模型
V模型是目前使用最為廣泛的軟件開(kāi)發(fā)過(guò)程之一。實(shí)際上,V模型將測(cè)試環(huán)節(jié)貫穿到了從需求階段到開(kāi)始實(shí)施的整個(gè)過(guò)程之中。在業(yè)界,V模型也稱(chēng)為驗(yàn)證和確證模型( and model)。那么到底什么是軟件測(cè)試中的驗(yàn)證和確證呢?
驗(yàn)證:是一種靜態(tài)分析的技術(shù)。它是在不執(zhí)行代碼的情況下,執(zhí)行諸如:回顧、檢查、以及逐行審驗(yàn)之類(lèi)的測(cè)試。
確證:是一種動(dòng)態(tài)分析的技術(shù),它是對(duì)代碼執(zhí)行功能性和非功能性的測(cè)試。
在V模型中,測(cè)試并不是作為一個(gè)單獨(dú)離散的階段概要設(shè)計(jì)階段文檔,而是跟隨著需求階段一起開(kāi)始概要設(shè)計(jì)階段文檔,與軟件開(kāi)發(fā)的整個(gè)進(jìn)程同步推進(jìn),分不同的步驟對(duì)產(chǎn)品開(kāi)展驗(yàn)證和確證活動(dòng)。該模型的階段名稱(chēng)如下圖所示:
由上圖可見(jiàn),在V模型的左側(cè)是一系列開(kāi)發(fā)活動(dòng),其中包括:用戶需求、軟件定義、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、以及軟件編碼;而右側(cè)則是一系列對(duì)應(yīng)的測(cè)試活動(dòng),其中包括:?jiǎn)卧獪y(cè)試、集成測(cè)試、系統(tǒng)測(cè)試、以及驗(yàn)收測(cè)試。因此,左右不同階段的聯(lián)系可以簡(jiǎn)述為:?jiǎn)卧獪y(cè)試著眼于開(kāi)發(fā)出的代碼是否符合詳細(xì)設(shè)計(jì)的要求;集成測(cè)試檢查的是各組成組件能否協(xié)同工作;系統(tǒng)測(cè)試關(guān)注的是集成到一起的產(chǎn)品是否符合規(guī)格說(shuō)明的要求;而驗(yàn)收測(cè)試則注重的是產(chǎn)品能否讓最終用戶滿意。
軟件測(cè)試方法
通常而言,我們會(huì)采取如下三種方法開(kāi)展軟件的相關(guān)測(cè)試,它們是:
黑盒測(cè)試:測(cè)試人員并不知曉被測(cè)項(xiàng)目的內(nèi)部結(jié)構(gòu)、設(shè)計(jì)、以及實(shí)現(xiàn)原理。
白盒測(cè)試:測(cè)試人員完全知曉被測(cè)項(xiàng)目的內(nèi)部結(jié)構(gòu)、設(shè)計(jì)、以及實(shí)現(xiàn)原理。
灰盒測(cè)試:測(cè)試人員僅僅知曉被測(cè)項(xiàng)目有限的內(nèi)部功能信息。
軟件測(cè)試階段
我們運(yùn)用軟件測(cè)試的不同階段,來(lái)對(duì)目標(biāo)軟件系統(tǒng)的每個(gè)單元或組件進(jìn)行審驗(yàn)。由于系統(tǒng)測(cè)試的主要目標(biāo)就是評(píng)估其是否符合既定的開(kāi)發(fā)需求。因此,這些不同的測(cè)試階段不但有助于檢查軟件的行為和性能,也能夠識(shí)別出其中的缺陷(bug),以及在整個(gè)開(kāi)發(fā)的生命周期中起到一定的協(xié)調(diào)作用。具體說(shuō)來(lái),軟件測(cè)試分為如下四個(gè)階段:
單元測(cè)試:通過(guò)設(shè)定目標(biāo)軟件的最小測(cè)試單位,盡快地找出各個(gè)模塊或組件中的明顯錯(cuò)誤,以提高單塊程序代碼的質(zhì)量、并減少后期返工的成本。
集成測(cè)試:通過(guò)測(cè)試整個(gè)系統(tǒng)能否編譯和構(gòu)建成功,以發(fā)現(xiàn)系統(tǒng)架構(gòu)和模塊之間、模塊與模塊之間是否存在接口問(wèn)題,并記錄下測(cè)試結(jié)果。
系統(tǒng)測(cè)試:通過(guò)運(yùn)行整個(gè)系統(tǒng),來(lái)根據(jù)系統(tǒng)測(cè)試用例執(zhí)行全面測(cè)試,驗(yàn)證并確證系統(tǒng)的功能與性能是否符合需求規(guī)格說(shuō)明中的要求。
驗(yàn)收測(cè)試:在系統(tǒng)安裝部署完成之后,通過(guò)邀請(qǐng)客戶參與進(jìn)來(lái),進(jìn)而確認(rèn)軟件系統(tǒng)能否按照既定的要求平穩(wěn)運(yùn)行。
軟件測(cè)試文檔化
將各項(xiàng)測(cè)試用例進(jìn)行文檔化,將有助于我們?cè)u(píng)估測(cè)試的工作量,以及跟蹤測(cè)試的覆蓋率。那么,常用的軟件測(cè)試相關(guān)文檔包括如下四種:
1.測(cè)試計(jì)劃:為目標(biāo)應(yīng)用程序提供測(cè)試大綱與策略。其中包括:測(cè)試的范圍、方法、資源和進(jìn)度等。具體還會(huì)涉及到各階段的測(cè)試任務(wù)、時(shí)間進(jìn)度安排、測(cè)試執(zhí)行團(tuán)隊(duì)、以及風(fēng)險(xiǎn)揭示等。
2.測(cè)試場(chǎng)景:描述目標(biāo)的特性、測(cè)試的方法、環(huán)境的要求、工具的選擇、以及測(cè)試的范圍。具體還會(huì)涉及到各階段的啟動(dòng)、停止、完成標(biāo)準(zhǔn)等條件。
3.測(cè)試用例:它是由一組條件或變量所組成,測(cè)試人員籍此確定被測(cè)系統(tǒng)是否滿足要求,以及能否正常工作。開(kāi)發(fā)測(cè)試用例的過(guò)程,也有助于發(fā)現(xiàn)應(yīng)用程序在代碼與設(shè)計(jì)中的問(wèn)題。因此,在具體測(cè)試期間,我們可以設(shè)計(jì)出許多類(lèi)型的測(cè)試用例。例如:
4. 追溯矩陣:也稱(chēng)為需求追蹤矩陣( ,RTM),它是一張被用于在創(chuàng)建產(chǎn)品的SDLC模型時(shí),草擬各種需求的表格。在實(shí)際應(yīng)用中,我們既可以采取從設(shè)計(jì)到編碼的前向跟蹤方式,也可以采用相反的向后跟蹤方式。
缺陷管理流程
眾所周知,軟件開(kāi)發(fā)是一個(gè)非常復(fù)雜的過(guò)程。它往往要求團(tuán)隊(duì)成員在嚴(yán)格的時(shí)間期限內(nèi),每天都必須完成大量的代碼編寫(xiě)工作,因此他們通常沒(méi)有太多的時(shí)間去考慮如何避免出現(xiàn)錯(cuò)誤。因此,對(duì)于每個(gè)軟件開(kāi)發(fā)項(xiàng)目來(lái)說(shuō),我們都需要有一個(gè)能夠檢測(cè)錯(cuò)誤與缺陷,進(jìn)而及時(shí)修復(fù)的缺陷管理過(guò)程。
缺陷管理,或稱(chēng)錯(cuò)誤跟蹤,通常是在產(chǎn)品的測(cè)試階段進(jìn)行的。我們可以通過(guò)兩種不同的方式實(shí)現(xiàn)缺陷管理,即:開(kāi)發(fā)人員自行測(cè)試他們的產(chǎn)品;或邀請(qǐng)用戶參與測(cè)試。雖然最終用戶能夠提供不同的視角來(lái)識(shí)別缺陷,但是他們的識(shí)別途徑往往不夠全面。
因此,缺陷管理通常會(huì)涉及到如下四個(gè)步驟:
缺陷生命周期
一般而言,缺陷的生命周期是從bug被發(fā)現(xiàn)開(kāi)始,直至它被最終修復(fù),并能確保不再?gòu)?fù)發(fā)為止。不過(guò)有時(shí)候,根據(jù)組織的策略,使用到的軟件開(kāi)發(fā)模型(如敏捷或迭代),項(xiàng)目的時(shí)間表,以及團(tuán)隊(duì)的結(jié)構(gòu)等因素的不同,缺陷的生命周期也可能有所差異。總的說(shuō)來(lái),它所要經(jīng)歷的步驟與過(guò)程,如下圖所示:
新建:當(dāng)缺陷被首次遞交時(shí),它處于“新建”狀態(tài)。不過(guò),該缺陷可能需要得到進(jìn)一步的確認(rèn)。
分配:經(jīng)由測(cè)試人員創(chuàng)建之后,其主管負(fù)責(zé)人會(huì)審核該缺陷的真實(shí)性,一旦確認(rèn),則會(huì)分配給相應(yīng)的開(kāi)發(fā)人員或團(tuán)隊(duì)接手處理。
打開(kāi):開(kāi)發(fā)人員受理該缺陷,著手分析并研發(fā)缺陷的修復(fù)程序。
修復(fù):當(dāng)開(kāi)發(fā)人員完成了必要的代碼更改,并驗(yàn)證了其修復(fù)效果之后,他會(huì)將缺陷狀態(tài)設(shè)置為“已修復(fù)”,并將缺陷的相關(guān)信息回傳給測(cè)試團(tuán)隊(duì)。
測(cè)試:在此階段,測(cè)試人員對(duì)開(kāi)發(fā)人員傳回的已更改代碼進(jìn)行測(cè)試,以檢驗(yàn)缺陷是否已被修復(fù)。
驗(yàn)證:測(cè)試人員針對(duì)該缺陷展開(kāi)新一輪的測(cè)試。如測(cè)試通過(guò),他會(huì)將該缺陷的狀態(tài)變更為“已驗(yàn)證”。
重新打開(kāi):相反,如果測(cè)試未能通過(guò),則測(cè)試人員將狀態(tài)更改為“重新打開(kāi)”。該缺陷將再次經(jīng)歷上述周期。
關(guān)閉:如果測(cè)試人員最終認(rèn)為目標(biāo)軟件中不再存在此類(lèi)缺陷,他會(huì)將錯(cuò)誤狀態(tài)更改為“已關(guān)閉”。
重復(fù):如果同一個(gè)缺陷被重復(fù)提交、或者兩個(gè)缺陷屬于同一種錯(cuò)誤,那么這個(gè)缺陷狀態(tài)會(huì)被設(shè)置為“重復(fù)提交”。
拒絕:如果開(kāi)發(fā)人員不認(rèn)為這是一個(gè)缺陷,他會(huì)拒絕,然后將錯(cuò)誤的狀態(tài)更改為“已拒絕”。
延期:如果缺陷的狀態(tài)被置為“延期”,則意味著該缺陷將會(huì)在下一個(gè)版本中被修復(fù)。當(dāng)然,將缺陷置為“延期”原因有許多,例如:該缺陷的優(yōu)先級(jí)不高,或是時(shí)間緊迫,又或是對(duì)于軟件不會(huì)造成太大的影響。
手動(dòng)測(cè)試與自動(dòng)化測(cè)試
如果選擇手動(dòng)測(cè)試,則意味著我們需要QA測(cè)試人員,對(duì)目標(biāo)軟件的每一個(gè)測(cè)試用例,都采取手動(dòng)執(zhí)行的方式,人工提供不同的數(shù)據(jù)集,并且仔細(xì)地記錄下每一個(gè)環(huán)節(jié)的成功與失敗率。
由于需要人工進(jìn)行測(cè)試結(jié)果的驗(yàn)證和輸出的判斷,因此不但費(fèi)時(shí)費(fèi)力,而且難免會(huì)產(chǎn)生人為的疏忽。
不言而喻,自動(dòng)化測(cè)試意味著更高的效率,更少的人力,更低的出錯(cuò)幾率,以及適用于回歸和功能性測(cè)試環(huán)節(jié)的、更頻繁的執(zhí)行次數(shù)。
例如:對(duì)于某個(gè)登錄頁(yè)面而言,如果我們需要驗(yàn)證所有登錄嘗試的可能性及其結(jié)果,那么我們只需要通過(guò)編寫(xiě)一段測(cè)試代碼,就能自行輸入所有可能的數(shù)據(jù),執(zhí)行各種類(lèi)型的登錄方法,進(jìn)而判斷并記錄所有登錄嘗試的成敗結(jié)果。
此外,您也可以在不同系統(tǒng)環(huán)境,以及不同的瀏覽器中進(jìn)行模擬測(cè)試。而且,您還可以指定在一天中的某個(gè)特定時(shí)間段,自動(dòng)生成結(jié)果文件及報(bào)告。如今,市面上已有許多自動(dòng)化的測(cè)試工具,例如:等。
以上就是我想向您介紹的有關(guān)軟件測(cè)試的一些入門(mén)知識(shí),希望能夠幫助您建立起相關(guān)的知識(shí)概念,并能指導(dǎo)您后繼的學(xué)習(xí)以及測(cè)試工作。