有效測(cè)試的精髓在于控制變量

把大象裝進(jìn)冰箱需要幾步?

這一部分可以跳過。

我想要大象在冰箱里,所以先去動(dòng)物園找一頭大象,再找一個(gè)冰箱,把大象牽到冰箱旁邊,打開冰箱門,然后把大象裝進(jìn)冰箱,再把冰箱門關(guān)上。所以是七步。

把大象裝進(jìn)冰箱的步驟

現(xiàn)在遇到一個(gè)Bug,最后大象沒在冰箱里,可能是哪里有問題?

讓我們來從頭理一理:

  • 去動(dòng)物園:動(dòng)物園閉園,臨出門有事沒去成,走著去一天都沒走到,車壞路上了……
  • 找大象:動(dòng)物園沒有大象,大象生病了,大象睡覺呢,大象OK但管理員不讓牽走……
  • 找冰箱:動(dòng)物園沒有冰箱,冰箱壞了,冰箱太大/太小,冰箱OK但裝滿了……
  • 把象牽到冰箱前:也可以把冰箱搬到大象前,它倆要在很近的物理位置上,冰箱上面貼個(gè)老鼠把大象嚇跑了……
  • 打開冰箱門:東西太滿打不開,門好像凍上了,冰箱門封條老化掉下來了,一不小心太用力把門拽掉了……
  • 裝大象:大象不愿意,我推不動(dòng)大象,冰箱太小裝不下,冰箱被大象踩漏了……
  • 關(guān)上冰箱門:門關(guān)不上,密封條掉了關(guān)不住,大象用鼻子把門拱開了,用腳踹開了,門掉了……

梳理完頭都大了,我看到最終大象沒在冰箱里,原因可能有N種,我怎么知道到底是哪里有問題呢?只能一步一步排查,順藤摸瓜,終于發(fā)現(xiàn)是冰箱太小了根本沒法裝大象。但也只是我這次的發(fā)現(xiàn),下次沒準(zhǔn)會(huì)找到大冰箱。于是我周而復(fù)始的找大象裝冰箱,衍生了各種工具各種方法,有時(shí)成功有時(shí)失敗。但我始終仍記得我的目的,是要得到“大象在冰箱里”這個(gè)狀態(tài)。

城市里流傳著我的傳說,大家看到我會(huì)微笑,在背地里指指點(diǎn)點(diǎn):“看,那就是那個(gè)往冰箱里裝大象的傻子?!?我無所謂,哪怕被困在同一天,我也能找到精進(jìn)的方法提高成功率。

又是毫無不同的一天,我在去動(dòng)物園的路上摔了一跤,爬起來撣撣土,腦子突然靈光起來:“不對(duì)啊,我為什么要日復(fù)一日的裝大象?” 于是跑去問給我需求的人,再問給他需求的人,一路追問下去,“老板想看一集動(dòng)畫片?!?/p>

Source: "Love, Death & Robots S01E13 Ice Age"

吃飯睡覺打豆豆,放羊娶妻生娃放羊……人生真是虛無啊……

缺陷不會(huì)憑空產(chǎn)生

抽象一下上面的段子可得出,用戶想要做達(dá)成目標(biāo),必有以下幾個(gè)要素:

  1. 對(duì)象:我、大象、動(dòng)物園、冰箱
  2. 行為:我去動(dòng)物園、我找冰箱
  3. 順序:我先去動(dòng)物園,再找大象

常見的缺陷模式

  1. 對(duì)象本身有問題:特殊數(shù)據(jù)、資源權(quán)限、數(shù)據(jù)的狀態(tài)等。

  2. 觸發(fā)條件沒滿足:可能是鏈路問題,比如弱網(wǎng)、防火墻攔截,也可能是觸達(dá)對(duì)象的問題,比如拒絕服務(wù)、消息阻塞等。

  3. 做事情的順序不對(duì):線性流程跳過步驟,不按順序,任意流程節(jié)點(diǎn)回退;可并行的流程各環(huán)節(jié)的狀態(tài)變化干擾等。

  4. 環(huán)境問題:環(huán)境不可用、不穩(wěn)定、不滿足測(cè)試條件等。

  5. 以上情況的一種或多種隨意組合:這種就自求多福了,有經(jīng)驗(yàn)的測(cè)試會(huì)減少試錯(cuò)成本。

今年冬天北京罕見低溫,摩托儀表盤全線罷工;春暖花開了,它也結(jié)束了冬眠,不藥而愈

缺陷的產(chǎn)生不是玄學(xué)

之前和幾個(gè)同事出差在外,租了一輛車,我們喜歡在通勤路上聽歌。開始連藍(lán)牙沒問題,后來想添加連接設(shè)備時(shí),整個(gè)藍(lán)牙按鈕都置灰了,導(dǎo)致我們無法對(duì)藍(lán)牙設(shè)備進(jìn)行任何操作,各種重啟也無效,遂放棄。

一天我們?nèi)ベ徫?,同事Shawn在車?yán)锏群?。剛拉開車門,他就眉飛色舞的說藍(lán)牙修好了。我們不信,問他怎么修好的。“說起來你們可能不信,我上官網(wǎng)搜了一下,打開車門五分鐘再關(guān)上就修好了,就是天比較冷,晚上我得多吃點(diǎn)?!?/p>

來自官網(wǎng)論壇描述

“Open the door 5 minutes” trick 包含以下步驟:斷開藍(lán)牙設(shè)備、熄火、打開車門五分鐘、關(guān)門、啟動(dòng)。按照這個(gè)步驟確實(shí)可以修復(fù)這個(gè)問題,但我們并不知道重現(xiàn)或修復(fù)這個(gè)問題的最小步驟。無法穩(wěn)定的重現(xiàn)問題,就說明我們不知道問題到底是什么。也許單純是車載軟件的問題,也許是硬件的問題導(dǎo)致軟件沒有進(jìn)入正常的藍(lán)牙狀態(tài),也許軟硬件都有問題,是多缺陷導(dǎo)致的軟件失效。

事出反常必有妖,缺陷的產(chǎn)生絕不是玄學(xué)。之所以無法重現(xiàn)問題,說明我們還沒有找到導(dǎo)致缺陷產(chǎn)生的必要條件。如何找到呢?答案就是本節(jié)大標(biāo)題:控制變量。

測(cè)試的精髓在于控制變量

一種科學(xué)研究方法

現(xiàn)實(shí)世界中,一個(gè)問題往往與多個(gè)因素有關(guān)。我們都知道不能窮盡測(cè)試,所以往往只會(huì)關(guān)注一兩個(gè)影響結(jié)果的因素。那么問題來了:可能存在其他的因素影響結(jié)果。為了排除其他因素影響,雖然不能重點(diǎn)關(guān)注,但我們也需要考慮可能影響結(jié)果的其他相關(guān)因素。

控制變量就是這樣一種科學(xué)的研究方法,可以把多因素的問題轉(zhuǎn)化為多個(gè)單因素的問題,在單次實(shí)驗(yàn)中只研究某一個(gè)變量對(duì)結(jié)果的影響。當(dāng)我們需要進(jìn)行一些試錯(cuò)或探索嘗試時(shí),控制變量就比較好用。

映射到測(cè)試場(chǎng)景,有效測(cè)試的精髓就在于控制變量。這就是為什么測(cè)試用例要原子化,在確保其他因素一致的情況下,每次只驗(yàn)證一個(gè)點(diǎn),這才是有效的測(cè)試。

再思考一下常見的測(cè)試問題:怎么重現(xiàn)無法重現(xiàn)的Bug?是不是有點(diǎn)思路了。無法重現(xiàn)的原因就在于沒有發(fā)現(xiàn)影響測(cè)試結(jié)果的那個(gè)唯一因素。我們需要采用控制變量的方法,逐一排查影響測(cè)試結(jié)果的因素,直到找到影響的唯一因素。注意,這里影響結(jié)果的唯一因素不是單一因素,也有可能是多因素的組合。下面我們會(huì)展開介紹一下如何進(jìn)行這種測(cè)試實(shí)驗(yàn)。

Source: Earth, Moon, & Sun Photo by Kevin Gill/Flickr

控制變量:端到端逐一排查

先憑直覺。

有時(shí)候潛意識(shí)會(huì)幫助你返回最接近真相的答案,只不過你不相信直覺,繞了一大堆彎路。所以腦海里有了朦朧的想法,就先探索一下,往往會(huì)有意外收獲。

接著排除人的因素。

畢竟相對(duì)于各種調(diào)試來說,找其他小伙伴試試能否重現(xiàn)還是成本較低的。我之前就遇到過 “在我這一直有問題,到開發(fā)那立馬沒問題” 的Bug。不同的人操作習(xí)慣差異較大,手快有手慢無,鍵鼠偏好也不同。也許最后就是軟件的問題,但找人也是相對(duì)高效的控制變量的方法。

然后排除環(huán)境因素。

道理與人的因素一樣,相對(duì)好排查差異性。

再進(jìn)行單一因素控制變量實(shí)驗(yàn)。

找到影響結(jié)果的任何因素,確保其他因素不變,進(jìn)行單一因素的控制變量實(shí)驗(yàn)。看似量大,但其實(shí)這樣能確保每次都是有效測(cè)試。當(dāng)然,如果你能明確知道多個(gè)因素之間沒有影響,也能分別驗(yàn)證其對(duì)結(jié)果的影響,完全可以放在同一個(gè)用例里去驗(yàn)證,這樣的測(cè)試也是有效的。

最后進(jìn)行組合因素控制變量實(shí)驗(yàn)。

當(dāng)單一因素都排查完,還沒找到問題所在,那么恭喜你獲得自求多???,有較大可能你的問題是由多因素的組合導(dǎo)致的。如果還有時(shí)間精力,可以進(jìn)行多因素的組合實(shí)驗(yàn),從而找到影響結(jié)果的因素組合取值。

如果已經(jīng)進(jìn)行了足夠充分的測(cè)試,還是沒定位問題,那就把問題放在暫緩區(qū)好了,還是要追求高性價(jià)比。

控制變量思路:端到端逐一排查

可能會(huì)有疑問:折騰這一大圈已經(jīng)花費(fèi)很多精力了,還談什么性價(jià)比呀。其實(shí)在很多測(cè)試者腦子里,大家就是這么測(cè)試的,只不過可能沒意識(shí)到,或者沒像我一樣把思考的過程寫出來。對(duì)有經(jīng)驗(yàn)的測(cè)試來講,這個(gè)過程不過是電光火石的一剎那,并不會(huì)占用太多精力,因?yàn)檫^往的測(cè)試經(jīng)驗(yàn)已經(jīng)把這種方法形成大腦肌肉的機(jī)械記憶了。所以各位在跟測(cè)試溝通時(shí),TA有可能偶爾發(fā)呆,請(qǐng)不要打斷TA。

測(cè)試敏感度

面試QA的時(shí)候經(jīng)??吹竭@類評(píng)價(jià),“該候選人測(cè)試敏感度不錯(cuò)”,到底什么是測(cè)試敏感度?我認(rèn)為的測(cè)試敏感度是:經(jīng)過一定時(shí)間的測(cè)試工作錘煉后形成的、那種測(cè)試獨(dú)有的“問題嗅覺”。擁有較好測(cè)試敏感度的人,能夠在需求和設(shè)計(jì)階段就敏銳的識(shí)別出潛在缺陷,能夠在正式測(cè)試前對(duì)缺陷的分布有正確的預(yù)判,能夠在質(zhì)量風(fēng)險(xiǎn)還未明顯暴露時(shí)就拉著團(tuán)隊(duì)未雨綢繆,能夠在出現(xiàn)問題后快速的定位問題分析問題,促成問題的最終解決。

測(cè)試敏感度也不是玄學(xué),是可通過刻意訓(xùn)練養(yǎng)成的。不同的人可能適合不同的方法,但總有一個(gè)量變引起質(zhì)變的過程。關(guān)鍵在于不放過某一個(gè)疑點(diǎn),刨根問底的找到答案。當(dāng)然了,過程中也要平衡成本和收益,允許問題存在和懂得適時(shí)放棄,也是測(cè)試必修技能。

所謂的測(cè)試敏感度說穿了也就那么回事兒,無非是經(jīng)驗(yàn)之談,再加上一點(diǎn)的細(xì)心鉆研,沒有什么神秘的。

Pracice Makes Perfect
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容