风险管理是一个系统,用于识别、解决和消除可能对项目成本、进度或技术成功或项目团队士气有害的问题。
“明天的问题就是今天的风险。” 因此,“风险”被明确定义为可能造成一些损害或威胁项目进度但尚未发生的问题。
如果不主动管理风险,就会面临风险。
软件开发 是一项高风险活动,在项目开发过程的任何阶段都可能存在风险。采用主动的风险管理方法,可以使项目过程更加稳定,获得较高的项目跟踪和控制能力,可以规避和转移风险,或减轻风险的不利影响。
风险管理是识别、分析、响应和监控项目风险的过程。它是项目管理中一项非常重要的管理活动。有效实施软件风险管理是软件项目开发顺利完成的保障。
风险管理的实现必须包括三个要素:
- 项目开发计划中必须制定风险管理计划;
- 项目预算必须包括解决风险所需的资金;
- 在评估风险时,风险的影响也必须包括在项目规划中。
让我们讨论如何采取预防措施来减轻软件开发过程中经常发生的风险。
- 需求不明确 ——需求不明确是软件开发过程中经常遇到的问题。此类问题往往表现在需求范围不明确、需求未细化、需求描述不明确、需求缺失、需求冲突等诸多方面。在软件开发过程的生命周期中,需求不明确造成的浪费是最大的,必须尽快解决。很难确定用户的需求。
预防措施
- 让用户通过更短更频繁的讨论和会议参与开发
- 使用线框/用户界面原型开发并与利益相关者沟通
2、对于用户分布广、用户数量多的项目,往往难以全面收集用户需求,通常采用需求调研会议来确认需求。
预防措施
会议前几周,我们调查了各地区、各部门的用户需求,然后召集各地区、各部门的用户代表召开需求研讨会,通过会议收集需求。这种方式适合有一定IT经验的用户。
2. 80/20 陷阱 ——当项目经理或开发人员说已经完成了 80% 的任务时,你必须谨慎。因为剩下的 20% 可能会占用 80% 的时间,也可能永远不会完成。
软件开发项目在项目进度和软件质量方面往往缺乏可见性。项目的知名度越低,项目就越难控制,失败的可能性就越大。我们可以通过迭代开发、技术审查和持续集成来提高项目的可见性。
预防措施:
- 迭代开发 使用迭代开发模型,将产品交付过程划分为多个阶段,并根据功能增量交付。
- 技术评审是保证软件质量的重要环节。技术评审包括代码演练、会议评审和同行评审。代码审查可以是开发人员之间的交叉审查,也可以是高级开发人员对普通开发人员的审查;会议评审一般每两周至少进行一次,每次评审时间不宜过长,这是项目成功的重要保证。
- 持续集成可以将最终的大规模集成和调试过程分散到项目的每周和每天的开发进度中。让项目中的每个人都能随时掌握当前的整体进度,快速发现并解决集成过程中的问题。
3. 技术创新 是探索性和创造性的技术经济活动。在发展过程中,引进新技术必然会遇到各种风险。诸如 T 型软件开发和使用带有尖峰用户故事的新技术进行原型设计等措施。
4 、性能问题 ——由于缺乏对软件设计的洞察力,在部署系统或使用新系统一段时间后,往往会暴露出性能问题。性能问题通常需要大量的优化工作,甚至是部分或全面的重新设计。用户和开发人员都不希望出现性能问题。团队需要意识到这个问题,在整个开发过程中实施性能规划和测试,并将性能需求包含在非功能性需求中。
5 、可用性问题—— 软件的可用性包括软件是否高效、易学、易记、愉悦、不易出错等诸多因素。往往由于软件的易用性差,用户不满意,甚至被市场淘汰。在项目开发中,应注意可用性问题,避免软件可用性风险。
风险分解结构
我们可以使用风险分解结构对不同方面的潜在风险进行分类:
风险分解结构是风险的层次分解,从代表项目的根节点元素开始,向下到各个风险类别,再到更细级别的风险。
除了在风险分解结构中呈现项目风险外,还可以结合使用颜色图例来表示风险的影响。看看下面的风险分解结构示例,已经设置了一个包含五个项目的影响图例,用五个不同的颜色代码表示风险可能对项目产生的五个影响级别。
这是一个风险分解结构示例:
您可以使用许多风险管理工具来构建风险。除了风险分解结构,您还可以考虑使用 因果图 (也称为鱼骨图)。
结论
越早识别和管理风险,就越有可能避免风险,或减少风险发生时的影响。尤其是在项目参与者众多的复杂项目中,应加强参与范围广、技术含量高的项目。