技術(shù)分享 | Bug定位方法

通常情況下 Bug 分為四個(gè)類型,分別是功能、性能、安全和專項(xiàng)質(zhì)量。功能級(jí)別關(guān)注于業(yè)務(wù)流程是否正確。性能級(jí)別關(guān)注于業(yè)務(wù)流程是否順暢。安全方面判斷是否存在漏洞,是否符合安全標(biāo)準(zhǔn)與規(guī)范。專項(xiàng)質(zhì)量通常關(guān)注于用戶體驗(yàn) UX、兼容性、穩(wěn)定性和可靠性。
為什么需要掌握bug定位
軟件測(cè)試人員的首要任務(wù)就是發(fā)現(xiàn) Bug ,發(fā)現(xiàn)之后提交 Bug 給開發(fā)人員進(jìn)行修復(fù)。掌握 Bug 定位可以在提交 Bug 時(shí)追加更多有用信息,方便研發(fā)更快解決問(wèn)題。通過(guò)分析 Bug 的形成原因,更有效率的進(jìn)行溯源并建立特征進(jìn)行批量追蹤。
bug表現(xiàn)層
條件:測(cè)試數(shù)據(jù);
過(guò)程:測(cè)試步驟;
結(jié)果:測(cè)試結(jié)果。

技術(shù)架構(gòu)層次
軟件從技術(shù)架構(gòu)層次分析一般分為三層,即視圖層 View、控制層 Controller 和模型層 Model。而 web 和 app 在具體的層次關(guān)注的技術(shù)方向也是不同的,具體如下:
視圖層 View:
web:UI HTML CSS;
app:activity view;
控制層 Controller
web:chrome、devtool;
app:dalvik art objectc-runtime;
模型層 Model:
模型的傳遞方式:http tcp rpc 串口;
模型的形式:json xml binary;
模型定義:schema。

MVC三層分析法
Bug 的定位往往也會(huì)依照軟件技術(shù)架構(gòu)層次采用 MVC 三層分析方法,分析 View 層、Controller 層和 Model 層的運(yùn)行平臺(tái)、應(yīng)用調(diào)試機(jī)制和鏈路。
View 層常見(jiàn)的問(wèn)題是 UI(User Interface)用戶界面和 UE(User Experience)用戶體驗(yàn)。目前常采用人工測(cè)試和自動(dòng)化測(cè)試,通過(guò)人工校驗(yàn)為主自動(dòng)化校驗(yàn)為輔的方式檢驗(yàn)界面交互的準(zhǔn)確性以及用戶體驗(yàn)感受。此外利用 UI 的 Diff 對(duì)比分析界面變化,定位更深層次的問(wèn)題。
Controller 層通過(guò)平臺(tái)自主提供的日志(log)以及應(yīng)用程序本身提供的應(yīng)用調(diào)試日志(debug trace hook profile)分析代碼層次的邏輯問(wèn)題。
Model 層根據(jù)運(yùn)行平臺(tái)的 log、app 調(diào)試機(jī)制以及鏈路來(lái)具體分析問(wèn)題。
web bug 分析方法
界面展示主要依賴于 html、css、js,可以使用 chrome 開發(fā)者工具的 elements 和 style 兩個(gè)板塊來(lái)分析,elenments 可以展示具體控件,控件格式通過(guò) style 來(lái)確定,由此來(lái)判斷是否是樣式、布局或輸出方面的問(wèn)題。

界面展示是 javascript 根據(jù)操作流程對(duì)代碼進(jìn)行修改的結(jié)果,底層邏輯的錯(cuò)誤在 console 板塊會(huì)展示出詳細(xì)的出錯(cuò)信息。而 source 模塊可以對(duì)錯(cuò)誤進(jìn)行定位通過(guò) debug 分析問(wèn)題的上下文,找到代碼問(wèn)題的根源所在。

基于運(yùn)行平臺(tái)的 log,例如 chrome 的 network 模塊分析請(qǐng)求方式和數(shù)據(jù)的具體情況。鏈路分析使用代理工具 proxy,常用的有 fiddler、charles 和 mitmproxy 以及網(wǎng)絡(luò)層的嗅探,常用的有 tcpdump 和 wireshark。

app bug 分析方法
app 的 UI 界面交互和 UX/UE 用戶體驗(yàn)?zāi)壳俺S玫氖侨斯ばr?yàn)的方式,以自動(dòng)化作為輔助工具以及 UI Diff 的方式分析,嘗試發(fā)現(xiàn)界面中存在的問(wèn)題,其中人工測(cè)試能夠發(fā)現(xiàn)未知特征的 bug,自動(dòng)化測(cè)試可以斷言常用功能是否正常,通過(guò) UI Diff 可以發(fā)現(xiàn)界面結(jié)構(gòu)細(xì)節(jié)的問(wèn)題。


通過(guò) logcat 分析 app runtime 日志。


根據(jù)平臺(tái)本身提供的 log 或者運(yùn)行平臺(tái)的調(diào)試工具,利用應(yīng)用的日志分析以及建立追蹤模式分析鏈路的問(wèn)題,通過(guò)代理抓包 charles、fiddler、mitmproxy 或者嗅探抓包,wireshark、tcpdump 的方式分析鏈路。
安卓提供的工具,對(duì) app 交互發(fā)生的網(wǎng)絡(luò)請(qǐng)求進(jìn)行中間過(guò)程的分析。

當(dāng)工具本身不可調(diào)試時(shí),可以使用代理工具分析。

通過(guò) tcpdump 抓包,導(dǎo)入 wireshark 進(jìn)行分析。

性能 bug 分析方法
H5的性能問(wèn)題通常對(duì)網(wǎng)頁(yè)加載的過(guò)程進(jìn)行分析,通過(guò) w3c 定義的 performance api 對(duì)每個(gè)階段發(fā)生的問(wèn)題進(jìn)行統(tǒng)計(jì),需要各個(gè)瀏覽器支持對(duì)性能方面的分析。


分析應(yīng)用運(yùn)行時(shí)代碼的具體時(shí)間。


總結(jié)
定位 Bug 首先要明確 Bug 問(wèn)題的現(xiàn)象和復(fù)現(xiàn)步驟,通過(guò)分層分析關(guān)鍵過(guò)程的數(shù)據(jù)與問(wèn)題特征,積累 Bug 特征與問(wèn)題根源特征,豐富測(cè)試經(jīng)驗(yàn),提高 Bug 發(fā)現(xiàn)的能力。