戰(zhàn):從工時(shí)預(yù)測(cè)到項(xiàng)目排期)
1. 為什么我還在聊 COCOMO II估工時(shí)這件事從來不是拍腦袋做項(xiàng)目最怕什么不是技術(shù)選型翻車而是辛辛苦苦寫了三個(gè)月老板問“還要多久”你只能憋出一句“感覺快了”。這種感覺驅(qū)動(dòng)的估算我見過太多翻車現(xiàn)場(chǎng)要么過度樂觀要么被某個(gè)強(qiáng)勢(shì)角色帶著節(jié)奏走。所以當(dāng)有人問“項(xiàng)目工作量到底怎么估”我第一個(gè)推薦的就是 COCOMO II——一個(gè)把軟件成本估算從“感覺”變成“公式”的模型。COCOMO 是 Constructive Cost Model 的縮寫第二代 COCOMO II 解決的核心問題很樸素在軟件項(xiàng)目不同的階段用當(dāng)前能拿到的信息量估算出合理的開發(fā)工作量、工期和人力投入。它最大的特點(diǎn)是按項(xiàng)目所處階段提供三種子模型應(yīng)用組裝模型、早期設(shè)計(jì)模型、后架構(gòu)模型。階段越靠后、信息越充分估算的顆粒度就越細(xì)、參數(shù)就越完整。這篇內(nèi)容適合誰一句話凡是需要回答“這個(gè)項(xiàng)目要多少人、做多久”的人——項(xiàng)目經(jīng)理、技術(shù)負(fù)責(zé)人、售前、外包接單的團(tuán)隊(duì)——都值得讀完。后面我會(huì)把三種子模型、兩套核心參數(shù)規(guī)模因子和成本驅(qū)動(dòng)因子、完整算例和踩坑記錄一次講清楚既有公式原理也有可以直接拿走的操作步驟。1.1 一句話說清 COCOMO II 到底在算什么COCOMO II 的核心輸出只有三個(gè)數(shù)工作量PM單位人月、日歷工期TDEV和平均人力PM / TDEV。它不直接回答“要花多少錢”但一旦有了人月和工期再疊加上人力單價(jià)、差旅、管理成本報(bào)價(jià)自然就出來了。它的輸入也分兩類一類是規(guī)模Size后架構(gòu)模型里用千行源代碼KSLOC或者功能點(diǎn)FP應(yīng)用組裝模型里用對(duì)象點(diǎn)Object Points另一類是項(xiàng)目的“屬性畫像”也就是規(guī)模因子和成本驅(qū)動(dòng)因子。說白了模型就是一句話規(guī)模決定基準(zhǔn)工作量屬性決定放大還是縮小這個(gè)基準(zhǔn)。理解了這個(gè)邏輯你就不會(huì)被公式里那一堆字母嚇到。1.2 模型估算和“拍腦袋”差在哪我見過太多團(tuán)隊(duì)這樣估工期需求評(píng)審會(huì)上產(chǎn)品經(jīng)理說“這個(gè)功能不難兩周吧”于是兩周就寫進(jìn)了計(jì)劃。問題不在于兩周這個(gè)數(shù)字本身而在于這個(gè)數(shù)字沒有任何可追溯的推導(dǎo)過程。COCOMO II 的價(jià)值不是“算得準(zhǔn)”而是“算得明白”為什么是這個(gè)數(shù)字、哪些因素把它推高了、哪些因素把它壓低了全都擺在那兒人人都能復(fù)核。模型當(dāng)然不是萬能的。它的輸入本身依賴人的判斷評(píng)分評(píng)錯(cuò)結(jié)果自然跑偏。但和拍腦袋相比它至少給了團(tuán)隊(duì)一個(gè)討論的錨點(diǎn)有爭(zhēng)議就回到某個(gè)因子上去吵而不是在最終工期上互相扯皮。這在我看來就是它最大的價(jià)值——把估算從“立場(chǎng)之爭(zhēng)”變成“參數(shù)之爭(zhēng)”。2. 三種子模型項(xiàng)目階段不同估算的顆粒度就該不同COCOMO II 最重要的設(shè)計(jì)思想是承認(rèn)“信息是不均勻的”。需求剛起步時(shí)你連模塊列表都列不全卻非要用后架構(gòu)模型去做精細(xì)測(cè)算那是自欺欺人反過來架構(gòu)都定了還只用七個(gè)參數(shù)粗算也是浪費(fèi)。所以它把項(xiàng)目分成三種典型階段每個(gè)階段配一個(gè)子模型各干各的活。2.1 應(yīng)用組裝模型需求還沒成型時(shí)的快速摸底這是最粗的一個(gè)子模型我通常會(huì)在兩個(gè)場(chǎng)景用它一個(gè)是項(xiàng)目還沒批、需要快速給領(lǐng)導(dǎo)一個(gè)量級(jí)判斷一個(gè)是做原型驗(yàn)證想看看這個(gè)想法到底值不值得投入。它的計(jì)量單位不是代碼行而是對(duì)象點(diǎn)Object Points。對(duì)象點(diǎn)的計(jì)數(shù)邏輯不復(fù)雜把系統(tǒng)要交付的界面屏幕、報(bào)表和第三代語言模塊按各自的復(fù)雜度簡(jiǎn)單、中等、困難加權(quán)數(shù)出對(duì)象點(diǎn)總數(shù)。然后再乘上一個(gè)“去重用比例”算出新對(duì)象點(diǎn) NOPNew Object Points。最后除以一個(gè)生產(chǎn)率參數(shù) PROD就是工作量PM NOP / PRODPROD 取值范圍大致在 4 到 50 之間取決于開發(fā)者的經(jīng)驗(yàn)和開發(fā)環(huán)境的成熟度。新手團(tuán)隊(duì)可能只有 4 到 7資深團(tuán)隊(duì)配合成熟的組件庫可以到 25 到 50。舉個(gè)例子一個(gè)數(shù)據(jù)錄入原型數(shù)出來大概 200 個(gè)對(duì)象點(diǎn)給一個(gè)熟手團(tuán)隊(duì)按 PROD 25 算工作量就是 200 / 25 8 人月左右十分鐘就能給出一個(gè)量級(jí)判斷。這個(gè)模型精度確實(shí)一般但勝在便宜適合做“方向盤級(jí)”的決策。2.2 早期設(shè)計(jì)模型需求有方向、架構(gòu)還沒定型項(xiàng)目正式立項(xiàng)、需求大體方向定了但架構(gòu)還沒評(píng)審這時(shí)候用早期設(shè)計(jì)模型。它支持用功能點(diǎn)或未調(diào)整的代碼行來估算規(guī)模成本驅(qū)動(dòng)因子也從后架構(gòu)模型的十七個(gè)壓縮成了七個(gè)RCPX產(chǎn)品可靠性與復(fù)雜度、RUSE復(fù)用性、PDIF平臺(tái)難度、PERS人員能力、PREX人員經(jīng)驗(yàn)、FCIL設(shè)施條件、SCED進(jìn)度約束。為什么只有七個(gè)因?yàn)樾畔⒉粔蚰愀緵]法精確區(qū)分“數(shù)據(jù)庫大小”和“產(chǎn)品復(fù)雜度”對(duì)成本的影響硬拆成十七個(gè)因子反而制造虛假精度。把相關(guān)性高的因子合并是對(duì)現(xiàn)階段信息量的誠實(shí)回應(yīng)。這個(gè)階段算出來的結(jié)果通常是一個(gè)“區(qū)間”而不是一個(gè)“點(diǎn)”我一般會(huì)拿它來做立項(xiàng)預(yù)算和人力規(guī)劃的初步依據(jù)。2.3 后架構(gòu)模型架構(gòu)落地后的精細(xì)核算這是三種子模型里最常用、也最需要認(rèn)真對(duì)待的一個(gè)。架構(gòu)已經(jīng)評(píng)審?fù)昴K劃分、接口、關(guān)鍵設(shè)計(jì)都有了這時(shí)用千行源碼KSLOC或功能點(diǎn)作為規(guī)模用完整的十七個(gè)成本驅(qū)動(dòng)因子去精算。我通常在兩個(gè)時(shí)間點(diǎn)必須跑一次后架構(gòu)模型一個(gè)是詳細(xì)設(shè)計(jì)完成、開發(fā)啟動(dòng)之前作為內(nèi)部排期基線另一個(gè)是投標(biāo)階段需求說明書比較完整時(shí)作為對(duì)外報(bào)價(jià)的技術(shù)依據(jù)。這個(gè)模型篩出來的結(jié)果我也不建議當(dāng)成一個(gè)單點(diǎn)數(shù)字對(duì)外承諾而是配合敏感性分析給出一組“最可能 上下限”這樣對(duì)外匯報(bào)有底氣對(duì)內(nèi)排期有彈性。架構(gòu)都定了還估不準(zhǔn)那問題往往不在模型而在規(guī)模估算和因子評(píng)級(jí)這些輸入環(huán)節(jié)。2.4 階段切換不是一刀切實(shí)際項(xiàng)目里很少有人說“我們現(xiàn)在不做早期設(shè)計(jì)了進(jìn)入后架構(gòu)”。我的習(xí)慣是滾動(dòng)估算需求澄清一次就更新一次規(guī)模架構(gòu)評(píng)審一次就把早期設(shè)計(jì)的七因子替換成后架構(gòu)的十七因子。模型的輸出始終是個(gè)活文檔而不是立項(xiàng)時(shí)寫完就鎖死的死數(shù)字。每次刷新其實(shí)都是在強(qiáng)迫團(tuán)隊(duì)重新審視需求變化和風(fēng)險(xiǎn)這個(gè)附加價(jià)值往往比估算數(shù)字本身還重要。3. 核心公式拆解規(guī)模因子和成本驅(qū)動(dòng)因子才是發(fā)動(dòng)機(jī)三種子模型的骨架是同一套公式區(qū)別只在于規(guī)??趶胶统杀掘?qū)動(dòng)因子的數(shù)量。理解了公式你就能理解整個(gè)模型的設(shè)計(jì)意圖不理解你就只能當(dāng)一個(gè)“公式填表員”數(shù)字錯(cuò)了都不知道錯(cuò)在哪兒。3.1 主公式PM、Size、指數(shù)、EM 的關(guān)系后架構(gòu)模型和早期設(shè)計(jì)模型都基于下面這個(gè)式子PM A × Size^E × ∏EM_i其中PM 是工作量單位人月A 是校準(zhǔn)常數(shù)模型默認(rèn)給 2.94這是提出者用當(dāng)年大量項(xiàng)目數(shù)據(jù)擬合出來的基線Size 是規(guī)模后架構(gòu)模型用 KSLOCE 是規(guī)模指數(shù)它不是固定的 1.0而是由五個(gè)規(guī)模因子算出來的∏EM_i 是所有選定的成本驅(qū)動(dòng)因子的連乘。這里有個(gè)新手最容易忽略的點(diǎn)Size 頭上的指數(shù) E 不是常量。E 越大說明同樣的規(guī)模增長(zhǎng)會(huì)帶來更大的工作量增長(zhǎng)。這背后是軟件工程里一個(gè)真實(shí)規(guī)律——項(xiàng)目越大溝通成本、集成成本、返工成本都呈超線性增長(zhǎng)10 個(gè)模塊和 20 個(gè)模塊的溝通復(fù)雜度差得不是一倍是好幾倍。3.2 五個(gè)規(guī)模因子決定指數(shù)的區(qū)間E 的計(jì)算式是E B 0.01 × ΣSF_j其中 B 取 0.91SF 是五個(gè)規(guī)模因子各自的評(píng)分值。五個(gè)因子分別是 PREC項(xiàng)目先例性、FLEX開發(fā)靈活性、RESL架構(gòu)與風(fēng)險(xiǎn)解決、TEAM團(tuán)隊(duì)凝聚力、PMAT過程成熟度。每個(gè)因子分六級(jí)評(píng)分從 Very Low 到 Extra High對(duì)應(yīng)數(shù)值如下表規(guī)模因子Very LowLowNominalHighVery HighExtra HighPREC 先例性6.204.963.722.481.240.00FLEX 開發(fā)靈活性5.074.053.042.031.010.00RESL 架構(gòu)與風(fēng)險(xiǎn)解決7.075.654.242.831.410.00TEAM 團(tuán)隊(duì)凝聚力5.484.383.292.191.100.00PMAT 過程成熟度7.806.244.683.121.560.00打分邏輯也很好理解先例性越高、架構(gòu)風(fēng)險(xiǎn)解決得越好、團(tuán)隊(duì)越默契、過程越成熟評(píng)分值越小指數(shù) E 就越低。最理想情況下五個(gè)值全取 0E 0.91規(guī)模增長(zhǎng)帶來的工作量增長(zhǎng)接近線性最差情況下五個(gè)值全取最大E 約等于 1.23規(guī)模翻倍工作量要翻接近 2.3 倍。這就是模型對(duì)“混亂大項(xiàng)目”最直白的懲罰。3.3 十七個(gè)成本驅(qū)動(dòng)因子后架構(gòu)模型的主戰(zhàn)場(chǎng)后架構(gòu)模型把成本驅(qū)動(dòng)因子分成四組總共十七個(gè)每個(gè)因子評(píng)六級(jí)對(duì)應(yīng)一個(gè)乘法系數(shù)Effort MultiplierEM。EM 大于 1 表示這個(gè)因素把工作量放大小于 1 表示有利因素把工作量縮小。下面這張表是我常用的速查表分組因子含義常見取值區(qū)間產(chǎn)品RELY要求的軟件可靠性0.82 ~ 1.26產(chǎn)品DATA數(shù)據(jù)庫規(guī)模0.90 ~ 1.28產(chǎn)品CPLX產(chǎn)品復(fù)雜度0.73 ~ 1.74產(chǎn)品RUSE要求的可復(fù)用性0.91 ~ 1.36產(chǎn)品DOCU文檔要求0.81 ~ 1.23平臺(tái)TIME執(zhí)行時(shí)間約束1.00 ~ 1.63平臺(tái)STOR主存約束1.00 ~ 1.46平臺(tái)PVOL平臺(tái)易變性0.87 ~ 1.30人員ACAP分析師能力1.42 ~ 0.71人員PCAP程序員能力1.34 ~ 0.73人員PCON人員連續(xù)性1.29 ~ 0.81人員APEX應(yīng)用經(jīng)驗(yàn)1.22 ~ 0.81人員PLEX平臺(tái)經(jīng)驗(yàn)1.19 ~ 0.85人員LTEX語言與工具經(jīng)驗(yàn)1.20 ~ 0.84項(xiàng)目TOOL軟件工具使用1.17 ~ 0.78項(xiàng)目SITE多點(diǎn)開發(fā)1.22 ~ 0.80項(xiàng)目SCED進(jìn)度約束1.43 ~ 1.00注意 ACAP 這類人員因子數(shù)值方向是反的能力越高 EM 越小比如 ACAP 評(píng)到 Very High 時(shí) EM 只有 0.71等于給工作量打七折。這組因子的連乘可以輕松讓最終結(jié)果差出兩三倍所以評(píng)級(jí)必須認(rèn)真不能全拍 Nominal。3.4 早期設(shè)計(jì)模型為什么只需要七個(gè)因子早期設(shè)計(jì)模型的七個(gè)因子本質(zhì)是把十七個(gè)因子按相關(guān)性合并后的結(jié)果RCPX 合并了 RELY、DATA、CPLX 和 DOCUPDIF 合并了 TIME、STOR 和 PVOLPERS 合并了六個(gè)人員因子FCIL 合并了 TOOL 和 SITE再單獨(dú)留一個(gè) RUSE 和一個(gè) SCED。這樣在信息不完整時(shí)打分更穩(wěn)不會(huì)因?yàn)橛膊鸪鍪邆€(gè)因子而制造虛假精度。這背后是一個(gè)工程原則估算的精度應(yīng)當(dāng)匹配信息的完備度。信息不足時(shí)強(qiáng)行細(xì)分打分全是猜結(jié)果反而不如合并后粗評(píng)可靠。所以階段越早參數(shù)越少不是模型偷懶而是它在替你規(guī)避“虛假精確”的陷阱。3.5 從工作量到日歷工期有了 PM 還不夠還得算日歷工期。COCOMO II 的工期公式是TDEV C × PM^F其中 C 默認(rèn) 3.67F D 0.2 × (E - B)D 默認(rèn) 0.28。平均人力約等于 PM / TDEV。這里有個(gè)關(guān)鍵點(diǎn)如果老板要求壓縮工期不能直接拿 TDEV 數(shù)值除以 2因?yàn)?SCED 因子會(huì)在工作量公式里起作用——強(qiáng)行壓工期工作量反而會(huì)上升。這是模型里我最欣賞的一個(gè)設(shè)計(jì)它內(nèi)置了對(duì)“趕工幻覺”的警告你以為壓縮時(shí)間能省錢其實(shí)是在燒更多的人力成本。4. 一次完整的估算實(shí)操從定場(chǎng)景到出結(jié)果理論講完下面我?guī)Т蠹易咭槐橥暾墓浪懔鞒獭榱四芡耆珡?fù)現(xiàn)我會(huì)用一個(gè)虛構(gòu)的內(nèi)網(wǎng)管理系統(tǒng)項(xiàng)目做例子規(guī)模按 20 KSLOC 算。你照著走一遍就能把整套流程跑通。4.1 第一步明確估算場(chǎng)景選擇子模型先問三個(gè)問題需求到什么程度了架構(gòu)定了嗎這個(gè)估算給誰用如果只是立項(xiàng)前的量級(jí)判斷用應(yīng)用組裝模型或早期設(shè)計(jì)模型如果是要排開發(fā)基線或?qū)ν鈭?bào)價(jià)用后架構(gòu)模型。我們的例子假定已經(jīng)完成架構(gòu)評(píng)審所以選后架構(gòu)模型。這一步別跳過選錯(cuò)模型是整個(gè)估算里最傷筋動(dòng)骨的錯(cuò)誤后面再精細(xì)都白搭。4.2 第二步把需求翻譯成規(guī)模規(guī)模是估算里最影響結(jié)果的輸入。后架構(gòu)模型里規(guī)模指新開發(fā)的代碼量單位 KSLOC。怎么估一般用三種辦法交叉驗(yàn)證一是類比參考?xì)v史項(xiàng)目每千行的規(guī)模二是分解把系統(tǒng)拆成模塊逐個(gè)估再匯總?cè)侨c(diǎn)估算每個(gè)模塊給出樂觀值、最可能值、悲觀值按 (O 4M P) / 6 求期望這個(gè)公式也叫 PERT 加權(quán)。注意幾個(gè)口徑坑注釋和空行通常不計(jì)入有效源碼行自動(dòng)生成的代碼要單獨(dú)說明一般不計(jì)入或打很低折扣復(fù)用代碼不是零成本改造工作量按當(dāng)量規(guī)模折算。比如從開源組件里拿來的代碼如果只改 10%就該按改造工作量折算而不是把整段代碼都算成你的開發(fā)規(guī)模。我們估下來這個(gè)系統(tǒng)新代碼 20 KSLOC復(fù)用和改造部分折算后等價(jià)規(guī)模仍按 20 KSLOC 處理。4.3 第三步逐項(xiàng)評(píng)級(jí)這一步是估算精度的心臟。建議拉上技術(shù)負(fù)責(zé)人、一線開發(fā)、測(cè)試負(fù)責(zé)人一起打分背靠背評(píng)完再統(tǒng)一討論避免“一個(gè)人說了算”。我自己會(huì)準(zhǔn)備一張?jiān)u定表每個(gè)因子都寫下評(píng)級(jí)理由哪怕是“參考了上次項(xiàng)目的數(shù)據(jù)庫復(fù)雜度”這種一句話理由都比直接填數(shù)字強(qiáng)。為方便理解我們這個(gè)例子的評(píng)分設(shè)定如下五個(gè)規(guī)模因子分別取 Nominal、High、Nominal、High、Low對(duì)應(yīng)數(shù)值 3.72、2.03、4.24、2.19、6.24合計(jì) 18.42十七個(gè)成本驅(qū)動(dòng)因子里可靠性、數(shù)據(jù)庫規(guī)模、文檔要求偏高平臺(tái)約束寬松人員能力和經(jīng)驗(yàn)中上工具使用較好。具體評(píng)級(jí)不必糾結(jié)重點(diǎn)是走通流程每個(gè)評(píng)級(jí)都要有依據(jù)依據(jù)越硬結(jié)果越可信。4.4 第四步代入公式算給你看先算指數(shù) EE 0.91 0.01 × 18.42 1.0942再算規(guī)模的冪20^1.0942 ≈ 26.5然后連乘十七個(gè) EM。這一步最容易漏乘我建議在電子表格里用 SUM 和 PRODUCT 函數(shù)自動(dòng)算避免手疊。假設(shè)各因子評(píng)級(jí)代入后連乘等于 0.645——含義是這些“有利因素”整體把基準(zhǔn)工作量壓掉了約 35%。最后代入主公式PM 2.94 × 26.5 × 0.645 ≈ 50.2 人月再算工期F 0.28 0.2 × (1.0942 - 0.91) 0.3168TDEV 3.67 × 50.2^0.3168 ≈ 3.67 × 3.47 ≈ 12.7 個(gè)月平均人力 ≈ 50.2 / 12.7 ≈ 4 人也就是說按這個(gè)屬性畫像大概需要 4 到 5 人左右的團(tuán)隊(duì)干一年出頭。如果你心里先入為主覺得“20 千行三個(gè)月搞定”現(xiàn)在這個(gè)數(shù)字可以幫你冷靜一下。這不代表模型絕對(duì)正確但至少它把“20 千行需要多少成本”這件事從主觀感覺變成了可討論的公式推演。4.5 第五步結(jié)果解讀與敏感性分析我不建議直接把 50.2 人月當(dāng)作最終答案。更實(shí)際的做法是對(duì)幾個(gè)不確定因子做敏感性分析比如把 ACAP 從 High 降到 Nominal工作量可能漲十幾個(gè)百分點(diǎn)把 CPLX 從 Nominal 提到 High整體要再多一成。把最優(yōu)、最可能的幾種組合都算一遍得到一個(gè)大致的區(qū)間比如 42 到 72 人月再結(jié)合需求和風(fēng)險(xiǎn)定最終基線。敏感性分析最大的作用是暴露“哪些信息不確定會(huì)怎樣影響結(jié)論”。如果某個(gè)因子稍微動(dòng)一下結(jié)果就天差地別那說明當(dāng)前最大的風(fēng)險(xiǎn)就在那兒應(yīng)該優(yōu)先去把信息補(bǔ)齊而不是糾結(jié)估算數(shù)字本身。我見過太多人拿著模型算出來的單點(diǎn)數(shù)字去跟老板匯報(bào)結(jié)果被一個(gè)不確定因子打得措手不及。5. 常見問題與排查技巧實(shí)錄這部分是我用過幾年之后攢下來的實(shí)戰(zhàn)心得踩過的坑都在這兒。模型本身不復(fù)雜真正復(fù)雜的永遠(yuǎn)是輸入端的各種“人性陷阱”和“口徑陷阱”。5.1 算出來工作量“離譜”先查這三處第一處是規(guī)??趶?。最常見的錯(cuò)誤是拿整個(gè)倉庫的代碼量直接當(dāng) KSLOC把第三方依賴、自動(dòng)生成代碼、測(cè)試代碼全算進(jìn)去了。我見過有人把實(shí)際 8 KSLOC 的改動(dòng)量算成 50 KSLOC結(jié)果估算翻了近十倍。第二處是 EM 連乘漏項(xiàng)或者把 EM 相加了。必須是連乘少乘一個(gè) 0.85 的因子整體就差 15%十幾個(gè)因子下來誤差能到兩三倍。第三處是單位問題有人把 20 KSLOC 填成 20000 KSLOC指數(shù)一拉數(shù)字直接崩壞。還有一個(gè)隱蔽坑指數(shù) E 忘了按規(guī)模因子算直接拿 1.0 以外的某個(gè)“印象值”硬填。E 每差 0.1在 50 KSLOC 規(guī)模上就是 15% 左右的誤差所以五個(gè)規(guī)模因子的評(píng)級(jí)也要認(rèn)真對(duì)待不能默認(rèn)取中間。5.2 評(píng)級(jí)全是“Nominal”等于沒評(píng)我見過最典型的偷懶是所有因子全選 Nominal。這樣做不是錯(cuò)而是白白丟掉了模型最大的價(jià)值——把團(tuán)隊(duì)對(duì)項(xiàng)目的共識(shí)變成量化參數(shù)。我的做法是每個(gè)因子至少寫一條客觀依據(jù)比如“接口文檔要求達(dá)到對(duì)外發(fā)布級(jí)別DOCU 評(píng) High”“核心鏈路延遲要求 200 毫秒以內(nèi)TIME 必須考慮”。寫不出來就去查資料、去訪談而不是直接跳過。評(píng)級(jí)還有一個(gè)技巧把“和上一次項(xiàng)目相比”作為錨點(diǎn)。上次項(xiàng)目數(shù)據(jù)庫復(fù)雜度高這次差不多DATA 就參考上次的評(píng)級(jí)上次團(tuán)隊(duì)凝聚力差導(dǎo)致返工多這次換了組織形式TEAM 就可以向上調(diào)一檔。有歷史參照物比憑空打分穩(wěn)得多。5.3 新人團(tuán)隊(duì)、外包團(tuán)隊(duì)、遠(yuǎn)程團(tuán)隊(duì)怎么擺參數(shù)如果團(tuán)隊(duì)里一半是剛畢業(yè)的新人ACAP 和 PCAP 別客氣直接往 Low 甚至 Very Low 偏人員流動(dòng)大PCON 往 Low 偏遠(yuǎn)程多點(diǎn)協(xié)作、溝通鏈路長(zhǎng)SITE 和 TEAM 都不會(huì)好看。這些參數(shù)調(diào)完之后工作量常常會(huì)讓人肉疼但這也是模型的誠實(shí)之處團(tuán)隊(duì)現(xiàn)狀差成本就是高。與其把參數(shù)美化來討老板開心不如把真實(shí)成本擺出來推動(dòng)團(tuán)隊(duì)改善現(xiàn)狀。我實(shí)際遇到過項(xiàng)目因?yàn)榘?ACAP 從 Low 調(diào)成 Nominal整體工作量被壓了兩成最后開發(fā)階段瘋狂返工成本全找補(bǔ)回來還倒貼。參數(shù)美化一時(shí)爽項(xiàng)目復(fù)盤火葬場(chǎng)這句話真不是段子。5.4 手算還是上工具我自己的習(xí)慣是拿電子表格搭一個(gè)模板把 KSLOC、SF、EM 放進(jìn)去公式鏈自動(dòng)算 PM 和 TDEV再配一個(gè)小的腳本做敏感性分析批量跑。市面上也有不少商業(yè)成本估算工具優(yōu)勢(shì)是內(nèi)置了完整的校準(zhǔn)參數(shù)和歷史數(shù)據(jù)庫適合大規(guī)模組織統(tǒng)一口徑。但如果你只是中小團(tuán)隊(duì)電子表格完全夠用關(guān)鍵是保證公式正確、參數(shù)可追溯。這里分享一個(gè)模板設(shè)計(jì)思路把五個(gè)規(guī)模因子和十七個(gè)成本驅(qū)動(dòng)因子分別做成兩縱列一列填評(píng)級(jí)、一列填對(duì)應(yīng)數(shù)值然后用 PRODUCT 函數(shù)自動(dòng)連乘 EM用公式引用 SF 合計(jì)去算 E。這樣每次改評(píng)級(jí)結(jié)果自動(dòng)刷新做敏感性分析時(shí)就特別順手。6. 我實(shí)際用下來的幾點(diǎn)體會(huì)用了幾年 COCOMO II我最深的感受是它改變的不是估算方式而是團(tuán)隊(duì)討論估算的方式。以前評(píng)審會(huì)里吵的是“我覺得要三個(gè)月”“我覺得一個(gè)月就行”現(xiàn)在吵的是“RELY 憑什么評(píng) High”“CPLX 是不是低估了”。爭(zhēng)論聚焦在可驗(yàn)證的參數(shù)上反而更容易達(dá)成共識(shí)也更容易暴露需求理解的盲區(qū)。這是我一開始完全沒想到的收獲。另外一個(gè)很實(shí)用的建議是拿歷史項(xiàng)目做回測(cè)。把自己做過的兩三個(gè)項(xiàng)目翻出來把規(guī)模和評(píng)級(jí)填進(jìn)模型看看算出來的人月跟實(shí)際差多少。這個(gè)校準(zhǔn)過程比任何理論都管用——你會(huì)發(fā)現(xiàn)自己的團(tuán)隊(duì)到底偏快還是偏慢、哪些評(píng)級(jí)總是過于樂觀。把常數(shù) A 的 2.94 調(diào)成自己團(tuán)隊(duì)的校準(zhǔn)值之后模型才真正變成了“你的工具”而不是“別人的公式”。最后說個(gè)小技巧每次估算完把評(píng)級(jí)表和計(jì)算結(jié)果存成一份文檔項(xiàng)目結(jié)束之后回頭對(duì)賬。堅(jiān)持幾個(gè)項(xiàng)目你就有了屬于自己的估算基準(zhǔn)那時(shí)候你拍出來的“感覺”也會(huì)比大多數(shù)人準(zhǔn)得多。這也是我把這些寫出來的原因——估算能力是攢出來的不是天上掉下來的。模型給你骨架歷次項(xiàng)目數(shù)據(jù)給你血肉兩者合起來才是一套真正能用的成本估算體系。