


单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,*,*,*,,软件项目管理,项目管理过程,软件项目管理的对象是软件工程项目它所涉及的范围覆盖了整个软件工程过程为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源,(,人、硬件/软件,),、要实现的任务、经历的里程碑、花费工作量,(,成本,),、进度安排等做到心中有数软件项目管理可以提供这些信息这种管理在技术工作开始之前就应开始,在软件从概念到实现的过程中继续进行,当软件工程过程最后结束时才终止启动一个软件项目,在制定软件项目计划之前,必须,,明确项目的目标和范围,,考虑候选的解决方案,,标明技术和管理上的要求,,有了这些信息,才能确定合理、精确的成本估算,实际可行的任务分解以及可管理的进度安排软件人员和用户是在系统工程步骤中确定项目的目标和范围目标标明了软件项目的目的但不涉及如何去达到这些目的范围标明了软件要实现的基本功能,并尽量以定量的方式界定这些功能当明确了软件项目的目标和范围后,就应考虑候选的解决方案有了方案,管理人员和技术人员就能够据此选择一种“好的”方法,给出诸如交付期限、预算、个人能力、技术界面及其它许多因素所构成的限制。
度量,进行度量工作,是为了了解产品开发的技术过程和产品本身度量开发过程的目的是为了改进过程,,,度量产品的目的是为了提高产品的质量度量的作用是为了有效地定量地进行管理,为有效地度量,常常需要考虑:对于过程和产品,,,合适的度量是什么?,,所收集的数据如何使用?,,用于比较个人、过程或产品的度量是否合理?,,管理人员和技术人员可利用这些度量来了解软件工程过程的实际情况和它所生产的产品质量 估算,在软件项目管理过程中关键的活动就是制定项目计划在做计划时必须就需要的人力(以人月为单位)、项目持续时间(以年份或月份为单位)、成本(以元为单位)做出估算这种估算大多是利用以前的花费做为参考而做出的如果新项目与以前的一个项目在大小上和功能上十分类似,则新项目需要工作量、开发持续时间、成本大致与那个老项目相同假使项目背景完全生疏,只凭过去的经验做出估算可能就不够了现在已有了许多用于软件开发的估算技术其共同特点是:,,事先建立软件范围,,以软件度量(以往的度量)为基础,以做出估算,,项目被分解为可单独进行估算的小块,,管理人员大多使用不止一种估算技术,并用一种估算技术做为另一种估算技术的交叉检查风险分析,每当新建一个程序时,总是存在某些不确定性。
用户要求是否能确切地被理解?,,在项目最后结束之前要求实现的功能能否建立?,,是否存在目前仍未发现的技术难题?,,在项目出现严重误期时是否,,会发生一些变更?等等风险分析对于软件项目管理是决定性的,然而现在还有许多项目不考虑风险就着手进行所谓风险分析实际上就是一系列风险管理步骤,其中包括风险识别、风险估计、风险优化、风险管理策略、风险解决和风险监督这些步骤贯穿在软件工程过程中进度安排,每一个软件项目都要求制定一个进度安排,但不是所有的进度都得一样安排对于进度安排,需要考虑的是:,,预先对进度如何计划?,,工作怎样就位?,,如何识别定义好的任务?,,管理人员对结束时间如何掌握,?,,,如何识别和监控关键路径以确保结束?,,对进展如何度量?,,如何建立分隔任务的里程碑软件项目的进度安排与任一个工程项目的进度安排基本相同首先识别一组项目任务,再建立任务之间的相互关联,然后估算各个任务的工作量,分配人力和其它资源,制定进度时序追踪和控制,一旦建立了开发进度安排,就可以开始着手追踪和控制活动由项目管理人员负责追踪在进度安排中标明的每一个任务如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项目的中间里程碑上进度误期所造成的影响。
还可对资源重新定向,,对任务重新安排,,(做为最坏的结果)可以修改交付日期以调整已经暴露的问题用这种方式可以较好地控制软件的开发软件生产率和质量的度量,生产率与质量的度量是以投入工作量为依据的软件开发活动的度量和开发成果质量的度量为什么要对软件进行度量,,,面向规模的度量,,,面向功能的度量,,,软件质量的度量,,,在软件工程过程中使用度量,为什么要对软件进行度量,①,表明软件产品的质量;,,②,,弄清软件开发人员的生产率;,,③ 给出使用了新的软件工程方法和工具所得到的(在生产率和质量两方面)的效益;,,④ 建立项目估算的“基线”;,,⑤ 帮助调整对新的工具和附加培训的要求度量的方式,,在物理世界中的度量有两种方式直接度量(例如,度量一个螺栓的长度);,,间接度量(例如,用次品率来度量生产出的螺栓质量)软件度量也同样分为两类:直接度量与间接度量软件工程过程的直接度量包括所投入的成本和工作量软件产品的直接度量包括产生的代码行数(,LOC,)、,执行速度、存储量大小、在某种时间周期中所报告的差错数软件产品的间接度量包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性只要事先建立特定的度量规程,很容易做到直接度量软件所需要的成本和工作量、产生的代码行数等。
软件的功能性、效率、可维护性等质量特性却很难用直接度量判明,只有通过间接度量才能推断软件开发成本估算方法,对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单的事,要进行一系列的估算处理主要靠分解和类推基本估算方法分为三类自顶向下的估算方法,,,自底向上的估计法,,差别估计法,自顶向下的估算方法,这种方法的主要思想是从项目的整体出发,进行类推估算人员根据以前已完成项目所消耗的总成本(或总工作量),推算将要开发的软件的总成本(或总工作量),然后按比例将它分配到各开发任务单元中去,再来检验它是否能满足要求这种方法的优点是估算工作量小,速度快缺点是对项目中的特殊困难估计不足,估算出来的成本盲目性大,有时会遗漏被开发软件的某些部分自底向上的估计法,这种方法的主要思想是把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量它的优点是估算各个部分的准确性高缺点是缺少各项子任务之间相互联系所需要的工作量,还缺少许多与软件开发有关的系统级工作量,.,差别估计法,这种方法综合了上述两种方法的优点,其主要思想是把待开发的软件项目与过去已完成的软件项目进行类比,从其开发的各个子任务中区分出类似的部分和不同的部分。
类似的部分按实际量进行计算,不同的部分则采用相应方法进行估算专家判定技术,由多位专家进行成本估算,,单独一位专家可能会有种种偏见,最好由多位专家进行估算,取得多个估算值有多种方法把这些估算值合成一个估算值一种方法是简单地求各估算值的中值或平均值其优点是简便缺点是可能会由于受一、二个极端估算值的影响而产生严重的偏差一种方法是召开小组会,使各位专家们统一于或至少同意某一个估算值优点是可以摈弃蒙昧无知的估算值,缺点是一些组员可能会受权威或政治因素的影响Deiphi,技术,标准,Deiphi,技术,,组织者发给每位专家一份软件系统规格说明书和一张记录估算值的表格,请他们进行估算专家详细研究软件规格说明书的内容,对该软件提出三个规模的估算值,即:,a,i,,(,最小,),,m,i,(,可能,),,b,i,(,最大,),,无记名地填写表格,,组织者对专家们填在表格中的答复进行整理:,,,a.,计算各专家估算的期望值,Ei,;,,b.,对专家的估算结果分类摘要专家对此估算值另做一次估算在综合专家估算结果的基础上,组织专家再次无记名地填写表格 比较两次估算的结果若差异很大,要通过查询找出差异的原因上述过程可重复多次。
最终可获得一个得到多数专家共识的软件规模(源代码行数)最后,通过与历史资料进行类比,根据过去完成软件项目的规模和成本等信息,推算出该软件每行源代码所需要的成本然后再乘以该软件源代码行数的估算值,就可得到该软件的成本估算值软件开发成本估算的经验模型,软件开发成本估算是依据开发成本估算模型进行估算的开发成本估算模型通常采用经验公式来预测软件项目计划所需要的成本、工作量和进度数据用以支持大多数模型的经验数据都是从有限的一些项目样本中得到的IBM,模型,,E,=,5.2×L,0.91,,D,=,4.1×L,0.36,,=,14.47×E,0.35,,S,=,0.54×E,0.6,,DOC,=,49×L,1.01,,L,是源代码行数,(KLOC),,,E,是工作量,(PM),,,D,是项目持续时间,(,月,),,,S,是人员需要量,(,人,),,,DOC,是文档数量,(,页,),IBM,模型是静态单变量模型在此模型中,一般指一条机器指令为一行源代码一个软件的源代码行数不包括程序注释、作业命令、调试程序在内对于非机器指令编写的源程序,例如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑转换系数表,定义,:,转换系数=机器指令条数/非机器语言执行步数。
Putnam,模型,Putnam,模型是一种动态多变量模型适用于大型项目,但也可以应用在一些较小的软件项目中它是假定在软件开发的整个生存期中工作量有特定的分布大型软件项目的开发工作量分布可以用,Rayleigh-Norden,曲线表示用,Rayleigh-Norden,曲线可以导出一个“软件方程”,,,,td,是开发持续时间,(,年,),,,K,是软件开发与维护在内的整个生存期所花费的工作量,(,人年,),,,L,是源代码行数,(LOC),,,Ck,是技术状态常数,因开发环境而异技术状态常数,C,k,的取值,COCOMO,模型 (,COnstructive,,COst,,MOdel,),结构型成本估算模型是一种精确、易于使用的成本估算方法DSI,(,源指令条数)定义为代码的源程序行数若一行有两个语句,则算做一条指令它包括作业控制语句和格式语句,但不包括注释语句KDSI,=,1000DSI,MM,(,度量单位为人月)表示开发工作量TDEV,(,度量单位为月)表示开发进度它由工作量决定软件开发项目的分类软件开发项目的总体类型,:,,,组织型,,嵌入型,,半独立型,COCOMO,模型的分类,COCOMO,模型按其详细程度分成三级:,,基本,COCOMO,模型,,中间,COCOMO,模型,,详细,COCOMO,模型,,基本,COCOMO,模型是静态单变量模型,用源代码行数,(LOC),为自变量的经验函数计算软件开发工作量。
中间,COCOMO,模型在用,LOC,为自变量的函数计算软件开发工作量(称为名义工作量)的基础上,用涉及产品、硬件、人员、项目等方面的影响因素调整工作量估算详细,COCOMO,模型包括中间,CO COMO,模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中每一步骤(分析、设计等)的影响基本,COCOMO,模型,基本,COCOMO,模型的工作量和进度公式,中间,COCOMO,模型,进一步考虑,15,种影响软件工作量的因素,通过定下乘法因子,修正,COCOMO,工作量公式和进度公式,可以更合理地估算软件(各阶段)的工作量和进度中间,COCOMO,模型的名义工作量与进度公式如下所示中间,COCOMO,模型的名义工作量,,与进度公式,15,种影响软件工作量的因素,,fi,产品因素:软件可靠性、数据库规模、产品复杂性,,硬件因素:执行时间限制、存储限制、虚拟机易变性、环境周转时间,,人的因素:分析员能力、应用领域实际经验、程序员能力、虚拟机使用经验、程序语言使用经验,,项目因素:现代程序设计技术、软件工具的使用、开发进度限制,此时,工作量计算公式改成,,,例,1.,一个,32,KDSI,的声音输入系统是一个输入原型,或是一个可行性表演模型。
所需可靠性非常低把此模型看做半独立型软件则有,MM,,=,3.0,(,32,),1.12,=,146,又查表知,f,1,=,0.75,,,其它,f,i,=,1.00,,,则最终有,MM,=,146×0.75,=,110.,例,14.,一个规模为,10KDSI,的商用微机远程通信的嵌入型软件,使用中间,COCOMO,模型进行成本估算程序名义工作量,,,MM,=,2.8 (10),1.20,,=,44.38,(,MM,),,程序实际工作量,,,MM,=,44.38×,,,=,44.38×1.17,=,51.5,(,MM,),开发所用时间,,,TDEV,=,2.5 (51.5),0.32,,=,8.9,(,月),,如果分析员与程序员的工资都按每月,6,000,美元计算,则该项目的开发人员的工资总额为,,,51.5×6,000,=,309,000,(美元),,做为对比,现在用,IBM,模型计算:,,,PM,=,5.2 (10),0.91,,=,42.27,(,人月),,,D,=,4.1 (10),0.38,,=,9.84,(,月),,,S,=,0.54 (42.27),0.60,,=,5.1 (,人,),详细,COCOMO,模型,详细,COCOMO,模型的名义工作量公式和进度公式与中间,COCOMO,模型相同。
工作量因素分级表分层、分阶段给出针对每一个影响因素,按模块层、子系统层、系统层,有三张工作量因素分级表,供不同层次的估算使用每一张表中工作量因素又按开发各个不同阶段给出例如,关于软件可靠性(,RELY,),要求的工作量因素分级表(子系统层),如表所示使用这些表格,可以比,中间,COCO MO,模型,更方便、更准确地估算软件开发工作量。