中国科学院软件研究所基础软件工程研究中心一种支持风险评估的软件外包成本估算方法提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作2研究背景与意义研究背景软件外包成本估算和风险评估是软件外包项目管理中重要的部分软件外包成本估算与风险评估方法尚不成熟准确的风评评估需要用户较为准确的判断,但这通常很困难,一方面因为经验丰富的专家不多,另一方面由于每个项目有其固有的特点。目的与意义找出一种支持风险评估的软件外包成本估算方法,能够在进行成本估算的同时,支持项目的风险评估。3提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作4软件成本估算方法(1/2)5软件成本估算方法(2/2)COCOMO:分析结果是客观的和可重复的,公式化的分析过程非常公正;分析结果能够在一定程度上反映预测项目的特征,特别是在进行敏感性分析的时候,能够发现对项目构成最大影响的几个参数;能够体现项目人员的经验在项目中的作用。专家估算:可快速产生估算结果;几乎不花费任何时间和成本;可以和其它高成本的估算方法产生一样精确的结果。类比估算:避免了知识定义和知识抽取过程,相对专家经验方法更客观;使用更灵活,根据实际情况定义项目属性数量;仅处理实际产生的问题,而参数模型法须考虑所有可能发生的问题。6软件风险评估方法(1/2)经典软件项目风险管理体系Boehm理论:关于风险损失程度和风险发生概率的计算方法,Boehm提出采用核对明细表的方式,这样可以获取它们估算值;通过使用原型建模、模拟、基准对照等方式获得精确估算值。CRM模型:在软件项目生命周期的各个阶段持续关注风险识别和风险管理相关工作,它将软件项目风险管理过程定义为为识别、分析、计划、跟踪和控制的循环过程,并强调在这一过程中风险交流的重要性,指出必须将风险信息传达到适当的组织层次以得到最有效的风险分析和管理。PMBOK知识体系:由PMI(ProjectManagementInstitute)提出[26],指出软件项目风险管理的目标在于增加正面事件的发生概率和影响,降低负面事件的发生概率和影响。Riskit方法:该方法提供组织的项目在早期采用系统化的风险管理过程和技术,旨在完整的管理风险的起因、触发事件及其影响等,并使用合理的步骤进行风险评估。7软件风险评估方法(2/2)常见软件项目风险评估方法定性的工具与方法核对清单:核对清单法通过历史经验、根据风险属性,总结出一个风险分类系统,提供一个列表用以核对风险。头脑风暴法:采用头脑风暴法进行群体决策时,要集中有关专家组织召开专题会议,主持者以明确的方式向所有参加者阐明问题、说明会议的规则,尽量创造一种融洽轻松的会议气氛。Delphi法:Delphi法采用匿名方式调查专家对问卷中问题的看法,在此过程中专家不可以互相讨论,经过多次信息反馈,最后归纳出专家基本一致的意见作为比较准确的风险预测结果。定量的工具与方法敏感分析法:将多个风险因素中的一个因素作为输入变量,在假定其他风险因素保持正常值的情况下,变动该输入变量的值,通过分析、计算该变量的变化对风险结果产生的影响。Pareto分析法:80/20法则,即80%的项目风险集中在20%的关键风险因素上,所以只要识别出这20%的风险因素即可解决大部分的项目风险问题。蒙特卡洛仿真法:通过多次重复的统计实验来求解具有随机特性问题的方法决策树分析法、层次分析法、盈亏平衡分析法……8风险评估与成本估算结合RayMadachy和KariKansala为将风险评估与成本估算相结合开创了先河。在RayMadachy的方法中,软件风险评估的基本单位是风险关联规则,每个风险关联规则中涉及到两个或三个COCOMO模型中的成本驱动因子。每个风险关联规则有两个属性:风险级别、工作量乘数的乘积,其中风险级别代表风险发生的可能性。9提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作10模型的构建流程图11成本驱动因子等级软件外包项目数据估算的项目规模基于线性回归建立模型模型的性能验证数据的预处理估算模型的建立估算模型的验证提取软件外包成本驱动因子的确定及度量典型软件外包成本驱动因子的确定及度量(1/2)典型软件外包成本驱动因子的确定在建立估算模型的过程中,成本驱动因子的确定是最难以解决的问题。成本驱动因子的确定关键在于具有丰富的软件成本估算方面的专家知识。软件外包成本驱动因子业务流程的复杂度:包括技术复杂性和组织复杂性。需求的不确定性:评价了软件需求的易变性。系统复杂度:主要包括控制操作、计算操作、I/O相关操作、数据库管理操作以及用户界面管理等方面的复杂性。团队稳定性:用人员年流动率来评价团队的稳定性。人员能力:主要从开发人员能力和开发人员经验等方面考虑。协作效率:指软件外包发包方与接包方之间的协作效率,可从沟通频率等方面考虑。软件外包项目管理能力:指管理人员以前的软件外包项目管理经验程度。成本驱动因子的构成名称和描述等级生产率影响:为该成本驱动因子对项目成本产生最大影响与最小影响之间的倍数。12典型软件外包成本驱动因子的确定及度量(2/2)典型软件外包成本驱动因子的度量根据文献调研度量这些成本驱动因子,避免过多的主观输入影响估算的准确性业务流程的复杂度技术复杂性、组织复杂性需求的不确定性需求的稳定性、需求质量、需求的规范性系统复杂度控制操作、计算操作、I/O相关操作、数据库管理操作、用户界面管理软件外包项目管理能力需求变更管理、进度和成本管理、终端用户期望管理、外包项目管理经验人员能力接包方业务技巧、接包方技术技巧团队稳定性人员配备情况、接包方员工的连续性、接包方团队士气协作效率文化差异、语言障碍、时区、团队合作的有效性、员工交流技能13建模数据的预处理软件外包项目规模的收集新增代码行数、修改代码行数、重用代码行数调整后的代码行数软件外包项目工作量的收集项目实际工作量,注意单位的统一(人时、人日、人月)。成本驱动因子的收集根据度量指标建立了详细的数据收集依据。14重用代码行数修改代码行数新增代码行数重用修改*W*WSizeadjusted软件外包成本估算模型的建立公式法所有的成本驱动因子输入都确定采用回归建立估算模型蒙特卡洛仿真存在成本驱动因子输入不确定的情况(输入:最小值、最大值、最可能值)采用三角形分布取样软件外包成本估算模型的验证统计学角度R方:表示数据中自变量与因变量关系强弱的一个数,越大表明模型的拟合度越好。P-value:p-值是结果可信程度的一个递减指标,p-值越小,我们认为样本中变量的关联是总体中各变量关联的可靠指标。经验软件工程角度MREMMREPRED提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作17基于成本驱动因子的软件外包风险评估方法构建流程图成本驱动因子等级估算的项目规模软件外包风险评估模型的建立模型的性能验证数据的预处理风险评估模型的建立风险评估模型的验证项目规模等级风险因子等级风险因子对关联规则映射映射数据的预处理成本驱动因子与风险因子的映射如右上图所示风险因子对的确定如右下图所示依据风险关联规则IF((需求不确定性Nominal)AND(项目规模Nominal))THEN需求不确定性,项目规模会产生一个项目风险。基于成本驱动因子的软件外包风险评估方法的建立及验证公式法Projectrisk为项目的总风险为风险因子对Rfi,Rfj的发生概率Rfi*Rfj为风险因子对Rfi,Rfj发生的情况下对项目造成的影响蒙特卡洛仿真同成本估算中的蒙特卡洛仿真验证R方和p-value881i)*(riskPrijjiijRfRfriskprobojectijriskprob提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作21案例背景案例背景数据来源于某银行的软件外包项目。本文实验主要选取该银行6个数据较完整的外包项目。22成本估算模型估算公式模型内部验证MMRE为0.300191716293.0*)(*66316.16iiEMSizeEffort模型性能验证方法:留一交叉验证结果软件外包风险评估方法公式评估结果881i)*(riskPrijjiijRfRfriskprobojecty=4.9005x+22.827R2=0.8464051015202530354045500123456实际风险评估风险结论成本估算模型估算结果较好,还需找出项目P6估算偏差大的原因。风险评估模型评估结果较好提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作27系统功能模块项目基本属性设置模块输入项目的基本属性,为软件外包项目管理工作奠定基础成本驱动因子等级设置模块估算人员(风险评估人员)在不同情况下(分为确定和不确定)输入各个成本驱动因子等级成本驱动因子等级设置模块成本驱动因子权重设置估算模型参数设置模块软件外包成本估算模块基于收集到的成本驱动因子数据进行软件外包成本估算软件外包风险评估模块在重用成本驱动因子的情况下进行该外包项目的风险评估结果显示模块28成本驱动因子等级设置模块成本驱动因子权重设置模块估算模型参数设置模块软件外包成本估算模块软件外包风险评估设置模块结果显示模块支持风险评估的软件外包成本估算系统项目基本属性设置模块系统架构数据层封装了软件外包项目的基本属性及成本驱动因子,并根据输入将数据映射为实体层的对象实体。实体层将系统内的各种数据表现为对象,包括待估算的项目、成本驱动因子权重等,并且对象均有自己的属性。软件外包成本估算模块和软件外包风险评估模块建立在实体层之上。29用户界面公式法和蒙特卡洛仿真计算成本软件外包成本估算模块软件外包风险评估模块数据抽取因子输入成本因子与风险因子的映射公式法和蒙特卡洛仿真评估风险支持用户界面实体层数据层系统实现软件外包成本估算软件外包风险评估30提纲研究背景与意义国内外相关研究软件外包成本估算方法基于成本驱动因子的软件外包风险评估方法案例研究与验证支持风险评估的软件外包成本估算系统总结与进一步工作研究生期间的工作31总结与进一步工作总结确定了典型的软件外包成本驱动因子提出了一种软件外包成本估算方法在重用软件外包成本驱动因子的前提下,提出了一种软件外包风险评估方法实现了支持风险评估的软件外包成本估算系统进一步工作校准估算模型的参数提高系统的自动化程度进行实际应用32提纲研究背景与意义国内外相关研究基于用例的软件成本估算方法案例研究与验证基于用例的软件成本估算系统总结与进一步工作研究生期间的工作33研究生期间的工作参加的科研项目发表的论文3435谢谢!