定位問題大致思路:用戶層面問題-->web頁面/軟件界面-->中間件-->后端服務(wù)-->代碼-->數(shù)據(jù)庫
1.用戶層面問題:用戶自己的環(huán)境問題或操作問題,比如環(huán)境不通或者操作不正確。這種問題一般不是bug,如果要考慮構(gòu)建更加健壯的軟件,那么可以根據(jù)實(shí)際情況來決定要不要處理。
2.web頁面問題:這類問題一般通過觀察以及利用一些常識(shí)可發(fā)現(xiàn),比如樣式問題一般是css問題,交互問題一般是是js的問題,文本問題一般是HTML的問題。
3.web頁面操作后,比如發(fā)出一個(gè)請(qǐng)求,可能會(huì)進(jìn)入中間件這個(gè)層面。這里的中間件是廣義上的,比如LVS、CDN、各種緩存服務(wù)器等等。
4.后端服務(wù)層:服務(wù)會(huì)轉(zhuǎn)發(fā)到真正的后端服務(wù)層,WEB服務(wù)器、應(yīng)用服務(wù)器比如nginx、tomcat會(huì)收到請(qǐng)求。如果發(fā)現(xiàn)內(nèi)存溢出,那么就可能定位到是Tomcat配置問題;如果請(qǐng)求返回404,也可能是nginx配置不當(dāng)。這個(gè)時(shí)候可能會(huì)遇到一些環(huán)境問題,比如測試環(huán)境沒有問題,到線上就有了,很可能是環(huán)境原因,比如jdk版本不同、Tomcat版本不同、jar包版本不同等等。
5.最后一層是數(shù)據(jù)庫:也可能會(huì)有代碼沒有問題,不代表軟件沒有問題。數(shù)據(jù)庫層面各種問題,比如字段的約束問題等。假如一個(gè)文本框的前端校驗(yàn)和接口校驗(yàn)的文本長度是50,但數(shù)據(jù)表字段設(shè)定的是VARCHAR(30),那么在存數(shù)據(jù)的時(shí)候肯定會(huì)報(bào)錯(cuò)。再比如測試環(huán)境沒有,到線上卻有了,也可能是數(shù)據(jù)庫版本不同導(dǎo)致的。
有的問題會(huì)直接暴露在用戶面前,有些可能需要分析日志。
1.狀態(tài)碼查看4xx狀態(tài)碼一般表示客戶端問題(當(dāng)然也有可能是服務(wù)器端配置問題),比如401要看一下是否帶了正確的身份驗(yàn)證信息;403看下是否有訪問權(quán)限;404看下對(duì)應(yīng)的URL是否真實(shí)存在。
2.5xx一般表示服務(wù)器端問題,500服務(wù)器內(nèi)部錯(cuò)誤,需要配合服務(wù)器log進(jìn)行定位,502可能是服務(wù)器掛了,503可能是網(wǎng)絡(luò)過載導(dǎo)致,504可能是程序執(zhí)行時(shí)間過長導(dǎo)致。
3.看服務(wù)器日志
如果發(fā)生5xx問題,或者檢查后端接口執(zhí)行的sql是否正確,最常見的排查方法就是去看服務(wù)器日志,比如Tomcat日志,開發(fā)人員一般會(huì)打印出關(guān)鍵信息和報(bào)錯(cuò)信息,從而找到問題所在。
5.接口的請(qǐng)求和返回以及js執(zhí)行是否報(bào)錯(cuò)。如果接口返回了200,就一定正常嗎?
假設(shè)要測試一個(gè)翻頁控件,翻到第二頁的時(shí)候,發(fā)現(xiàn)內(nèi)容和第一頁完全一樣,接口請(qǐng)求返回的是200,該怎么排查?
這個(gè)時(shí)候就要看前端發(fā)送的參數(shù)正不正常,后端返回的內(nèi)容正不正常,即接口的請(qǐng)求和返回。
請(qǐng)求URL不正確是前端bug,傳參不正確是前端bug,響應(yīng)內(nèi)容不正確則是后端bug,如果是響應(yīng)內(nèi)容不正確的后端問題,那就要繼續(xù)深挖,是接口吐數(shù)據(jù)時(shí)出錯(cuò)還是數(shù)據(jù)庫中的數(shù)據(jù)就錯(cuò)了,還是緩存中的數(shù)據(jù)錯(cuò)了(如果用到緩存的話),經(jīng)常見到后端開發(fā)人員有的負(fù)責(zé)接口,有的負(fù)責(zé)寫入數(shù)據(jù)庫,有的負(fù)責(zé)緩存。
6.看需求文檔