郭 超
(TCL移動通信科技(寧波)有限公司,寧波 315040)
在我們組織里,軟件使用的缺陷管理系統BUGZILLA,不支持數據統計報表功能,項目管理缺乏數據支撐。而軟件度量提供了必要的方法論,通過對軟件、研發過程和工程人員投入的各維度度量協助項目獲取軟件研發實時決策數據,用于監控軟件研發進程中質量的高低、研發過程效率、研發工程人員效能[1]。
本文主要涉及軟件度量中缺陷度量部分,缺陷度量利用軟件度量實施過程和方法論,基于常規缺陷管理工作,定量分析產品研發進程中的缺陷實時數據。
度量的構建包含下面四個步驟,如圖1所示[6]。本文涉及前三部分。

圖1 軟件度量的實施過程
(1)定義度量:構建度量之前首要的步驟是選取要使用的指標[3]。
(2)數據收集:基于指標的定義,組織需要確定數據收集方式和收集時機。收集活動具有多樣性,非一成不變的形式和標準[6]。
(3)決策分析:包括整理和分析數據,基于共識模型支持項目經理做決策[6]。
(4)過程優化:對于度量過程中發現的項目執行流程實施改進,反饋到組織的流程資產中。
度量數據目標必須要明確,我們通過目標界定、問題構建、問題回答幾個階段來確定指標。
目標:通過缺陷數據了解產品健康狀態
問題:產品缺陷分布狀態如何?
度量:缺陷依據狀態分布,缺陷依據組分布
依據上述方法,此系統設計的度量數據指標如表1所示。其中主要關注資源、問題類型分布、效率。
根據選擇的度量指標,收集軟件過程中產生的缺陷及人力數據,是實現中最大工作量所在。其中缺陷數據來源于缺陷跟蹤系統,項目人力花費數據來源于項目人力跟蹤系統。

表1 收集數據類型
度量數據的關鍵目的是對這些收集到的數據做分析,用于指導實際項目執行的決策:
(1)項目缺陷分布如何?哪些資源組壓力大?
(2)項目資源的效率如何?需要調度調整資源?
(3)項目目前進度如何?是否有延遲?
(4)……
常用的度量分析技術,有表現技術,如:表格、散點圖、直方圖、折線圖、柱狀圖、條形圖等,有統計過程控制方法和矩陣數據分析方法等[5]。此系統會選擇柱狀圖、折線圖、表格等表現方式。

圖2 方案設計圖
此系統將主要將分為四個過程:自動化收集數據,數據分析,定時通知,決策分析,如圖2所示。
CruiseControl是自動化核心,業界成熟的持續集成工具。在項目配置過程中,利用項目模板設計,讓配置塊在不同的項目間復用,提升修改和維護效率。配置的內容包含觸發器、任務、通知模塊。
3.2.1 EXCEL模板介紹
數據分析中,我們使用了EXCEL的透視表、公式、圖表的功能,數據表主要組成如表2所示。

表2 數據分析模板
3.2.2 數據獲取
通過PERL腳本,調用VBA接口(見表3)進行數據抓取分析。缺陷數據被抓取到工作表中;再通過透視表以多個不同維度進行分析并保存在數據頁面。

表3 數據分析接口實現
GenReport 數據信息寫入XML文件,生成柱狀圖和折線圖見表3。
如下是使用的幾個關鍵的技術點。
(1)VBA與Perl的交互代碼。
$excel=Win32::OLE->GetActiveObject
( 'Excel.Application' )
$ret=$excel->run('initialize',$projIDate …,$resExcelFile,$dbPath);
(2)圖表導出代碼。
Worksheets("GRAPH").ChartObjects("A").Chart.Export FileName:=B
主要的導出圖形包含每日關鍵缺陷趨勢和每日關鍵缺陷趨勢的折線圖,缺陷依據組及優先級分布和缺陷功能模塊及優先級分布的柱狀圖。
(3)數據行獲取動態公式(OFFSET)。
=OFFSET(TYPE_ARR,4,0,COUNTA (OFFSET(TYPE_ARR,0,0,ROWS(CONFIG!$A$1:$A$40),1))-3+1,1)
(4)動態應用其他表格數據(INDIRECT)。
=IFERROR(VLOOKUP($E4,INDIRECT("'["&NINFO&"]"&NINFOTSHE&"'!"&NINFOTRNG),3,FALSE),"")
(5)Query插入代碼。數據獲取后保存在PRFR工作表。
ActiveSheet.QueryTables.Add(Connection:="URL ;" &BUGZILLA_URL)
3.2.3 數據分析
數據的分析是由數據分析工作表Speed實現,如表4所示;其數據通過公式從歷史度量數據表RDATA中獲取,通過使用EXCEL公式做趨勢分析,并得出度量數據。整個表格主要包含下面的數據:缺陷按優先級分類;缺陷按優先級分類數量;缺陷日進出變化、日進出移動平均;決策模型模擬數據。

表4 圖表導出度量項
上述數據的計算方式如下:
3.2.3.1 不同優先級的缺陷進出
缺陷出公式:當天處于關閉的缺陷數-昨天處于關閉的缺陷數
缺陷進公式:當天缺陷數-昨天缺陷數
=IF($F10<>"",SUM(當天缺陷數量)-SUM(昨天缺陷數量),"")
3.2.3.2 移動平均
五日移動平均公式:AVERAGE(前五日進或出的數量)
=IF($F10<>"",IF($E10< 時長,"",AVERAGE(前幾日進或出的數量),"")
十日移動平均公式:AVERAGE(前十日進或出的數量)
3.2.3.3 決策模型:我們決策模型比較簡單
(1)預測未來進的缺陷保持每三周(參數一,15)下降10%(參數二,BCSREASSPER=0.9)的速度。
(2)出的速度不變。
=IF($FA94>0,IF(FC93<>"",IF(MOD(MAX($FA94-1,1),15),FC93,FC93*0.9),""),IF($FA94=0,IF(CG94<>"",CG94,""),""))
此數據回答了如下問題,用于對項目的健康狀態做判定:
(1)當前的問題多久才能被關閉掉。
(2)是否會超過項目定義的結束時間,導致項目推延。
(3)如果會有延遲,在結束的時間還剩余的問題按照當前人均缺陷解決速度還需要多少額外人力。
使用的公式是:缺陷數量+進入數量-出去數量,模擬到結束時間:數據為負,表明超越目標;數據為正,表明會有推延風險。3.2.4 度量數據圖表設計
度量數據圖表主要是折線圖和柱狀圖。
(1)缺陷依據模塊及優先級分布,主要使用了柱狀圖,體現了不同模塊之間重點問題的分布關系,如圖3所示。
(2)進出缺陷移動平均數量,使用折線圖,可以展示每個參數的具體趨勢,如圖4所示。

圖3 缺陷組及優先級分布

圖4 進出缺陷移動平均
上面所述GenRepor t接口產生的XML文件會最終合并到日志文件中,再經過XSL格式化、CSS 美化郵件并發送項目干系人。
上述內容闡述了此系統的基本框架及關鍵技術實現,目前收集的度量數據已經可以指導日常的項目管理工作,亟待持續夯實。未來在度量指標方面,可以增加重點缺陷解決速度、缺陷的回歸率等;數據分析模型方面,需要不斷研究并且優化,逐漸修正盡量貼近實際項目;數據存儲方面,數據庫會更加安全、高效;數據展示方面,網頁會更具有交互性,可實時選擇決策數據組合方式。以上均是未來可以思考的方向。