估算软件规模

估算软件规模
估算软件规模

13.1 估算软件规模

13.2 工作量估算

13.3 进度计划

13.4 人员组织

13.5 质量保证

13.6 软件配置管理

13.7 能力成熟度模型

在经历了若干个大型软件工程项目的失败之后,人们才逐渐认识到软件项目管理的重要性和特殊性。事实上,这些项目的失败并不是由于从事软件开发工作的软件工程师无能,正相反,他们之中的绝大多数是当时杰出的技术专家。这些工程项目的失败主要是因为管理不善。

所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估算。为了估算项目的工作量和完成期限,首先需要估算软件的规模。

13.1 估算软件规模

13.1.1 代码行技术

代码行技术是比较简单的定量估算软件规模的方法。这种方法依据以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数。当有以往开发类似产品的历史数据可供参考时,用这种方法估计出的数值还是比较准确的。把实现每个功能所需要的源程序行数累加起来,就可得到实现整个软件所需要的源程序行数。

代码行技术的主要优点是,代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。代码行技术的缺点是:源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理;

用不同语言实现同一个软件所需要的代码行数并不相同;这种方法不适用于非过程语言。为了克服代码行技术的缺点,人们又提出了功能点技术。

13.1.2 功能点技术

功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。这种方法用功能点(FP)为单位度量软件规模。

1. 信息域特性

功能点技术定义了信息域的5个特性,分别是输入项数(Inp)、输出项数(Out)、查询数(Inq)、主文件数(Maf)和外部接口数(Inf)。下面讲述这5个特性的含义。

2. 估算功能点的步骤

举例:用3个步骤,可估算出一个软件的功能点数(即软件规模)。

(1)计算未调整的功能点数UFP

(2) 计算技术复杂性因子TCF

(3)计算功能点数FP

13.2 工作量估算

软件估算模型使用由经验导出的公式来预测软件开发工作量,工作量是软件规模(KLOC或FP)的函数,工作量的单位通常是人月(pm)。支持大多数估算模型的经验数据,都是从有限个项目的样本集中总结出来的,因此,没有一个估算模型可以适用于所有类型的软件和开发环境。

注:简要介绍:静态单变量模型、动态多变量模型、COCOMO2模型

13.3 进度计划

不论从事哪种技术性项目,实际情况都是,在实现一个大目标之前往往必须完成数以百计的小任务(也称为作业)。这些任务中有一些是处于“关键路径”(回顾之前相关知识)之外的,其完成时间如果没有严重拖后,就不会影响整个项目的完成时间;其他任务则处于关键路径之中,如果这些“关键任务”的进度拖后,则整个项目的完成日期就会拖后,管理人员应该高度关注关键任务的进展情况。

一个有效的软件过程应该定义一个适用于当前项目的任务集合。一个任务集合包括一组软件工程工作任务、里程碑和可交付的产品。

为一个项目所定义的任务集合,必须包括为获得高质量的软件产品而应该完成的所有任务,但是同时又不能让项目组承担不必要的工作。

项目管理者的目标是定义全部项目任务,识别出关键任务,跟踪关键任务的进展状况,以保证能及时发现拖延进度的情况。为达到上述目标,管理者必须制定一个足够详细的进度表,以便监督项目进度并控制整个项目。

13.3.1 估算开发时间

估算出完成给定项目所需的总工作量之后,接下来需要回答的问题就是:用多长时间才能完成该项目的开发工作?对于一个估计工作量为20人月的项目,可能想出下列几种进度表:

1个人用20个月完成该项目;

4个人用5个月完成该项目;

20个人用1个月完成该项目。

但是,这些进度表并不现实,实际上软件开发时间与从事开发工作的人数之间并不是简单的反比关系。

通常,成本估算模型也同时提供了估算开发时间T的方程。

重点:研究项目组规模与项目组总生产率的关系。

举例:说明项目组规模与生产率的关系。

13.3.2 Gantt图

首先通过一个非常简单的例子引出这种工具。

例:假设有一座陈旧的矩形木板房需要重新油漆。这项工作必须分3步完成:首先刮掉旧漆,然后刷上新漆,最后清除溅在窗户上的油漆。假设一共分配了15名工人去完成这项工作,然而工具却很有限:只有5把刮旧漆用的刮板,5把刷漆用的刷子,5把清除溅在窗户上的油漆用的小刮刀。怎样安排才能使工作进行得更有效呢?

一种做法是首先刮掉四面墙壁上的旧漆,然后给每面墙壁都刷上新漆,最后清除溅在每个窗户上的油漆。显然这是效率最低的做法,因为总共有15名工人,然而每种工具却只有5件,这样安排工作在任何时候都有10名工人闲着没活干。

这时:同学们可能已经想到,应该采用“流水作业法”,也就是说,首先由5名工人用刮板刮掉第1面墙上的旧漆(这时其余10名工人休息),当第1面墙刮净后,另外5名工人立即用刷子给这面墙刷新漆(与此

同时拿刮板的5名工人转去刮第2面墙上的旧漆),一旦刮旧漆的工人转到第3面墙而且刷新漆的工人转到第2面墙以后,余下的5名工人立即拿起刮刀去清除溅在第1面墙窗户上的油漆,……。这样安排每个工人都有活干,因此能够在较短的时间内完成任务。

假设木板房的第2、4两面墙的长度比第1、3两面墙的长度长一倍,此外,不同工作需要用的时间长短也不同,刷新漆最费时间,其次是刮旧漆,清理(即清除溅在窗户上的油漆)需要的时间最少。

可以使用Gantt图描绘上述流水作业过程:在时间为零时开始刮第1面墙上的旧漆,两小时后刮旧漆的工人转去刮第2面墙,同时另5名工人开始给第1面墙刷新漆,每当给一面墙刷完新漆之后,第3组的5名工人立即清除溅在这面墙窗户上的漆。

13.3.3 工程网络

Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有3个主要缺点:

(1) 不能显式地描绘各项作业彼此间的依赖关系;

(2) 进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;

(3) 计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。

13.3.4 估算工程进度

举例:在前面例子的基础之上,利用工程网络估算工程进度。

补充:计算最迟时刻LET使用下述3条规则:

(1) 考虑离开该事件的所有作业;

(2) 从每个作业的结束事件的最迟时刻中减去该作业的持续时间;

(3) 选取上述差数中的最小值作为该事件的最迟时刻LET。

13.3.5 关键路径

强调:关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则

工程就不能准时结束。

工程项目的管理人员应该密切注视关键作业的进展情况,如果关键事件出现的时间比预计的时间晚,则会使最终完成项目的时间拖后;如果希望缩短工期,只有往关键作业中增加资源才会有效果。

13.3.6 机动时间

不在关键路径上的作业有一定程度的机动余地——实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。一个作业可以有的全部机动时间等于它的结束事件的最迟时刻减去它的开始事件的最早时刻,再减去这个作业的持续时间:

机动时间=(LET)结束-(EET)开始-持续时间

13.4 人员组织

软件项目成功的关键是有高素质的软件开发人员。然而大多数软件的规模都很大,单个软件开发人员无法在给定期限内完成开发工作,因此,必须把多名软件开发人员合理地组织起来,使他们有效地分工协作共同完成开发工作。

为了成功地完成软件开发工作,项目组成员必须以一种有意义且有效的方式彼此交互和通信。如何组织项目组是一个重要的管理问题,管理者应该合理地组织项目组,使项目组有较高生产率,能够按预定的进度计划完成所承担的工作。经验表明,项目组组织得越好,其生产率越高,而且产品质量也越好。

现有的软件项目组的组织方式很多,通常,组织软件开发人员的方法,取决于所承担的项目的特点、以往的组织经验以及管理者的看法和喜好。

下面介绍3种典型的组织方式:民主制程序员组、主程序员组、现代程序员组。比较以上三种组织方式的特点。

13.5 质量保证

13.5.1 软件质量

概软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。

注:上述定义强调了下述的3个要点:

(1)软件需求是度量软件质量的基础,与需求不一致就是质量不高。

(2)指定的开发标准定义了一组指导软件开发的准则,如果没有遵守这些准则,几乎肯定会导致软件质量不高。

(3)通常,有一组没有显式描述的隐含需求(例如,软件应该是容易维护的)。如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。

13.5.2 软件质量保证措施

软件质量保证(software quality assurance,SQA)的措施主要有:基于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。复审主要用来保证在编码之前各阶段产生的文档的质量;基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的最后一道防线;程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致。

重点:审查

审查过程包括下述5个基本步骤:

(1)综述。由负责编写文档的一名成员向审查组综述该文档。在综述会结束时把文档分发给每位与会者。

(2)准备。评审员仔细阅读文档。最好列出在审查中发现的错误的类型,并按发生频率把错误类型分级,以辅助审查工作。这些列表有助于评审员们把注意力集中到最常发生错误的区域。

(3)审查。评审组仔细走查整个文档。和走查一样,这一步的目的也是发现文档中的错误,而不是改正它们。通常每次审查会不超过90分钟。审查组组长应该在一天之内写出一份关于审查的报告。

(4)返工。文档的作者负责解决在审查报告中列出的所有错误及问题。

(5)跟踪。组长必须确保所提出的每个问题都得到了圆满的解决(要么修正了文档,要么澄清了被误认为是错误的条目)。必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。

审查组由4人组成。组长既是审查组的管理人员又是技术负责人。

审查组必须包括负责当前阶段开发工作的项目组代表和负责下一阶段开发工作的项目组代表,此外,还应该包括一名SQA小组的代表。

审查是检测软件错误的一种好方法,利用审查可以在软件过程的早期阶段发现并改正错误,也就是说,能在修正错误的代价变得很昂贵之前就发现并改正错误。因此,审查是一种经济有效的错误检测方法。

4. 程序正确性证明

测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。

正确性证明的基本思想是证明程序能完成预定的功能。因此,应该提供对程序功能的严格数学说明,然后根据程序代码证明程序确实能实现它的功能说明。

介绍证明的基本思想:如果在程序的若干个点上,设计者可以提出关于程序变量及它们的关系的断言,那么在每一点上的断言都应该永远是真的。假设在程序的P1,P2,…,Pn等点上的断言分别是

a(1),a(2),…,a(n),其中a(1)必须是关于程序输入的断言,a(n)必须是关于程序输出的断言。为了证明在点Pi和Pi+1之间的程序语句是正确的,必须证明执行这些语句之后将使断言a(i)变成a(i+1)。如果对程序内所有相邻点都能完成上述证明过程,则证明了输入断言加上程序可以导出输出断言。如果输入断言和输出断言是正确的,而且程序确实是可以终止的(不包含死循环),则上述过程就证明了程序的正确性。

补充:目前已经研究出证明PASCAL和LISP程序正确性的程序系统,正在对这些系统进行评价和改进。现在这些系统还只能对较小的程序进行评价,毫无疑问还需要做许多工作,这样的系统才能实际用于大型程序的正确性证明。

13.6 软件配置管理

软件配置管理是在软件的整个生命期内管理变化的一组活动。具体地说,这组活动用来:①标识变化;②控制变化;③确保适当地实现了变化;④向需要知道这类信息的人报告变化。

软件配置管理不同于软件维护。维护是在软件交付给用户使用后才发生的,而配置管理是在软件项目启动时就开始,并且一直持续到软件退役后才终止的一组跟踪和控制活动。

软件配置管理的目标是,使变化更正确且更容易被适应,在必须变化时减少所需花费的工作量。

13.6.1 软件配置

1. 软件配置项

软件过程的输出信息可以分为3类:①计算机程序(源代码和可执行程序);②描述计算机程序的文档(供技术人员或用户使用);

③数据(程序内包含的或在程序外的)。上述这些项组成了在软件过程中产生的全部信息,我们把它们统称为软件配置,而这些项就是软件配置项。

2. 基线

基线是一个软件配置管理概念,它有助于我们在不严重妨碍合理变化的前提下来控制变化。IEEE把基线定义为:已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。

简而言之,基线就是通过了正式复审的软件配置项。

13.6.2 软件配置管理过程

软件配置管理是软件质量保证的重要一环,它的主要任务是控制变化,同时也负责各个软件配置项和软件各种版本的标识、软件配置审计以及对软件配置发生的任何变化的报告。

具体来说,软件配置管理主要有5项任务:标识、版本控制、变化控制、配置审计和报告。

13.7 能力成熟度模型(重点)

能力成熟度模型(capability maturity model,CMM),是用于评价软件机构的软件过程能力成熟度的模型。最初,建立此模型的目的主要是,为大型软件项目的招投标活动提供一种全面而客观的评审依据,发展到后来,此模型又同时被应用于许多软件机构内部的过程改进活动中。

能力成熟度模型的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生

产率和质量。能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。改进后的软件过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。

CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构把应做的改进工作排出优先次序。

注:成熟度从“1级”到“5级”,反映出一个软件机构为了达到从一个无序的、混乱的软件过程进化到一种有序的、有纪律的且成熟的软件过程的目的,必须经历的过程改进活动的途径。每一个成熟度级别都是该软件机构沿着改进其过程的途径前进途中的一个台阶,后一个成熟度级别是前一个级别的软件过程的进化目标。

CMM的每个成熟度级别中都包含一组过程改进的目标,满足这些目标后一个机构的软件过程就从当前级别进化到下一个成熟

度级别。

下面介绍这5个级别的特点。

1. 初始级

软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的(即没有一个定型的过程模型),项目能否成功完全取决于开发人员的个人能力。

2. 可重复级

软件机构建立了基本的项目管理过程(过程模型),可跟踪成本、进度、功能和质量。已经建立起必要的过程规范,对新项目的策划和管理过程是基于以前类似项目的实践经验,使得有类似应用经验的软件项目能够再次取得成功。

3. 已定义级

软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。所有项目组都使用文档化的、经过批准的过程来开发和维护软件。这一级包含了第2级的全部特征。在第3级成熟度的软件机构中,有一个固定的过程小组从事软件过程工程活动。当需要时,过程小组可以利用过程模型进行过程例化活动,从而获得一个针

对某个特定的软件项目的过程实例,并投入过程运作而开展有效的软件项目工程实践。

4. 已管理级

软件机构对软件过程(过程模型和过程实例)和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的。该软件机构收集了过程度量和产品度量的方法并加以运用,可以定量地了解和控制软件过程和软件产品,并为评定项目的过程质量和产品质量奠定了基础。这一级包含了第3级的全部特征。

处于4级成熟度的软件机构的过程能力可以概括为,软件过程是可度量的,软件过程在可度量的范围内运行。这一级的过程能力允许软件机构在定量的范围内预测过程和产品质量趋势,在发生偏离时可以及时采取措施予以纠正,并且可以预期软件产品是高质量的。

5. 优化级

软件机构集中精力持续不断地改进软件过程。这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。在这样的机构中,可以获得关于软件过程有效性的统计数据,利用这些数据可以对新技术进行成本/效益分析,并可以优化出在软件工程实践中能够采用的最佳新技术。这一级包含了第4级的全部特征。

这一级的软件机构可以通过对过程实例性能的分析和确定产生某一缺陷的原因,来防止再次出现这种类型的缺陷;通过对任何一个过程实例的分析所获得的经验教训都可以成为该软件机构优化其过程模型的有效依据,从而使其他项目的过程实例得到优化。这样的软件机构可以通过从过程实施中获得的定量的反馈信息,在采用新思想和新技术的同时测试它们,以不断地改进和优化软件过程。

处于5级成熟度的软件机构的过程能力可以概括为,软件过程是可优化的。这一级的软件机构能够持续不断地改进其过程能力,既对现行的过程实例不断地改进和优化,又借助于所采用的新技术和新方法来实现未来的过程改进。

补充:一些统计数字表明,提高一个完整的成熟度等级大约需要花18个月到3年的时间,但是从第1级上升到第2级有时要花3年甚至5

年时间。这说明要向一个迄今仍处于混乱的和被动的行动方式的软件机构灌输系统化的方式,将多么困难。

功能点估算案例

功能点估算案例 下面以员工管理系统为例,详细说明如何利用功能点估算法计算业务复杂度。 在员工管理系统中添加一个员工的资料,会使用到员工的一般信息、教育情况、工作经历和家属信息。员工隶属于某个部门,在本系统中会有一个对部门进行维护的功能。员工的工资则由另外一个财务系统提供。因此,其用例图如下所示: 图1 员工管理系统用例图 假设员工基本信息如下所示: ?员工ID(标签) ?员工名称 ?性别 ?生日 ?婚否 ?所属部门ID ?所属部门名称 ?受教育的时间 ?学校名称 ?所学专业

?工作时间 ?工作单位 ?工作部门 ?工作职务 ?家属的姓名 ?之间关系 ?家属年龄 ?工作单位 假设部门信息如下所示: ?部门ID ?部门名称 假设工资表信息如下所示: ?员工ID ?员工姓名 ?金额 ?单位 ILF和EIF的功能点数 本案例识别出来ILF和EIF功能点个数如下表所示。 EI、EQ和EO的功能点数 本范例识别出来EI、EQ和EO功能点个数如下表所示。

本系统的通用系统特性及其影响程度如下表所示。

最终调整后的功能点数量为: (19 + 25 + 9 + 5)* 0.84 = 48.72个 总结 功能点估算法是一个非常有用的对软件规模进行估算的国际通用技术,是项目管理人员必须掌握的工具。为了便于大家对功能点的技术进行理解和记忆,这里对其进行总结:由于计算机软件就是为了实现无纸办公,那么在估算功能点时应该多以用户的纸质表单为依据,每个表单就是一个ILF或EIF,表单上显示的字段都是DET,一个表单上的“核心”内容不管是由几个数据表来分别存放数据的,每个表都是一个RET。 简单来讲,ILF和EIF可以被看作数据库中的数据表,但是主、从表将被视为一个ILF或EIF。那么,ILF和EIF的复杂度就是由数据表中的字段DET和一个ILF或EIF自身所包含的主、从表个数RET来决定。在计算DET时主、外键只能算作一个。 EI就是对应用户增加、修改、删除的操作,EO和EQ都是用于用户查询的操作。EO和EQ 的区别是,EO查询时使用了数学公式或计算方法。EI、EQ和EO的复杂度是由FTR和DET 决定的。FTR的个数由ILF和EIF的个数决定,可以由主表中主、外键的个数来计算。在计算EI的DET时,只有用户在界面上直接输入的信息才算作DET,通过页面自动计算或转换的数据不能算作EI的DET。在EO和EQ计算DET时,报表的标题、页码等信息不能被计算为一个DET。

软件开发成本估算.doc

软件开发成本估算 软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。 软件开发成本估算的经验模型 1.Putnam 模型 1978年Putnam提出的,一种动态多变量模型。 L = Ck * K1/3 * td4/3 其中: L-----------源代码行数(以LOC计) K-----------整个开发过程所花费的工作量(以人年计) td-----------开发持续时间(以年计) Ck----------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环

境而异,见下表 从上述方程加以变换,可以得到估算工作量的公式: K = L3/(Ck3*td4) 还可以估算开发时间: td = [L3/(Ck3*K)]1/4 2.COCOMO模型(constructive cost model) 这是由TRW公司开发,Boehm提出的结构化成本估算模型。是一种精确的、易于使用的成本估算方法。 COCOMO模型中用到以下变量: DSI-------源指令条数。不包括注释。1KDSI = 1000DSI。 MM-------开发工作量(以人月计) 1MM = 19 人日 = 152 人时 =1/12 人年 TDEV-----开发进度。(以月计)

COCOMO模型中,考虑开发环境,软件开发项目的类型可以分为3种: 1.组织型(organic): 相对较小、较简单的软件项目。开发人员对开发目标理解比 较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(<50000行) 2.嵌入型(embedded): 要求在紧密联系的硬件、软件和操作的限制条件下运行, 通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求高。软件规模任意。如大而复杂的事务处理系统,大型/超大型操作系统,航天用控制系统,大型指挥系统等。 3.半独立型(semidetached):介于上述两种软件之间。规模和复杂度都属于中 等或更高。最大可达30万行。 估算公式: 基本COCOMO模型估算工作量和进度的公式如下 工作量:MM = r*(KDSI)c 进度:TDKV = a(MM)b 其中经验常数 r, c, a, b 取决于项目的总体类型。 COCOMO模型按其详细程度可以分为三级:基本COCOMO模型,中间COCOMO模型,详

软件开发费用计算

.1软件项目价格评估书 信息技术飞速发展,计算机软件交易市场日趋成熟规范, 我方参照《软件开发和服务项目价格构成及评估方法》,以及,目前国际上通行的也比较科学的估算方法是采用功能点分析方法,使用此方法能够真实、准确地计算出计算机软件的价值以作为市场交易价格的参照依据. 1.价格评估公式: 项目建设费Q=咨询服务费P+项目建设费M(软件开发费D+实施费S+维护费W)+验收测试费C+工程监理费G 2.项目建设费计算公式: 软件开发费D=工作量(人月)*软件人员月人工费用 =(项目功能点*开发成本系数/7.5/22)*(3.23B) 开发成本系数:3000个功能以下3.5人工时/FP-4.0人工时/FP 3000-8000个功能以下4.0人工时/FP-4.5人工时/FP 实施费S =工作量(人月)*软件人员月人工费用 =(项目功能点*实施成本系数/7.5/22)*(3.23B) 分布式实施项目的系数 实施成本系数=开发成本系数*(0.2+(n-1)*k) 比例因子K:0.08<=k<=0.15具体按项目实施难度而定 维护费W=工作量(人月)*软件人员月人工费用 =(项目功能点*维护成本系数/7.5/22)*(3.23B) 维护成本系数=(开发成本系数+实施成本系数)*p

比例因子P一般为15%-20% 软件人员月人工费用=(工资+奖金+福利+办公成本+资源储备+基础建设+税收利润)*(1+管理费用百分比)=3.23B ?软件开发费D: 软件开发费用指对项目进行详细需求分析,系统设计,编码,测试等方面的工作而需支出的费用,取费主要依据项目规模(功能点),开发成本系数和软件人员月人工费,我方根据(附录四:软件功能说明表),对软件的功能进行分析认为:软件项目难度一般,由于各单位对报表的需求不一,所以编制报表的工作量较多,按照软件规模的大小,我们设定软件开发成本系数为4. 1.软件功能点计算 复杂加权因子表(Complexity weights Factor) 系数范围 采用系数 用户输入数EI 3-6 4 用户输出数EO 4-7 5 用户查询表EQ 3-6 5 内部逻辑文件 数ILF 7-15 12 外部接口文件 数EIF 5-10 6 1.软件功能表 数据表 接口 文件 外部 查询 逻 辑表 报 表数

项目管理-软件规模估算

软件项目的估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的可重复性、估算工具的缺乏以及一些人为错误,都会导致软件项目的估算往往和实际情况相差甚远。据有关机构调查发现,约有60%的软件项目的失败是因为估算偏差引起的,而不是因为技术实力不够。因此,估算偏差已被列为软件项目失败的四大原因之一。 从软件工程学上,我们知道软件需求和估算是软件项目的基础。因为只有准确的了解客户的需求,以之为基础,并使用科学的方法对目标软件系统的规模、工作量和进度做出合理的估算,我们才能在预算内按时按质顺利的完成项目。然而,软件估算作为软件项目的基础领域却常常被人们所忽视。我在近期的一个开发项目中就尝到忽视软件规模估算带来的苦果,结果是项目进行到一半时就发现不但工期严重滞后于计划,而且项目的各种资源也严重的不足和缺乏,项目被迫暂停下马。 常见的项目规模估算失准原因 一直以来,软件项目的规模估算(Size Estimation)是个争论不休的问题。不论是对软件开发团队还是对软件用户,软件规模估算的重要性都是不容置疑的。因为它能极大的影响着甲方对发包软件的成本估算,乙方对自身开发成本的预测,以及乙方对开发过程的量化管理等诸多方面。而且,只有相对合理和相对准确地估算软件规模,才能对项目的进度安排、资源分配等各个环节进行合理的部署。所以,软件项目的规模估算是软件项目中相当重要的一环。但是,以下的原因却使到我在这次项目的实际操作中对项目规模估算失准了: (1)对项目规模估算认识不足 项目规模估算一般分为两种应用场景:一是招投标的时候用来估价、报价;二是用来安排进度计划和指导项目具体工作的分配。因此,如果对规模估算认识不足的话,将可能会在这两种应用场景中估算失准。例如,如果项目规模低估的话就会造成人力估算低估、成本预算低估、日程过短,最终人力资源耗尽,成本超出预算。最后为了完成项目不得不赶工,不但会影响到项目质量,甚至会导致项目失败。而如果规模高估的话,就会因估价过高而降低了招投标时的竞争力,或在进度安排时提高了开发成本和浪费资源。由于对规模估算的认识不足,使到我在这次项目中就尝到一个大苦果,就是低估项目规模导致项目需要多次的追加预算。我不但多次受到公司领导的批评,而且还受到客户的多次投诉。 (2)个人经验估算法带有一定的局限性 一般来说,依靠历史或个人经验的规模估算方法都有一定的局限性。原因是很难在项目分析和计划阶段就对软件的规模进行相对准确的估算。因为估算是依靠评估人员的经验,所以对评估人员的能力要求比较强,并且难以由第三方对评估人员的工作偏差作出修正。在这次项目的初期,我片面的只是根据个人经验进行估算,结果是轻率的估算了项目规模。这是最后导致项目失利的原因之一。另外,不同软件项目使用的技术不一样,这一点也非常影响到软件规模的估算。例如同一个功能,使用JAVA语言和使用Ruby语言所涉及的代码行相差数十行,

最新功能点估算法介绍及应用

功能点估算法介绍及 应用

一、功能点估算法识别项目范围和数据复杂度 功能点估算法是软件项目管理众多知识中比较有技术含量的一个。在软件项目管理中项目计划制定的优劣直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要。如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义。 功能点估算法的特点 项目范围的估算在CMMI的“MA”度量分析管理和“PP”项目计划中均有涉及。对软件项目范围的估算有很多种方法,常见的是LOC代码行和FP功能点法。它们之间的区别和关系如下: ?功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高。假如这个时候使用LOC代码行估算法,则误差会比较大。 ?使用功能点估算法无需懂得软件使用何种开发技术。LOC代码行估算法则与软件开发技术密切相关。 ?功能点估算法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算。 ?通过一些行业标准或企业自身度量的分析,功能点估算法是可以转换为LOC代码行的。

在项目刚开始的时候进行功能点估算可以对项目的范围进行预测。在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同。因此,在项目结束时还需要对项目的范围情况重新进行估算,这个时候估算的结果才能最准确反映项目的规模。 功能点分析的步骤 本文将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。 图1 功能点估算法的步骤 具体步骤包括: 1. 识别功能点的类型。 2. 识别待估算应用程序的边界和范围。 3. 计算数据类型功能点所提供的未调整的功能点数量。

软件开发费用计算方法

软件开发项目计算方法 () 广东软件行业协会 二○○六年八月

目录

1前言 目的 规范软件市场行为,维护价格公平竞争,同时为软件项目建设经费概算提供科学可信的依据。 软件项目建设类别 软件产业发展到现今阶段,技术已经很成熟,产品也已经很丰富,同时由于开发工具和操作系统平台的可选择性,软件项目出现了多样化的趋势。同样是软件项目,完成途径和开发手段不同,其费用也会存在很大差异。不同类别的软件项目,其费用构成和概算方法也不同。根据项目建设要求和方式,一般分为以下几类: 新开发项目:从项目的需求分析开始直至产品完成正式交付使用,其工 作覆盖软件产品的分析、设计、测试、实施、运行维护各 阶段。 二次开发:在现有产品的基础上进行提升和改造。 软件移植:已有产品从一个操作系统平台转移到另一个操作系统平台,或者从原来的运行环境切换到另一个新的运行环境所 需要进行的调整和变动。 产品集成:将多个现有软件产品构件整合在一起,组装成比较复杂的或者更加完整的产品。 适用范围 本指南适用于应用类定制软件的新开发项目,项目应覆盖软件开发全过

程(包括立项可行性分析,需求分析、编码实现、安装实施、运行维护各个阶段工作)。其中人月成本的计算方法也适用于其他类型的项目。 本指南是站在行业的角度,去评估一个应用软件项目的开发费用应该是多少,而不是站在开发商的角度去计算某企业开发软件时的成本支出是多少。虽然这两者之间会有关联。 对于同一软件开发项目,不同的开发商由于各自的技术、能力、管理、积累以及其他方面的因素,其实际成本支出会有较大差异。而这不在本指南考虑之内。 名词解释 应用软件:是指针对特定领域开发,为特定目的服务的一类软件。 软件开发:指从软件项目启动到项目实施前这一时间段的工作。其内容包括详细设计、编码、测试、系统调试等方面的工作。 系统实施:指软件项目开发完毕进行安装到项目正式验收这一时间段的工作。其内容包括系统安装、个性化配置、用户培训等方面的工作, 但不包括各实施点的本地化开发工作。 运行维护:指从软件项目正式验收到合同规定的项目维护期结束的这一时间段的工作。其内容包括在此期间所需要提供的原系统完善性修改 和服务等工作(不包括新增需求和原功能的重大变更)。如:运 行管理、系统平台维护、应用软件维护、数据维护等 验收测试:确定项目是否符合其验收准则,使客户能确定是否接收此项目的正式测试。 功能点(FP):功能点是对软件功能和大小的间接度量单位,一般通过必须和

功能点估算法

功能点估算法识别项目范围和数据复杂度 功能点估算法是软件项目管理众多知识中比较有技术含量的一个。在软件项目管理中项目计划制定的优劣直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要。如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义。 功能点估算法的特点 项目范围的估算在CMMI的“MA”度量分析管理和“PP”项目计划中均有涉及。对软件项目范围的估算有很多种方法,常见的是LOC代码行和FP功能点法。它们之间的区别和关系如下: ?功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高。假如这个时候使用LOC代码行估算法,则误差会比较大。 ?使用功能点估算法无需懂得软件使用何种开发技术。LOC代码行估算法则与软件开发技术密切相关。 ?功能点估算法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算。 ?通过一些行业标准或企业自身度量的分析,功能点估算法是可以转换为LOC代码行的。 在项目刚开始的时候进行功能点估算可以对项目的范围进行预测。在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同。因此,在项目结束时还需要对项目的范围情况重新进行估算,这个时候估算的结果才能最准确反映项目的规模。 功能点分析的步骤 本文将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。

软件开发费用核算管理办法

软件开发费用核算管理办法 一、目的 为加强软件开发项目的管理,加速公司的新产品(新工艺)的研究开发和新技术的推广应用,统筹合理安排软件开发项目费用的开支,特制定本制度。 二、适用范围 本制度适用于北京国都信业科技有限公司软件开发项目(即新产品、新工艺研究开发、新技术推广应用项目)的管理。 三、软件开发费用开支范围 1.软件开发项目所发生的项目调研费、资料费、差旅费、技术协作费,以及专为项目购置的材料和测试仪器、设备等费用。 2.为软件开发项目进行的技术咨询和学术交流等活动所发生的评审费、咨询费、会议费等费用。 3.为搜集行业科技情报及知识产权工作所发生的技术资料费、出版印刷费、专利年费等费用。 4.软件开发人员的工资薪金、办公场所租金、以及用于科技进步奖励所发生的费用。 四、软件开发费用的管理 1.公司财务部是软件开发费用的归口管理部门,具体负责软件开发项目的审定和费用指标方案的制定以及项目结果的评定工作。 2.软件开发费用的拨付按照公司资金拨付的规定执行,各项目组应在软件开发项目立项批准意后方可启用,并由项目承担单位按规定的使用范围严格控制、合理使用。 3.软件开发费用按软件开发项目计划下达到具体项目,实行专款专用,严格管理,不得挪做它用。软件开发项目以合作或委托第三方形式进行的,必须签订项目外包技术合作合同,并经财务部审查后才能生效拨款。 4.软件开发费用在使用中,分管软件开发技术工作的负责人,应按内控制度授权的规定执行,并按照不同的项目进行核销。 5.软件开发费用核销时,须由项目负责人、分管软件开发技术的负责人、总经理审核同意后方可到财务报销付款。 6.采用项目外包或第三方协作完成的有关软件开发项目所取得的软件开发成果,所有权均归属公司,所形成的知识产权纳入公司知识产权管理范围进行管理。

软件项目开发成本估算案例分析

软件成本估算应用案例分析 本文以某公司开发一套人力资源管理系统为例来讲解软件成本估算的方法及过程。 项目需求: 某甲方需要一套人力资源管理系统,该软件企业想要去投标,甲方单位业务部门人员列出了比较原始的业务需求,具体需求描述如下: 1)组织架构管理 对公司的组织架构进行维护和图形化显示,包括部门、岗位等信息。可以对部门进行新建、修改、删除、合并、改变归属关系、设定岗位人数并根据已录入的档案信息自动显示实际岗位人数。支持部门、岗位信息的EXCEL模板导入功能。可以对岗位进行新建、修改、查询、删除等,岗位信息包括岗位说明、相关联工资级别等。 2)招聘管理 对于空缺岗位生成招聘申请,人力资源主管和部门主管审批后自动发布到外部招聘渠道。可以查询招聘信息或删除已过期的招聘信息。对应聘人员信息进行管理,将得到的简历、面试情况录入到系统并进行维护。 3)档案管理 对员工的信息进行管理,包括员工基本信息(如姓名、年龄、性别、岗位、电话、邮件等)、家庭档案信息、培训记录、工作记录。还包括员工照片、社保号码等。授权用户可以对员工档案进行查询或进行修改(如调动、离职、绩效考

核信息填写等) 4)人力地图 将公司的全部或某部门组织架构图显示出来,并可查看员工的基本信息。本人可以维护部分个人信息,如手机号码、个人主页地址、个人说明等。 5)培训管理 制订公司年度培训计划进行管理,并对每次公司级培训建立培训记录并对培训效果进行分析。提供年度培训计划的建立、修改、审核、审批等功能。对每次培训进行管理,可自动发送培训通知,培训后填写培训满意度、培训总结。可以对某时间段内的培训或选定培训进行培训效果的比较和分析 6)人力资源分析 包括基于人数的分析和基于部门的分析。基于人数的分析包括统计各岗位、各部门、各学历、各年龄段的人数、各岗位/部门实际人数和空缺人数等。基于部门的分析包括分析各部门到岗率、入/离职情况、岗位构成、学历构成、年龄构成等。 7)报表中心 授权用户可查看或打印员工基本信息、培训信息、工作情况、考核情况、并提供人力资源常用模板(如离职申请、培训申请等)的下载和打印。 软件项目成本估算: (1)测算规模 基于上述的业务需求,用预估功能点方法进行规模测算。测算出来的调整后功能点规模是260。具体如表D-6所示:

软件项目规模估计方法介绍

软件项目的规模估计历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估计往往和实际情况相差甚远。因此,估计错误已被列入软件项目失败的四大原因之一。 软件工程师经常会被问到,编一个什么什么样的软件需要多长时间、多少钱。面对这个问题,有不少人很犯难,因为,第一用户的需求太不具体,第二,自己缺乏一个科学的估计方法。下面是几种软件项目规模的估计方法。 概念介绍 先介绍一个衡量软件项目规模最常用的概念--LOC(Line of Code),LOC指所有的可执行的源代码行数,包括可交付的工作控制语言(JCL:Job Control Language)语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行(1LOC)的价值和人月均代码行数可以体现一个软件生产组织的生产能力。组织可以根据对历史项目的审计来核算组织的单行代码价值。 例如,某软件公司统计发现该公司每一万行C语言源代码形成的源文件(.c和.h文件)约为250K。某项目的源文件大小为3.75M,则可估计该项目源代码大约为15万行,该项目累计投入工作量为240人月,每人月费用为10000元(包括人均工资、福利、办公费用公滩等),则该项目中1LOC的价值为: (240×10000)/150000=16元/LOC 改项目的人月均代码行数为: 150000/240=625LOC/人月 方法一、Delphi 法 Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来,新技术与特定程序之间的差别,但专家"专"的程度及对项目的理解程度是工作中的难点,尽管Delphi技术可以减轻这种偏差,专家评估技术在评定一个新软件实际成本时通常用得不多,但是,这种方式对决定其它模型的输入时特别有用。Delphi法鼓励参加者就问题相互讨论。这个技术,要求有多种软件相关经验人的参与,互相说服对方。 Delphi法的步骤是: 1、协调人向各专家提供项目规格和估计表格; 2、协调人召集小组会各专家讨论与规模相关的因素; 3、各专家匿名填写迭代表格; 4、协调人整理出一个估计总结,以迭代表的形式返回专家; 5、协调人召集小组会,讨论较大的估计差异; 6、专家复查估计总结并在迭代表上提交另一个匿名估计; 7、重复4-6,直到达到一个最低和最高估计的一致。 方法二、类比法 类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目,通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。 其基本步骤是: 1、整理出项目功能列表和实现每个功能的代码行; 2、标识出每个功能列表与历史项目的相同点和不同点,特别要注意历史项目做得不够的地方; 3、通过步骤1和2得出各个功能的估计值;

在软件项目成本计算中引入估算

在软件项目成本计算中引入估算、预算和决算体系 2008-5-27 15:50 摘要:软件项目的成本估算和成本控制一直是软件项目管理研究的一大难题,本文提出 在软件项目成本估算中采用功能点方法,在软件项目成本预算中实施工作结构分解和COCOMO方法结合的方法,在软件项目结束后引入决算和审计机制,为软件企业建立起一个基于估算、预算和决算的知识库系统,来达到提高成本管理能力的目的。 关键字:软件成本估算,功能点,WBS, COCOMO,估算,预算,决算 引言 软件成本超支是软件项目中经常遇到的问题。很多软件项目经理都曾经历过这样的情况, 由于开发成本的超支,软件项目做完之后,不仅不能得到上级领导的表扬,甚至连项目奖金 都拿不到,而这一切都来源于当初对项目成本估算的不准。 随着软件开发技术的发展,软件成本在计算机系统总成本中影响越来越大,它直接影响到投资者的决策和软件项目的开发。没有合理而准确的软件成本估算,就无法很好地进行软件项目的管理。 据国际数据公司的研究报告显示,全球500强企业中,信息技术投资超过生产设备投 资的企业达65%.然而软件项目的开发情况却不容乐观,1995年,美国大概只有10%的软件 项目可以按时交付,而且费用也不超支,约30%的项目没有完成就被取消了。 项目超支的原因是多方面的,其中一个主要原因是由于软件开发过程中,成本控制工作 没有做好,没有对资源配置进行优化,因此造成了成本浪费。而更多的原因则来自对软件项 目成本的错误估算,用一个不可能的成本来实现一个比预算昂对得多的软件,不管如何控制 都将无法避免成本超支的噩运。 常用软件成本估算模型介绍在软件成本估算领域,有很多的估算模型,这些模型经过了 几十年的发展,其中部分模型成为了目前软件成本估算的常用模型,如功能点、DEL PH、SDC 和COCO MO等。其中以功能点和COCOMO模型应用最广。 功能点估算模型 功能点方法的本质是站在客户的角度度量系统,它认为系统的功能可以分为以下5类: 内部逻辑文件、外部接口文件、外部输入、外部输出和外部查询。根据计算规则首先确定每 个功能的分类及其功能复杂度,从而可以得到每个功能的权值,全部功能的权值相加就得到 “未调整的功能点数”。 功能点方法可以在早期度量软件的规模,软件的规模与它的工作量、进度和成本关系紧 密,早期准确的软件规模度量有助于确定软件价格和提高策划过程中估算的能力。

功能点估算法

功能点估算法是软件项目管理众多知识中比较有技术含量的一个。在软件项目管理中项目计划制定的优劣直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要,如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义。 FP功能点估算法的特点 项目范围的估算在CMMI的“MA”度量分析管理和“PP”项目计划中均有涉及,对软件项目范围的估算有很多种方法,常见的就是LOC代码行和FP功能点法,它们之间的区别和关系如下: 1、 FP功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高,假如这个时候使用LOC代码行估算法,则误差会比较大。 2、使用FP功能点估算法无需懂得软件使用何种开发技术。LOC代码行估算法与软件开发技术密切相关。 3、 FP功能点法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算的。 4、通过一些行业标准或企业自身度量的分析,FP功能点估算法是可以转换为LOC代码行的。 在项目刚开始的时候进行功能点估算可以对项目的范围进行预测,在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同,因此在项目结束时还需要对项目的范围情况进行估算,这个时候估算的结果才能最准确反映项目的规模。 功能点分析的步骤 在本文中将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础与大家进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。 功能点估算的步骤 1、识别功能点的类型。 2、识别待估算应用程序的边界和范围。 3、计算数据类型功能点所提供的未调整的功能点数量。

功能点估算法介绍及应用

一、功能点估算法识别项目范围和数据复杂度 功能点估算法是软件项目管理众多知识中比较有技术含量的一个。在软件项目管理中项目计划制定的优劣直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要。如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义。 功能点估算法的特点 项目范围的估算在CMMI的“MA”度量分析管理和“PP”项目计划中均有涉及。对软件项目范围的估算有很多种方法,常见的是LOC代码行和FP功能点法。它们之间的区别和关系如下: ?功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高。假如这个时候使用LOC代码行估算法,则误差会 比较大。 ?使用功能点估算法无需懂得软件使用何种开发技术。LOC代码行估算法则与软件开发技术密切相关。 ?功能点估算法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算。 ?通过一些行业标准或企业自身度量的分析,功能点估算法是可以转换为LOC代码行的。 在项目刚开始的时候进行功能点估算可以对项目的范围进行预测。在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同。因此,在项目结束时还需要对项目的范围情况重新进行估算,这个时候估算的结果才能最准确反映项目的规模。 功能点分析的步骤 本文将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。

估算软件规模

13.1 估算软件规模 13.2 工作量估算 13.3 进度计划 13.4 人员组织 13.5 质量保证 13.6 软件配置管理 13.7 能力成熟度模型 在经历了若干个大型软件工程项目的失败之后,人们才逐渐认识到软件项目管理的重要性和特殊性。事实上,这些项目的失败并不是由于从事软件开发工作的软件工程师无能,正相反,他们之中的绝大多数是当时杰出的技术专家。这些工程项目的失败主要是因为管理不善。 所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。 软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估算。为了估算项目的工作量和完成期限,首先需要估算软件的规模。 13.1 估算软件规模 13.1.1 代码行技术 代码行技术是比较简单的定量估算软件规模的方法。这种方法依据以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数。当有以往开发类似产品的历史数据可供参考时,用这种方法估计出的数值还是比较准确的。把实现每个功能所需要的源程序行数累加起来,就可得到实现整个软件所需要的源程序行数。 代码行技术的主要优点是,代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。代码行技术的缺点是:源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理;

用不同语言实现同一个软件所需要的代码行数并不相同;这种方法不适用于非过程语言。为了克服代码行技术的缺点,人们又提出了功能点技术。 13.1.2 功能点技术 功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。这种方法用功能点(FP)为单位度量软件规模。 1. 信息域特性 功能点技术定义了信息域的5个特性,分别是输入项数(Inp)、输出项数(Out)、查询数(Inq)、主文件数(Maf)和外部接口数(Inf)。下面讲述这5个特性的含义。 2. 估算功能点的步骤 举例:用3个步骤,可估算出一个软件的功能点数(即软件规模)。 (1)计算未调整的功能点数UFP (2) 计算技术复杂性因子TCF (3)计算功能点数FP 13.2 工作量估算 软件估算模型使用由经验导出的公式来预测软件开发工作量,工作量是软件规模(KLOC或FP)的函数,工作量的单位通常是人月(pm)。支持大多数估算模型的经验数据,都是从有限个项目的样本集中总结出来的,因此,没有一个估算模型可以适用于所有类型的软件和开发环境。 注:简要介绍:静态单变量模型、动态多变量模型、COCOMO2模型 13.3 进度计划 不论从事哪种技术性项目,实际情况都是,在实现一个大目标之前往往必须完成数以百计的小任务(也称为作业)。这些任务中有一些是处于“关键路径”(回顾之前相关知识)之外的,其完成时间如果没有严重拖后,就不会影响整个项目的完成时间;其他任务则处于关键路径之中,如果这些“关键任务”的进度拖后,则整个项目的完成日期就会拖后,管理人员应该高度关注关键任务的进展情况。 一个有效的软件过程应该定义一个适用于当前项目的任务集合。一个任务集合包括一组软件工程工作任务、里程碑和可交付的产品。

软件项目管理规模估计

软件项目规模估计方法介绍 软件项目的规模估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估算往往和实际情况相差甚远。因此,估算错误已被列入软件项目失败的四大原因之一。 软件工程师经常会被问到,编一个什么什么样的软件需要多长时间、多少钱。面对这个问题,有不少人很犯难,因为,第一用户的需求太不具体,第二,自己缺乏一个科学的估计方法。这里向大家介绍几种软件项目规模的估计方法。 概念介绍 先介绍一个衡量软件项目规模最常用的概念--LOC(Line ofCode),LOC指所有的可执行的源代码行数,包括可交付的工作控制语言(JCL:Job ControlLanguage)语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行(1LOC)的价值和人月均代码行数可以体现一个软件生产组织的生产能力。组织可以根据对历史项目的审计来核算组织的单行代码价值。 例如,某软件公司统计发现该公司每一万行C语言源代码形成的源文件(.c和.h 文件)约为250K。某项目的源文件大小为3.75M,则可估计该项目源代码大约为15万行,该项目累计投入工作量为240人月,每人月费用为10000元(包括人均工资、福利、办公费用公滩等),则该项目中1LOC的价值为: (240×10000)/150000=16元/LOC 改项目的人月均代码行数为: 150000/240=625LOC/人月 方法一、Delphi 法 Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来,新技术与特定程序之间的差别,但专家"专"的程度及对项目的理解程度是工作中的难点,尽管Delphi技术可以减轻这种偏差,专家评估技术在评定一个新软件实际成本时通常用得不多,但是,这种方式对决定其它模型的输入时特别有用。Delphi法鼓励参加者就问题相互讨论。这个技术,要求有多种软件相关经验人的参与,互相说服对方。 Delphi法的步骤是: 1、协调人向各专家提供项目规格和估计表格; 2、协调人召集小组会各专家讨论与规模相关的因素; 3、各专家匿名填写迭代表格; 4、协调人整理出一个估计总结,以迭代表的形式返回专家; 5、协调人召集小组会,讨论较大的估计差异; 6、专家复查估计总结并在迭代表上提交另一个匿名估计;

软件开发费用计算方法

实用标准文案 软件开发项目计算方法 (V2.0) 广东软件行业协会 二○○六年八月

目录 1前言 (3) 1.1 目的 (3) 1.2 软件项目建设类别 (3) 1.3 适用范围 (3) 1.4 名词解释 (4) 2软件项目费用概算 (5) 2.1项目阶段划分 (5) 2.2 各阶段费用构成 (6) 2.3 项目费用概算 (7) 3各项费用取费依据 (8) 3.1 咨询费 (8) 3.2 建设费 (9) 3.3 服务费 (9) 3.4 附加费 (14) 3.5需求变更估算 (15) 4工作量估算方法 (16) 4.1 开发阶段工作量估算 (16) 4.2 实施阶段工作量估算 (19) 4.3 维护阶段工作量估算 (20) 5人月成本估算方法 (21) 6其他事项 (23)

6.1 最终合同金额确定 (23) 6.2 付款方式 (23) 6.3 评估机构 (24) 软件项目规模功能点估算方法 (25) 1 功能点估算流程 (25) 2 功能点分析的要素 (26) 3 功能点计算(初步值UFC) (27) 4 确定技术复杂度因子TCF (29) 5 计算调节后的功能点数FP (30) 参考文献 (31)

1前言 1.1 目的 规范软件市场行为,维护价格公平竞争,同时为软件项目建设经费概算提供科学可信的依据。 1.2 软件项目建设类别 软件产业发展到现今阶段,技术已经很成熟,产品也已经很丰富,同时由于开发工具和操作系统平台的可选择性,软件项目出现了多样化的趋势。同样是软件项目,完成途径和开发手段不同,其费用也会存在很大差异。不同类别的软件项目,其费用构成和概算方法也不同。根据项目建设要求和方式,一般分为以下几类: 新开发项目:从项目的需求分析开始直至产品完成正式交付使用,其工 作覆盖软件产品的分析、设计、测试、实施、运行维护各 阶段。 二次开发:在现有产品的基础上进行提升和改造。 软件移植:已有产品从一个操作系统平台转移到另一个操作系统平台,或者从原来的运行环境切换到另一个新的运行环境所 需要进行的调整和变动。 产品集成:将多个现有软件产品构件整合在一起,组装成比较复杂的或者更加完整的产品。 1.3 适用范围 本指南适用于应用类定制软件的新开发项目,项目应覆盖软件开发全过

几种常见的软件规模度量方法的对比

几种常见的软件规模度量方法的对比 在软件研发成本度量(包括估算与测量)方面,对于软件规模本身的评价是首要任务。根据软件行业的实践,目前评价软件规模的方法主要分为两种:基于业务视角和基于开发视角。基于业务视角的方法是从用户角度出发,与软件开发技术无关,如:功能点、故事点、用例点、对象点等方法;基于开发视角的方法是从开发者角度出发,如:基于软件源代码行、数据库表、函数数量等方法。 基于开发视角的软件规模评价的方法,优点是操作简单、实施容易,但不容易在项目干系人之间达成一致,往往会引起较多的分歧。基于开发视角的评价方法虽然在实际工作中也有着普遍的应用,但更多地局限于软件开发团队内部。如果要在业务部门与开发部门、甲方与乙方等外部组织约定软件开发的工期或费用等关键项目目标,则需要从业务视角出发,对软件项目规模进行标准、一致的评价与估算。而且,在系统初始阶段,用户功能需求是唯一真正可以得到的信息。任何程序大小或代码行数的猜想实际上都是从系统要提供的功能性推演出来。 下表展示了几种常用的软件规模度量方法的对比,可以看出,功能点方法最优。 软件规模度量方法对比 分类比对项目功能点对象点用例点故事点代码行 方法有效性业务价值分析★★★★★★★★★★产能分析与评 估 ★★★★★★★★★★★★项目早期估算★★★★★★★★★★★项目中后期估 算 ★★★★★★★★★★★★项目范围管理★★★★★★★★★★★★★★团队绩效评价★★★★★★★★★★行业基准比对★★★★★★★★ 应用难度方法学习难度★★★★★★★★★★★★★方法导入成本★★★★★★★★方法应用一致 性 ★★★★★★★★★ 从美国人Allan J.Albrecht在20世纪70年代末提出功能点方法以来,功能点在软件行业的应用与实践已超过30年,在Albrecht的功能点模型基础之上,经过进

软件项目开发成本估算

硕士研究生读书报告 题目浅谈软件项目开发成本估算 作者姓名梁前能 作者学号Z114325142 指导教师季江民 学科专业软件项目管理 所在学院软件学院 提交日期二○一二年三月

Discussing of the cost estimation in the process of software project management A Dissertation Submitted to Zhejiang University in partial fulfillment of the requirements for the degree of Master of Engineering Major Subject: Software Project Management Advisor: Ji Jiangmin By Liang Qianneng Zhejiang University, P.R. China 2012

摘要 本文重点探讨了软件项目管理及开发过程中一个重要的问题——软件项目开发成本估算方法。软件项目管理人员及用户不能成本的重要性,因为管理好成本才能避免造成人力、物力和资源的浪费,而软件项目开发成本的首要任务是先进行成本估算。所以在软件开发前期对软件开发成本的估算就显得十分重要,本文以软件项目开发工程的角度介绍成本估算在软件项目管理过程中的如何进行成本估算及其估算过程,估算方法,估算等级等。 关键词:软件项目管理,成本估算。 Abstract The paper discussed the important problem in software management and development, cost estimation in the process of software project management. Administrator of software project management and users can’t ignore the communication. We must manage the cost of software project to avoid of costing a lot of time and money. So, the cost estimation in the process of software project management is important in the early time of the development. This paper mainly discussed the processes and methods of cost estimation in the process of software project management. Keywords:Management of software project, Cost estimation 1. 引言 为了使开发项目能够在规定的时间内完成,而且不超过预算,成本估算的管理控制是关键。软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。 同样,软件项目开发的成本估算的过程也不是一蹴而就的,这也许与传统的工业产品生产过程成本估算过程相似,但因为软件项目的开发成本主要在人力成本上,对人力成本的估算也是软件项目开发成本估算的主要内容,而人力成本主要以工作量或以时计费,所以先要对软件规模,工作量,开发进度等的估计,这些过程可以利用历史项目数据作为参考,完成上述步骤后再结合现有成本数据就可以进行成本估算,成本估算不仅仅是在项目开发工作之前进行,为了保证成本估算结果的准确性,在软件项目过程中也要进行成本估算过程,可以迭代进行估算过程。如下图:

相关文档
最新文档