五、软件项目计划与管理
项目计划与估算
项目计划
项目计划(Project Plan)要列出软件开发要做的主要工作和任务清单,要回答“软件工程项目做什么”。
在工作和任务清单中要清楚地描述出:
- 项目划分的各个实施阶段
- 每个阶段的工作重点和任务是什么
- 完成本阶段工作和任务的人力、资源需求,时间期限
- 阶段工作和任务的成果形式
- 项目实施过程中对风险、疑难、其他不可预见因素等的处理机制
- 各任务组及开发人员之间的组织、协调关系等。
WBS(Work Breakdown Structure,工作分解结构)
创建WBS是把项目交付成果和项目工作分解成较小的,更易于管理的组成部分的过程。
示例:
项目成本估算
项目成本估算 是对完成项目工作所需要的费用进行估计和计划,是项目计划中的一个重要组成部分。
软件项目成本的构成因素
软件项目成本与工作量、商务成本、国家税收和企业利润等有关。
而其中最主要的是:软件开发费用,且软件项目成本 ≈软件开发费用
软件开发费用的计算
软件开发费用由开发工作量和工作量单价共同决定的。
\(软件开发费用 = 开发工作量 * 工作量单价\)
-
开发工作量:对软件开发工作量的估计值。
单位:人月、人天 -
工作量单价:每个开发工作量的价格。
单位: 元/人月 、 元/人天
注意:人月和“人”和“月”都没有直接关系
假设项目开发工作量是27.6人月,每组4个人,那么项目需要多长时间完成?
开发周期 = 27.6人月 / 4人 = 6.9月 ??
那要是每组4000个人呢?
显然是错误的
开发工作量
计算公式: \(开发工作量 = 估算工作量经验值α* 风险系数σ* 复用系数τ\)
估算工作量经验值 α (alpha)
国际、国内都是采用经验方式来估算。
建议按国标(GB/T 8566-2001)的生存期过程来估算。
风险系数 σ (sigma) \(1 ≤ σ ≤ 1.5\)
估算工作量经验值存在较大风险。根据对软件企业的了解进行估计。
复用系数 τ (tau) \(0.25 ≤ τ ≤ 1\)
如果软件企业很好采用了“基于构件的开发方法”,那么软件开发工作量就会相应减少。
工作量单价
公式: \(工作量单价 =(人头费P + 办公费Q + 税收利润R)* 管理系数S* 优质系数T\)
人头费 P \(P= β * 1.476\)
主要是员工平均工资 β、社会保险基金等。其中社保金累计占47.6%。
办公费 Q \(Q = β / 3\)
包括办公房屋租赁、物业费、水电费等。
税收利润等 R \(R = β / 3\)
国家税收、企业利润、年假薪酬、在职培训等费用。
管理系数 S \(1≤ S ≤ 1.2\)
通常每个机构都有一定的管理人员比例。
参照一些企业做法,是:2个管理人员/10个开发人员。
优质系数 T
企业提高软件质量,必然有开支,称质量成本。
企业为提高质量会申请通过国家或国际质量认证。
认证级别 | 无认证 | ISO9000 | CMM | CMMI |
---|---|---|---|---|
大小 | 1.05 | 1.1 | 1.15 | 1.2 |
小结
综上:
工作量单价 = ( P + Q + R ) * S * T
=(β * 1.476 + β /3 + β /3)* 1.2 * T
= β * 2.575 * T
= β * λ
注:1.05 ≤ T ≤ 1.2,所以 2.7≤ λ ≤3.09
项目成本
≈ 软件开发费用
= 开发工作量 * 工作量单价
= α * σ * τ * β * λ
- α : 据经验对软件开发各阶段的工作量的估算
- σ: 风险系数, 1 ≤ σ ≤ 1.5
- τ : 复用系数, 0.25 ≤ τ ≤ 1
- β : 软件企业平均工资,元/人月
- λ: 综合系数, 2.7≤ λ ≤3.09
例题:
某外包企业承接开发某金融项目,开发工作量估算为20人月,没有可复用代码,企业人均工资为8000元/人月,请估算项目开发成本。
根据今天讲的软件成本估算方法,估算本组项目成本。
α参考值:
自行调研β。
项目开发周期估算
(三) 项目开发周期估算
关键路径
- 各任务项的完成时间估算
- WBS的前驱后继关系
一般使用甘特图表示。如下图:
配置管理
注意,项目管理和配置管理是平行的,不是包含关系
任务:对不同阶段产生的文档(结果项)及其不同版本进行管理。
软件配置项(Configuration Item)
软件开发过程中使用的或产生的,有价值的、值得保存的中间制品。
包括:
各类文档、评审记录、源代码及可执行的代码、自动化测试脚本、系统运行所需的软件以及支持软件的有关数据等。
软件配置管理SCM
SCM,Software Configuration Management
一套应用技术上和管理上的指导和监督的方法,
识别和记录配置项的功能特征和物理特征;
控制这些特征的变更;
记录和报告变更的处理和执行的状态;
以及验证其是否符合特定的需求。
软件配置管理的任务
1)版本管理
标识和保存每个配置项及每个版本。
以变更集(Change Set)为单位,进行增量存储。
2)建立配置库,管理代码传播。
签入(check in):将代码从个人工作区上传到配置库;
签出(check out):将代码从配置库下载到个人工作区。
3) 防止版本覆盖。
反方向适时更新工作区。
为修改的配置项“加锁”,或应用“并行合并”机制。
3) 防止版本覆盖。
反方向适时更新工作区。
为修改的配置项“加锁”,或应用“并行合并”机制。
4) 软件集成管理
集成(Integration)
根据软件需求,把不同的人开发的不同构件组合起来,以构成整体系统。
集成规则:
集成前:做充分的单元测试,保证提交质量;
集成中:较频繁的系统构建,持续集成;
集成后:建立系统基线(baseline)。