当前位置:文档之家› 软件开发成本估算

软件开发成本估算

软件成本估算近年来,由于软件的价格越来越高,在计算机系统中软件所占的比重越来越大,软件价格估计的差错对于一个计算机公司的盈亏起到举足轻重的作用。

因此,软件成本的估计受到普遍的重视。

软件价格的计算不是一门精确的学科,因此我们称为成本估算。

它受到许多因素的影响,包括人的技术和环境的影响。

在开发工作尚未开始之前作软件成本估价就要冒险。

有的公司采用“三段估价”的办法,在开发初期的计划阶段订出初步估算价,在要求分析阶段后给出一个修正估算价格,在设计完成之后给出最终估算价格。

在软件成本估算方面的工作大多数都从分析与软件成本相关的因素入手。

一、影响软件成本的因素1. 软件人员的业务水平软件人员的素质、经验、掌握知识的不同在工作中的表现有很大的差别。

有人作过试验,组织一些不同程度的软件人员开发同一课题,对开发的程序进行统计分析,结果发现,完成得好的和差的,生产率相差五倍,甚至十几倍。

可见软件人员的业务水平对软件产品的生产率影响是很大的。

2. 软件产品按开发的复杂性可分为三类:一类是应用程序,如用高级语言写的科学计算、数据处理、企业管理等用户程序。

二类是实用程序,如用系统程序设计语言或汇编语言写出的编译程序、汇编程序、联接编辑程序、输入加载程序。

三类是系统程序,如用汇编语言或系统程序语言写的操作系统、实时处理控制系统等。

这三类程序,以系统程序的生产率为1,以应用程序开发的复杂为1,可以画出三类程序的生产率和复杂性的比例关系图表。

见表2.3表2.3 生产率和复杂性比例关系表项目系统程序实用程序应用程序生产率 1 5—1025—100复杂性9 31B.Boëhm教授进一步给出了这三种软件产品的程序规模和工作量的相互关系的公式。

程序的规模是以源程序每千行语句(或指令)为单位。

程序的工作量以一人一月为单位,记为PM这三类程序,每个人每月生产程序的千行数为:应用程序是:PM=2.4*(KDSI)**1.05 (其中KDSI为千行源代码数)实用程序是PM=3.0*(KDSI)**1.12系统程序是PM=3.6*(KDSI)**1.20例如,三类程序所选取的开发项目都是60000行的程序,所需投入的人-数三类不同程序大体比例为了:1:1.7:2.8,工作量估计曲线大约如图21所示。

估计工作量100 300 500 700 900 软件产品规模图2.1 工作量估计曲线3.I 开发软件所花费的时间估算:Boehm给出了各类程序所花费的时间如下:应用程序所花的时间TDEV(AP)=2.5*(PM)**0.38实用程序所花的时间TDEV(UP)=2.5*(PM)**0.36系统程序所花的时间TDEV(SP)=2.5*(PM)**0.32上述三类程序都针对同样规模的程序,设以上三类程序所要开发的时间基本相同。

例如60KDSI的程序都需18个月,同时如果把开发时间;拉长或者缩短,则都需要更多的工作量,把这个时间称为最佳开发时间。

在研究了63 个开发项目之后,Boehm得出结论,每个软件项目所用的时间有一个极限值,在此极限值之外,如果想用增加人员和设备的办法来缩短开发时间是不可能达到目的的,这个极限值即为上述开发时间的75%。

我们应该记住Boehm提出的这条程序开发规律,即每个程序项目有一个最佳时间,以这个时间来计划开发过程,就可达到较好的经济效益。

4、软件开发的技术水平:软件开发水平,主要是指所用程序开发技术(包括系统分析和系统设计的方法,结构化设计方法,程序设计语言,遍查和评审、结构程序设计,系统测试和程序库)。

软件开发CASE工具和支撑环境水平的高低也关系重大。

软件开发技术水平高则开发效率高。

例如,使用高级语言要比用汇编语言提高3至10倍,各种高级语言的效率也有很大差别。

例如ADA语言有很强的类型检设施、数据抽象、单独编译、中断处理、并行结构等。

它使软件的生产率和可靠性均有提高。

在开发中使用工具可以提高生产率,工具也有基本工具和先进工具的区别,我们把它对软件开发工具量的关系列表如表7.5 所示。

表2.5 现代软件设计技术和工具的使用对软件开发工作量的影响系统使用情况开发工程系数未采用 1.24充分使用0.82仅用基本工具 1.24使用先进开发工具0.835、软件开发的可靠性要求软件的可靠性是在计划阶段,考虑到软件可能失效的代价而确定下来的,要根据开发和维护的价格,提出不同的可靠性要求,对软件开发的工作量综合地作出估计。

表2.6给出与五类软件可靠性相应的开发工作量系数。

表2.6 可靠性对软件开发量的影响系数可靠性失效的影响开发工作数很低不便使用0.75低其损失易于挽回0. 88一般挽回损失有一定困难1.00高很大的经济损失1.10很高涉及到人的生命安全1.40为了保证软件可靠性所花费的工作量要进行估计和综合平衡。

例如,软件复查的形式和次数,次数越多,成本越高,但可靠性就越高;次数越越少成本越低,而可靠性就越差。

我们必须取得一个最合适的次数,使成本和可靠性都合理。

二、软件成本的估计方法估计一个软件的成本是一个难题,目前的估算方法主要是根据实践经验和有关成本的历史档案来推算出当前软件项目的近似价格和开发成本。

通常有两种估算方法,一种是自顶向下估计,首先对系统提出总要求,限制时间和总金额,然后再考虑各子系统。

要对整个系统进行估价,还要涉及开发的软件系统所需要的资源、人力、配置管理、质量保证、系统安装、用户培训和文档资料方面的成本。

另一种方法是自底向上的估算,首先系统中每一个模块(或每一个阶段)的子系统的成本,然后综合出总成本。

在实际应用的时候,往往把两种估算的结果进行比较。

在比较中消除不合理的因素,求得一个理想的估算结果。

在讨论估算方法的细节之前先讲生产率的含义。

实际上,软件的许多特性都是可以度量的,生产率的最简单的度量是每一个人一个月所生产的有效的源代码行数。

对这个度量的定义是有争议的,因为它不能代表开发每一个阶段的准确的度量,但大多数成本估算都采用这个度量,而这个度量只有在软件开发项目完成之后才能进行准确的估算。

我们应该广义的理解它,可以这样定义:在计划和开发期间为了生产一行有效源代码所花费的人力的工作量。

它不是单指编码的工作量,而是开发期间各阶段工作量的一个平均数。

为了理解生产率的定义,我们举一个例来说明。

考查某一个项目的软件开发工作量如下所示:任务工作量要求分析 1. 5 人月设计 3.0 人月编码 1.0 人月测试 3.5 人月设此项目九个月共开发了约2900行源代码,并且交付了共2400行代码(剩下的500行是用于模拟和测试而不是该软件的工作程序),因而,这个项目的生产率是:生产率=每人一月交付的有效源代码行数=2400代码行/9个人月=267LOC/PM(即代码行/人月)=267LOC/PM(即代码行/人月)下面我们介绍两种成本估算技术。

1。

代码行价格估算技术首先介绍这种方法的计算步骤。

根据软件计划提出的软件范围和主要功能描述,代码行估价技术的第一步拟定了源代码实现的所有功能。

对这些功能进行分解,一直到为实现该功能所要求的代码行数可以作出可靠的估算为止。

设功能总数为n个。

第二步求出代码估算表前五列的值。

对每个分解后的功能,利用历史数据或者直观知觉估算一个最有利的值a,一个最可能的值m和最不利的值b。

我们又设Le为它的期望值,它是用a、m、b带权平均计算的,公式为Lea mb =++46这是一种最可能的估算,这种算法的平均差数为L b adn=-⎛⎝⎫⎭⎪∑612例如,一个计算机辅助设计项目的软件包,在项目的范围一章中,简述了一些计算机图形外围设备(如显示终端、数字仪、绘图仪等)相接口的使用微型机的开发项目,以下这些数据是根据历史写出的,如表2.7 所示。

根据这些值,按照公式分别算出期望值数,放在该表的第四和第五列中,并且统计出估算的总期望值及总差数。

第三步是估算每一代码行的价格,它以美元数/代码行为单位,即表中的第五行数据也就是根据历史资料和市场行情得出的数据,单位可写为$/行。

第四步数估算每一月完成多少行,对每个不同的功能都应该使用不同的值。

也可以使用平均值或修正的平均值。

还可以由历史资料获得。

估算LOC=33360 1100 $656680 144.6第五步求每一个分项目估算的价格。

它由每一代码行价格乘上期望值来得出。

即第4列乘上第6列得第8列。

然后再求每一个项目所花费的月数,使用的方法是用每月的代码行生产量除以期望值来得出,即用第7列的数据去除第4列的数据得出的。

最后由第8列的各分项目的价格相加得出估算的整个项目的价格为$656630美元。

再由各分项目估算的工作量,即第9项的数据求和得出估算的总工作量为114.6个人月。

最后,我们来求一个日程表时间的粗略估计,主要是依据Putnam 估算模型公式∶ L C K td k =1243 其中L 为期望值(代码总行数),K 为估计的人年数(114.6人月»12人年)。

C k 为技术水平常数,它反映了“妨碍程序员前进的生产能力约束”,在较差的软件开发环境下C k =6500,好的开发环境下C k =10000,而佳开发环境下(例如采用自动工具情况下)C k =12500。

这里应该注意,对C k 的选择必须十分慎重,B.W.Boechm 给出了一个考虑生产率变化的度量表格[]6,表格如表7.8,其中生产率范围=(DSI1/MM1)/(DSI2/MM2)例如,当这个开发环境用较好的软件工具(公式中的分子)和使用较差的工具时的生产率(公式中的分母)之比率为1.49倍。

又如一个较好的开发小组,它的生产效率是一个较差的软件开发小组效率的4.18倍等等。

也就是说在实际使用的时候要根据CK 还要乘上生产率变化比率才能代入公式计算。

例如,在1973年IBM 公司的联邦系统局的水平CK=4984,如果工作在联机交互式系统内,需求比较明确,采用结构化编码技术,上机时间不受限制等条件下,则可以把Ck的值增至10040。

这个值适用于十万行以上代码的软件项目。

与软件有关的因素软件生产率范围将CK=10000代入计算机辅助设计项目,按照Putnam 公式,由L=C k K 1/2td 4/3改写为td L C k K =⎛⎝ ⎫⎭⎪⎪⎪⎪⎪3214/使用表中的数据L≈330000、E≈145人月=12人年T=td≈1.3年(开发时间)前面估计式中,估计差数为1100LOC,我们也就可以估计由于偏离期望值的LOC值带来的冒险,从而估计出时间差数,结果如表2.9所示。

这里注意应把最不利的值和最有利的值作为LOC的上下限进行计算。

表2.9 价格和时间的估差LOC 价格($) 开发时间估计最有利的值26000 $512200 1.1年期望值33000 $650100 1.3年最不利的值41000 $807700 1.5年表2.9中假设每个代码行的价格为$19.70,通过最有利和最不利的情况估计,这个项目的完成时间估计在1.1年到1.5年之间。

相关主题