---
# System prepended metadata

title: 'Ch5: 軟體專案計畫&管理'
tags: [Software Engineering]

---

---
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)
