軟體開發的規模放大不是簡單的等比例擴張。一個 25,000 行的專案如果花 20 人月,擴大 10 倍到 250,000 行不會只花 200 人月,而是約 600 人月。更重要的是,建構、架構、系統測試等活動的放大比例各不相同,錯誤數量也會超比例增長。本章說明專案規模如何影響建構的各個面向。

27.1 交流和規模(Communication and Size)#

團隊人數增加時,溝通路徑數量以平方比例增長:

團隊人數溝通路徑數
2 人1
5 人10
10 人45
50+ 人1,200+

溝通路徑越多,花在溝通的時間越多,溝通出錯的機會也越多。大型專案必須透過組織手段來精簡或限制溝通。

典型做法是將溝通正式化為文件(文字、圖形、紙本或電子),取代所有人兩兩交談。

27.2 專案規模的範圍(Range of Project Sizes)#

不存在「典型規模」。以團隊大小來看專案分布:

團隊規模專案佔比程式設計師佔比
1–3 人25%5%
4–10 人30%10%
11–25 人20%15%
26–50 人15%20%
50+ 人10%50%

雖然大型專案只佔全部專案的 10%,卻雇用了約 50% 的程式設計師。

27.3 專案規模對錯誤的影響(Effect of Project Size on Errors)#

錯誤來源隨規模變化#

  • 小型專案:約 75% 錯誤來自建構活動,個人技術是品質最大影響因素
  • 大型專案:建構錯誤可降至約 50%,其餘來自需求和架構;但某些超大型專案(500K 行)建構錯誤仍可達 75%

缺陷密度隨規模上升#

專案規模典型缺陷密度(每千行)
< 2K0–25
2K–16K0–40
16K–64K0.5–50
64K–512K2–70
512K+4–100

超大型專案的每千行缺陷數可達小型專案的 4 倍。規模越大,需要付出更多努力才能達到同樣的錯誤率。

27.4 專案規模對生產力的影響(Effect of Project Size on Productivity)#

小型專案(< 2,000 行)中,個人技術是生產力最大影響因素。專案規模增大後,團隊大小和組織方式成為主導因素。甚至 2 人團隊 vs. 3 人團隊就能觀察到 39% 的生產力差異。

專案規模每人年程式行數 (COCOMO II 標稱值)
1K2,500–25,000 (4,000)
10K2,000–25,000 (3,200)
100K1,000–20,000 (2,600)
1,000K700–10,000 (2,000)
10,000K300–5,000 (1,600)

小型專案的生產力可達大型專案的 2–3 倍,最小與最大專案間差距可達 5–10 倍。

27.5 專案規模對開發活動的影響(Effect of Project Size on Development Activities)#

活動比例隨規模變化#

  • 小型專案:建構佔總開發時間約 65%
  • 中型專案:建構佔約 50%
  • 大型專案:架構、整合和系統測試佔比上升,建構佔比持續下降

建構活動隨規模近乎線性增長,但其他活動(溝通、計畫、管理、需求、架構、整合、系統測試、文件產出等)以超線性速率增長。

隨規模超線性增長的活動
  • 溝通(Communication)
  • 計畫(Planning)
  • 管理(Management)
  • 需求開發(Requirements development)
  • 系統功能設計(System functional design)
  • 介面設計與規格(Interface design and specification)
  • 架構(Architecture)
  • 整合(Integration)
  • 缺陷移除(Defect removal)
  • 系統測試(System testing)
  • 文件產出(Document production)

Boehm 和 Turner 發現:10K 行專案花約 5% 心力在架構和需求可得最低成本;100K 行專案則需花 15–20%。

程式、產品、系統、系統產品#

軟體的精緻度和複雜度也影響規模估算:

類型說明相對成本
程式(Program)個人使用的單一程式1x
產品(Product)供他人使用,需充分測試與文件3x
系統(System)多個程式協作,介面與整合複雜3x
系統產品(System Product)兼具產品的精緻度和系統的複雜度9x
flowchart TB
    subgraph matrix["軟體四種精緻度 2x2 矩陣"]
        direction TB
        subgraph row1["多程式協作"]
            C["系統<br/>System<br/>(3x)"]
            D["系統產品<br/>System Product<br/>(9x)"]
        end
        subgraph row2["單一程式"]
            A["程式<br/>Program<br/>(1x)"]
            B["產品<br/>Product<br/>(3x)"]
        end
    end

    row2 --- row1

    style A fill:#d4edda,stroke:#28a745
    style B fill:#fff3cd,stroke:#ffc107
    style C fill:#fff3cd,stroke:#ffc107
    style D fill:#f8d7da,stroke:#dc3545
    style row2 fill:#f8f9fa,stroke:#6c757d
    style row1 fill:#f8f9fa,stroke:#6c757d
    style matrix fill:#ffffff,stroke:#343a40

用寫「程式」的經驗來估算「系統產品」的時程,可能低估近 10 倍。

方法論與規模#

  • 小型專案:方法論傾向非正式、直覺式
  • 大型專案:需要嚴謹、有意識地選擇方法論
  • 1,000 行專案平均花 7% 心力在文書作業;100,000 行專案則花約 26%

從輕量方法論往上擴展(scale up),效果通常優於從重量級方法論往下精簡(scale down)。最佳做法是找到「適當重量」(right-weight)的方法論。

更多資源#

  • Boehm & Turner, Balancing Agility and Discipline (2004) — 敏捷 vs. 計畫驅動方法與專案規模的關係
  • Cockburn, Agile Software Development (2002) — 第 4 章討論方法論選擇,第 6 章介紹 Crystal Methodologies
  • Boehm, Software Engineering Economics (1981) — 規模對成本、生產力、品質的深入分析
  • Jones, Estimating Software Costs (1998) — 大量表格和圖表剖析軟體開發生產力
  • Brooks, The Mythical Man-Month (1995) — 大型專案管理的經典論述

要點#

  • 專案規模增大時,溝通需求劇增;方法論的核心價值在於促進溝通
  • 在其他條件相同下,大型專案的生產力低於小型專案
  • 在其他條件相同下,大型專案的每千行錯誤數高於小型專案
  • 小型專案中理所當然的活動,在大型專案中必須被仔細規劃;建構活動的佔比隨規模增大而下降
  • 從輕量方法論往上擴展,效果優於從重量級方法論往下精簡;最有效的做法是採用「適當重量」的方法論