---
tags: Software Engineering
---
# Ch5: 軟體專案計畫&管理
## Critical Path Model 要徑分析

- 要徑 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}
$$

- 標準差 $\sigma = 2.5$
- 信心程度 90% 預估時間: 30.9 + (1.28 * 2.5) = 34
**常態分佈表**
