軟件測試 | Bug定位方法
通常情況下我們把Bug分為4個類型,分別是功能、性能、安全和專項(xiàng)質(zhì)量。功能類型關(guān)注于系統(tǒng)業(yè)務(wù)流程是否正確,心梗類型關(guān)注于系統(tǒng)業(yè)務(wù)流程是否順暢;安全類型判斷系統(tǒng)是否存在漏洞,是否符合安全標(biāo)準(zhǔn)與規(guī)范;專項(xiàng)質(zhì)量通常關(guān)注與系統(tǒng)的用戶體驗(yàn)(UX)、兼容性、穩(wěn)定性和可靠性。
1.掌握Bug定位的重要性
軟件測試人員的首要任務(wù)就是發(fā)現(xiàn)Bug,把發(fā)現(xiàn)的Bug提交給開發(fā)人員進(jìn)行修復(fù)。測試人員掌握Bug定位可以提交Bug時為開發(fā)人員提供更多有用信息,方便開發(fā)人員分析Bug的形成原因,更有效率地進(jìn)行溯源并建立Bug特征,批量追蹤和解決問題。
2.Bug表現(xiàn)層
(1)條件:測試數(shù)據(jù) ? ? ? ?(2)過程:測試步驟 ? ? ? ? ? ? (3)結(jié)果:測試結(jié)果
3.技術(shù)架構(gòu)層次
我們把軟件從技術(shù)架構(gòu)層次上分為3層,即視圖層(View)、控制層(Controller)和模型層(Model)。由于Web和App在具體的層次上,因此我們關(guān)注的技術(shù)方向是不同的,具體如下。
視圖層(View),網(wǎng)頁開發(fā)(HTML、CSS樣式等),移動應(yīng)用App(Activity頁面、View組件等)。
控制層(Controller),網(wǎng)頁開發(fā)的工具(Chrome Devtool),移動應(yīng)用使用的工具。
模型層(Model),模型的傳遞方式(HTTP、TCP、RPC串口),模型的形式(JSON XML binary)。
4.MVC三層分析法
Bug的定位往往會依照軟件技術(shù)架構(gòu)層次采用MVC三層分析方法,分析View層、Controller層和Model層的運(yùn)行平臺、應(yīng)用調(diào)試機(jī)制和鏈路。
5.View層常用分析方法
View層常見的問題是用戶界面(User Interface ,UI)和用戶體驗(yàn)(User Experience,UE)。目前,常采用人工測試和自動化測試,通過人工校驗(yàn)為主,自動化校驗(yàn)為輔的方式檢驗(yàn)界面交互的準(zhǔn)確性以及用戶的體驗(yàn)感受。此外利用UI的Diff對比分析界面變化,定位更深層次的問題。
6.Controller層常用分析方法
controller層通過平臺自主提供的日志(log)以及應(yīng)用程序本身提供的應(yīng)用調(diào)試日志(debug trace hook profile)分析代碼層次的邏輯問題。
7.Model 層常用分析方法
Model層根據(jù)運(yùn)行平臺的log、App調(diào)試機(jī)制以及鏈路來具體分析的問題。
8.Web ?Bug分析方法
(1)Web UI View 層Bug分析方法
界面展示主要是依賴于HTML、CSS、JS(JavaScript),可以使用Chrome開發(fā)者工具的elements和style兩個板塊來分析界面,elements可以展示具體空間,空間格式通過style來確定,有次來判斷是否是樣式、布局或輸出方面的問題。如同1-43所示為style板塊的內(nèi)容。

(2)Web ?Controller層分析方法
程序員用JavaScript根據(jù)操作流程對代碼進(jìn)行修改的結(jié)果,如圖1-44所示,底層邏輯的錯誤在Console板塊會展示出詳細(xì)的出錯信息。而用source模塊可以對錯誤進(jìn)行定位,并通過Debug分析問題存在的上下文,找到代碼問題的根源所在。

(3)Web Model層分析方法—分析數(shù)據(jù)傳遞方式與結(jié)構(gòu)
Medel層分析方法是基于運(yùn)行平臺的log,例如Chrome的network模塊分析請求方式和數(shù)據(jù)的具體情況。鏈路分析使用代理工具,常用的有Fiddler、Charles和Mitmproxy以及網(wǎng)絡(luò)層的嗅探(常用的工具有Tcpdump和Wireshark)。Chrome的network模塊如圖1-45

9.App Bug分析方法
(1)App View層Bug分析
App的UI界面交互和UX/UE用戶體驗(yàn)?zāi)壳俺S玫氖侨斯ばr?yàn)的方式,以自動化作為輔助手段,用UI Diff的方式分析,嘗試發(fā)現(xiàn)界面中存在的問題,其中人工測試能夠發(fā)現(xiàn)未知特征的Bug,自動化測試可以斷言常用功能是否整成,通過UI Diff 可以發(fā)現(xiàn)界面結(jié)構(gòu)細(xì)節(jié)的問題。如圖1-46和圖1-47所示是兩個存在Bug的App界面。


(2)App Controller層分析
通過logcat分析App runtime日志。如圖1-48和圖1-49所示是兩個logcat的內(nèi)容。


(3)App Model層分析方式
根據(jù)平臺本身提供的log或者運(yùn)行平臺的調(diào)試工作,利用應(yīng)用的日志,通過朱總模式分析鏈路問題。通過追蹤模式分析鏈路問題,可以使用代理工具(如Charles、Fiddler、Mitmproxy、嗅探)進(jìn)行抓包分析,也可以使用Wireshark、Tcpdump工具分析鏈路,從而找到Bug相應(yīng)的日志,定位到問題,輔助開發(fā)人員盡快解決代碼中的問題。
(4)Android Profile網(wǎng)絡(luò)分析
Android 提供的工具對App交互的網(wǎng)絡(luò)請求進(jìn)行中間過程的分析。如圖1-50所示是Android ProFile的分析內(nèi)容。

(5)使用代理工具分析
當(dāng)工具本身不可調(diào)試時,可以使用代理工具分析。如圖1-51所示是Charles代理工具。

(6)網(wǎng)絡(luò)層協(xié)議分析
通過Tcpdump對程序進(jìn)行抓包,并導(dǎo)入Wireshark進(jìn)行分析。如圖1-52和1-53所示是Tcpdump抓包和Wireshark分析內(nèi)容。


10.性能Bug分析方法
(1)H5性能分析方法
H5的性能分析方法通常對網(wǎng)頁加載的過程進(jìn)行分析,通過W3C定義的PerformanceAPI對程序每個階段發(fā)生的問題進(jìn)行統(tǒng)計,需要各個瀏覽器支持對性能方面的分析。如圖1-54所示是performanceAPI所涉及的階段。

(2)利用Chrome分析Web性能
圖1-55所示是使用Chrome開發(fā)者工具分析出的有關(guān)Web性能的內(nèi)容。

(3)分析性能瓶頸,使用Profile進(jìn)行代碼剖析
圖1-56所示是使用Profile進(jìn)行代碼分析的結(jié)果。

(4)代碼覆蓋率分析方法
圖1-57和圖1-58所示是使用JaCoCo得到的代碼覆蓋率的結(jié)果。

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