西安海學(xué)通教育

7x24小時(shí)咨詢熱線

400-660-3310

當(dāng)前位置 : 好學(xué)校 西安海學(xué)通教育 學(xué)習(xí)資訊 資訊詳情

軟件測試干貨 | bug分析定位技巧

2021-07-15

身為測試工程師,總有一道繞不過去的坎就是定位bug,這其實(shí)是非?;ㄙM(fèi)時(shí)間的。

也許有很多人不以為然,覺得無非就是發(fā)現(xiàn)bug后提交bug管理系統(tǒng),描述操作步驟,預(yù)期結(jié)果和實(shí)際結(jié)果哪里不一致,然后繼續(xù)測試。并不是說這樣做的不對,只是說這樣做的不夠好,看似節(jié)約了測試時(shí)間,實(shí)則對于項(xiàng)目的進(jìn)度沒有起到應(yīng)有的推動(dòng)作用。

一、web前端

  • Web前端就是通常說的網(wǎng)頁。互聯(lián)網(wǎng)公司的前端一般包含如下內(nèi)容:JavaScript、ActionScript、CSS、HTML(..ML)、HTML5、Flash、交互式設(shè)計(jì)、視覺設(shè)計(jì)
  • web前端測試可能發(fā)現(xiàn)的問題——版面設(shè)計(jì)、交互設(shè)計(jì)、文字、性能、功能
  • bug定位通用思路:現(xiàn)象-->原因-->驗(yàn)證手段-->結(jié)論-->現(xiàn)象
bug定位通用思路

測試bug定位原因歸類:

測試環(huán)境相關(guān)

  • 是否安裝了flash及flash的版本——可能導(dǎo)致部分頁面顯示出問題,目前常用的版本誒flash10
  • 是否開啟了瀏覽器插件——插件可能導(dǎo)致瀏覽器行為的變化,除非測試要求,否則一律禁用插件
  • 是否開啟了安全軟件——可能會(huì)截包、彈窗攔截、防釣魚等

瀏覽器相關(guān)

  • 不同瀏覽器的支持標(biāo)準(zhǔn)——不同內(nèi)核的瀏覽器對js及各種標(biāo)準(zhǔn)的支持不同,因此頁面解析出來的效果可能不同。Firefox:gecko;Chrome:webkit;IE:trident;Safari:webkit。
  • 瀏覽器的設(shè)置——禁用js;禁用彈窗;禁用cookie等
  • 瀏覽器cache策略——js,css,圖片等都有可能被cache住。ctrl+F5強(qiáng)制刷新請求
  • cookie——跨域,過期

網(wǎng)絡(luò)相關(guān)

  • 是否發(fā)出了正確的請求——請求url、參數(shù)變量。content數(shù)據(jù)
  • 是否得到了正確的應(yīng)答——http的返回值:200-正確;302-對象已移動(dòng);304-對象未修改;404-沒有找到頁面。返回的數(shù)據(jù)體
  • 是否性能問題——異步請求的數(shù)量過多;網(wǎng)速過慢

字符編碼相關(guān)

  • 頁面亂碼——百度后端存儲(chǔ)基本是使用的GBK編碼,前端提交可能是UTF-8編碼,后端對于非GBK編碼一般采用實(shí)體存儲(chǔ)??赡艹霈F(xiàn)編碼沒有轉(zhuǎn)換。轉(zhuǎn)換的時(shí)候沒有判斷半個(gè)漢字(轉(zhuǎn)掉了半個(gè)漢字導(dǎo)致雪崩)。
  • url錯(cuò)誤——url路徑中漢字編碼使用的是utf-8編碼,參數(shù)中使用系統(tǒng)默認(rèn)編碼,flash腳本中使用的都是uft-8編碼。

安全相關(guān)

  • Xss漏洞——輸入一些特定字符頁面出現(xiàn)錯(cuò)亂或有惡意代碼被執(zhí)行,RD未對特殊字符轉(zhuǎn)義完整

性能相關(guān)

  • 圖片數(shù)量——頁面中同一個(gè)域的圖片的數(shù)量控制在16個(gè)以下,IE會(huì)控制同一個(gè)域下圖片并行的下載數(shù)量
  • 頁面抖動(dòng)——異步請求的數(shù)量過多
  • 加載失敗——限速情況下,超時(shí)

bug定位常用工具

  • Firefox——firebug、web developer、live http headers、http fox
  • IE插件——httpwatch
  • 第三方工具——fiddler、charles
  • 慢速網(wǎng)模擬工具——firefox throttle、fiddler、charles

二、web后端

  • 后端包含運(yùn)行在服務(wù)器上的程序,腳本和服務(wù)。比如:各種各樣的邏輯處理系統(tǒng),數(shù)據(jù)存儲(chǔ)系統(tǒng)等。
  • 后端可能發(fā)現(xiàn)的問題——邏輯的,數(shù)據(jù)的,策略的,接口的,性能的等

測試bug定位原因歸類:

數(shù)據(jù)流相關(guān)

  • 上下游模塊是否連接正?!K的ip和端口的配置,白名單黑名單配置,session授權(quán)
  • 模塊的數(shù)據(jù)發(fā)送接收是否正常——日志是否有滾動(dòng),是否顯示發(fā)送了數(shù)據(jù)或接收到數(shù)據(jù),數(shù)據(jù)是否完整,跨機(jī)房,負(fù)載均衡算法(從哪些機(jī)器獲取到的數(shù)據(jù))
  • 非socket的數(shù)據(jù)傳輸——共享內(nèi)存(是否分配,key的配置等),cache(是否創(chuàng)建,臟數(shù)據(jù)等),數(shù)據(jù)庫(配置,連接,表,觸發(fā)器,存儲(chǔ)過程),文件(大小,訪問權(quán)限)
  • 模塊之間的接口——協(xié)議的一致性(mcpack1,mcpack2等),字段的一致性(一個(gè)按signed解析,一個(gè)按unsigned解析),字段復(fù)用

處理邏輯相關(guān)

  • 程序的各種配置——功能是否開啟/關(guān)閉,詞表是否加載,各種閾值的配置,超時(shí)配置
  • 程序日志——日志級(jí)別,交互的流程,處理的流程
  • 各種邊界——數(shù)據(jù)邊界(int,long),文件邊界(空文件,分文件的邊界),時(shí)間邊界
  • 各種資源并使用——Cache是否遺留臟數(shù)據(jù),并發(fā)和死鎖

系統(tǒng)和環(huán)境相關(guān)

  • 系統(tǒng)資源——Cpu,io,句柄,內(nèi)存,網(wǎng)絡(luò)狀態(tài),數(shù)據(jù)庫狀態(tài),數(shù)據(jù)庫連接數(shù)
  • 環(huán)境資源——程序版本,內(nèi)核版本,網(wǎng)絡(luò)(外網(wǎng))訪問權(quán)限,系統(tǒng)動(dòng)態(tài)庫不一致

程序和代碼相關(guān)(常用驗(yàn)證手段)

  • 確認(rèn)問題出現(xiàn)的位置——日志中的代碼行,gdb中的代碼行,拋出異常顯示的代碼行
  • 獲取當(dāng)時(shí)的運(yùn)行時(shí)信息——Gdb core文件,gdb attach到進(jìn)程,查看堆棧,查看寄存器,設(shè)置breakpoint,watchpoint,查看內(nèi)部數(shù)據(jù)
  • 獲取程序和系統(tǒng)信息——Strace查看系統(tǒng)調(diào)用,系統(tǒng)狀態(tài)獲?。╬s,top,/proc/pid/*,vmstat,netstat)
  • 更深入的手段——反匯編,查看寄存器,gdb高級(jí)應(yīng)用

后端測試bug定位

日志查看命令

  • ????????查看壓力——tail -f as.log | grep '^NOTICE' | awk '{print $3}' | uniq -c
  • · 排除日志中的特定內(nèi)容——grep -v 'pattern' as.log
  • · 只輸出感興趣的內(nèi)容——grep -o 'proctime:toal:\d+' as.log;grep -o 'proctime:toal:\d+' as.log | grep -o '\d+ ';grep -o 'proctime:toal:\d+' as.log | grep -o '\d+ ' | sort -n | uniq -c
  • · 將wf日志歸類——grep -o '\w+\.(cpp|h):\d+' as.log.wf | sort | uniq -c

gdb常用命令

  • bt——查看堆棧信息
  • print——打印某變量值
  • break——設(shè)置斷點(diǎn)
  • x/i——翻譯當(dāng)前指令為匯編
  • info thread——查看所有線程,星號(hào)*標(biāo)記的是當(dāng)前線程
  • thread num——切換到線程號(hào)為num的線程
  • set scheduler -locking on——鎖定在線程:輸入continue命令以后,當(dāng)前線程繼續(xù)執(zhí)行,其它線程不執(zhí)行
  • set scheduler-locking off——這是默認(rèn)設(shè)置,輸入continue命令以后,所有線程都繼續(xù)執(zhí)行

三、性能測試

  • 旨在獲取系統(tǒng)在特定一種或多種環(huán)境下,在不同的外部輸入壓力(包含極限)的條件下的系統(tǒng)各項(xiàng)指標(biāo)的測試

常用命令

  • 進(jìn)程相關(guān)——ps,top,/proc/pid/*
  • 系統(tǒng)相關(guān)——vmstat,top,iostat,sar,df,lsof
  • 網(wǎng)絡(luò)相關(guān)——netstat

bug定位原因歸類

壓力工具相關(guān)

  • 工具的功能和性能——能否達(dá)到預(yù)期壓力,啟動(dòng)壓力的機(jī)器性能,壓力工具是否有異常連接關(guān)閉,壓力工具如何處理異常,長連接短連接,并發(fā)的個(gè)數(shù)
  • 工具運(yùn)行環(huán)境——壓力機(jī)器的帶寬,是否跨機(jī)房
  • 被測系統(tǒng)相關(guān)
  • 機(jī)器性能——系統(tǒng)所在機(jī)器性能,機(jī)器網(wǎng)絡(luò)帶寬,機(jī)器的內(nèi)存,sd卡,硬盤
  • 系統(tǒng)本身——系統(tǒng)的下游模塊的性能,系統(tǒng)的配置,系統(tǒng)的數(shù)據(jù)量,系統(tǒng)的特點(diǎn)狀態(tài)(充cache,dump,merge),系統(tǒng)的部署,程序的bug

環(huán)境相關(guān)

  • 操作系統(tǒng)相關(guān)—— 是否和線上一致,內(nèi)核版本,刷臟頁時(shí)間,有沒有調(diào)用directIO
  • 查看系統(tǒng)狀態(tài)——Ps,top,/proc/pid/*, vmstat,netstat

正確的思路+豐富的業(yè)務(wù)知識(shí)+豐富的技術(shù)背景知識(shí)+較好的調(diào)試和開發(fā)能力= 強(qiáng)大的bug定位能力Bug定位的過程是能力提升的過程。

收藏
分享到:

相關(guān)課程

相關(guān)資訊

西安海學(xué)通教育

西安海學(xué)通教育

認(rèn)證等級(jí)

信譽(yù)良好,可安心報(bào)讀

西安海學(xué)通教育

已獲好學(xué)校V2信譽(yù)等級(jí)認(rèn)證

信譽(yù)值

  • (60-80)基礎(chǔ)信譽(yù)積累,可放心報(bào)讀
  • (81-90)良好信譽(yù)積累,可持續(xù)信賴
  • (91-100)充分信譽(yù)積累,推薦報(bào)讀

與好學(xué)校簽訂讀書保障協(xié)議:

  • 100%
  • 34
  • 4865
在線咨詢
;