現(xiàn)在很多的項(xiàng)目團(tuán)隊(duì)都只是依靠手工的驗(yàn)收測(cè)試來(lái)驗(yàn)收軟件是否滿(mǎn)足它的功能需求和非功能需求挤悉。他們也知道這樣會(huì)大大的影響項(xiàng)目的交付質(zhì)量和進(jìn)度,但他們依舊會(huì)這么做,因?yàn)樗麄兛赡芤呀?jīng)嘗試過(guò)去寫(xiě)測(cè)試,嘗試著搭建自動(dòng)化測(cè)試的相關(guān)服務(wù)乳丰,但最終并沒(méi)能從中獲取到很大的好處而且浪費(fèi)了大量的精力,所以他們寧愿去手動(dòng)去測(cè)試内贮,遇到 bug 了手動(dòng)去排除并修復(fù)产园。
當(dāng)然了,這并不是說(shuō)寫(xiě)測(cè)試不好夜郁,相反的什燕,寫(xiě)測(cè)試是非常重要的,但更重要的是我們必須要認(rèn)識(shí)到相關(guān)的測(cè)試策略并正確的選用它竞端,從而為自動(dòng)的項(xiàng)目實(shí)現(xiàn)一套合適自身的部署流程線秋冰。測(cè)試策略的設(shè)計(jì)目的主要是識(shí)別和評(píng)估項(xiàng)目風(fēng)險(xiǎn)的優(yōu)先級(jí),以決定采用哪些行動(dòng)來(lái)緩解風(fēng)險(xiǎn)的一個(gè)過(guò)程婶熬。這也就意味著,寫(xiě)一次測(cè)試并不是一勞永逸的埃撵,對(duì)于一些自動(dòng)化測(cè)試赵颅,我們應(yīng)還需要不斷的去維護(hù)測(cè)試以保證客戶(hù)需要的功能被正確的實(shí)現(xiàn),在開(kāi)發(fā)功能之前我們就應(yīng)該將測(cè)試寫(xiě)好暂刘,一開(kāi)始就將質(zhì)量?jī)?nèi)嵌到自動(dòng)化測(cè)試中饺谬,這樣我們才能從中獲取最大的好處。
一 測(cè)試的分類(lèi)
為了確保交付高質(zhì)量的應(yīng)用軟件谣拣, Brian Marick 對(duì)測(cè)試進(jìn)行了相應(yīng)的建模募寨,他根據(jù)兩個(gè)維度對(duì)測(cè)試進(jìn)行了分類(lèi):
- 業(yè)務(wù)導(dǎo)向還是技術(shù)導(dǎo)向
- 支持開(kāi)發(fā)過(guò)程還是為了對(duì)項(xiàng)目進(jìn)行評(píng)價(jià)
** 1、業(yè)務(wù)導(dǎo)向且支持開(kāi)發(fā)過(guò)程的測(cè)試**
這一象限的測(cè)試也叫功能測(cè)試或驗(yàn)收測(cè)試森缠,目的是為了驗(yàn)收當(dāng)前開(kāi)發(fā)的功能需求是否被正確的完成拔鹰,驗(yàn)收測(cè)試也可以測(cè)試系統(tǒng)特性的各方面,比如功能贵涵、容量列肢、易用性和可變性等。一般我們應(yīng)該在開(kāi)發(fā)一個(gè)功能前就把驗(yàn)收測(cè)試寫(xiě)好宾茂,并采取自動(dòng)化的形式去驗(yàn)收瓷马,提前寫(xiě)驗(yàn)收測(cè)試也可以很好的明確功能需求,通過(guò)這些測(cè)試我們可以知道我們要做哪些功能跨晴。
系統(tǒng)的驗(yàn)收測(cè)試應(yīng)該運(yùn)行在類(lèi)生產(chǎn)環(huán)境欧聘,自動(dòng)化測(cè)試的一些特性:
- 加快反饋的速度
- 減少了測(cè)試人員的工作負(fù)荷
- 讓測(cè)試人員可以集中精力去做探索性測(cè)試和一些必須手動(dòng)測(cè)試的活動(dòng)。
- 驗(yàn)收測(cè)試也是一組回歸測(cè)試
- 寫(xiě)出可讀的測(cè)試套件端盆,這樣就可以從測(cè)試中生成需求說(shuō)明文檔怀骤。這樣也就可以保證了文檔不會(huì)過(guò)時(shí)费封。
2、技術(shù)導(dǎo)向且支持開(kāi)發(fā)過(guò)程的測(cè)試
這些自動(dòng)化測(cè)試應(yīng)該單獨(dú)由開(kāi)發(fā)人員來(lái)創(chuàng)建和維護(hù)晒喷,這一象限的測(cè)試可以分為:
- 單元測(cè)試:一般需要依賴(lài)測(cè)試替身來(lái)模擬數(shù)據(jù)孝偎。因?yàn)椴恍枰褂脭?shù)據(jù)庫(kù)、文件系統(tǒng)...凉敲,所以速度會(huì)很快衣盾,這也意味著會(huì)得到更快的反饋,單元測(cè)試也是回歸測(cè)試套件的主要部分爷抓。
- 組件測(cè)試:用測(cè)試更大的功能集合势决,需要使用數(shù)據(jù)庫(kù)、文件系統(tǒng) ...蓝撇,所以速度會(huì)相對(duì)較慢果复,組件測(cè)試也被稱(chēng)為“集成測(cè)試”。
- 部署測(cè)試:為了檢查部署過(guò)程是否正常渤昌,也就是程序是否被正確的安裝虽抄、配置。
3独柑、業(yè)務(wù)導(dǎo)向且評(píng)價(jià)項(xiàng)目的測(cè)試
這類(lèi)測(cè)試一般需要我們手工測(cè)試迈窟,目的是為了驗(yàn)證實(shí)際交付給用戶(hù)的應(yīng)用軟件是否符合其期望,包括需求規(guī)格說(shuō)明是否滿(mǎn)足以及其正確性忌栅。
幾種測(cè)試的方案:
- 演示:頻繁的向客戶(hù)演示新功能车酣,以此快速的獲取反饋信息
- 探索性測(cè)試:執(zhí)行測(cè)試時(shí),測(cè)試人員因該積極的去發(fā)現(xiàn)隱藏的缺陷索绪,并創(chuàng)建新的自動(dòng)化測(cè)試集合去覆蓋
- 易用性測(cè)試:驗(yàn)證用戶(hù)是否能很容易的使用軟件完成工作(用戶(hù)體驗(yàn))
- beta 測(cè)試:驗(yàn)證用戶(hù)是否對(duì)隱藏的新功能感興趣湖员,從而判斷該功能的價(jià)值
4、技術(shù)導(dǎo)向且評(píng)價(jià)項(xiàng)目的測(cè)試
非功能測(cè)試是指除了功能之外的系統(tǒng)及其它方面的質(zhì)量瑞驱,比如:容量娘摔、可用性、 安全性等唤反。對(duì)非功能性的測(cè)試也是非常重要的晰筛,因?yàn)檫@因素可能會(huì)導(dǎo)致很大的潛在風(fēng)險(xiǎn)。 當(dāng)然非功能性測(cè)試所需要的環(huán)境也更加苛刻拴袭,它需要專(zhuān)業(yè)的人員搭建一些特殊的環(huán)境來(lái)能實(shí)現(xiàn)读第,而且花費(fèi)的時(shí)間也較長(zhǎng),所以非功能性測(cè)試的頻率會(huì)比較低拥刻,而且應(yīng)該在開(kāi)發(fā)的后期去進(jìn)行測(cè)試怜瞒。
二 測(cè)試替身
在自動(dòng)化測(cè)試時(shí)測(cè)試替身扮演著一個(gè)非常重要的角色,比如在單元測(cè)試中通過(guò)模擬對(duì)象來(lái)代替系統(tǒng)的一部分,這樣就可以大大的提高測(cè)試的速度吴汪。
測(cè)試替身的分類(lèi):
- 啞對(duì)象(dump object):指那些被傳遞但不被真正使用的對(duì)象惠窄,這些對(duì)象一般只是用于填充參數(shù)列表,只是起到一個(gè)占位的作用漾橙,沒(méi)有具體的含義杆融。(如測(cè)試A類(lèi)的run方法,需要在創(chuàng)建A類(lèi)的實(shí)例時(shí)需要傳入B類(lèi)實(shí)例霜运,但run方法并沒(méi)有用到B類(lèi)實(shí))
- 假對(duì)象(fake object):假對(duì)象相對(duì)于啞對(duì)象來(lái)說(shuō)脾歇,要對(duì)耦合的組件有一些簡(jiǎn)單的實(shí)現(xiàn),實(shí)現(xiàn)我們?cè)跍y(cè)試中要用到的方法淘捡,指定期望的行為(如返回期望的值)藕各。假對(duì)象適用于替換產(chǎn)品代碼中使用的全局對(duì)象,或者創(chuàng)建的類(lèi)
- 樁(stub):測(cè)試樁與假對(duì)象有點(diǎn)類(lèi)似焦除,也要實(shí)現(xiàn)與產(chǎn)品代碼耦合的組件激况,指定期望的行為。這里最大的不同是測(cè)試樁需要注入到產(chǎn)品代碼中膘魄,從而在測(cè)試產(chǎn)品代碼時(shí)替換組件乌逐,執(zhí)行樁的行為。使用測(cè)試樁不需要進(jìn)行備份和還原创葡。
- spy:與測(cè)試樁類(lèi)似浙踢,但是可以記錄樁使用的記錄,并進(jìn)行驗(yàn)證蹈丸。
- 模擬對(duì)象(mock):設(shè)定期望的行為,然后驗(yàn)證期望的行為是否發(fā)生呐芥,從而達(dá)到測(cè)試產(chǎn)品代碼行為的目的逻杖。適用于驗(yàn)證一些void的行為。
三 現(xiàn)實(shí)中的情況和對(duì)應(yīng)策略
1思瘟、新項(xiàng)目
當(dāng)我們著手開(kāi)始一個(gè)項(xiàng)目的時(shí)候荸百,這也是最容易開(kāi)始做持續(xù)集成的時(shí)候,那么毫無(wú)疑問(wèn)最重要的事情應(yīng)該是先自動(dòng)化驗(yàn)收測(cè)試滨攻。我們需要
- 選擇技術(shù)平臺(tái)和測(cè)試工具
- 建立一個(gè)簡(jiǎn)單的自動(dòng)化構(gòu)建
- 制定遵守 INVEST 原則(獨(dú)立的够话、可協(xié)商的、有價(jià)值的光绕、可估計(jì)的女嘲、小的、可測(cè)試的)的用戶(hù)故事及其考慮其驗(yàn)收條件
步驟:
- 客戶(hù)诞帐、分析師和測(cè)試人員定義驗(yàn)收條件
- 測(cè)試人員和開(kāi)發(fā)人員一起基于驗(yàn)收條件實(shí)現(xiàn)驗(yàn)收測(cè)試的自動(dòng)化
- 開(kāi)發(fā)人員編碼來(lái)滿(mǎn)足驗(yàn)收條件
- 只要有自動(dòng)化測(cè)試失敗欣尼,開(kāi)發(fā)人員都應(yīng)該將它定義為最高優(yōu)先級(jí)并修復(fù)它。
2停蕉、正在進(jìn)行中的項(xiàng)目
對(duì)一個(gè)正在進(jìn)行中的項(xiàng)目去做自動(dòng)化測(cè)試相比項(xiàng)目一開(kāi)始就寫(xiě)測(cè)試面臨著更大的壓力愕鼓。最好的自動(dòng)化測(cè)試的方式就是選擇應(yīng)用程序中那些最常見(jiàn)最重要的用例開(kāi)始寫(xiě)測(cè)試钙态,讓這些測(cè)試盡可能覆蓋更多的選項(xiàng),一般覆蓋的范圍都會(huì)寬于用戶(hù)故事級(jí)別的驗(yàn)收測(cè)試菇晃。
3册倒、遺留的系統(tǒng)
去測(cè)試那些你修改的代碼就可。前提是你已經(jīng)搭建好自動(dòng)化構(gòu)建流程磺送。
幾個(gè)概念
- 可用性測(cè)試:讓用戶(hù)通過(guò)使用產(chǎn)品來(lái)評(píng)估產(chǎn)品的技術(shù)驻子。
- 探索性測(cè)試:在進(jìn)行測(cè)試的時(shí)候同時(shí)探索開(kāi)發(fā)更多類(lèi)型的測(cè)試從而改善測(cè)試流程。
- happy path:一個(gè)正確的執(zhí)行路徑
- alternate path :多個(gè)可以相互替代的 path 册着,入口和過(guò)程可以不一樣拴孤,但是最終產(chǎn)生的用戶(hù)價(jià)值是一樣的
- sad path :選擇一條執(zhí)行路徑產(chǎn)生的錯(cuò)誤處理