在軟體工程理論中,BUG嚴重級別(severity)是用於指示軟體質量問題導致的負面影響的程度。但在大部分實際的軟體開發組織中,對BUG嚴重級別(severity)的定義和使用常常充斥著大量的爭議和分歧。甚至有些組織即使有專門的BUG嚴重級別定義文件,但是由於其描述的寬泛和模糊性,使得爭議和分歧並沒有得到有效的減輕。本文將嘗試探討工程實踐中的一些具體問題,並提出筆者的一些觀點。
BUG嚴重級別定義對於軟體開發組織來講,是一個非常重要的事情。因為它影響了如下幾個方面:
- 影響修復某個BUG的必要性和優先順序
- 衡量軟體質量的重要因子之一
接下來探討下工程實踐的具體問題:
- 沒有明確的BUG嚴重級別定義,或者BUG嚴重級別定義非常寬泛和模糊
這個問題是一個普通存在的問題,也是測試團隊和開發團隊爭議的重要源頭。有些測試團隊會把所有的軟體崩潰重啟問題都設定為較高嚴重級別,但是有時會遭到開發團隊的反對,理由是此種崩潰重啟問題只發生在一些不重要的功能的異常處理路徑上。這個問題可以用汽車故障作類比,汽車行駛過程中行車電腦出現崩潰問題和車機娛樂系統連線某款手機的藍芽出現崩潰問題,一般人都不會把兩個問題放在一個嚴重級別,因為前者的影響是極大可能導致交通事故,而後者的影響只是使用某款手機帶來不便。還有一些測試團隊將某項重要功能的任何發現BUG都設定為較高嚴重級別,但是其問題在於,BUG發生在主路徑(happy path)和異常處理路徑具有明顯不同的影響程度。後者在使用者實際使用過程中執行到的概率較低,且通常可以有辦法可以避開。最後提到一點,多數情況下測試團隊和開發團隊對同一功能同一執行路徑下的BUG嚴重等級通常具有相當的共識,一般都認同導致系統無法啟動的問題比起功能輸出錯誤結果的問題有更高的嚴重等級。因此,BUG嚴重級別定義問題的根源常常在於沒有考慮功能重要等級的明確定義和主路徑/異常處理路徑的區分。 - 隨意指定BUG的嚴重級別導致開發團隊問題修復的工作優先順序混亂或者無法評估軟體質量
基於BUG嚴重級別是衡量軟體質量的重要因子,開發團隊應當根據BUG的嚴重級別來調整BUG修復工作的優先順序。但在工程實踐中,BUG報告者有兩種極端:一種極端是將所有發現的BUG一律設定為最高或較高等級,究其原因是某些BUG報告者希望他所報告的問題都能以較高優先順序處理;另外一種極端是將所有發現的BUG一律設定為最低等級,這種情況一般是BUG系統預設嚴重級別為最低,而報告者沒有意識到他應該根據實際情況設定真實的嚴重級別或者報告者不知道如何定義嚴重級別。如果開發團隊按照錯誤的BUG嚴重級別制定工作優先順序計劃,會導致整個團隊以錯誤的優先順序來開展工作。但在工程實踐中,理智的開發團隊領導者通常會根據實際自己的嚴重性級別判斷來制定修復計劃。但這也意味著BUG嚴重級別被完全忽略,軟體質量的評估變得異常困難。 - 將BUG嚴重級別和BUG重現概率混淆在一起
當測試團隊報告了一個較高嚴重等級的BUG。但是開發團隊提出異議,認為這個BUG雖然會導致使用某項主要功能出現問題但是復現概率低(<10%),所以嚴重等級應該降低。這個就是將BUG嚴重級別和BUG重現概率混淆在一起。BUG嚴重級別和BUG重現概率是兩個相互獨立的指標,可以認為沒有交疊的地方。BUG重現概率一般來說與測試有前置條件相關,如果測試前置條件充分,理論上所有的BUG都可以100%復現。重現概率低於100%只能說明執行當前測試用例產生某個或多個未知的前置條件的概率小於100%,或者說執行當前測試用例出現這種負面影響的概率小於100%。而BUG嚴重級別是指示出現這個負面結果的影響。舉一個例子,如果某個BUG在之前的測試復現概率為10%, 後面測試用例經過修改後測試復現概率變為80%。很明顯,這個BUG的嚴重等級不應該因為測試用例的修改而改變。對於是否要修復某個BUG,應同時考慮嚴重等級和重現概率兩個因素,這個依賴於開發組織特定的質量控制策略。一般來說,如果某個BUG嚴重性極高但復現概率低,採取的行動策略應該是設法改進測試用例或者建立新的測試用例提高復現率,以提高問題修復的可能性。如果嚴重性和復現概率都很低,不需要浪費開發資源在這類問題上。對於只出現過一次再不能復現的BUG,筆者的建議是一般情況下不做修復,因為不能復現的問題常常缺少必要的資訊用於問題的定位,即使修復後也不能通過測試加以驗證。補充一次,如果測試團隊經常性上報此類問題,通常意味測試用例或測試環境的一致性有很大的問題,應該優先對此加以改進。
筆者對BUG嚴重級別管理有如下建議:
- 每個開發組織應該有一份公開且經過評審的文件明確定義BUG嚴重級別。
- BUG嚴重級別應該由功能的重要等級,主路徑/異常處理路徑,BUG產生錯誤的影響共同決定。BUG產生錯誤的影響一般可分為三級:不可恢復錯誤(系統無法啟動,系統無法升級等),影響功能使用,不影響功能使用(字元顯示拼寫錯誤等)
- 在BUG管理系統中,嚴重級別不應該允許被直接設定,而應該由BUG報告者輸入對應的用例名稱/路徑,BUG產生錯誤影響級別,由系統自動生成對應的嚴重級別。