跳转至

33 估算

说明

本文档由 AI 生成

这一章(Chapter 33: Estimation)是项目管理知识体系中的核心实战章节。如果说上一章(Ch.32)是关于“为什么要度量”,那么这一章就是关于“如何利用度量数据进行估算”。

这一章的逻辑非常清晰,遵循了从**战略**到**战术**,再到**具体方法**的递进关系: 1. 首先**确立了项目规划的目标和任务集,强调了估算对于控制复杂项目的重要性。 2. **其次**探讨了估算的本质,指出估算基于历史数据和经验,且必然伴随着风险和不确定性。 3. **核心部分**详细介绍了多种估算技术:从传统的**LOC/FP,到基于过程的估算,再到**用例**驱动和**经验模型**(如COCOMO II)。 4. **最后**针对特定场景,讲解了面向对象项目、敏捷项目以及“自制-外购”决策的估算方法。

以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照,非常适合用来复习备考。


📊 软件工程 Chapter 33: 估算 (Estimation)

1. 项目规划的目标与任务 (Project Planning)

  • 总体目标 (Overall goal):为控制 (controlling)、跟踪 (tracking) 和监控 (monitoring) 复杂的技术项目建立切实可行的策略 (pragmatic strategy),确保结果按时、高质量完成。
  • 规划任务集 (Task set)
    1. 确立项目范围 (Establish project scope)
    2. 确定可行性 (Determine feasibility)
    3. 分析风险 (Analyze risks)(详见第25章)。
    4. 定义所需资源 (Define required resources)(人力、可复用软件、环境)。
    5. 估算成本和工作量 (Estimate cost and effort)
    6. 制定项目进度表 (Develop a project schedule)(详见第34章)。

2. 估算的本质 (Estimation)

  • 定义:对软件工程工作的资源、成本和进度进行预测。
  • 前提
    • 需要**经验 (experience)**。
    • 需要获取良好的**历史信息/度量数据 (historical information / metrics)**。
    • 需要有勇气在只有定性信息 (qualitative information) 的情况下做出定量预测。
  • 特性:估算具有**固有的风险 (inherent risk),这导致了**不确定性 (uncertainty)
  • 原则
    • 必须理解**项目范围 (Project scope)**。
    • 必须进行**细化/分解 (Elaboration / Decomposition)**。
    • 历史度量数据非常有帮助。
    • 应该使用至少两种不同的技术进行估算,并协调差异。

3. 项目范围 (Project Scope)

  • 定义:描述了要交付给最终用户的功能和特征 (functions and features)、输入输出数据、呈现的内容 (content)、以及性能、约束、接口和可靠性。
  • 定义技术
    1. 与所有干系人沟通后形成叙述性描述 (Narrative description)。
    2. 由最终用户开发的一组**用例 (Use-cases)**。

4. 资源 (Resources)

  • 人员 (People):具备特定技能 (Skills) 的团队成员。
  • 可复用软件 (Reusable software):OTS组件 (OTS components)、新组件、具备经验的组件。
  • 环境 (Environment):硬件 (Hardware)、网络资源 (Network resources)、位置 (Location)、软件工具 (Software tools)。

5. 估算技术 (Estimation Techniques)

  • 基于过去的经验 (Past similar project experience)
  • 常规估算技术 (Conventional estimation techniques)
    • 任务分解和工作量估算 (Task breakdown and effort estimates)。
    • 规模估算 (Size estimates):如 LOC, FP。
  • 经验模型 (Empirical models):如 COCOMO II。
  • 自动化工具 (Automated tools)

6. 常规方法:LOC / FP 方法

  • 步骤
    1. 使用信息域值 (Information domain values) 计算 LOC 或 FP。
    2. 利用历史数据 (Historical data) 建立项目估算。
  • 示例逻辑
    • 若历史生产率为 620 LOC/人月 (LOC/pm),负担化劳务费率 (Burdened labor rate) 为 $8000/月。
    • 则每行代码成本约为 $13。
    • 总估算成本 = 估算的 LOC 总数 × 每行代码成本。

7. 基于过程的估算 (Process-Based Estimation)

  • 原理:从“过程框架 (Process framework)”出发,计算每个框架活动 (framework activity) 针对每个应用功能 (application function) 所需的努力。
  • 步骤
    1. 识别框架活动(如分析、设计、编码、测试)。
    2. 估算每个功能在每个活动上所需的时间/工作量。
    3. 汇总得到总工作量。
  • 优点:细化到具体活动,精度较高。

8. 基于用例的估算 (Estimation with Use-Cases)

  • 适用场景:需求阶段,基于用例模型。
  • 方法
    1. 将系统划分为子系统(用户接口、工程、基础设施等)。
    2. 统计每个子系统的用例场景页数 (Scenario pages)。
    3. 根据经验数据(如每页对应多少 LOC)估算每个子系统的 LOC。
    4. 汇总得到总 LOC 估算值。

9. 经验估算模型 (Empirical Estimation Models)

  • 通用形式\(Effort = A \times Size^B\)
    • 其中 \(A\) 是调优系数 (Tuning coefficient),\(B\) 是基于项目复杂度的指数 (Exponent)。
  • COCOMO II (Constructive Cost Model II)
    • 应用组合模型 (Application composition model):用于早期阶段,侧重于原型和UI。
    • 早期设计阶段模型 (Early design stage model):需求稳定,架构建立后使用。
    • 后架构阶段模型 (Post-architecture-stage model):用于构建阶段,最详细。
  • 软件方程 (The Software Equation)
    • \(E = [LOC \times B^{0.333}/P]^3 \times (1/t^4)\)
    • 其中 \(E\) 为工作量,\(t\) 为项目持续时间,\(B\) 为特殊技能因子,\(P\) 为生产力参数。

10. 面向对象项目的估算 (Estimation for OO Projects)

  • 步骤
    1. 确定**关键类 (Key classes)**(分析类)的数量。
    2. 根据接口类型确定**支持类 (Support classes)** 的乘数 (Multiplier):
      • 无GUI:2.0
      • 基于文本:2.25
      • GUI:2.5
      • 复杂GUI:3.0
    3. 估算支持类数量 = 关键类数量 × 乘数。
    4. 总类数 = 关键类 + 支持类。
    5. 工作量估算:总类数 × 每类平均工作量 (Lorenz & Kidd 建议 15-20 人天/类)。

11. 敏捷项目的估算 (Estimation for Agile Projects)

  • 原则:每个用户场景 (User scenario) 单独估算。
  • 方法
    1. 将场景分解为软件工程任务。
    2. 分别估算每个任务(基于历史数据、经验模型或经验)。
    3. 汇总任务估算值得到场景的估算值。
    4. 或者,直接估算场景的规模 (LOC/FP/用例数),再转换为工作量。
    5. 将一个增量 (Increment) 内所有场景的估算值相加,得到该增量的总估算。

12. 自制-外购决策 (The Make-Buy Decision)

  • 定义:决定是构建 (Build)、复用 (Reuse)、购买/外包 (Buy/Contract) 还是不带更改地购买 (Buy without changes)。
  • 期望成本计算 (Computing Expected Cost)
    • \(Expected\ Cost = \sum (Path\ Probability \times Estimated\ Path\ Cost)\)
  • 决策逻辑
    • 计算每种策略(如 Build, Reuse, Buy, Contract)的期望成本。
    • 选择期望成本最低的策略作为最优决策。

💡 复习重点总结 (Key Takeaways for Exam)

  1. 估算的基础 (Basis of Estimation):始终记住**范围 (Scope)** 和**分解 (Decomposition)** 是估算的基石。没有范围定义,估算就是空谈。
  2. 不确定性 (Uncertainty):估算不是精确科学,必须理解其伴随的风险。
  3. LOC vs FP vs Process vs Use-case:你需要理解这四种估算方法的适用场景和计算逻辑。特别是**基于过程的估算**,它通过分解活动来提高精度。
  4. COCOMO II:记住它是分层的模型,特别是**应用组合模型**(早期/原型阶段)和**后架构模型**(详细估算)的区别。
  5. 面向对象估算:这是一个非常具体的考点。务必记住**关键类**与**支持类**的区别,以及不同**GUI类型对应的乘数**(2.0, 2.25, 2.5, 3.0)。
  6. 自制-外购 (Make-Buy):考试中很可能会给出一个决策树 (Decision tree),要求你计算期望成本。公式 \(E = \sum (P \times C)\) 必须烂熟于心。

评论区

欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问