讓我掉下眼淚的 不止內(nèi)存泄漏

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

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

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

          發(fā)布總是在半夜 回滾是永遠的愁

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

          作為程序員,以上這些場景你一定都經(jīng)歷過。今天就來聊聊如何快速定位問題。

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

          背景

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

          *
          案例1:App首頁白屏。

          詳細描述:App、H5、小程序首頁都是由同一個后端接口負責提供數(shù)據(jù)。測試大佬反饋說,App首頁白屏了。

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

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

          *
          案例3:優(yōu)惠券領(lǐng)取不了了,彈窗顯示“領(lǐng)取失敗,該優(yōu)惠券僅限新人領(lǐng)取”!


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

          *
          案例4:某用戶購買的xx評測專欄的評測課無法打開。


          詳細描述:評測專欄是我司的一個特色專欄,在這個專欄中,有一節(jié)評測課。評測課就是讓用戶做在線試題,用戶先進行測試,了解自己狀態(tài)。測試完成之后,系統(tǒng)會根據(jù)用戶的答題情況,向用戶推薦合適的專欄課程表,供用戶學習。

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

          復現(xiàn)問題

          當測試大佬反饋問題時,首先要做的就是復現(xiàn)問題
          。如果問題能復現(xiàn),好嘛,已經(jīng)解決一大半了,作為開發(fā),我覺得還是要有這個自信的。能復現(xiàn)的問題,那就一定能修復(修復成本有高低,這個不在本文討論范圍之內(nèi)哦),實在是找不到Bug代碼,我可以一行一行的調(diào)試嘛!所以,
          遇到問題不用慌,淡定淡定。

          那如果問題不能復現(xiàn)呢?怎么辦?

          這個時候,我一般的做法是去查日志。如果日志中有錯誤信息,我們便可以根據(jù)錯誤信息快速定位到Bug所在的具體代碼
          。那如果這個時候也沒有錯誤信息呢?嗯...我想想,好像也沒有別的辦法了。問題不能復現(xiàn),程序沒有報錯,那只能麻煩測試大佬再多測試一下,看看能不能復現(xiàn)吧。

          快速定位

          經(jīng)過上一步驟,我們已經(jīng)可以讓Bug復現(xiàn)了,那接下來要做的就是快速定位??焖俣ㄎ唬慷ㄎ皇裁茨??

          一般公司項目開發(fā),都會分后端開發(fā)、前端開發(fā)、APP開發(fā),這里說的快速定位,指的就是要快速定位到是三端中的哪一端出的問題。

          那如何快速定位呢?


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

          舉個栗:

          案例1:App首頁白屏。

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


          這兩個問題反饋過來的時候,我打開app、H5、小程序都看了一下,發(fā)現(xiàn):只有app的首頁白屏了,H5和小程序的首頁都是好的,考慮到App、H5、小程序首頁都是由同一個后端接口負責提供數(shù)據(jù),那這個問題大概率是app那邊的問題,于是請app開發(fā)同事幫忙定位一下問題。

          而app、H5、小程序這三端都出現(xiàn)了商品會員價顯示不正確這個問題,于是我斷定,這大概率是一個后端的邏輯問題。三端都寫錯代碼取錯了會員價這個概率應(yīng)該不大。

          案例4:某用戶購買的xx評測專欄的評測課無法打開。


          這是一個產(chǎn)品反饋的線上問題,由測試大佬提到開發(fā)這邊的時候,測試大佬當時并不能復現(xiàn)。由于評測課的特殊性,它是需要由用戶做題輸入到系統(tǒng),系統(tǒng)解析用戶答題情況,然后做系統(tǒng)推薦。

          這是一個典型的與用戶行為數(shù)據(jù)相關(guān)的問題,可能只有具有某些特性行為、數(shù)據(jù)的用戶才會遇到。遇到這種問題,測試也是很難復現(xiàn)的??梢圆橐幌氯罩荆纯从袥]有報錯信息。

          當時遇到這個問題的時候,由于項目接入了sentry平臺,開發(fā)這邊也是收到了系統(tǒng)異常報錯的郵件提醒,很快速的就找到了原因。

          定位接口

          好,經(jīng)過上面幾輪的大致判斷,這大概率就是一個后端Bug了?,F(xiàn)在我們需要做的就是,快速定位到出問題的具體接口
          。如果移動端,就用Charles抓個包,H5端就直接打開Chrome控制臺。

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

          舉栗子

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

          因為app、H5、小程序三端使用的是同一個接口來獲取商品相關(guān)信息,我會優(yōu)先在H5平臺調(diào)試,畢竟不用開Charles,方便嘛~~




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


          這里就分享一個我的經(jīng)驗吧,不一定適合所有場景。就拿這個案例來說:打開商品詳情頁,打開控制臺?;谖覍ο到y(tǒng)的整體了解,我確信一定會有一個接口返回商品的會員價,具體哪個接口我也不知道。


          好,這個時候怎么辦呢?猜接口!當然了,也不是亂猜。獲取商品會員價,那這個接口大概率需要前端傳給后端一個商品id,那商品id在哪里呢?商品id一般都會出現(xiàn)在當前頁面的URL里。于是,在控制臺的filter框中(圖中已標紅)輸入商品id。這個時候已經(jīng)可以過濾掉大部分的請求了。


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

          定位代碼

          定位到接口之后,我們就可以準備看代碼,修Bug啦!

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

          舉栗子:

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

          經(jīng)過我們之前一頓猛如虎的操作,終于定位到了問題。
          //接口返回數(shù)據(jù) { "price":9900, "discountPrice":8900, "vipPrice":0, }
          會員價顯示不正確,也就是"vipPrice":0這個字段有問題。

          打開代碼,找到該接口對應(yīng)Controller,找到該Controller返回的VO,找到VO中的vipPrice字段的setter方法,鼠標右鍵find
          Usages。恭喜你,這個時候你已經(jīng)找到了這個vipPrice的值是在哪一行被設(shè)置的了,將重點聚焦于此即可,Bug就在這個代碼附近了??匆幌逻@個vipPrice
          的值是怎么計算出來的,是不是計算邏輯寫錯了。

          如果這個時候,很不幸Controller的VO是通過BeanUtils這些工具類將屬性映射過去的,那么你運行find Usages
          可能就找不到屬性是在哪里被設(shè)置的了。唉,寫代碼時用的爽,出問題時淚汪汪。那只能查這個VO是在哪里被用到了,然后去代碼里查了。

          案例3:案例3:優(yōu)惠券領(lǐng)取不了了,彈窗顯示“領(lǐng)取失敗,該優(yōu)惠券僅限新人領(lǐng)取”!

          如果“領(lǐng)取失敗,該優(yōu)惠券僅限新人領(lǐng)取”這個文案,是你的接口返回給客戶端的,那么,這個時候你要做的就是,IDEA全局查找這個關(guān)鍵詞。



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

          修復問題

          既然已經(jīng)定位到具體的代碼了,那么就可以進行問題修復了。這個時候就要看個人經(jīng)驗啦,有經(jīng)驗的程序員可能一眼就能看出來問題。

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

          * 學會聚焦。整個service方法的邏輯代碼可能很多,但是像”會員價顯示不正確“這種問題,一定是之和計算會員價相關(guān),你只需要聚焦這一塊的邏輯即可。
          * 學會debug
          。有些情況下,即使發(fā)現(xiàn)了問題代碼,卻還是發(fā)現(xiàn)不了問題(比如說,報錯日志說第xx行有問題,打開xx行一看,懵,這里怎么可能會有問題呢)。這個時候,你應(yīng)該嘗試去debug代碼,通過運行時debug,分析數(shù)據(jù),來發(fā)現(xiàn)問題。
          如何避免

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

          而我們要做的,一是要盡可能的減少Bug,避免問題重復出現(xiàn);二是要遇到問題,快速修復。千萬不要害怕Bug,更不要擔心出Bug就不敢寫代碼。

          簡單總結(jié)

          最后的最后,就來做個簡單總結(jié):

          *
          遇到問題不要慌,只要能復現(xiàn),就能修復

          *
          APP、H5、小程序三端快速定位,找到問題負責人

          *
          定位問題接口,找到問題代碼

          * 如何快速定位問題接口
          * 如何快速定位問題代碼
          *
          debug then fix

          *
          總結(jié)經(jīng)驗,避免再犯

          歡迎關(guān)注公眾號:


          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                国产白丝一区二区三区 | 有肏屄的视频吗 | 欧美日韩色情 | 久久国产精品免费 | 我看黄色片子 |