不少介紹微軟測試過(guò)程的文章都強調大量運用自動(dòng)化測試,給人一個(gè)只要有了自動(dòng)化測試,整個(gè)測試過(guò)程就得到保證的印象。不可否認自動(dòng)化測試的作用,但是對于下面兩個(gè)問(wèn)題:
“自動(dòng)化測試總是任何時(shí)間內、任何條件下、任何項目階段中的最佳選擇嗎?”
“進(jìn)行/不進(jìn)行自動(dòng)化測試的決策是怎樣做出來(lái)的?”
答案會(huì )是什么?
為了回答這兩個(gè)問(wèn)題,我想分享一個(gè)真實(shí)的微軟測試項目的經(jīng)驗。
在這個(gè)項目中需要關(guān)注兩件事情:設置向導和客戶(hù)體驗改進(jìn)計劃。
設置向導,或者安裝向導,相信安裝過(guò)軟件的朋友都知道,就是引導用戶(hù)完成一系列操作的一種界面,具有連續出現的窗口,每個(gè)呈現不同的內容,使用戶(hù)每次只關(guān)注特定的項目從而容易完成復雜的全部操作。
客戶(hù)體驗改進(jìn)計劃(Customer Experience Improvement Program,簡(jiǎn)稱(chēng)CEIP)就不是那么為大眾所了解。實(shí)際上Windows系統中有這么一個(gè)缺省關(guān)閉的選項,如果用戶(hù)打開(kāi)了,關(guān)于用戶(hù)如何使用微軟軟件的信息,例如常點(diǎn)擊的菜單項有哪些、缺省選項被改動(dòng)為哪些值等等,會(huì )被Windows系統自動(dòng)記錄下來(lái)并定期發(fā)送到微軟的服務(wù)器。專(zhuān)業(yè)分析師會(huì )解讀這些數據,從中發(fā)現微軟軟件設計上的潛在缺陷:它們會(huì )導致用戶(hù)迷惑、誤解,以致無(wú)法正確使用某些功能。
這里要測試的功能,就是為某處設置向導添加CEIP的記錄動(dòng)作。第一次接觸這個(gè)新事物,不少測試工程師的通常反應是,模擬用戶(hù)在設置向導中的操作,然后觀(guān)察CEIP的記錄數據對不對,完事。
自動(dòng)化測試更是小菜一碟:驅動(dòng)用戶(hù)界面操作本不是難事,何況測試設置向導本身功能的工程師已經(jīng)做好了一切,借花獻佛就好了;CEIP的記錄數據也是拿已經(jīng)做好的函數讀一下記錄,然后跟預期數據比較就好了。
表面看是如此,但如果這就是故事的全部,那就沒(méi)有說(shuō)的必要了。實(shí)際上,這只是冰山浮在水面上的部分。
先考慮一下兩個(gè)問(wèn)題:
這個(gè)功能沒(méi)測試好的后果是什么?
CEIP是用于指導下個(gè)版本的可用性(Usability)設計的。如果里面的缺陷導致不準確的信息,那么CEIP分析師會(huì )被誤導從而得出不反映真實(shí)情況的結論。例如,本來(lái)用戶(hù)很常用的一個(gè)菜單項“打印”,被誤記錄為“屬性”的話(huà),結論會(huì )是“打印”沒(méi)什么人去用,“屬性”倒有不少用處。那么開(kāi)發(fā)下個(gè)版本的軟件時(shí),根據這個(gè)“據說(shuō)從真實(shí)的用戶(hù)統計數據得來(lái)”的結論,很可能“屬性”被放到顯眼處,很常用的“打印”反而被藏起來(lái)了。不要爭辯哦,這是被大量用戶(hù)數據所證實(shí)的嘛。所以,CEIP是把雙刃劍,不準確的數據比沒(méi)有數據更糟糕。
這個(gè)功能沒(méi)在測試中發(fā)現的缺陷,會(huì )被誰(shuí)、什么時(shí)候發(fā)現?
很多測試中沒(méi)發(fā)現的功能缺陷,發(fā)布出去之后用戶(hù)遲早會(huì )發(fā)現。唯獨這種CEIP的功能,用戶(hù)除了打開(kāi)或者關(guān)閉之外永遠不會(huì )去接觸:用戶(hù)為什么要關(guān)心CEIP記錄得對不對呢?事實(shí)上這些功能缺陷用戶(hù)不知道,微軟也不一定知道,只會(huì )根據CEIP數據調整設計。除非之后的若干個(gè)版本改得實(shí)在太過(guò)分以致怨聲載道,或者跟用戶(hù)調查的結論相差實(shí)在太大,才會(huì )驚覺(jué)可能是CEIP的問(wèn)題。所以CEIP數據的缺陷,是一個(gè)不定延時(shí)引信地雷,埋下去就難以挖出來(lái),而且要挖出來(lái)還極為麻煩:怎樣回應用戶(hù)“上幾個(gè)版本都是這樣的,我都習慣了為什么又要改”的質(zhì)疑?“根據CEIP數據決定這樣改,但后來(lái)我們發(fā)現CEIP數據錯了”?(用戶(hù)一臉茫然:什么是CEIP數據?跟我有什么關(guān)系?什么叫做記錄我做過(guò)的事?你想說(shuō)這是我自作自受的結果嗎?)
綜上所述,這個(gè)功能不是對著(zhù)界面點(diǎn)擊一通就能看出對不對的,測試人員還需要觀(guān)察記錄下的數據并與做過(guò)的操作相對照;測試用例需要持續的在多個(gè)版本中執行以防范回歸缺陷(Regression Bug);測試這個(gè)功能,防止缺陷被埋進(jìn)去具有更高的價(jià)值,因為事后很難挖出來(lái)。
延伸閱讀
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/