軟件測試 | 測試方法的基于活動(dòng)的測試手段
回歸測試(regression testing)?;貧w測試涉及相同測試的重用,使得在軟件變更以后可以重新執(zhí)行(這些測試)。共有三種回歸測試。報(bào)告了程序錯(cuò)誤,在該程序錯(cuò)誤得到更正之后,這時(shí)的測試叫做程序錯(cuò)誤更正回歸(bug fix regression)。其目標(biāo)時(shí)證明該更正有誤。老程序錯(cuò)誤回歸(old bugs regression)測試用來證明對軟件的變更使老的程序錯(cuò)誤更正變成未更正。副作用回歸(side-effect regression)測試又叫做穩(wěn)定性回歸(stability regression)測試,要重新測試產(chǎn)品的很大一部分,其目標(biāo)是證明該變更使得曾經(jīng)沒有問題的東西現(xiàn)在有問題了。
腳本測試(scripted testing)。手工測試,采用由更高級的測試員編寫的測試過程步驟,一般由低級程序員執(zhí)行。
冒煙測試(smoke testing)。這種副作用回歸測試的目標(biāo),是證明新版本不值得測試。從一個(gè)軟件版本到下一個(gè)版本,冒煙測試常常是自動(dòng)化、標(biāo)準(zhǔn)化的。這種測試檢查預(yù)期沒有問題的內(nèi)容,如果不是這樣,就要懷疑該程序是用錯(cuò)誤文件或基本上有問題的東西構(gòu)建的。
探索式測試(exploratory testing)。我們期望測試員在整個(gè)項(xiàng)目過程中,都要了解產(chǎn)品、產(chǎn)品的市場、產(chǎn)品的風(fēng)險(xiǎn)和怎樣沒有通過以前的測試。不斷創(chuàng)建并使用新測試。新測試比老測試更有力,因?yàn)樾聹y試是建立在測試員持續(xù)增長的知識基礎(chǔ)之上的。
游擊式測試(guerilla testing)。對程序快速、有力的攻擊。這是一種探索式測試,通常有時(shí)間限制,并由有探索式測試經(jīng)驗(yàn)的測試員承擔(dān)。例如,高級測試員花一天時(shí)間測試否則會被忽略的部分。測試員要進(jìn)行最有力的攻擊。如果發(fā)現(xiàn)嚴(yán)重的問題,則對這部分要重新做預(yù)算,并且可能會影響整個(gè)測試計(jì)劃。如果沒有發(fā)現(xiàn)嚴(yán)重問題,這部分可以忽略,或只做少量測試。
場景測試(scenario testing)。場景測試(顧名思義)一般要涉及四個(gè)屬性。
(1)測試必須是現(xiàn)實(shí)的,應(yīng)該反應(yīng)客戶實(shí)際要做的事。(2)測試應(yīng)該是復(fù)合的,要以能夠?qū)Τ绦驑?gòu)成一定挑戰(zhàn)的方式包含多個(gè)功能。(3)應(yīng)該能夠容易并且快速地顯示出程序是否通過測試。(4)如果程序沒有通過測試,有關(guān)人員會強(qiáng)烈要求修改程序。具有這四種屬性的測試會很有說服力,如果程序不能通過測試,一般會導(dǎo)致修改程序錯(cuò)誤。但是,測試員可能需要花幾天的時(shí)間開發(fā)出色的場景測試。
場景測試(scenario testing)。通過用例導(dǎo)出的測試,又叫做測試試驗(yàn)(Jacobson 1992,Collard 1999) 或用例流試驗(yàn)(use case flow test)。(很多人把這些測試歸到基于覆蓋率的測試中,關(guān)注重要用例的覆蓋率。)
安裝測試(installation testing)。以各種方式,在可以安裝該軟件的不同類型系統(tǒng)上安裝該軟件。檢查在磁盤上增加或修改了哪些文件。安裝后的軟件能夠正常運(yùn)行嗎?再卸載時(shí)會出現(xiàn)什么情況?
負(fù)載測試(load testing)。通過在面臨很多資源要求的系統(tǒng)上運(yùn)行,攻擊被測程序或系統(tǒng)。在足夠高的負(fù)載下,系統(tǒng)可能會失效,但是導(dǎo)致這種失效的事件模式會指出被測軟件或系統(tǒng)中的弱點(diǎn),這些弱點(diǎn)可能在被測軟件的更一般的使用中暴露。Asbock(2000)對負(fù)載測試做了精彩介紹。
長序列測試(long sequence testing)。測試要持續(xù)一夜,甚至幾天、幾周,目標(biāo)是發(fā)現(xiàn)短序列測試遺漏的錯(cuò)誤。這種測試經(jīng)常發(fā)現(xiàn)的錯(cuò)誤包括越界指針、內(nèi)存泄漏、棧溢出、超過兩個(gè)特性之間的錯(cuò)誤交互等。(長序列測試有時(shí)叫做持久測試(duration testing)、可靠性測試(reliability testing)或耐力測試(endurance testing)。)
性能測試(performance testing)。運(yùn)行這些測試通常要確定程序運(yùn)行有多快,以便確定是否需要優(yōu)化。不過這種測試也可以暴露很多其他程序錯(cuò)誤。如果與前一個(gè)版本相比出現(xiàn)顯著性能變化,則這可能是編碼錯(cuò)誤作用的反映。例如,在試驗(yàn)今天運(yùn)行一個(gè)簡單功能測試需要多長時(shí)間,明天在同一臺機(jī)器上運(yùn)行同樣的測試需要多長時(shí)間時(shí),如果兩次運(yùn)行時(shí)間相差三倍以上,則可能需要與程序員進(jìn)行核對,或編碼錯(cuò)誤報(bào)告。更慢和更快兩種情況都要警惕,因?yàn)槌绦虻幕緝?nèi)容發(fā)生了變化。