qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          企業(yè)Web應(yīng)用中的敏捷測(cè)試和瀑布測(cè)試

          簡(jiǎn)介

            同是企業(yè)WEB應(yīng)用程序項(xiàng)目,一個(gè)用敏捷,一個(gè)用瀑布流程,它們的測(cè)試策略會(huì)有何不同?在二者中,測(cè)試的關(guān)注點(diǎn)都在于告訴業(yè)務(wù)客戶這個(gè)應(yīng)用程序做了哪些事情,同樣也要消除應(yīng)用程序作為產(chǎn)品交付以后的失敗風(fēng)險(xiǎn)。它們的主要區(qū)別不是測(cè)試本身,而是何時(shí)執(zhí)行測(cè)試、由誰(shuí)執(zhí)行測(cè)試。測(cè)試的每個(gè)階段都可以在系統(tǒng)就緒后隨時(shí)開(kāi)始,無(wú)須等待前一個(gè)測(cè)試階段完成。

            從未涉足敏捷項(xiàng)目,或是剛啟動(dòng)某個(gè)敏捷項(xiàng)目并在尋找指導(dǎo)建議的讀者都可以看看這篇文章,它正是為你們而寫(xiě)。文中的信息雖并非筆者新創(chuàng),但也是收集整理的結(jié)果,希望這些信息能幫助你們朝著更為敏捷的過(guò)程邁進(jìn)。

            敏捷項(xiàng)目的測(cè)試階段跟瀑布項(xiàng)目的測(cè)試階段幾乎毫無(wú)二致。每個(gè)階段都有準(zhǔn)出標(biāo)準(zhǔn),但是在進(jìn)入某個(gè)測(cè)試階段之前,是不需要等待整個(gè)應(yīng)用程序完成的。只要應(yīng)用程序所完成的部分足以進(jìn)入下一個(gè)測(cè)試階段就行。因?yàn)闇y(cè)試的對(duì)象是一個(gè)已完成的功能,而不是一個(gè)發(fā)布,所以測(cè)試階段是在持續(xù)并行進(jìn)行的。于是就有了一大堆回歸測(cè)試。這便也意味著回歸測(cè)試是測(cè)試自動(dòng)化的基礎(chǔ)。對(duì)于敏捷項(xiàng)目而言,環(huán)境與資源也是要注意的地方,因?yàn)閷?duì)測(cè)試環(huán)境的需求會(huì)來(lái)得更早、更加頻繁。

            “快速失敗”是敏捷項(xiàng)目的一句格言,它的含義是盡可能早地判斷出應(yīng)用程序無(wú)法滿足業(yè)務(wù)需求。要做到這一點(diǎn),就需要不斷地對(duì)解決方案是否滿足業(yè)務(wù)需求進(jìn)行檢測(cè),一旦不滿足,就要盡早把問(wèn)題解決。敏捷團(tuán)隊(duì)成員-開(kāi)發(fā)人員、測(cè)試人員、架構(gòu)師、業(yè)務(wù)分析師以及業(yè)務(wù)代表等人都關(guān)注于盡早交付業(yè)務(wù)價(jià)值。所以,測(cè)試需要所有團(tuán)隊(duì)成員協(xié)力來(lái)做, 它不僅僅是測(cè)試人員的責(zé)任。

            測(cè)試分類

            敏捷項(xiàng)目跟瀑布項(xiàng)目的測(cè)試分類幾乎是一樣的。其差別主要在于大部分精力投入的地方和每個(gè)測(cè)試階段所執(zhí)行的時(shí)機(jī)。敏捷項(xiàng)目?jī)A力關(guān)注單元測(cè)試功能測(cè)試,從而為稍后執(zhí)行的測(cè)試階段創(chuàng)造出高質(zhì)量的代碼,于是后期就不會(huì)發(fā)現(xiàn)本應(yīng)在早期發(fā)現(xiàn)的缺陷,并能專注于所需要測(cè)試的領(lǐng)域。而瀑布項(xiàng)目就有一個(gè)常見(jiàn)的問(wèn)題,后期測(cè)試的焦點(diǎn)總是放在找出本來(lái)應(yīng)該在前期發(fā)現(xiàn)的缺陷身上。于是修復(fù)缺陷的成本提高了,測(cè)試工作的投入翻番了,測(cè)試的關(guān)注點(diǎn)也偏離了。

            瀑布項(xiàng)目和敏捷項(xiàng)目另外一個(gè)巨大的不同在于測(cè)試自動(dòng)化。敏捷項(xiàng)目力求在所有測(cè)試領(lǐng)域內(nèi)都達(dá)到100%自動(dòng)化。測(cè)試跟持續(xù)構(gòu)建系統(tǒng)集成在一起,于是當(dāng)代碼發(fā)生變化時(shí),這個(gè)變化會(huì)被自動(dòng)檢測(cè)到,應(yīng)用程序被構(gòu)建起來(lái),然后所有的測(cè)試都會(huì)被執(zhí)行。

            測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)在敏捷項(xiàng)目中很常用,用這種方法的時(shí)候,測(cè)試用例比代碼要先一步創(chuàng)建。于是我們就可以越來(lái)越多地看到為代碼和功能創(chuàng)建的測(cè)試用例。用自動(dòng)化測(cè)試來(lái)驅(qū)動(dòng)開(kāi)發(fā),然后消除重復(fù),這種做法可以保證無(wú)論復(fù)雜度多高,任何開(kāi)發(fā)者都可以寫(xiě)出可靠的、沒(méi)有bug的代碼。TDD常用的地方是單元測(cè)試,但也同樣可以用于功能測(cè)試、集成測(cè)試、用戶驗(yàn)收測(cè)試和性能測(cè)試。

            單元測(cè)試

            單元測(cè)試又稱白盒測(cè)試,它要測(cè)試所開(kāi)發(fā)出來(lái)的每一個(gè)模塊。瀑布項(xiàng)目不關(guān)注這個(gè)測(cè)試階段,而且大多數(shù)時(shí)候即便有的話也是隨意為之。敏捷項(xiàng)目強(qiáng)調(diào)單元測(cè)試,而且會(huì)把所有單元測(cè)試都自動(dòng)化。自動(dòng)化的單元測(cè)試是敏捷項(xiàng)目的基礎(chǔ),對(duì)持續(xù)集成和重構(gòu)起輔助作用。

            單元測(cè)試應(yīng)當(dāng)考慮以下幾點(diǎn):

            1、用stub和mock來(lái)消除對(duì)外部接口的依賴。

            2、由創(chuàng)建代碼的開(kāi)發(fā)人員編寫(xiě)單元測(cè)試。

            3、單元測(cè)試要能自動(dòng)化執(zhí)行,而且要被包含在持續(xù)開(kāi)發(fā)構(gòu)建中。

            4、單元測(cè)試之間不能有依賴,讓每一個(gè)單元測(cè)試都能獨(dú)立執(zhí)行。

            5、任何開(kāi)發(fā)人員都要能在他自己的機(jī)器上執(zhí)行單元測(cè)試。

            6、用代碼覆蓋率來(lái)判斷哪些部分的代碼沒(méi)有被單元測(cè)試覆蓋。

            7、在檢入代碼的修改之前,要保證單元測(cè)試100%通過(guò)。

            任何測(cè)試失敗都表示構(gòu)建失敗。

            功能測(cè)試

            功能測(cè)試常常跟系統(tǒng)測(cè)試相關(guān)聯(lián),它的重點(diǎn)是測(cè)試應(yīng)用程序的功能(包括負(fù)面測(cè)試和邊界條件)。在瀑布項(xiàng)目中,測(cè)試團(tuán)隊(duì)一般是在這個(gè)階段開(kāi)始測(cè)試工作。測(cè)試團(tuán)隊(duì)的成員會(huì)一直等下去,直到開(kāi)發(fā)者完成了所有的功能,并通過(guò)所有的單元測(cè)試之后才進(jìn)入功能測(cè)試階段。 敏捷項(xiàng)目把功能拆分成故事,每次迭代開(kāi)發(fā)一定數(shù)量的故事。每個(gè)故事都有一些驗(yàn)收標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)一般都是由業(yè)務(wù)分析師和測(cè)試分析師制定的,它們也可以看作跟測(cè)試條件類似。測(cè)試分析師會(huì)根據(jù)驗(yàn)收標(biāo)準(zhǔn)創(chuàng)建測(cè)試用例,用它們來(lái)檢測(cè)代碼行為的完成程度。故事一旦編碼完成,而且單元測(cè)試運(yùn)行通過(guò)以后,就可以運(yùn)行功能測(cè)試來(lái)判斷是否滿足驗(yàn)收標(biāo)準(zhǔn)了。這就意味著在敏捷項(xiàng)目中,只要第一塊功能已經(jīng)完成編碼,功能測(cè)試就可以啟動(dòng),而且會(huì)貫穿整個(gè)項(xiàng)目的生命周期。

            功能測(cè)試應(yīng)當(dāng)考慮以下幾點(diǎn)

            1、要能自動(dòng)化執(zhí)行,并且進(jìn)入持續(xù)構(gòu)建(如果測(cè)試運(yùn)行時(shí)間很多長(zhǎng),也可以只在開(kāi)發(fā)持續(xù)構(gòu)建中包含一小部分精挑細(xì)選的功能測(cè)試,而在系統(tǒng)集成持續(xù)構(gòu)建中包含全部功能測(cè)試)。

            2、在編碼之前寫(xiě)下測(cè)試意圖,代碼完成后對(duì)測(cè)試進(jìn)行實(shí)現(xiàn)。

            3、把通過(guò)所有功能測(cè)試作為故事完成的條件。

            4、在應(yīng)用程序安裝到另外一個(gè)環(huán)境(如試機(jī)環(huán)境或產(chǎn)品環(huán)境)上的時(shí)候需要執(zhí)行功能測(cè)試。

            任何測(cè)試失敗都表示構(gòu)建失敗。

           探索性測(cè)試

            探索性測(cè)試又稱為隨機(jī)測(cè)試。瀑布項(xiàng)目在它們的測(cè)試策略中沒(méi)有這種測(cè)試類型,不過(guò)大多數(shù)測(cè)試人員都會(huì)多少做一些探索性測(cè)試。在敏捷項(xiàng)目中這是個(gè)很關(guān)鍵的測(cè)試階段,因?yàn)樗梢杂脕?lái)檢測(cè)自動(dòng)化測(cè)試的覆蓋率,并收集對(duì)于應(yīng)用程序質(zhì)量的反饋。它為測(cè)試人員和業(yè)務(wù)分析師提供了一種結(jié)構(gòu)化的方式去使用、去探索系統(tǒng),從而找到缺陷。如果探索性測(cè)試在某個(gè)功能區(qū)域內(nèi)找到了大量缺陷,那這部分的自動(dòng)化測(cè)試用例就要被審核。

            探索性測(cè)試應(yīng)當(dāng)考慮以下幾點(diǎn):

            1、在系統(tǒng)集成環(huán)境中執(zhí)行。

            2、在較高的層次上監(jiān)測(cè)探索性測(cè)試活動(dòng)。

            3、用自動(dòng)化的環(huán)境設(shè)置方式來(lái)減少搭建環(huán)境的時(shí)間。

            4、將破壞性測(cè)試作為探索性測(cè)試的一部分。

            集成測(cè)試

            應(yīng)用程序在作為產(chǎn)品部署的時(shí)候,需要各個(gè)部分的協(xié)作;集成測(cè)試就是把這各個(gè)獨(dú)立的部分集成起來(lái)進(jìn)行測(cè)試。瀑布項(xiàng)目不但會(huì)把應(yīng)用程序的各個(gè)獨(dú)立模塊進(jìn)行集成,還會(huì)把那些雖然不屬于項(xiàng)目的一部分,但是要開(kāi)發(fā)當(dāng)前應(yīng)用程序就必須用到的一些應(yīng)用程序也做集成。在敏捷項(xiàng)目中,獨(dú)立模塊間的集成是被持續(xù)構(gòu)建所覆蓋的,所以集成測(cè)試的關(guān)注點(diǎn)就是那些不屬于當(dāng)前項(xiàng)目的外部接口。

            集成測(cè)試應(yīng)當(dāng)考慮以下幾點(diǎn)

            1、在執(zhí)行集成測(cè)試的時(shí)候,需要考慮到當(dāng)前迭代還沒(méi)有開(kāi)發(fā)的功能。

            2、寫(xiě)一些集成測(cè)試來(lái)定位特殊的集成點(diǎn),以協(xié)助代碼調(diào)試,即便功能測(cè)試會(huì)調(diào)用到這些集成點(diǎn)也無(wú)妨。

            3、將集成測(cè)試自動(dòng)化,放到系統(tǒng)集成持續(xù)構(gòu)建中。

            任何測(cè)試失敗都表示構(gòu)建失敗。

            數(shù)據(jù)驗(yàn)證

            如果項(xiàng)目需要移植既有數(shù)據(jù)的話,就要進(jìn)行數(shù)據(jù)驗(yàn)證。它可以保證現(xiàn)有的數(shù)據(jù)被正確地移植到新的Schema中,新的數(shù)據(jù)被添加進(jìn)來(lái),舊的數(shù)據(jù)被移除。這種類型的測(cè)試在瀑布項(xiàng)目和敏捷項(xiàng)目中是被同等對(duì)待的,除了敏捷項(xiàng)目會(huì)盡力把它自動(dòng)以外。

            數(shù)據(jù)驗(yàn)證應(yīng)該考慮以下幾點(diǎn):

            1、在系統(tǒng)集成環(huán)境、試機(jī)環(huán)境和產(chǎn)品環(huán)境中都要執(zhí)行。

            2、盡可能地自動(dòng)化。

            3、要把測(cè)試放到系統(tǒng)集成持續(xù)構(gòu)建中。

            任何測(cè)試失敗都表示構(gòu)建失敗。

            用戶驗(yàn)收測(cè)試(UAT)

            UAT關(guān)注的是完整的業(yè)務(wù)過(guò)程,它用來(lái)確保應(yīng)用程序能按照業(yè)務(wù)的處理方式工作并能滿足業(yè)務(wù)需求。它同樣還要從客戶、消費(fèi)者、管理員等各種用戶的角度出發(fā)考慮應(yīng)用程序的可用性。在瀑布項(xiàng)目中,這個(gè)階段通常就被用來(lái)找出應(yīng)該在早期階段就被發(fā)現(xiàn)的bug。業(yè)務(wù)人員也會(huì)在這個(gè)階段驗(yàn)證開(kāi)發(fā)團(tuán)隊(duì)交付的應(yīng)用程序的質(zhì)量。敏捷項(xiàng)目用UAT來(lái)確保應(yīng)用程序滿足業(yè)務(wù)需求,因?yàn)榈鹊竭M(jìn)入這個(gè)測(cè)試階段的時(shí)候,代碼質(zhì)量已經(jīng)較高了。在敏捷項(xiàng)目中,業(yè)務(wù)人員從早期的測(cè)試階段就開(kāi)始參與,所以他們對(duì)交付的東西有更多的信心。

            UAT應(yīng)該考慮以下幾點(diǎn):

            1、首先進(jìn)行手工測(cè)試,等它驗(yàn)證了系統(tǒng)行為以后再把它自動(dòng)化。

            2、把自動(dòng)化測(cè)試放到系統(tǒng)集成持續(xù)構(gòu)建中

            3、讓?xiě)?yīng)用程序的最終用戶親自將整個(gè)程序運(yùn)行一遍,不過(guò)項(xiàng)目的測(cè)試人員要在旁邊協(xié)助。

            4、在試機(jī)環(huán)境下執(zhí)行UAT, 用作驗(yàn)收。

            5、只要完成了一個(gè)業(yè)務(wù)過(guò)程或者一個(gè)主要的UI組件,就要執(zhí)行UAT。

            任何測(cè)試失敗都表示構(gòu)建失敗。

          性能測(cè)試

            性能測(cè)試涵蓋的范圍比較大,不過(guò)一般可以分成以下三類。

            1、容量測(cè)試:獨(dú)立測(cè)試核心功能組件的容量。例如, 可以支持多個(gè)用戶并發(fā)檢索?一秒種能做多少次?等等。容量測(cè)試被用來(lái)精確度量系統(tǒng)的極限,還可以對(duì)容量規(guī)劃和系統(tǒng)的擴(kuò)展性起輔助作用。

            2、負(fù)載測(cè)試:側(cè)重于系統(tǒng)在負(fù)載下的表現(xiàn)。負(fù)載應(yīng)該要體現(xiàn)出用戶所期望系統(tǒng)可以經(jīng)受得住的流量。

            3、壓力測(cè)試:關(guān)注系統(tǒng)在壓力下的表現(xiàn)。比較常用的技術(shù)是浸泡測(cè)試(soak test);在浸泡測(cè)試中,系統(tǒng)會(huì)在一定的負(fù)載下持續(xù)運(yùn)行一段時(shí)間,用來(lái)找出長(zhǎng)期問(wèn)題,如內(nèi)存泄漏、資源泄漏等。壓力測(cè)試還會(huì)覆蓋故障轉(zhuǎn)移和恢復(fù),例如正在工作的集群中的一臺(tái)服務(wù)器出現(xiàn)問(wèn)題,檢查是否可以做到故障轉(zhuǎn)移和恢復(fù)。

            瀑布項(xiàng)目直到項(xiàng)目接近尾聲的時(shí)候才做性能測(cè)試,這個(gè)時(shí)候應(yīng)用程序已經(jīng)“完成了”開(kāi)發(fā),通過(guò)單元測(cè)試和功能測(cè)試。而敏捷項(xiàng)目則會(huì)盡快啟動(dòng)性能測(cè)試。

            性能測(cè)試應(yīng)該考慮以下幾點(diǎn):

            1、在功能測(cè)試中設(shè)置一些性能度量,例如一個(gè)測(cè)試第一次運(yùn)行要花多長(zhǎng)時(shí)間,接下來(lái)每次又要花多久,把這些時(shí)間所占的百分比做一下比較(上升表示有問(wèn)題,下降表示良好)

            2、把一些性能測(cè)試放到系統(tǒng)集成持續(xù)構(gòu)建中去做。

            3、一旦一個(gè)業(yè)務(wù)過(guò)程,或是某個(gè)規(guī)模比較大的功能或接口完工,就要做性能測(cè)試。

            4、只有在試機(jī)環(huán)境中運(yùn)行的時(shí)候才簽收性能測(cè)試。

            任何測(cè)試失敗都表示構(gòu)建失敗。

            非功能性測(cè)試

            非功能性測(cè)試所涵蓋的范圍很廣,性能測(cè)試通常也屬于這個(gè)話題。但是因?yàn)樾阅軠y(cè)試是企業(yè)解決方案中很重要的一部分,而且需要不同的資源和技能集,所以就被劃出來(lái)單獨(dú)成為一個(gè)測(cè)試階段。非功能性測(cè)試一般都包含有這些內(nèi)容:可操作性(包括監(jiān)控、日志、審計(jì)/歷史記錄)、可靠性(包括故障轉(zhuǎn)移,單個(gè)組件故障,完整故障,接口故障)以及安全性。無(wú)論瀑布項(xiàng)目還是敏捷項(xiàng)目,在這個(gè)測(cè)試階段都會(huì)遇到重重阻礙,二者的差異不太突出。

            非功能性測(cè)試應(yīng)該考慮以下幾點(diǎn):

            1、非功能性需求一般都是很難捕獲的,而且即便被捕獲,也很難進(jìn)行度量。(例如:99.9%的無(wú)故障時(shí)間)

            2、盡可能讓所有的非功能測(cè)試都自動(dòng)化執(zhí)行,把它們也都放到系統(tǒng)集成測(cè)試環(huán)境中。

            3、在定義測(cè)試用例的時(shí)候,讓真正要監(jiān)控產(chǎn)品環(huán)境并對(duì)其提供支持的人也參與進(jìn)來(lái)。

            4、在應(yīng)用程序成為產(chǎn)品以后,非功能測(cè)試或監(jiān)控還要繼續(xù)。

            回歸測(cè)試

            在瀑布項(xiàng)目中,回歸測(cè)試無(wú)論從時(shí)間上還是費(fèi)用上來(lái)看,都算得上是成本最高的測(cè)試階段了。如果在項(xiàng)目晚期(如UAT階段)發(fā)現(xiàn)了缺陷,再構(gòu)建應(yīng)用程序的時(shí)候,就得把所有單元測(cè)試、功能測(cè)試和用戶驗(yàn)收測(cè)試重新運(yùn)行一遍。因?yàn)榇蠖鄶?shù)瀑布項(xiàng)目都沒(méi)有自動(dòng)化測(cè)試,所以回歸測(cè)試的開(kāi)銷就很大。敏捷項(xiàng)目以持續(xù)構(gòu)建和自動(dòng)化測(cè)試來(lái)應(yīng)對(duì)回歸測(cè)試,使每次構(gòu)建都可以進(jìn)行回歸測(cè)試。

            回歸測(cè)試應(yīng)該考慮這一點(diǎn):

            每次迭代結(jié)束時(shí)都做一下手工測(cè)試,收集早期反饋。

            產(chǎn)品校驗(yàn)

            產(chǎn)品校驗(yàn)會(huì)在把產(chǎn)品交付給用戶使用之前,審查產(chǎn)品環(huán)境中的應(yīng)用程序,看看所有內(nèi)容是否否都已經(jīng)正確安裝,系統(tǒng)的操作性如何。而有些測(cè)試還是只能到了產(chǎn)品環(huán)境中才能完整運(yùn)行的,最好盡快將其完成。無(wú)論是瀑布項(xiàng)目還是敏捷項(xiàng)目,產(chǎn)品校驗(yàn)的方式并無(wú)二致。

            產(chǎn)品校驗(yàn)應(yīng)該考慮以下幾點(diǎn):

            1、讓最終用戶來(lái)做產(chǎn)品校驗(yàn)測(cè)試。

            2、趁著產(chǎn)品系統(tǒng)還沒(méi)有正式上線,從這個(gè)測(cè)試階段的早期就要盡可能多地執(zhí)行自動(dòng)化回歸測(cè)試。

            瀑布項(xiàng)目和敏捷項(xiàng)目的測(cè)試階段還是很相似的,主要差異就是每個(gè)測(cè)試階段關(guān)注的重點(diǎn)和執(zhí)行時(shí)機(jī)。敏捷項(xiàng)目中有大量的自動(dòng)化測(cè)試,用持續(xù)集成來(lái)減少回歸測(cè)試對(duì)項(xiàng)目帶來(lái)的影響。在瀑布項(xiàng)目中,如果發(fā)現(xiàn)應(yīng)用程序的質(zhì)量低下,那么在晚期再去執(zhí)行前期的測(cè)試就是很常見(jiàn)的事情(如在UAT的時(shí)候做功能測(cè)試)。敏捷項(xiàng)目可以減少測(cè)試中的浪費(fèi),在早期發(fā)現(xiàn)問(wèn)題,讓團(tuán)隊(duì)在交付應(yīng)用時(shí)增強(qiáng)信心。

          環(huán)境

            在開(kāi)發(fā)過(guò)程的各個(gè)階段都要用到測(cè)試環(huán)境,從而確保應(yīng)用程序的正常運(yùn)行。越到后期,測(cè)試環(huán)境與預(yù)期的產(chǎn)品環(huán)境就會(huì)越相似。測(cè)試環(huán)境一般都會(huì)包括一個(gè)開(kāi)發(fā)環(huán)境,讓開(kāi)發(fā)者集成代碼并運(yùn)行一些測(cè)試。系統(tǒng)集成環(huán)境跟開(kāi)發(fā)環(huán)境有些類似,不過(guò)它會(huì)集成更多的第三方應(yīng)用程序,也許還有大批量的數(shù)據(jù)。試機(jī)環(huán)境幾乎是產(chǎn)品環(huán)境的鏡像,也是應(yīng)用程序變成產(chǎn)品之前的最后一個(gè)階段。

            敏捷項(xiàng)目和瀑布項(xiàng)目所需的環(huán)境沒(méi)太大區(qū)別,其中一個(gè)不同之處在于,敏捷項(xiàng)目從項(xiàng)目伊始直至項(xiàng)目結(jié)束,都要用到所有的環(huán)境。在敏捷項(xiàng)目中,保證所有的環(huán)境都一直正常工作也是很重要的。無(wú)論因?yàn)槭裁丛蜃屇硞€(gè)環(huán)境出現(xiàn)故障,都要立刻讓它重新工作起來(lái)。在這個(gè)話題上,敏捷和瀑布還有另外一點(diǎn)差異,那就是環(huán)境的計(jì)劃和資源分配對(duì)它們的影響不同,尤其是當(dāng)各種環(huán)境被項(xiàng)目之外的團(tuán)隊(duì)進(jìn)行管理的時(shí)候,其差異尤為顯著。

            開(kāi)發(fā)集成環(huán)境

            開(kāi)發(fā)者在開(kāi)發(fā)環(huán)境中集成代碼,開(kāi)發(fā)應(yīng)用程序。瀑布項(xiàng)目對(duì)開(kāi)發(fā)環(huán)境的重要性不會(huì)考慮太多;開(kāi)發(fā)環(huán)境中的代碼一直都不能工作,到了開(kāi)發(fā)者需要彼此集成代碼的時(shí)候才想起來(lái)使用,而這時(shí)項(xiàng)目已經(jīng)臨近尾聲。在敏捷項(xiàng)目中,開(kāi)發(fā)環(huán)境是整個(gè)開(kāi)發(fā)工作中不可分割的一部分,在開(kāi)始編碼之前就必須準(zhǔn)備就緒。這個(gè)環(huán)境會(huì)被用來(lái)持續(xù)地集成代碼和運(yùn)行測(cè)試套件。無(wú)論因?yàn)槭裁丛蛟斐森h(huán)境故障,都要立刻修復(fù)。

            開(kāi)發(fā)環(huán)境應(yīng)該考慮以下幾點(diǎn):

            1、集成代碼、構(gòu)建和測(cè)試的時(shí)間加起來(lái)不要超過(guò)15分鐘。

            2、每個(gè)開(kāi)發(fā)人員所用的環(huán)境跟開(kāi)發(fā)環(huán)境保持一致(硬件環(huán)境可以不一樣,但軟件環(huán)境一定要一樣)。

            3、所用的數(shù)據(jù)要盡可能跟產(chǎn)品數(shù)據(jù)保持一致。如果產(chǎn)品數(shù)據(jù)過(guò)于寵大,難以載入,也可以只取一部分。在每個(gè)發(fā)布周期的開(kāi)始階段,這些數(shù)據(jù)要從產(chǎn)品數(shù)據(jù)中重新更新。

            4、管理這個(gè)環(huán)境的責(zé)任應(yīng)該落在項(xiàng)目團(tuán)隊(duì)身上。

            5、向這個(gè)環(huán)境中部署的頻率大約是以小時(shí)計(jì)算。

            6、自動(dòng)部署。

            系統(tǒng)集成環(huán)境

            系統(tǒng)集成環(huán)境用來(lái)將所開(kāi)發(fā)的應(yīng)用程序和其他應(yīng)用程序進(jìn)行集成。在瀑布項(xiàng)目中,這個(gè)環(huán)境只會(huì)在項(xiàng)目臨近尾聲的時(shí)候才會(huì)用到,而且傾向于多個(gè)項(xiàng)目共用一個(gè)集成環(huán)境。在敏捷項(xiàng)目中,一旦開(kāi)始編碼,這個(gè)環(huán)境就要準(zhǔn)備就緒。應(yīng)用程序會(huì)被頻繁部署到這個(gè)環(huán)境中,繼而開(kāi)始執(zhí)行功能測(cè)試、集成測(cè)試、可用性測(cè)試和探索性測(cè)試等等。應(yīng)用程序的演示是在這個(gè)環(huán)境中進(jìn)行。

            系統(tǒng)集成環(huán)境應(yīng)該考慮以下幾點(diǎn)。

            1、集成點(diǎn)應(yīng)該被真正的外部應(yīng)用程序所代替。外部應(yīng)用程序應(yīng)該處于測(cè)試狀態(tài),而非真正的生產(chǎn)版本。

            2、把產(chǎn)品環(huán)境的架構(gòu)復(fù)制過(guò)來(lái)。

            3、把這個(gè)環(huán)境中所使用的數(shù)據(jù)應(yīng)該是產(chǎn)品環(huán)境數(shù)據(jù)的副本,每個(gè)發(fā)布周期的開(kāi)始階段,都要從產(chǎn)品數(shù)據(jù)中重新更新。

            4、建立運(yùn)行這個(gè)環(huán)境中所有測(cè)試的系統(tǒng)集成持續(xù)構(gòu)建。

            5、管理這個(gè)環(huán)境的責(zé)任應(yīng)該落在項(xiàng)目團(tuán)隊(duì)身上。

            6、向這個(gè)環(huán)境中部署構(gòu)建的頻率大約是以天計(jì)算。

            7、自動(dòng)部署應(yīng)用程序。

            試機(jī)環(huán)境

            試機(jī)環(huán)境用來(lái)驗(yàn)證應(yīng)用程序可以部署為產(chǎn)品,而且工作正常。為了達(dá)到這個(gè)目的,試機(jī)環(huán)境應(yīng)該完全復(fù)制產(chǎn)品環(huán)境,包括網(wǎng)絡(luò)配置、路由器、交換機(jī)以及計(jì)算機(jī)性能等等。在瀑布項(xiàng)目中這個(gè)環(huán)境往往需要“預(yù)訂”也要有一個(gè)計(jì)劃,計(jì)劃在這個(gè)環(huán)境中進(jìn)行多少次部署以及何時(shí)進(jìn)行部署。敏捷項(xiàng)目對(duì)這個(gè)環(huán)境不像對(duì)開(kāi)發(fā)環(huán)境和集成環(huán)境那樣依賴;不過(guò)在項(xiàng)目的整個(gè)生命周期中,還是需要常常進(jìn)行部署。

            試機(jī)環(huán)境應(yīng)該考慮以下幾點(diǎn):

            1、這里的數(shù)據(jù)應(yīng)該是產(chǎn)品數(shù)據(jù)的完整副本,每次應(yīng)用程序部署前都要更新。

            2、用它來(lái)驗(yàn)證UAT, 性能測(cè)試和非功能測(cè)試(穩(wěn)定性、可靠性等等)

            3、向這個(gè)環(huán)境中部署構(gòu)建的頻率大約是以迭代計(jì)算,如每?jī)芍芤淮巍?/p>

            4、管理這個(gè)環(huán)境的人應(yīng)該就是管理產(chǎn)品環(huán)境的人,讓他提前接觸應(yīng)用程序并進(jìn)行知識(shí)傳遞。

            5、自動(dòng)部署應(yīng)用程序。

            產(chǎn)品環(huán)境

            產(chǎn)品環(huán)境是應(yīng)用程序正式上線時(shí)的環(huán)境。產(chǎn)品校驗(yàn)測(cè)試就在這個(gè)環(huán)境中執(zhí)行,同時(shí)會(huì)做一些度量以檢驗(yàn)測(cè)試成果。瀑布項(xiàng)目和敏捷項(xiàng)目在這里的區(qū)別不大。在敏捷項(xiàng)目中,發(fā)布過(guò)程會(huì)盡力做到自動(dòng)化,為向產(chǎn)品環(huán)境中頻繁發(fā)布提供條件。

            產(chǎn)品環(huán)境應(yīng)該考慮以下幾點(diǎn):

            1、在應(yīng)用程序正式上線之前,在產(chǎn)品環(huán)境中做回歸測(cè)試。

            2、要做度量,以檢驗(yàn)測(cè)試成果,例如在前三個(gè)月到六個(gè)月之前,用戶報(bào)告了多少問(wèn)題,問(wèn)題的嚴(yán)重性如何。

            無(wú)論是哪種項(xiàng)目,要保證時(shí)間期限,就都得做到在需要用到環(huán)境的時(shí)候就有一個(gè)環(huán)境可供使用。瀑布項(xiàng)目會(huì)設(shè)法遵守嚴(yán)格的計(jì)劃,便于對(duì)環(huán)境做安排。敏捷項(xiàng)目的靈活性更強(qiáng)。也許有了足夠的功能就可以進(jìn)入試機(jī)環(huán)境了,或者業(yè)務(wù)人員會(huì)決定產(chǎn)品提前上線。為了做到向試機(jī)環(huán)境快速部署,然后進(jìn)入產(chǎn)品環(huán)境,就要有系統(tǒng)集成環(huán)境以及有關(guān)過(guò)程的輔助。

            問(wèn)題管理

            問(wèn)題包括缺陷(bug)和變更請(qǐng)求。瀑布項(xiàng)目有著嚴(yán)格的缺陷和變更請(qǐng)求管理,而敏捷項(xiàng)目飽含變化,所以就沒(méi)有那么嚴(yán)格的變更管理。如果需要有變更,就創(chuàng)建一個(gè)(或是一些)故事,放到待處理事項(xiàng)里面。高優(yōu)先級(jí)的故事會(huì)放到下一次迭代中完成。

            缺陷管理在敏捷項(xiàng)目中依然適用。如果有人發(fā)現(xiàn)一個(gè)正在開(kāi)發(fā)故事有缺陷,大家就會(huì)進(jìn)行非正式的溝通,發(fā)現(xiàn)缺陷的人把它告訴開(kāi)發(fā)人員,缺陷立刻被修復(fù)。如果某個(gè)缺陷并不屬于當(dāng)前迭代中開(kāi)發(fā)的故事,或者屬于當(dāng)前故事,但并不嚴(yán)重,那就用缺陷跟蹤工具記錄下來(lái)。這個(gè)缺陷會(huì)被當(dāng)做故事處理;也就是說(shuō),會(huì)創(chuàng)建一張故事卡,讓客戶排優(yōu)先級(jí),放待處理故事里面。團(tuán)隊(duì)需要進(jìn)行權(quán)衡:要找問(wèn)題所在,為大家理解這個(gè)問(wèn)題并安排優(yōu)先級(jí)提供足夠的信息,但又不能在一個(gè)對(duì)客戶而言優(yōu)先級(jí)并不是很高的缺陷上面花太多時(shí)間。

            瀑布項(xiàng)目和敏捷項(xiàng)目的缺陷內(nèi)容(描述、組件、嚴(yán)重程序等)是一樣的,除了一個(gè)字段以外:敏捷項(xiàng)目多了一個(gè)字段- 業(yè)務(wù)價(jià)值,如果可能的話就用幣值描述。這個(gè)字段表示如果缺陷被解決的話可以帶來(lái)多少業(yè)務(wù)價(jià)值。將業(yè)務(wù)價(jià)值跟缺陷關(guān)聯(lián)以后,客戶就更好地判斷這個(gè)缺陷跟新功能相比是不是更有價(jià)值,是不是應(yīng)該有更高的優(yōu)先級(jí)。

            工具

            所有項(xiàng)目都要用到工具,只是程序不同。瀑布項(xiàng)目用工具來(lái)強(qiáng)化過(guò)程以及提高效率,這有時(shí)會(huì)造成沖突。敏捷項(xiàng)目用工具輔助提升效率,與過(guò)程無(wú)關(guān)。在敏捷項(xiàng)目中,所有的測(cè)試都應(yīng)該可以在任何團(tuán)隊(duì)成員的個(gè)人環(huán)境中運(yùn)行,也就是說(shuō),所有人都可以使用那些自動(dòng)化測(cè)試用例的工具。所以敏捷項(xiàng)目中會(huì)經(jīng)常用到開(kāi)源產(chǎn)品,這又意味著使用這些工具需要不同的技能。開(kāi)源工具不像商業(yè)工具那樣有齊備的文檔和完善的支持,用這些工具的人要有很強(qiáng)的編碼能力。如果有人編程能力偏弱,就可以通過(guò)跟人結(jié)對(duì)來(lái)提升個(gè)人技能。在敏捷項(xiàng)目中也可以使用商業(yè)工具,但是大多數(shù)商業(yè)工具在開(kāi)發(fā)的時(shí)候都沒(méi)有考慮敏捷過(guò)程,所以敏捷項(xiàng)目匹配起來(lái)就不太容易。而且要讓商業(yè)工具跟持續(xù)集成配合,可能要寫(xiě)很多代碼才行。

            項(xiàng)目中應(yīng)該考慮為下面一些測(cè)試任務(wù)使用工具

            1、持續(xù)集成(如CruiseControl, Tinderbox)

            2、單元測(cè)試(如JUnit, NUnit)

            3、代碼覆蓋率率(如Clover, PureCoverage)

            4、功能測(cè)試(如:HttpUnit, Selenium, Quick Test professional)

            5、用戶驗(yàn)收測(cè)試(如:Fitness, Quick Test Professional)

            6、性能測(cè)試(如:JMeter, LoadRunner)

            7、問(wèn)題跟蹤(如:BugZilla, JIRA)

            8、測(cè)試管理(如:Quality Center)

            報(bào)表與度量

            度量數(shù)據(jù)是用來(lái)衡量軟件質(zhì)量和測(cè)試成果的。在瀑布項(xiàng)目中,有些測(cè)試度量指標(biāo)需要在測(cè)試之前就把所有測(cè)試用例都寫(xiě)好,而且僅在應(yīng)用程序開(kāi)發(fā)完畢時(shí)進(jìn)行一次測(cè)試。這種指標(biāo)包括:每個(gè)測(cè)試用例執(zhí)行的時(shí)候發(fā)現(xiàn)多少缺陷,每天執(zhí)行的測(cè)試用例會(huì)發(fā)現(xiàn)多少缺陷。這些度量數(shù)據(jù)收集起來(lái)以后,便用來(lái)判斷應(yīng)用程序是否已經(jīng)就緒并可以發(fā)布。在敏捷項(xiàng)目中,功能完成的時(shí)候測(cè)試用例就已經(jīng)寫(xiě)好且運(yùn)行完畢,這就意味著用來(lái)度量瀑布項(xiàng)目的一些指標(biāo)是無(wú)法應(yīng)用在這上面的。

          回到收集度量數(shù)據(jù)的原因上來(lái)-衡量軟件質(zhì)量和測(cè)試成果,你可以看看下面這些概念。

            1、用代碼覆蓋率度量測(cè)試效果;這對(duì)于單元測(cè)試尤其有效。

            2、在探索性測(cè)試階段發(fā)現(xiàn)的缺陷數(shù)量可以說(shuō)明單元測(cè)試和功能測(cè)試的效果。

            3、在UAT階段發(fā)現(xiàn)的缺陷表示先期的測(cè)試并不像UAT一樣充分,我們應(yīng)該關(guān)注業(yè)務(wù)過(guò)程, 而不是軟件的bug。如果UAT發(fā)現(xiàn)了很多功能性問(wèn)題,而不是軟件的bug,這就表示團(tuán)隊(duì)對(duì)故事或是變化的需求理解不足。

            4、故事完成以后所發(fā)現(xiàn)的缺陷數(shù)量能夠作為衡量軟件質(zhì)量的好手段。這些缺陷包括在集成測(cè)試、非功能測(cè)試、性能測(cè)試和UAT測(cè)試中發(fā)現(xiàn)的缺陷。

            5、缺陷重現(xiàn)率。如果缺陷常常重現(xiàn),軟件質(zhì)量就很低。

            測(cè)試角色

            測(cè)試角色并不是跟單個(gè)資源一一對(duì)應(yīng)的。一個(gè)資源可以擔(dān)任多個(gè)測(cè)試角色,一個(gè)測(cè)試角色也可以由多個(gè)資源負(fù)責(zé)。下面列出的這些角色是確保項(xiàng)目測(cè)試效果所必需的。一個(gè)優(yōu)秀的測(cè)試人員應(yīng)該具備所有這些角色的特征。敏捷項(xiàng)目和瀑布項(xiàng)目都有這些角色,只是扮演這些角色的人不同。在敏捷項(xiàng)目中,所有團(tuán)隊(duì)成員都是怎么扮演各個(gè)角色的。這并不是強(qiáng)制性的規(guī)定;每個(gè)團(tuán)隊(duì)各有差異,不過(guò)這種做法也算得上是不錯(cuò)的組合。

            測(cè)試分析人員要了解需求、架構(gòu)、代碼等各個(gè)產(chǎn)物,從而判斷哪些需要做測(cè)試,哪些是測(cè)試要重點(diǎn)關(guān)注的地方。

            在瀑布項(xiàng)目中一般是有一個(gè)(或多個(gè))資深的資源來(lái)?yè)?dān)任這個(gè)角色。他們檢查相關(guān)文檔(需求、設(shè)計(jì)、架構(gòu)),編寫(xiě)測(cè)試計(jì)劃、編寫(xiě)高層的測(cè)試用例描述,然后把所有的東西都交給一個(gè)初級(jí)員工,讓他填補(bǔ)詳細(xì)的測(cè)試腳本。敏捷項(xiàng)目鼓勵(lì)所有團(tuán)隊(duì)成員一起擔(dān)任這個(gè)角色。開(kāi)發(fā)人員的關(guān)注點(diǎn)是通過(guò)分析代碼和設(shè)計(jì)來(lái)編寫(xiě)單元測(cè)試,但是他們也會(huì)協(xié)助業(yè)務(wù)分析師或者測(cè)試人員編寫(xiě)功能測(cè)試,還會(huì)參與非功能測(cè)試和性能測(cè)試的分析。業(yè)務(wù)分析師和測(cè)試人員緊密協(xié)作,編寫(xiě)功能測(cè)試和用戶驗(yàn)收測(cè)試,并執(zhí)行探索性測(cè)試。客戶/最終用戶會(huì)被邀請(qǐng)參與用戶驗(yàn)收測(cè)試。

            測(cè)試腳本編寫(xiě)員

            該角色就是編寫(xiě)詳細(xì)測(cè)試腳本的人。這些腳本可能供手工執(zhí)行,也可能被自動(dòng)化。瀑布項(xiàng)目中的腳本編寫(xiě)就是個(gè)初級(jí)員工,他根據(jù)測(cè)試計(jì)劃和測(cè)試用例描述來(lái)編寫(xiě)手冊(cè),每一步都描述的很詳盡、自動(dòng)化腳本編寫(xiě)員就得是更資深的人了,開(kāi)發(fā)人員也會(huì)參與單元測(cè)試用例的編寫(xiě)。敏捷項(xiàng)目會(huì)大量使用開(kāi)發(fā)人員來(lái)編寫(xiě)測(cè)試腳本,主要是因?yàn)闇y(cè)試腳本是自動(dòng)化執(zhí)行的。

            測(cè)試執(zhí)行員

            不管是手工測(cè)試還是自動(dòng)化測(cè)試都有這個(gè)角色,不過(guò)在自動(dòng)化的時(shí)候,這個(gè)角色的扮演者就是一臺(tái)電腦。測(cè)試執(zhí)行員會(huì)執(zhí)行詳細(xì)測(cè)試腳本,判斷哪些測(cè)試失敗,哪些測(cè)試通過(guò)。瀑布項(xiàng)目一般都用測(cè)試人員來(lái)做這件事情,而敏捷項(xiàng)目則鼓勵(lì)所有人都來(lái)參與,尤其是測(cè)試人員、業(yè)務(wù)分析量和客戶。

            環(huán)境管理人員

            這個(gè)角色管理測(cè)試環(huán)境,包括應(yīng)用程序運(yùn)行的環(huán)境以及支持自動(dòng)化測(cè)試的基礎(chǔ)架構(gòu)。他們還會(huì)關(guān)注外部接口和用作測(cè)試的數(shù)據(jù)。這個(gè)角色在瀑布項(xiàng)目和敏捷項(xiàng)目中很相似。

            問(wèn)題管理人員

            問(wèn)題出現(xiàn)以后就要解決。這個(gè)角色可以幫助篩查問(wèn)題,確保它們被正確地創(chuàng)建,有各種屬性,如嚴(yán)重程度、優(yōu)先級(jí)、組件等等。這個(gè)角色還要管理問(wèn)題的生命周期,并提供工具支持。這個(gè)角色在瀑布項(xiàng)目和敏捷項(xiàng)目中很相似。

            故障檢測(cè)人員

            這個(gè)角色當(dāng)問(wèn)題出現(xiàn)的時(shí)候就要去做故障檢測(cè)工作,判斷是不是軟件缺陷。如果是軟件缺陷,他們就要去找出問(wèn)題根源、可能的解決方案和變通措施。這個(gè)角色在瀑布項(xiàng)目和敏捷項(xiàng)目中很相似。

            敏捷團(tuán)隊(duì)所注重的是讓各個(gè)角色得到充分發(fā)揮,而比較少關(guān)心誰(shuí)在做什么事情、誰(shuí)對(duì)哪些事情負(fù)責(zé)。測(cè)試人員和其他團(tuán)隊(duì)成員之間沒(méi)有界限,他們共同的目標(biāo)是生產(chǎn)出更高質(zhì)量的軟件,每個(gè)成員都要盡一切可能幫助達(dá)成這個(gè)目標(biāo)。在敏捷團(tuán)隊(duì)中,測(cè)試人員可以從所有人那里得到幫助,而他們又可以幫助其他人提高測(cè)試技能。這種方式能夠確保團(tuán)隊(duì)中的每個(gè)人都在為交付高質(zhì)量應(yīng)用程序而付出。








          posted on 2012-08-21 10:26 順其自然EVO 閱讀(858) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 通河县| 改则县| 隆回县| 迁西县| 长泰县| 无极县| 乐业县| 兴海县| 玉环县| 万年县| 丰原市| 土默特左旗| 姜堰市| 合肥市| 砀山县| 苏尼特右旗| 峡江县| 海林市| 贵南县| 红河县| 衡东县| 苏尼特右旗| 呼玛县| 清苑县| 罗定市| 东乌珠穆沁旗| 阿城市| 临沧市| 宁津县| 天峨县| 依安县| 云南省| 全椒县| 大英县| 安泽县| 兰坪| 呼伦贝尔市| 喀什市| 河北区| 辉县市| 白朗县|