王銀娟 臺憲青 馬治杰
(江蘇物聯網研究發展中心數據與服務研發中心 江蘇省無錫市 214135)
計算機軟件是由專業人員開發并長期維護的軟件產品[1]。一套完美的軟件產品離不開軟件測試人員的支持,軟件產品在長期運行中,不可避免會出現軟件故障,阻礙產品正常使用,因此,在軟件產品上線前,需軟件測試人員進行一系列的測試工作,發現缺陷,并由開發人員及時修復。為此,有必要做軟件測試的缺陷進行分析和度量的研究,并最終形成測試報告,以便產品相關人員查閱,以作依據。
軟件缺陷,是指計算機軟件或程序中存在的某種破壞正常運行能力的錯誤、隱藏的功能缺陷等[2]。缺陷的存在會導致軟件產品在某種程度上不能滿足使用者的需要。在IEEE729-1983中對缺陷有一個標準的定義:從產品內部看,缺陷是軟件產品開發或維護過程中存在的錯誤、毛病等各種問題;從產品外部看,缺陷是系統所需要實現的某種功能的失效或違背。
一個完整的軟件缺陷,主要的組成元素有:缺陷的編號、標題、基本信息、測試軟硬件環境、測試軟件版本、缺陷類型、嚴重程度、缺陷等級、復現步驟、實際結果描述、期望結果、截取缺陷的圖像、備注信息等,確保每個缺陷是準確、清晰、簡潔、完整、一致。
通過分析軟件缺陷,可幫助公司獲取更多的產品價值,主要有:分析測試活動工作量及輸出價值、提供素材,供測試或開發過程進行改進、歸納統計,反映內在問題、幫助測試人員確定一個測試缺陷基線,方便未來測試目標的選定等。也許,各個公司或測試人員對缺陷的分析理解都不一樣,但大體方向都是為了以后工作做的更好,為我們最終的產品服務。
在測試過程中發現的缺陷,一般可分為如下幾類,分別為:
(1)代碼錯誤:不滿足需求、功能實現有誤等;
(2)設計缺陷:頁面美觀性、協調性、錯別字等;
(3)用戶體驗:對產品、項目的建議性意見等;
(4)性能問題:性能測試時使用,如:網絡延時、內存問題等;
(5)安全問題:業務功能存在的安全問題;
(6)接口問題:涉及有模塊間數據傳遞時使用;
(7)配置問題:由于提供的配置不當或者配置不能夠滿足實際要求而出現的問題。
上述缺陷分類表中的說明內容,也是測試人員在測試過程中,以此作為判斷問題是否為缺陷的依據,除此之外,測試人員還需要結合軟件測試準則、產品需求說明書、產品原型圖等多方面的資料進行參考驗證。
在測試過程中,除了進行缺陷分類,同時,還需要對缺陷進行嚴重等級選擇,其嚴重等級常規有如下幾種,分別為:
(1)建議缺陷:5級,測試人員對測試對象的改進意見、建議、質疑等;
(2)微小缺陷:4級,操作者不方便,但又不影響功能的操作和執行,如:界面不規范;
(3)一般缺陷:3級,次要功能沒有完全實現但不影響使用,如:提示信息不太準確;
(4)嚴重缺陷:2級,系統的主要功能部分喪失、數據不能正確保存,系統的次要功能完全喪失;
(5)致命缺陷:1級,造成系統或應用程序崩潰、死機等,主要功能完全喪失。
軟件測試缺陷優先級表示在開發進行缺陷修復過程中,以供開發參考進行缺陷修復順序,這既是確保測試工作的順利進行,也是保證軟件質量的重要環節,分別為:
(1)Low:嚴重等級5,使用率低,且非主要流程;
(2)Medium:嚴重等級為4,使用率中等,主要是從用戶體驗角度出發;
(3)High:嚴重等級為3,使用率高,主要是系統常規功能錯誤等;
(4)Very high:嚴重等級為2,使用率偏高,主要是系統業務邏輯錯誤等;
(5)Urgent:嚴重等級為1,使用率低,主要是系統崩潰等異常。
生命周期的概念是一個物種從誕生到消亡經歷了不同的生命階段,那么,在測試過程中,軟件缺陷生命周期并非測試人員提出后,就一直處于激活狀態,應該指的是一個軟件缺陷被發現、報告到這個缺陷被修復、驗證直至最后關閉的完整過程。在整個軟件缺陷生命周期中,通常是以改變軟件缺陷的狀態來體現不同的生命階段。因此,對于一個軟件測試人員來講,需要關注軟件缺陷在生命周期中的狀態的變化,來跟蹤項目進度和軟件質量。一個簡單、優化的軟件缺陷生命周期狀態,分別為:
(1)New:新建,測試人員初始提單;
(2)Assign:指派,產品負責人指派給相應開發人員;
(3)Verified:確認,開發修復后產品負責人進行確認;
(4)Open:打開,開發人員已修復,產品負責人未確認;
(5)Duplicate:重復,開發人員確認已存在重復BUG;
(6)Deferred:延期,個別異常缺陷經產品負責人確認延期處理;
(7)Reopened:激活,測試人員進行回歸驗證未通過缺陷;
(8)Rejected:拒絕,開發人員經確認非缺陷;
(9)Closed:關閉,測試人員經回歸通過后關閉。
在實際的工作過程中,軟件缺陷的生命周期基本上是不可能為:新建→指派→確認→關閉的簡單流程,因此,需要考慮到其他各種可能發生的情況,現整理出如圖1所示的一個較為復雜的軟件缺陷生命周期流轉圖。

圖1:生命周期流程圖
綜上所述,軟件缺陷在生命周期中經歷了數次的審閱和狀態變化,最終,測試人員會根據回歸測試結果來關閉軟件缺陷來結束軟件缺陷的生命周期。軟件缺陷生命周期中的不同階段是測試人員、開發人員和負責人員一起參與、協同測試的過程。軟件缺陷一旦發現,便進入測試人員、開發人員、負責人員的嚴密監控之中,直至軟件缺陷生命周期終結,這樣即可保證在較短的時間內高效率地關閉所有的缺陷,縮短軟件測試的進程,提高軟件質量,同時減少開發、測試和維護成本。
缺陷分析是將軟件開發、運行過程中產生的缺陷進行必要的收集,對缺陷的信息進行分類和匯總統計,計算分析指標,編寫分析報告的活動。對泄漏的缺陷作回歸測試和回歸分析,可以完善單元測試和集成測試的設計;缺陷分析方法有很多,常見的有單維度和多維度,即:單維度就是抽取一些像缺陷發現階段、來源、嚴重性、模塊、開發人員等單一要素進行分析;多維度是二者之間的結合,如:來源和開發人員、模塊和開發階段、激活和修復階段等多種組合方式,具體根據工作實際情況,進行選擇組合。
在單維度分析法中,可采用折線圖、因果圖等方式進行統計分析,本文采用餅圖進行各項占比值進行數據統計分析。軟件缺陷分類能通過數據數值分析的主要有模塊缺陷分布、版本缺陷數量、缺陷嚴重程度統計、缺陷解決方案統計等,通過餅圖可以直觀統計出軟件的缺陷分布占比情況,見圖2。

圖2:單維度分析法示例
在多維度分析法中,可采用直方圖、散布圖等方式進行統計分析[3],本文采用直方圖進行統計分析,直方圖中的橫坐標代表數據類型,縱坐標代表數據分析,通過直方圖可以進行功能模塊與嚴重程度對比、解決與激活缺陷量對比等多種組合,通過直方圖可以直觀統計多維度缺陷關聯關系,見圖3。

圖3:多維度分析法示例
所謂軟件缺陷度量是軟件測試度量中的一個環節,其本身并不能發現缺陷、剔除缺陷,但在實際工作過程中,有助于問題的解決,除此之外,當正確、持續的進行缺陷度量時,產品及過程中的質量屬性的數據為實施和管理過程提供了有效的參考基礎。
在真實的工作過程中,發現軟件產品的質量度量,主要集中在軟件的缺陷度量上,缺陷度量是對產品過程中產生的缺陷數據進行采集、量化,將分散的缺陷數據進行統一管理,使其變更的更加清晰,方便對缺陷數據進行分析,從而提高產品質量。
采取不同的軟件缺陷度量方法,其對應目的也不盡相同,從不同的度量角度出發,主要分為如下幾種:
(1)組織級缺陷度量,目的是了解組織的整體缺陷分布情況、客戶對組織的質量滿意程度,建立組織基線,確定后續的改進方向。
(2)項目級缺陷度量,目的是關注項目的實時質量情況,因項目會有運維期,故迭代次數可能較多,故需預測缺陷造成的發布后維護工作量。
(3)個體級缺陷度量,目的是了解個體缺陷產生的詳細原因,并為開發提供一定的依據,方便開發進行及時修復。
按上述缺陷度量方法,前兩者基本上是面對客戶的項目,也是實際工作中常用的方法,其測試覆蓋率偏低,其主要原因是面對客戶的項目,在運維期,可能會出現需求的變更;對于第三種,基本上是針對公司自研產品,需通過不斷迭代開發復測等流程循環,耗費一定的人力、精力,且在執行過程中,需開發組、測試組、需求組等多方面的工作協調,使其測試周期相對較長,故在實際工作中,需根據不同的測試對象選擇不同的缺陷度量方法。
在實際工作中,根據測試對象確定好度量方法后,還需進一步選擇相應的缺陷度量元,所謂缺陷度量元是指缺陷度量的各個指標,通過度量指標來進行軟件缺陷度量。
(1)缺陷模塊分布:反映缺陷按類型、優先級、嚴重程度等因子,進行缺陷量統計分析,獲取各模塊等下的缺陷數目。
(2)缺陷總體分布:反映缺陷整體上分布情況,通過總體分布圖可分析出軟件缺陷主要集中點,可幫助開發人員快速找出問題根源,及時修復,提高測試對象質量。
(3)缺陷到達量:反映某一特定時間內某類缺陷出現次數,產品發布后需對缺陷進行跟蹤,在跟蹤缺陷過程中可對缺陷進行分類統計,通過對缺陷到達量統計分析可有效提高產品質量。
(4)缺陷修復率:反映測試人員提測質量、開發人員修復質量,根據該指標可間接反映測試對象功能平穩性。
(5)缺陷移除率:反映在產品研發各個階段中,明確每個階段發現引入的缺陷及問題的能力,在分析過程中,可與缺陷修復率結合統計分析。
(6)缺陷密度:反映產品每個功能點的缺陷數,缺陷密度越低則產品質量越高,缺陷密度與缺陷率有著一定關聯。
(7)缺陷總體趨勢:反映新增缺陷數、被解決缺陷數、遺漏或激活缺陷數等各種缺陷狀態下變化趨勢,從而了解缺陷是否被及時修復。
(8)測試用例執行率:反映在測試過程中,測試人員依據測試用例對測試系統進行測試驗證對比,可判斷系統是否按需求進行開發,同時反映需求變更情況。
一般來說,為了達到判斷出缺陷產生原因的目的,基本度量元可以選擇缺陷數量排行、缺陷發現時間、缺陷清除時間,派生度量元可選擇整體缺陷清除率、階段缺陷清除率等。
3.2.1 缺陷到達量分析法
缺陷到達量分析法是指在單位時間內,新建缺陷的數量。通過統計分類進行分析某一時間段內測試引入的缺陷類型、嚴重程度等缺陷,結合統計結果,可方便產品負責人與客戶進行交流溝通,進一步確認解決方案,見圖4。

圖4:月度缺陷量統計分析圖
圖4中統計結果可分析得出:一是缺陷量在前四月內是呈下降趨勢;二是6月缺陷量有回升現象,主要體現在低嚴重等級上;三是缺陷數的嚴重級別呈正態分布等,具體可根據實際工作場景進行詳細分析。
3.2.2 缺陷移除率分析法
缺陷移除率是指在產品研發各階段中,明確和解決本階段引入的缺陷的比例。依據軟件測試基礎理論,測試應盡早介入到項目中,一般要求在需求分析階段,并且要通過靜態測試方法對各個階段的產出進行驗證,見圖5。

圖5:階段缺陷移除率統計分析圖
圖5中統計結果可分析得出:一是開發階段缺陷移除率較低,說明開發過程中可能還存在較大問題;二是驗收冒煙階段,需求缺陷量為0,說明需求團隊與客戶的溝通順暢。
3.2.3 缺陷修復率分析法
缺陷修復率是指在一定單位時間內,提出的缺陷、被修復的缺陷、遺留的缺陷數量的對比,該方法是相對比較直觀的一種報表,見圖6。

圖6:缺陷修復率統計分析圖
圖6中統計結果可分析得出:一是缺陷提出數量在經歷過穩定下降后,在項目后期又出現了回升現象;二是開發修復能力在5月出現下滑現象,說明開發人員的工作可能出現了變動或抽調;三是項目在進行驗收結尾階段,還存在缺陷遺留現象,根據圖表中的數據可以分析得出當前產品整體缺陷量及開發測試進度等情況。
總之,軟件測試是軟件開發過程中必不可少一環節,其軟件產品質量與產品運行狀態是息息相關的[1]。因此,需重點掌握軟件缺陷分析及度量方法,它們是針對軟件開發項目、過程及產品進行數據定義、收集及分析的持續性定量化的過程。有效的分析及度量的作用在于能夠幫助團隊認清自身的能力,理解、評價、控制、預測和改進軟件工作產品或軟件過程。