在开发新的软件系统过程中,由于存在许多不确定因素,软件开发失败的风险是客观存在的。因此,风险分析对于软件项目管理是决定性的。风险分析实际上就是贯穿在软件工程过程中的一系列风险管理步骤,其中包括:风险识别、风险估计、风险管理策略、风险解决和风险监督等。
要理解风险分析,我们首先要理解‘风险’这个名词。用汉语的逻辑去对这个词做一个通俗性解释,可以这么展开:风险=“一个不好的事情可能会发生”。这里要注意这句话里的两个要素:一是“可能”,即这是一种可能性的预测,他不是真实已经发生的或者100%一定发生了的事;二是“不好的事”,站在软件产品质量的角度而言,就是质量的一个瑕疵、问题。
那么总结一下,对于软件产品而言,产品的风险就是软件产品可能会有质量问题的情况(更直白一点就是,产品可能会有缺陷)。
我们引用ISTQB对于产品风险定义:
在软件或系统中的潜在失效部分(即将来可能发生不利事件或危险)称之为产品风险,因为它们对产品质量而言是一个风险,包括:
故障频发的软件交付使用;
软件/硬件对个人或公司造成潜在损害的可能性;
劣质的软件特性(比如功能性、可靠性、易用性和性能等) ;
低劣的数据完整性和质量(例如:数据迁移问题、数据转换问题、数据传输问题、违反数 据标准问题);
软件没有实现既定的功能。
那么为什么我们研发的软件产品会有风险存在呢?其实问这个问题就等同于问’为什么软件产品可能会有缺陷呢‘?其实这个问题的本质就在于’人都是会犯错误的‘这样一个论断的成立。基于这个论断我们又可以推论出:’因为人都会犯错误,所以人开发出来的软件也就可能带有错误‘。这些在研发过程中我们犯的错误,遗留在产品中,就是缺陷;缺陷存在的可能性,就是产品风险。
我们还可以更具体的去讨论,哪些因素,可能导致我们研发软件时更容易在产品中遗留错误:
① 产品大小/代码量:工作量越大,那么我们就越有可能犯错。
② 技术因素:未曾使用过的新技术都存在风险。包括未使用过的新型硬件、支持软件,缺乏标准与规范的非传统的开发方法等。技术过时也是风险。技术风险一般难于改正。
③ 开发环境:适用的开发工具不足、不可靠、使用不方便等因素,都会降低开发效率。
④ 组织规模和人员经验:比如人手不足,人员经验不丰富,都有可能带来产品风险。
⑤ 客户因素:表现在客户需求经常矛盾,不了解客户的特殊需要,客户不了解项目中采用的新技术,且双方又难于沟通等。
所以,既然软件产品的风险是客观存在的,我们就要采取必要手段对风险进行处理,于是就引出了我们今天的课题,’风险分析‘。
首先描述一下风险分析的步骤,一般而言我们可以认为风险分析包括以下部分内容:
风险识别 想要控制风险,我们首先要知道有哪些风险,不然谈何控制?
风险评估 知道了有哪些风险,其次我们要判断风险有多大,有多严重
风险缓解 知道了风险有哪些和他的严重程度,我们就要想办法去缓解和规避风险
风险管理 最后我们要对风险进行管理,达到风控的目标
理论说了这么多,下面用一个简单的实际例子来诠释风险分析的过程。
我还是拿上一篇《实例!软件缺陷数据度量和分析》中的COTS项目为例,这个项目情况是这样的:
该项目为一个COTS产品的定制性二次开发项目
项目周期计划为4个月,实际完成时间为6个月
项目是一个总体人员不到10人的小型项目
采用持续集成,高速迭代的研发方式
第一步:列出软件的所有功能和特性
根据项目相关人员对本项目的调研,我们列出了以下的软件功能模块和特性:
所有主功能:订单支付模块、用户管理模块、后台管理模块、浏览展示模块、用户评价子系统、活动模块、促销管理模块
质量专项问题:功能性问题、性能问题、界面问题、易用性问题、安全性问题、计算错误、描述错误
用表格来展示就是这样的: