1. 软件工程成本效益分析实战
1.1 库存系统改造成本效益分析
让我们先解决第一个问题:修改库存清单系统的成本效益评估。这是一个典型的IT项目投资决策场景,我们需要计算三个关键指标:投资回收期、净现值和内部收益率。
基础数据:
- 初始改造成本:8000元
- 使用年限:5年
- 年收益:3000元/年
- 贴现率:12%
投资回收期计算:
静态回收期 = 初始投资 / 年现金流入 = 8000/3000 ≈ 2.67年
但更准确的是动态回收期计算:
| 年份 | 现金流 | 贴现因子(12%) | 现值 | 累计现值 |
|---|---|---|---|---|
| 0 | -8000 | 1.0000 | -8000 | -8000 |
| 1 | 3000 | 0.8929 | 2678.7 | -5321.3 |
| 2 | 3000 | 0.7972 | 2391.6 | -2929.7 |
| 3 | 3000 | 0.7118 | 2135.4 | -794.3 |
| 4 | 3000 | 0.6355 | 1906.5 | 1112.2 |
动态回收期 = 3 + (794.3/1906.5) ≈ 3.42年
净现值(NPV)计算:
NPV = ∑(现金流/(1+r)^t) = -8000 + 3000×(P/A,12%,5)
= -8000 + 3000×3.6048 = 2814.4元
注意:当NPV>0时项目可行。这里的2814元净收益表明改造是划算的。
1.2 软件维护工作量估算
第二个问题涉及软件维护工作量的估算,这里使用的是基于经验模型的估算方法。
给定参数:
- 生产性工作量(PM):150人月
- 复杂程度指数(CMX):18
- 熟悉程度指数(FAM):16
- 经验常数(K):10
维护工作量公式:
M = (PM × CMX)/(K × FAM)
计算过程:
M = (150 × 18)/(10 × 16)
= 2700/160
= 16.875人月
实操心得:在实际项目中,复杂程度指数通常根据模块耦合度、代码复杂度等指标综合评定,而熟悉程度指数则与团队经验直接相关。新接手遗留系统时,这个值可能低至10以下。
2. 软件重用与规模估算
2.1 软件重用经济效益分析
第三个问题展示了软件重用的经济价值,这是现代软件开发中的重要实践。
成本数据:
- 从零开发成本:15万元
- 重用相关成本:1万元
- 实际收取客户费用:13万元
净成本节约计算:
净节约 = 从零开发成本 - (重用成本 + 实际成本)
= 15 - (1 + 13)
= 1万元
关键理解:这里揭示了一个重要经济学原理——重用不仅为客户节省了2万元(15-13),还为开发商创造了1万元的额外利润,实现了双赢。
2.2 代码规模估算技术
第四个问题是经典的PERT估算应用,在敏捷估算中也经常使用。
估算数据:
- 最乐观值(a):1500行
- 最悲观值(b):2000行
- 最可能值(m):1800行
PERT公式:
E = (a + 4m + b)/6
= (1500 + 4×1800 + 2000)/6
= (1500 + 7200 + 2000)/6
= 10700/6
≈ 1783行
标准差σ = (b - a)/6 = (2000-1500)/6 ≈ 83.3行
这意味着有68%的概率代码量会在[1700,1866]行之间。
3. 开发时间与津贴系统建模
3.1 Putnam模型开发时间估算
第五个问题展示了著名的Putnam模型应用,这对项目计划制定很有帮助。
给定参数:
- 工作量E=512人月
- 典型Putnam模型系数:K=8,D0=15
开发时间公式:
T = (E/K)^(1/3) × D0
= (512/8)^(1/3) × 15
= 64^(1/3) × 15
= 4 × 15
= 60月
注意事项:这个结果看起来不合理,因为512人月项目通常不需要5年完成。实际问题可能出在系数选择上。实际应用中:
- 对于小型项目,K=4-8
- 中型项目K=8-12
- 大型项目K=12-16
若取K=12,则T≈53个月;取K=16,则T≈48个月
3.2 课时津贴系统逻辑建模
第六个问题需要为讲师课时津贴系统建立判定模型,这是典型的需求分析场景。
业务规则:
- 讲座类:所有职称统一50元/课时
- 常规授课:
- 教授:30元
- 副教授:25元
- 讲师:20元
- 助教:15元
判定表:
| 条件\动作 | 讲座? | 职称 | 津贴 |
|---|---|---|---|
| 规则1 | 是 | 任意 | 50 |
| 规则2 | 否 | 教授 | 30 |
| 规则3 | 否 | 副教授 | 25 |
| 规则4 | 否 | 讲师 | 20 |
| 规则5 | 否 | 助教 | 15 |
判定树:
code复制开始
├─ 是讲座? → 津贴=50元
└─ 不是讲座?
├─ 教授 → 30元
├─ 副教授 → 25元
├─ 讲师 → 20元
└─ 助教 → 15元
建模技巧:在实际需求分析中,我习惯先用判定表穷举所有规则,再转化为判定树或流程图。这能有效避免逻辑遗漏,特别是当条件组合复杂时。