談到自動(dòng)化測試方面的誤區(qū),不少文章傾向于從人性、管理、職業(yè)規(guī)劃等方面進(jìn)行探討。我這次專門從計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、維護(hù)等技術(shù)角度總結(jié)一下。
自動(dòng)化的最終目標(biāo)是什么?
很多人以為是像工業(yè)革命一樣消滅手工勞動(dòng)者,在這里等于手工測試人員。但是測試存在一個(gè)目前來看還算正確的、其他行業(yè)不多見的悖論:任何時(shí)候,你都不能準(zhǔn) 確知道還有多少bug,就像警察不能準(zhǔn)確知道還有多少賊一樣。所以自動(dòng)化的最終目標(biāo)——目前來說——是解放盡量多的人手去進(jìn)行更多的測試,除非有一種手段 能像《少數(shù)派報(bào)告》里面的預(yù)言少女一樣預(yù)知所有的bug。因?yàn)橛肋h(yuǎn)有bug,有未知的bug,所以目前不存在能覆蓋所有bug的手段,這意味著總需要人的 參與。現(xiàn)代化手段只是減少了而不是杜絕對(duì)人員的需求。所以如果認(rèn)為自動(dòng)化工作一做完就沒活干,那你就大錯(cuò)特錯(cuò)了。正認(rèn)為這些人閑下來,他們有空發(fā)現(xiàn)更難發(fā) 現(xiàn)的bug。這本來沒什么大不了的,但是擱在計(jì)劃階段如果過分樂觀,牛皮吹得太大的話,到后面就不容易圓回去了。因?yàn)榘瓷厦娣治觯詣?dòng)化測試總有些地方是 力有不逮的,如果這些地方?jīng)]有安排好人手時(shí)間,只要在這些地方出大問題,那你就玩完了。
能否/怎樣自動(dòng)驗(yàn)證?
這個(gè)問題每次復(fù)審測試計(jì)劃的時(shí)候我都會(huì)問,針對(duì)每一個(gè)提出要實(shí)施自動(dòng)化的地方。每個(gè)人、每個(gè)工具談?wù)撟詣?dòng)化的時(shí)候都在說如何真實(shí)模擬用戶使用產(chǎn)品的情況, 這很好,絕對(duì)需要關(guān)心。不過我得問一句:測試的最后結(jié)果是什么?如果你回答“各種使用產(chǎn)品的場景已經(jīng)運(yùn)行過“就嘎然而止的話,你就漏掉了一大塊:最起碼還 得加上“產(chǎn)品能工作/不能工作“!所以模擬用戶使用產(chǎn)品的各種情況,只是解決上述問題的第一部分;如何得出測試通過/不通過的最終結(jié)論,才是解決問題第二 部分的基礎(chǔ)部分,還有詳細(xì)缺陷描述、上下文數(shù)據(jù)收集等沒做到呢!
所以讓機(jī)器像人一樣使用產(chǎn)品,并沒有解決全部問題,剩下的事情還有多少,這是需要視情況而定的。如果只是解決了第一個(gè)問題就認(rèn)為萬事大吉,那簡直就是在賭運(yùn)氣——有些時(shí)候自動(dòng)驗(yàn)證是小菜一碟,但很多時(shí)候不是。
令事情惡化的是,自動(dòng)驗(yàn)證了產(chǎn)品的一些指標(biāo),并不能反映產(chǎn)品的真實(shí)質(zhì)量。有時(shí)驗(yàn)證過的指標(biāo)通過了,其實(shí)其他地方暴露了問題卻沒有檢查:比如說界面說沒有查 詢結(jié)果,這是期望的,實(shí)際上查詢請(qǐng)求根本沒有發(fā)過去,不去檢查底下做了什么的話是發(fā)現(xiàn)不了這種bug的;有時(shí)驗(yàn)證過的指標(biāo)不通過,其實(shí)只是個(gè)小問題,大問 題需要通過別的指標(biāo)暴露出來的:比如說返回結(jié)果跟預(yù)期的不一致,實(shí)際上該有的都有,只是沒有排好順序而已,但是被標(biāo)記成重要的測試用例沒有通過,把開發(fā)人員搞個(gè)雞飛狗跳。
這個(gè)話題深入下去,那就涉及到白箱測試策略、邏輯推演、嗅探和代碼注入以及布景偽造(environment mockup)等領(lǐng)域,但我想強(qiáng)調(diào)的只是,如果考慮自動(dòng)化測試,自動(dòng)驗(yàn)證絕對(duì)不是可忽略的問題。
整合現(xiàn)有還是自力更生?
這個(gè)話題用于辯論賽是最好不過的,它符合“沒有定論“這個(gè)要求 。所以我只談一下使用每種手段時(shí)的一些不正確的假設(shè)。
“現(xiàn)有的工具多少經(jīng)過測試,質(zhì)量比自己做的更有保證“。先不在“是不是更有保證”這個(gè)話題上鉆牛角尖,我們先關(guān)注幾個(gè)問題:整個(gè)測試方案里面哪些部分是關(guān) 鍵,質(zhì)量不好會(huì)導(dǎo)致致命后果的?這些部分有專人保證質(zhì)量嗎?出事的時(shí)候反應(yīng)時(shí)間和修復(fù)效果如何?如果這些問題的答案是“我充分了解”或者“沒問題”,那我 也同意這個(gè)觀點(diǎn)(我敢打賭,回答“不清楚”或者“很不妙”的人已經(jīng)跑去重新考慮整個(gè)測試方案了)。
“整合現(xiàn)有的工具省時(shí)間和人力”。類似的幾個(gè)問題:你能在這些工具中自由地調(diào)試產(chǎn)品的缺陷嗎?整合方案能適應(yīng)產(chǎn)品的演變嗎?幾個(gè)月后呢?幾個(gè)版本后呢?有需要變動(dòng)的話代價(jià)多少?(嘩啦啦又跑掉一大隊(duì)人了)
“自力更生好控制”。投入產(chǎn)出比如何?引用的技術(shù)可靠嗎?如果你是開發(fā)者(之一),別人都覺得好控制嗎?誰來測試你的自力更生成果?
“有些事情必須得自力更生“。剪裁現(xiàn)有工具難度如何?時(shí)間允許嗎?
其實(shí),縱觀所有提出的問題,我想強(qiáng)調(diào)的一點(diǎn)是,自動(dòng)化測試的開發(fā)跟產(chǎn)品開發(fā)一樣,也是需要規(guī)劃和管理的,回答這些問題也是自動(dòng)化測試項(xiàng)目管理的一部分。
如何解決歷史遺留問題?
折騰上個(gè)版本的自動(dòng)化測試框架是新人最頭疼的事情。但了解了一些事情之后,原先的事情就沒那么令人頭疼了。很多人忙于了解舊框架本身,其實(shí)世界一直在變,現(xiàn)在項(xiàng)目需要解決的問題才是關(guān)鍵。無論上個(gè)版本的東西多么輝煌,只有它適合現(xiàn)在的項(xiàng)目(的部分)才是有價(jià)值的。所以關(guān)于舊的自動(dòng)化測試技術(shù),了解什么能用得上,而不是了解它是什么,才是需要做的事情。就好像汽車修理工知道怎樣拆舊車零件來修新車,并不需要他知道怎樣造一輛出來或者知道怎樣修好舊的那輛。
另一個(gè)極端是“舊的不好浪費(fèi),繼續(xù)用“。“能用“這個(gè)結(jié)論是基于以前項(xiàng)目的情況的,現(xiàn)在能不能用,值不值得用得看現(xiàn)在的需求。人們要理發(fā)就是個(gè)很好的例子:總不能因?yàn)轭^發(fā)長出來要耗養(yǎng)分不好浪費(fèi),就一輩子都不剪吧? |