1. 程式人生 > >經驗分享:程式設計師如何快速定位問題(BUG)

經驗分享:程式設計師如何快速定位問題(BUG)

讓我掉下眼淚的 不止記憶體洩漏

讓我夜夜不眠的 不止你的需求

明天還要改多久 你攥著我的手

讓我感到為難的 是善變的需求

釋出總是在半夜 回滾是永遠的愁

錯誤(Bug)隨時的暴漏 困擾著我心頭

作為程式設計師,以上這些場景你一定都經歷過。今天就來聊聊如何快速定位問題。

先劃重點,下文所寫都是一家之言,本人工作經驗不多,語言表達能力有限,如果寫的不好,還望輕噴。另外,本文所講都是站在Java後端開發者的角度。

背景

下文所講內容,都會圍繞以下幾個真實案例來做舉例分析,先描述一下具體案例:

  • 案例1:App首頁白屏。

    詳細描述:App、H5、小程式首頁都是由同一個後端介面負責提供資料。測試大佬反饋說,App首頁白屏了。

  • 案例2:小程式商品會員價顯示不正確。

    詳細描述:測試大佬反饋,某商品會員價顯示不正確,客戶端展示會員價為0元。為什麼會員價0元是不正確的呢?因為我們在系統中做了限制,會員價必須大於0元。

  • 案例3:優惠券領取不了了,彈窗顯示“領取失敗,該優惠券僅限新人領取”!

    詳細描述:這是一個領取優惠券的功能。使用者可以通過該活動領取優惠券。使用者在領取優惠券時,頁面彈窗提示:”領取失敗,該優惠券僅限新人領取“。同時,測試大佬反饋說,這個賬號就是一個新人賬號,是剛剛註冊的使用者。

  • 案例4:某使用者購買的xx評測專欄的評測課無法開啟。

    詳細描述:評測專欄是我司的一個特色專欄,在這個專欄中,有一節評測課。評測課就是讓使用者做線上試題,使用者先進行測試,瞭解自己狀態。測試完成之後,系統會根據使用者的答題情況,向用戶推薦合適的專欄課程表,供使用者學習。

背景交代完畢,那如果是你,在遇到這幾個問題的時候,會怎麼處理呢?

復現問題

當測試大佬反饋問題時,首先要做的就是復現問題。如果問題能復現,好嘛,已經解決一大半了,作為開發,我覺得還是要有這個自信的。能復現的問題,那就一定能修復(修復成本有高低,這個不在本文討論範圍之內哦),實在是找不到Bug程式碼,我可以一行一行的除錯嘛!所以,遇到問題不用慌,淡定淡定。

那如果問題不能復現呢?怎麼辦?

這個時候,我一般的做法是去查日誌。如果日誌中有錯誤資訊,我們便可以根據錯誤資訊快速定位到Bug所在的具體程式碼。那如果這個時候也沒有錯誤資訊呢?嗯...我想想,好像也沒有別的辦法了。問題不能復現,程式沒有報錯,那隻能麻煩測試大佬再多測試一下,看看能不能復現吧。

快速定位

經過上一步驟,我們已經可以讓Bug復現了,那接下來要做的就是快速定位。快速定位?定位什麼呢?

一般公司專案開發,都會分後端開發、前端開發、APP開發,這裡說的快速定位,指的就是要快速定位到是三端中的哪一端出的問題。

那如何快速定位呢?

如果你熟悉這個功能的整體流程,清楚整個功能會經歷哪些步驟、哪些模組,這對你去快速定位問題是非常有幫助的。當然,也有一些監控工具可以來幫助開發者做快速定位,幫助開發瞭解整個流程。例如:sentry、skywalking等。

舉個慄

案例1:App首頁白屏。

案例2:小程式商品會員價顯示不正確

這兩個問題反饋過來的時候,我開啟app、H5、小程式都看了一下,發現:只有app的首頁白屏了,H5和小程式的首頁都是好的,考慮到App、H5、小程式首頁都是由同一個後端介面負責提供資料,那這個問題大概率是app那邊的問題,於是請app開發同事幫忙定位一下問題。

而app、H5、小程式這三端都出現了商品會員價顯示不正確這個問題,於是我斷定,這大概率是一個後端的邏輯問題。三端都寫錯程式碼取錯了會員價這個概率應該不大。

案例4:某使用者購買的xx評測專欄的評測課無法開啟。

這是一個產品反饋的線上問題,由測試大佬提到開發這邊的時候,測試大佬當時並不能復現。由於評測課的特殊性,它是需要由使用者做題輸入到系統,系統解析使用者答題情況,然後做系統推薦。

這是一個典型的與使用者行為資料相關的問題,可能只有具有某些特性行為、資料的使用者才會遇到。遇到這種問題,測試也是很難復現的。可以查一下日誌,看看有沒有報錯資訊。

當時遇到這個問題的時候,由於專案接入了sentry平臺,開發這邊也是收到了系統異常報錯的郵件提醒,很快速的就找到了原因。

定位介面

好,經過上面幾輪的大致判斷,這大概率就是一個後端Bug了。現在我們需要做的就是,快速定位到出問題的具體介面。如果移動端,就用Charles抓個包,H5端就直接開啟Chrome控制檯。

so easy~~ 媽媽再也不用擔心我找不到介面啦~~ 當然了,在實際操作過程中,可能並沒有這麼簡單。前端渲染頁面可能請求了N多個介面。

舉栗子

案例2:小程式商品會員價顯示不正確。

因為app、H5、小程式三端使用的是同一個介面來獲取商品相關資訊,我會優先在H5平臺除錯,畢竟不用開Charles,方便嘛~~

遇到問題,快速響應和解決才是重點,特別的線上問題。所以有時候這個功能可能不是你開發的,那麼如何在這麼多請求中如何快速定位找個具體介面呢?這就要靠你的經驗和聰明的大腦了。

這裡就分享一個我的經驗吧,不一定適合所有場景。就拿這個案例來說:開啟商品詳情頁,開啟控制檯。基於我對系統的整體瞭解,我確信一定會有一個介面返回商品的會員價,具體哪個介面我也不知道。

好,這個時候怎麼辦呢?猜介面!當然了,也不是亂猜。獲取商品會員價,那這個介面大概率需要前端傳給後端一個商品id,那商品id在哪裡呢?商品id一般都會出現在當前頁面的URL裡。於是,在控制檯的filter框中(圖中已標紅)輸入商品id。這個時候已經可以過濾掉大部分的請求了。

接下來你要做的,還是猜!看看剩下這些請求地址名稱,猜一下他的作用;看看介面返回的欄位名稱,有沒有名稱像“會員價”欄位,有沒有返回值和前端顯示的會員價一樣的欄位。最後,經過大膽猜想之後,我們要做的就是小心求證,確認我們定位的介面是否正確。

定位程式碼

定位到介面之後,我們就可以準備看程式碼,修Bug啦!

不知道你有沒有遇到過這樣的情況。開啟程式碼,一眼望去,這個程式碼這麼長,而且之前也不是我寫的,我該怎麼辦呢?下面我們就來講一下如何來快速定位Bug程式碼。

舉栗子:

案例2:小程式商品會員價顯示不正確。

經過我們之前一頓猛如虎的操作,終於定位到了問題。

//介面返回資料
{
    "price":9900,
    "discountPrice":8900,
    "vipPrice":0,
}

會員價顯示不正確,也就是"vipPrice":0這個欄位有問題。

開啟程式碼,找到該介面對應Controller,找到該Controller返回的VO,找到VO中的vipPrice欄位的setter方法,滑鼠右鍵find Usages。恭喜你,這個時候你已經找到了這個vipPrice的值是在哪一行被設定的了,將重點聚焦於此即可,Bug就在這個程式碼附近了。看一下這個vipPrice的值是怎麼計算出來的,是不是計算邏輯寫錯了。

如果這個時候,很不幸Controller的VO是通過BeanUtils這些工具類將屬性對映過去的,那麼你執行find Usages可能就找不到屬性是在哪裡被設定的了。唉,寫程式碼時用的爽,出問題時淚汪汪。那隻能查這個VO是在哪裡被用到了,然後去程式碼裡查了。

案例3:案例3:優惠券領取不了了,彈窗顯示“領取失敗,該優惠券僅限新人領取”!

如果“領取失敗,該優惠券僅限新人領取”這個文案,是你的介面返回給客戶端的,那麼,這個時候你要做的就是,IDEA全域性查詢這個關鍵詞。

哈哈哈,恭喜你,快速定位了,在PayUserRuleChecker的第51行,是不是很簡單?

修復問題

既然已經定位到具體的程式碼了,那麼就可以進行問題修復了。這個時候就要看個人經驗啦,有經驗的程式設計師可能一眼就能看出來問題。

這裡列舉一些需要注意的點:

  • 學會聚焦。整個service方法的邏輯程式碼可能很多,但是像”會員價顯示不正確“這種問題,一定是之和計算會員價相關,你只需要聚焦這一塊的邏輯即可。
  • 學會debug。有些情況下,即使發現了問題程式碼,卻還是發現不了問題(比如說,報錯日誌說第xx行有問題,開啟xx行一看,懵,這裡怎麼可能會有問題呢)。這個時候,你應該嘗試去debug程式碼,通過執行時debug,分析資料,來發現問題。

如何避免

借用測試大佬的一句話:"沒bug是不可能的,這輩子都不可能沒bug的"。

而我們要做的,一是要儘可能的減少Bug,避免問題重複出現;二是要遇到問題,快速修復。千萬不要害怕Bug,更不要擔心出Bug就不敢寫程式碼。

簡單總結

最後的最後,就來做個簡單總結:

  1. 遇到問題不要慌,只要能復現,就能修復

  2. APP、H5、小程式三端快速定位,找到問題負責人

  3. 定位問題介面,找到問題程式碼

    • 如何快速定位問題介面
    • 如何快速定位問題程式碼
  4. debug then fix

  5. 總結經驗,避免再犯


歡迎關注公眾號:

相關推薦

經驗分享程式設計師如何快速定位問題(BUG)

讓我掉下眼淚的 不止記憶體洩漏 讓我夜夜不眠的 不止你的需求 明天還要改多久 你攥著我的手 讓我感到為難的 是善變的需求 釋出總是在半夜 回滾是永遠的愁 錯誤(Bug)隨時的暴漏 困擾著我心頭 作為程式設計師,以上這些場景你一定都經歷過。今天就來聊聊如何快速定位問題。 先劃重點,下文所寫都是一家之言,本人

【今日薦文】三十五年經驗分享程式設計師進階八法

如果你的目標僅僅是提高自己,那麼很容易實現,但是如果你的目標是成為一個偉大的程式設計師,那麼這就不簡單了。 很多人都願意說,我想變得更好,但是更好是什麼卻很模糊,而且人們也不知道該怎麼樣去做。 時間到了,提高你的程式設計技能,認真+嚴肅,走起! 我在這裡分享八法

前阿里P8Java架構師分享程式設計師應該具備的習慣

1.時刻提醒自己:學習 學習某件事的第一步是承認你不知道。這聽起來很正常,但經驗豐富的程式設計師還記得要真正讓自己承認這一點需要花多長時間。很多電腦科學專業的學生畢業的時候,都有一種很傲慢的態度,就是“我知道最好的”,但其實這只是一種虛張聲勢,他們不知道從哪裡來的自信,就好像他們什麼都知道,並且

阿里架構師經驗分享Java程式設計師5年職業路線指南

  沒有沒免費的Java架構師進階資料領取?(文末提供獲取方法) 阿里架構師技術分享:分散式任務排程系統的實現 阿里架構師技術分享:承載千萬級併發的分散式架構設計思想 阿里架構師技術分享:併發程式設計之手寫阻塞式執行緒安全佇列 阿里架構師技術分享:面試

Java程式設計師經驗分享如何在面試中介紹自己的專案經驗

在面試時,經過寒暄後,一般面試官會讓你介紹專案經驗。常見的問法是:“說下你最近的(或最拿得出手的)一個專案”。 可能不少程式設計師對此沒準備,說起來磕磕巴巴,甚至有人說出專案經驗從時間段或技術等方面和簡歷上的不匹配,這樣就會造成如下的後果: 第一印象就不好了,至少會感覺該候選人表述

阿里資深技術工程師 程式設計師怎樣快速成長?

夢想很美好,現實卻很殘酷 不管是開發、測試、運維,每個技術人員心裡多多少少都有一個成為技術大牛的夢。畢竟“夢想總是要有的,萬一實現了呢”? 但很多阿里的新人,工作後就會發現,夢想是成為大牛,但做的事情看起來跟大牛都不沾邊。 比如,程式設計師說“天天寫業務程式碼

網際網路殘酷裁員一幕程式設計師上午還在改bug,下午就被裁

網際網路的寒冬是否還會再次來臨?網傳某大型問答網際網路企業裁員優化百分之二十,有程式設計師上午還在改bug,下午就被叫到辦公室告知被裁。該公司不少員工紛紛在匿名社群吐槽了這一殘酷事實。有員工甚至表示,上午還在改bug,下午就被裁了。 先讓我們看看一些員工的回覆:我今天走了,哎,正在公交車;

企業喊程式設計師加班修bug程式設計師憑全天待命?我不幹了

在的網際網路行業越來越趨向於利益至上,只要有關公司利益,員工不管怎樣都必須立馬搞定!就有一名程式設計師週末和女友出去玩,沒想到所負責的系統出現了bug,領導要求其馬上修復bug。程式設計師表示週一上班就解決!這時領導就不樂意了,一頓大道理說教,指責該程式設計師作

掏心分享---年輕程式設計師如何快速發展成一名架構師或者技術專家?

做架構設計已經好多年了,前兩天和一位年輕的同事聊天,這位同事從畢業到現在已經工作3年了,是我當前新公司裡面最年輕的Team leader(在我現在新的公司,Team leader職位上的人工作7,8年的佔80%),他現在感到很迷茫,說天天忙於溝通,基本上沒有時間寫程式碼,但是

程式設計師江湖】更多內容請關注微信公眾號:程式設計師江湖 | 收穫BAT頭條網易等大廠研發offer的校招老司機,專注於分享校招乾貨與技術文章。包括但不限於求職準備,網申技巧,筆經面經,簡歷指南等內容。更有Java學習指南,技術面試知識點等方面的文章,偶爾

程式設計師江湖 更多內容請關注微信公眾號:程式設計師江湖 | 收穫BAT頭條網易等大廠研發offer的校招老司機,專注於分享校招乾貨與技術文章。包括但不限於:求職準備,網申技巧,筆經面經,簡歷指南等內容。更有Java...

阿里資深技術專家 程式設計師怎樣快速成長? | 內部乾貨

成為大牛:夢想很美好,現實卻很殘酷 不管是開發、測試、運維,每個技術人員心裡多多少少都有一個成為技術大牛的夢。畢竟“夢想總是要有的,萬一實現了呢”? 但很多阿里的新人,工作後就會發現,夢想是成為大牛,但做的事情看起來跟大牛都不沾邊。 比如,程式設計師說“天天寫業務程式

從零走向專業,騰訊前端大牛經驗分享如何快速學習前端開發?

很多同學想學習WEB前端開發,不過面對大量的前端學習資料(視訊教程、網上教程、書籍)等,不知道從何處下手。 作為一個多年從事前端開發的程式設計師,為了讓新手程式設計師少走點彎路,這裡就分享騰訊前端大牛快速學習前端開發的經驗: 一、前端學習思路 前端學習存在一個普遍的問題:感覺程式語

敏捷結果30天之第二十六天 程式設計師如何修復婚姻的 bug

生物學家 John Medina,也是《大腦規則(Brain Rules)》一書的作者,常常被問及該如何做好一個父親,他的回答出人意料又發人深省。 最近在 Hacker News 上,看到一家網路諮詢公司的創始人 Tyler Ward 在 Relevant 雜誌上發表的這篇《

程式設計師江湖(更多內容請關注微信公眾號:程式設計師江湖 | 收穫BAT頭條網易等大廠研發offer的校招老司機,專注於分享校招乾貨與技術文章。包括但不限於求職準備,網申技巧,筆經面經,簡歷指南等內容。更有Java學習指南,技術面試知識點等方面的文章,偶爾分

Spring與SpringMVC原始碼解析 本專欄主要講解Spring和SpringMVC的實現原理。 Spring是最流行的Java框架之一。本專欄文章主要包括IOC的實現原理分析,AOP的實現原理分析,事務的實現原始碼分析等

趣圖程式設計師調 Bug 的 5 個階段

程式設計師調 Bug 的 5 個階段↓↓↓英文:Jeff Lofvers漢化:[email

前阿里P7程式設計師分享九年開發經驗——送給Java程式設計師的職業規劃

作為一名程式設計師你們應該要知道:初級程式設計師:做一些靜態的介面;程式設計師:做一些增刪改查的小模組;中級程式設計師:做邏輯較複雜的模組;高階程式設計師:做核心模組;專案經理:系統的整體架構;部門經理:多專案的管理;總裁:多部門以及企業的發展規劃。那麼你想成為這些程式設計師

程式設計師快速處理程式碼bug的5大技巧,二分除錯大法是必備武器!

從積極的方面來看,程式碼bug是絕佳的學習機會。 w3cschool給小夥伴們分享5個處理bug技巧: 0、二分法定位   二分法定位是比較常用的bug處理技巧。   通過二分法,即把程式邏輯一點點註釋掉,不斷地進行排錯,完全能把問題可能出現的範圍縮小。   二分除錯大法每次遇到棘手的bug,基本上都能解決,

風雨20年我所積累的20條程式設計經驗--一個老程式設計師經驗總結

  編者按:原文作者喬納森·丹尼可(Jonathan Danylko)是一位自由職業的web架構師和程式設計師,程式設計經驗已超過20年,涉足領域有電子商務、生物技術、房地產、醫療、保險和公用事業。正如喬納森在文中所言,本文適合剛畢業的大學生和剛入門的程式設計師。如果你已是高

經驗分享嵌入式系統學習步驟

淩陽教育 嵌入式 嵌入式學習的朋友們,想要學好嵌入式嗎?我們該如何學好嵌入式?看看淩陽教育的老師為大家帶來的一些方便大家了解的嵌入式學習路線與步驟: 1、Linux 基礎 安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠

經驗分享三套簡單的迷宮地圖生成方案

最好 .html ref 展示 方便 灰色 bob 創建 特點 轉自:http://www.gameres.com/754927.html 概述:文章基於一種基礎的地圖,來討論三套不同的地圖生成方案。 文章不會出現跟代碼相關的內容,會以較為通俗的語句和不少簡單的示