Bug預防體系——web常見產品問題及預防
Bug預防體系——web常見產品問題及預防
測試人員在每次版本叠代中,會對項目的整體質量有一個把控,對於項目常見的問題,開發經常犯的錯誤都會有所了解,為了避免或者減少這樣的錯誤或不規範的事情在發生,測試人員可以整理構建屬於產品的bug預防體系,總結項目經常出現bug的種類、位置、以及可以提出針對性的規避措施,提高產品質量。
- 分辨率兼容性
? 產品的網頁通常保證在1024768的分辨率下顯示正常,但是常常忽略800600分辨率下的顯示情況,還有其他特殊要求的分辨率
? 如果頁面設計明確只考慮1024768的需求,則只在1024768下驗證各個產品頁面的顯示正確無誤
? 屏幕比例4:3(最常見比例)、屏幕比例4:3「寬屏幕」比例、屏幕比例16:9(主要是HD電視在用的比例。常聽到的720p、1080p 都是這個比例)、屏幕比例5:4(只有SXGA)
預防方法:
? 產品:需要明確產品需要兼容的常見屏幕分辨率
? 開發:網頁頁面的設計需要針對多種屏幕分辨率制定設計規範,並依據設計規範進行開發
? 測試:在不同分辨率下驗證頁面顯示的兼容正確性
- 瀏覽器兼容性
目前市場上的主流瀏覽器如下:
a. IE 6.0-11
b. 360 瀏覽器
c. 獵豹瀏覽器
d. QQ 瀏覽器
e. Chrome 瀏覽器
f. FireFox 瀏覽器
通常情況下要保證IE6-11和360 瀏覽器下的兼容性,需要保證頁面不變型,
Js執行均正確
預防方法:
? 產品:依據主流的瀏覽器市場占比,評估你需要兼容的瀏覽器
? 開發:針對需要兼容的瀏覽器類型和版本,指定瀏覽器兼容設計開發規( CSS和Js 為主),並不斷總結兼容性的經驗教訓
? 測試:在產品要求兼容的瀏覽器類型和版本下,進行兼容性測試
- Link問題
所有鏈接是否按指示那樣確實鏈接到了該鏈接的頁面
? 所鏈接的頁面是否存在
? 保證Web應用系統上沒有孤立的頁面,所謂孤立頁面是指沒有鏈接指向該頁面
? 鏈接的打開方式是否合理(在當前窗口中打開、打開新窗口)
? 有死鏈
預防方法:
? 產品:提供的需求中明確是否需要鏈接以及鏈接的位置以及鏈接的打
開方式
? 測試:死鏈測試可以采用工具自動進行
- 快捷鍵和焦點
Tab鍵和焦點的切換:在測試的頁面中使用Tab鍵可以在全頁面的所有元素進行焦點切換、並且要將相鄰元素的 tab鍵切換順序做到關聯。
如:
a. 用戶打開登錄首頁,則焦點應該默認顯示在用戶名輸入框中
b. 在用戶名輸入框輸入用戶名之後,按下tab 鍵後,焦點應該切換到密碼輸入框中,而不是切換到其他元素上。
c. 輸入密碼後,按下tab鍵可將焦點切換到“保存密碼”的復選框或者登錄按鈕以上操作,均對偏好使用快捷鍵的用戶給於更友好的支持。
預防方法:
? 產品:考慮頁面的默認焦點設定位置,設定tab鍵在界面上切換焦點的順序
? 開發:依據產品人員的要求實現默認焦點位置,和tab 鍵的切換順序
? 測試:驗證默認焦點位置和tab切換的順序
- 前進、後退和刷新
IE 有一個特性:就是允許前進、後退到某一個頁面或在當前頁面刷新,在某些特殊業務場景的要求下,用戶進行前進、後退和刷新當前頁面的操作,會造成數據不完整、校驗失敗或者重復提交的情況。
預防方法:
? 產品:明確哪些敏感頁面不允許前進、後退和刷新,一般情況下充值和支付等相關的頁面或者其他數據提交頁面禁止後退和刷新後提交。
? 開發:從技術層面考慮後退和前進操作是否會造成系統漏洞,讓用戶重復充值或者支付。如果用戶嘗試後退,則讓頁面強制失效或者禁止後退。
? 測試:和產品確認禁止後退的操作限制頁面,進行針對性測試
- 頁面提示語言、js提示語言、程序提示語言
通常情況下,產品人員並不會將產品需求細化到某句話應該如何提示用戶,所以不同的程序員會根據自己的語言特點來提示用戶,這就造成了不同程序員提示的語言風格完全不一樣,造成產品友好度下降。
預防方法:
? 產品:產品人員和開發人員一起制定盡可能大而全的產品提示語言規範,並且作為規範說明提供給開發人員進行使用。
? 開發:遵守語言說明規範,並且針對各種系統的要求不斷補充和規範提示
? 測試:測試過程中,驗證語言是否符合指定的語言規範
語言文字提示:
a. 全角字符和半角字符都要使用一個空格分開
b. 英文和數字之間要有空格分開
c. 漢字和英文、數字要有空格分開
d. 帶有漢字的話要使用全角字符
e. 語言中不要混用全角和半角標點
f. 在語言中,永遠不要用“你”這個字,要做一些操作步驟描述的時候,要多用“請”字
- 文字縮略和折行
輸入框提交很長的純英文字母或者數字(不帶任何全角字符和中文),並且不換行,則提交數據後,頁面可能被此相關字符拉伸的特別長。
預防方法:
? 開發:提交公共處理字符的程序,解決上述問題,在所有輸入框中增加相關處理
? 測試:所有輸入框需要進行此輸入測試,保證頁面不會被用戶的惡意輸入拉長
- 圖片的顯示和鏈接
圖片是否增加鏈接通常會被開發人員忽略掉圖片的顯示位置通常會顯示不同像素大小和比例的圖,所以需要明確定義大圖片如何縮減成為小圖片的策略,以及小圖片如何拉伸顯示為大的圖片。
預防方法:
? 產品:提供的需求中明確圖片是否需要鏈接以及鏈接的url地址以及點擊後實在當前頁打開,還是彈出新頁面打開。明確用戶上傳圖片的顯示方法,采用等比縮放,還是原大小顯示,還是自適應顯示
? 開發: 按照產品要求進行開發,針對圖像的顯示開發統一顯示模塊
? 測試:點擊圖片鏈接,驗證圖片鏈接的正確性和打開方式是否符合產品設計要求。傳不同格式的圖片(長方形圖、正方形的圖、原型圖、超大圖和超小圖),驗證圖片顯示策略符合產品
- 重復提交
用戶提交數據頁面,用戶有可能連續多次點擊提交按鈕,造成數據的重復提交。
黑客或者不良用戶通過抓包可以獲取提交的url ,進行嘗試重復提交。
預防方法:
? 開發:點擊“提交”後,將按鈕變為Disable狀態,禁止用戶再次點擊。針對每條提交的數據需要增加校驗參數,方式不良用戶通過其他工具惡意提交。
? 測試:通過頁面驗證按鈕點擊後的狀態,通過工具發送重復提交的請求,驗證系統是否可以處理重復提交的問題(金融系統需重點測試)
- 輸入判斷問題
? 所有鍵盤輸入的特殊字符,均可以正常保存
? 需要特別處理英文單引號、英文雙引號等引起程序錯誤的問題
? 需要處理“ <”、“ /”和“ ”等容易保存出錯的字符
? 數字框只能輸入數字的內容
? 日期框需要判斷日期是否合法
? 文本框需要判斷字段長是否限制了
? 對於空格的處理,如果系統想trim掉字符串最開頭和最後的空格,則需要整個兒系統都使用此策略,否則會造成數據傳遞不一致的問題
? 需要前臺頁面使用js來判斷輸入的合法性,同時後臺邏輯也要添加判斷輸入合
預防方法:
? 開發:開發公共處理特殊字符的模塊,在系統中進行規範應用
? 測試:對所有輸入字段,進行輸入判斷測試,超長、空、特殊字符、 utf8字符等,並驗證其他頁面輸入有效性,驗證前臺和後臺均加有輸入判斷邏輯。
- 多個ie同時訪問
? 用戶可能打開不同的IE使用相同的用戶登錄後進行操作,程序處理的時候要考慮到數據的一致性和同步問題
? 多個IE使用不同用戶,則cookie操作不會出現用戶信息混亂的問題
預防方法:
? 開發:提前考慮到多個IE操作和多用戶操作的使用場景,在使用cookie本地信息時需要做好針對性的程序處理,依據以往出現的問題設計開發規範
? 測試:按照多瀏覽器和多用戶的使用情況,進行更多場景的測試
- 安全考慮
? 在URL中不要帶有明文的用戶信息寫代碼的時候,不要把密碼等敏感的用戶信息明文的顯示在url中
? 即使要傳遞密碼參數也不要使用pwd、 passpord這樣的參數名稱來進行傳遞,防止被截獲
? 要在傳遞參數的操作中使用NoCache參數,防止將url參數進行緩存
預防方法:
? 開發: 建立數據傳輸技術規範和參數命名規範標準,嚴格參照執行,防止信息被攔截,造成應用系統的信息泄露
? 測試:在緩存目錄驗證緩存信息是否有敏感信息,通過抓包方式驗證是否暴露了敏感信息
- 直接URL鏈接檢查
在Web系統中,匿名在地址欄直接輸入各個功能頁面的URL地址,檢查
系統是否處理了權限控制
預防方法:
? 開發:代碼走查的方式確認所有頁面的具有權限驗證邏輯
? 測試:獲取所有系統url,在非登錄情況下進行遍歷截圖,或關鍵字判斷,驗證非登錄狀態下無法訪問具有訪問權限限定的
- 防止sql註入和跨站攻擊
? 不要把數據庫或者程序的任何報錯信息顯示在頁面上。
? 數據庫中設計到操作權限的表名和字段名不要使用過於通俗易懂的命名,尤其是用戶和密碼之類的信息,禁止使用明文存儲密碼
? 頁面回顯的input text, input hidden中的文本內容需過濾 “ <、 >、 ”、’等字符(半角轉換為全角或者刪除掉),防止 Javascript 的跨站攻擊
預防方法:
? 開發:出錯的時候使用錯誤處理頁面,建立標準的過濾關鍵字程序,統一數據庫設計命名規範將敏感的表名做特殊命名處理,密碼使用Md5或其他加密方式保存
? 測試:驗證所有頁面不會暴露系統的任何出錯信息使用安全工具appscan 或其他工具掃描系統的sql註入漏洞和跨站攻擊漏洞
- 關於cookie
Cookie沒有設定過期時間IE不支持Cookie的時候沒有任何提示信息Cookie中的敏感信息沒有進行加密
預防方法:
? 開發:明確cookie生存期,並對生成的cookie進行檢查,建立標準的檢查瀏覽器對cookie支持的程序函數
? 測試:檢查cookie的生存周期,以及是否存在敏感內容
- 各種資源鏈接的釋放
有的時候,系統莫名訪問不了,有可能是數據庫連接沒有釋放壓力測試的時候,連接釋放如果效率不高,則有可能出現大量連接超時失敗內存泄露,長時間工作內存被占滿了。
預防方法:
? 開發:系統資源的釋放過程,最好通過代碼review的方式來互相監督
? 測試:進行穩定性測試,驗證長時間工作情況下的資源是否可以釋放
關於keepalive的設置:
如果需要在一個連接同時獲取多個資源,則需要打開apache或者resin的Keepalive參數為On,來提高系統的處理能力,減少多次建立連接所消耗的資源。如果大量的處理只是一次性連接,則不要打開Keepalive設置。在實際工作中,需要將keepalive分別設置On或者Off來驗證哪個設置的性能更好。
- 系統上線的log配置
上線以後,要關閉無用大量調試log信息不要打開過多的log
預防方法:
運維和開發:系統管理員對所有打開log級別進行確認,並群發相關人確認
- 用戶易用性
用戶刪除某個數據前,要明確提示用戶是否要刪除,默認把焦點選擇為“否”。
預防方法:
? 開發:按照上述要求進行焦點設定
? 測試:進行測試確認
- 文檔
程序實現和接口文檔描述不一致
預防方法:
? 開發:團隊中專人定期對接口文檔進行審核和更新,保證文檔、需求變更和程序實現保持一致
? 測試:僅參照文檔進行測試
- 多表操作
詳細設計文檔缺失,接口對多表進行操作時候,經常會發生有些表的數據沒有被更新的情況。預防方法:
? 開發:審核設計文檔是否覆蓋必要的邏輯,加強代碼審查
? 測試:通過查詢接口判斷所有插入接口的數據庫操作是否正確
Bug預防體系——web常見產品問題及預防