COCOMO II 模型是一种广泛使用的软件成本估算模型,它根据项目所处阶段的不同提供三种子模型:
(1)COCOMO II 模型的阶段划分
- 应用组装模型(Application Composition Model):适用于早期原型开发或基于构件的开发。该阶段关注用户界面、系统交互和快速构建,使用“对象点”进行规模估算。对象点通过屏幕数、报表数和可重用构件数计算,并可根据复杂度调整。
- 早期设计阶段模型(Early Design Stage Model):在需求趋于稳定、体系结构初步建立时使用。采用“功能点”作为规模度量单位,功能点可进一步转换为代码行数(LOC),用于工作量和成本估算。
- 后架构阶段模型(Post-Architecture Model):用于详细设计与编码阶段,即软件构造过程中。此模型以代码行数(LOC)为基础,结合多个成本驱动因子(如人员能力、平台限制等)进行精确估算。
规模估算方式总结:
- 应用组装模型 → 对象点
- 早期设计阶段模型 → 功能点
- 后架构阶段模型 → 代码行(LOC)
(2)Putnam 估算模型
该模型是一个动态多变量模型,强调时间和工作量之间的非线性关系,适用于大型软件项目(通常超过30人年)。其核心公式为:
L=Ck⋅E1/3⋅td4/3 L = C_k \cdot E^{1/3} \cdot t_d^{4/3}L=Ck⋅E1/3⋅td4/3
其中:
- $ L $:源代码行数(LOC)
- $ E $:整个生命周期的工作量(人年)
- $ t_d $:开发持续时间(年)
- $ C_k $:技术状态常数,反映开发环境的技术成熟度
| $ C_k $ | 开发环境描述 | 示例 |
|---|---|---|
| 2000 | 差 | 无方法学支持、缺乏文档、批处理方式 |
| 8000 | 一般 | 有基本方法学和文档支持、交互式开发 |
| 11000 | 较好 | 使用CASE工具或集成化开发环境 |
该模型表明,缩短开发时间会显著增加所需工作量(呈指数关系),体现了“时间压缩代价”。
2. 进度管理
进度管理的核心目标是确保软件项目按时交付。其实现逻辑包括:
- 将项目分解为可管理的任务(WBS,工作分解结构)
- 明确任务间的依赖关系(串行、并行、关键路径)
- 分配资源(人力、设备、时间)
- 制定甘特图或网络图(如PERT、CPM)进行可视化排程
- 跟踪实际进展并与计划对比,及时调整
有效的进度管理需结合估算模型(如COCOMO II 或 Putnam)得出的工作量数据,合理安排工期与人力资源,避免过度压缩时间导致质量下降或团队疲劳。
COCOMO II 模型中的成本驱动因子(Cost Drivers)是一组反映项目、人员、产品和平台相关属性的参数,用于调整基准工作量估算,使其更贴合实际开发环境。这些因子通过乘法方式作用于基础工作量公式:
工作量=a×(规模)b×∏i=1nEAFi \text{工作量} = a \times (\text{规模})^b \times \prod_{i=1}^{n} EAF_i工作量=a×(规模)b×i=1∏nEAFi
其中:
- $ a, b $:模型系数,根据项目类型(组织型、半分离型、嵌入型)确定;
- 规模:通常为千行代码(KLOC);
- $ EAF $:Effort Adjustment Factor(工作量调节因子),由各个成本驱动因子相乘得到。
COCOMO II 的主要成本驱动因子(共7大类,17个因子)
1.产品相关因子
- RELY:需求可靠性(Required Software Reliability)
高可靠性要求增加测试与设计开销 → 提高工作量。 - DATA:数据库规模(Database Size)
数据库越大,管理复杂度越高 → 增加工时。 - CPLX:产品复杂性(Product Complexity)
复杂系统(如实时系统)需更多设计与集成 effort → 显著增加工作量。
2.硬件相关因子
- TIME:执行时间限制(Execution Time Constraint)
实时性要求高 → 优化难度大 → 工作量上升。 - STOR:主存限制(Main Storage Constraint)
内存受限 → 需精细资源管理 → 增加 effort。 - VIRT:虚拟机易变性(Virtual Machine Volatility)
平台频繁变更 → 兼容性问题多 → 增加维护成本。 - TURN:计算机周转时间(Computer Turnaround Time)
编译/运行延迟长 → 降低效率 → 间接增加时间成本。
3.人员相关因子
- ACAP:分析员能力(Analyst Capability)
能力强 → 效率高 → 降低工作量(EAF < 1)。 - PCAP:程序员能力(Programmer Capability)
经验丰富者编码快、错误少 → 减少 effort。 - PCOM:人员连续性(Personnel Continuity)
团队流动频繁 → 知识断层 → 增加沟通与培训成本。 - APEX:应用经验(Application Experience)
对领域熟悉 → 开发更快 → 减少 effort。 - PLEX:平台经验(Platform Experience)
熟悉目标环境 → 减少调试时间 → 降低 effort。 - LTEX:语言与工具经验(Language and Tool Experience)
使用熟练的语言/CASE工具 → 提升生产力。
4.项目相关因子
- MODP:现代编程实践(Use of Modern Programming Practices)
是否采用结构化方法、复用、敏捷等 → 实践越先进,effort 越低。 - TOOL:软件工具使用(Use of Software Tools)
使用自动化工具(IDE、CI/CD、静态分析)→ 显著减少 effort。 - SCED:开发进度要求(Required Development Schedule)
时间紧迫 → 加班赶工 → 实际工作量可能上升(即使功能不变)。
注:SCED 是唯一一个不直接影响 EAF,而是通过“时间压缩效应”反向推高工作量的因子。
影响机制示例
假设某项目基础工作量为 100 人月:
| 因子 | 取值 | EAF |
|---|---|---|
| CPLX(复杂性) | 高度复杂 | ×1.30 |
| ACAP(分析员能力) | 高 | ×0.85 |
| PCAP(程序员能力) | 高 | ×0.87 |
| TOOL(工具使用) | 较好 | ×0.90 |
则综合 EAF = 1.30 × 0.85 × 0.87 × 0.90 ≈ 0.86
最终工作量 = 100 × 0.86 =86 人月
可见,虽然系统复杂会增负,但高水平团队和良好工具可部分抵消负面影响。
总结
成本驱动因子使 COCOMO II 不再是静态估算模型,而是能够反映真实项目条件的动态工具。合理评估每个因子等级(从“非常低”到“超高”),有助于提高估算准确性,支持资源配置与风险管理决策。