引言
前兩天一個(gè)朋友給我打電話,問我如何估計(jì)項(xiàng)目開發(fā)時(shí)間。對此我很詫異,問他以前他們是怎么估計(jì)的,他說以前基本都是大家開個(gè)會(huì),大約都說說自己意見,最后負(fù)責(zé)人一拍腦袋,給出一個(gè)時(shí)間。不過這次遇到一個(gè)非常認(rèn)真的客戶,要求不但要估計(jì)出項(xiàng)目開發(fā)時(shí)間,還要明確說明具體的依據(jù)和估算方法,這下我這朋友有點(diǎn)犯難,才詢問我。后來我翻閱了一些數(shù)理統(tǒng)計(jì)和項(xiàng)目估算方面的資料,告訴了他利用一元線性回歸分析估計(jì)軟件項(xiàng)目開發(fā)時(shí)間的方法。想到這種估算需要在一些開發(fā)團(tuán)隊(duì)很常見,所以在這里整理成文。
問題的定義及數(shù)學(xué)模型
這里我們僅考慮比較簡單的一元回歸問題,即通過單一的Proxy預(yù)測項(xiàng)目開發(fā)時(shí)間。這里先說一下什么叫Proxy。Proxy叫做代理變量,簡單來說就是估計(jì)項(xiàng)目開發(fā)時(shí)間的數(shù)理依據(jù)。說白了,就是我們預(yù)測開發(fā)時(shí)間,總要有個(gè)根據(jù),例如需求中用例個(gè)數(shù)、概要設(shè)計(jì)中的實(shí)體個(gè)數(shù)、數(shù)據(jù)庫中的表的數(shù)量等等。設(shè)Proxy為x,項(xiàng)目開發(fā)時(shí)間為y,那么可以得到y(tǒng)=f(x),學(xué)過初等數(shù)學(xué)的都可以看懂,就是說開發(fā)時(shí)間是Proxy的一個(gè)函數(shù),如果我們既知道了新項(xiàng)目的x,又知道函數(shù)f,那么y就出來了。可惜天下哪有這么好的事,我們現(xiàn)在既不知道f,又不知道x,別說x的值了,甚至我們都不知道該用哪個(gè)Proxy做x。
不過也不必悲觀,經(jīng)過上面分析,我們至少明確了我們奮斗的方向:
1、找出候選的Proxy。
2、選擇最合適的Proxy作為x。
3、得到x的值。
4、確定函數(shù)f。
5、得出y。
下面我們一步一步解決各個(gè)問題。
找出候選的Proxy
雖然一個(gè)項(xiàng)目的特征量很多,不過可不是隨便一個(gè)特征量都可以當(dāng)做Proxy的。要成為Proxy,至少要滿足如下四個(gè)條件。
1)Proxy的值應(yīng)該和工作量緊密相關(guān)。
這個(gè)不用多解釋了吧,就是說Proxy的值和y的值要有相關(guān)性。關(guān)于“相關(guān)性”的概念這里先定性說一下,定量分析后續(xù)會(huì)講到。
2)Proxy應(yīng)該是能明確得出值的,沒有二義性。
這是說Proxy應(yīng)該對應(yīng)一個(gè)明確數(shù)值,是一就是一,是二就是二,不能取“不錯(cuò)”、“挺多”這種值。
3)Proxy應(yīng)該在項(xiàng)目開始階段可以得出或能較精確估計(jì)出。
這個(gè)開始階段最晚不能晚于概要設(shè)計(jì),因?yàn)楣浪愣际且婚_始進(jìn)行,所以Proxy一定要在起始階段就能得出,否則項(xiàng)目結(jié)束了誰還搞估算,實(shí)際值都出來了。
4)Proxy對于不同的實(shí)施方案是敏感的。
就是說當(dāng)開發(fā)方法、開發(fā)過程等因素變化時(shí),Proxy應(yīng)該具有一定的敏感性。
經(jīng)過上述分析,我想選用什么作為Proxy大家心里都有點(diǎn)譜了。一般來說,在估算時(shí)常被作為Proxy的有需求分析中用例數(shù)量、需求分析中功能模塊數(shù)量、概要設(shè)計(jì)中實(shí)體數(shù)量和數(shù)據(jù)庫設(shè)計(jì)中表的數(shù)量。當(dāng)然,各位也可以根據(jù)上述要求選擇自己的Proxy。在本文中,我們暫且選擇用例數(shù)量、實(shí)體數(shù)量和表數(shù)量三個(gè)Proxy作為候選。
選擇最合適的Proxy作為x
這里所謂的“最合適”,在數(shù)學(xué)上的意義就是和開發(fā)時(shí)間y的相關(guān)性最強(qiáng)。那么什么是相關(guān)性呢,從直觀意義上,兩個(gè)變量的相關(guān)性是指兩個(gè)變量關(guān)聯(lián)的緊密程度,數(shù)學(xué)上可以用相關(guān)系數(shù)表示。相關(guān)系數(shù)計(jì)算公式如下:
至于這個(gè)公式為什么能反映出兩個(gè)變量的相關(guān)性,可以去參考高等數(shù)理統(tǒng)計(jì)相關(guān)資料,本文不再贅述,只是順便說一下,r的范圍在-1~1之間,絕對值越大代表相關(guān)性越強(qiáng),如果為正值則表示兩個(gè)變量正相關(guān),否則為負(fù)相關(guān)。知道了這個(gè),我們這一步驟的目的就是找出候選Proxy中與y相關(guān)系數(shù)最大的作為x。
不過,這數(shù)據(jù)從哪里來呢?這就要從以前做過的項(xiàng)目中提取了。查閱朋友所在團(tuán)隊(duì)最近做過的5個(gè)項(xiàng)目的數(shù)據(jù)資料(這里當(dāng)然歷史項(xiàng)目越多越好,不過筆者這個(gè)朋友的團(tuán)隊(duì)只有5個(gè)項(xiàng)目的記錄),得到如下數(shù)據(jù):
項(xiàng)目工期(y): 424 267 90 331 160 (人時(shí))
用例數(shù)量(x1): 37 20 6 18 12
實(shí)體數(shù)量(x2): 15 9 4 11 14
數(shù)據(jù)表數(shù)量(x3): 25 18 7 16 18
下面就是計(jì)算各個(gè)相關(guān)系數(shù)了,計(jì)算相關(guān)系數(shù)是一項(xiàng)機(jī)械且乏味的活動(dòng),一般都會(huì)交由相應(yīng)的工具去完成。不過您要是感興趣,也可以自己代入上述公式手算。下圖是我用Excel計(jì)算的結(jié)果:
圖1
一般來說,|r|大于0.7就有很好的相關(guān)性了,而從計(jì)算結(jié)果可以看出,用例數(shù)量x1和工期y的相關(guān)系數(shù)達(dá)到0.93,最為優(yōu)秀,而數(shù)據(jù)表數(shù)量x3也達(dá)到0.83,唯有實(shí)體數(shù)量x2的相關(guān)系數(shù)僅為0.65,質(zhì)量較差。因?yàn)閨r(x2,y)|<0.7,所以這里首先排除掉。
到了這里似乎我們可以順利成章選擇x1作為最終Proxy,但是還有一點(diǎn)要考慮,就是顯著性。所謂顯著性就是在偶然情況下得到此結(jié)果的概率,如果顯著性不足,說明這個(gè)結(jié)果不可靠。顯著性t值的計(jì)算公式如下:
因?yàn)閚=5,這里自由度為3,然后查詢t分布表,得到95%預(yù)測區(qū)間為3.182。因?yàn)橐话泔@著性<0.05則認(rèn)為顯著性較好,所以如果t的值大于3.182,我們則可以接受。不過如果使用工具的話,一般可以用t檢測直接得出顯著性,這里我用Excel得到r(x1,y)的顯著性為0.006,r(x3,y)的顯著性為0.007(如圖2所示),都遠(yuǎn)小于0.05,顯著性均非常好。所以根據(jù)擇優(yōu)錄取原則,我們選擇x1需求文檔中用例數(shù)量作為預(yù)測Proxy。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評論 查看完整評論 | |