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):
- 确立项目范围 (Establish project scope)。
- 确定可行性 (Determine feasibility)。
- 分析风险 (Analyze risks)(详见第25章)。
- 定义所需资源 (Define required resources)(人力、可复用软件、环境)。
- 估算成本和工作量 (Estimate cost and effort)。
- 制定项目进度表 (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)、以及性能、约束、接口和可靠性。
- 定义技术:
- 与所有干系人沟通后形成叙述性描述 (Narrative description)。
- 由最终用户开发的一组**用例 (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 方法¶
- 步骤:
- 使用信息域值 (Information domain values) 计算 LOC 或 FP。
- 利用历史数据 (Historical data) 建立项目估算。
- 示例逻辑:
- 若历史生产率为 620 LOC/人月 (LOC/pm),负担化劳务费率 (Burdened labor rate) 为 $8000/月。
- 则每行代码成本约为 $13。
- 总估算成本 = 估算的 LOC 总数 × 每行代码成本。
7. 基于过程的估算 (Process-Based Estimation)¶
- 原理:从“过程框架 (Process framework)”出发,计算每个框架活动 (framework activity) 针对每个应用功能 (application function) 所需的努力。
- 步骤:
- 识别框架活动(如分析、设计、编码、测试)。
- 估算每个功能在每个活动上所需的时间/工作量。
- 汇总得到总工作量。
- 优点:细化到具体活动,精度较高。
8. 基于用例的估算 (Estimation with Use-Cases)¶
- 适用场景:需求阶段,基于用例模型。
- 方法:
- 将系统划分为子系统(用户接口、工程、基础设施等)。
- 统计每个子系统的用例场景页数 (Scenario pages)。
- 根据经验数据(如每页对应多少 LOC)估算每个子系统的 LOC。
- 汇总得到总 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)¶
- 步骤:
- 确定**关键类 (Key classes)**(分析类)的数量。
- 根据接口类型确定**支持类 (Support classes)** 的乘数 (Multiplier):
- 无GUI:2.0
- 基于文本:2.25
- GUI:2.5
- 复杂GUI:3.0
- 估算支持类数量 = 关键类数量 × 乘数。
- 总类数 = 关键类 + 支持类。
- 工作量估算:总类数 × 每类平均工作量 (Lorenz & Kidd 建议 15-20 人天/类)。
11. 敏捷项目的估算 (Estimation for Agile Projects)¶
- 原则:每个用户场景 (User scenario) 单独估算。
- 方法:
- 将场景分解为软件工程任务。
- 分别估算每个任务(基于历史数据、经验模型或经验)。
- 汇总任务估算值得到场景的估算值。
- 或者,直接估算场景的规模 (LOC/FP/用例数),再转换为工作量。
- 将一个增量 (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)¶
- 估算的基础 (Basis of Estimation):始终记住**范围 (Scope)** 和**分解 (Decomposition)** 是估算的基石。没有范围定义,估算就是空谈。
- 不确定性 (Uncertainty):估算不是精确科学,必须理解其伴随的风险。
- LOC vs FP vs Process vs Use-case:你需要理解这四种估算方法的适用场景和计算逻辑。特别是**基于过程的估算**,它通过分解活动来提高精度。
- COCOMO II:记住它是分层的模型,特别是**应用组合模型**(早期/原型阶段)和**后架构模型**(详细估算)的区别。
- 面向对象估算:这是一个非常具体的考点。务必记住**关键类**与**支持类**的区别,以及不同**GUI类型对应的乘数**(2.0, 2.25, 2.5, 3.0)。
- 自制-外购 (Make-Buy):考试中很可能会给出一个决策树 (Decision tree),要求你计算期望成本。公式 \(E = \sum (P \times C)\) 必须烂熟于心。
评论区
欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问