有一次陋守,當(dāng)開發(fā)人員完成當(dāng)前Sprint 任務(wù)的代碼之后震贵,測(cè)試人員與開發(fā)人員、產(chǎn)品經(jīng)理一起來(lái)瀏覽產(chǎn)品水评、從頭到尾走一邊猩系,產(chǎn)品經(jīng)理發(fā)現(xiàn)了問題,認(rèn)為需要對(duì)功能進(jìn)行比較大的修改中燥。這時(shí)開發(fā)人員估計(jì)需要兩天時(shí)間才能完成代碼寇甸,但測(cè)試人員反對(duì)這樣做,我們本來(lái)只有5天測(cè)試時(shí)間疗涉,加上這次新做的功能比較多拿霉、開發(fā)代碼質(zhì)量不高,驗(yàn)收測(cè)試已經(jīng)很緊張咱扣。如果再延遲兩天绽淘,測(cè)試沒法完成。產(chǎn)品經(jīng)理說(shuō)闹伪,你們不是在用敏捷測(cè)試方法沪铭,應(yīng)該測(cè)得很快壮池,三天應(yīng)該能完成測(cè)試工作啊杀怠!
什么是敏捷測(cè)試呢椰憋?敏捷測(cè)試當(dāng)然不能簡(jiǎn)單地理解測(cè)得更快,絕對(duì)不是比以前用更少時(shí)間進(jìn)行測(cè)試赔退,也不是將測(cè)試的范圍縮小了或?qū)①|(zhì)量降低來(lái)減少測(cè)試任務(wù)橙依。也有人說(shuō),只有敏捷開發(fā)硕旗,沒有敏捷測(cè)試窗骑。下面我們就要討論一下:
l? 究竟什么是敏捷測(cè)試?
l? 敏捷測(cè)試有哪些流程改進(jìn)漆枚?
l? 測(cè)試人員如何面對(duì)敏捷測(cè)試的挑戰(zhàn)慧域?
l? 在敏捷測(cè)試中如何制定相應(yīng)的自動(dòng)化測(cè)試策略?
等等各種問題浪读。
什么是敏捷測(cè)試
? ? ? 假如將過(guò)去傳統(tǒng)的測(cè)試流程和方法硬塞入敏捷開發(fā)流程中,測(cè)試工作可能會(huì)事倍功半辛藻,測(cè)試人員可能會(huì)天天加班碘橘,而不能發(fā)揮應(yīng)用的作用。敏捷測(cè)試應(yīng)該是適應(yīng)敏捷方法而采用的新的測(cè)試流程吱肌、方法和實(shí)踐痘拆,對(duì)傳統(tǒng)的測(cè)試流程有所剪裁,有所不同的側(cè)重氮墨,例如減少測(cè)試計(jì)劃纺蛆、測(cè)試用例設(shè)計(jì)等工作的比重,增加與產(chǎn)品設(shè)計(jì)人員规揪、開發(fā)人員的交流和協(xié)作桥氏。在敏捷測(cè)試流程中,參與單元測(cè)試猛铅,關(guān)注持續(xù)迭代的新功能字支,針對(duì)這些新功能進(jìn)行足夠的驗(yàn)收測(cè)試,而對(duì)原有功能的回歸測(cè)試則依賴于自動(dòng)化測(cè)試奸忽。由于敏捷方法中迭代周期短堕伪,測(cè)試人員盡早開始測(cè)試,包括及時(shí)對(duì)需求栗菜、開發(fā)設(shè)計(jì)的評(píng)審欠雌,更重要的是能夠及時(shí)、持續(xù)的對(duì)軟件產(chǎn)品質(zhì)量進(jìn)行反饋疙筹。簡(jiǎn)單地說(shuō)富俄,敏捷測(cè)試就是持續(xù)地對(duì)軟件質(zhì)量問題進(jìn)行及時(shí)地反饋禁炒,如圖1所示。
圖1 敏捷測(cè)試定義的形象描述
2.? 敏捷測(cè)試流程的優(yōu)化
在敏捷方法中蛙酪,需求變化比較快齐苛、產(chǎn)品開發(fā)周期很短,我們目前采用四周時(shí)間桂塞,也就是每個(gè)月發(fā)布一個(gè)新版本凹蜂。開發(fā)周期短,功能不斷累加阁危,給軟件測(cè)試帶來(lái)很大的挑戰(zhàn)玛痊,軟件測(cè)試流程要做相應(yīng)的調(diào)整。例如狂打,我們?cè)械臏y(cè)試規(guī)范明確規(guī)定擂煞,首先要建立項(xiàng)目的主測(cè)試計(jì)劃書,然后再建立每個(gè)功能任務(wù)的測(cè)試計(jì)劃書趴乡,測(cè)試計(jì)劃書有嚴(yán)格的模板对省,而且需要和產(chǎn)品經(jīng)理、開發(fā)人員討論晾捏,并和測(cè)試團(tuán)隊(duì)其他人員(包括測(cè)試經(jīng)理)討論蒿涎,最終得到大家的認(rèn)可和簽字才能通過(guò),僅測(cè)試計(jì)劃經(jīng)過(guò)“起草惦辛、評(píng)審和簽發(fā)”一個(gè)完整的周期就需要一個(gè)月劳秋。在敏捷方法中,不再要求寫幾十頁(yè)的測(cè)試計(jì)劃書胖齐,而是在每個(gè)迭代周期玻淑,寫出一頁(yè)紙的測(cè)試計(jì)劃,將測(cè)試要點(diǎn)(包括策略呀伙、特定方法补履、重點(diǎn)范圍等)列出來(lái)就可以了。
在原有測(cè)試規(guī)范中剿另,要求先用Excel寫出測(cè)試用例干像,然后進(jìn)行討論、評(píng)審驰弄,評(píng)審?fù)ㄟ^(guò)以后再導(dǎo)入測(cè)試用例庫(kù)(在線管理系統(tǒng))中麻汰。在敏捷測(cè)試中,可能不需要測(cè)試用例戚篙,而是針對(duì)use case 或user story直接進(jìn)行驗(yàn)證五鲫,并進(jìn)行探索性測(cè)試。而節(jié)約出來(lái)的時(shí)間岔擂,用于開發(fā)原有功能的自動(dòng)化測(cè)試腳本位喂,為回歸測(cè)試服務(wù)浪耘。自動(dòng)化測(cè)試腳本將代替測(cè)試用例,成為軟件組織的財(cái)富塑崖。原有測(cè)試規(guī)范還要求進(jìn)行兩輪回歸測(cè)試七冲,在敏捷測(cè)試中,只能進(jìn)行一輪回歸測(cè)試规婆。綜合這些考慮澜躺,敏捷測(cè)試的流程簡(jiǎn)單有效,如下圖2所示抒蚜。
圖2 敏捷測(cè)試流程簡(jiǎn)要圖
在敏捷測(cè)試流程中掘鄙,如前所述,測(cè)試是一個(gè)持續(xù)的質(zhì)量反饋過(guò)程嗡髓,測(cè)試中發(fā)現(xiàn)的問題及時(shí)反饋給產(chǎn)品經(jīng)理和開發(fā)人員操漠,而且某些關(guān)鍵方面也要得到我們足夠的關(guān)注,主要有:
l? 測(cè)試人員不僅要全程參與需求饿这、產(chǎn)品功能設(shè)計(jì)等討論浊伙,而且要面對(duì)面地、充分地討論(包括帶語(yǔ)言长捧、視頻的即時(shí)通訊)吧黄,僅僅通過(guò)郵件是不夠的。
l? 參與代碼復(fù)審(code review)唆姐,并適當(dāng)輔助開發(fā)人員進(jìn)行單元測(cè)試。
l? 在流程中增加一個(gè)環(huán)節(jié)“產(chǎn)品走查(Product work-through)”——測(cè)試人員和產(chǎn)品經(jīng)理廓八、開發(fā)人員等在一起奉芦,從頭到尾將新功能看一遍,可直觀剧蹂、快速地發(fā)現(xiàn)問題声功。
新功能的測(cè)試和回歸測(cè)試策略
測(cè)試任務(wù)簡(jiǎn)單地可分為新功能測(cè)試和回歸測(cè)試。在敏捷方法中宠叼,針對(duì)這兩部分的測(cè)試建立相應(yīng)的策略先巴,以提高測(cè)試的效率,最大限度地降低質(zhì)量風(fēng)險(xiǎn)冒冬。新功能測(cè)試的策略主要有:
l? 不需要測(cè)試用例伸蚯,直接基于用例、基于對(duì)需求的理解來(lái)完成新功能的驗(yàn)證简烤。即使要寫測(cè)試用例剂邮,只要保證各個(gè)功能點(diǎn)被覆蓋,不要過(guò)于詳細(xì)(大顆粒度)横侦。
l? 持續(xù)地進(jìn)行驗(yàn)證挥萌,一旦某塊新代碼完成(code drop), 就開始驗(yàn)證绰姻,而不是等到所有代碼完成后才開始測(cè)試。這也包括參與到單元測(cè)試和集成測(cè)試中引瀑。
l? 實(shí)施端到端(end-to-end)的測(cè)試狂芋,確保完整的業(yè)務(wù)流程的實(shí)現(xiàn),同時(shí)憨栽,也容易發(fā)現(xiàn)業(yè)務(wù)邏輯不夠清晰帜矾、不夠合理等各方面的問題。
l? 閱讀代碼來(lái)發(fā)現(xiàn)問題徒像,可以和開發(fā)人員工作保持同步黍特,消除測(cè)試周期的壓力。
l? 基于經(jīng)驗(yàn)锯蛀,可以實(shí)施更多的探索性測(cè)試灭衷、組合交互性(interoperation)測(cè)試和用戶場(chǎng)景(user scenario)測(cè)試,更有效地發(fā)現(xiàn)埋藏較深的缺陷旁涤。
回歸測(cè)試是敏捷測(cè)試中需要面對(duì)的難點(diǎn)翔曲。每次迭代都會(huì)增加新的功能,一個(gè)產(chǎn)品可能會(huì)經(jīng)過(guò)十幾次劈愚、甚至幾十次迭代瞳遍,回歸測(cè)試范圍在不斷增大,而每次迭代周期沒變菌羽,可能還是一個(gè)月掠械。這樣驗(yàn)收測(cè)試的時(shí)間非常有限,所以回歸測(cè)試很大程度上依賴于自動(dòng)化測(cè)試注祖,因?yàn)楹茈y將回歸測(cè)試控制在非常有限的范圍內(nèi)猾蒂。當(dāng)然,還是有些辦法可以幫助我們減少回歸測(cè)試的范圍是晨,例如:
l? 通過(guò)執(zhí)行code diff來(lái)了解代碼變動(dòng)的所有地方肚菠,再做代碼關(guān)聯(lián)分析,就可以明確知道要進(jìn)行哪些地方的回歸測(cè)試罩缴,回歸測(cè)試范圍會(huì)大大縮小蚊逢。
l? 基于風(fēng)險(xiǎn)和操作面分析來(lái)減少回歸測(cè)試的范圍,例如回歸測(cè)試只是保證主要功能點(diǎn)沒有問題箫章,而忽視一些細(xì)節(jié)的問題烙荷。
l? 持續(xù)測(cè)試的過(guò)程,只要有時(shí)間檬寂,就進(jìn)行測(cè)試奢讨,包括開發(fā)人員、產(chǎn)品設(shè)計(jì)人員都參與到日常的試用和測(cè)試中來(lái)。
4?自動(dòng)化測(cè)試策略
由于開發(fā)周期短拿诸,需求扒袖、設(shè)計(jì)等方面溝通也需要花費(fèi)很多時(shí)間,沒有足夠時(shí)間開發(fā)自動(dòng)化測(cè)試腳本亩码,至少對(duì)新功能的測(cè)試很難實(shí)現(xiàn)自動(dòng)化測(cè)試季率。這時(shí)候,就需要正確的策略來(lái)提高自動(dòng)化測(cè)試的效益描沟,如圖30-3所示飒泻,并說(shuō)明如下。
圖3?自動(dòng)化測(cè)試的策略
建一個(gè)靈活的吏廉、開放的自動(dòng)化測(cè)試框架泞遗,如基于關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化框架,使測(cè)試腳本的開發(fā)簡(jiǎn)單易行席覆,腳本維護(hù)也方便史辙。
l? 針對(duì)穩(wěn)定的產(chǎn)品特性開發(fā)自動(dòng)化測(cè)試腳本,也就是針對(duì)前期完成的已有功能開發(fā)自動(dòng)化測(cè)試的腳本佩伤,而大部分新功能測(cè)試采用手工測(cè)試聊倔。
l? 集中精力在單元層次上實(shí)現(xiàn)自動(dòng)化測(cè)試,主要由開發(fā)人員實(shí)施生巡,測(cè)試人員提供單元測(cè)試框架耙蔑,并輔助完成一些所需的基礎(chǔ)工作。
l? 在產(chǎn)品設(shè)計(jì)孤荣、編程時(shí)就很好地考慮了自動(dòng)化測(cè)試的需求甸陌,使全面的、自動(dòng)化的底層測(cè)試盐股、接口測(cè)試成為可能钱豁,盡量避免用戶界面(UI)的自動(dòng)化測(cè)試。
l? 良好的IT基礎(chǔ)設(shè)施遂庄,包括自動(dòng)化構(gòu)建軟件包、自動(dòng)化版本驗(yàn)證(BVT)劲赠、自動(dòng)化部署涛目、覆蓋率自動(dòng)產(chǎn)生等。
5 敏捷測(cè)試工具
自動(dòng)化測(cè)試依賴于測(cè)試工具凛澎,所幸的是霹肝,目前已有很多敏捷測(cè)試工具。由于篇幅所限塑煎,這里只是簡(jiǎn)單地列出一些常用的敏捷測(cè)試工具沫换,不再深入討論了。
l? 單元測(cè)試工具:TestNG最铁、xUnit家族(如JUnit 讯赏、NUnit)垮兑、JMock、BizMock等漱挎。
l? 功能測(cè)試自動(dòng)化:ThoughtWorks Twist系枪。
l? Web功能測(cè)試(frontend):Selenium IDE/RC、WatiR磕谅、WatiN私爷。
l? Web service測(cè)試工具(backend):soapUI 。
l? 性能測(cè)試:JMeter+BadBoy膊夹。
l? 驗(yàn)收測(cè)試框架:Fitnesse衬浑、Tellurium。
l? 敏捷測(cè)試過(guò)程管理工具:微軟的Visual Studio 2010放刨,包括TFS 2010工秩、Scrum模板(MS VS Scrum 1.0)、Test Manager 2010宏榕、Coded UI Test等拓诸。
l? 業(yè)務(wù)智能(BI)應(yīng)用的測(cè)試框架:Oraylis BI.Quality (+ NUnit)。
l? 其它一些協(xié)作工具等麻昼,如TestLink奠支、BugZilla、BugFree抚芦、wiki倍谜、ant等。
6 測(cè)試人員在敏捷方法中的價(jià)值
在敏捷方法中叉抡,開發(fā)人員的主導(dǎo)作用更明顯尔崔,系統(tǒng)設(shè)計(jì)、編程實(shí)現(xiàn)褥民、單元測(cè)試季春、重構(gòu)等看似關(guān)鍵的一些任務(wù)都落在開發(fā)人員身上,測(cè)試人員容易被邊緣化消返。那么载弄,在敏捷方法中,測(cè)試人員的價(jià)值又如何體現(xiàn)呢撵颊?
l? 在需求和功能設(shè)計(jì)討論上宇攻,測(cè)試人員可以站在客戶角度上來(lái)闡述自己的觀點(diǎn),扮演“用戶代表”角色倡勇,強(qiáng)調(diào)用戶體驗(yàn)逞刷,真正體現(xiàn)測(cè)試人員和開發(fā)人員的互補(bǔ)作用。
l? 測(cè)試人員不僅扮演“用戶代表”角色,而且通過(guò)需求討論夸浅、代碼復(fù)審等各種活動(dòng)及時(shí)地提供質(zhì)量反饋仑最,包括代碼質(zhì)量、接口一致性等题篷,保證在產(chǎn)品構(gòu)造的整個(gè)過(guò)程中質(zhì)量受到足夠的關(guān)注词身,以提高質(zhì)量改進(jìn)的持續(xù)性和可視性。
l? 測(cè)試人員應(yīng)積極參與單元測(cè)試番枚,即使不參加單元測(cè)試法严,也應(yīng)督促開發(fā)人員進(jìn)行單元測(cè),確保單元測(cè)試達(dá)到80%以上覆蓋率葫笼,確保開發(fā)出具有良好可測(cè)試性的代碼深啤。
l? 在敏捷方法中,往往將一個(gè)大的系統(tǒng)開發(fā)分解成多個(gè)小的子系統(tǒng)(模塊或組件)路星,集成測(cè)試和端到端(end-to-end)測(cè)試顯得更為重要溯街,測(cè)試人員在這些測(cè)試上能發(fā)揮更大的作用。
l? 產(chǎn)品發(fā)布前洋丐,驗(yàn)收測(cè)試和回歸測(cè)試依然不可缺少呈昔,這更是測(cè)試人員的用武之地。
l? 一個(gè)迭代周期結(jié)束后友绝,對(duì)缺陷根本原因進(jìn)行分析堤尾、總結(jié)規(guī)律,幫助開發(fā)人員建立良好的習(xí)慣迁客,預(yù)防缺陷郭宝,從根本上提高產(chǎn)品質(zhì)量。
理想情況下,測(cè)試人員掌握設(shè)計(jì)模式、具有很好的編程能力栓辜,可以和開發(fā)人員進(jìn)行角色互換,如在當(dāng)前版本開發(fā)(/迭代周期)中擔(dān)任測(cè)試人員角色衔统,在下一個(gè)版本開發(fā)(/迭代周期)中則擔(dān)任開發(fā)人員角色。這樣雙方對(duì)不同角色的工作有著更深刻的認(rèn)識(shí)海雪,消除溝通的障礙锦爵,開發(fā)的效率和質(zhì)量會(huì)有進(jìn)一步的提高。
小結(jié)
根據(jù)上面的討論和我們的實(shí)踐喳魏,最后針對(duì)敏捷測(cè)試進(jìn)行一個(gè)簡(jiǎn)單的總結(jié)棉浸,就是:
l? 敏捷測(cè)試就是持續(xù)測(cè)試怀薛、持續(xù)反饋刺彩,扮演“用戶代表”角色,確保產(chǎn)品滿足客戶的需求。
l? 敏捷功能測(cè)試 = 新特性的手工測(cè)試 (use case驗(yàn)證和探索性測(cè)試)? + 原有功能的自動(dòng)化測(cè)試 (回歸測(cè)試)
l? 敏捷測(cè)試人員和開發(fā)人員的區(qū)別越來(lái)越小创倔,理想情況下嗡害,敏捷方法中,測(cè)試人員和開發(fā)人員在不同的迭代周期可以互換畦攘。
l? 敏捷測(cè)試流程依據(jù)不同的團(tuán)隊(duì)特點(diǎn)霸妹、不同產(chǎn)品的特點(diǎn)而不同,因地制宜知押,適合才是最好叹螟。