測試人員每天的例行工作之一就是與開發溝通代碼改動,並對改動進行功能回歸,我們稱之為測試范圍確認。對於每個測試人員來說,可能都會遇到以下問題:
1、拿到一個代碼改動后我首先做什么?
2、跟開發溝通時問些什么?
3、我該如何溝通才能問到自己想問的問題?才能更精確的得到回歸范圍?
4、擔心自己問的問題太不搭調,被對方嘲笑怎么辦?
5、跟開發溝通結束后,接下來該怎么做?直接按照開發說的去做嗎?
老規矩,舉例說明:
對話背景1:一天,武爺對瀏覽器的代碼作了幾筆改動。小強匆匆忙忙地看了一下代碼變更之后,就跑去問武爺了…
Bad case(小強版)
小強:有一筆代碼改動的地方,把一個auto指針, 改成unique智能指針。我了解到這兩個智能指針都可以在對象銷毀的時候自動釋放內存。
(評語:目的不明確,導致對方不清楚你的來意)
武爺:不明白。。。
小強:就是說 auto_ptr 指針會在賦值時把自己所指向的內存塊轉移到另外一個指針中,而unique_ptr則不會,是這樣吧?
(評語:還是沒說明來意,關注點停留在技術細節上,對方仍然不明白來意)
武爺:不明白你說的是什么?
小強:就是代碼改動的時候把一個auto指針換成了unique指針,這個指針的變動會有什么影響?
(評語:進入主題了,不過封閉式的提問,對方直接回答有或者沒有就行,還是沒能得到自己想要的答案)
武爺:你可以理解unique更安全,更換后沒有太大的問題,那筆改動不用回歸。
小強:。。。
Good case(小明版)
小明:在SVN上看到一筆改動,把一個auto_ptr 換成了unique_ptr, 我了解到的這兩個指針,都能自動地釋放內存,為什么要做這樣的轉換呢?
(評語:開題就把對方帶到了自己想要談的主題上,讓對方知道我是來找你了解代碼改動。接着,說了下自己提前了解到的情況並提出准備好的問題,這樣能引導對方跟你思考同一個問題,有利於確認到較准確的回歸范圍。)
武爺:原來的auto是我們自己做的,unique_ptr 是VC11的,VC11已經有自動釋放的指針了,我們就就沒必要再自己做,直接使用系統提供的就好了。
小明:那這樣改動會影響哪些范圍呢?
(評語:與對方確認改動的影響范圍,這種開放式的提問方式,能夠讓對方展開來談論,有利於我們了解到更多內容。)
武爺:應該沒有什么影響,要是出問題就崩潰了,看下主路徑就行。
小明:那些指針是控制哪些對象的?
(評語:如果提前了解到更多的技術細節,也可以提前准備好疑問,溝通時提出來一起討論來解答疑惑)
武爺:DC(設備繪圖的)
小明:我們對瀏覽器界面主路徑做測試,沒有出現大的問題,比如崩潰,就沒問題是吧?
(評語:好了,回歸范圍拿到了,最后就溝通得出的結論總結下,讓雙方達成一致。)
武爺:是的。
對話背景2:一天,開發添加了一個函數,在SVN上的changelog內容注釋的是”添加了一段牛掰代碼“,對於看不懂代碼的測試童鞋要去找開發確認回歸范圍了。。。
Bad case(小M版)
小M:我看到了一筆代碼改動,想跟你確認下,你看現在方便嗎?
(評語:比較有禮貌,溝通時的禮貌用語,會讓對方比較舒服)
開發:你說
小M:看到你添加在一段代碼,但是這段代碼不是特別明白,你看能稍微講一下嗎?
開發:我加的那一段?我加了好多代碼。。。
小M:額,你打開SVN看看,我告訴你是哪一筆。
(評語:沒有提前准備,需要讓開發打開svn changelog查看,浪費了大家的時間)
。
。(此處打開SVN)
。
小M:就是這個改動
開發:哦,這個呀,這個你不用回歸。這個沒什么影響,功能上沒什么大問題就行,不用回歸。
小M:這個函數的作用是什么啊?
(評語:問到了函數作用,但是沒有深入的接着問,導致獲得的信息沒有幫助)
開發:計算距離的,你黑盒上回歸下沒問題就行
小M:這個加了以后跟加之前有什么區別嗎?
開發:更精確了。這個不用回歸,我之前的改動與UI展現相關的沒問題就行
小M:也就是說你這塊改動是與UI展現、字體展現等相關的是吧?
開發:是的。
Good case1(NaNa版)
nana:想跟你確認下代碼改動,你現在有時間嗎?
開發:有時間,你說。
nana:剛才發到你QQ上的截圖,就是那筆改動,你的注釋是”加了一段牛掰代碼“。我看了一下,不太了解你這段代碼的邏輯,你能跟我講一下嗎?
(評語:說明來意,直奔主題)
開發:哦,這個呀,這個你不用回歸。這個沒什么影響,功能上沒什么大問題就行,不用回歸。
nana:那個代碼本身的邏輯你能簡單給我講一下嗎?我想了解一下
(評語:深入了解代碼邏輯,因為了解到邏輯后,對后面的回歸有幫助)
開發:函數本身是計算去一個最佳的距離
nana:什么距離呢?
開發:所有字體布局之間的距離
nana:我們瀏覽器的主框架?
開發:可以這么理解,所有的布局和字體之間的距離
nana:所有的布局?我們瀏覽器的UI包括很多,主框架區、對話框,還有氣泡等等,是指這些嗎?
開發:主框架
nana:是指主框架的收藏欄、地址欄、側邊欄等嗎?
(評語:對待每個模糊的回答,能夠細化問題,精准的確認影響范圍)
開發:是的
nana:這個函數計算的UI距離是指哪些具體的UI呢?
開發:行間距和字體的間距,圖片與字體之間的間距
nana:這段代碼的邏輯調研過嗎?能給我交接下嗎?
(評語:明白自己的目的,以學習的心態再次要求開發講解代碼邏輯。這在完全不了解代碼邏輯但又必須得了解的情況下是可取的,能避免漏掉細節)
開發:你一定要了解嗎?那給你講講吧。
Good case2(小明版)
小明:請問有時間嗎?跟你溝通下代碼改動,確認下回歸范圍。改動內容已經截圖發給你了。
開發:好的
小明:我看你注釋的內容是”加了一段牛掰代碼“,這段代碼是做什么用的?
開發:哦,這個呀,這個你不用回歸。這個沒什么影響,布局上沒什么大問題就行,不用回歸。
小明:它會讓布局不一樣是吧?那它是做什么用的呢?
開發:它主要用於計算距離,一些布局的間距
小明:什么時候會使用呢?
(評語:了解具體的函數使用細節,包括作用、使用時機、使用范圍等,有助於確認最后的回歸范圍,這些都建議提前做准備,有備無患)
開發:展示UI的時候,需要排版時就會調用它來計算間距
小明:是所有UI都要用到嗎?
開發:可以這么理解
小明:這個跟DPI有關嗎
開發:有,就是在高DPI下用來重新計算距離的
小明:哦,那就是在125%、150%DPI下用到是吧?
開發:是的
小明:那這個如果出問題的話,可能出什么問題呢?
開發:如果出問題,布局就錯亂了
小明:那這段函數是咱們自己寫的嗎?
開發:是
小明:那是否需要我們做內部的調研,去針對性的做一些單測呢?
(評語:引導開發思考修改存在的隱患問題,並提出做單測的想法,提出了如果出問題會如何如何,這樣開發會更加謹慎的去回答你提出的問題。)
開發:想做也行
小明:不會出問題吧?要是出問題我就找你哈~~哈哈哈
開發:那做一下吧
小明:那要做的話,請講一下具體實現吧。
(評語:通過單測的要求,讓開發講解代碼實現順理成章)
開發:balabalabala。。。(講實現)
小明:我再確認下,這個功能就是在瀏覽器高DPI下,UI布局展現時計算距離的,我們驗證UI時,應該看一下所有的UI布局展現的正確性,包括在移動、刷新時候的UI展示都沒問題就行吧?如果出現問題可能是錯亂等問題,這個函數如果需要深入測試的話到時候會找你了解具體的代碼實現。
(評語:最后,總結下雙方的溝通結論,達成一致)
開發:好的
以下是測試范圍確認流程的整體框架,以及每個階段的實施建議,供大家參考。