与任何其他工程项目一样,软件工程项目的开发也存在各种各样的风险,有些风险甚至是灾难性的。R.Charette认为,风险与将要发生的事情有关,它涉及诸如思想、观念、行为、地点、时间等多种因素;风险随条件的变化而改变,人们改变、选择、控制与风险密切相关的条件可以减少风险,但改变、选择、控制条件的策略往往是不确定的。在软件开发过程中,人们关心的问题是,什么风险会导致软件项目的彻底失败?顾客需求、开发环境、目标机、时间、成本的改变对软件项目的风险会产生什么影响?人们必须抓住什么机会、采取什么措施才能有效地减少风险、顺利完成任务?所有这些问题都是软件开发过程中不可避免并需要妥善处理的。软件工程的风险分析包括:风险标识、风险估算、风险评价和风险管理四部分。
1、风险标识
从宏观上看,风险可以分为项目风险、技术风险和商业风险三类。由于项目在预算、进度、人力、资源、顾客和需求等方面的原因对软件项目产生的不良影响称为项目风险。软件在设计、实现、接口、验证和维护过程中可能发生的潜在问题,如规格说明的二义性、采用陈旧或尚不成熟的技术等等,对软件项目带来的危害称技术风险。开发了一个没人需要的优质软件,或推销部门不知如何销售这一软件产品,或开发的产品不符合公司的产品销售战略,等等,称为商业风险。这些风险有些是可以预料的,有些是很难预料的。为了帮助项目管理人员、项目规划人员全面了解软件开发过程存在的风险,Boehm建议设计并使用各类风险检测表标识各种风险。例1给出一个参考性的“人员配备风险检测”。
例1、人员配备风险检测。
(1)开发人员的水平如何。
(2)开发人员在技术上是否配套。
(3)开发人员的数量如何。
(4)开发人员是否能够自始至终地参加软件开发工作。
(5)开发人员是否能够集中全部精力投入软件开发工作。
(6)开发人员对自己的工作是否有正确的期望。
(7)开发人员是否接受过必要的培训。
(8)开发人员的流动是否能够保证工作的连续性。
上述问题可以选用0,1,2,3,4,5来回答。完全肯定取值为0,反之为5,中间情况分别取值1,2,3,4.值越大表示风险越大。人员配备风险检测表反映了人的因素对软件项目的影响,可以用它来估算人的因素对软件项目带来的风险。
2、风险估算
软件项目管理人员可以从影响风险的因素和风险发生后带来的损失两方面来度量风险。为了对各种风险进行估算,必须建立风险度量指标体系;必须指明各种风险带来的后果和损失;必须估算风险对软件项目及软件产品的影响;必须给出风险估算的定量结果。
3、风险评价和管理 在风险分析过程中,经常使用三元组[RI,LI,XI]描述风险。其中RI代表风险,LI表示风险发生的概率,XI是风险带来的影响,I = 1,2,…L是风险序号,表示软件项目共有L种风险。软件开发过程中,由于项目超支、进度拖延和软件性能下降都会导致软件项目的终止,因此多数软件项目的风险分析都需要给出成本、进度和性能三种典型的风险参考量。当软件项目的风险参考量达到或超过某一临界点时,软件项目将被迫终止。在软件开发过程中,成本、进度、性能是相互关联的。例如,项目投入成本的增长应与进度相匹配,当项目投入的成本与项目拖延的时间超过某一临界点时,项目也应该终止进行。通常风险估算过程可分为
四步:①定义项目的风险参考量;②定义每种风险的三元组[RI,LI,XI];③定义项目被迫终止的临界点;④预测几种风险组合对参考量的综合影响。
三元组[RI,LI,XI]是风险管理的基础。设高级职员流动给项目带来的风险为RI.根据历史的经验或直观感觉,高级职员离开课题组的概率:LI = 70%.这一事件的出现带来的影响XI是项目开发时间延长15%,项目成本增加20%.于是项目负责人可以采取下列风险管理措施:
(1)项目开始以前应控制产生风险的原因,在项目开工后应想方设法减轻风险影响。
(2)了解导致项目开发人员变动的原因,在项目开发期间应控制上述原因,尽量减少人员的流动。
(3)在工作方法和技术上应采取适当措施,防止因人员流动给工作带来损失。
(4)项目在开发过程中应及时公布并交流项目开发的信息。
(5)建立组织机构,确定文档标准,并及时生成文档。
(6)对工作进行集体复审,使多数人都能了解工作的细节,跟上工作进度。
(7)为关键技术准备后备人员。
为了降低高级职员流动给软件项目带来的风险,管理人员可以采取培养后备的措施。在软件开发过程中,尽量让更多的人参与总体设计和关键技术的攻关工作。实施这些措施需要一定的人力、时间和经费。管理人员应根据降低风险、减少损失的原则,客观地分析形势,做出正确的决策。
一个大型软件的开发大约存在30至40种风险。如果每种风险都需要3至7个风险管理步骤,那么风险管理本身也可以构成软件开发过程的一个子项目。人们必须懂得,风险管理不仅需要人力资源,而且还需要经费的支持。
【责编:huangchunmei】
--------------------next---------------------