一個(gè)軟件測(cè)試工程師的成長(zhǎng)日記(連載一)
第1章 上班第一天,新人培訓(xùn)
1.1 測(cè)試專家的第一步
小艾是某名牌大學(xué)計(jì)算機(jī)科學(xué)專業(yè)碩士畢業(yè)生,這天是他離開校園走上工作崗位的第一天。他將成為大型外資IT公司IBM的軟件測(cè)試工程師(Software Test Engineer),開始一段新的旅程。
1.1.1 我是菜鳥
在離開校園以前,小艾對(duì)將要從事的工作幾乎一無所知。記得面試時(shí)被問及對(duì)測(cè)試的想法時(shí),他的理解是,測(cè)試就是給產(chǎn)品挑錯(cuò)吧,目標(biāo)應(yīng)當(dāng)是保證產(chǎn)品以高質(zhì)量交付給用戶。面試經(jīng)理告訴他,其實(shí)測(cè)試是軟件開發(fā)過程中必不可少的重要流程。在追求質(zhì)量和效率的軟件工程里,如何有效地對(duì)復(fù)雜的軟件半成品進(jìn)行測(cè)試,其實(shí)有許多問題值得工程師們?nèi)ニ伎己吞剿鳌\浖y(cè)試工程師的工作將很有趣、充滿挑戰(zhàn)。于是,對(duì)新事物充滿好奇心的小艾欣然接受了軟件測(cè)試工程師這個(gè)職位邀請(qǐng),充滿期待地走進(jìn)這個(gè)他完全不了解的神秘領(lǐng)域。
產(chǎn)品開發(fā)組的同事,包括組長(zhǎng)和老員工,對(duì)小艾這只菜鳥照顧周到,一會(huì)兒工夫他就把入職的流程辦妥,工作的機(jī)器也準(zhǔn)備就緒。坐在新的座位,小艾開始憧憬自己的新工作。可是測(cè)試卻是一張陌生的面孔,讓他有點(diǎn)無所適從。于是,小艾找到公司給他安排的“導(dǎo)師”凱文,希望凱文能幫他排解困惑。凱文是測(cè)試組組長(zhǎng),一位具有豐富工作經(jīng)驗(yàn)的老員工。未來,就從這一刻開始向小艾展露出微笑。
“凱文,我對(duì)將要從事的工作一無所知。你能告訴我測(cè)試工作都包含些什么內(nèi)容嗎?我們應(yīng)該如何做測(cè)試?什么時(shí)候可以真正開始工作?”
凱文對(duì)小艾的問題一點(diǎn)兒也不陌生,這些問題不正是幾年前他入職時(shí)的困惑嗎?“小艾,別著急,請(qǐng)慢慢聽我說。我也像你一樣,是從菜鳥一步一步成長(zhǎng)起來的……”
經(jīng)過與凱文的談話,小艾心中的一團(tuán)迷霧逐漸消除了。
原來,在大型軟件開發(fā)團(tuán)隊(duì)中,測(cè)試被分成很多種類和步驟,每種測(cè)試有針對(duì)性地模擬使用測(cè)試對(duì)象的場(chǎng)景,并試圖找出測(cè)試對(duì)象的潛在問題和缺陷(Bug)。在確定原因后,制定嚴(yán)謹(jǐn)完善的解決方案并根據(jù)方案修復(fù)缺陷。測(cè)試其實(shí)是發(fā)現(xiàn)并解決問題的過程,而其目標(biāo)則是讓軟件產(chǎn)品以盡可能高的質(zhì)量交付給客戶,使軟件產(chǎn)品中存在的問題盡可能少,這樣,軟件的用戶可以得到最完美的使用體驗(yàn)。
除了小型項(xiàng)目,進(jìn)行完全(各種輸入和前提條件的組合)的測(cè)試是不可行的。可行的方法是運(yùn)用風(fēng)險(xiǎn)分析和不同系統(tǒng)功能的測(cè)試優(yōu)先級(jí),來確定測(cè)試的關(guān)注點(diǎn),從而替代窮盡測(cè)試。軟件開發(fā)本身是追求產(chǎn)出和投入比的工程性過程。因此,考慮測(cè)試的內(nèi)容和方式時(shí),都應(yīng)當(dāng)以高產(chǎn)出投入比為最終目標(biāo),最大化地利用現(xiàn)有資源排除潛在的問題。
小艾聽說過風(fēng)險(xiǎn)控制,在軟件測(cè)試過程中,風(fēng)險(xiǎn)控制是通過專業(yè)有效的方法實(shí)現(xiàn)的。測(cè)試團(tuán)隊(duì)由許多個(gè)測(cè)試分隊(duì)組成,每個(gè)分隊(duì)的測(cè)試任務(wù)和方法都具有高度的針對(duì)性。
小艾回想,在學(xué)校的時(shí)候,他曾經(jīng)參加過軟件工程課程的項(xiàng)目實(shí)訓(xùn)。在項(xiàng)目中,測(cè)試很簡(jiǎn)單,其目的僅僅是驗(yàn)證開發(fā)的功能點(diǎn)是否正確并與設(shè)計(jì)一致。測(cè)試是在所有功能開發(fā)完畢后才開始的。當(dāng)時(shí)項(xiàng)目規(guī)模很小,從計(jì)劃的時(shí)候開始,大家就沒有仔細(xì)地考慮過怎樣做測(cè)試。由于項(xiàng)目組人數(shù)很少,在功能開發(fā)階段大家也無暇顧及測(cè)試,而是到了功能開發(fā)已經(jīng)完成后,大家才匆忙地花些時(shí)間測(cè)試。當(dāng)然,這種測(cè)試非常簡(jiǎn)陋,沒有計(jì)劃細(xì)節(jié),方向也不清晰,測(cè)試過程中的所有流程都手工操作一遍。發(fā)現(xiàn)問題則隨時(shí)修改代碼,如果修改后流程能走通,就認(rèn)為測(cè)試已經(jīng)通過了。
通過凱文對(duì)測(cè)試的類型和當(dāng)今流行的開發(fā)模式的介紹,小艾發(fā)現(xiàn)測(cè)試遠(yuǎn)不是從前軟件工程項(xiàng)目實(shí)訓(xùn)測(cè)試那般隨便和簡(jiǎn)單。軟件測(cè)試是一個(gè)嚴(yán)謹(jǐn)、全面且有條理的過程。這個(gè)過程中包含了多種測(cè)試類型,每種測(cè)試類型都有針對(duì)性地驗(yàn)證軟件,發(fā)現(xiàn)相應(yīng)的問題。測(cè)試就像河流中一張精心編織的網(wǎng),軟件的功能和流程就像河流中的魚,要通過這張網(wǎng)的魚必須足夠優(yōu)秀才能最終存活。正是這種“優(yōu)勝劣汰”的思想,保證軟件只有通過了測(cè)試這張網(wǎng)才得以與用戶見面。
凱文娓娓道來,小艾對(duì)IBM的測(cè)試方法有了初步的了解:原來測(cè)試的種類可以如此多種多樣。
單元測(cè)試是和開發(fā)最接近的一種測(cè)試。開發(fā)人員編寫單元測(cè)試用例并執(zhí)行,驗(yàn)證單元模塊是否得出預(yù)期的結(jié)果。在敏捷開發(fā)模式中,有一種流行的開發(fā)模式叫做測(cè)試驅(qū)動(dòng)開發(fā)(Test Driven Development,TDD)。測(cè)試驅(qū)動(dòng)開發(fā)的核心就是把單元測(cè)試用例先做好,功能開發(fā)以通過相應(yīng)的單元測(cè)試用例為目標(biāo)。單元測(cè)試是粒度最小的軟件測(cè)試,小粒度能保證復(fù)雜系統(tǒng)中的每個(gè)“螺絲釘”都質(zhì)量合格。通過了單元測(cè)試的代碼才可以繼承到系統(tǒng)中,進(jìn)行進(jìn)一步測(cè)試。
功能測(cè)試是通過黑盒子模式發(fā)現(xiàn)代碼集成后存在的功能問題的測(cè)試。顧名思義,功能測(cè)試關(guān)注的重點(diǎn)是系統(tǒng)的功能。通過執(zhí)行自動(dòng)或手動(dòng)的測(cè)試用例,可以驗(yàn)證相應(yīng)的功能點(diǎn)是否正確。只要測(cè)試用例設(shè)計(jì)完整,功能測(cè)試的網(wǎng)能把最終用戶可能遇見的功能問題都“提前”發(fā)現(xiàn)并解決。可以說,功能測(cè)試保證了提供給用戶的是產(chǎn)品而不是一堆垃圾。單元測(cè)試和功能測(cè)試的區(qū)別主要是粒度的不同。單元測(cè)試關(guān)注的是一個(gè)最小的代碼片段,如一個(gè)類或接口,而功能測(cè)試關(guān)注的是一個(gè)完整的業(yè)務(wù)功能。
功能測(cè)試通過后,性能測(cè)試就隨之開始了。性能測(cè)試是重點(diǎn)驗(yàn)證軟件的非功能性需求的測(cè)試。企業(yè)級(jí)軟件通常用于應(yīng)對(duì)復(fù)雜苛刻的用戶場(chǎng)景。在軟件設(shè)計(jì)和安裝的過程中,有許多細(xì)節(jié)能提供軟件的性能,包括吞吐率、穩(wěn)定性、可靠性等。性能測(cè)試通過自動(dòng)化的方法模擬真實(shí)用戶并發(fā)訪問的場(chǎng)景,以驗(yàn)證系統(tǒng)的性能指標(biāo)或發(fā)現(xiàn)其性能瓶頸。性能缺陷常常不是顯而易見的,有時(shí)候得通過復(fù)雜的場(chǎng)景模擬方可重現(xiàn)問題。由于性能問題的復(fù)雜性,要定位問題的原因也是一個(gè)藝術(shù)的過程。通過了性能測(cè)試的軟件系統(tǒng)從根本上保證了用戶體驗(yàn)和長(zhǎng)遠(yuǎn)利益。
正式版本發(fā)布前,測(cè)試組還要組織成品測(cè)試(GMV),測(cè)試軟件的安裝、部署、發(fā)布等情況,確保軟件能最終順利地安裝到用戶的環(huán)境中。通過集成測(cè)試后,軟件的質(zhì)量有了進(jìn)一步的保障。
軟件正式版本發(fā)布以后,根據(jù)用戶的反饋,產(chǎn)品組需要發(fā)布多個(gè)小版本。發(fā)布以前,當(dāng)然也要有針對(duì)性地測(cè)試小版本的功能、性能,以及和正式版本的兼容性。小版本的開發(fā)和測(cè)試周期比正式版本短得多,因此對(duì)測(cè)試團(tuán)隊(duì)的項(xiàng)目管理要求更高。
“在IBM,為了保證軟件質(zhì)量而進(jìn)行的測(cè)試是全面而苛刻的。”凱文說,“等你完成了新員工培訓(xùn)并開始接觸項(xiàng)目時(shí),你將有更多機(jī)會(huì)從方法到實(shí)踐了解我們的軟件測(cè)試。”
1.1.2 苦練基本功(1)
小艾所在開發(fā)團(tuán)隊(duì)所負(fù)責(zé)的產(chǎn)品是電子商務(wù)平臺(tái)。電子商務(wù)平臺(tái)是一個(gè)功能強(qiáng)大的企業(yè)級(jí)應(yīng)用,它支持多種計(jì)算機(jī)平臺(tái)。要成為一名合格的測(cè)試工程師,首要的就是熟練掌握基本功。所謂基本功,指的是作為任何開發(fā)團(tuán)隊(duì)的一員,都應(yīng)該掌握的基本知識(shí)和技能。
小艾發(fā)現(xiàn)上大學(xué)時(shí)學(xué)習(xí)的專業(yè)課還是非常有用的,諸如數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)、計(jì)算機(jī)組成原理、操作系統(tǒng)原理等。但這些課程大多只注重理論,缺少在真實(shí)環(huán)境中實(shí)踐的經(jīng)驗(yàn)。公司的軟件開發(fā)通常都有比較成熟的基礎(chǔ)設(shè)施,對(duì)于新人來說,了解開發(fā)平臺(tái)和方式也是鍛煉基本功的一部分。
操作系統(tǒng)是平臺(tái)的基礎(chǔ)。IBM的產(chǎn)品通常都支持多種流行的操作系統(tǒng),如Windows,UNIX,Linux等;為了滿足更大規(guī)模的應(yīng)用,產(chǎn)品還能提供對(duì)大型機(jī)的支持。小艾最熟悉的操作系統(tǒng)是Windows,在學(xué)校和日常生活中基本都用這個(gè)系統(tǒng),而對(duì)UNIX和Linux卻是一知半解。在開發(fā)組的數(shù)據(jù)庫(kù)里,小艾學(xué)習(xí)了大量關(guān)于UNIX/Linux基礎(chǔ)的材料。在學(xué)習(xí)的過程中,他有機(jī)會(huì)操作各種平臺(tái)的機(jī)器,這樣在實(shí)踐中學(xué)習(xí)效果是最好的。幾周下來,小艾已經(jīng)掌握了UNIX/Linux的系統(tǒng)管理知識(shí)和編程基礎(chǔ)。他發(fā)現(xiàn),在簡(jiǎn)潔的黑色文本界面背后,隱藏著超乎想象的強(qiáng)大計(jì)算能力。
學(xué)習(xí)了操作系統(tǒng)基本知識(shí)后,小艾滿懷興奮地找凱文:“我是不是可以開始測(cè)試產(chǎn)品了?”凱文搖頭說:“離測(cè)試還遠(yuǎn)著呢!不過你可以接著實(shí)踐測(cè)試環(huán)境搭建了。”所謂測(cè)試環(huán)境搭建,是指在操作系統(tǒng)基礎(chǔ)上,安裝測(cè)試需要的應(yīng)用程序,并部署測(cè)試的功能代碼,準(zhǔn)備測(cè)試數(shù)據(jù),建立起一個(gè)可供測(cè)試的環(huán)境。電子商務(wù)系統(tǒng)是基于中間件的網(wǎng)絡(luò)應(yīng)用程序,因此,必須從安裝服務(wù)器程序開始。一個(gè)完整的企業(yè)級(jí)網(wǎng)絡(luò)應(yīng)用程序,通常需要集成多個(gè)服務(wù)器,包括網(wǎng)絡(luò)服務(wù)器、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器等。坐在機(jī)器前,小艾發(fā)現(xiàn)搭建測(cè)試環(huán)境是一個(gè)艱巨的過程。
測(cè)試環(huán)境的搭建從安裝網(wǎng)絡(luò)服務(wù)器開始,接著是數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器的安裝。網(wǎng)絡(luò)應(yīng)用程序作為企業(yè)級(jí)應(yīng)用,部署在應(yīng)用服務(wù)器上。面對(duì)一系列的設(shè)置步驟,小艾感到頭暈?zāi)垦!R贿B幾天,小艾都在直接和服務(wù)器打交道。在UNIX/Linux上搭建測(cè)試環(huán)境,用戶的權(quán)限管理是關(guān)鍵的部分。因?yàn)樯婕霸S多手動(dòng)操作的部分,一時(shí)疏忽引起的用戶權(quán)限錯(cuò)誤會(huì)導(dǎo)致搭建失敗。小艾自問還是很有耐心的,這次也被測(cè)試環(huán)境安裝折騰得“體無完膚”。經(jīng)過凱文的多次“指點(diǎn)迷津”,在安裝配置好服務(wù)器以后,電子商務(wù)應(yīng)用程序也安裝好了。
小技巧:正確的流程和步驟一定要及時(shí)記錄。有了流程和步驟的指引,可以避免大量不必要的重復(fù)勞動(dòng)。
這也僅僅相當(dāng)于一個(gè)新建的購(gòu)物商城做好了“硬裝修”,商城還是空空的,還不足以接受業(yè)務(wù)流程。根據(jù)測(cè)試用例的要求,需要安裝并激活業(yè)務(wù)模塊。網(wǎng)上商城的經(jīng)營(yíng)模式、頁(yè)面的樣式、能夠提供的功能等特性,都是通過激活業(yè)務(wù)模塊并配置數(shù)據(jù)等步驟決定的。
激活了業(yè)務(wù)模塊以后,工程師的測(cè)試才可以開始。
領(lǐng)教了測(cè)試環(huán)境安裝的煩瑣步驟,小艾想,要是測(cè)試工程師不得不耗費(fèi)大量資源兼顧測(cè)試環(huán)境的安裝和配置,那么將難以保障軟件測(cè)試的質(zhì)量。從資源利用優(yōu)化的角度而言,這似乎也不是很好的方式。
帶著疑惑,小艾找到了凱文,“環(huán)境安裝耗時(shí)費(fèi)勁,測(cè)試人員必須每次都從頭到尾安裝測(cè)試環(huán)境嗎?”
凱文說:“看來你對(duì)環(huán)境安裝的難度有了很深的體會(huì)啊。你的顧慮項(xiàng)目組很早以前已經(jīng)考慮到了。我們發(fā)現(xiàn),更細(xì)的分工是提高效率的源泉。你應(yīng)當(dāng)看看我們用什么樣的方式實(shí)現(xiàn)了測(cè)試平臺(tái)的高效搭建。”
凱文說,其實(shí)許多新同事也有著和小艾一樣的疑惑,解決環(huán)境安裝問題的方式是執(zhí)行構(gòu)建測(cè)試(Build Verification Testing,BVT)。
的確,構(gòu)建測(cè)試是個(gè)煩瑣、重復(fù)性的過程。為了有效搭建環(huán)境,避免人為原因的錯(cuò)誤,采取的策略是最大程度上地使構(gòu)建過程自動(dòng)化。因?yàn)榄h(huán)境的原型和步驟基本上是類同的,這種條件很適合自動(dòng)化。于是工程師們使用構(gòu)建了參數(shù)化的腳本、響應(yīng)文件等構(gòu)建測(cè)試的元素,有了這些元素,構(gòu)建過程不再每一步都需要人工干預(yù),出現(xiàn)錯(cuò)誤的可能性有效降低。當(dāng)然,由于平臺(tái)本身的復(fù)雜性,自動(dòng)化元素的構(gòu)建由構(gòu)建組專門維護(hù)。構(gòu)建組把這個(gè)過程稱為構(gòu)建測(cè)試。通過測(cè)試驗(yàn)證環(huán)境安裝的正確性。
軟件的構(gòu)建(Build)本身是依賴于Java的,因此沒有平臺(tái)依賴性。但是,Java虛擬機(jī)是安裝在不同的操作系統(tǒng)中的,于是測(cè)試環(huán)境的安裝就有了平臺(tái)依賴性。構(gòu)建完整的測(cè)試應(yīng)該包括對(duì)多種平臺(tái)的支持。不同操作系統(tǒng)平臺(tái)結(jié)構(gòu)通常很不一樣,需要提供有針對(duì)性的自動(dòng)化構(gòu)建程序。構(gòu)建完成后,構(gòu)建組還必須完成對(duì)所有支持的平臺(tái)的構(gòu)建測(cè)試。
有了自動(dòng)化的構(gòu)建程序和構(gòu)建測(cè)試的步驟,可以保證測(cè)試環(huán)境正確和順利地安裝。但是,每次安裝還是得花時(shí)間的。熟練的工程師使用構(gòu)建程序在某個(gè)平臺(tái)構(gòu)建一個(gè)測(cè)試環(huán)境得花大半天時(shí)間。小艾從興奮轉(zhuǎn)為沮喪:每次安裝半天時(shí)間的成本并不小啊,大家測(cè)試環(huán)境的資源耗費(fèi)問題還沒有解決。
幸運(yùn)的是,開發(fā)實(shí)驗(yàn)室利用虛擬技術(shù)構(gòu)建了基于不同平臺(tái)的測(cè)試鏡像。有了虛擬技術(shù),時(shí)間和步驟也是“可復(fù)制”的。由于測(cè)試環(huán)境必須支持多平臺(tái),使用自動(dòng)化方式搭建第一個(gè)測(cè)試平臺(tái)的時(shí)間是不可節(jié)省的;但是,第二個(gè)、第三個(gè)測(cè)試環(huán)境的搭建時(shí)間確實(shí)可以節(jié)省。奧秘就在于虛擬技術(shù)。成功搭建一套測(cè)試環(huán)境后,就可以把這個(gè)環(huán)境保存成鏡像(Image)。以后任何時(shí)間需要再使用這套環(huán)境,不必重新安裝,僅需要把鏡像恢復(fù),并替換必要的機(jī)器信息即可。虛擬技術(shù)被多個(gè)平臺(tái)支持,包括AIX、Windows、UNIX/Linux。用于恢復(fù)鏡像的硬件環(huán)境既可以是實(shí)際存在的,也可以是虛擬的。
雖然沒有仔細(xì)了解過虛擬技術(shù),但小艾在學(xué)校的時(shí)候使用過Ghost克隆軟件。凱文說:“虛擬技術(shù)的原理和Ghost有相似的地方,隨著使用的深入,你會(huì)對(duì)虛擬技術(shù)有更多的認(rèn)識(shí)。”
對(duì)測(cè)試環(huán)境安裝有了初步的了解,作為菜鳥,小艾接著需要知道的是中間件技術(shù)。要知道,功能強(qiáng)大的電子商務(wù)平臺(tái)是建立在IBM的WebSphere中間件基礎(chǔ)上的。凱文開始給小艾介紹一些基于中間件的應(yīng)用服務(wù)的基礎(chǔ)內(nèi)容。
中間件(Middleware)是提供系統(tǒng)軟件和應(yīng)用軟件之間連接的軟件,以便于各種部件之間的溝通,特別是應(yīng)用軟件對(duì)于系統(tǒng)軟件的集中的邏輯。中間件技術(shù)在現(xiàn)代信息技術(shù)應(yīng)用框架,如Web服務(wù)(Web Service)、面向服務(wù)的體系結(jié)構(gòu)(Service Oriented Architecture,SOA)等應(yīng)用中應(yīng)用得比較廣泛。中間件不提供具體的功能,但它卻是系統(tǒng)中各個(gè)部件有機(jī)連接的橋梁。中間件可以提供對(duì)外圍服務(wù)器,包括數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器、Web服務(wù)器等的支持和管理。中間件技術(shù)建立在對(duì)應(yīng)用軟件部分常用功能的抽象上,將常用且重要的過程調(diào)用、分布式組件、消息隊(duì)列、事務(wù)、安全、連接器、商業(yè)流程、網(wǎng)絡(luò)并發(fā)、HTTP服務(wù)器、Web服務(wù)等功能集于一身或者分別在不同品牌的不同產(chǎn)品中分別完成。
接下來的日子里,小艾開始研究WebSphere中間件提供的功能。經(jīng)過一段時(shí)間的學(xué)習(xí),他掌握了通過應(yīng)用服務(wù)器對(duì)應(yīng)用程序進(jìn)行管理和監(jiān)控的方法。這部分知識(shí)對(duì)于測(cè)試中發(fā)現(xiàn)和解決問題起著關(guān)鍵的作用。
經(jīng)過基本能力的訓(xùn)練,小艾基本上已經(jīng)達(dá)到了進(jìn)入項(xiàng)目組的要求。然而,對(duì)于項(xiàng)目如何運(yùn)作,如何確保項(xiàng)目順利達(dá)到預(yù)期結(jié)果,小艾卻還是一知半解。接著,小艾在凱文的指導(dǎo)下,認(rèn)識(shí)了敏捷項(xiàng)目管理的基本知識(shí)。
對(duì)于敏捷開發(fā)(Agile Development)的定義,工業(yè)界其實(shí)還沒有標(biāo)準(zhǔn)的定義,而相關(guān)的描述倒是五花八門,各種定義也出現(xiàn)在出版物或網(wǎng)絡(luò)博客中。缺乏標(biāo)準(zhǔn)定義,其實(shí)是因?yàn)槊艚蓍_發(fā)的實(shí)現(xiàn)方式非常多樣化。我們可以容易地找到關(guān)于敏捷的方式、方法、實(shí)踐及技術(shù)等的描述。在IBM的軟件開發(fā)和測(cè)試中,團(tuán)隊(duì)使用了多種流行的敏捷開發(fā)方式進(jìn)行項(xiàng)目管理。使用敏捷項(xiàng)目管理的目的并不復(fù)雜,是為了提高開發(fā)效率,激發(fā)團(tuán)隊(duì)的積極性并盡可能降低項(xiàng)目失敗的風(fēng)險(xiǎn)。
提到敏捷開發(fā),會(huì)把某種開發(fā)方式作為“非敏捷”方式來對(duì)比,而這種開發(fā)方式通常會(huì)是傳統(tǒng)的瀑布開發(fā)模型。在瀑布開發(fā)模型中,整個(gè)系統(tǒng)的開發(fā)被劃分成需求分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、集成和維護(hù)等階段。這種劃分本質(zhì)上是把不同性質(zhì)的項(xiàng)目?jī)?nèi)容分隔到不同的階段,而某個(gè)階段則專注地進(jìn)行某種任務(wù)。專注在許多情況下帶來了高質(zhì)量,單一流程的劃分卻很容易帶來資源浪費(fèi)和失敗風(fēng)險(xiǎn)的增加。如果在一個(gè)階段,項(xiàng)目組只完成一組相同性質(zhì)的任務(wù),那么,團(tuán)隊(duì)中其他無關(guān)的人員在這段時(shí)間里就無事可做了。項(xiàng)目的成果必須到最后階段才完成,中間任何步驟出現(xiàn)差錯(cuò)都有可能導(dǎo)致項(xiàng)目全盤失敗,這樣的項(xiàng)目風(fēng)險(xiǎn)是很高的。
敏捷開發(fā)從根本上避免了瀑布模型的弱點(diǎn),它有兩個(gè)核心點(diǎn)--迭代開發(fā)(Iterative Development)和增量開發(fā)(Incremental Development)。
迭代開發(fā)是一種“重復(fù)時(shí)序安排”的開發(fā)方式。迭代開發(fā)把一個(gè)完整的瀑布模型開發(fā)流程分成多個(gè)迭代,每個(gè)迭代可以看做獨(dú)立的開發(fā)過程,其中包含了項(xiàng)目的主要步驟,如設(shè)計(jì)、開發(fā)和測(cè)試等。把完整過程分成多個(gè)持續(xù)時(shí)間較短的迭代,其好處是生產(chǎn)的周期變短了,每個(gè)完整的周期都會(huì)產(chǎn)出相應(yīng)的產(chǎn)品,這種方式有利于在完整項(xiàng)目開發(fā)的過程中跟蹤和控制開發(fā)進(jìn)度及產(chǎn)品質(zhì)量。
1.1.2 苦練基本功(2)
增量開發(fā)用的則是一種"分段完成"的策略。在增量開發(fā)模式中,系統(tǒng)中不同的部分被安排在多個(gè)階段完成,各個(gè)部分完成后再集成到系統(tǒng)中。
在敏捷開發(fā)模式中,迭代開發(fā)和增量開發(fā)的策略通常會(huì)被同時(shí)使用,并統(tǒng)稱為迭代開發(fā),迭代開發(fā)框架如圖1-1所示。
增量地實(shí)現(xiàn)系統(tǒng)的思想是迭代開發(fā)的基礎(chǔ)。項(xiàng)目成員通過不斷學(xué)習(xí)和總結(jié),使開發(fā)效率不斷提高,同時(shí)避免在后期的迭代中重犯某些錯(cuò)誤。因此增量開發(fā)對(duì)于團(tuán)隊(duì)的進(jìn)步也很有好處。
作為菜鳥的小艾對(duì)測(cè)試工程師的基本功掌握得差不多了,他明白,這些基本功需要在實(shí)踐鍛煉中不斷加深理解,才能得心應(yīng)手,融會(huì)貫通。
“測(cè)試工程師也必須掌握開發(fā)技術(shù)嗎?還有哪些技能是測(cè)試工程師應(yīng)該掌握的呢?”小艾有些疑惑。
鑒于測(cè)試工程師的專職工作是完成軟件測(cè)試,因此測(cè)試專業(yè)技能是測(cè)試工程師技能體系的核心。
小知識(shí):軟件測(cè)試,從宏觀角度而言,是指針對(duì)被測(cè)試的產(chǎn)品或服務(wù)進(jìn)行的一系列關(guān)于軟件質(zhì)量的調(diào)查,軟件測(cè)試結(jié)果對(duì)軟件的擁有者(Product Owner)負(fù)責(zé)。軟件測(cè)試還從一種獨(dú)立的視角為業(yè)務(wù)運(yùn)作提供客觀評(píng)估,這種評(píng)估包括軟件的質(zhì)量達(dá)標(biāo)程度及因?yàn)槟撤N相應(yīng)的實(shí)現(xiàn)方式而存在的風(fēng)險(xiǎn)等。 測(cè)試得到的是一種相對(duì)客觀的結(jié)果,通過事實(shí)和數(shù)據(jù)對(duì)軟件的質(zhì)量進(jìn)行定義,為軟件的擁有者提供決策的參考。測(cè)試通過執(zhí)行程序或應(yīng)用的方式,達(dá)到發(fā)現(xiàn)存在的錯(cuò)誤或缺陷的目標(biāo)。至于測(cè)試,使用的方法則是多種多樣的。理論上,任何方法,只要發(fā)現(xiàn)的錯(cuò)誤或缺陷是確實(shí)存在的,都是可行的測(cè)試方法。但是在項(xiàng)目實(shí)踐中,我們不可能把所有可能的方式都用上,而只能采取最有效和可控的方法。有效,是指這種方法有效模擬真實(shí)的應(yīng)用,并有效地暴露潛在的問題;可控,指的是使用方法有明確的步驟,通過相應(yīng)的步驟可以使暴露的問題重現(xiàn)。 真正的測(cè)試中,有效可控的測(cè)試方法通常有兩類,分別是白盒測(cè)試(White-box Testing)和黑盒測(cè)試(Black-box Testing)。 白盒測(cè)試指測(cè)試人員可以直接訪問內(nèi)部數(shù)據(jù)結(jié)果、算法及其代碼實(shí)現(xiàn)的測(cè)試,常見的方法包括編程應(yīng)用接口測(cè)試、代碼覆蓋率測(cè)試、缺陷注入方法等。通過調(diào)用應(yīng)用程序的公有或私有接口,驗(yàn)證返回內(nèi)容的正確性的方式,是很常用的白盒測(cè)試方法。通常一個(gè)測(cè)試用例可以用于驗(yàn)證一個(gè)被測(cè)的接口。如果需要驗(yàn)證一個(gè)代碼分支,還可以把分支需要使用的多個(gè)接口調(diào)用放在一個(gè)用例中。 代碼覆蓋率測(cè)試是檢驗(yàn)代碼是否滿足指定覆蓋率的測(cè)試。例如,可以設(shè)計(jì)一個(gè)測(cè)試,通過改變輸入條件,使程序中所有代碼行都被執(zhí)行至少一次,并檢驗(yàn)輸出是否符合預(yù)期。覆蓋率測(cè)試在一般條件下,最大限度地覆蓋代碼,評(píng)估代碼的整體質(zhì)量。缺陷注入關(guān)注代碼在錯(cuò)誤和臨界條件的表現(xiàn)。錯(cuò)誤和臨界條件在所有輸入條件中只占小部分,但這部分輸入?yún)s非常關(guān)鍵,而且存在問題的可能性較大。測(cè)試涵蓋了錯(cuò)誤和臨界條件,就能保證代碼的健壯性。健壯的程序不僅能處理期望的輸入,對(duì)于“不速之客”,同樣能夠從容應(yīng)對(duì)。 白盒測(cè)試用最直接的方式,從根源上發(fā)現(xiàn)程序中的缺陷。然而,底層代碼的邏輯往往錯(cuò)綜復(fù)雜,分支繁多,白盒測(cè)試的方法需要測(cè)試人員對(duì)實(shí)現(xiàn)的細(xì)節(jié)比較了解,方可設(shè)計(jì)出有效的測(cè)試用例。而且,因?yàn)闀r(shí)間等條件的限制,要覆蓋所有分支的所有條件,簡(jiǎn)直是個(gè)“不可能的任務(wù)”。于是便有了黑盒測(cè)試,通過觸發(fā)業(yè)務(wù)相關(guān)的功能點(diǎn),檢驗(yàn)集成條件下系統(tǒng)的正確性。雖然不能期待黑盒測(cè)試方法能覆蓋更多的代碼分支,但這些方法針對(duì)的都是和實(shí)際系統(tǒng)應(yīng)用相關(guān)的分支,因此黑盒測(cè)試對(duì)于評(píng)估系統(tǒng)是否達(dá)到需求是至關(guān)重要的。理論上,只要黑盒測(cè)試的用例設(shè)計(jì)得足夠細(xì)致,測(cè)試能發(fā)現(xiàn)所有應(yīng)用中可能存在的問題。當(dāng)然,因?yàn)檫M(jìn)行黑盒測(cè)試的時(shí)候系統(tǒng)是集成的,所以發(fā)現(xiàn)問題后,需要“打開黑盒子”,用額外的工作定位問題的確切原因。相對(duì)而言,白盒測(cè)試發(fā)現(xiàn)問題后,定位原因的過程會(huì)簡(jiǎn)單得多。 綜合應(yīng)用白盒測(cè)試和黑盒測(cè)試,可以達(dá)到有效測(cè)試系統(tǒng)的目的。 定義了測(cè)試方法,測(cè)試工程師應(yīng)該明確的下一個(gè)內(nèi)容是測(cè)試的執(zhí)行。大型電子商務(wù)系統(tǒng)的業(yè)務(wù)邏輯非常復(fù)雜,集成測(cè)試往往需要涉及多個(gè)功能模塊。如何執(zhí)行測(cè)試用例問題,實(shí)際上是如何提高工作效率的問題。 對(duì)于界面操作、簡(jiǎn)單的功能驗(yàn)證用例,通常可以使用直接手工操作的測(cè)試方式;但是對(duì)于大多數(shù)邏輯復(fù)雜或者有特殊要求的測(cè)試用例來說,自動(dòng)化測(cè)試是主要的測(cè)試執(zhí)行方法。 手工操作的優(yōu)勢(shì)是方便靈活,只需有明確的測(cè)試用例作為指導(dǎo)便能執(zhí)行,不需要花額外的時(shí)間準(zhǔn)備完備的自動(dòng)化測(cè)試材料。我們甚至可以通過手工操作的方式執(zhí)行隨機(jī)測(cè)試(Adhoc Testing)。探索式測(cè)試不使用可識(shí)別的測(cè)試用例,而采用相對(duì)“隨機(jī)”的方式驗(yàn)證某些功能點(diǎn)的正確性。但是手工操作的重復(fù)開銷是測(cè)試策略的設(shè)計(jì)人員必須重視的。由于測(cè)試步驟必須通過手工的方式執(zhí)行,重復(fù)執(zhí)行測(cè)試用例的時(shí)間與資源開銷和第一次執(zhí)行基本上沒有任何區(qū)別。對(duì)于一線測(cè)試工程師而言,不停地重復(fù)手工測(cè)試用例是個(gè)無法擺脫的夢(mèng)魘,至少熱衷于接受新挑戰(zhàn)的小艾這么認(rèn)定。 自動(dòng)化測(cè)試則能彌補(bǔ)手工測(cè)試在重復(fù)開銷方面的不足。自動(dòng)化測(cè)試,顧名思義,就是測(cè)試過程并不需要人工干預(yù)的測(cè)試方式。其優(yōu)點(diǎn)是一旦測(cè)試的材料(包括自動(dòng)化工具、自動(dòng)化測(cè)試環(huán)境和測(cè)試腳本)準(zhǔn)備好,測(cè)試可以在無須人工干預(yù)或在有限度的人工干預(yù)的條件下重復(fù)執(zhí)行。對(duì)于流程復(fù)雜的測(cè)試場(chǎng)景,自動(dòng)化測(cè)試在節(jié)省重復(fù)執(zhí)行的資源的同時(shí)還能很好地控制測(cè)試質(zhì)量和效率。當(dāng)然,自動(dòng)化測(cè)試對(duì)測(cè)試團(tuán)隊(duì)的組織和技術(shù)要求更高。要進(jìn)行自動(dòng)化測(cè)試,首先,測(cè)試團(tuán)隊(duì)必須有一套完備的測(cè)試工具集;其次,測(cè)試人員需要掌握測(cè)試工具的使用方法,包括如何編寫自動(dòng)化測(cè)試代碼,如何執(zhí)行并收集結(jié)果等;最后,對(duì)測(cè)試資源的維護(hù)也有更高的要求。自動(dòng)化測(cè)試腳本和對(duì)應(yīng)的測(cè)試環(huán)境應(yīng)當(dāng)嚴(yán)格歸檔保存,以備日后查詢和重復(fù)使用。 作為一個(gè)成熟高效的測(cè)試團(tuán)隊(duì),手工測(cè)試和自動(dòng)化測(cè)試都是不可或缺的測(cè)試執(zhí)行方法。兩者優(yōu)勢(shì)互補(bǔ),可以有效保障軟件產(chǎn)品的質(zhì)量。 在產(chǎn)品開發(fā)過程中,特別在使用敏捷開發(fā)模式的項(xiàng)目中,新功能的完成大多是分階段的。功能點(diǎn)在不同的迭代中陸續(xù)發(fā)布,同時(shí),在新的發(fā)布中還會(huì)包含對(duì)老版本的問題修復(fù)。作為測(cè)試,除了需要測(cè)試新發(fā)布的內(nèi)容,還必須驗(yàn)證已經(jīng)存在的功能是否正確,存在的問題是否已經(jīng)修復(fù)。這是測(cè)試執(zhí)行中很重要的一環(huán)--回歸測(cè)試。就理論而言,只要有新的軟件版本發(fā)布,對(duì)執(zhí)行所有測(cè)試用例的回歸測(cè)試是必需的,因?yàn)橹挥羞@樣,才能從事實(shí)上保證所有功能在最新版本中的正確性。隨著開發(fā)完成的功能越來越多,回歸測(cè)試中要執(zhí)行的測(cè)試用例也隨之增加。自動(dòng)化測(cè)試在重復(fù)執(zhí)行方面的優(yōu)勢(shì)正好能滿足回歸測(cè)試的這種要求。 作為測(cè)試工程師,掌握了測(cè)試執(zhí)行方法,可以認(rèn)為已經(jīng)掌握基本的專業(yè)技能了。然而測(cè)試工程師專業(yè)技能的涵蓋范圍其實(shí)非常廣,因?yàn)楦哔|(zhì)量的測(cè)試要求工程師掌握更多的技術(shù),包括架構(gòu)設(shè)計(jì)、軟件開發(fā)技術(shù)等。更好地掌握這些專業(yè)技術(shù),目的是更好地服務(wù)于測(cè)試,測(cè)試的目的則是發(fā)現(xiàn)和排除軟件中存在的問題。 “發(fā)現(xiàn)、解決問題其實(shí)是一種藝術(shù)。”凱文語重心長(zhǎng)地指導(dǎo)小艾,“等你熟練掌握基本的測(cè)試專業(yè)技能的時(shí)候,我們還會(huì)從更深入的層次探討測(cè)試的核心價(jià)值和技術(shù)。” (未完待續(xù))
posted on 2013-05-02 10:42 順其自然EVO 閱讀(890) 評(píng)論(1) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄