(一)软件项目管理涉及的范围
1.人员
类型:
- 项目管理人员(通常称为项目经理,对项目进行全面的管理,制订项目计划,监控项目进展,控制反馈,组建团队)
- 高级管理人员(可以是领域专家,负责对业务问题进行定义)
- 开发人员
- 客户
- 最终用户
2.产品
在进行项目计划之前,应首先进行项目定义,定义项目范围,包括:建立产品的目的和范围、可选的解决方案、技术或管理的约束等。
软件范围的定义:
- 项目环境(要开发的软件如何适应于大型的系统、产品或业务环境)
- 信息目标(软件要产生哪些客户可见的数据对象作为输出,需要什么数据对象作为输入)
- 功能和性能(软件要执行什么功能才能将输入数据变换成输出数据,软件需要满足什么特殊的性能要求)
3.过程
软件过程提供了一个项目团队要选择一个适合于待开发软件的过程模型。
选定过程模型后,项目团队可以基于这组过程框架活动来制订一个初步的项目计划。这个计划反映了框架活动中所需完成的工作任务。
4.项目
- 明确目标及过程
- 保持动力
- 跟踪进展
- 做出明智的决策
- 进行事后分析
(二)软件项目估算
软件项目估算涉及人、技术、环境等多种因素,需要一些方法和技术来支持项目的估算,常用的估算方法有:
- 基于已经完成的类似项目进行估算
- 基于分解技术进行估算
- 基于经验估算模型的估算
1.成本估算方法
-
自顶向下估算方法
参照以前完成的项目所耗费的总成本来推算将要开发的软件的总成本。
优点:- 对系统级工作的重视,估算中不会遗漏集成、配置管理等系统级事务的成本估算
- 估算工作量小、速度快
缺点:
- 往往不清楚低级别上的技术性困难问题,这些困难将使成本上升
-
自底向上估算方法
将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。
优点:- 将每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确
缺点:
- 估算往往缺少各项子任务之间相互联系所需要的工作量和软件开发有关的系统级工作量,所以估算往往偏低
-
差别估算方法
将待开发项目与一个或多个已完成的类似项目进行比较,找出与某个相似项目的若干不同之处,并估算每个不同之处对成本的影响,导出待开发项目的总成本。
优点:- 可以提高估算的准确度
缺点:
- 不容易明确“差别”的界限
-
其他估算方法
- 专家估算法
- 类推估算法
- 算式估算法
2.COCOMO估算模型
COCOMO
模型是一种精确的、易于使用的成本估算模型。
按详细程度分为:
- 基本COCOMO模型(通过估算代码行的值,计算开发工作量和开发时间的估算值)
- 中级COCOMO模型(以基本COCOMO模型为基础,考虑影响软件工作量的因素,通过工作量调节因子修正对工作量的估算)
- 详细COCOMO模型(除包括中级模型所考虑的因素外,还考虑了在需求分析、软件设计等每一步的成本驱动属性的影响)
3. COCOMOII模型
三个阶段:
- 应用组装模型
- 早期设计阶段模型
- 体系结构阶段模型
4.Putnam估算模型
是一种多态多变量模型,它是假设在软件开发的整个生存周期中工作量有特定的分布。
(三)进度管理
1.进度管理的基本原则
- 划分
- 相互依赖性
- 时间分配
- 工作量确认
- 确定责任
- 明确输出结果
- 明确里程碑
2.进度安排
为监控软件项目的进度计划和工作的实际进展情况,表示各项任务之间的相互依赖关系,需要采用图示的方法。
在图中明确标明如下内容:
- 各个任务的计划开始时间和完成时间
- 各个任务的完成标志
- 各个任务与参与工作的人数,各个任务与工作量之间的衔接情况
- 完成各个任务所需的物理资源和数据资源
进度安排常用图形有
- Gantt图
- 项目计划评审技术图(PERT图)
(四)软件项目的组织
1.组织结构的模式
- 按项目划分的模式(按项目将开发人员组织成项目组,项目组的成员共同完成该项目的所有开发任务)
- 按职能划分的模式(将项目参与者组织成相应的专业组,如需求组、开发组等)
- 矩阵模式(既按组织相应的专业组,又按项目组织项目组,人员既属于某个专业组,又属于某个项目组)
2.程序设计小组的组织方式
- 主程序员小组(一名主程序员、若干程序员、一名后援工程师、一名资料员)
- 民主制小组(组内成员地位平等)
- 层次式小组(一名组长领导若干名高级程序员,每名高级程序员领导若名干程序员)
(五)软件配置管理
1.基线
作用: 使各开发阶段的工作划分更加明确,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。
2.软件配置项
包括:
- 系统规格说明书
- 软件项目实施计划
- 软件需求规格说明书
- 设计规格说明书
- 源代码清单
- 测试计划和过程、测试用例和测试结果记录
- 操作和安装手册
- 可执行程序
- 数据库描述
- 用户手册
- 维护文档
- 软件工程标准
- 项目开发小结
3.版本控制
软件的每一个版本都是源代码、文档、数据的一个汇集,而且各个版本都可能由不同的变种组成。
4.变更控制
变更必须严格地加以控制和管理,保持修改信息,并把精确、清晰的信息传递到软件工程过程的下一步骤。
配置库分类:
- 开发库(开发人员使用,信息可频繁修改)
- 受控库(软件开发周期中某一阶段工作结束时发布的阶段产品)
- 产品库(开发的软件产品完成系统测试后,作为最终产品存入此库,等待交付用户或现场安装)
(六)风险管理
1.风险识别
风险类型:
- 产品规模
- 商业影响
- 客户特性
- 过程定义
- 开发环境
- 开发技术
- 人员才干及经验
2.风险预测
风险预测活动:
- 建立一个尺度或标准,以反映风险发生的可能性
- 描述风险产生的后果
- 估算风险对项目和产品的影响
- 标注风险预测的整体精确度,以免产生误解
评估风险影响:
- 风险的本质
- 风险的范围
- 风险的时间
3.风险评估
对于大多数软件项目来说,成本、进度、性能是三种典型的风险参照水准。
对于成本超支、进度延期、性能降低,有一个表明导致项目终止的水准。
4.风险控制
目的是辅助项目组建立处理风险的策略。
必须考虑的问题:
- 风险避免(根据历史经验,在风险发生前分析引起风险的原因,然后采取措施,以避免风险的发生)
- 风险监控(监测团队成员对项目压力的普遍态度、团队的凝聚力、报酬及利益的潜在问题)
- RMMM计划(将风险管理步骤组织成一个独立的风险缓解、监控和管理计划(RMMM计划))