01
bug對于我們開發者來說,應該不陌生,雖然我們經歷的大部分bug有的被其他人修復了并且在互聯網分享出來了,這時候我們通過Stackoverflow、Baidu、Google等搜索引擎找到答案了。
但是我們在工作中也可能會遇到一些疑難的bug,這里bug我們在搜素引擎上找不到解決方案,可能好幾天都不得其解。譬如我們bug無法重現,這兩天我就遇到了一個客戶反饋的bug,因Bug重新不了,定位不到問題,遲遲沒有解決而搞得人焦頭爛額。
簡單描述這個bug:
同一款類型手機,系統版本高點的手機正常,其他手機也沒有重現。單獨客戶的那款類型的手機出現問題。
剛開始懷疑是該類型手機的自身的應用鎖功能導致的,后來客戶反饋不是,只有我們這個應用會,在他那款手機其他的應用程序不會出現類似問題。
最后重現問題的方法。因為之前給過客戶兩個不同安裝包,雖然是兩個不同安裝包,但兩個包改動不大。
于是乎,試著卸載手頭的手機的最新應用程序,先安裝舊的安裝包,再安裝新的安裝包,神奇的bug重現了。
2
通過解決這個bug,讓我明白了,對于用戶反饋的bug,我們開發者要盡量從自身找問題,冷靜分析問題。
實在不知如何下手,請求隊友們幫忙,別人的一句無意的話,可能能幫助你解決問題,盡可能少的否認問題的存在。
換一種思路,可能就豁然開朗了
回歸問題場景,事件順序
事件是否可以以一種不同的順序到達?譬如我這個bug重現不了,我就是按照這個方法來重現的,按照用戶的用戶行為去重現問題。先安裝舊的安裝包,再安裝新的安裝包。重視用戶提供的日志
調試某個bug花很長時間時,常常是由于我做了錯誤的假設。用戶提供的日志很重要,看一次定位不到問題,沒有頭緒的情況下,多看幾次,剛開始我以為出現這個bug,是用戶對我們這個應用程序燒寫不全導致。相信用戶
不要認為用戶是傻逼,因為如果你這樣認為的話,你在他眼里也是。想想,我都把日志給你了,操作步驟也錄視頻給你了,你定位不了問題,還說是我們系統的問題。
有時候對于用戶提供報告問題時,我們的本能反應很可能是“這不可能。用戶肯定是哪里弄錯了。”
通過這個bug,我已學會了擯棄這樣的反應。結果往往證明,用戶報告的正是實際發生的問題。所以從現在起,我對用戶報告的問題信以為真。近期代碼的變化
要注意近期代碼的改動,我們通過代碼管理工具都能清楚的看到,每處代碼的改動的都不要輕易否認。復現,找到穩定復現的辦法
抽特征,對BUG發生的條件進行抽取
減特征,替換掉一部分發生的外部條件,看BUG是否發生
流程分析,對BUG對應的流程進行徹底的分析,借由之前的抽特征減特征,進行排除法。
3
作為一名軟件開發人員,經常避免不了的就是發現各種BUG,既然BUG是避免不了的,那么,作為一個程序員,如何減少我們寫的代碼bug。
1、養成一種好習慣,注釋
曾有網友倜儻:程序員喜歡兩件事:
- 喜歡說別人程序不寫注釋;
- 喜歡自己在程序中不加注釋。
注釋的目的不是為了解釋代碼做什么——可以讀取代碼!注釋目的是為了解釋當你寫代碼的時候是如何思考的。
在寫完代碼的后面兩三個月,可能我們已經不記得上述任何問題的答案,所以,要寫下來。這是無價的,為我們后面解決bug提供了重要的線索。
2、測試優先
我們可以編寫測試的代碼以確保其他代碼可正常工作。
3、程序是寫給別人看的,平時要多注意代碼規范。
比如變量命名,方法命名等。
4、不拋棄,不放棄
如今軟件日新月異地變化和發展。人的精力畢竟有限,我們不可能掌握所有。事實上,當我們準備放棄的那一刻,我們依然沒有資格說我們已經懂得夠多。只有不斷學習,不斷拓寬你的視野,才能提高我們的競爭力。防守是最好的進攻。