經歷過幾家創業公司,發現大部分測試和開發人員,包括專案經理,對於bug狀態與解決方案竟然傻傻分不清楚,導致bug管理與統計上的混亂,在費盡了我的三寸不爛之舌團隊成員解釋之後,索性將這個問題做個整理寫下來,希望對這些基本概念有所普及,現在大部分測試人員只關心學習高大尚的自動化測試,效能測試技術,卻對一些基本概念的理解卻是模糊不清,甚是讓我感到擔憂,希望本文對於入行測試的初學者,以及已經走在成長路上的測試人員有所幫助,也希望看到此文的開發,產品經理,專案經理也能提高一下認識,以做到更好的對bug進行管理。
筆者親身經歷例子:公司在teambiton中進行bug管理,bug的狀態有待處理,處理中,已解決,已拒絕,暫不修復,無法重現,資料問題,關閉,重新開啟等。典型的狀態與解決方案不分,混為一談。存在的問題是:已拒絕,暫不修復,無法重理等的問題要不要關閉?關閉後如何知道那些問題是修復過的?如何統計bug的修復率?如果開發將bug解為已拒絕,拒絕的原因是什麼?如何統計所有未修復的bug中,重複,無法重現的等無效bug的數量和佔比?在當時的情況下,唯一的辦法就是只有修復並驗證過的bug可以關閉,其他的bug保持狀態不變(但也不能做到有效控制,有些bug沒有修,因為各種原因被閉了,並且關bug時的描述有限,跟本無從判斷到底有沒有修復,追根溯源非常困難)。結果就是長期下來積累了大量的未關閉的bug,這此bug有哪些已經過期不存在了,哪些可以關了,哪些還需要後續跟進處理混亂狀態。
這令我非常驚訝,一開始我還以為是個例,在經歷過幾家公司後,我發現或多或少都存在類似的bug管理上的問題(包括做專案管理工具的teambition的,在bug管理的流程的設計上,上本身就沒有做到正確的示範和引導,jira在這方面就做的很好,狀態和解決方案欄位的預設設定已經區分的很明顯了,無奈的是仍然有很多人企圖更改jira的預設設定來對運轉良好的流程進行扭曲,當然他們的用詞叫做改進,優化)。我在微軟(外包)工作時從來沒有遇到過這種情況,微軟工作流程已經非常成熟,以至於在我看來bug狀態和解決方案的設計是bug管理系統的基礎配置,根本不需要關注。
看來問題還是廣泛存在的,有必要好好的梳理梳理,說道說道了。
先說辦法,很簡單,設計兩個字段,區分狀態與解決方案就好了,這並不是我的原創,我只不過是搬運成熟的做法而已。
bug的生命週期其實只有三種狀態:
開啟(open),已解決(resolved),關閉(closed)
注意:這裡將重新開啟(reopen)也算做開啟
注意:已解決(resolved)不等於已修復(fixed)
bug的解決方案可以是多種多樣,常用的如下:
注意:已解決和關閉的bug有且必須有解決方案,開啟的bug是不應該有解決方案的(因為還沒有解決,哪兒來的解決方案?)
流程控制:
很遺憾,teambition沒有提供這樣的流程控制,也沒有地方可以設定這樣的流程控制,而jira預設的bug流程控制就是如此。
好了,這麼做,我們看一下問題是不是解決了呢?
例如:有同學會問,沒有有了已拒絕,暫不修復的狀態,開發同學處理bug時,遇到不好解決的,需要以後再修怎麼辦?測試誤報無法重現怎麼辦?答,狀態改為「已解決」,解決方案選「推遲處理」,「無法重現」。這裡面讓開發同學感到比較彆扭的時,我明明沒有解決這個問題,為毛讓我選「已解決」?所以我就是我在上面提出的注意點了,因在中文表達中,解決了也有修復了的意思,我們所說的已解決,通常被理解為「已經修復」的意思。比如說乙個開發跟專案經理說這一天他解決了10個bug,專案經理會覺得不錯哦,小伙辛苦了,但是一看10個bug中有9個bug給的解決方案都是「不予修復」,實際上只修復了乙個問題。想必專案經理內心應該會飄過幾隻。。。,他們應該會說,以後這種情況不要跟我說你解決了10個bug,實事求是,解決了1個就說1個。我建議在匯報工作時,應該區分使用「修復」和「解決」二字,做到有效溝通,避免歧義(如,我今天解決了10個bug,其中修復了1個,另外9個我認為不是bug,不需要修)。有同學會說,原來你的解決方案就是玩文字遊戲啊。我想強調的是這並不是文字遊戲,因為在團隊協作中,溝通是非常重要的,採用bug管理工具對bug進行管理,也是溝通的一種手段(要不每天口頭通知bug的狀態和修改情況,絕對的混亂和沒有效率啊)。
強調:正確的區分「已解決」和「已修復」,是理解狀態與解決方案區別的關鍵。「已解決」只是狀態,並不代表「已修復」。選擇其他的方案,也可以視為對問題的「解決」。廣義上說只要有「解決方案」,就是「已解決」。其實,resolved應用到bug處理流程上時,翻譯為「已處理」更貼切,更不容易產生歧義,就是說這個bug已經處理過了,至於如何處理的,可以去看解決方案字段。已處理肯定不會等同於已修復,選擇「不予修復」也代表處理過了,至少說明這個bug被看過了,並且做出了處理意見。這就是我們想要的,我們希望「已解決」或叫「已處理」這個狀態,能代表「這個bug已經被人處理過了,處理人已經給出了解決方案」這個含義。
狀態和解決方案各司其職,狀態清晰了,媽媽再也不用擔心bug的統計問題了。比如,統計所有未修復就關閉的bug,只要查詢解決方案不等於「已修復」,且狀態是「關閉」的bug就可以了。再比如,統計所有開發已經做出了響應,但是測試還沒有處理的bug怎麼辦?篩選出所有「已解決」的bug就可以了,首先所有已解決的bug一定是開發響應過,選擇了解決方案的,而測試處理過的要麼就是關閉了,要麼就是重新開啟,所有仍處於已解決狀態的,一定是待測試處理的。通過上面兩個例子,是不是將原來頭疼的問題,很簡單就解決了呢?
狀態狀態用在專案進行過程中,為專案的進度提供統計支援,統計結果是實時變動的。由於其最終的值都是關閉,故不適合做專案結束後的統計分析。
解決方案
注:關於統計bug的有效性,例如,可以將已修復,不予修復,推遲處理的bug視為有效bug,無法重現,重複,設計如此,外部原因等可以統計為無效bug,具體如何定義有效bug和無效bug的範圍可以由質量部門和專案組共同決定
簡單的說一說mmap
mmap memory map,就是記憶體對映 簡單的說就是將檔案對映到使用者的位址空間中。這麼做有什麼好處呢?1.傳統檔案訪問方式是,首先用open系統呼叫開啟檔案,然後使用read,write等呼叫進行順序或者隨即的i o.這種方式是非常低效的,每一次i o操作都需要一次系統呼叫.而通過mmap...
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo foo 下面是iife形式的函式呼叫 functionfoo 函...
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo window console.log a 2 js的模組就是函式...