软件项目管理
软件项目管理是运用管理知识、技能、工具和技术于项目活动,以满足项目要求。
一、软件估算
1.1 代码行估算法 (LOC)
定义:基于代码行数的估算方法
公式:
工作量 = 代码行数 / 生产率(行/人月)缺点:
- 早期难以准确预测代码行数
- 不同语言、风格导致差异大
- 不能反映软件复杂度
1.2 功能点分析法 (FPA)
定义:从用户角度度量软件功能规模
特点:
- 不依赖编程语言
- 基于用户可见功能
功能类型
| 类型 | 缩写 | 说明 |
|---|---|---|
| 内部逻辑文件 | ILF | 系统内部维护的数据组 |
| 外部接口文件 | EIF | 其他系统维护,本系统引用的数据组 |
| 外部输入 | EI | 从外部接收数据,维护ILF |
| 外部输出 | EO | 向外部发送处理后的数据 |
| 外部查询 | EQ | 检索ILF/EIF向用户提供信息 |
计算步骤
- 识别功能类型
- 确定复杂度(低、中、高)
- 计算未调整功能点 (UFP)
- 评估14个一般系统特性
- 计算技术复杂度因子 (TCF)
- TCF = 0.65 + (0.01 × DI)
- DI = 14个特性评分之和
- 计算调整后功能点 (AFP)
- AFP = UFP × TCF
1.3 COCOMO模型
定义:构造性成本模型,算法型成本估算
COCOMO II 三个子模型
| 子模型 | 适用阶段 | 规模度量 |
|---|---|---|
| 应用组装模型 | 原型开发 | 对象点 |
| 早期设计模型 | 早期设计 | 功能点 |
| 后架构模型 | 实际开发 | 代码行(SLOC) |
后架构模型公式
PM = A × (KSLOC)^E × ∏(EM_i)
其中:
- PM:工作量(人月)
- A:常数
- KSLOC:千行源代码
- E:指数(由5个尺度因子决定)
- EM_i:17个成本驱动因子5个尺度因子 (Scale Factors)
| 因子 | 缩写 | 说明 |
|---|---|---|
| 先例性 | PREC | 组织对该类项目的熟悉程度 |
| 开发灵活性 | FLEX | 开发过程的灵活程度 |
| 架构/风险化解 | RESL | 风险分析和架构定义程度 |
| 团队凝聚力 | TEAM | 团队协作程度 |
| 过程成熟度 | PMAT | 组织的CMMI级别 |
17个成本驱动因子类别
| 类别 | 因子示例 |
|---|---|
| 产品属性 | 可靠性要求(RELY)、数据库规模(DATA)、产品复杂性(CPLX) |
| 平台属性 | 执行时间约束(TIME)、主存约束(STOR) |
| 人员属性 | 分析员能力(ACAP)、程序员能力(PCAP) |
| 项目属性 | 工具使用(TOOL)、进度约束(SCED) |
二、项目进度计划
2.1 工作分解结构 (WBS)
定义:将项目可交付成果分解成更小、更易管理的组成部分
作用:
- 进度计划基础
- 资源分配依据
- 成本估算基础
2.2 甘特图 (Gantt Chart)
定义:用条形图显示项目活动的时间安排
特点:
- 简单直观
- 易于理解和制作
- 便于跟踪进度
缺点:
- 难以表示复杂依赖关系
- 不能直观显示关键路径
2.3 PERT图
定义:基于事件的网络图,使用概率时间估算
三点估算法
期望时间 = (最乐观时间 + 4×最可能时间 + 最悲观时间) / 6适用场景:活动持续时间不确定的研发项目
2.4 关键路径法 (CPM)
定义:确定项目最短完成时间和关键活动的网络分析技术
核心概念
| 概念 | 缩写 | 定义 |
|---|---|---|
| 最早开始时间 | ES | 活动能开始的最早时间 |
| 最早完成时间 | EF | 活动能完成的最早时间 |
| 最迟开始时间 | LS | 不影响工期的最晚开始时间 |
| 最迟完成时间 | LF | 不影响工期的最晚完成时间 |
| 总浮动时间 | TF | 不影响总工期可延迟的时间 |
| 自由浮动时间 | FF | 不影响后续活动可延迟的时间 |
计算公式
EF = ES + 持续时间
LS = LF - 持续时间
TF = LS - ES = LF - EF
FF = Min(后续活动ES) - 本活动EF计算步骤
正向推导(计算ES、EF):
- 起始活动 ES = 0
- EF = ES + 持续时间
- 后续活动 ES = Max(所有前置活动的EF)
反向推导(计算LS、LF):
- 结束活动 LF = 项目工期(或其EF)
- LS = LF - 持续时间
- 前置活动 LF = Min(所有后续活动的LS)
关键路径:
- 总浮动时间 = 0 的活动
- 连接所有关键活动的路径
- 决定项目最短工期
计算示例
活动网络图:
A(3) → B(4) → D(2)
↓ ↑
C(5) ─────────┘
活动 | 持续时间 | 前置
-----|----------|------
A | 3 | -
B | 4 | A
C | 5 | A
D | 2 | B,C
正向计算:
A: ES=0, EF=3
B: ES=3, EF=7
C: ES=3, EF=8
D: ES=Max(7,8)=8, EF=10
反向计算:
D: LF=10, LS=8
B: LF=8, LS=4
C: LF=8, LS=3
A: LF=Min(4,3)=3, LS=0
浮动时间:
A: TF=0-0=0 (关键)
B: TF=4-3=1
C: TF=3-3=0 (关键)
D: TF=8-8=0 (关键)
关键路径:A → C → D
项目工期:10三、风险管理
3.1 风险管理过程
风险识别 → 风险分析 → 风险应对 → 风险监控3.2 风险识别
方法:
- 头脑风暴
- 德尔菲技术
- 检查表法
- SWOT分析
- 经验教训总结
3.3 风险分析
定性分析:
- 风险矩阵法
- 评估概率和影响
- 优先级排序
定量分析:
- 蒙特卡洛模拟
- 决策树分析
- 敏感性分析
3.4 风险应对策略
消极风险(威胁)应对
| 策略 | 说明 | 示例 |
|---|---|---|
| 规避 | 改变计划消除风险 | 取消高风险功能 |
| 转移 | 将风险转移给第三方 | 购买保险、外包 |
| 减轻 | 降低概率或影响 | 增加测试、培训 |
| 接受 | 不采取措施 | 设立应急储备 |
积极风险(机遇)应对
| 策略 | 说明 |
|---|---|
| 开拓 | 确保机遇实现 |
| 分享 | 与第三方分享 |
| 增强 | 提高概率或影响 |
| 接受 | 不采取特别措施 |
四、配置管理
4.1 基本概念
定义:识别、组织、控制和跟踪软件配置项修改的技术和规程
目的:保持软件产品的完整性、一致性和可追溯性
4.2 核心概念
| 概念 | 定义 |
|---|---|
| 配置项 (CI) | 需要单独识别和控制的工作产品 |
| 基线 (Baseline) | 特定时间点上经过评审批准的配置项版本 |
| 版本控制 | 管理配置项的不同版本 |
| 变更控制 | 控制对基线的修改 |
4.3 常见配置项
- 需求规格说明书
- 设计文档
- 源代码
- 测试计划和用例
- 可执行代码
- 用户手册
4.4 常见基线
| 基线 | 建立时机 |
|---|---|
| 需求基线 | 需求评审通过后 |
| 设计基线 | 设计评审通过后 |
| 代码基线 | 代码评审通过后 |
| 测试基线 | 测试完成后 |
| 产品基线 | 产品发布时 |
4.5 变更控制流程
提交变更请求 → 评估影响 → 审批 → 实施变更 → 验证 → 更新配置记录4.6 配置审计
目的:
- 验证配置管理活动的符合性
- 确保配置项的完整性和一致性
- 确保变更得到正确记录和批准
五、考试要点
高频考点
- 关键路径计算(ES、EF、LS、LF、浮动时间)
- 功能点分析法基本概念
- COCOMO II模型结构
- 风险应对策略
- 配置管理核心概念
典型例题
题1:某活动ES=5,持续时间=3,则EF=? 答案:EF = 5 + 3 = 8
题2:某活动LF=10,LS=7,EF=8,ES=5,则TF=? 答案:TF = LS - ES = 7 - 5 = 2(或 LF - EF = 10 - 8 = 2)
题3:将风险转移给保险公司,这属于什么风险应对策略? 答案:转移
题4:需求规格说明书属于什么? 答案:配置项
关键路径计算步骤
1. 画出活动网络图
2. 正向计算ES和EF(从前往后)
3. 确定项目工期(最后一个活动的EF)
4. 反向计算LS和LF(从后往前)
5. 计算TF = LS - ES
6. TF = 0 的活动为关键活动
7. 连接关键活动得到关键路径记忆口诀
关键路径:
正向求早反向迟
早完等于早开加时
迟开等于迟完减时
浮动为零是关键风险应对:
消极风险规避转移减轻接受
积极机遇开拓分享增强接受