度量术语之二:应用类和开发类生产率(实际度量案例)
一個令人震驚的事實(shí)是連生產(chǎn)率這種常見度量數(shù)據(jù)都沒有一個簡單的定義。連我們?nèi)粘=?jīng)常用到的公式:生產(chǎn)率=工作產(chǎn)品/工作量(工作產(chǎn)品可以是代碼行,功能點(diǎn),也可以是任何可以計數(shù)的東西,比如文檔頁數(shù))都是錯誤的。
如果你正常嘗試使用生產(chǎn)率做度量,那么至少應(yīng)該先分為下面兩種度量數(shù)據(jù)。
注意下面的例子為了便于理解使用的是代碼行,但實(shí)際上這兩個概念是IFPUG(國際功能點(diǎn)用戶組)對功能點(diǎn)計數(shù)時做的分類。
應(yīng)用類數(shù)據(jù) Application Type
下面這段對話將產(chǎn)生一個應(yīng)用類度量數(shù)據(jù):
A:“這個軟件有多少代碼行?”
B:“等我數(shù)一下……10000行”。
A:“多少人天開發(fā)出來的?”
B:“大約100人天吧”
A:“那么生產(chǎn)率=10000行/100人天=100行/人天”
這種生產(chǎn)率是按一個應(yīng)用(Application這個詞匯的來歷)的靜態(tài)規(guī)模度量產(chǎn)生的生產(chǎn)率,過一段時間會發(fā)生戲劇性的變化:
三個月后……
B:“我們又修改了一些代碼,增加了一些代碼,但是也刪除了一些代碼”
A:“哦?”
B:“多投入了100人天,不過現(xiàn)在還是10000行。”
A:“那么現(xiàn)在的總生產(chǎn)率是:10000行/200人天=50行/人天;如果只算二期么……0,我也幫不了你了”
B:“好吧……二期算是白忙一場”
開發(fā)類數(shù)據(jù) Development Type
A:“這個軟件有多少代碼行?”
B:“一共有兩期……等我數(shù)一下……第一期100人天開發(fā)了10000行……第二期也是100人天,增加2500行,刪除2500行,修改5000行”。
A:“那么一期生產(chǎn)率=10000行/100人天=100行/人天”
B:“二期呢?”
A:“二期生產(chǎn)率=(增加2500+刪除2500+修改5000)/100人天=10000行/100人天=100行/人天”
B:“yeah!“
A:”不過,也有的體系說二期生產(chǎn)率=(增加2500+刪除2500/2+修改5000)/100人天=8750行/100人天=87.5行/人天
B:”啊?“
A:”等下……還有體系說二期生產(chǎn)率=(增加2500+刪除2500/4+修改5000/2)/100人天=……這個,你自己算吧。“
B:”好吧,總算比白忙一場好。“
如何使用?
場景一:計劃與績效考核=開發(fā)類數(shù)據(jù)
由于增刪改都要花費(fèi)工作量,所以用開發(fā)類數(shù)據(jù)做計劃和考核更加公平一些。
不過,一般采用功能點(diǎn)更加合理一些,比如在重構(gòu)中極有可能刪除大段的代碼(我們曾經(jīng)在15分鐘左右把4000行代碼重構(gòu)為55行,功能不變),而實(shí)際上應(yīng)用的變化并不大。如果用這種外界(客戶,高層)難以感受到的“變化”來做度量元,很難得到認(rèn)同。
三種體系(增刪改權(quán)值相同,或/2,或/2/4)選擇哪個好呢?
我也不知道,因?yàn)檫@三種體系都有人在用。我的建議是:
1. 如果剛剛開始做度量
隨便選擇一個方法就好了,但是請記錄下原始數(shù)據(jù)。
也就是說,要記住有多少新增,多少刪除,多少修改。
2. 數(shù)據(jù)積累比較多了
請按三種方法都計算一次,然后對比一下計算結(jié)果和實(shí)際工作量的相關(guān)系數(shù)(相關(guān)系數(shù)日后會科普一下,Excel表里變有這個函數(shù)CORREL(B1:G1,B2:G2),相關(guān)系數(shù)越高表明用這種方法做估算更接近事實(shí)。
度量分析沒有“理論上哪個最好”,只有數(shù)據(jù)本人才有發(fā)言權(quán)。
或者說,度量分析的本質(zhì)就是消除各種理論的主觀性、片面性、理想化,把發(fā)言權(quán)留給數(shù)據(jù)本身。所以自己做數(shù)據(jù)分析是免不了的事情。
場景二:需求變更控制
不過,不論有多少理由,一個軟件只修改、刪除功能而不增加功能,都不是一個正常的事情。
過多修改功能表明需求分析最初做的不好,而刪除功能則表明做了過多的無用功能。
為了約束團(tuán)隊(duì),防止他們把“改軟件”當(dāng)作工作,需要定期監(jiān)控兩者的比值:應(yīng)用類/開發(fā)類,如果這個數(shù)據(jù)不斷下降,表明大家都在修改之前的功能,很久沒有大量增加功能了。
在小而美的產(chǎn)品研發(fā)中,修改功能可能是一個常態(tài),但這不能作為開始可以不深入思考“最佳功能”的理由。
在項(xiàng)目開發(fā)尤其是外包項(xiàng)目中,只修改而不增加功能是一個災(zāi)難,因?yàn)榭蛻舳鄶?shù)時候不會為修改功能付費(fèi),他們認(rèn)為這是因?yàn)橐曳轿茨苌钊敕治鲂枨笤斐傻摹?/p>
場景三:編碼有效性
也就是用多少代碼能實(shí)現(xiàn)多少功能的問題,編碼有效性越高,則所需代碼越少。(日后有詳細(xì)文章描述)
當(dāng)然,這里的“功能”指國際標(biāo)準(zhǔn)功能點(diǎn)度量出來的功能,而不是我們平時所說的“個人理解不同規(guī)模也不同”的那種直覺功能。
在這種場景中,應(yīng)該使用:編碼有效性=總代碼行/總功能點(diǎn)數(shù)=總代碼行/應(yīng)用類功能點(diǎn)數(shù)。
比如在之前那個例子中,第二期代碼行可能還是10000行,但是如果功能點(diǎn)增加了,那么編碼有效性實(shí)際上增高了。
完整示例
下面是一個功能點(diǎn)、代碼行、編碼有效性、應(yīng)用類、開發(fā)類數(shù)據(jù)的完整應(yīng)用場景。
A:“這個軟件有多少代碼行和功能點(diǎn)?”
B:“一共有兩期……等我數(shù)一下……第一期100人天開發(fā)了10000行,200功能點(diǎn)……第二期也是100人天,增加2500行,刪除2500行,修改5000行;增加50功能點(diǎn),刪除20功能點(diǎn),修改30功能點(diǎn)”。
A:“那么一期代碼行生產(chǎn)率=10000行/100人天=100行/人天,功能點(diǎn)生產(chǎn)率=200功能點(diǎn)/100人天=2功能點(diǎn)/人天”
B:“二期呢?”
A:“二期生產(chǎn)率=(增加2500+刪除2500+修改5000)/100人天=10000行/100人天=100行/人天,功能點(diǎn)生產(chǎn)率=(增50+刪20+改30)功能點(diǎn)/100人天=100功能點(diǎn)/100人天=1功能點(diǎn)/人天”(暫時只用第一種增刪改權(quán)值算法)
B:“哪期項(xiàng)目做得快呢?“
A:“從代碼行看,一樣;從功能點(diǎn)看,一期項(xiàng)目快一倍。”
B:“以哪個為準(zhǔn)好呢?”
A:“功能點(diǎn)好,比較容易給客戶和領(lǐng)導(dǎo)交代”
B:“二期真爛。”
A:“也未必,你們的編碼有效率提升了。”
B:“怎么講?”
A:“二期完成后(不是二期開發(fā)本身),整個產(chǎn)品還是10000行,功能點(diǎn)卻增加為300,你們現(xiàn)在的代碼效率已經(jīng)達(dá)到10000/300=33行/功能點(diǎn)了(越低越好,一期是10000/200=50)”
B:“生產(chǎn)率降低,編碼有效性提高……怎么做整體評價呢?”
A:“生產(chǎn)率提高是終極目標(biāo),不過編碼有效性的提升有利于未來的生產(chǎn)率和質(zhì)量的提升。所以,現(xiàn)在總體評價是生產(chǎn)率下降了,未來要看你們以后是否能真正發(fā)揮編碼有效率的優(yōu)勢了。”
怎么樣?如果是我,如果能寫一個由數(shù)字組成的項(xiàng)目報告,我才不會寫一大堆模棱兩可的文字呢。
總結(jié)
以上是生活随笔為你收集整理的度量术语之二:应用类和开发类生产率(实际度量案例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何成为一位杰出的程序员
- 下一篇: 全球购骑士卡额度多少?一文带你了解清楚