第 3 章 软件项目计划3.1风险分析教学内容:风险标识、风险估计、风险评价和风险管理与监控教学重点:风险标识教学难点:风险估计教学方法:课堂讲授 + 讨论教学要求:掌握风险标志方法,了解风险估计和评价,理解风险管理思 考 题:为何要对软件项目进行风险分析?风险标识风险发生的“不确定性”和风险发生后带来的“损失”是风险包含的两个重要 特性在进行风险分析时重要的是量化“不确定性”的大小和与每个风险相关的 “损失”的程度风险标识是进行风险分析的第一步从宏观上来看,可将风险分为 3 类,即项目风险、技术风险和商业风险另一种常用风险分类方式由Charette提出,将风险分为了 3类:已知风险、可预测风险和不可预测风险一种识别风险的好办法便是得用一组提问帮助项目计划人员了解在项目和计划 方面存在哪些风险Boehm建议使用一个“风险项目检查表”, 列出所有可能的 与每个风险因素有关的提问,从以下几个方面识别已知的或可预测的风险① 产品规模② 商业影响③ 客户特性④ 过程定义⑤ 开发环境⑥ 建造技术⑦ 人员数量及经验风险估计风险估计主要有两个方面的工作, 一是估计风险发生的可能性, 另外是估计与风 险相关的问题出现后将会带来的损失。
为此, 项目计划人员、 其它管理人员和技 术人员一起进行四种风险估计活动, 即建立一个尺度或标准来表示一个风险的可 能性;描述风险的结果; 估计风险对项目和产品的影响; 确定风险估计的正确性, 给出风险估计的定量结果估计每个风险所产生的影响时, 对 4 个风险因素:性能(即产品能够满足需求且 符合其使用目的的不确定程度) 、成本(即项目预算能够被维持的不确定程度) 、 支持(即软件易于纠错、适应及增强的不确定程度)和进度(即项目进度能够被 维持且产品能按时交付的不确定程度) ,分别确定影响类别(即灾难的、 严重的、 轻微的和可忽略的),并求平均或加权平均,得到一个整体的影响值 不同的风险发生后对项目造成的影响各不相同, 主要有 3个方面需要考虑, 即风 险的性质(风险发生时可能产生的问题)、风险的范围(风险的严重性及总的分 布,如项目的多少部分或有多少用户受到损害等)、风险的时间(何时能感受到 风险及风险持结多长时间) 据此确定风险估计的加权系数, 以得到项目的风险 估计风险评价[ri, pi, ei],其中 ri在风险评价时,可根据风险估计的结果,建立一系列三元组:表示风险,pi表示风险出现的概率,ei表示风险产生的影响, i=1,2,表示风险的序号,假定软件项目共有 M 种风险。
要对项目风险进行评价, 必须定义一个风险参考水准 对于大多数项目而言, 性 能、成本、支持和进度就是典型的风险参考水准对于性能下降、成本超支、支 持困难或进度延迟, 都有一个水准值的要求, 超出它就会导致项目被迫终止 在 软件项目的风险分析中, 一个风险参考水准存在一个单独的点, 称之为参考点或 临界点,在该点上决定继续或终止(如果问题较大)该项目都是可以接受的,但 超过它时会引起项目终止通常,风险评价可分为如下 4 步:① 定义项目的各种风险参考水准,如成本、进度等;② 找出每个[ri, pi, ei与各参考水准之间的关系;③ 预测一组临界点以定义项目的终止区,该区由一条曲线或易变动区域来界定;④ 预测怎样的风险组合,会影响参考水准3.1.4 风险管理与监控 风险管理是指利用某些技术,如原型化、软件自动化、可靠性工程学,以及某些 项目管理方法等设法避免或转移风险与每种风险相关的三元组 [ri, pi, ei是风险管理的基础[例3-1]设项目组高级职员流动给项目带来的风险为 r1,基于过去的历史和管理经 验,高级职员离开项目组的概率为p仁70%;该风险带来的影响el的估计值使项 目开发时间增加 25%,项目的成本增加 30%。
为了管理这一风险, 项目管理者必 须制订一些策略,一种可能的风险管理策略如下: ①与现有人员探讨人员流动的原因, 在项目开发期间控制这些原因, 尽量减少人 员的流动;② 在项目开始前,采取行动缓解在管理控制之下的原因;③ 项目启动时做好人员流动的准备;④ 对项目进行良好的组织,使每一开发活动的信息能被广泛传播和交流;⑤ 制定文档标准并建立相应机制,确保文档能被及时建立;⑥ 对所有工作进行详细复审,使大多数人能了解工作细节,跟上工作进度;⑦ 对每个关键的技术人员均指定后备人员实施风险管理策略会带来一些额外的开销 项目管理人员或计划人员要对风险管 理策略的实施进行成本 / 效益分析仅当实施风险管理策略所需的成本小于风险 管理带来的效益(即风险带来的影响)时才可考虑实施风险管理策略例如 [3-1] 实施其对应的风险管理策略仅增加 2%的成本和 4%的开发时间,而风险带来的影 响的估计值使项目开发时间增加 25%,成本增加 30%,从而管理或计划人员应考 虑实施有关风险管理策略从风险管理的角度来看, 风险发生的概率和风险影响起着不同的作用 一个具有 高影响但发生概率很低的风险不应该花太多的管理成本。
而高影响且发生概率为 中到高的风险以及低影响且高发生概率的风险,应该首先列入管理的考虑之中 同时,对于有些已标出、 评估及预测过的风险可能也不纳入风险管理的考虑 按 照Pareto的80-20规则,80%的软件风险能够由仅仅20%的已标出风险来说明 随着项目的进展,风险监控活动便开始了,风险监控是一种追踪活动,主要有 3个目标:① 事件和主要风险因素的跟踪,判断一个预测的风险事实上是否发生了;② 风险估计,确保针对某个风险制定的风险管理措施正在实施;③ 收集可用于将来风险分析的信息在例 3-1中,应该监控:项目组成员对于项目压力的一般态度, 项目组的凝聚力;项目组成员之间的关系; 与利益相关的潜在问题; 在公司内外工作的可能性; 等3.2 进度安排教学内容:进度安排的基本原则、工作量分配、PERT技术、Gantt图技术教学重点:PERT技术、Gantt图技术教学难点:PERT技术教学方法:课堂讲授 +习题教学要求:掌握PERT技术和Gantt技术,了解进度安排的基本原则3.2.1 进度安排的基本原则同软件工程的其它方面一样, 有一些基本原则可以用来指导软件项目计划的进度 安排① 任务分解:将软件工程项目的任务分解成易管理的子任务 ,即作业;② 作业依存:确保作业间的依存关系一一顺序和并发;③ 时间分配:为每个作业指定开始和终止时间;④ 资源约束:在进行时间分配时应考虑资源约束,如人员数量、工具;⑤ 定义责任:应指定某特定小组负责某个作业;⑥ 定义结果:对每个作业定义相应的结构 产品或产品的一部分;⑦ 定义里程碑:每个作业或作业系列应与项目的里程碑相联系。
随着项目进度的发展,上述每条原则都可能用到3.2.2 工作量分配在可行性研究阶段, 通过成本估算方法获得了完成某项软件开发任务所需工作量 的估计值 在制订软件项目计划时, 需要将工作量的估计值在软件定义与开发阶 段进行分配另一种称为“ -4200-40规则”的工作量分配建议方案认为:在整个软件开发过程 中,编码的工作量约占 20%,编码前的工作量占 40%,编码后的工作量也占 40%, 显然,这一工作量分配方案不强调编码工作 实验上, 现在对于大型软件项目而 言,编码的工作量所占分额还在进一步缩小对实际开发的软件项目进行统计表明; 一般在计划阶段所需工作量很少超过项目 总工作量的 2%~3%,除非是具有高风险的巨资项目;需求分析可能占用项目工 作量的 10%~25%,用于分析或原型开发的工作量与项目规模和复杂度成正比增 长;通常有 20%~25%的工作量用于软件设计, 包括设计评审和迭代修改的时间; 由于设计时投入了相当的工作量,使编码工作变得相对简单些,用 15%~20%的工作量就可以完成;测试和随后的调试工作约占 30%~40%的工作量,且测试的 工作量取决于软件的质量特性要求,如可靠性程度等。
3.2.3 进度安排方法 软件项目的进度安排与任何一个工程项目的进度安排没有实质上的不同 首先识 别一组项目任务作业, 建立任务作业之间的相互关联, 然后估算各个任务的工作 量,分配人力和其它资源, 指定进度时序 原则上可以把一般工程项目的进度安 排方法和工具应用于软件工程项目 下面主要介绍两种方法, PERT 技术和 Gantt 图方法1.PERT 技术PERT 技术( Program Evaluation & Review Techniqu,ePERT) 又叫计划评审技术20 世纪 50 年代后期,美国海军和洛克希德公司首次提出这一技术,并成功地应 用于北极星导弹的研究和开发 几十年来,它在许多工程领域获得了广泛的应用, 有时也因此称之为工程网络技术2.Gantt 图方法Gantt 图,又称横道图,用水平线段来描述各作业的进度安排一般在每一作业 的起始时刻和约束时刻各画一个小三角形, 当作业开始或结束时, 把小三角形涂 黑 Gantt 图的横轴列出的是日历时间,纵轴列出的是作业名称3.3 项目组织教学内容:人员组织规律、人员组织形式教学重点:人员时间权衡定律、 Brooks 定律教学难点:矩阵模式组织结构。
教学方法:课堂讲授教学要求: 了解人员组织规律,熟悉人员组织形式 思 考 题:为何向已经延期的项目增加开发人员反而会使项目更加延期?为何软 件开发人员应该少而精?3.3.1 人员组织规律对于一个软件项目而言, 单个软件专业人员不可能在有限时间内单独完成 如何 合理地组织这些人员参与软件的开发是项目成败的关键 为此,软件项目管理者 应该重视软件项目的人员组织规律,不能简单地对待1. Rayleigh-Norden曲线以Rayleigh爵士的名字命名的曲线本来是用于解释某些科学现象的 1958年,Norden 发现该曲线可用来说明科研及项目开发在实施过程中人力的需求 1976 年,Put nam又发现在软件生存期各阶段所需的人力分配具有与 Rayleigh曲线十分 相似的形状2. 两条定律Putnam在对Raleigh曲线进行大量研究的基础了,提出了 Putnam模型该模型 指出,软件开发工作量与软件开发时间的 4次方成反比,Put nam将这一结论称 之为“软件开发的人员——时间权衡定律”3.3.2 人员组织形式人员组织是一切软件项目管理的关键 无法想象一个松散、 责任不明确的一伙人在一起可以高效地开发软件。
软件开发机构选择怎样的人员组织形式, 要针对软 件项目的特点和参与人员的素质来决定 在建立软件开发组织时, 应注意: 责任 到人——尽早将责任落实, 便于管理; 合理分工——减少不必要的通信, 提高工 作效率; 责权均衡——责任与权力的平衡, 有助于任务的完成 就软件项目的组 织结构而言,通常有两种模式可供选择1)层次模式层次模式是一种传统的管理结构, 每一层人员向上层报告工作并且管理下层的人 员2)矩阵模式矩阵模式实际是层次模式的扩展, 一方面每个项目有一个项目经理管理, 另一方 面,每一个项目又分为若干阶段,按受阶段经理的管理对于层次模式中的小组和矩阵模式中的子项的组织,主要有三种组织形式 (1)主程序小组主程序员小组组织形式最早由 H. Mills提出,并由Baker描述出来,小组主要由 以下人员组成: 1名主程序员; 2-5名技术人员。