縮短MTTR之 快速定位解決Bug

前文《放棄“千行代碼缺陷率”吧?》說明了為什么MTTR(平均缺陷修復時間)是個重要的指標。那么如何才能夠縮短MTTR,使得整個工程團隊的價值得到提升呢。今后將會就此話題逐步展開,分解到很多具體的工程實踐上,以期望給諸位提供參考。

一、StackTrace

??? 很多編程語言的運行時,都會提供出錯棧消息,最典型的就是Java的StackTrace。
??? 當Java代碼執行的時候發生了Exception,后臺會生成StackTrace。如果打印出來,就可以明確告知第幾行代碼出現了什么異常,那么就可以直接定位到該問題上。并且迅速解決掉。

?? 發生問題的點不一定是問題的根源點,但是問題的發生點清楚了,尋找根源點也就容易的多。

? StackTrace 有Caused By,可能還會有進一步的Caused By一直到RootCause,只要掌握了快速閱讀StackTrace的技巧,解決此類問題的速度還是可以得到有效的提升的。

?小貼士:我見過太多的程序員有“英語恐懼癥”,因為StackTrace信息都是以英文形式展示的。而程序員由于自身英語能力不行,所以選擇了跳過這段最有價值的信息。所以,程序員們,最起碼看到這里的英文的時候要自己閱讀一下。實在看不明白,也可以搜索一下。

二、Log

?? 代碼的錯誤也不一定就只會以Exception的形式出現。比如計算錯誤,邏輯錯誤,并不表現為系統的異常。

?? 一段電線損壞了怎么定位電線哪里有故障。一個常見的有效辦法是:二分法。
從中間的位置檢查,如果上半段沒有問題,那問題就在下半段。然后依次遞進,直到最后定位問題所在,就可以動手修復了。


同樣的方法可以應用于軟件的Bug定位。

首先,要確保代碼是可以分割的。也就是說,分層,分模塊等解耦合的方法都要用上了。這樣就可以很好地插入檢測點。監測點插入之后可以把代碼運行一下看看,看代碼運行到哪個位置停頓了,或者出錯了,這樣就比較容易的知道代碼是如何被執行的了。

那么為什么不用Debug模式來解決問題呢?

首先,Debug模式需要暫停代碼的執行,這個時候就要來大量記憶代碼運行的位置,各種變量的含義,變量的值(Watch窗口只能看到當前類的變量),代碼執行路徑。如果步驟數太多,比如經歷大量循環的時候要不停的點擊按鈕,造成疲勞感。這個過程是耗費很多時間,而且效果不佳的。

其次,Debug模式往往對于多線程無能力為。因為暫停的時候可能背后的某個線程已經在運行了。或者無法達到和真實情況基本一致的效果。導致Debug失效。

再次,對于回調函數Debug模式的表現也差強人意。

三、提高代碼可讀性和可維護性

當然, 并不是所有的Bug都這么容易的被解決掉,因為想要這樣解決Bug得有一個大的前提,就是代碼的結構非常清晰。如果代碼的結構很混亂,耦合度很高,那么就不要指望什么高效的解決問題的方法了,首先要做的就是解耦代碼。如果解耦實在困難,也許"重寫"是個成本更低,效果更好的方法。

而可維護性指標直接影響了代碼的缺陷修復速度。
高解耦的代碼,在某個模塊出現問題的時候,基本上就只會影響到該模塊,并且根據出錯的業務邏輯,可以直接快速定位到xxx類xxx方法。而且由于方法本身長度不大,會很容易的修復。

如何提高代碼的可讀性和可維護性呢。
1. 遵守編程的幾個基本原則。
??? 單一職責原則?
??? 開放封閉原則?
??? 里氏代換原則?
??? 接口分離原則?
??? 依賴倒置原則?
??? 迪米特法則
??? DRY原則?

2. 使用業已被廣泛證明的了模式
??? 23種設計模式及實例

3. 設立團隊的編碼規范
??? 很多常見的命名規則都是已經成為事實標準了,編碼的時候需要遵照這些事實標準,那么團隊在解決問題的時候就會形成一個共識。比如:getter/setter就是獲取和設置值的;大小寫的寫法;一些術語的用法;等等不一而足。

???? 但是,有些時候,比如關于一個數組的長度,不同的語言就會有不同的用法。
???? 有的叫做length,有的叫做size,有的叫做count。這些就提高一下兼容性吧。

四、建立有效的Bug Fix知識庫

? ? ?? 當解決很多常見的Bug之后,Bug應該如何解決基本上應該都有一定的規律可以掌握了。建立起來如何解決常見Bug的知識庫,不僅僅是對自己,對整個團隊來說,也都是有價值的知識庫。當新人加入的時候,快速融入團隊,解決問題也就不是障礙了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

推薦閱讀更多精彩內容