--- tags: Software Engineering --- # Ch5: 軟體專案計畫&管理 ## Critical Path Model 要徑分析 ![](https://i.imgur.com/f8c4Qwk.png) - 要徑 Critical Path: **最長的路徑** - 路徑長代表專案最早可以完成的時間 - 至少要完成耗時最長的任務,專案才能完成 ## 成本預估 ### PERT Model - 下限推估: 最壞狀況 - 上限推估: 最佳狀況 $$ 工作量 = \frac{(下限推估+4最可能推估+上限推估)}6 $$ ### Albrecht 功能點 用五個類型工作的: **簡單**、**平均**、**複雜** 的 **項目數量** 和 **複雜度** 進行評估 - 外部輸入 - 外部輸出 - 使用者查詢 - 外部檔案 - 內部檔案 **複雜度對應表範例**: 表格中值是複雜度權重 ($w_i$) | 項目 | 簡單 | 平均 | 複雜 | |:----------:|:----:|:----:|:----:| | 外部輸入 | 3 | 4 | 6 | | 外部輸出 | 4 | 5 | 7 | | 使用者查詢 | 3 | 4 | 6 | | 外部檔案 | 7 | 10 | 15 | | 內部檔案 | 5 | 7 | 10 | - **Unadjusted Function Count**, **UFC** (未調整功能計算) $$ UFC = \sum \text{item}_i \times w_i $$ - 例子: - 以下是每個項目類型的數量 ($\text{item}_i$) - A = 外部輸入數量 = 1 - B = 外部輸出數量 = 3 - C = 使用者查詢數量 = 2 - D = 外部檔案數量 = 4 - E = 內部檔案數量 = 5 - 簡單等級 UFC: $1×3 + 3×4 + 2×3 + 4×7 + 5×5 = 74$ - 平均等級 UFC: $1×4 + 3×5 + 2×4 + 4×10 + 5×7 = 102$ - 困難等級 UFC: $1×6 + 3×7 + 2×6 + 4×15 + 5×10 = 149$ - **Technical Complexity Factor, TCF** (技術複雜度因子) - :::spoiler 用14個項目進行評估 ::: - 每個項目的值 ($f_i$) 是 0~5 $$ TCF = 0.65 + 0.01 \sum_{i=1}^{14} f_i $$ - **Function Point Count, FP** (功能點) $$ FP = UFC \times TCF $$ ## 專案執行狀態 | | 工期超前 | 工期落後 | |:------------:|:--------------:|:------------------:| | **預算剩餘** | 專案有效率 | 專案執行落後 | | **預算超支** | 增加人員或加班 | 有重大問題效率不彰 | ### Earned Value Managerment, EVM 實獲值管理 - Planned Value, **PV** (計畫價值) - 規劃時的預算 - Actual Cost, **AC** (實際成本) - 執行的實際成本 - Earned Value, **EV** (實獲值) - 執行的實際預算 $$ EV = 完成度 \times PV $$ - Cost Variance, **CV** $$ CV = EV - AC $$ - **+**: 預算在控制範圍內 - **-**: 預算超支 - Schedule Variance, **SV** $$ SV = EV - PV $$ - **+**: 進度超前 - **-**: 進度落後 **分析結果** - Cost Performed Index, CPI (成本績效指標) $$ CPI = EV/AC $$ - Schedule Performed Index, SPI (時程績效指標) $$ SPI = EV/PV $$ - Estimate At Completion, EAC $$ EAC = (AC/PV) \times 總成本 $$ | | SV(+), SPI(>1) | SV(-), SPI(<1) | |:--------------:|:--------------:|:------------------:| | CV(+), CPI(>1) | 專案有效率 | 進度落後,但可追上 | | CV(-), CPI(<1) | 增加人員或加班 | 有重大問題效率不彰 | ### COCOMO ### 三點估算 - b: best case - m: most likely case - w: worst case - Expected case $$ e = (b + 4m + w) / 6 $$ **任務數量 < 10** - $e = (b + 4m + w) / 6$ - b, m, w 是每項任務的時間總和 - 標準差 $\sigma = (w - b) / 6$ - 計算信心程度,查表看要加減多少標準差 - 範例: 信心程度 75% - $0.67 \sigma = 24.8\%$ - 信心程度 75% 預計公式: $e + 0.67 \sigma$ | 任務 | 最好 | 最可能 | 最糟 | |:----:|:----:|:------:|:----:| | t1 | 1.2 | 2 | 5.6 | | t2 | 2 | 3 | 4 | | t3 | 1.8 | 5 | 8.4 | | 總和 | 5 | 10 | 18 | - **e**: (5 + 4*10 + 18) / 6 = 10.5 - **標準差**: (18 - 5) / 6 = 2.16 - 信心程度 90% 的預估時間: - 90% - 50% = 40% $\Rightarrow$ 查接近 0.4 的 Z 分數 - 0.3997 最接近,取 1.28 - $e + 1.28 \times \sigma = 10.5 + 1.28 \times 2.16 =13.26$ **任務數量 $\ge$ 10** - $e = (b + 4m + w) / 6$ - 計算每一項任務的標準差和變異數 - Divisor: 該信賴區間的 Z 分數 $$ \sigma_i=(w_i - b_i)/Divisor $$ - 所有變異數 $\sigma_i^2$ 加總,開根號得到所有任務的標準差 $\sigma$ $$ \sigma = \sqrt{\sum_i \sigma_i^2} $$ ![](https://i.imgur.com/qUAuDNu.png) - 標準差 $\sigma = 2.5$ - 信心程度 90% 預估時間: 30.9 + (1.28 * 2.5) = 34 **常態分佈表** ![](https://i.imgur.com/AW1nzlE.png)