如何對待測試中不能重現(xiàn)的BUG作者:謝金花在測試過程中,我們總會遇到一些偶然發(fā)生的、不能重現(xiàn)的BUG,或者在測試人員那里可以重現(xiàn),但是在開發(fā)人員處卻不能重現(xiàn)的BUG。而且偶然發(fā)生的“無法重現(xiàn)”的BUG多半是“計劃外”的。無論站在開發(fā)人員還是測試人員的角度,都不愿意遇到不能重現(xiàn)的BUG,因為這意味著要花更多的時間去查找原因和修改BUG,甚至短期內無法修復,需等待以后再次出現(xiàn)或許才能解決。 一、一般情況下,BUG不能重現(xiàn)的原因主要有以下幾點:(1)環(huán)境不一致 這是BUG不能重現(xiàn)的主要原因之一。在開發(fā)人員認為這是無效的BUG里面,估計至少有80%的BUG是因為環(huán)境不一致的原因造成的。這既包括開發(fā)環(huán)境和測試環(huán)境的不一致,也包括開發(fā)環(huán)境和系統(tǒng)的實際運行環(huán)境不一致。 BUG產生是有一定原因的,它的重現(xiàn)也需要一定的環(huán)境。如果沒有相應的環(huán)境,那么你可能很難重現(xiàn)這個BUG。 從廣義上來說,保證或影響系軟件的任何因素都是環(huán)境。例如,硬件的配置、軟件的設置、網絡的帶寬、網速等。通常,環(huán)境中的軟件因素有:系統(tǒng)的Build、 Application Server的類型和Version、Operation System 的語言和Version、瀏覽器的語言和Version等。 就拿我們某一項目來說:在V1.0.5版本的系統(tǒng)測試中,發(fā)現(xiàn)某一模塊功能出現(xiàn)問題,將這個問題提交到開發(fā)人員處,結果開發(fā)人員無法重現(xiàn)這個問題,且在開發(fā)人員處,該模塊功能正常,查找了原因很久,發(fā)現(xiàn)可能是版本升級導致,于是將版本回滾到之前的版本,功能恢復正常。 諸如此類由于環(huán)境不一致的原因導致的不能重現(xiàn)的BUG,大部分是在開發(fā)人員那不能重現(xiàn),小部分是在測試人員處偶然出現(xiàn),找不到規(guī)律。所以,這就要求我們測試與開發(fā)的環(huán)境要分開,測試要有自己的獨立環(huán)境,且測試環(huán)境要保持干凈、無毒。 (2)瀏覽器的不當設置 對于Web測試來說,瀏覽器的設置又是對重現(xiàn)BUG起著重要的作用。下面的幾個圖片說明了瀏覽器的幾個關鍵設置: ![]() 圖1:Internet臨時文件的設置 ![]() 圖2:“高級”選項的設置 說明:在“高級”選項中,對測試起重要作用的是“禁止腳步調試”(不選擇,即前面不要有勾)和“顯示每個腳本錯誤的通知”(選擇它,即前面要出現(xiàn)勾)。 這些設置對重現(xiàn)有關腳本錯誤的BUG起著重要的作用。根據(jù)這些腳本錯誤的通知,開發(fā)人員可以快速發(fā)現(xiàn)代碼中的錯誤,并及時修復它。 下面講解某一項目中由于瀏覽器設置引起的bug不能重現(xiàn)的例子: 有次版本發(fā)布之后,從領導那邊反饋回來一個bug。根據(jù)以往流程,我們首先對這個BUG進行驗證,可是無論如何都重現(xiàn)不了該BUG,于是找到項目經理,讓他重現(xiàn)下該BUG,仍舊不能重現(xiàn)。最后項目經理找到領導,了解其操作過程,才發(fā)現(xiàn)其瀏覽器字體設置為“微軟雅黑”,而我們的瀏覽器字體為默認字體。最后將字體修改為“微軟雅黑”后該BUG才重現(xiàn)。 (3)內存泄露 某些系統(tǒng)長期運行后出現(xiàn)運行速度慢、反應遲鈍等現(xiàn)象,其中一個主要的原因就是內存泄露。有的開發(fā)人員沒有養(yǎng)成及時回收內存的習慣,結果系統(tǒng)在不斷地申請內存空間,卻沒有一點內存釋放。這類錯誤在短期內不會出現(xiàn),但當系統(tǒng)長期運行時就會出現(xiàn),并且由此會引發(fā)一系列的問題。此類問題只有經過長時間的運行測試, 才可能會被發(fā)現(xiàn)。 這個問題在我們某一項目中也存在過,由于該項目是采用Java語言開發(fā)的,Java可以自動回收內存,這就導致了開發(fā)人員對及時回收內存問題的忽略,使用時出現(xiàn)內存泄露。 (4)函數(shù)接口類型不匹配 此類錯誤難以重現(xiàn),并且難以發(fā)現(xiàn)它的真正原因,一般只有在查看源代碼后才能發(fā)現(xiàn)。某些類型的數(shù)據(jù)會被系統(tǒng)自動轉換,一般也不會出現(xiàn)錯誤;但有些數(shù)據(jù)被截斷或被強制轉換成另外一種數(shù)據(jù)類型時,會出現(xiàn)一些潛在的錯誤。在集成測試時此類錯誤最有可能發(fā)生。 二、出現(xiàn)不可重現(xiàn)的BUG時,我們應當本著以下原則,實現(xiàn)BUG的重現(xiàn)工作:(1)重現(xiàn)的人員: 缺陷的重現(xiàn)工作,最好由測試人員去完成,一方面,測試人員的文字描述其實很難包括所有的現(xiàn)象信息,讓開發(fā)人員重現(xiàn)的難度很大,另一方面,測試人員的重現(xiàn)更有說服力和更快捷。 (2)重現(xiàn)的次數(shù):每個難重現(xiàn)的缺陷,由發(fā)現(xiàn)該缺陷的測試人員連續(xù)重復測試300次,如果還不能重現(xiàn),將缺陷狀態(tài)改為closed; (3)延長測試時間,努力找到規(guī)律。如果市場緊急,由公司級領導特批,相當于高層領導評估風險,就可以先發(fā)布軟件,但測試和整改繼續(xù),留待問題解決后下一版本軟件升級; (4)若確實無法重現(xiàn),轉交項目經理做延遲處理,繼續(xù)跟蹤,若保留一個月都無法重現(xiàn)的,可先關閉,以后重現(xiàn)時再Reopen; 三、遇到無法重現(xiàn)的BUG時,我們應該做到如下幾點:(1)一定要提交 把不可重現(xiàn)的BUG記錄下來,以后再遇到的時候可能就會了解發(fā)生的原因。同時盡力去查找出錯的原因,比如有什么特別的操作,或者一些操作環(huán)境等。而且程序員對程序比測試人員熟悉的多,因為測試人員看到的只是程序的外部,無法深入程序內部,也許你提交了,即使無法重新,程序員也會了解問題所在。無法重現(xiàn)的問題再次出現(xiàn)后,也可以直接叫程序員來看看問題。 但是針對一些比較嚴重的、隨機發(fā)生無法重現(xiàn)的bug,測試人員提交上去后,有可能會出現(xiàn)以下三個情形:a.開發(fā)人員試圖重現(xiàn),重現(xiàn)不出,Reject回來;b.開發(fā)人員找不到規(guī)律,所以不去解決,問題一直處于Open狀態(tài);c.開發(fā)人員因為問題難以解決,所以直接Resolved回來,覺得反正是偶發(fā)的,先改成解決狀態(tài)再說。 (2)盡量詳細的描述缺陷 盡可能的詳細記錄BUG產生的相關信息;如重現(xiàn)頻率,發(fā)生情況并有截圖,操作步驟,軟件的版本,發(fā)生錯誤時的各種變量、內存、存儲器等存儲的數(shù)據(jù)內容,軟件出錯時的軟硬件環(huán)境等。 (3)由開發(fā)人員進行人工代碼走查和工具靜態(tài)檢查 無法重現(xiàn)的代碼找對系統(tǒng)最熟悉的開發(fā)人員重新Review代碼,最好是多人一起查。查代碼還找不出來,就要檢查操作系統(tǒng)、應用服務器及其環(huán)境是否有問題,是否有兼容性問題?;蛘卟捎渺o態(tài)檢查工具(如pclint,splint等工具)檢查代碼,消除所有的error與warning。 (4)查看是否正確設置瀏覽器的選項 對于瀏覽器設置不正確引起的BUG,設置好瀏覽器選項,就能使BUG重現(xiàn)。 總之,在遇到某些嚴重的、卻又無法重現(xiàn)的Bug,應積極回憶BUG的癥狀和所有的環(huán)境因素,一絲一毫的細節(jié)都不要錯過。并與開發(fā)人員、DBA、系統(tǒng)設計人員、項目經理等一起分析那些環(huán)境因素,根據(jù)以往的經驗分析影響此Bug重現(xiàn)的重要因素,并在相同的環(huán)境上安裝同樣的系統(tǒng)進行測試,以驗證所做的猜測。而對于某些無法重現(xiàn)、但嚴重程度不是很高的Bug,可以暫時只作記錄、而不必花費大量的人力和物力去分析。如果下次又出現(xiàn)了,那么根據(jù)發(fā)生的頻率再去分析是否需要跟蹤此Bug。如果需要跟蹤它,那么在它又出現(xiàn)后一定要立刻對當時的環(huán)境進行截圖,如錯誤信息、界面、日志等。這樣也利于開發(fā)人員定位、分析它,從而準確、快速地修復它。如果條件允許,測試人員應立即保護現(xiàn)有環(huán)境,并邀請相關的開發(fā)人員和系統(tǒng)分析人員一起研討產生此問題的原因和解決方法。 |
|
|
來自: lib_rinny > 《Bug Manage》