一般來說bug大多數存在于三個模塊:
一、前臺界面,包括界面的顯示,兼容性,數據提交的判斷,頁面的跳轉等等,這些bug基本都是一眼可見的,不太需要定位,當然也不排除一些特殊情況,本身數據傳過來的時候就有問題,所以顯示會出問題的情況。
二、后臺程序,包括前臺調用的接口,中間層緩存和轉發數據,定時任務腳本異步處理數據,程序之間的關聯調用等等,而這些bug往往都是不可見的,可能在功能上體現,也有可能隱藏在深處不易發現,這時候就要通過一些輔助工具以及人工的判斷去定位了。
三、數據庫,包括表中缺少字段,字段定義錯誤,字段長度限制,數據重復等等,這些bug需要通過數據庫工具以及一些基本的數據庫查詢語句來定位,當然前提是要對每個表,每個字段提前進行了解.
排除一些顯而易見以及可以直接判斷的bug,很多不容易判斷的bug該如何定位呢?
這就需要借助一些工具來一個個排除了,也許還是會覺得云里霧里,那么就舉一個常見的例子來講解:
比如在提交正常的表單發生了錯誤導致提交失敗,那么如何進行定位呢?
1、首先要打開抓包工具,然后提交正常的表單,看是調用后臺接口的時候傳的參數是否和之前填寫的一致,比如表單填的是數字,而接口需要傳的是字符串,那么就是前臺傳的問題,如果一致說明不是前臺問題,繼續往下查。
2、需要一方面繼續看抓包的數據,接口返回的錯誤是什么,如果能明確看到錯誤原因的消息,也就定位到問題,如果不能看到則要繼續連接測試服務器查看日志,看是程序處理到哪一步有問題,
3、如果從程序的角度發現沒問題,那繼續往下查,看是否連接的數據庫不對,或是超過數據庫字段限制的長度等等。就這樣隨著程序執行的軌跡一步一步去排查,最終基本都能定位到問題。
案例1: 有一個提現余額的功能,實際提現金額到賬了,但余額卻沒有扣除。
首先要對提現功能做一個拆解:
1、前臺發起提現申請
2、后臺接受申請后凍結提現金額
3、定時任務處理提現(調用第三方支付轉賬接口)
4、接受到轉賬成功回調
5、將余額減去提現凍結的金額
6、前臺余額展示提現后的余額
因為實際提現金額到賬了,那么基本可以排除3和1了,然后覺得最有可能出問題的是4.就是沒有收到轉賬成功的回調,可以查看后臺日志是否收到回調。如果沒收到回調,那么基本就是回調地址不對或者網絡超時等錯誤,問題就定位到了。
如果收到回調了,那么最有可能的就是余額未扣除提現凍結金額,那么就是2和5.對于2來說可以查數據庫是否提現金額被凍結。
如果未凍結那就是步驟2出錯了,如果凍結了,繼續查5余額是否扣除了提現凍結金額(這個可能需要開發配合查程序邏輯了)。
如果5也沒有問題,那么剩下的可能性只有6了,再對6進行驗證。如果還沒問題可能就是其他異常導致的,需要更深入去思考有沒有遺漏的點或者數據庫上的特殊性導致的。
案例2: 有一個BS架構的系統,銷售統計報表中的金額不正確?這個時候我們怎么通過流程分析法去精確找到問題的根因呢?
1、分析金額的計算方法
2、分析金額是在那個地方生成的?前臺通過js自動計算出來的還是服務器端就生成的?
3、通過抓包工具(如fiddler)檢查瀏覽器請求的參數和返回的結果是否正確?
4、如果這些都沒有問題,檢查數據庫中和金額相關的字段的存儲數據是否正確?
5、如果金額不正確,說明我們的問題可能不是報表統計,而是其它地方出現了這個問題
6、如果金額正確,說明服務器內部運算可能出問題了,我們可以檢查服務器的日志,查看是否有錯誤
以上bug定位方式期望能夠給大家在工作帶來收獲!