软件开发项目过程中的风险管理是什么呢?
软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。
软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。
如果对项目进行风险管理,就可以最大限度的减少风险的发生。
但是,目前国内的软件企业不太关心软件项目的风险管理,结果造成软件项目经常性的延期、超过预算,甚至失败。
成功的项目管理一般都对项目风险进行了良好的管理。
因此任何一个系统开发项目都应将风险管理作为软件项目管理的重要内容。
在项目风险管理中,存在多种风险管理方法与工具,软件项目管理只有找出最适合自己的方法与工具并应用到风险管理中,才能尽量减少软件项目风险,促进项目的成功。
项目风险管理 项目风险管理是指为了最好的达到项目的目标,识别、分配、应对项目生命周期内风险的科学与艺术。
项目风险管理的目标是使潜在机会或回报最大化,使潜在风险最小化。
风险管理涉及的主要过程包括:风险识别,风险量化,风险应对计划制定和风险监控,如图1所示。
风险识别在项目的开始时就要进行,并在项目执行中不断进行。
就是说,在项目的整个生命周期内,风险识别是一个连续的过程。
(1)风险识别:风险识别包括确定风险的来源,风险产生的条件,描述其风险特征和确定哪些风险事件有可能影响本项目。
风险识别不是一次就可以完成的事,应当在项目的自始至终定期进行。
(2)风险量化:涉及对风险及风险的相互作用的评估,是衡量风险概率和风险对项目目标影响程度的过程。
风险量化的基本内容是确定那些事件需要制定应对措施。
。
(3)风险应对计划制定:针对风险量化的结果,为降低项目风险的负面效应制定风险应对策略和技术手段的过程。
风险应对计划依据风险管理计划、风险排序、风险认知等依据,得出风险应对计划、剩余风险、次要风险以及为其它过程提供得依据。
(4)风险监控:涉及整个项目管理过程中的风险进行应对。
该过程的输出包括应对风险的纠正措施以及风险管理计划的更新。
每个步骤所使用的工具和方法详见表1: 表1 风险管理过程中所使用的工具、方法 软件项目中的风险管理 1、软件项目中的风险 软件项目的风险无非体现在以下四个方面:需求、技术、成本和进度。
IT项目开发中常见的风险有如下几类:
软件项目风险管理的存在风险
识别风险是系统化地识别已知的和可预测的风险,在可能时避免这些风险,且当必要时控制这些风险。
根据风险内容,我们可以将风险分为:(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)定义项目的风险参考水平值。
要使风险评估发生作用,就要定义一个风险参考水平值,对于大多数项目而言,通过对性能、成本、支持及进度等因素的分析,可以找出风险的参考水平值,对于性能下降、成本...
软件项目常见风险及其预防措施有哪些呢?
(1)合同风险 签订的合同不科学、不严谨,项目边界和各方面责任界定不清等是影响项目成败的重大因素之一。
预防这种风险的办法是项目建设之初项目经理就需要全面准确地了解合同各条款的内容、尽早和合同各方就模糊或不明确的条款签订补充协议。
(2)需求变更风险 需求变更是软件项目经常发生的事情。
一个看似很有“钱途”的软件项目,往往由于无限度的需求变更而让项目承建方苦不堪言,甚至最终亏损(实际上项目建设方也面临巨大的风险)。
预防这种风险的办法是项目建设之初就和用户书面约定好需求变更控制流程、记录并归档用户的需求变更申请。
(3)沟通不良风险 项目组与项目各干系方沟通不良是影响项目顺利进展的一个非常重要的因素。
预防这种风险的办法是项目建设之初就和项目各干系方约定好沟通的渠道和方式、项目建设过程中多和项目各干系方交流和沟通、注意培养和锻炼自身的沟通技巧。
(4)缺乏领导支持风险 上层领导的支持是项目获得资源(包括人力资源、财力资源和物料资源等)的有效保障,也是项目遇到困难时项目组最强有力的“后台支撑”。
预防这种风险的办法是主动争取领导对项目的重视、确保和领导的沟通渠道畅通、经常向领导汇报工作进展。
(5)进度风险 有些项目对进度要求非常苛刻(进度要求不高的项目,我们同样要考虑该风险),项目进度的延迟意味着违约或市场机会的错失。
预防这种风险的办法一般是分阶段交付产品、增加项目监控的频度和力度、多运用可行的办法保证工作质量避免返工。
(6)质量风险 有些项目,用户对软件质量有很高的要求,如果项目组成员同类型项目的开发经验不足,则需要密切关注项目的质量风险。
软件风险管理都包括哪些
软件开发过程存在各种风险,这些风险的发生将对软件项目的实施产生消极的影响,甚至会导致软件项目的失败。
软件风险管理的任务是要对软件过程中各种软件风险进行识别、分析、预测、评估和监控,以避免软件风险的发生或者减少软件风险发生后给软件项目开发带来的影响和冲击。
因此,软件风险管理须关注以下几个方面的问题。
软件工程控制风险的方法有哪些?
公司保密制度1 总则1.1 为保守公司秘密,维护公司权益,特制定本制度。
1.2 公司秘密是关系公司权力和利益,依照特定程序确定,在一定时间内只限一定范围的人员知悉的事项,包括但不限于技术秘密和其他商业机密。
技术秘密是指不为公众知悉、能为企业带来经济利益、具有实用性并且企业采取保密措施的非专利技术和技术信息。
技术秘密包括但不限于:技术方案、工程设计、电路设计、制造方法、配方、工艺流程、技术指标、计算机软件、数据库、研究开发记录、技术报告、检测报告、实验数据、试验结果、图纸、样品、样机、模型、模具、操作手册、技术文档、相关的函电,等等。
其他商业秘密,包括但不限于:客户名单、行销计划、采购资料、定价政策、财务资料、进货渠道等。
1.3 公司全体职员都有保守公司秘密的义务。
接触到企业商业秘密的高级员工,例如:管理人员、技术人员、财务人员、销售人员、秘书等对保守公司秘密负有特别的责任。
1.4 公司保密工作,实行既确保秘密又便利工作的方针。
2 保密范围和密级确定2.1 公司秘密包括本制度第1.2项规定的范围以及下列秘密事项:1) 公司重大决策中的秘密事项。
2) 公司尚未付诸实施的经营战略、经营方向、经营规划、经营项目及经营决策。
3) 公司内部掌握的合同、协议、意见书及可行性报告、主要会议记录。
4) 公司财务预决算报告及各类财务报表、统计报表。
5) 公司所掌握的尚未进入市场或尚未公开的各类信息。
6) 公司职员人事档案,工资性、劳务性收人及资料。
7) 其他经公司确定应当保密的事项。
一般性决定、决议、通告、通知、行政管理资料等内部文件不属于保密范围。
2.2 公司秘密的密级分为“绝密”、“机密”、“秘密”三级。
绝密是最重要的公司秘密,泄露会使公司的权益和利益遭受特别严重的损害;机密是重要的公司秘密,泄露会使公司权益和利益遭受到严重的损害;秘密是一般的公司秘密,泄露会使公司的权益和利益遭受损害。
2.3 公司秘级的确定:1) 公司经营发展中,直接影响公司权益和利益的重要决策文件、技术资料为绝密级;2) 公司的规划、财务报表、统计资料、重要会议记录、公司经营情况为机密;3) 公司人事档案、合同、协议、职员工资性收人、尚未进人市场或尚未公开的各类信息为秘密级。
2.4 属于公司秘密的文件、资料,应当依据本制度规定标明密级,并确定保密期限。
保密期 限分永久、长期、短期,一般与密级相对应,特殊情况外标明。
保密期限届满,自行解 密。
3 公司保密措施3.1 属于公司秘密的文件、资料和其他物品的制作、收发、传递、使用、复制、摘抄、保存和销毁,由办公室或主管副总经理委托专人执行;采用电脑技术存取、处理、传递的公司秘密由电脑部门负责保密。
3.2 对于密级文件、资料和其他物品,必须采取以下保密措施:1) 非经总经理或主管副总公司批准,不得复制和摘抄;2) 收发、传递和外出携带,由指定人员担任,并采取必要的安全措施;3) 在设备完善的保险装置中保存。
3.3 属于公司秘密的设备或者产品的研制、生产、运输、使用、保存、维修和销毁,由公司指定专门部门负责执行,并采用相应的保密措施。
3.4 在对外交往与合作中需要提供公司秘密事项的,应当事先经总经理批准。
3.5 具有属于公司秘密内容的会议和其他活动,主办部门应采取下列保密措施:1) 选择具备保密条件的会议场所;2) 根据工作需要,限定参加会议人员的范围,对参加涉及密级事项会议的人员予以指定;3) 依照保密规定使用会议设备和管理会议文件;4) 确定会议内容是否传达及传达范围。
3.6 不准在私人交往和通信中泄露公司秘密,不准在公共场所谈论公司秘密,不准通过其他方式传递公司秘密。
3.7 公司工作人员发现公司秘密已经泄露或者可能泄露时,应当立即采取补救措施并及时报告综合管理部;综合管理部接到报告,应立即作出处理。
3.8 出现下列情况之一者,予以辞退并酌情赔偿经济损失:1) 故意或过失泄露公司秘密,造成严重后果或重大经济损失的;2) 违反本保密制度规定,为他人窃取、刺探、收买或违章提供公司秘密的;3) 利用职权强制他人违反保密规定的。
3.9 公司与全体员工签订《员工保守商业秘密协议书》,《员工保守商业秘密协议书》以书面形式签订,协议附后。
3.10 在保密合同有效期限内,员工应履行下列义务:1) 严格遵守本企业保密制度,防止泄漏企业技术秘密;2) 不得向他人泄漏企业技术秘密;3) 非经公司书面同意,不得利用该技术秘密进行生产与经营活动,不得利用技术秘密进行新的研究和开发:3.11 对高级员工实行“竞业限制”制度,限制管理人员、技术人员、财务人员、销售人员、秘书等高级员工的以下行为:1) 自行设立与本公司竞争的公司;2) 就职于本公司的竞争对手;3) 在竞争企业中兼职;4) 引诱企业中的其他员工辞职;5) 引诱企业的客户脱离企业;6) 在离职后,与企业进行竞争的其他行为。
3.12 涉及公司商业秘密的合作、代理、交易合同或协议,均需设置“保密条款”,对合同对方增设保密义务。
“保密条款”应当包含以下内容:1) 明示合同所涉及的需...
软件开发质量和风险如何定量监理呢?
软件质量是指与软件产品满足规定和隐含的需求的能力和有关的特征的全体,即所有描述计算机软件优秀程度的特性的组合。
应用软件的质量依赖于问题需求的描述、解决方案的建模设计、可执行程序的编码的产生以及为发现错误而运行软件的测试。
一个优秀的监理工程师应该能够使用定量的方法来评估软件开发过程中产生的分析及设计模型、源代码和测试用例(use case)的质量。
软件开发质量的定量监理 为了实现这种实时的质量评估,监理工程师们必须采用技术度量来客观地评估质量,而不能仅仅采用主观的方法进行评估。
在评估中,首先要明确的一点是,软件需求是度量软件质量的基础。
不符合需求的软件就不具备质量。
而在定量监理实践中,通常需要使用一种被称为尺度度量的方法,这种定量度量适用于一些能够直接度量的特性,比如,出错率定义为错误数/KLOC/单位时间等。
因而,对质量控制所应该建立的一些定量数据是: (1)明确性(无二义性)、完全性、正确性、可理解性、可验证性、内部和外部一致性、可完成性、简洁性、可追踪性、可修改性、精确性和可复用性的数据。
这些数据可以用来评价分析模型和相应的需求规约质量的特征。
公开的可能缺陷数与报告总缺陷数的对比则可以用来评价测试精确度和测试覆盖度,同时也可以预测项目发布时间。
(2)产品发布前清除的缺陷数在总缺陷数中所占的百分比,有助于评估产品的质量。
(3)按严重缺陷、子系统缺陷来划分,分类统计出平均修复时间,这样将有助于规划纠正缺陷的工作。
(4)利用测试的统计数据,估算可维护性、可靠性、可用性和原有故障总数等数据。
这些数据将有助于评估应用软件的稳定程度和可能产生的失败。
在上述定量数据的基础上,就可以开始进行估算。
1、基本的定量估算 基本定量估算示例: 设 F为用功能点描述的软件规模; D1为在开发过程(提交之前)中发现的所有缺陷数; D2为提交后发现的缺陷数; D为发现的总缺陷数。
因此, D=D1+D2 对于一个应用软件项目,则有如下计算方程式(可以从不同的角度估算软件的质量): 质量=D2/F; 缺陷注入率=D/F; 整体缺陷清除率=D1/D; 同样以上期中的CAD软件为例,根据上期计算所得结果,功能点F为366,而在开发过程中发现了15个错误,提交后又发现了4个错误,则: D1=15,D2=4 D=D1 +D2=15+4=19 质量(每功能点的缺陷数)=D2/F=4/366=0.0109 缺陷注入率=D/F=19/366=0.05191 整体缺陷清除率=D1/D=15/19=0.7895 有资料报告,美国的平均整体缺陷清除率目前只达到大约85%。
而像AT&T、IBM、摩托罗拉和惠普这样一些大公司的顶级项目,通过实施最佳实践,其缺陷清除率可以超过99%。
众所周知,清除软件缺陷的难易程度是不同的。
需求错误、规格说明、设计问题及错误修改是最难清除的。
表1给出了美国平均缺陷的情况: 表2反映的是CMM五个等级是如何影响软件质量的,其数据来源于美国空军1994年委托SPR(美国一家著名的调查公司)进行的一项研究。
从表中可以看出,CMM级别越高,缺陷清除率也越高。
在监理过程中,可以将这这些标准或指标结合起来使用,用以辨明可能存在的质量问题。
如何做好敏捷软件开发中的风险管理
敏捷软件开发风险管理的思路是:首先分析敏捷软件开发的特点,然后结合风险管理过程进行管理。
敏捷软件开发通过其执行结构规避和减轻了常见的软件开发风险,但这也引进了开发过程的不确定,因此也蕴含了大量的风险。
敏捷软件开发的风险分类软件开发可分为开发人员、过程、产品和技术四个维度,它们互相联系和统一,共同决定了软件开发的速度和效率。
(1)人员风险。
人员风险有沟通不畅,缺乏协作,人员变动,素质低下,矛盾和冲突,缺乏激励,士气低下,对业务不理解,缺乏优秀人才,缺乏客户介入等。
(2)技术风险。
技术风险有伪敏捷,架构体系不稳定,设计不佳,缺乏技能,高估新技术等。
(3)产品风险。
产品风险有功能不符,需求镀金,功能蔓延,质量低下,工期延误,成本超支,客户满意度低,低产品价值,低投资回报等。
(4)过程风险。
过程风险有缺乏计划,迭代掌握不佳,评估和规划不合理,缺乏风险管理,缺乏质量保证措施等。
敏捷软件开发的风险处理在敏捷软件开发过程中从人、过程、产品和技术四个纬度进行的风险处理过程。
(1) 人员风险敏捷软件开发通过频繁沟通、每日站立会议、反馈等方式解决了沟通不畅,缺乏协作的问题;通过领导、结对编程、代码集体所有权等方式促进团队协作,提高技能素质,应对人员变动,降低矛盾和冲突;通过频繁的产品发布提高人员成就感和士气;通过现场开发,降低缺乏客户介入的风险。
(2) 技术风险敏捷软件开发通过迭代、测试套件、重构等方式适应变化和演进,避免了传统的开发方法在一开始就进行架构及设计,从而导致架构体系不稳定和设计不佳的风险。
对于敏捷技能险,可以通过引入敏捷教练、结对编程、学习环的方式加以应对。
而对于非敏捷软件开发所特有的普适性技术风险,可以通过组织和加强内部技术人员的培训和培养,引进能解决项目关键问题的优秀人才,防止优秀人才的流失等方式进行规避。
(3) 产品风险敏捷软件开发通过迭代、反馈、客户参与的方式解决了构建错误产品、功能蔓延、需求镀金、质量低下、客户满意度低等风险。
可以通过综合考虑功能价值和风险,按照高风险高价值→低风险高价值→低风险低价值→高风险低价值的顺序开发产品功能,渐次降低产品的价值风险;通过对净现值、内部收益率、回收期、贴现回收期等经济指标的综合分析,规避项目的投资回报风险。
(4)过程风险。
敏捷软件开发通过产品→发布规划→迭代规划→任务逐渐瞄准的形式,极大地消除了各种不确定风险。
对于软件开发过程的进度风险,可以通过设置功能缓冲区和进度缓冲区,从功能和进度两个方面保护项目免受不确定性的冲击;也可以从以下三个方面对进度风险进行定量分析。
①N=S/V(N:估算的项目总迭代数,S:项目的总故事点数,V:速率,是基于历史数据计算的每一次迭代所能完成的故事点数)。
②用正态分布N(μ,σ的平方),得到每一次迭代的平均故事点数X和标准差σ,计算μ=(S/N-X)/σ,并得出项目按时完成的概率。
③综合正态分布,PERT分布,三角分布进行蒙特卡罗模拟,得出模拟的结果并绘制累计完成的概率分布。
木头1979