如何估算软件项目开发时间

合集下载

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

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

软件项目的规模估计历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估计往往和实际情况相差甚远。

因此,估计错误已被列入软件项目失败的四大原因之一。

软件工程师经常会被问到,编一个什么什么样的软件需要多长时间、多少钱。

面对这个问题,有不少人很犯难,因为,第一用户的需求太不具体,第二,自己缺乏一个科学的估计方法。

下面是几种软件项目规模的估计方法。

概念介绍先介绍一个衡量软件项目规模最常用的概念--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法鼓励参加者就问题相互讨论。

这个技术,要求有多种软件相关经验人的参与,互相说服对方。

单元估算法_单位指标估算法_概述及解释说明

单元估算法_单位指标估算法_概述及解释说明

单元估算法单位指标估算法概述及解释说明1. 引言1.1 概述在项目管理和软件开发中,估算算法是一项关键任务。

准确的估算能够帮助团队合理规划工作量、预测时间和资源投入,并对项目进度、成本控制起到重要作用。

而单元估算法和单位指标估算法是两种常见的估算方法。

1.2 文章结构本文将详细介绍单元估算法和单位指标估算法的概念、步骤以及应用场景。

同时还将比较这两种算法的关系,分析它们各自的优缺点,并通过实际示例应用案例来展示它们的具体应用效果。

1.3 目的本文的主要目的是帮助读者全面了解单元估算法和单位指标估算法,掌握它们的基本原理和具体操作步骤。

读者可以根据自身实际情况选择适用于自己项目的估算方法,并有效地进行工作规划与资源管理。

注意:您提供的JSON格式文章目录已被转化为普通文本格式作答。

2. 单元估算法:2.1 定义解释:单元估算法是一种用于估计项目或任务的工作量、时间和资源需求的方法。

它通过将项目划分为多个独立的单元或模块,然后对每个单元进行估算,并将这些估算结果相加得出整体的估算值。

单元可以是功能模块、子系统、任务阶段或任何可划分并具有独立性的组件。

单元估算法基于以下假设:每个单元的工作量和复杂性相对较小且容易被估计,通过对所有单元进行逐一估算并累加,可以得到总体上较为准确的项目工作量和资源需求。

2.2 算法步骤:单元估算法通常包含以下步骤:1. 划分项目:将项目拆分成多个独立的单元或模块。

2. 定义指标:确定用于评估每个单元工作量和复杂性的度量指标,例如代码行数、功能点数量等。

3. 评估每个单元:对每个单元进行具体的工作量和复杂性评估,根据定义的指标进行数据收集和分析。

4. 计算总体估计:将各个单元的评估结果按照特定的计算公式进行累加,得出整体的工作量和资源需求估计值。

2.3 应用场景:单元估算法适用于各种项目规模和类型,尤其适用于较复杂或大型的项目。

它可以帮助项目经理和团队更好地理解项目的组成部分和细节,并进行准确的工作量和时间管理。

软工概论第20章软件项目估算

软工概论第20章软件项目估算
30
购买决策
一个常数或者
基于项目复杂
度的一个变量
25
构造性成本模型(COCOMO)II
COCOMO II 实际上是一种层次结构的估算模型, 主要应用于以下领域:
• 应用组装模型。 在软件工程的前期阶段使用,这时,用 户界面的原型开发、对软件和系统交互的考虑、性能的 评估以及技术成熟度的评价是最重要的。
• 早期设计阶段模型。 在需求已经稳定并且基本的软件体 系结构已经建立时使用。
9
项目估算
必须理解项目范围 细化 (分解) 是必需的 历史度量是非常有用的 至少使用两种不同的技术
不确定性是一直存在于过程内部 的
10
估算技术
借鉴已完成的类似项目 常规的估算技术
任务分解和工作量估算 规模 (例如,功能点) 估算
经验模型 自动估算工具
11
估算的准确性
取决于 ……
20
基于工具的估算
project characteristics
项目特色
calibration factors
校准因素
LOC/FP data
LOC/FP估算数据
21
基于用例的估算
用例
场景 页
场景
页 LOC LOC估算
use csacseenspaarigo ŹsescsenpaarigoLe sO sLCOeC stima
策划者正确地估算待开发产品规模的程度 把规模估算转换成人员工作量、时间及成本的能力(受
可靠软件度量的可用性的影响,这些度量数据来自以 往的项目) 项目计划反映软件团队能力的程度 产品需求的稳定性和支持软件工程工作的环境
12
功能分解
范围的 Statement

常用的软件项目的估算方法

常用的软件项目的估算方法

常用的软件项目的估算方法
1、规模估算法:根据软件项目的规模,通过计算机程序语句、数据项和控制结构的数量来估算开发项目所需的时间和费用。

2、功能点估算法:根据软件项目的功能点,把软件项目的功能划分为多个子功能,每个子功能分别估算开发时间和费用,最后累加得出总的估算结果。

3、经验估算法:根据以往项目的经验,把软件项目分解为多个子项目,每个子项目分别估算开发时间和费用,最后累加得出总的估算结果。

4、三点估算法:根据软件项目的规模、复杂度和可用资源,分别计算最小、最可能和最大的开发时间和费用,最后取三者的平均值作为估算结果。

实用的软件系统开发成本估算法-软件成本管理(含例子)

实用的软件系统开发成本估算法-软件成本管理(含例子)

软件系统开发成本估算法功能点估算含例子目录一、功能点估算法概念 (1)二、功能点估算法的特点 (1)三、功能点分析的步骤(含例子) (1)3.1 识别项目的类型 (2)3.2 识别项目的范围和边界 (2)3.3 按不同功能点计算 (3)3.3.1功能点估算分类 (3)3.3.2识别功能点的重要原则 (3)3.3.3内部逻辑文件与外部接口文件 (4)3.3.4事务类型功能点的计算规则 (8)3.3.5计算调整因子 (13)3.3.6计算调整后的功能点个数 (24)3.4 总结 (31)一、功能点估算法概念功能点估算法是软件项目管理众多方法中比较有技术含量的一个,也是最实用的一个.在软件项目管理中项目计划制定的优劣、合理直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要。

如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义.二、功能点估算法的特点项目范围的估算在CMMI的“MA”度量分析管理和“PP"项目计划中均有涉及。

对软件项目范围的估算有很多种方法,常见的是LOC代码行和FP功能点法.它们之间的区别和关系如下:•功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高.假如这个时候使用LOC代码行估算法,则误差会比较大。

•使用功能点估算法无需懂得软件使用何种开发技术。

LOC代码行估算法则与软件开发技术密切相关.•功能点估算法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算.•通过一些行业标准或企业自身度量的分析,功能点估算法是可以转换为LOC代码行的.在项目刚开始的时候进行功能点估算可以对项目的范围进行预测。

在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同.因此,在项目结束时还需要对项目的范围情况重新进行估算,这个时候估算的结果才能最准确反映项目的规模。

软件开发成本估算

软件开发成本估算

软件开发成本估算软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。

不同与传统的工业产品,软件的成木不包括原材料和能源的消耗,主要是人的劳动的消耗。

另外,软件也没有一个明显的制造过程,它的开发成木是以一次性开发过程所花费的代价来计算的。

因此,软件开发成木的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。

软件开发成本估算的经验模型1. Putnam 模型1978年Putnam提岀的,一种动态多变量模型。

L = Ck * K13 * td13其中:L --------------------- 源代码行数(以LOC计)K ------------------- 整个开发过程所花费的工作量(以人年计)td ------------------ 开发持续时间(以年计)Ck ----------------- 技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表软件开发成本估算软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。

不同与传统的工业产品,软件的成木不包括原材料和能源的消耗,主要是人的劳动的消耗。

另外,软件也没有一个明显的制造过程,它的开发成木是以一次性开发过程所花费的代价来计算的。

因此,软件开发成木的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。

软件开发成本估算的经验模型1. Putnam 模型1978年Putnam提出的,一种动态多变量模型。

L = Ck * K13 * td ,/3其中:L --------------------- 源代码行数(以LOC计)K ------------------- 整个开发过程所花费的工作量(以人年计)td ------------------ 开发持续时间(以年计)Ck ----------------- 技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表从上述方程加以变换,可以得到估算工作量的公式:K二L7(Ck3*td4)还可以估算开发时间:td二[L3/(Ck3*K) ]1/41. COCOMO 模型(constructive cost model)这是由TRW公司开发,Boehm提出的结构化成本估算模型。

需求开发时长评估指标

需求开发时长评估指标

需求开发时长评估指标
1. 需求的清晰度和完整度,需求描述的清晰度和完整度直接影响开发时长。

如果需求文档详尽清晰,开发人员就能更快地理解需求并开始开发工作。

相反,如果需求不清晰或者存在矛盾,开发时间就会延长。

2. 技术复杂度,需求本身涉及的技术难度和复杂度是影响开发时长的重要因素。

如果需求涉及新技术或者复杂的算法,开发时间就会相应增加。

3. 开发人员的经验和技能,团队成员的技术水平和经验对开发时长也有很大的影响。

经验丰富的开发人员能够更快地解决问题,提高开发效率。

4. 沟通和协作效率,团队成员之间的沟通和协作效率也会影响开发时长。

良好的沟通和协作能够减少误解和重复工作,提高开发效率。

5. 项目管理和进度控制,有效的项目管理和进度控制可以帮助团队更好地安排工作和资源,从而提高开发效率。

综上所述,需求开发时长评估指标涉及多个方面,包括需求的清晰度和完整度、技术复杂度、开发人员的经验和技能、沟通和协作效率,以及项目管理和进度控制等因素。

综合考虑这些因素,可以更准确地评估需求开发的时长。

软件开发成本估算

软件开发成本估算

软件开发成本估算软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。

不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。

另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。

因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。

软件开发成本估算的经验模型1.Putnam 模型1978年Putnam提出的,一种动态多变量模型。

L = Ck * K1/3 * td4/3其中: L-----------源代码行数(以LOC计)K-----------整个开发过程所花费的工作量(以人年计)td-----------开发持续时间(以年计)Ck----------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表从上述方程加以变换,可以得到估算工作量的公式: K = L3/(Ck3*td4)还可以估算开发时间: td = [L3/(Ck3*K)]1/42.COCOMO模型(constructive cost model)这是由TRW公司开发,Boehm提出的结构化成本估算模型。

是一种精确的、易于使用的成本估算方法。

COCOMO模型中用到以下变量:DSI-------源指令条数。

不包括注释。

1KDSI = 1000DSI。

MM-------开发工作量(以人月计) 1MM = 19 人日 = 152 人时 =1/12 人年TDEV-----开发进度。

(以月计)COCOMO模型中,考虑开发环境,软件开发项目的类型可以分为3种:1.组织型(organic): 相对较小、较简单的软件项目。

开发人员对开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(<50000行)2.嵌入型(embedded): 要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用科学的方法估算项目实施所需时间
引言
前两天一个朋友给我打电话,问我如何估计项目开发时间。

对此我很诧异,问他以前他们是怎么估计的,他说以前基本都是大家开个会,大约都说说自己意见,最后负责人一拍脑袋,给出一个时间。

不过这次遇到一个非常认真的客户,要求不但要估计出项目开发时间,还要明确说明具体的依据和估算方法,这下我这朋友有点犯难,才询问我。

后来我翻阅了一些数理统计和项目估算方面的资料,告诉了他利用一元线性回归分析估计软件项目开发时间的方法。

想到这种估算需要在一些开发团队很常见,所以在这里整理成文。

问题的定义及数学模型
这里我们仅考虑比较简单的一元回归问题,即通过单一的Proxy预测项目开发时间。

这里先说一下什么叫Proxy。

Proxy叫做代理变量,简单来说就是估计项目开发时间的数理依据。

说白了,就是我们预测开发时间,总要有个根据,例如需求中用例个数、概要设计中的实体个数、数据库中的表的数量等等。

设Proxy为x,项目开发时间为y,那么可以得到y=f(x),学过初等数学的都可以看懂,就是说开发时间是Proxy的一个函数,如果我们既知道了新项目的x,又知道函数f,那么y就出来了。

可惜天下哪有这么好的事,我们现在既不知道f,又不知道x,别说x的值了,甚至我们都不知道该用哪个Proxy做x。

不过也不必悲观,经过上面分析,我们至少明确了我们奋斗的方向:
1、找出候选的Proxy。

2、选择最合适的Proxy作为x。

3、得到x的值。

4、确定函数f。

5、得出y。

下面我们一步一步解决各个问题。

找出候选的Proxy
虽然一个项目的特征量很多,不过可不是随便一个特征量都可以当做Proxy的。

要成为Proxy,至少要满足如下四个条件。

1)Proxy的值应该和工作量紧密相关。

这个不用多解释了吧,就是说Proxy的值和y的值要有相关性。

关于“相关性”的概念这里先定性说一下,定量分析后续会讲到。

2)Proxy应该是能明确得出值的,没有二义性。

这是说Proxy应该对应一个明确数值,是一就是一,是二就是二,不能取“不错”、“挺多”这种值。

3)Proxy应该在项目开始阶段可以得出或能较精确估计出。

这个开始阶段最晚不能晚于概要设计,因为估算都是一开始进行,所以Proxy一定要在起始阶段就能得出,否则项目结束了谁还搞估算,实际值都出来了。

4)Proxy对于不同的实施方案是敏感的。

就是说当开发方法、开发过程等因素变化时,Proxy应该具有一定的敏感性。

经过上述分析,我想选用什么作为Proxy大家心里都有点谱了。

一般来说,在估算时常被作为Proxy的有需求分析中用例数量、需求分析中功能模块数量、概要设计中实体数量和数据库设计中表的数量。

当然,各位也可以根据上述要求选择自己的Proxy。

在本文中,我们暂且选择用例数量、实体数量和表数量三个Proxy作为候选。

选择最合适的Proxy作为x
这里所谓的“最合适”,在数学上的意义就是和开发时间y的相关性最强。

那么什么是相关性呢,从直观意义上,两个变量的相关性是指两个变量关联的紧密程度,数学上可以用相关系数表示。

相关系数计算公式如下:
至于这个公式为什么能反映出两个变量的相关性,可以去参考高等数理统计相关资料,本文不再赘述,只是顺便说一下,r的范围在-1~1之间,绝对值越大代表相关性越强,如果为正值则表示两个变量正相关,否则为负相关。

知道了这个,我们这一步骤的目的就是找出候选Proxy中与y相关系数最大的作为x。

不过,这数据从哪里来呢?这就要从以前做过的项目中提取了。

查阅朋友所在团队最近做过的5个项目的数据资料(这里当然历史项目越多越好,不过笔者这个朋友的团队只有5个项目的记录),得到如下数据:
项目工期(y):424 267 90 331 160 (人时)
用例数量(x1):37 20 6 18 12
实体数量(x2):15 9 4 11 14
数据表数量(x3):25 18 7 16 18
下面就是计算各个相关系数了,计算相关系数是一项机械且乏味的活动,一般都会交由相应的工具去完成。

不过您要是感兴趣,也可以自己代入上述公式手算。

下图是我用Excel 计算的结果:
图1
一般来说,|r|大于0.7就有很好的相关性了,而从计算结果可以看出,用例数量x1和工期y的相关系数达到0.93,最为优秀,而数据表数量x3也达到0.83,唯有实体数量x2的相关系数仅为0.65,质量较差。

因为|r(x2,y)|<0.7,所以这里首先排除掉。

到了这里似乎我们可以顺利成章选择x1作为最终Proxy,但是还有一点要考虑,就是显著性。

所谓显著性就是在偶然情况下得到此结果的概率,如果显著性不足,说明这个结果不可靠。

显著性t值的计算公式如下:
因为n=5,这里自由度为3,然后查询t分布表,得到95%预测区间为3.182。

因为一般显著性<0.05则认为显著性较好,所以如果t的值大于3.182,我们则可以接受。

不过如果使用工具的话,一般可以用t检测直接得出显著性,这里我用Excel得到r(x1,y)的显著性为0.006,r(x3,y)的显著性为0.007(如图2所示),都远小于0.05,显著性均非常好。

所以根据择优录取原则,我们选择x1:需求文档中用例数量作为预测Proxy。

图2
得到x的值
在上文中,我们通过相关性和显著性分析,最终决定使用需求文档中的用例数量作为x。

下面就是要确定x的值,这个不必多说,直接从需求文档中得到相应的数量即可。

确定相关函数f
知道了x的值,下面就是要确定相关函数了。

这一步是最艰难也是最有技术性的,因为相关函数不但和数理因素相关,还与开发团队、团队中的人以及管理方法有关。

如果人员变动很大或管理方法做了很大的调整,历史数据可能就不具备参考价值了。

不过如果团队的开发水平和管理方法没有重大变动,这个函数还是相对稳定的。

在函数选型上,一般会选择线性函数,当然我个人对此是十分怀疑的,但是这里为了简单起见,我们姑且照例使用线性函数作为预测模型。

这样可以建立一元线性回归模型如下:
这个函数并不是简单的线性函数,而是包含了一个随机变量ε,这是一个服从正态分布的随机变量。

上述模型的直观意义可以如下描述:a代表与x即用例数量无关的起始时间,b代表每一个用例所耗费的平均时间,而ε代表开发中的不确定性。

在不同的团队中或不同的管理方法下,a,b和ε都是不一样的,但是当团队和管理方法相对稳定,可以认为a,b和ε是可通过历史数据估计的。

而因为ε的期望为0,所以只要给出a和b的合理估计,就可以得到y的一个无偏估计。

下面我们估计a和b的值。

估计方法有很多,如曲线拟合法或最小二乘法。

这里我们采用最小二乘法进行估计。

最小二乘法估计的基本原理如下:
求极值可以使用微积分中的求极值方法,首先令Q(a,b)对a和b分别求偏导,并令偏导为零,得如下方程组:
经过一系列计算和推导,最终可得到:
将以前的历史数据代入上述方程,就可以得到a和b的最小二乘估计。

同样,这种机械而乏味的计算一般交由工具去完成。

我用Excel得到a和b的估计分别为56.251和10.653。

Excel分析结果如图3所示:
图3
根据估计结果,我们可以得出相关函数为y=56.251+10.653。

我们还可以证明,这个估计是一致最小方差无偏估计,证明过程从略。

现在我们不但得到了相关函数,还得到了如下有用的数据结果:这个团队在目前的管理模式下,开发一个项目平均准备时间为56.251人时,而平均每个用例开发耗时为10.653人时。

得出y
有了上面的结果,我们可以很轻易得出新项目的计划工时。

例如新项目有50个用例,代入可以得到y=56.251+10.653*50=588.901,约为589个人时,再假设团队中有3个开发人员,平均每周工作五天,每天工作8小时,就可以得到项目大约需要开发24.54个人日,开发周期约为5周。

后面的话
至此我们已经完成了利用一元线性回归模型对软件工期的估计。

但是不得不承认,这个估计方法存在很多缺陷,如估计变量单一以及估计模型过于简单等等。

实验证明,这种一元线性模型对中小型项目相对有效,如果团队比较大并且项目十分复杂,估计效果就不理想了。

不过这篇文章给出了一种思路,就是如何利用数理统计模型以及历史经验数据来估计新项目的工期。

对于文中的具体方法则可以进行诸多扩展,例如使用多个估计代理进行多元回归分析、细化估计方法等等。

例如PSP中就给出一种非常精细的PROBE估计法,有兴趣的朋友可以参考。

另外,除了求得估计值,还可以给出估值置信区间,甚至使用蒙特卡洛模拟技术进行更复杂的分析,都可以得到更理想的估值。

但是其核心思想与本文是相通的。

相关文档
最新文档