團隊最近做過的5個項目的數(shù)據(jù)資料(這里當然歷史項目越多越好,不過筆者這個朋友的團隊只有5個項目的記錄),得到如下數(shù)據(jù):
項目工期(y): 424 267 90 331 160 (人時)
用例數(shù)量(x1): 37 20 6 18 12
實體數(shù)量(x2): 15 9 4 11 14
數(shù)據(jù)表數(shù)量(x3): 25 18 7 16 18
下面就是計算各個相關系數(shù)了,計算相關系數(shù)是一項機械且乏味的活動,一般都會交由相應的工具去完成。不過您要是感興趣,也可以自己代入上述公式手算。下圖是我用Excel計算的結(jié)果:
一般來說,|r|大于0.7就有很好的相關性了,而從計算結(jié)果可以看出,用例數(shù)量x1和工期y的相關系數(shù)達到0.93,最為優(yōu)秀,而數(shù)據(jù)表數(shù)量x3也達到0.83,唯有實體數(shù)量x2的相關系數(shù)僅為0.65,質(zhì)量較差。因為|r(x2,y)|<0.7,所以這里首先排除掉。
到了這里似乎我們可以順利成章選擇x1作為最終Proxy,但是還有一點要考慮,就是顯著性。所謂顯著性就是在偶然情況下得到此結(jié)果的概率,如果顯著性不足,說明這個結(jié)果不可靠。顯著性t值的計算公式如下:
因為n=5,這里自由度為3,然后查詢t分布表,得到95%預測區(qū)間為3.182。因為一般顯著性<0.05則認為顯著性較好,所以如果t的值大于3.182,我們則可以接受。不過如果使用工具的話,一般可以用t檢測直接得出顯著性,這里我用Excel得到r(x1,y)的顯著性為0.006,r(x3,y)的顯著性為0.007(如圖2所示),都遠小于0.05,顯著性均非常好。所以根據(jù)擇優(yōu)錄取原則,我們選擇x1需求文檔中用例數(shù)量作為預測Proxy。
得到x的值
在上文中,我們通過相關性和顯著性分析,最終決定使用需求文檔中的用例數(shù)量作為x。下面就是要確定x的值,這個不必多說,直接從需求文檔中得到相應的數(shù)量即可。
確定相關函數(shù)f
知道了x的值,下面就是要確定相關函數(shù)了。這一步是最艱難也是最有技術性的,因為相關函數(shù)不但和數(shù)理因素相關,還與開發(fā)團隊、團隊中的人以及管理方法有關。如果人員變動很大或管理方法做了很大的調(diào)整,歷史數(shù)據(jù)可能就不具備參考價值了。不過如果團隊的開發(fā)水平和管理方法沒有重大變動,這個函數(shù)還是相對穩(wěn)定的。
在函數(shù)選型上,一般會選擇線性函數(shù),當然我個人對此是十分懷疑的,但是這里為了簡單起見,我們姑且照例使用線性函數(shù)作為預測模型。這樣可以建立一元線性回歸模型如下:
這個函數(shù)并不是簡單的線性函數(shù),而是包含了一個隨機變量ε,這是一個服從正態(tài)分布的隨機變量。上述模型的直觀意義可以如下描述:a代表與x即用例數(shù)量無關的起始時間,b代表每一個用例所耗費的平均時間,而ε代表開發(fā)中的不確定性。在不同的團隊中或不同的管理方法下,a,b和ε都是不一樣的,但是當團隊和管理方法相對穩(wěn)定,可以認為a,b和ε是可通過歷史數(shù)據(jù)估計的。而因為ε的期望為0,所以只要給出a和b的合理估計,就可以得到y(tǒng)的一個無偏估計。
下面我們估計a和b的值。估計方法有很多,如曲線擬合法或最小二乘法。這里我們采用最小二乘法進行估計。
最小二乘法估計的基本原理如下:
求極值可以使用微積分中的求極值方法,首先令Q(a,b)對a和b分別求偏導,并令偏導為零,得如下方程組:
經(jīng)過一系列計算和推導,最終可得到:
將以前的歷史數(shù)據(jù)代入上述方程,就可以得到a和b的最小二乘估計。同樣,這種機械而乏味的計算一般交由工具去完成。我用Excel得到a和b的估計分別為56.251和10.653.Excel分析結(jié)果如圖3所示:
根據(jù)估計結(jié)果,我們可以得出相關函數(shù)為y=56.25