你的問題為什麼總是難以復現?
來自專欄 有道測試
問題1: 復現不了的問題
a. 昨天必現的問題、今天復現不了;b. 生產環境必現的問題、測試環境復現不了;c. 測試人員必現的問題、開發人員復現不了;
d. 一套環境必現的問題、另一套環境復現不了;問題2: 自己的問題復現不了
A:發現的問題很多,也很嚴重,最終復現不了需要攻關解決、降級處理的也不少B : 提交問題比A可能稍少也可能多,大部分問題在提交之前就分析的很透徹,甚至點出了問題的原因、出現的條件和場景,最終問題全部高效、及時的得到了解決。
出現以上問題的原因是什麼?如何解決?下面一步一步說。
一、出現上述問題的原因
經過這些年工作的積累,以及與各領域測試同行的交流,問題復現不了的原因不外乎下面幾個:
- 績效導向,提單量影響績效考核
- 問題是伴隨出現的,不知道何時出現、如何出現的
- 你覺得你知道了根本原因,實際上你不知道
- 系統日誌記錄不完善、或者根本沒有打開
- 測試過程全程無記錄
- 問題單缺乏關鍵信息
- 高並發、多線程、非同步調用復現概率低的問題
- 黑天鵝問題
二、解決問題的思路
1. 績效導向問題
很多公司,問題單提單量是績效考核的很大一部分,甚至佔到了90%或更高,這就導致了比較奇葩的現象:問題單提單量高,解決率卻很低。這麼說有點誅心的味道,實際工作中懷揣這種想法的人其實非常少,這種結果是特定的考核機制下自然形成的,很多身處其中的人可能並沒有意識到。
跟我們平常說的上有政策、下有對策是一致的,比如二套房,大家排隊離婚。
姿勢: 高大上的價值觀引導,績效考核方式是落實測試價值觀的手段
a. 提交問題的目的,是為了解決問題,提升用戶的使用體驗。這樣測試人員不僅會從技術角度分析產品的實現,還會從易用性等各個角度去衡量產品。b. 測試的樂趣在於發現問題、定位問題的過程。一般喜歡打探小道消息、對問題刨根究底的人,測試都做的特別好。現在很多公司已經調整了績效考核的指標,比如阿里同學,重點考核的是上線發布後產品的質量、測試的效率、個人的成長。雖然最後一點有點虛,但是從現在阿里系出版的技術作品看,價值觀引導確實做得好。
問題數量可以作為產品質量評價的一個數據,去衡量產品的質量,但前提是有代碼缺陷密度等基線數據作為支撐,而不能拍腦袋。
2. 伴隨出現的問題
執行測試時都有明確的目的性,這個用例測試的目的是什麼,懷疑會出現什麼樣的現象。出現計劃內的問題,是很容易復現和定位的。但伴隨出現的問題,你一般不能第一時間抓住它,直到它產生了破壞作用,才能感知到問題的存在。它是在何時因為什麼操作出現、什麼事件觸發的,不知道。這類問題就比較容易演化為難復現問題。
姿勢:
- 保持冷靜,不要激動,保持現狀
- 思考一下:你對它做了什麼?為什麼這樣? 他們兩個什麼關係(可能沒關係)? 可能在什麼地方、什麼操作、什麼事件觸發的?
- 想明白了嗎?想不明白叫別人一起想。
- 不管是否想明白,把操作記錄、組網、數據、配置、狀態全部記錄下來
- 在不破壞環境的情況下,嘗試驗證想法;如果問題比較嚴重,考慮另搭環境驗證;
- 想法得到驗證後,簡化環境驗證問題,找到問題觸發條件
3. 幾個自作孽的問題
下面這幾個問題,只要做事嚴謹是可以避免的:
- 你覺得你知道了問題原因,實際上你不知道
- 系統日誌沒開
- 系統日誌記錄不完善
- 測試環境、配置文件、環境數據無保留
- 操作過程無記錄
- 問題單缺乏關鍵信息
以上這些原因都可能導致問題無法復現。發現問題後,分析問題的正確姿勢:
- 先別著急提問題
- 回想可能是什麼事件、什麼操作、還是環境變化觸發了這個問題。 如果你有記憶宮殿就好了。
- 查閱相關日誌、操作記錄進行驗證
- 依據問題重要性,保存關鍵的信息
- 在現有環境中驗證
- 找到穩定復現的條件
- 持續簡化環境和復現條件
- 找到問題的確切觸發條件和最簡環境
- 提交問題,要附帶所有必要信息
對於熱愛測試的工程師來講,這個過程是充滿樂趣的,但是要有嚴密的邏輯思維能力和對被測試系統運行機制的深刻理解。找到原因後,你可能會得出這樣的結論:開發為什麼會犯如此低級的錯誤;開發對協議的理解有誤;開發對此類數據的處理有問題等等。然後你可以跟開發說,你哪裡的代碼處理這個數據有問題、你哪裡哪裡理解錯誤,虛榮心會得到小小的滿足。
大家有沒有感覺到,在定位複雜問題時,日誌系統里缺少的總是關鍵信息,而有的信息總是不太重要的, 軟體可維護性任重道遠。
另外,有些公司的crash問題是不用復現的呦,信息已經足夠了。 你的公司能做到嗎?
4. 高並發、多線程、非同步調用復現概率低的問題
此類問題即使有日誌信息,因為大容量、高並發,再加上非同步處理打亂了原有的慣性邏輯思維,是很難用通用的方法定位出來的。
比如系統記錄明確指針異常的問題,也有堆棧的信息,並且知道哪個指針為空,但是不知道如何導致的,經排查初始化完全沒有問題。這種情況下就不能簡單的通過返回NULL來解決,這樣有可能用戶得到的數據就是空的,雖然概率很低,但是會影響用戶的體驗。 特別是在初創公司,在激烈的市場競爭中,差的用戶體驗,無異於自掘墳墓。姿勢:此類問題測試同事是不太可能單獨搞定的,一定要夥同資深開發同事一起分析(一般你不叫他他也會過來,這類問題是很有吸引力的)。主體思想是先提高復現概率、一步步縮小問題範圍,最終定位出問題。具體思路怎麼變態怎麼來,客戶端加大訪問量、服務端減少資源、懷疑是網路的問題可以使用traffic control模擬報文錯誤或異常。說隨如此說,碰到具體問題還是要具體分析,根據問題現象,進行有針對性的驗證。
性能測試工程師在互聯網/移動互聯網行業是至關重要的
5. 黑天鵝問題
為了避免碰到此類問題你可以多拜拜觀音菩薩, 如果真碰到了就去買彩票
測試人要有正確的價值觀引導,做事嚴謹,並且要有一定的技術實力做支撐。
(微信公眾號:有道測試)
推薦閱讀:
※測試人的自我修養(二)
※Web測試和App測試有什麼區別?
※交叉測試、探索性測試的概念、價值、實踐
※深入解剖安卓單元測試,逐一攻破難點