如何对软件项目开发过程中的风险进行风险控制?

2024-05-06 22:40

1. 如何对软件项目开发过程中的风险进行风险控制?

识别和分析风险并不是软件风险管理的最终目标。针对所发现的每一个软件风险,尤其是高危险度的软件风险,风险管理还需要对它们进行有效的控制,包括:(1) 制定风险管理计划:针对各个重要风险制定风险管理计划,并确保它们的一致性;(2)化解风险:执行风险管理计划,以缓解或消除风险;(3)监控风险:监控风险化解的过程。
n�0�2�0�2�0�2�0�2�0�2�0�2 制定风险管理计划
针对每一个重要的软件风险,制定相应的处理该软件风险的计划。风险管理计划主要描述有关软件风险处理的以下内容-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 软件风险名称
-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 软件风险由谁引起
-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 软件风险发生后的处理措施
n�0�2�0�2�0�2�0�2�0�2�0�2 风险化解方式
执行风险管理计划,以缓解或消除风险。一般地,软件风险化解有以下几种方式。
-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 避免风险
采取主动和积极的措施来规避软件风险,将软件风险发生的概率控制为零。例如针对用户可能没有时间参加需求评审这一软件风险,项目组可以考虑选择用户方便的时间来进行需求评审,这样“用户不能出席需求评审会”这一软件风险就不会发生。
-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 转移风险
将可能或者潜在的软件风险转移给其它的单位或个人,从而使得自己不再承担该软件风险。例如如果开发某个子系统存在技术和人力资源方面的风险,可以考虑将它外包给其它软件开发公司,从而将该软件风险从项目中转移出去。
-�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 消除发生软件风险的根源
如果知道导致软件风险发生的因素,那么针对这些因素,采取手段消除软件风险发生的根源。例如如果发现导致小刘离开项目组的主要原因是薪酬太低,那么可以通过给小刘增加薪酬来消除发生软件风险的根源。�0�2
n�0�2�0�2�0�2�0�2�0�2�0�2 风险监控
在风险评估和控制过程中,项目组人员和负责人必须对软件风险的化解程度及其变化(如发生概率、可能导致的损失和危险度)进行检查和监控,并对收集到的有关软件风险信息进行记录,以促进对软件风险的持续管理。
风险监控的主要内容包括:监控和跟踪重要软件风险,记录这些软件风险危险度的变化以及软件风险化解的进展,确认软件风险是否已经得到化解和消除,是否有新的软件风险发生等等。

如何对软件项目开发过程中的风险进行风险控制?

2. 软件项目风险管理的介绍

软件项目风险管理是软件项目管理的重要内容。在进行软件项目风险管理时,要辩识风险,评估它们出现的概率及产生的影响,然后建立一个规划来管理风险。风险管理的主要目标是预防风险。 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。

3. 软件项目风险管理的存在风险

 识别风险是系统化地识别已知的和可预测的风险,在可能时避免这些风险,且当必要时控制这些风险。根据风险内容,我们可以将风险分为:(1)产品规模风险:与软件的总体规模相关的风险。(2)商业影响风险:商业风险影响到软件开发的生存能力。商业风险包含的五个主要的风险是:l 市场风险:开发了一个没有人真正需要的优秀产品或系统;l 策略风险:开发的产品不符合公司的整体商业策略;l 销售风险:开发了一个销售部门不知道如何去卖的产品;l 管理风险:由于重点的转移或人员的变动而失去了高级管理层的支持的风险;l预算风险:没有得到预算或人力上的保证。(3)客户特性风险:与客户的素质以及开发者和客户沟通能力相关的风险。(4)过程定义风险:与软件过程定义相关的风险。(5)开发环境风险:与开发工具的可用性及质量相关的风险。(6)技术风险:技术风险是指在设计、实现、接口、验证、维护、规约的二义性、技术的不确定性、陈旧的技术等方面存在的风险。技术风险威胁到软件开发的质量及交付的时间,如果技术风险变成现实,则开发工作可能变得很困难或根本不可能。(7)人员数目及经验带来的风险:与参与工作的软件工程师的总体技术水平及项目经验相关的风险。在进行具体的软件项目风险识别时,可以根据实际情况对风险分类。但简单的分类并不是总行的通的,某些风险根本无法预测。在这里,我们介绍一下美国空军软件项目风险管理手册中指出的如何识别软件风险。这种识别方法要求项目管理者根据项目实际情况标识影响软件风险因素的风险驱动因子,这些因素包括以下几个方面。(1)性能风险:产品能够满足需求和符合使用目的的不确定程度。(2)成本风险:项目预算能够被维持的不确定的程度。(3)支持风险:软件易于纠错、适应及增强的不确定的程度。(4)进度风险:项目进度能够被维持且产品能按时交付的不确定的程度。每一个风险驱动因子对风险因素的影响均可分为四个影响类别——可忽略的、轻微的、严重的及灾难性的。 在进行了风险辨识后,我们就要进行风险估算,风险估算从以下几个方面评估风险清单中的每一个风险:(1)建立一个尺度,以反映风险发生的可能性;(2)描述风险的后果;(3)估算风险对项目及产品的影响;(4)标注风险预测的整体精确度,以免产生误解。对辨识出的风险进行进一步的确认后分析风险,即假设某一风险出现后,分析是否有其他风险出现,或是假设这一风险不出现,分析它将会产生什么情况,然后确定主要风险出现最坏情况后,如何将此风险的影响降低到最小,同时确定主要风险出现的个数及时间。进行风险分析时,最重要的是量化不确定性的程度和每个风险可能造成损失的程度。为了实现这点,必须考虑风险的不同类型。识别风险的一个方法是建立风险清单,清单上列举出在任何时候可能碰到的风险最重要的是要对清单的内容随时进行维护,更新风险清单,并向所有的成员公开,应鼓励项目团队的每个成员勇于发现问题并提出警告。建立风险清单的一个办法是将风险输入缺陷追踪系统中,建立风险追踪工具,缺失追踪系统一般能将风险项目标示为已解决或尚待处理状态,也能指定解决问题的项目团队成员,并安排处理顺序。风险清单给项目管理提供了一种简单的风险预测技术,下表事一个风险清单的例子:风险 类别 概率 影响资金将会流失商业风险40% 1技术达不到预期效果技术风险30% 1人员流动频繁 人员风险 60% 3在风险清单中,风险的概率值可以由项目组成员个别估算,然后加权平均,得到一个有代表性的值。也可以通过先做个别估算而后求出一个有代表性的值来完成。对风险产生的影响可以对影响评估的因素进行分析。一旦完成了风险清单的内容,就要根据概率进行排序,高发生率、高影响的风险放在上方,依次类推。项目管理者对排序进行研究,并划分重要和次重要的风险,对次重要的风险再进行一次评估并排序。对重要的风险要进行管理。从管理的角度来考虑,风险的影响及概率是起着不同作用的,一个具有高影响且发生概率很低的风险因素不应该花太多的管理时间,而高影响且发生率从中到高的风险以及低影响且高概率的风险,应该首先列入管理考虑之中。在这里,我们需要强调的是如何评估风险的影响,如果风险真的发生了,它所产生的后果会对三个因素产生影响:风险的性质、范围及时间。风险的性质是指当风险发生时可能产生的问题。风险的范围是指风险的严重性及其整体分布情况。风险的时间是指主要考虑何时能够感到风险及持续多长时间。可以利用风险清单进行分析,并在项目进展过程中迭代使用。项目组应该定期复查风险清单,评估每一个风险,以确定新的情况是否引起风险的概率及影响发生改变。这个活动可能会添加新的风险,删除一些不再有影响的风险,并改变风险的相对位置。 在风险评估过程中,我们可以采取以下的步骤:(1)定义项目的风险参考水平值。要使风险评估发生作用,就要定义一个风险参考水平值,对于大多数项目而言,通过对性能、成本、支持及进度等因素的分析,可以找出风险的参考水平值,对于性能下降、成本超支、支持困难或进度延迟(或者这四种的组合)等情况,超过这一参考水平值项目就会被终止。(2)建立每一组(风险、风险发生的概率、风险产生的影响)与每一个参考水平值的关系。(3)预测一组临界点以定义项目终止区域,该区域由一条曲线或不确定区域界定。(4)预测什么样的风险组合会影响参考水平值。 风险驾驭包括对策指定、风险缓解、风险监控、风险跟踪等内容。所有风险分析活动都只有一个目的——辅助项目组建立处理风险的策略。如果软件项目组对于风险采取主动的方法,则避免永远是最好的策略。这可以通过建立一个风险缓解计划来达到即制定对策。对不同的风险项要建立不同的风险驾驭和监控的策略比。如对于开发人员离职的风险项目开始时应作好人员流动的准备采取一些措施确保人员一旦离开时项目仍能继续;制定文档标准并建立一种机制保证文档及时产生;对每个关键性技术岗位要培养后备人员。对于技术风险,可以采用的策略有,对采用的关键技术进行分析,避免软件在生命周期中很快落后;在项目开发过程中保持对风险因素相关信息的收集工作,减少对合作公司的依赖尤其是对延续性强的项目应该尽可能地吸收合作公司的技术并变为自己的技术,避免因为可能发生的与合作公司合作的终止带来的影响和风险降低投入成本。一个有效的策略必须考虑风险避免、风险监控和风险管理及意外事件计划这样三个问题。风险的策略管理可以包含在软件项目计划中,或者风险管理步骤也可以组成一个独立的风险缓解、监控和管理计划(RMMM计划)。RMMM计划将所有风险分析工作文档化,并且由项目管理者作为整个项目计划的一部分来使用,RMMM计划的大纲主要包括:主要风险,风险管理者,项目风险清单,风险缓解的一般策略、特定步骤,监控的因素和方法,意外事件和特殊考虑的风险管理等。一旦建立了RMMM计划,我们就开始了风险缓解及监控,风险缓解是一种避免问题的活动,风险监控则是跟踪项目的活动。它有三个主要目的:评估一个被预测的风险是否真的发生了;保证为风险而定义的缓解步骤被正确地实施;收集能够用于未来的风险分析信息。软件开发是高风险的活动。如果项目采取积极风险管理的方式,就可以避免或降低许多风险,而这些风险如果没有处理好,就可能使项目陷入瘫痪中。因此在软件项目管理中还要进行风险跟踪。对辨识后的风险在系统开发过程中进行跟踪管理,确定还会有哪些变化,以便及时修正计划。具体内容包括:(1)实施对重要风险的跟踪;(2)每月对风险进行一次跟踪;(3)风险跟踪应与项目管理中的整体跟踪管理相一致;(4)风险项目应随着时间的不同而相应地变化。通过风险跟踪,进一步对风险进行管理,从而保证项目计划的如期完成。

软件项目风险管理的存在风险

4. 软件项目风险管理控制措施

   摘要   :软件项目开发需要投入大量的人力、物力和财力,但在开发的过程中存在着诸多不确定性和可变性,因而有必要对软件项目风险进行管理与控制。本文通过对软件项目全程的风险识别、分析、应对及监测,在项目开发各阶段积极做好风险防控工作,以达到降低项目风险、减少风险损失的目的。 
     关键词   :软件项目开发;风险管理;风险防控 
     1引言  
    风险是指在某项活动开展的过程中,一些突发的、不确定的因素对活动参与者造成损害、对自然环境造成破坏的概率[1]。与其他工程项目一样,软件项目的开发也存在着各种各样的风险,如项目资金透支、工期延长、系统不能满足需求等。因而在软件开发的过程中,做好风险管理将有助于降低开发风险,保证开发质量。 
     2软件项目风险分类  
    2.1技术风险 
    软件在分析、设计、测试及实施过程中,可能发生的潜在技术问题给软件项目带来的危害称为技术风险,如采用了陈旧或尚不成熟的技术、系统文档编制不规范等。 
    2.2管理风险 
    管理风险是指由于项目在预算、人员、进度、资源等方面缺乏计划、控制与管理,从而对软件项目产生的不良影响。 
    2.3商业风险 
    商业风险又称为市场风险,包括开发出来的软件产品不符合市场需求、对软件产品定位不清从而缺乏市场竞争力、市场竞品较多竞争激烈等。 
    2.4安全风险 
    安全风险主要包括自然风险、人为风险、外部环境风险,如盗版、病毒等。 
     3软件项目风险管理步骤  
    3.1风险识别 
    风险识别阶段需要识别出哪些风险会影响软件项目的开发,包括这些风险的类别、因素、出处、后果等内容[2]。风险识别的常用方法包括以下几种。 
    (1)专家调查法。就软件项目开发风险问题,征询项目相关行业领域专家的意见,将收集到的意见和建议整理形成报告,随后将报告发送给各位专家再次进行征询。如此反复,经历数轮后,当专家们的意见趋于一致时就可以得出最后结论。 
    (2)头脑风暴法。将项目开发小组成员、立项单位代表、邀请的专家顾问召集起来,通过会议的方式,就项目开发风险展开讨论交流,以期对项目风险进行准确识别、分析和预测。 
    (3)风险检测表法。设计并使用各类条目式风险检测表,帮助项目小组识别各种风险。如开发人员风险检测表,可以罗列出诸如开发人员技术水平如何、开发人员是否具有类似项目开发经验、开发人员的人数是否合适、开发人员是否能够自始至终地参加软件开发工作、开发人员是否能集中全部精力投入软件开发工作、开发人员是否接受过必要的培训、开发人员的人员流动是否能保证工作的连续性等条目。通过对这些问题的分析与回答,可以识别出人员因素对软件项目带来的风险。 
    3.2风险分析 
    风险分析主要是针对风险事件发生概率及其后果进行评估[3]。为完成对各种风险的评估,需建立风险度量指标体系,明确各种风险带来的后果与损失,估算风险对软件项目的影响程度,最终给出风险估算的结果[4]。风险分析时,常使用四元组[R,P,I,W]来对风险进行描述。其中R代表风险,P代表风险发生的概率,I代表风险带来的影响,W代表风险对项目影响的权重。由于能否按照合同规定的软件性能、时间和金额等条款完成软件开发工作,对项目的顺利验收起着至关重要的作用。因而重点选取成本、进度、软件性能三个方面对软件项目风险进行度量,当某一方面的度量值达到或超过临界点时,软件项目将被迫终止。 
    通常风险评估的过程可分为四步: 
    (1)根据风险识别的结果,分析每种风险的发生概率,每种风险对项目成本、进度、软件性能三方面影响的大小,依据风险后果的严重程度为每种风险赋予不同的风险权重。 
    (2)定义每种风险的四元组[R,P,I,W]。 
    (3)定义项目被迫终止的临界点。 
    (4)预测风险组合对项目的综合影响[5]。 
    3.3风险应对 
    对可能发生的各种风险需拟定相应的应对策略。常用的应对策略有预防风险、风险转移、风险回避等。预防风险通常指通过提高软件项目各阶段的可靠性和规范性,从而降低风险发生的概率。风险转移是指利用合同、保险、担保、出售、发包等方式[6],将风险发生时的部分损失转移至第三方,以降低己方风险损失。风险回避是指当某些风险的发生不可避免且后果较严重时,可对项目方案进行调整,更甚者则主动放弃该项目,以免造成不可挽回的损失。在完成风险识别、分析和应对策略选择后,应形成一个易于理解的风险分析与应对表,如表1所示。 
    3.4风险监控 
    风险监控是指依据前期风险分析结果,监控风险应对措施的实施情况,加强对项目全过程风险的管控[7]。风险监控的目的是监测风险管理策略和应对措施的实际执行效果,看其是否达到预期目标,同时根据当前风险监控结果及时修正风险分析与应对表,或对项目中新识别的风险进行分析并制定相应的风险应对措施[8]。 
     4风险防控措施  
    4.1需求分析阶段 
    软件需求是软件开发的依据,也是软件验收的标准,因此对软件需求的精准确定就属于软件项目开发的重点和难点。一方面用户开始时很难完整且清楚地对软件系统的功能、性能、运行环境等方面的需求进行准确表达。但随着项目的深入,用户对软件的需求可能会越来越明确,也越来越多,甚至有时到测试阶段还会出现有用户要求更改软件需求的情况。这对系统分析人员和软件开发人员来说是难以接受的。另一方面,用户、系统分析人员和软件开发人员对软件需求描述的方式也各不相同。用户希望使用自然语言对软件需求进行描述,而专业人员则希望采用结构化的说明语言,如数据流图、数据字典等。这样既可以避免自然语言容易引起的二义性和不确定性,又能为下一步软件设计工作提供便利。 
    针对这类情况的防控措施包括: 
    (1)加强对立项单位的组织结构、工作流程和现有软件系统的了解。 
    (2)系统分析人员需掌握一些获取用户需求的技术和方式。 
    (3)可将公司已投入使用的类似软件作为软件原型,提交给用户使用,便于系统分析人员对用户需求的收集。 
    (4)组织由立项单位、系统分析人员和系统设计人员共同参与的需求评审会,最终形成达成一致的需求分析阶段的结果——需求规格说明书。 
    (5)对需求分析阶段完成后用户提出的新需求,可采取留在以后版本升级中处理,如立项单位要求必须加入的,则可与客户商量延长开发时间、增加合同金额。 
    4.2设计与开发阶段 
    如果软件产品采用原型法进行开发,虽能降低因需求不明确带来的项目风险,但由于原型法采用循环迭代的方式来不断满足用户需求,这样可能会导致软件的设计与开发超出预期的花费和时间,并且在反复修改的过程中,容易使客户对项目是否能够顺利完成产生疑虑。针对这类风险,一方面可将生命周期法与原型法结合在一起,互为补充,软件开发中以结构化生命周期法为主要方法,在部分环节则利用原型法来快速获取用户反馈信息[9]。另一方面做好与客户的沟通,及时告知客户软件设计与实现的进度与过程[10]。 
    4.3测试阶段 
    测试阶段常面临的风险为测试用例不完善。这样可能导致测试不够全面,软件中存在的错误未能发现,使得软件性能降低。可采取的防控措施包括: 
    (1)对测试人员进行软件需求的培训。 
    (2)加强对测试用例的评审。 
    (3)在条件允许的情况下,可以邀请用户参与软件测试。 
    4.4实施阶段实施阶段可能会面临客户过于依赖技术人员,迟迟不肯验收项目的风险。采取的防控措施包括: 
    (1)形成规范的《用户手册》,加强对软件用户的培训。 
    (2)做好领导层的工作。 
    (3)宣讲公司后期的服务范围和服务管理的规范性。新旧系统切换的过程中也存在一定的风险。如果转换工作缺乏规范的管理和可靠的安全保障,势必会造成严重的后果,甚至影响正常工作。面对这种情况,一是需要特别注意原系统和新系统的文件保护工作,加强人员的管理和数据的备份;二是根据用户要求、立项单位状况、转换过程中的进展情况调整系统切换进程。 
     5结束语  
    软件开发过程中存在着各式风险,对每种风险都需要实施风险管理。由此可见,风险管理本身也可构成软件项目中的一个子项目。科学地制定软件项目风险管理计划,在必要的人力资源和经费的支持下,持续完成风险识别、分析、应对和监控等风险管理步骤[11],做好项目开发各阶段的风险防控工作,从而达到将风险控制在最低限度,减少风险对软件项目的影响,更好地控制软件开发成本和进度的目的。 
     参考文献  
    [1]杨一平,卢山.管理信息系统.北京:机械工业出版社,2018 
    [2]索红军.软件项目风险分析与研究.软件导刊,2017,16(08):128-131 
    [3]顾单.S公司战略型物料采购策略研究[硕士学位论文].上海交通大学,上海,2015 
    [4]百度文库.软件项目的风险分析. 
    [5]韩最蛟.软件工程基础.北京:清华大学出版社,2009 
    [6]王慧.公路工程施工阶段成本风险管理与分析控制.建材与装饰,2019(24):259-260 
    [7]梅旭东.M公司卡拉奇核电站项目风险管理研究[硕士学位论文].东华大学,上海,2018 
    [8]刘强管理.基于国际工程项目全生命周期的风险管理.土木工程与管理学报,2017,34(06):1-9+16 
    [9]苑隆寅.图书馆在城乡统筹发展中的作用与知识服务研究[硕士学位论文].重庆大学,重庆大学,2012 
    [10]马兴鹏.高校综合分析平台项目的系统分析与设计[硕士学位论文].东北大学,辽宁,2011 
    [11]詹红艳.软件项目管理中风险控制策略研究.软件,2019,40(06):230-232 
    作者:杨辉 单位:湖北交通职业技术学院交通信息学院 

5. 软件项目管理及风险分析

 关于软件项目管理及风险分析
                          摘要: 软件项H的有效管理,对项目的成败具有至关重要的作用。软件项目的风险体现存些方血,如何回避这些风险,存本文中进行了探讨,最后指出建立合理的管理流程,对软件项目的管理来说,是非常重要的。
          关键词: 软件项目:管流程;风险分析
         软件项目管理的提出是在2O世纪70年代中期的美国,当时美国国防部专研究了软件开发不能按时提交,预算超支和质量达到用户要求的原因,结果发现70%的项目是因为管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各项管理。到了20世纪90年代中期,软件研发项日管理不善的问题仍然存在。据美国软件工程实施现状的调查,软件研发的情况仍然很难预测,大约只有10%的项目能够在预定的费用和进度下交付。
         究竟怎么样才能做好软件项目的管理及风险分析,保证项目顺利实施呢?这是个比较复杂的问题,下面就软件项目的特点,缩合大家的经验总结,谈一点看法。
          1、软件项目管理风险分析 
         软件项目管是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理的活动。目的是为了让软件项目尤其是大型项目的整个软件生命周期(从分析、设计、编码、测试、到维护全过程)都能在管理者的控制之下,以预定成本按期,按质的完成软件交付用户使用。
         怎样进行有效的项目管理呢?首先我们来分析下影响软件项目的质量因素。
         软件项目,尤其是大型项目有二项非常重要的因素,会影响整个项目的进度与质量,它们分别是:“人”、“流程” 与“技术”。
         “人”是项目中最难预料与掌控的一项要素,人可分成两部份,一是客户,二是开发团队。
         “技术”是指软件项目所使用的开发半台,主要指开发环境及开发语言。是最容易掌握的部份。
         “流程”是指软件开发流程或是项目流程,定义流程的目的是要掌控所有的情况。项目的最大敌人是时间及预算,这两者都是有限的,如何在有限预算内准时完成项目,可说是一项艺术。
         1.1“人”因素分析
         “人”是指客户和开发团队,其中开发团队的因素对项目影响很大,对于这方面影响因素主要分析如下:
         人员技能未达到要求
         在项目开始之初,我们假设项目成员都能够达到组织级的要求,但往往并不是每个成员都能够达到要求。而且项目中每个成员的生产率差异可能很大,也给项目进度安排造成影响。所以在项目始之初,应该对项目成员的技能进行一次总体的评估,对于大家都欠缺的技能,应该安排统一的培训,后续需要对培训的效果进行跟踪;对于个别人员技能欠缺的,应该单独预留自我学习时间或通过以师带徒的方式进行培养,使其技能能够尽快达到要求:对于项目新员的工作和任务,应该加强评审和检查,保证输出不出现大的偏差而导致后续大量的返工。对于这方影响因素主要分析如下:
         项目成员责任心不强
         态度决定一切,细节决定成败。对于项目过程中的各项任务,经常出现由于项目成员责任心不强敷衍了事,导致产出的工件质量较差,引起大量返工的情况。在这种情况下,项目更应该加强项目规范的建设,项目经理应加强同这些成员的单独沟通,加强项目的团队建设和集体荣誉感。让项目成员感觉到做的系统是他们自己的产品,而不是公司的项目,项目经理的项目。
         项目沟通问题
         在软件项目中,保证项目各种角色和成员中的高效沟通是很重要的,如何建立起快捷顺畅的沟通渠道,采用最佳的沟通方式来解决问题,必须在项目中经常强调。如果一周的项目任务花存实际做事情上有2天,而花在沟通上却占用了3天,这时必须及时分析和总结原因。沟通最重要的`就是要在最短的时间里面,采用各种方法或工具,使交流双方或多方达成一致。
         项目人员流失
         项目人员特别是项目关键成员在项目进行过程中的流失,对项目影响很大,对于这种情况,应该在项目开始之初,就作为专门的风险进行跟踪,并考虑具体的应对措施。
         1.2“流程”因素分析
         软件的开发流程般定义为:
         需求分析一可行性分析一概要设计一结构化设计一详细设计一编码一软件测试一软件维护。
         “流程”中软件项目的风险,主要体现存4个阶段:软件需求阶段、软件设计阶段、软件实现阶段和软件维护阶段
         软件需求阶段
         软件的开发是以用户的需求开始,在大多数情况下,用户需求要靠软件开发方诱导,才能保证需求的完整,再以的形式形成《用户需求》这一重要的文档。需求分析更多的是开发方确认需求的可行性和一致性的过程,在此阶段需要和用户进行广泛的交流和确认。需求和需求分析的任何疏漏造成的损失,会在软件系统的后续阶段被一级级地放大,因此本阶段的风险最大。
         软件设计阶段
         设计的主要目的在于软件功能正确地反映了需求,需求的不完整和对需求分析的不完整或者错误,在设计阶段将被成倍地放大。设计阶段的主要任务是完成系统体系结构的定义,使之能够完成需求阶段的即定目标;另一方面也是检验需求的致性和需求分析的完整性和正确性。
         设计阶段的风险主要来自于系统分析人员。分析人员存设计系统结构时过于定制,系统的可扩展性较弱,会给后期维护带来巨大的负担和维护成本的激增。对用户来说系统的使用比例会有明显的折扣,甚至会造成软件寿命过短。反之,软件结构的过于灵活和通用,必然引起软件实现的难度增加,系统的复杂度上升,可靠性降低,给实现和测试阶段带来风险,系统的稳定性也会受到影响。从另一个角度上看,用户需求和将来软件运行环境的变化都是必然的,目前软件设计的所渭的“通用性”是否就能很好的适应将来需求和运行环境的变化,都是需要认真折衷的,而这种折中也蕴涵着很大的风险。
         设计阶段蕴涵的另一种风险来自于设计文档。文档的不健全不仅会造成实现阶段的困难,更会在后期的测试和维护造成灾难性的后果,例如根本无法对软件系统进行版本级,甚至是发现的简单错误都无从更正。              

软件项目管理及风险分析

6. 软件项目风险管理的过程

       1. 风险识别 
         风险识别就是要识别出项目风险之所在和引起风险的因素,并对其后果做出定性估计。只有识别出这些风险才有可能避免这些风险,并在必要时控制这些风险。在风险识别时常用的方法有:头脑风暴法、德尔菲法、风险条目检查表法、访谈法等方法。
         头脑风暴法:将项目组全体成员召集在一起,针对项目可能存在的风险进行自由讨论。项目组成员在主持人的引导下自由发言,不受限制,然后风险管理人员整理发言,得到一份全面的风险列表,以备在将来的风险定性和定量分析过程中进一步加以明确。
         德尔菲法:邀请项目风险专家,以匿名的形式参与会议。协调员使用问卷征求重要项目风险方面的意见。然后将意见结果反馈给每一位专家,以便进行进一步的讨论。反复经过几轮意见征求与讨论,就可以在主要的项目风险上达成一致意见,减少数据方面的偏见。
         风险条目检查表法:它是最常见也是比较简单的风险识别方法。利用一组提问来帮助管理者了解项目在各个方面可能存在的风险。在风险条目检查表中,列出了所有可能的与每一个风险因素有关的提问,使得风险管理者集中来识别常见的、已知的和可预测的风险。
         访谈法:通过访谈资深项目经理或相关领域的专家进行风险识别。负责风险识别的人员选择合适的人选,事先向他们作有关项目的简要说明,提供必要的项目信息。这些访谈对象依据他们的经验、项目的信息,以及他们所发现的其他有用方法,对项目风险进行识别。
         风险识别不是一次性的行为,而应有规律地贯穿于整个项目中。
          2. 风险评估 
         风险评估是指对识别出的风险做出定量和定性的分析,估计出风险发生的概率和产生后果的严重程度。通过风险评估,项目组成员可以加深对项目自身和环境的理解,尽可能使得项目可能的风险都经过系统的考虑,从而确定开发软件项目的最佳方案。常用的风险评估方法有:概率分布法、层次分析法、访谈、盈亏平行分析法、决策树法等。
         概率分布法主要是按照理论或者主观调整后的概率进行评估的方法。每个风险的概率值可以由项目组成员自己进行估算,然后求得一个平均值来表示该风险的概率值。此外,还可以对风险造成的`影响进行划分等级,形成一种分析评价矩阵,并赋予一定的加权值来定性评价风险的大小。
          3. 风险规划 
         识别风险并对风险进行评估后,为了有效地对风险进行控制,需要制定风险规划,并在软件项目的开发过程中严格执行,以达到将风险的不利影响降至最低。在风险规划中主要应用的策略有:回避风险、转移风险、减轻风险、自担风险。
         回避风险:通过变更项目计划,消除风险或风险产生的条件,从而使项目免受影响。
         转移风险:不消除风险,而是将风险的结果连同应对的权利转移给第三方。
         减轻风险:将发生风险的概率或风险的影响降至可以接受的程度。
         自担风险:不改变项目计划,有意识接受风险,考虑风险造成的后果如何应对,制定应对计划或退出计划。
         根据不同条件,不同的环境或者不同的问题可以选择不同的策略。可以将风险发生概率高低以及风险后果损失大小,组成了一个四维空间,如图所示:
         ①概率发生率高,后果损失较小;
         ②概率发生率比较低,后果损失小;
         ③概率发生率高,后果损失大;
         ④概率发生率比较低,后果损失大。
         针对四种情况,可以采取不同的策略:
         ①如果发生概率高,损失比较小,可以采用化减风险或者是风险减轻的措施。
         ②如果风险发生概率比较高,后果损失也较大,可以采用回避风险策略。就是设法把工作通过保险、外包或其它方式转移出去。
         ③如果发生概率比较低,后果损失较大,设法将风险转移。
         ④如果发生概率比较低,后果损失也较小,这种风险适合自己承担。因为它本身不会对目标产生太大影响。
          4. 风险监控 
         风险规划制定完成后,在软件项目开发过程中不断对这些风险进行跟踪,按照风险规划采取措施控制风险,将风险造成的影响降至最小,并监视剩余风险、识别新的风险,更新风险规划。

7. 软件项目风险管理的管理理论

 Boehm用公式RE=P(UO)*L(UO)对风险进行定义,其中RE表示风险或者风险所造成的影响,P(UO)表示令人不满意的结果所发生的概率,L(UO)表示糟糕的结果会产生的破坏性的程度。在风险管理步骤上,Boehm基本沿袭了传统的项目风险管理理论,指出风险管理由风险评估和风险控制两大部分组成,风险评估又可分为识别、分析、设置优先级3个子步骤,风险控制则包括制定管理计划、解决和监督风险3步。Boehm思想的核心是10大风险因素列表,其中包括人员短缺、不合理的进度安排和预算、不断的需求变动等。针对每个风险因素,Boehm都给出了一系列的风险管理策略。在实际操作时,以10大风险列表为依据,总结当前项目具体的风险因素,评估后进行计划和实施,在下一次定期召开的会议上再对这10大风险因素的解决情况进行总结,产生新的10大风险因素表,依此类推。10大风险列表的思想可以将管理层的注意力有效地集中在高风险、高权重、严重影响项目成功的关键因素上,而不需要考虑众多的低优先级的细节问题。而且,这个列表是通过对美国几个大型航空或国防系统软件项目的深入调查,编辑整理而成的,因此有一定的普遍性和实际性。但是它只是基于对风险因素集合的归纳,尚未有文章论述其具体的理论基础、原始数据及其归纳方法。另外,Boehm也没有清晰明确地说明风险管理模型到底要捕获哪些软件风险的特殊方面,因为列举的风险因素会随着多个风险管理方法而变动,同时也互相影响。这就意味着风险列表需要改进和扩充,管理步骤也需要优化。虽然其理论存在一些不足,但Boehm毕竟可以说是软件项目风险管理的开山鼻祖。在其之后,更多的组织和个人开始了对风险管理的研究,软件项目风险管理的重要性日益得到认同。 SEI(Software Engineering Institution)作为世界上著名的旨在改善软件工程管理实践的组织,也对风险管理投入了大量的热情。SEI提出了持续风险管理管理模型CRM(Continuous Risk Management)。SEI的风险管理原则是:不断地评估可能造成恶劣后果的因素;决定最迫切需要处理的风险;实现控制风险的策略;评测并确保风险策略实施的有效性。CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为5个步骤:风险识别、分析、计划、跟踪、控制。框架显示了应用CRM的基础活动及其之间的交互关系,强调了这是一个在项目开发过程中反复持续进行的活动序列。每个风险因素一般都需要按顺序经过这些活动,但是对不同风险因素开展的不同活动可以是并发的或者交替的。 SEI和Boehm的模型都以风险管理的过程为主体,研究每个步骤所需的参考信息及其操作。而Aalborg大学提出的思路则是以Leavitt模型为基础,着重从导致软件开发风险的不同角度出发探讨风险管理。1964年提出的Leavitt模型将形成各种系统的组织划分为4个有趣的组成部分:任务、结构、角色和技术。这4个组成部分和软件开发的各因素很好地对应起来:角色覆盖了所有的项目参与者,例如软件用户、项目经理和设计人员等;结构表示项目组织和其他制度上的安排;技术则包括开发工具、方法、硬件软件平台;任务描述了项目的目标和预期结果。Leavitt模型的关键思路是:模型的各个组成部分是密切相关的,一个组成部分的变化会影响其他的组成部分,如果一个组成部分的状态和其他的状态不一致,就会造成比较严重的后果,并可能降低整个系统的性能。将这个模型和软件风险的概念相对应,即一个系统开发过程中任何Leavitt组成成分的修改都会产生一些问题,甚至导致软件修改的失败。根据Leavitt模型,任何导致风险发生的因素都可以归结为模型中的组成部分,例如技术及其可行性;或者归结为组成部分之间的联系,例如程序开发人员使用某一技术的能力。因此,使用Leavitt模型从4个方面分别识别和分析软件项目的风险是极有条理性和比较全面的。在进行软件项目管理时,可以采用不同的方法对不同的方面进行风险管理。Leavitt模型实际上是提出一个框架,可以更加广泛和系统地将软件风险的相关信息组织起来。Leavitt理论的设计方法和实现研究已经广泛应用于信息系统中,它所考虑的都是软件风险管理中十分重要的环节,而且简单、定义良好、适用于分析风险管理步骤。 总之,在软件项目开发过程中,当对软件的期望很高时,一般都会进行项目风险分析、预测、评估、管理及监控等风险管理。通过风险管理可以使项目进程更加平稳,可以获得很高的跟踪和控制项目的能力,并且可以增强项目组成员对项目如期完成的信心。风险管理是项目管理中很重要的管理活动,有效的实施软件风险管理是软件项目开发工作顺利完成的保证。

软件项目风险管理的管理理论

8. 什么是软件风险管理,与项目管理的关系如何

软件项目风险管理是软件项目管理的重要内容。在进行软件项目风险管理时,要辩识风险,评估它们出现的概率及产生的影响,然后建立一个规划来管理风险。风险管理的主要目标是预防风险。 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。
软件项目风险管理是项目管理的一部分。