內容簡介
《軟件估算的藝術》介紹了如何估算項目進度和成本以及在給定時間框架內可以交付的功能,講解了如何避免常見的軟件估算錯誤,個人、團隊和組織如何估算,介紹了項目中的特定活動,包括開發、管理和缺陷修復等。《軟件估算的藝術》共23章,不僅包含嚴謹的建模技術,還呈現了大量真實的、來自軟件行業的實踐經驗。
作為影響力大的專業估算指南,《軟件估算的藝術》為現實世界中的軟件項目開發成本估算提供了經濟實用的建議,尤其適合軟件行業的技術人員和技術管理人員參考與閱讀。前 言
作為成本估算人員,在成長過程中最糟糕的那三年簡直就像在五年級時做算術題。
——奧古斯。∟orman R. Augustine)
軟件估算并不困難。40年來,專家們一直在研究和撰寫關于軟件估算的文章,隨之開發出來支持準確估算的技術數不勝數。創建準確的估算是一件直截了當的事,一旦我們理解了如何創建它們。但是,并非所有的估算實踐都是直觀明了的,即便是再聰明的人也做不到獨自一人發掘出所有的優秀實踐。更何況在軟件行業中,實際上,某人是專業的開發人員并不代表此人一定是一名專業的估算人員。
估算涉及的方方面面并不像表面看起來那么簡單。許多所謂的“估算問題”,產生的原因是由于誤解了什么是估算,或者混淆了其他類似但并不相同的概念。一些直觀上有效的估算實踐并不能產生準確的結果。直接套用復雜的公式有時弊大于利,一些看似簡單的方法反而卻能產生不可思議的準確結果。
這本書提煉了40年的科學研究和幾十年的軟件行業實踐經驗,以求幫助軟件開發人員、團隊領導、測試人員和管理人員成為高效的估算人員。由于影響軟件估算的因素本身就直接與軟件開發緊密相關,所以對于軟件估算的學習在軟件行業里是廣泛適用的。
軟件估算的藝術與科學
目前關于軟件估算的研究主要集中在改善估算技術,從而使得成熟的組織可以讓項目結果落入估算結果上下浮動5%而非上下浮動10%的誤差范圍。這些技術往往有令人眼花繚亂的數學模型。理解這些模型需要很強的數學背景和長年累月的專業學習,而使用這些數學模型需要搗鼓的數值計算更是遠遠超出了我們手邊計算器的能力。這些估算技術嵌入商業軟件估算工具中會有卓越的表現。我在此將此類實踐統稱為估算科學。
然而,現實中典型的軟件組織,并非正在努力將他們軟件估算的精度從上下浮動10%提升至上下浮動5%。典型的軟件組織正在努力避免100%或更夸張的錯誤估算。其背后原因林林總總,各不相同,將在第3章和第4章詳細闡述。
下面這樣的復雜公式總是讓人自然而然地產生一種信任:
人們認為,如此復雜的公式總是能比下面這樣的簡單公式產生更準確的結果:
工作量 = 需求數量 × 平均工作量 / 需求
但是,復雜的公式不一定更好。軟件項目受到許多因素的影響,而這些因素會破壞估算科學這些復雜公式中包含的諸多假設。本書后面內容會對這些動態變化進行解釋。除此之外,還有一個原因是,大多數軟件從業者既沒有時間也沒有興趣去學習必要的大量數學知識來充分理解估算科學。
因此,本書更關注經驗法則、流程規則和簡單公式,這些對于實踐中的軟件專業人員來說是易于理解和立竿見影的。這些技術不會幫你的項目產生±5%的準確估算,但有助于把估算誤差減少到25%或更少,而這一結果正是現實中大多數項目所需要的。不管怎樣,我把這些技術稱為“估算的藝術”。
這本書借鑒了關于軟件估算的藝術性和科學性研究,但是本書的側重點還是放在軟件估算藝術之上。
本書的目的和目標讀者
關于軟件估算的文獻相當地分散。研究人員已經發表了數百篇相關文章,其中不乏諸多有用的篇章。但是,典型的軟件從業人員并沒有時間從默默無聞的技術期刊中大海撈針地找到幾十篇有用的論文。有一些以前的書籍描述了估算的科學。但這些書通常長達800~1000頁,需要讀者有深厚的數學背景,而且這些書籍的主要目標讀者是專業估算人員,即經常估算大型項目的顧問或專家。
我為軟件開發人員、團隊負責人、測試人員和管理人員寫了這本書。這些人的日常工作職責之一,就是時不時地需要為項目創建軟件估算。我相信大多數實踐者有意愿想要提高他們估算的準確性,但卻沒有時間去攻讀一個軟件估算的博士學位。這些實踐者努力掙扎在解決實際問題的第一線,在工作中經常困擾他們的是如何合理展示估算結果以被他人接受,如何盡力避免他人武斷專制地篡改估算結果。如果你也屬于這樣一類人,那么這本書就是為你而寫的。
本書中的技術廣泛適用于互聯網和內聯網開發、嵌入式軟件、零售商業軟件、商業系統軟件、全新開發項目、基于舊系統的開發、大型項目和小型項目,本質上來說,適用于各種軟件的估算。
本書亮點
聚焦于估算的藝術,本書提供了許多關于估算的真知灼見。
什么是估算?你可能認為自己早就知道什么是估算,但是一些針對這個術語的不準確用法會損害有效的估算。
導致以往估算不準的具體因素。
甄別好的估算方法和壞的估算方法。
多項技術助力親手創建良好的估算。
一些技術,可以用來幫助團隊中的其他人創建良好的估算。
一些方法,組織可以基于它們創建良好的估算。個人技術、團隊技術和組織技術之間有較大區別。
適用于敏捷項目的估算方法以及適用于傳統的、串行性(計劃驅動的)項目的方法。
一些適用于小型項目的估算方法,一些適用于大型項目的估算方法。
在圍繞軟件估算的強勢政治環境中如何進退自如。
除了可以幫助更好地理解估算概念,本書中的實踐還將幫助估算軟件項目的一些具體參數,如下所述。
開發全新產品的工作,包括時間進度、工作量和成本。
在舊系統之上再開發的時間進度、工作量和成本。
在一個特定的開發迭代中,可以交付多少軟件特性。
當時間進度和團隊規模固定時,整個項目可以交付的軟件功能數量。
除軟件開發之外,估算其他各種活動的比例,包括需要多少管理工作、需求、構建、測試和缺陷修正活動。
估算項目規劃參數,例如成本和進度之間的權衡、最佳團隊規模、應急緩沖區的設置、開發人員與測試人員的比例等。
估算項目質量參數,包括缺陷修正工作所需的時間,在軟件最終發布時仍然遺留的缺陷數量,以及其他因素。
實際工作中想要估算的任何東西。
在許多情況下,本書的實踐可以立即運用于實際工作中。
雖然,大多數實踐者并不需要更進一步,只需要運用本書中描述的概念就足以改善日常工作中的估算。但如果有個人意愿進一步學習更深奧的數學方法,本書中的概念也能為你繼續深入學習鋪下堅實的基礎。
本書不涉及的內容
這本書并不會討論如何估算那些規模超級大的項目,比如超過100萬行代碼,或者超過100個人年的項目。超大項目應該由專業的估算人員進行估算,和一般軟件從業者不一樣,這些估算行業的佼佼者閱讀過數十篇不知名的期刊文章,研究過那些800~1000頁的科學巨著,熟悉商業估算軟件,并且在估算的藝術和科學方面都游刃有余。
從哪里開始讀這本書
從哪里開始讀這本書,取決于你想從本書中獲得什么。
如果買這本書是因為現在馬上就要開始進行估算……推薦從第1章開始,然后轉到第7章和第8章。然后,請進一步瀏覽第10~20章的技巧,找到對你而言最立竿見影的技巧。順便提一句,本書的估算技巧提示在文本中均突出顯示并編號,所有技巧(總共118條)也在包含在附錄C中。
如果你想提高個人估算技能,或者想提高組織的估算跟蹤記錄,或者想對軟件有一個更深刻的綜合理解,推薦你通讀整本書。如果你想在深入細節之前先了解通用原則,那就按順序來閱讀這本書。如果想先了解細節,然后從細節中得出一般結論,可以從第1章開始,接著閱讀第7章到第23章,然后再回去閱讀跳過的前幾章。
目 錄
第I部分 估算的關鍵概念
第1章 什么是估算 3
1.1 估算、目標和承諾 3
1.2 估算與計劃的關系 4
1.3 關于估算、目標和承諾的溝通 5
1.4 用概率表述估算 6
1.5 “好的”估算的常見定義 9
1.6 估算和項目控制 12
1.7 估算的真正目的 13
1.8 “好估算”的有效定義 14
更多資源 15
第2章 你的估算能力如何 17
2.1 一個簡單的估算測試 17
2.2 探討測試結果 18
第3章 準確估算的價值 23
3.1 高估和低估,哪個更好? 23
3.2 軟件行業中一些估算的跟蹤記錄 27
3.3 準確估算的益處 30
3.4 相較于其他期望的項目屬性,可預測性的價值 31
3.5 常見估算技術的問題 33
更多資源 34
第4章 估算錯誤從何而來 35
4.1 估算中不確定性的來源 36
4.2 不確定性錐形 37
4.3 混亂的開發過程 43
4.4 不穩定的需求 44
4.5 被遺漏的活動 45
4.6 盲目樂觀 48
4.7 主觀性和偏見 49
4.8 即興估算 51
4.9 不適當的數值精度 53
4.10 其他錯誤來源 54
更多資源 55
第5章 影響估算的因素 57
5.1 項目規模 57
5.2 正在開發的軟件類型 64
5.3 人員因素 65
5.4 編程語言 66
5.5 其他影響項目的因素 67
5.6 再論規模不經濟效應 72
更多資源 74
第II部分 基本估算技術
第6章 估算技術介紹 79
6.1 選擇估算技術時的考慮因素 79
6.2 技術適用性列表 82
第7章 計數,計算,判斷 85
7.1 首先計數 86
7.2 計數對象 87
7.3 使用計算將計數結果轉換為估算 88
7.4 判斷只能作為最后的手段 90
更多資源 91
第8章 校準與歷史數據 93
8.1 歷史數據的益處:提高準確性以及其他 94
8.2 需要收集的數據 97
8.3 如何校準 100
8.4 使用項目數據改進估算 101
8.5 用行業平均數據進行校準 102
8.6 小結 104
更多資源 104
第9章 個體專家判斷 105
9.1 結構化專家判斷 106
9.2 將估算與實際進行比較 110
更多資源 112
第10章 分解與重組 113
10.1 準確計算總體期望情況 113
10.2 基于活動的項目工作分解結構進行分解 117
10.3 直接合計最佳情況和最差情況估算的危害 118
10.4 創建有意義的總體最佳和最差情況估算 121
更多資源 126
第11章 類比估算 127
11.1 類比估算的基本方法 128
11.2 關于Triad估算中不確定性的評論 132
第12章 基于代理的估算 135
12.1 模糊邏輯 136
12.2 標準組件 138
12.3 故事點 141
12.4 T恤尺碼 145
12.5 基于代理的技術的其他使用 147
12.6 更多資源 147
第13章 群體專家判斷 149
13.1 團隊評審 149
13.2 寬帶德爾菲法技術 150
更多資源 155
第14章 軟件估算工具 157
14.1 手工無法完成只能依賴于工具的事情 157
14.2 校準這些工具所需要的數據 162
14.3 無論用不用工具都應該做的事 162
14.4 可用工具總結 162
更多資源 163
第15章 多種方法的綜合運用 165
更多資源 169
第16章 一個估算得當的項目的軟件 估算流程 171
16.1 估算不當的項目的單次估算流程 171
16.2 良好估算的項目的單次估算流程 172
16.3 隨時間推移整個項目的估算流程 173
16.4 估算改進 175
16.5 如何向其他項目干系人展示重估的結果 176
16.6 估算良好的項目的示例 178
第17章 標準化的估算流程 181
17.1 標準化流程的一般要素 181
17.2 在階段-關卡流程中嵌入估算活動 182
17.3 串行項目的標準化估算流程示例 184
17.4 迭代項目的標準化估算流程示例 187
17.5 來自先進組織的標準化估算流程示例 189
17.6 改進標準化流程 191
更多資源 191
第III部分 估算所面臨的具體挑戰
第18章 估算項目規模的具體 問題 195
18.1 估算規模的挑戰 195
18.2 功能點估算 198
18.3 簡化的功能點技術 201
18.4 估算規模的技術總結 203
更多資源 204
第19章 估算工作量的具體問題 205
19.1 影響工作量的因素 205
19.2 根據規模計算工作量 207
19.3 利用估算科學計算工作量估算 208
19.4 行業平均工作量圖 209
19.5 ISBSG方法 214
19.6 比較工作量估算結果 216
更多資源 217
第20章 估算進度的具體問題 219
20.1 時間進度基本方程 220
20.2 通過與過去項目的非正式比較來計算進度 221
20.3 瓊斯的一階估算實踐 222
20.4 利用估算科學計算進度 估算 223
20.5 進度壓縮和盡可能短的 進度 224
20.6 進度和工作量之間的 權衡 227
20.7 進度估算和人員配置 限制 228
20.8 不同進度估算方法的結果比較 229
更多資源 231
第21章 估算項目規劃參數 233
21.1 估算項目中的活動分解 233
21.2 估算不同活動的進度 238
21.3 將估算工作量(理想工作量)轉為規劃工作量 240
21.4 成本估算 241
21.5 估算軟件缺陷的產生和消除 242
21.6 估算風險和應急緩沖 245
21.7 其他經驗法則 247
更多資源 247
第22章 估算的展示風格 249
22.1 溝通估算假設 249
22.2 表達不確定性 250
22.3 使用范圍(任何類型) 256
更多資源 257
第23章 政治、談判和解決問題 259
23.1 高管的特性 259
23.2 對估算的政治影響 260
23.3 問題的解決和原則談判方法 263
更多資源 270
附錄A 估算完整性檢查 271
附錄B 第2章小測驗的答案 273
附錄C 軟件估算技巧 275