《《软件项目管理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《软件项目管理》PPT课件.ppt(240页珍藏版)》请在三一办公上搜索。
1、1,软件项目管理,1.1 项目管理过程1.2 软件生产率和质量的度量1.3 软件项目的估算1.4 成本效益分析1.5 软件项目组织与计划1.6 进度安排与跟踪,2,1.1 项目管理过程,软件项目管理的对象是软件工程项目。涉及的范围覆盖了整个软件工程过程。为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件软件)、要实现的任务、经历的里程碑、花费工作量(成本)、进度安排等做到心中有数。软件项目管理可以提供这些信息。,3,什么是项目管理?,项目管理是指“在项目活动中运用专门的知识、技能、工具和方法,使项目能够实现或超过项目相关人员的需要和期限。”项目相关人员是
2、指参与项目和受项目影响的人,包括项目发起人、项目组、支持人员、客户、最终用户、供应商,项目对手。项目的核心知识是范围、时间、成本和质量。辅助知识是人力资源管理、风险管理和采购管理。,4,经过多年的发展,项目管理已经成为一个较为成熟的领域。美国项目管理协会为此建立了一套项目管理知识体系指南,作为了解和学习项目管理的知识框架和起点。它包括项目管理引论、9大项目管理知识领域的简要描述以及相关术语。本课程将结合软件开发项目的特点,在软件项目管理中全面应用项目管理的9大块知识领域以及全部的5个过程组启动、计划、执行、控制和收尾。,5,项目管理框架,6,项目过程与项目知识领域的关系,通常项目过程和项目的知
3、识领域的关系如下:,7,8,9,在系统开发生命周期(SDLC)过程中应用项目管理知识领域,与SDLC各阶段相关的知识领域的任务:,10,11,12,13,14,1、启动一个软件项目,在制定软件项目计划之前,必须 明确项目的目标和范围 考虑候选的解决方案 标明技术和管理上的要求有了这些信息,才能确定合理、精确的成本估算,实际可行的任务分解以及可管理的进度安排。软件人员和用户是在系统工程步骤中确定项目的目标和范围。,15,目标标明了软件项目的目的但不涉及如何去达到这些目的。范围标明了软件要实现的基本功能,并尽量以定量的方式界定这些功能。当明确了软件项目的目标和范围后,就应考虑候选的解决方案。有了方
4、案,管理人员和技术人员就能够据此选择一种“好的”方法,给出诸如交付期限、预算、个人能力、技术界面及其它许多因素所构成的限制。,16,2-1、制定计划:度量,什么是度量?IEEE 定义度量是“对一个系统、构件或过程具有的某个给定属性的一个定量测量”。进行度量工作,是为了了解产品开发的技术过程和产品本身。度量开发过程的目的是为了改进过程;度量产品的目的是为了提高产品质量。度量的作用是为有效地定量地进行管理。,17,为有效地度量,对于过程和产品,常常需要考虑:合适的度量是什么?所收集的数据如何使用?用于比较个人、过程或产品的度量是否合理?管理人员和技术人员可利用这些度量来了解软件工程过程的实际情况和
5、它所生产的产品质量。,18,2-2、制定计划:估算,在软件项目管理过程中关键的活动就是制定项目计划。在做计划时必须就需要的人力(以人月为单位)、项目持续时间(以年份或月份为单位)、成本(以元为单位)做出估算。这种估算大多是利用以前的花费做为参考而做出的。,19,如果新项目与以前的一个项目在大小上和功能上十分类似,则新项目需要工作量、开发持续时间、成本大致与那个老项目相同。假使项目背景完全生疏,只凭过去的经验做出估算可能就不够了。现在已有了许多用于软件开发的估算技术。其共同特点是:事先建立软件范围,20,以软件度量(以往的度量)为基础,以做出估算项目被分解为可单独进行估算的小块管理人员大多使用不
6、止一种估算技术,并用一种估算技术做为另一种估算技术的交叉检查。,21,2-3、制定计划:风险分析,每当新建一个程序时,总是存在某些 不确定性。用户要求是否能确切地被理解?在项目最后结束之前要求实现的功能能否建立?是否存在目前仍未发现的技术难题?在项目出现严重误期时是否会发生一些变更?等等。,22,风险分析对于软件项目管理是决定性的,然而现在还有许多项目不考虑风险就着手进行。所谓风险分析实际上就是一系列风险管理步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监督。这些步骤贯穿在软件工程过程中。,23,2-4、制定计划:进度安排,每个软件项目都要求制定一个进度安排,但不是所有进度都得
7、一样安排。对于进度安排,需要考虑的是:预先对进度如何计划?工作怎样就位?如何识别定义好的任务?管理人员对结束时间如何掌握?如何识别和监控关键路径以确保结束?,24,对进展如何度量?如何建立分隔任务的里程碑。软件项目的进度安排与任一个工程项目的进度安排基本相同。识别一组项目任务 建立任务之间的相互关联 估算各个任务的工作量 分配人力和其它资源 制定进度时序,25,3、追踪和控制,一旦建立了开发进度安排,就可以开始着手追踪和控制活动。由项目管理人员负责追踪在进度安排中标明的每一个任务。如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项目的中间里程碑上进度误期
8、所造成的影响。,26,可对资源重新定向对任务重新安排(做为最坏的结果)可以修改交付日期以调整已经暴露的问题。用这种方式可以较好地控制软件的开发。,27,1.2 软件生产率和质量的度量,生产率与质量的度量是以投入工作量为依据的软件开发活动的度量和开发成果质量的度量。为什么要对软件进行度量1.2.2 面向规模的度量 面向功能的度量 软件质量的度量 在软件工程过程中使用度量,28,1.2.1 为什么要对软件进行度量,表明软件产品的质量;弄清软件开发人员的生产率;给出使用了新的软件工程方法和工具所得到的(在生产率和质量两方面)的效益;建立项目估算的“基线”;帮助调整对新的工具和附加培训的要求;在项目中
9、辅助决策。,29,度量的方式,在物理世界中的度量有两种方式。直接度量(如度量一个螺栓的长度);间接度量(如用次品率来度量生产出的螺栓质量)。软件度量也同样分为两类:直接度量与间接度量。软件工程过程的直接度量包括所投入的成本和工作量。,30,软件产品的直接度量包括产生的代码行数(LOC)、执行速度、存储量大小、在某种时间周期中报告的差错数。软件产品的间接度量包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性。只要事先建立特定的度量规程,很容易做到直接度量软件所需要的成本和工作量、产生的代码行数等。,31,软件的功能性、效率、可维护性等质量特性却很难用直接度量判明,只有通过间接度量才能
10、推断。,32,软件度量领域的分类,33,软件生产率度量的焦点集中在软件工程过程的输出;软件质量度量则指明了软件适应明确和不明确的用户要求到什么程度;技术度量的焦点则集中在软件的某些特性(如逻辑复杂性、模块化程度)上而不是软件开发的全过程。,34,另一种分类方法,面向规模的的度量用于收集与直接度量有关的软件工程输出的信息和质量信息。面向功能的度量提供直接度量的尺度。面向人的度量则收集有关人们开发计算机软件所用方式的信息和人们理解有关工具和方法的效率的信息。,35,1.2.2 面向规模的度量,面向规模的度量是对软件和软件开发过程的直接度量。可以建立一个面向规模的数据表格来记录项目的某些信息。该表格
11、列出了在过去几年完成的每一个软件开发项目和关于这些项目的相应面向规模的数据。,36,面向规模的数据表格,37,项目aaa-01 规模为 114.1 KLOC(千代码行)工作量用了 24个人月 成本为168,000元 文档页数为365 在交付用户使用后第一年内发现了 29个错误,有 3 个人参加了项目 aaa-01 的软件开发工作。,38,需要注意的是,在表格中记载的工作量和成本是整个软件工程的活动(分析、设计、编码和测试),而不仅仅是编码活动。对于每一个项目,可以根据表格中列出的基本数据计算简单的面向规模的生产率和质量的度量。,39,根据数据表格可以对所有的项目计算出平均值:生产率 KLOCP
12、M(人月)质量 错误数KLOC 成本 元LOC 文档 文档页数KLOC,40,1.2.3 面向功能的度量,面向功能的软件度量是对软件和软件开发过程的间接度量。面向功能度量主要考虑程序的“功能性”和“实用性”,而不是对 LOC计数。该度量是一种叫做功能点方法的生产率度量法,利用软件信息域中的一些计数和软件复杂性估计的经验关系式而导出功能点 FP。,41,面向功能的数据表格,42,功能点计算,确定五个信息域的特征,并在表格中相应位置给出计数。用户输入数:各个用户输入是面向不同应用的输入数据。用户输出数:各个用户输出是面向应用的输出信息,包括报告,屏幕信息,错误信息等。,43,用户查询数:查询是一种
13、联机的交互操作,每次询问/响应都应计数。文件数:每一个逻辑文件都应计数。逻辑文件可以是一个大数据库的一部分,可以是一个单独的文件。外部接口数:与系统中其他设备通过外部接口读写信息次数均应计数。一旦收集到上述数据,就可以计算出与每一个计数相关的复杂性值。,44,一个信息域是简单的、平均的还是复杂的,由使用功能点方法的机构自行确定,从而计算出加权计数。计算功能点,使用如下的关系式:FP 总计数(0.650.01SUM(Fi)总计数是所有加权计数项的和;SUM(Fi)是求和函数:Fi(i1.14)是复杂性校正值,它们应通过逐一回答如下提问来确定。,45,复杂性校正值 Fi的取值0.5:=0 没有影响
14、=1 偶然的=2 适中的=3 普通的=4 重要的=5 极重要的F1 系统是否需要可靠的备份和恢复?F2 系统是否需要数据通信?F3 系统是否有分布处理的功能?F4 在系统中是否性能成为关键要素?F5 系统是否运行在高度实用化的操作环境中?,46,F6 系统是否需要联机数据输入?F7 联机数据输入是否需要建立多重窗口?F8 主文件是否可以在线更新?F9 输入、输出、文件、查询界面是否复 杂?F10 内部处理过程是否复杂?F11 程序代码是否可复用?F12 设计中是否包括了转移和安装?F13 系统是否设计成可以重复安装在不同 站点中?,47,F14 系统是否设计成易修改和易使用?一旦计算出功能点,
15、就可仿照LOC的方式度量软件的生产率、质量和其它属性:生产率 FPPM(人月)质量 错误数FP 成本 元FP 文档 文档页数FP,48,功能点度量是为了商用信息系统应用而设计的。特征点度量(Feature Points)可以用于系统和工程软件应用特征点度量适合于算法复杂性高的应用。而实时处理、过程控制、嵌入式软件应用的算法复杂性都偏高,因此适合于特征点度量。,49,为了计算特征点,可以象功能点计算那样,对信息域值进行计数和加权。此外,特征点度量要对一个新的软件特征“算法”进行计数。计算特征点可使用一个计算表格。对于每一个度量参数只使用一个权值,并且使用 FP总计数(0.650.01SUM(Fi
16、)来计算总的特征点值。,50,特征点度量计算表格,51,1.2.4 软件质量的度量,质量度量贯穿于软件工程的全过程中以及软件交付用户使用之后。在软件交付之前得到的度量可作为判断设计和测试质量好坏的依据。这一类度量包括程序复杂性、有效的模块性和总的程序规模。在软件交付之后的度量则把注意力集中于还未发现的差错数和系统的可维护性方面。,52,使用得最广泛软件质量的事后度量包括正确性、可维护性、完整性和可使用性。正确性:一个程序必须正确地运行,并为它的用户提供某些输出。正确性要求软件执行所要求的功能。正确性的度量是每千代码行(KLOC)的差错数,其中将差错定义为已被证实是不符合需求的缺陷。,53,可维
17、护性:软件维护比其它的软件工程活动需要更多的工作量。还没有一种方法可以直接度量可维护性,必须采取间接度量。一种简单的面向时间的度量:平均变 更等待时间MTTC。这个时间包括分析变更要求、设计适当修改、实现变更并测试、把变更发送给所有用户。一个可维护的程序与不可维护的程序相比,应有较低的MTTC。,54,完整性:完整性度量一个系统抗拒对它的安全性攻击(事故的和人为的)的能力。软件的所有三个成分程序、数据和文档都会遭到攻击。度量完整性,需要定义两个附加的属性:危险性和安全性。危险性是特定类型的攻击将在一给定时间内发生的概率,安全性是排除特定类型攻击的概率。,55,一个系统的完整性可定义为 完整性(
18、1危险性)(1安全性)其中,对每一个攻击的危险性和安全性都进行累加。可使用性:如果一个程序不具有“用户友好性”,即使它所执行的功能很有价值,也常常会失败。可使用性量化“用户友好性”,并依据以下四个特征进行度量:,56,为学习系统所需要的体力上的和智力上的技能;为达到适度有效使用系统所需要的时间;当软件被某些人适度有效地使用时所度量的在生产率方面的净增值;用户角度对系统的主观评价(可以通过问题调查表得到)。,57,协调不同的度量方法,代码行数和功能点之间的关系依赖于用来实现软件的程序设计语言和设计质量。下面给出使用各种程序设计语言建立一个功能点所需要的平均代码行数的粗略估算。,58,建立一个功能
19、点所需平均代码行数,59,影响软件生产率的重要因素,人的因素:软件开发组织的规模和专长;问题因素:问题的复杂性和对设计限制,以及需求的变更次数;过程因素:使用的分析与设计技术、语言和CASE工具的有效性,及评审技术;产品因素:计算机系统的可靠性和性能;资源因素:CASE工具、硬件和软件资源的有效性。,60,1.2.5 在软件工程过程中使用度量,建立基线 为了将LOC和FP用于软件估算技术中,必须建立历史数据基线。根据历史经验,在软件工程过程的衔接处划出一条基线,在此基线上附有一些用于度量的经验目标信息,作为工程过程评估的依据,判断工程过程的完成是否达到预想的要求。,61,质量度量数据一旦收集到
20、,软件开发组织就可以根据它们来调整其软件工程项目,以消除那些对软件开发有重大影响的差错产生的根源。大多数软件开发人员都希望了解:哪些用户需求可能会变更?系统中哪些模块容易出错?对每一个模块要做多少测试?在测试时能够预计多少错误?,62,如果能收集到相关的度量数据,就能确定这些问题的答案。为了帮助计划、成本和工作量估算,基线的数据应当具有下列属性:数据必须合理、精确,应避免单纯根据以往项目进行“盲目估算”;应从尽可能多的项目中收集数据;数据必须一致;基线数据的应用必须与要做估算的工作类似。,63,1.3 软件项目的估算,软件项目管理过程开始于项目计划。在做项目计划时,第一项活动就是估算。在做估算
21、时往往存在某些不确定性,使得软件项目管理人员无法正常进行管理而导致产品迟迟不能完成。现在已使用的实用技术是时间和工作量估算。,64,1.3.1 估算对风险的影响,低风险区,项目复杂性,项目结构化、规约的不确定程度,项目工作量大小,65,项目复杂性对于增加软件计划的不确定性影响很大。复杂性越高,估算的风险就越高。项目规模对于软件估算的精确性和功效影响也比较大。随着软件规模的扩大,问题分解会更加困难。项目的规模越大,开发工作量越大,估算的风险越高。项目的结构化程度也影响项目估算的风险。随着结构化程度的提高,进行精确估算的能力就能提高,而风险将减少。,66,历史信息的有效性也影响估算的风险。对以往项
22、目进行综合度量,可借用来比较准确地进行估算,安排进度以避免重走过去的弯路,而总的风险也减少了。如果对软件项目的作用范围还不十分清楚,或者用户的要求经常变更,都会导致对软件项目所需资源、成本、进度的估算频频变动,增加估算的风险。计划人员应当要求在软件的规格说明中给出完备的功能、性能、接口的定义。,67,1.3.2 软件成本和工作量的估算技术,软件成本和工作量的估算中变化的东西太多,人、技术、环境、政治,都会影响软件最终成本和工作量。软件项目的估算能够通过一系列系统化的步骤,在可接受的风险范围内提供估算结果。成本估算必须“事前”给出。时间越久,了解得越多,估算中出现的严重误差就越少。,68,分解技
23、术,当一个待解决的问题过于复杂时,我们可以把它进一步分解,直到分解后的子问题变得容易解决为止。然后,分别解决每一个子问题,并将这些子问题的解答综合起来,从而得到原问题的解答。,69,LOC和FP估算,在软件项目估算中,在两个方面使用了LOC和FP数据:把LOC和FP数据当做一个估算变量,用于量度软件每一个元素的规模。LOC和FP数据作为从过去项目中收集到的基线数据,与其它估算变量联合使用,进行成本和工作量的估算。,70,LOC和FP的共性在于:给出一个有界的软件范围的叙述 由此叙述把软件分解成一些小的可分别独立进行估算的子功能 对每一个子功能估算LOC或FP 把基线生产率度量(如LOCPM或F
24、PPM)用做特定的估算变量,导出子功能的成本或工作量综合子功能的估算得到整个项目的总估算。,71,用 LOC 做为估算变量时,必须进行功能分解,且需要达到很详细的程度。而估算 FP 时需要的数据是宏观的量,当把 FP 当做估算变量时不需分解得很详细。LOC 是直接估算的,而 FP 是通过估计输入、输出、数据文件、查询和外部接口的数目,以及 14 种复杂性校正值间接地确定的。,72,项目计划人员可对每一个分解的功能提出一个有代表性的估算值范围。利用历史数据或凭实际经验(当其它的方法失效时),对每个功能分别按最佳的、可能的、悲观的三种情况给出LOC或FP估计值。记作a、m、b。接着计算LOC或FP
25、的期望值 E。E(a4mb)6,73,所有子功能的总估算变量值除以相应于该估算变量的平均生产率度量得到项目的总工作量。例如,若假定总的FP估算值是310,基于过去项目的平均FP生产率是5.5FPPM,则项目的总工作量是:工作量 3105.5 56 PM作为LOC和FP估算的实例,考察一 个为CAD应用而开发的软件包。,74,系统定义评审指明,软件是在一个工作站上运行,其接口必须使用各种计算机图形设备,包括鼠标器、数字化仪、高分辩率彩色显示器和激光打印机。在这个实例中,使用LOC做为估算变量。根据系统规格说明,软件范围的初步叙述如下“软件将从操作员那里接收2 维或 3 维几何数据。操作员通过用户
26、界面与 CAD系统交互并控制它,这种用户界面将表,75,现出很好的人机接口设计特性。所有的几何数据和其它支持信息保存在一个CAD数据库内。要开发一些设计分析模块以产生在各种图形设备上显示的输出。软件要设计得能控制并与能各种外部设备,包括鼠标器、数字化仪、激光打印机和绘图仪交互。”,76,经过分解,识别出下列主要软件功能:用户界面和控制功能 二维几何分析 三维几何分析 数据库管理 计算机图形显示功能 外设控制PC 设计分析模块通过分解,可得到如下估算表,77,78,从历史的基线数据求出生产率度量,即行PM和元行。需要根据复杂性程度的不同,对各功能使用不同的生产率度量值。在表中的成本=LOC的期望
27、值 E与元行相乘,工作量=用LOC 的期望值 E与行PM相除。因此可得,该项目总成本的估算值为 657,000元,总工作量的估算值为145人月(PM)。,79,1.3.4 软件开发成本估算方法,软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价。它不包括原材料和能源的消耗,主要是人的劳动的消耗。人的劳动消耗所需代价就是软件产品的开发成本。软件产品开发成本的计算方法不同于其它物理产品成本的计算。,80,软件的开发成本是以一次性开发过程所花费的代价来计算的。软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、组装测试到确认测试,整个软件开发全过程所花费的代价作为依据的。,
28、81,对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单的事,要进行一系列的估算处理。主要靠分解和类推。基本估算方法分为三类。自顶向下的估算方法 自底向上的估计法 差别估计法,82,1.自顶向下的估算方法,这种方法的主要思想是从项目的整体出发,进行类推。估算人员根据以前已完成项目所消耗的总成本(或总工作量),推算将要开发的软件的总成本(或总工作量),然后按比例将它分配到各开发任务单元中去,再来检验它是否能满足要求。,83,84,2.自底向上的估计法,这种方法的主要思想是把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量。
29、它的优点是估算各个部分的准确性高。缺点是缺少各项子任务之间相互联系所需要的工作量,还缺少许多与软件开发有关的系统级工作量.,85,3.差别估计法,这种方法综合了上述两种方法的优点,其主要思想是把待开发的软件项目与过去已完成的软件项目进行类比,从其开发的各个子任务中区分出类似的部分和不同的部分。类似的部分按实际量进行计算,不同的部分则采用相应方法进行估算。,86,4.专家判定技术,由多位专家进行成本估算。单独一位专家可能会有种种偏见,最好由多位专家进行估算,取得多个估算值。有多种方法把这些估算值合成一个估算值。一种方法是简单地求各估算值的中值或平均值。其优点是简便。缺点是可能会由于受一、二个极端
30、估算值的影响而产生严重的偏差。,87,一种方法是召开小组会,使各位专家们统一于或至少同意某一个估算值。优点是可以摈弃蒙昧无知的估算值,缺点是一些组员可能会受权威或政治因素的影响。,88,5.Deiphi技术,标准Deiphi技术 组织者发给每位专家一份软件系统规格说明书和一张记录估算值的表格,请他们进行估算。专家详细研究软件规格说明书的内容,对该软件提出三个规模的估算值,即:ai(最小),mi(可能),bi(最大),无记名地填写表格,89,组织者对专家们填在表格中的答复进行整理:a.计算各专家估算的期望值 Ei;b.对专家的估算结果分类摘要。专家对此估算值另做一次估算。在综合专家估算结果的基础
31、上,组织专家再次无记名地填写表格。比较两次估算的结果。若差异很大,要通过查询找出差异的原因。,90,上述过程可重复多次。最终可获得一个得到多数专家共识的软件规模(源代码行数)。最后,通过与历史资料进行类比,根据过去完成软件项目的规模和成本等信息,推算出该软件每行源代码所需要的成本。然后再乘以该软件源代码行数的估算值,就可得到该软件的成本估算值。,91,1.3.5 软件开发成本估算的经验模型,软件开发成本估算是依据开发成本估算模型进行估算的。开发成本估算模型通常采用经验公式来预测软件项目计划所需要的成本、工作量和进度数据。用以支持大多数模型的经验数据都是从有限的一些项目样本中得到的。,92,1.
32、IBM模型(Walston-Felix),E 5.2(KLOC)0.91 D 4.1(KLOC)0.36 14.47E0.35 S 0.54E0.6 DOC 49(KLOC)1.01KLOC是千源代码行数,E是工作量(PM),D 是项目持续时间(月),S 是人员需要量(人),DOC是文档数量(页)。,93,IBM模型是静态单变量模型。在此模型中,一般指一条机器指令为 一行源代码。一个软件的源代码行数不包括程序注释、作业命令、调试程序在内。对于非机器指令编写的源程序,例如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑。,94,转换系数表,定义:转换系数机器指令条数非机器语言执行步数。,
33、95,其他静态单变量模型,面向规模的估算 E=5.5+0.73(KLOC)1.16 Beiley-Basili模型 E=3.2(KLOC)1.05 Boehm的简单模型 E=5.288(KLOC)1.047 Doty模型,针对KLOC9的情况,96,面向功能点的估算 E=-13.39+0.0545FP Albrecht-Gaffney模型 E=60.627.72810-8FP3 Kemerer模型 E=585.7+15.12FP Maston-Barnrtt-Mellichamp模型,97,2.Putnam 模型,Putnam模型是一种动态多变量模型。适用于大型项目,但也可以应用在一些较小的软
34、件项目中。它是假定在软件开发的整个生存期中工作量有特定的分布。大型软件项目的开发工作量分布可以用Rayleigh-Norden曲线表示。,98,99,用Rayleigh-Norden曲线可以导出一个“软件方程”td 是开发持续时间(年),K是软件开发与维护在内的整个生存期所花费的工作量(人年),L是源代码行数(LOC),Ck是技术状态常数,因开发环境而异。,100,技术状态常数Ck的取值,101,3.COCOMO模型(COnstructive COst MOdel),结构型成本估算模型是一种精确、易于使用的成本估算方法。DSI(源指令条数)定义为代码的源程序行数。若一行有两个语句,则算做一条指
35、令。它包括作业控制语句和格式语句,但不包括注释语句。KDSI1024DSI。,102,MM(度量单位为人月)表示开发工作量。TDEV(度量单位为月)表示开发进度。它由工作量决定。软件开发项目的分类软件开发项目的总体类型:组织型 嵌入型 半独立型,103,COCOMO模型的分类COCOMO模型按其详细程度分成三级:基本COCOMO模型 中间COCOMO模型 详细COCOMO模型基本COCOMO模型是静态单变量模型,用源代码行数(LOC)为自变量的经验函数计算软件开发工作量。,104,中间COCOMO模型在用LOC为自变量的函数计算软件开发工作量(称为名义工作量)的基础上,用涉及产品、硬件、人员、
36、项目等方面的影响因素调整工作量估算。详细COCOMO模型包括中间COCO MO模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中每一步骤(分析、设计等)的影响。,105,基本COCOMO模型,基本COCOMO模型的工作量和进度公式,106,中间COCOMO模型,进一步考虑15种影响软件工作量的因素,通过定下乘法因子,修正COCO MO工作量公式和进度公式,可以更合理地估算软件(各阶段)的工作量和进度。中间COCOMO模型的名义工作量与进度公式如下所示。,107,中间COCOMO模型名义工作量与进度公式,108,15种影响软件工作量的因素 fi,产品因素:软件可靠性、
37、数据库规模、产品复杂性硬件因素:执行时间限制、存储限制、虚拟机易变性、环境周转时间人的因素:分析员能力、应用领域实际经验、程序员能力、虚拟机使用经验、程序语言使用经验项目因素:现代程序设计技术、软件工具的使用、开发进度限制,109,虚拟机是指为完成某一软件任务所使用硬、软件的结合。,110,111,此时,工作量计算公式改成例1.一个 32KDSI 的声音输入系统是一个输入原型,或是一个可行性表演模型。所需可靠性非常低。把此模型看做半独立型软件。则有 MM 3.0(32)1.12 146又查表知 f10.75,其它 fi1.00,则最终有MM 1460.75 110.,112,例14.一个规模为
38、10KDSI的商用微机远程通信的嵌入型软件,使用中间COCOMO模型进行成本估算。程序名义工作量 MM 2.8(10)1.20 44.38(MM)程序实际工作量 MM 44.38 44.381.17 51.5(MM),113,114,开发所用时间 TDEV 2.5(51.5)0.32 8.9(月)如果分析员与程序员的工资都按每月6,000美元计算,则该项目的开发人员的工资总额为 51.56,000 309,000(美元)做为对比,现在用IBM模型计算:PM 5.2(10)0.91 42.27(人月)D 4.1(10)0.38 1.84(月)S 0.54(42.27)0.60 5.1(人),11
39、5,详细COCOMO模型,详细COCOMO模型的名义工作量公式和进度公式与中间COCOMO模型相同。工作量因素分级表分层、分阶段给出。针对每一个影响因素,按模块层、子系统层、系统层,有三张工作量因素分级表,供不同层次的估算使用。每一张表中工作量因素又按开发各个不同阶段给出。,116,例如,关于软件可靠性(RELY)要求的工作量因素分级表(子系统层),如表所示。使用这些表格,可以比中间COCO MO模型更方便、更准确地估算软件开发工作量。,117,软件可靠性工作量因素分级表(子系统层),118,4.COCOMO-2模型,COCOMO模型适用于专用的定制的软件项目。1997年Boehm等人提出来的
40、COCOMO-2模型则适用于广泛汇集各种技术的软件项目,如商用软件、面向对象软件、通过螺旋型或演化型开发模型制作的软件。COCOMO-2模型有三种:应用组合模型(用于早期原型)、更详细的早期设计模型和后续的后架构模型。,119,应用组合模型,该模型用于估算原型制作的工作量。适用场合如:用户界面的原型开发,软件和系统交互考虑,性能评估和技术成熟度评价等。模型使用“对象点”,而不用“源代码行”进行估算。对象点与功能点一样,是一种软件间接度量。根据(用户界面)屏幕数、报表数、建造应用可能需要的构件数来计数。,120,有关屏幕和报表的对象点复杂性等级,每一个对象(如一个屏幕或一个报表)可以按照上表划分
41、到三个复杂性级别(简单、中等、困难)。,121,复杂性要根据客户机、服务器数据表的数量和源,屏幕或报表的视图或屏幕的数量而定。一旦确定了复杂性,屏幕、报表和构件的计数按下表加权,以调整工作量。,对象类型,复 杂 性 加 权,122,将各个对象的加权计数累加,得到总的对象点计数。如果开发中使用了构件或复用了以前的软件,再估计复用的百分比 r。通过以下公式得到调整后的对象点计数(称为新对象点NOP):NOP=(对象点计数)(100-r)/100为了基于新对象点估算工作量,考虑“生产率”这一概念,它的单位是 生产率PROD=NOP/人月,123,基于开发者经验和开发环境成熟度的平均生产率,估算工作量
42、 E=NOP/PROD,124,早期设计模型,该模型用于评价可供选择的软件/系统架构和操作概念。首先估算功能点,用未加调整的功能点根据下表来计算LOC。早期设计模型的方程为:E=a(KLOC)EAF其中,a是常数,暂定为2.45。EAF是工作量调整因素。,125,每个功能点的编程语言级别和源代码语句范围,126,可按下表中的7个早期设计的成本驱动因素来计算工作量调整因素 EAF,就像COCOMO模型那样。,127,后架构模型,该模型应用于产品实际开发和维护。在该模型中可以使用功能点或LOC,其中的修饰语是为复用和软件破坏而设。后结构模型的方程为 E=a(KLOC)bEAF其中,a设为2.55,
43、b按下式计算:b=1.01+0.01SUM(wi)其中,Wi 按下表的5个尺度因素设定。,128,COCOMO-2的尺度因素,这5个尺度因素代替了原来COCOMO模型中的项目类型(组织型、半独立型和嵌入型),129,利用下面的后架构成本驱动因素 fi,计算EAF,调整工作量。,130,续一,131,续二,132,1.4 成本效益分析,成本效益分析的目的,是从经济角度评价开发一个新的软件项目是否可行。成本效益分析首先估算新软件系统的开发成本,然后与可能取得的效益(有形的和无形的)进行比较权衡。有形的效益可以用货币的时间价值、投资回收期、纯收入等指标进行度量。无形的效益主要是从性质上、心理上进行衡
44、量。,133,仍以前面所说的代替人工设计过程的计算机辅助设计(CAD)系统为例。选定产生最终详细图纸的时间t-draw 作为一个可度量的特性。分析发现,CAD系统产生的缩减比为1/4。其他数据为:t-draw:平均绘图时间4 小时 c:每个绘图小时的成本20.00 元 n:每年绘图的数量8000 p:系统中已完成绘图的百分比60,134,利用以上已知数据,计算每年节省费用的估算值,即所得到的效益为:节省的绘图费用 缩减比t-draw ncp 96000 元年 无形的效益(如较好的设计质量、较高的雇员素质)可以被赋予货币价值,或用于支持按劝告行事。可能的系统效益包括:改进计算与打印工作所得到的效
45、益;,135,改进记录保存工作所得到的效益;改进记录查找工作所得到的效益;改进系统重构能力所得到的效益;改进分析和模拟能力所得到的效益;改进过程和资源管理所得到的效益。系统的经济效益等于因使用新系统而增加的收入加上使用新系统可节省的运行费用。几种度量效益的方法包括:货币的时间价值、投资回收期、纯收入、投资回收率。,136,1.4.1 货币的时间价值,成本估算的目的,是要求对项目投资。但投资在前,取得效益在后。因此要考虑货币的时间价值。通常用利率表示货币的时间价值。设年利率为 i,现已存入 P 元,则 n 年后可得钱数为 F=P(1+i)n这就是 P 元钱在 n 年后的价值。,137,反之,若
46、n 年后能收入 F 元,那么这些钱现在的价值是 例如,在工程设计中用CAD系统来取代大部分人工设计工作,每年可节省9.6万元。若软件生存期为 5 年,则 5 年可节省48万元。开发这个CAD系统共投资了20万元。,138,不能简单地把20万元与48万元相比较。因为前者是现在投资的钱,而后者是5年内相继节省的钱。需要把5年内每年预计节省的钱折合成现在的价值才能进行比较。设年利率是5,利用上面计算货币现在价值的公式,可以算出引入CAD系统后,每年预计节省的钱的现在价值,参看下表。,139,货币的时间价值,140,1.4.2 投资回收期,投资回收期就是使累计的经济效益等于最初的投资所需要的时间。投资
47、回收期越短,就能越快获得利润。例如,引入CAD系统两年以后,可以节省17.85万元,比最初的投资还少2.15万元,但第三年可以节省8.29万元,则 2.15/8.29=0.259因此,投资回收期是2.259年。,141,1.4.3 纯收入,工程的纯收入就是在整个生存期之内系统的累计经济效益(折合成现在值)与投资之差。例如,引入CAD系统之后,5 年内工程的纯收入预计是 41.5632021.563(万元)。这相当于比较投资一个待开发的软件项目后预期可取得的效益和把钱存在银行里(或贷款给其它企业)所取得的收益,到底孰优孰劣。,142,1.4.4 投资回收率,用投资回收率来衡量投资效益的大小。已知
48、现在的投资额 P,并且已经估算出将来每年可以获得的经济效益Fk,以及软件的使用寿命 n,k=1,2,.,n。则投资回收率 j,可用如下的方程来计算:,143,这相当于把数额等于投资额的资金存入银行,每年年底从银行取回的钱等于系统每年预期可以获得的效益。在时间等于系统寿命时,正好把在银行中的钱全部取光。此时的年利率是多少呢?就等于投资回收率。,144,1.4.5 成本-效益分析,基于计算机系统开发的成本如下表所列:,145,146,分析员可以估算每一项的成本,然后用开发费用和运行费用来确定投资的偿还、损益两平点和投资回收期。,147,1.5 软件项目组织与计划,软件项目管理人员在开发工作一开始需
49、要进行定量估算。软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。这些估算应当在软件项目开始时的一个有限的时间段内做出,并且随着项目的进展定期进行更新。,148,1.5.1 软件的范围,软件范围包括功能、性能、限制、接口和可靠性。估算开始时应对软件功能进行评价,对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常采用某种程度的功能分解。性能的考虑包括处理和响应时间的需求。约束条件则标识产品成本、外部硬件、可用存储或其它现有系统对软件的限制。,149,功能、性能和约束必须在一起进行评价。当性能限制不同时,为实现同样的功能,开发工作量可能
50、相差一个数量级。还要叙述某些质量因素(例如,给出的算法是否容易理解等)。软件与其它系统元素是相互作用的。要考虑每个接口的性质和复杂性,以确定对开发资源、成本和进度的影响。接口的概念可解释为:,150,运行软件的硬件(如处理机与外设)及间接受软件控制的设备(如机器、显示器);必须与新软件连接的现有的软件(如数据库存取例程、子程序包、操作系统);通过终端或其它输入输出设备使用该软件的人;该软件运行前后的一系列操作过程。对于每一种情况,都必须清楚地了解通过接口的信息转换。,151,1.5.2 软件开发中的资源,软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。软件开发所需的资源有 现成的