【IT168 技术文章】
1、引言
由于软件项目的研制需要开发新的技术,或使用许多已经过验证的技术和产品,但产品生产数目一般较少,这些技术和加工工艺不容易达到成熟或定型的程度。且大型项目的研制需要长时间大规模的组织、指挥协调工作,以及漫长的研制周期等,都会带来种种难以预见的不确定性因素。这些不确定因素的存在使得软件项目能否按照预定的计划--费用、进度和性能完成研制任务往往难以预料,不可能做到研制完全成功,存在着失败的风险。所以在项目研制的可行性分析和方案认证时,加强方案风险分析是十分必要的。
对风险的研究自七十年代末开始,其应用的风险分析方法与可靠性分析方法类似,或在此基础上进行扩充。目前,在风险研究方面,比较著名的方法有GERT(图解评审技术),VERT(风险评审技术),RSINET(风险信息系统与网络评审技术)和SLAM(多功能构模仿真语言)等。GERT的基本特点是可以直接对网络模型进行计算机仿真分析,其模型元素与相应的分析程序相配合,可以用来描述复杂的排队系统、项目管理及生产线方面的问题,应用十分简便、灵活,而对时间、费用、性能方面的问题不太适合;SLAM是一种以FORTRAN为基础的构模仿真语言,可进行离散网络、连续系统及离散事件的综合仿真,能适应多种构模需要,但提供资源模块有限,仿真不能进行全过程支持,不能支持图形建模等不足;VERT可处理时间、费用、性能等关键性风险参数,能对多目标优化,具有较大的实用价值。在这些风险方法中,VERT对于时间、费用和性能三个指标在处理水平上平等对待,既可独立地进行并行处理,也可通过数学关系式而相互联系起来进行处理;节点的逻辑功能丰富,活动上的三项指标都可用一定的概率分布、直方图或数学关系式来描述,因而VERT网络模型比较接近实际系统的要求;VERT对于费用和性能这二项指标,可按用户的需要灵活地加以应用。
2、风险分析的概念
风险的定义是:对目前所采取的行动,在未来没有达到预期结果(失败)的可能性。其大小可用失败的概率和失败的后果两个变量来标识。
风险分析有狭义和广义两种,狭义的风险分析是指通过定量分析的方法给出完成任务所需的费用、进度、性能三个随机变量的可实现值的概率分布。而广义的风险分析则是一种识别和测算风险,开发、选择和管理方案来解决这些风险的有组织的手段。它包括风险识别、风险评估和风险管理三方面的内容。本文中论及风险分析时,都采用后一种定义。
风险识别是指确定哪些可能导致费用超支、进度推迟或性能降低的潜在问题,并定性分析其后果。在这一步须作的工作是分析系统的技术薄弱环节及不确定性较大之处,得出系统的风险源,并将这些风险源组合成一格式文件供以后的分析参考。它属于定性分析的范围。风险评估是指对潜在问题可能导致的风险及其后果实行量化,并确定其严重程度。这其中可能牵涉到多种模型的综合应用,最后得到系统风险的综合印象。而风险管理则是指在风险识别及风险分析的基础上采取各种措施来减小风险及对风险实施监控。这也可以说是风险分析的最终目的。
作为对风险概念的进一步界定,本文将简单介绍风险中的两种不同类型及风险分析与可靠性分析的区别。
2.1、系统运行及项目研制风险
为进一步明了风险分析的概念,我们必须注意到两类不同的风险。
第一类风险是系统运行风险。指当一部分系统运行时,由于种种不确定性因素或系统本身硬件或组元的失效而造成预定任务的完成不确定性以及由此而带来的系统设备的损坏或人员的伤亡。这类风险由于其明显的危害性及影响性,目前进行研究得较多,有代表性的如大型航天软件的运行风险管理。已经发展成熟的分析方法有如FMECA(失效模式与效应分析)、FTA(故障树分析)、ETA(事件树分析)及事件树/故障树分析量化基础上的PRA(风险概率评估)和DPRA(动态概率风险评估)等。
第二类风险是项目研制风险,这也是本文的主要研究范围。它是指大型项目研制开发过程中,由于技术的难以保证、管理的不得力及经费的拖延导致研制出的系统性能降低、费用超标、进度延迟等。这类风险由于其危害呈隐性,目前进行研究得较少。项目研制风险一般包括技术风险、进度风险及费用风险。
两类风险的不同之处在于,对于系统运行风险,系统已经存在,因对其分析必须从单个硬件或主元的失效及其综合影响上考虑。而作为项目研制风险,由于并无一确定的系统,系统研制成功本身便是研制任务的状态之一,这决定了它的分析方法与上述不同,不能针对硬件分析,而须从事件的角度上进行考察。两类风险的另一个不同之处在于项目风险的非刚性。所谓非刚性是指当风险源导致风险发生以后,造成的后果可以修复。
2.2、系统运行风险与可靠性
系统运行风险与可靠性分析是两个极易混淆的概念,它们都是指对于某种工艺过程或设备的失效或运行状态的研究。但其分析的目的却有所不同,有必要在此作一简单的区分。
可靠性的定义是系统在一定时间内能够完成规定任务的概率。其研究的范畴在于系统硬件或组元的耐用程度,研究的最后结果是系统整体失效随时间而变化的可能性。而系统运行风险则是研究这种失败可能对社会造成的危害,其最后结果是造成的系统设备损坏的或人员伤亡的期望值。