0引言
随着软件项目的日益复杂和庞大,软件生产与管理也曰益复杂,软件风险性也随之增大。软件项目的风险特征表现如下:(1)随机性,表现为风险发生的时间、持续时间及风险后果的随机性;(2)复杂性,软件项目风险发生环节多、涉及面广、风险类型复杂且各种风险之间关联性较强;(3)不完全性,表现为发生风险信息的不完全和模糊性;(4)动态性,风险变化快且具有传递效应,风险的影响效应可能会在传递过程中不断积累和放大,进而对整个软件开发过程产生致命的重大影响。因此,近些年来人们开始重视软件风险的研究,把软件风险纳入软件工程的一个重要研究范畴。研究的目的就是探索软件风险的概念、特性,风险处理的策略、方法,以降低或克服软件风险的危害性,从而提高软件产品的质置4]。
Pressman指出:为了实现软件工程化的管理,必须针对该项目的开发环境和及应用特征,为各项开发活动的流程确定选择一种合适的框架,称之为SoftwareProcessModel[5]。Boehm指出[叭在软件开发过程模型中评估和控制风险是最有效率的风险管理方式。Chapman认为在项目生命周期的各阶段都应该有正式的风险管理过程(RMP)7]。IEEE首次以技术规范书的形式,提出了在软件项目管理中进行风险管理的重要性,并对软件项目中的风险的影响提出了风险识别,风险分析与风险分级的分析方法。对于风险计划的编制,风险的监测和风险的持续管理进行了论述。CaUahan和SaboMi[8]对于软件开发提出了一个V&V的识别方法,即对软件项目要进行VerificationandValidation即双V验证,其主要观点是对软件开发的全过程要进行风险的管理,对于每一个软件开发项目中可能发生的风险,用验证和证实的双重方法去观察可能发生的风险,要对项目中已经出现的风险根据其对项目的影响程度来分级处理。然而,大多数针对软件开发过程中的风险管理的研究还停留在经验层面,软件开发实践中的许多方法还缺乏相应的理论基础。
本文从软件开发过程的概念出发,研究并探索了在软件项目开发过程融入风险分析及风险管理的方法。在螺旋模型的基础上提出了集成风险管理的软件项目开发过程模型,并运用实物期权理论框架解释和证明了该过程模型的优势。以期权的观点来看,螺旋模型的主要优势来自于迭代开发过程中包含的决策灵活性。在每一阶段对任务和风险进行重新评估,给予了开发者是否继续下一轮开发的期权选择,这些选择的权利帮助决策者充分把握有利的机会,并在技术变化或竞争加剧等不利情况下具备退出的权利,以更大的灵活性应对软件开发过程中的风险。本文使用变波动率多期复合实物期权模型量化了螺旋开发过程模型中决策灵活性的价值,从理论上证明了在不确定环境中应用该过程模型的优势。
1软件开发过程与软件风险
软件开发有4大要素:人员、项目、产品和过程。软件开发过程就是将用户需求转化为产品所需要的完整活动的集合,是建造高质量软件产品的框架。一个软件开发过程定义了软件开发中采用的方法、模型等,是对软件项目进行控制和管理的基础[9]。软件开发过程与软件风险有紧密的联系,历史上曾经出现过许多软件开发过程模型,以下简单讨论一些有代表性的主要过程模型及其与软件风险的关系。
1.1瀑布模型与软件风险
瀑布模型是通过一系列单向开发流程:定义、需求、分析、设计、实现、测试和维护等来完成产品的研制,强调详细的分析与设计,并严格按照规定的步骤开发软件,以保证软件的质量和可维护性,是一种计划驱动的开发方式然而,由于用户往往在最后才能看到产品,问题在测试与集成阶段才能发现,因而在需求变化的情况下风险性极大。
12原型模型与软件风险
快速原型法是一种快速,灵活,交互式的软件开发方法。快速原型法的核心是用交互的,快速建立起来的原型取代了形式的、呆板的详细文档。通过建立软件原型使在系统开发早期就可以看到产品,用户通过在计算机上实际运行和试用原型而向开发者提供真实的反馈意见。该方法较适应于需求变化较大的情况,但缺乏严格的分析、设计和系统性,易造成低质量的软件系统,维护困难。
13演化软件过程模型与软件风险
它的主要原理是:软件产品是经过多次过程而演化出来的,是一种迭代的方法,通过版本的渐进、完善而逐步形成产品。演化过程模型有有增量模型、螺旋模型、构件组装模型和并行开发模型等主要类型。增量模型是线性顺序的多次迭代,一次只产生一个增量产品。螺旋模型是演化软件过程的模型,开发过程呈螺旋式递增,也是一种多次迭代的过程,它将瀑布模型中严密的系统分析设计与迭代模型的灵活性进行了综合,把风险管理作为软件过程的一个必要环节,在降低大型的复杂软件系统的开发风险方面具有独特的优势。
1.4面向对象方法与软件风险
面向对象方法是目前的主流开发方法。它从对象及对象间关系出发,试图使问题空间与解空间达到尽可能一致,从而寻找出一种良好的软件过程模型。面向对象方法的优点是:与人类的思维方式一致、开发出的产品稳进性好、构件的可重用性好、产品的可维护性好、易于测试和调试。在这个方法中有许多流派,主要有:Rumbaugh方法、Shlaer/lellor方法、Jacobson方法、Booch方法、Yourdon方法、Martin/()dell方法等。每一种方法基本相似,但建模手段和软件过程略有区别。从整体上来说,面向对象方法有效地降低了软件风险性,是一种较好的开发技术。但由于不同流派的方法,其软件开发过程与管理技术有所不同,所以软件风险的处理也缺乏统一的标准和方法。
15统一软件开发过程与软件风险
统一过程也是一个软件开发过程。软件开发过程是一个将用户需求转化为软件系统所要进行的活动的集合['统一过程是一个通用的过程框架,可用于各种类型的软件系统和不同的应用领域。统一过程是基于构件的,并通过构件的标准接口相互连接而建造出来的U3];统一过程使用统一建模语言UML来制定所有的软件蓝图;统一过程的突出特点是用例驱动、以构架为中心、迭代和增量的开发过程。由于统一过程采用统一建模语言UML生命周期有多次循环过程,并采用迭代与增量的开发方法,在每一阶段都经过多次迭代,由迭代过程来进化产品,所以有效降低了软件的风险性,也被认为是一种风险驱动的开发方法。
综上所述,虽然目前有众多的软件开发过程模型,有些具有典型意义的,而有些是基本类的变型和调整。大多软件开发过程缺乏互动性,带有一定的主观色彩,并且往往忽视了在软件开发过程模型中对不确定性进行风险管理的必要。从风险控制的观点出发,把整个软件开发过程作为一个前后有影响、互为联动的一个整体来认识,这方面的研究为数尚少。
2集成风险管理的螺旋开发过程模型
在以瀑布式开发过程为代表的传统过程模型中软件开发生命周期方法阶段的定义暗示着每种工作的集合必须完成后,下一个阶段才能开始。它主要有以下特点:(1)在项目或产品的生命周期内,不同的工作组处理不同阶段的任务。
(2)每个阶段的工作通过文档方式沟通,以保证工作组之间工作的交接。(3)关键问题的决策在项目的早期就必须确定。(4)测试仅仅发生在项目快要结束的时候。使用了瀑布式过程模型的大型复杂项目,在时间进度和质量上隐含着许多不确定的因素。一方面,项目组花费大量时间以文档方式进行沟通,却难于得到预期的效果,另一方面,重要的错误往往在项目即将结束才被发现,从而极大地提高了修复错误的费用。更重要的是,瀑布式开发过程模型侧重于将精力集中在项目的初始需求上,要求在项目初期就必须将需求明确下来,尽量减少开发过程中发生的需求变更,再加上关键问题的早期决策往往致使项目风险难以被全过程地进行控制,因此用瀑布式过程开发的项目的结果往往不能使用户满意。为了解决线性顺序模型存在的问题,螺旋渐进式的模型被提了出来。螺旋模型被划分为若干个任务阶段,图1中描述了一个典型的螺旋模型。图中顺时针的方向开始工作。和传统模型不同的是,它的每一圈循环不一定要产出真正的产品而可能是产品的概念、规格说明、原型或其它相关的产出物,这样迭代的做法,便在于能逐步寻找出项目在需求、技术、组织结构等方面的风险,使项目风险能真正得到控制。
螺旋模型提出了一种预防性的风险管理方式,强调的是在软件设计、开发和评估等阶段都要进行风险分析,防止风险的发生和减少风险的损失,而不是在风险发生之后的补救措施。然而,螺旋开发过程模型还尚未形成系统性的风险管理体系。美国国防部认为,风险管理是处理风险的行为或实践,它包括风险计划、估价(辨识和分析)风险区域、制定风险解决方案、监督风险以确定风险的变化,并且制定整体风险管理方案。
本文在螺旋模型的基础上提出集成风险管理的软件项目开发过程模型,并将其定义为:贯穿于软件开发全过程的、以保障软件项目按计划进行的策略、方法、技术和工具的系统集合,它明显地含有风险辨识、评估、排序、计划、监督和控制活动,并成为软件开发过程的有机组成部分。
图2描述了在软件开发过程中实施系统性的风险管理的过程。在软件开发过程中,首先要定义风险,也就是识别风险,然后进行风险评估。评估风险需要考虑风险发生的可能性,风险的破坏力以及风险对整个项目的影响。在正确评估风险的基础上,需要考虑面对风险的对策。通过仔细研究风险的各个方面,力求全面了解问题并确定风险的优先级,然后考虑降低风险发生的方法,最后考虑风险发生时的对策。制定风险对策之后则要做好风险跟踪工作,在开发过程的每个任务阶段,都要对风险计划进行更新和跟踪,每个阶段结束要对风险做总结。通过以上的办法,整个风险控制在这样的预防风险管理之下,以最大限度的降低项目失败的情况。具体过程如下:
第一步要识别风险,生成一个用清晰、无二义性语句表述的包含所有风险的列表,即编写出风险说明。这时需要由项目组的成员共同寻找出可能存在的风险,以及风险涉及的领域,描述风险发生的条件以及发生后可能造成的损失。
第二步,在具体识别出可能的风险后,按优先级排列对这些风险进行排列风险的优先级是按照风险发生的概率和风险对项目的影响程度(按1一5分来评价,5分表示对项目产生最严重影响)相乘,值越高,风险的优先级越高。
第三步,在按优先级排列出来的风险中提取前面的几个作为主风险,为这些风险编写风险处理计划。在编写风险处理计划,要对每个主风险回答以下问题:
风险研究——能获得更多与该风险有关的信息吗?
风险接受——发生风险时,能够接受其后果吗?
风险规避——能通过更改项目范围规避风险吗?
风险转移——能把风险转移给其他项目、团队、组织或个人吗
风险减轻——能否采取措施降低风险发生概率或造成的影响吗?
计划风险应急方案——能通过事先计划的方案降低风险的影响吗?
在回答了上述问题之后,为这些风险制定出风险减轻的方案和应急方案,并对风险应急方案的激活设置触发条件,并指定相关的责任人。
第四步,在确定了主风险处理计划后,项目组应定期监控风险条件和影响的变化以及应急措施的触发事件确保风险处理计划能被正确执行。一方面,风险责任人即时交流风险状态的变更,报告风险减轻计划的执行情况,另一方面,当风险应急计划触发条件发生时项目组应立即采取应急方案,避免造成更大的损失。
第五步是控制风险,即当应急计划触发条件发生时执行风险应急方案,或在一段时间后,对风险的状态作一次总结,作为下一次风险分析的依据。
在该软件开发过程模型中,项目组通过上面的风险描述、风险分析、风险跟踪来达到风险控制的目的。从整个流程上可以看到,这样的风险管理是将预防风险的发生放在首要的位置上,其次才是在风险发生时的处理方案。因为对可以预见的风险已经做好了预防措施,项目实施过程中风险可以得到预先的控制和管理。
在实际运用中,该过程模型的任务阶段可以根据项目情况进行适当的调整但开发过程中风险管理方面的工作是不可或缺的。螺旋过程模型本身的提出就是为了降低软件项目的开发风险,提高软件项目的成功率。对于大型的系统或软件产品,采用螺旋过程模型是现实可行的。软件随着过程不断演进,开发者和用户都能更好地理解软件,明确新的需求,规避每一次演进时的风险。然而,对于小型项目的开发,运用这样的开发过程将可能增加更多的成本花费更多的时间。所以,该模型可以根据具体的项目作针对性的简化。
3螺旋过程模型的复合实物期权分析
实物期权理论强调管理灵活性或者说是决策灵活性的价值,认为管理者在不确定情形下应该进行等待,直到情况明朗化或开展项目的条件更加成熟时再进行决策,或者分阶段地实施项目,这样便能够在后续环节决定是否继续开发还是放弃项目,避免一次性投入而导致过大的风险。由于软件项目开发过程中的不确定性和风险因素,研究者逐渐将这种从金融领域发展起来的定价和决策方法引入到软件项目管理和决策的领域。虽然实物期权理论自身还不完善,复杂的数学工具和严格的前提假设在较大程度上限制了其优势的发挥,但已有实证研究表明,软件项目的管理者从直觉上是遵循实物期权的逻辑来应对软件项目风险的,正式的期权分析工具能为管理者有效地控制IT项目风险提供量化的、更准确的决策支持.
与其它软件开发过程模型相比,螺旋式开发模型有着更清晰的期权意昧实物期权理论为解释其含义与本质提供了有力的语言工具。螺旋模型的基本问题之一是螺旋开发过程启动和终止的时间。对此,Boehm提出了相应假设,即如果软件开发工作能促进预定目标的实现,那么就启动开发过程;如果假设不成立,则应当终止螺旋过程(即取消项目)例如,当市场需求发生变化或者已经有更好的商业软件上市时,就应当取消正在进行的项目。螺旋模型要求在每一迭代周期开始时都对这一假设进行检验,已决定是否继续或终止开发任务。因此,采用螺旋模型开发软件系统的过程是一组序列决策,相当于一个多期复合期权。
复合期权是写在期权上的期权。自Geske导出了简单的两期复合欧式期权模型封闭形式的解以后,复合期权模型得到了广泛的应用.本文中,我们引进龚朴与何志伟[17J的可变波动率多期复合实物期权模型,对上节中的软件过程模型进行建模和分析。
软件开发过程通常可分为一系列不同的阶段,每一阶段面临的风险水平都不尽相同,因此变波动率多期复合期权能更好地刻画螺旋开发过程的风险特征。假设一软件项目的开发过程有n个迭代周期,^(k=0…,n)表示第k个周期的决策时间点。在任何决策点,只有当任务假设成立时(期权解释为期权的价值高于该时刻投资成本时)才进行启动下一个迭代周期,否则放弃项目。重复此过程直到开发过程结束。
Ik代表每一周期的的投资成本,Vk(+1)(t)(k=0…,n一1)为标的项目在第k个周期的价值,假设Vk服从如下过程
其中和分别表示瞬时期望回报率和瞬时期望波动率,dzk表示标准维纳过程。这里假定Ok与财1)可随k变化,借以描述螺旋过程模型在不同的阶段所具有的不同风险特征。
采用相机权益分析(CCA)方法,每个周期的期权价值Fk在多期复合期权中,前后的期权之间有复合的关系,其终端条件和边界条件的提法是不相同的,计算过程是依次回溯。首先考虑最后一个周期,Fn'(K,!;)可看作是写在标的项目上的欧式看涨期权其终端条件为:
当标的项目的价值为0时,期权价值也为0。因此,下边界条件可写为:
对于任一阶段kFk(4)是写在Vk(+丨)上的欧式相机权益,终端条件反映了Fk(•)与Fk+丨()之间的复合关系,提法为:
与等式(4)(5)相同,下边界和上边界的提法分别是:复合期权的价值随着标的项目的价值单调递增,因此执行价格的阈值V;满足方程:
控制方程(2)与终端条件(3)、(6)以及边界条件共同构成了一偏微分方程组,由于多期复合期权中期权前后嵌套,且引入了可变参数0^+丨)和(+丨)封闭形式的解很难求得。这里采用有限差分方法求解复合期权的价值,具体算法可参考龚朴、何志伟.此处不作详细介绍。
4案例分析
某企业计划开发一ERP系统以优化企业的采购、销售以及生产等流程。整个系统将在3年内完成,预计总成本为$250000如果该系统能够成功实施,将带来大约$300000的收益。假设无风险利率为5%,则净现值方法对该ERP项目这里考虑应用螺旋过程模型开发该ERP系统的场景。为简单起见,假设开发过程分为3个螺旋周期,每个周期都历时1年。第一年用于需求分析和功能设计,第二年对部分主要功能模块进行开发,最后一年内完成ERP系统其他部分的开发。项目的初始成本是$10000用于可行性分析,而后在每一周期结束时都对该项目进行风险评估,以决定是否启动下一周期,如果继续,每一周期都产生$80000的成本。
上述ERP开发过程可视为一个三阶段的复合期权,因此可运用复合实物期权模型对该项目进行评估,以检验螺旋过程模型带来的额外价值。假设三个阶段的风险波动率分别为50%,40%和30%,模型的其它参数如表1所示。
表1复合期权模型参数的选择最小值Q=01,…,n—1),网格数7=50,J=300图3显示了变波动率复合实物期权定价模型与净现值NPV方法的比较。显然,复合期权的价值要比传统NPV价值要高得多。当收益为$300000时,复合期权的价值为$99150即相比传统NPV方法,应用螺旋开发过程带来的额外价值为$56115。图3NPV价值与复合期权价值的比较
这可以解释为螺旋过程模型中所包含的期权价值。当使用传统NPV方法评估ERP系统时,隐含的假设为项目是一次性投入的,总成本或者全部发生或者都不发生,这与瀑布过程模型的逻辑相符合。然而,螺旋过程模型将软件开发过程划分为若干周期,每一周期都对任务和风险进行评估,作出是否继续下一周期的决策。若前一周期的任务获得成功,当前条件有利于项目的进行,则继续进行开发;反之,若前一周期的目标没有达到,或目标发生了变化,管理者可中止开发或放弃项目以规避风险,避免更多的投资成本发生。因此螺旋过程模型较瀑布模型给予了管理者更大程度的决策灵活性。
表2每一周期的执行价格阈值
每个周期执行价格的阈值如表2所示。第一阶段的价格阈值为$142820意味着如果项目收益的估计值超过$142820(即$142820)则可进行第一阶段的投资,否则取消项目。每个周期的执行价格阈值可以为软件开发过程中的动态决策提供参考依据在开发过程的每一阶段都应对项目目标和风险进行重新评估,决定是否启动下一轮的开发,以更灵活的决策应对不确定环境中的风险。
敏感性分析可帮助理解波动率对实物期权价值的影响,如图4所示。这里考虑三个场景:
场景1,^丨=0.4^23^3二02;
场景2,^丨=0.5^24^3=03;
场景3,^丨=0.6^2=05^3二04。
可见复合期权的价值随着波动率的变大而增加。在期权定价模型中,投资风险是由期望收益的标准方差所表示的,较大的波动率意味着更高水平的风险。敏感性分析的结果表示,软件开发过程的灵活性在不确定性环境中更具价值。
图4不同波动率下的实物期权价值
当软件项目存在较大的风险时,比较理性的做法是采用螺旋过程模型来规划项目,以分阶段开发的方式规避所面临的风险,并且风险程度越高,风险规避的效益越为明显。
5结论
大型软件项目的开发存在着大量的风险,风险管理对于项目的成功具有重要的作用,而在软件开发过程模型中融入风险管理是最有效率的方式。常用的软件开发过程是以瀑布式开发过程为代表的线性顺序开发过程,而在软件规模和需求复杂度的不断增加的环境下,简单的线性循序开发过程越来越不适应大规模软件系统产品的开发管理和风险管理的要求。
本文在螺旋模型的基础上提出了集成风险管理的软件开发过程模型,并运用实物期权理论框架解释和证明了该过程模型的优势。以期权观点来看,螺旋模型的主要优势来自于迭代开发过程中包含的决策灵活性。在每一阶段对任务和风险进行重新评估,给予了开发者是否继续下一轮开发的期权选择这些选择的权利帮助决策者充分把握有利的机会,并在技术变化或竞争加剧等不利情况下具备退出的权利,以更大的灵活性应对软件开发过程中的风险。本文使用变波动率多期复合实物期权模型量化了螺旋开发过程模型中决策灵活性的价值,从理论上证明了在不确定环境中应用螺旋模型的优势。敏感性分析的结果表明,螺旋模型在风险水平越高的情况下价值越为明显。
此外,项目生命周期过程的风险并非保持不变,变波动率复合实物期权的引入很好地刻画了螺旋模型风险驱动的特征。螺旋模型主张决策者识别并评估风险,按照分阶段、迭代的开发步骤规划项目,在每一周期对风险进行控制并重新考虑后续阶段的决策。变波动率复合期权模型能够反映项目各个阶段风险的变化,从而为软件开发过程中的动态序列决策提供了参考依据。