你的問題為什麼總是難以復現?

你的問題為什麼總是難以復現?

來自專欄 有道測試

問題1: 復現不了的問題

a. 昨天必現的問題、今天復現不了;

b. 生產環境必現的問題、測試環境復現不了;

c. 測試人員必現的問題、開發人員復現不了;

d. 一套環境必現的問題、另一套環境復現不了;

問題2: 自己的問題復現不了

A:發現的問題很多,也很嚴重,最終復現不了需要攻關解決、降級處理的也不少

B : 提交問題比A可能稍少也可能多,大部分問題在提交之前就分析的很透徹,甚至點出了問題的原因、出現的條件和場景,最終問題全部高效、及時的得到了解決。

出現以上問題的原因是什麼?如何解決?下面一步一步說。

一、出現上述問題的原因

經過這些年工作的積累,以及與各領域測試同行的交流,問題復現不了的原因不外乎下面幾個:

  1. 績效導向,提單量影響績效考核
  2. 問題是伴隨出現的,不知道何時出現、如何出現的
  3. 你覺得你知道了根本原因,實際上你不知道
  4. 系統日誌記錄不完善、或者根本沒有打開
  5. 測試過程全程無記錄
  6. 問題單缺乏關鍵信息
  7. 高並發、多線程、非同步調用復現概率低的問題
  8. 黑天鵝問題

二、解決問題的思路

1. 績效導向問題

很多公司,問題單提單量是績效考核的很大一部分,甚至佔到了90%或更高,這就導致了比較奇葩的現象:問題單提單量高,解決率卻很低。這麼說有點誅心的味道,實際工作中懷揣這種想法的人其實非常少,這種結果是特定的考核機制下自然形成的,很多身處其中的人可能並沒有意識到。

跟我們平常說的上有政策、下有對策是一致的,比如二套房,大家排隊離婚。

姿勢: 高大上的價值觀引導,績效考核方式是落實測試價值觀的手段

a. 提交問題的目的,是為了解決問題,提升用戶的使用體驗。這樣測試人員不僅會從技術角度分析產品的實現,還會從易用性等各個角度去衡量產品。

b. 測試的樂趣在於發現問題、定位問題的過程。一般喜歡打探小道消息、對問題刨根究底的人,測試都做的特別好。

現在很多公司已經調整了績效考核的指標,比如阿里同學,重點考核的是上線發布後產品的質量、測試的效率、個人的成長。雖然最後一點有點虛,但是從現在阿里系出版的技術作品看,價值觀引導確實做得好。

問題數量可以作為產品質量評價的一個數據,去衡量產品的質量,但前提是有代碼缺陷密度等基線數據作為支撐,而不能拍腦袋。

2. 伴隨出現的問題

執行測試時都有明確的目的性,這個用例測試的目的是什麼,懷疑會出現什麼樣的現象。出現計劃內的問題,是很容易復現和定位的。但伴隨出現的問題,你一般不能第一時間抓住它,直到它產生了破壞作用,才能感知到問題的存在。它是在何時因為什麼操作出現、什麼事件觸發的,不知道。這類問題就比較容易演化為難復現問題。

姿勢:

  1. 保持冷靜,不要激動,保持現狀
  2. 思考一下:你對它做了什麼?為什麼這樣? 他們兩個什麼關係(可能沒關係)? 可能在什麼地方、什麼操作、什麼事件觸發的?
  3. 想明白了嗎?想不明白叫別人一起想。
  4. 不管是否想明白,把操作記錄、組網、數據、配置、狀態全部記錄下來
  5. 在不破壞環境的情況下,嘗試驗證想法;如果問題比較嚴重,考慮另搭環境驗證;
  6. 想法得到驗證後,簡化環境驗證問題,找到問題觸發條件

3. 幾個自作孽的問題

下面這幾個問題,只要做事嚴謹是可以避免的:

  1. 你覺得你知道了問題原因,實際上你不知道
  2. 系統日誌沒開
  3. 系統日誌記錄不完善
  4. 測試環境、配置文件、環境數據無保留
  5. 操作過程無記錄
  6. 問題單缺乏關鍵信息

以上這些原因都可能導致問題無法復現。發現問題後,分析問題的正確姿勢:

  1. 先別著急提問題
  2. 回想可能是什麼事件、什麼操作、還是環境變化觸發了這個問題。 如果你有記憶宮殿就好了。
  3. 查閱相關日誌、操作記錄進行驗證
  4. 依據問題重要性,保存關鍵的信息
  5. 在現有環境中驗證
  6. 找到穩定復現的條件
  7. 持續簡化環境和復現條件
  8. 找到問題的確切觸發條件和最簡環境
  9. 提交問題,要附帶所有必要信息

對於熱愛測試的工程師來講,這個過程是充滿樂趣的,但是要有嚴密的邏輯思維能力和對被測試系統運行機制的深刻理解。找到原因後,你可能會得出這樣的結論:開發為什麼會犯如此低級的錯誤;開發對協議的理解有誤;開發對此類數據的處理有問題等等。然後你可以跟開發說,你哪裡的代碼處理這個數據有問題、你哪裡哪裡理解錯誤,虛榮心會得到小小的滿足。

大家有沒有感覺到,在定位複雜問題時,日誌系統里缺少的總是關鍵信息,而有的信息總是不太重要的, 軟體可維護性任重道遠。

另外,有些公司的crash問題是不用復現的呦,信息已經足夠了。 你的公司能做到嗎?

4. 高並發、多線程、非同步調用復現概率低的問題

此類問題即使有日誌信息,因為大容量、高並發,再加上非同步處理打亂了原有的慣性邏輯思維,是很難用通用的方法定位出來的。

比如系統記錄明確指針異常的問題,也有堆棧的信息,並且知道哪個指針為空,但是不知道如何導致的,經排查初始化完全沒有問題。這種情況下就不能簡單的通過返回NULL來解決,這樣有可能用戶得到的數據就是空的,雖然概率很低,但是會影響用戶的體驗。 特別是在初創公司,在激烈的市場競爭中,差的用戶體驗,無異於自掘墳墓。

姿勢:此類問題測試同事是不太可能單獨搞定的,一定要夥同資深開發同事一起分析(一般你不叫他他也會過來,這類問題是很有吸引力的)。主體思想是先提高復現概率、一步步縮小問題範圍,最終定位出問題。具體思路怎麼變態怎麼來,客戶端加大訪問量、服務端減少資源、懷疑是網路的問題可以使用traffic control模擬報文錯誤或異常。說隨如此說,碰到具體問題還是要具體分析,根據問題現象,進行有針對性的驗證。

性能測試工程師在互聯網/移動互聯網行業是至關重要的

5. 黑天鵝問題

為了避免碰到此類問題你可以多拜拜觀音菩薩, 如果真碰到了就去買彩票

測試人要有正確的價值觀引導,做事嚴謹,並且要有一定的技術實力做支撐。

(微信公眾號:有道測試)


推薦閱讀:

測試人的自我修養(二)
Web測試和App測試有什麼區別?
交叉測試、探索性測試的概念、價值、實踐
深入解剖安卓單元測試,逐一攻破難點

TAG:測試 | 軟體測試 | 軟體測試管理 |