关于软件项目工作量估算的若干问题

作者:张克强

软件项目工作量估算从估算依据上看可以分成如下两类:

1,基于规模估算

2,基于工作量估算

基于规模估算的情况下,需要估算软件项目的规模。本文首先来看规模方面的问题。

问题1:如何表达规模?

软件产品或项目的功能规模是涉及软件开发和交易的成本、项目资源投入的预测、项目维护成本的预算、项目质量管理的要求以及产品上市的时间等方面的关键指标。因此,进行软件产品的功能规模测量显得尤其重要。

如何测量软件规模这个问题自软件工程诞生起就一直是这个领域的焦点问题。刚开始,人们很自然的使用代码行数作为规模的表达。但是作为规模表达方式的代码行数随着时间和技术的发展,越来越不正确了,主要原因是1,新工具自动生成大量代码行;2复用构件或源代码;3,难以区分新开发代码和旧代码。而且最重要的是源代码行数的实际测量只能在软件项目开发的后期,缺乏在前期较精确指导项目的能力。

世界上各个组织都看到了代码行作为规模表达方式的弊端,纷纷发展了各自的规模表达方式,其中IFPUG的功能点计数是其中有显著影响的。但是由于规模度量存在各种各样的情况,IFPUG的方法并没有统治地位,涌现了多种规模度量方法。目前,国内外软件领域的专家对软件功能规模测量开展了极富成效的研究,提出了各类工业标准。国际标准化组织(ISO)和国际电工委员会(IEC)联合技术委员会分别于1998、2002和2003年推出了软件功能规模测量方面的系列标准。国际标准化组织ISO/IEC相继发表了4个功能规模测量方法的标准,它们是:

——ISO/IEC 19761(COSMIC-FFP方法);

——ISO/IEC 20926(IFPUG方法);

——ISO/IEC 20968(MkⅡ方法);

——ISO/IEC 24750(NESMA方法)。

其中,COSMIC-FFP方法声明可以应用于管理信息系统(MIS)和实时类型二类软件,IFPUG方法声明可用于所有类型的软件,MkⅡ方法声明可用于逻辑事务能被确定的任何软件类型,NESMA方法非常类似于IFPUG方法也可以用于所有软件类型。

我国也十分重视这类标准的研究,于2001年开始了这方面的工作。

我国相继发布了GB/T 18491.1~6《信息技术  软件测量  功能规模测量》的系列标准,但具体的测量方法不包含在该系列标准中。由中国工业和信息化部支持的《软件工程  软件功能规模测量方法      功能点计数》(征求意见稿)于2011年9月1日完成,现在正处于意见征集阶段,这个标准非等效采用了ISO/IEC 20926:2003,为所有类型的软件开发的全生存周期提供了一种统一的软件功能规模计数方法。

除了以上方法,常见的方法还有:

其它各类功能点方法

代码行数 LOC

数据点

对象点

用例点

故事点,故事点是比较特殊的一个方法,下文还有说明。

不少公司发展了自己的功能规模测量方法。

问题2:如何测量规模?

以上这些规模测量方法的基本框架是相同的,下面是一个概要的介绍。

首先对做所测量对象进行分解,针对分解得到的各个部分,估算或测量模块的初始规模u(有些场合称为未调整功能点),乘以模块级调节参数f1,得到模块一次调整后的规模,将所有一次调整后的规模累加得到一次调整后的总规模,乘以总体调节系数f2,得到二次调整后的总规模s,见如下公式:

总规模S = (西格玛u*f1)*f2

有些方法只有一次调整,有些方法有上述的2次调整。

问题3:如何根据规模估算工作量

经过前人的大量研究,认为规模与工作量的数学关系如以下公式所示:

估算工作量e  =  a * S的b次方 + c

s是代表了规模, a,b,c是参数,其值的获得需要大量数据分析,一般采用非线性转换到线性,再进行线性回归分析。b的取值一般是1到1.2之间。

从以上公式可以看出,随着规模s的增加,工作量e是指数级增长,表明了软件项目规模越大,所需要的工作量增加得更多,表明了软件开发规模不经济的情况,这和我们直观的感受是一致的。

世界上各个软件生产率研究组织(比如ISBSG,SPR,日本的IPA SEC等)收集了成千上万个项目数据,开展各种各样的数学分析,试图得到在各种情况下 a, b ,c 的取值。

在第5届世界软件质量大会上,来自Toyo University的野中诚(Makoto Nonaka)介绍了日本IPA SEC组织(http://sec.ipa.go.jp/),举了某种情况下的一个工作量估算公式:

工数 = e的0.542次方*FP的1.154次方 = 1.719*FP的1.154次方。

对于一般的场合,其规模在一定有限的范围之内,那么可以假设工作量与规模的关系是简单的线性正相关,那么上述公式就变为:

估算工作量e =  a * S,即b=1, c=0 。 那么参数 a 就是 表明了生产率,a的单位是 工作量/单位规模,比如8工时/FP;另外一种生产率单位是规模/单位工作量,比如30FP/Man-month,如果采用常见的生产率单位,那么a就是生产率的倒数。

这种做法是更容易为各方所理解,在很多组织里常见到这个做法。

对比基于规模的工作量估算,直接的工作量估算方法所积累的数据和资料就少了,没有看到哪个组织在收集积累这类数据,这与直接工作量估算方法本身的特征也有关系。

下面来看看直接工作量估算方面的问题。

问题4,如何表达工作量?

工作量的单位一般是工时、人天、人月、人年。这些不同的单位是可以换算的。不同单位换算并不麻烦,在同一个国家没有差异,在不同国家因为法定假期的不同,1人月所对应的人天可能是不同的,但差异并不大。真正麻烦的是工作量表达有如下两种:

1,工作量

2,理想工作量

而工作量也有差异,有些地方是计毛时,比如一天都在某项目上工作,就直接记为8工时,有些地方是计净时,虽然一天都在某项目上工作,但会把诸如非直接相关的工作(如部门例会、参加其它项目评审)等等剥离,一天在某项目上的工作量只有5工时。 这样看,可以发现计净时的工作量与理想工作量比较接近,但注意并不完全相等。

问题5,如何直接估算工作量?

主要的思路是分解和类比。

把待完成物细分,根据以往估算和经验进行类比估算。  对于以往估算和经验的处理,可以分为两种做法:

1,不做特别处理,自然停留在团队成员的头脑里,使用时并不明确要求、不保证能够想起来对照

2,记录典型事物(特性,用户故事等)所需要的工作量,得到一套基准类比库,新任务根据这个基准类比库来估算。

在使用理想工作量的情况下,需要一个名为capacity的参数。工作量 = 理想工作量 / capacity ,capacity的取值一般是50% ~ 80%。

在估算时,本次待完成的理想工作量 = 计划的工作容量 * capacity

在回顾时,capacity = 原估算的理想工作量 / 实际工作容量 * 100%,注意工作容量并不等于工作量,而是团队在指定时段内可以提供的工作量,比如 5个人的团队工作21天,那么这个工作容量就是5*21=105人天。

在使用工作量时,注意区分毛时和净时,在选择净时的情况下,需要注意一天按多少小时来计,比如按5小时来计算,估算工作量达到50工时,如果1个人做的话,需要10天来完成。

问题6,在什么情况下使用直接工作量估算?

可以看到虽然以前也存在直接工作量估算的做法,但并没有得到大力的宣扬,在以前的软件工程教材里,一般很少提直接工作量估算。

从敏捷类开发方法开始起,直接工作量估算得到了宣扬,得到了更广泛的传播。

在敏捷类软件迭代开发当中存在对此方法的不少应用。

问题7,Story Point的特殊情况是什么?

Story Point的起源与理想工作日紧密相关,一般的,在开始时,团队会将估计一理想人日能完成的用户故事为一个故事点。

如果始终保持一理想人日对等于一个故事点,那么故事点估算其实是直接工作量估算。

但多数情况下,1个故事点对应的工作量是会发生变化的,随着团队的变化,对1个故事点所需要的工作量一般会减少。

有些团队会始终维护一套用户故事样例库,相当于用户故事的砝码,新的用户故事与样例库的用户故事进行比对,进而判定新用户故事的故事点数。

在具体比对上,常见的方法有 排序法,排序法一般利用斐波那契数列(1,2,3,5,8,15, …,?,无穷大),还有模仿T-shirt size估算,常见的,分成3到5档,比如 S、M、L、XL,或大、中、小,给每一档设定故事点数值。

可以看到排序法和T-shirt size模仿估算在本质上是一样的,T-shirt size模仿估算是排序法的一个实现。

这有样例库的做法得到的估算点数就是规模,值得注意的是 故事点所表达的规模是相对的规模。不同组织、不同团队的故事点是不可以比较的。这与诸如IFPUG、NESMA等等的功能点是不一样的。

4个国际软件功能规模测量标准的功能点是像“米”一样的绝对单位。就是说 在中国A公司的A1软件用IFPUG识别出了1000个功能点,美国B公司的B1软件也用IFPUG识别出的1000个功能点,那么可以说A1软件的规模与B1软件规模相等。而如果中国A公司的A2软件用Story Point识别出了1000个故事点,美国B公司的B2软件也用Story Point识别出了1000个故事点,那么,是不能说A2软件的规模与B2软件规模相等,两种不具备可比性,如果非要比较,那么需要分析A2和B2各自所依据的故事点样例或基准。

前面说到新的用户故事与样例库的用户故事进行比对,进而判定新用户故事的故事点数,目前这个比对并没有绝对的做法,常见不同的做法有:

1,是否考虑不同人做的影响

2,是否考虑实现的复杂度、难度

3,是否考虑新用户故事关联或依赖的事务

4,是否考虑有疑问的部分

目前业界对以上的问题并没有定论,各家组织或团队结合各自情况和理解各有各的选择。

因此,Story point具备在规模和直接工作量的两种形态之间变化的多态,具备巨大的灵活性,具体组织在采用Story Point时,可以做适应性的选择。

问题8,哪种方法更加准确?

没有结合具体情况,这个问题是无法回答的。

假设误差系数= 估算值/实际值。

估算值 = 实际值 * 误差系数

绝对误差 =  实际值-估算值 = 实际值 - 实际值 * 误差系数 = 实际值*(1-误差系数)

可以看到的一点是 敏捷小团队短迭代的实际值是不大的。 假设9个人的团队,迭代周期是3周,那么 实际值约在135人天范围之内。就算误差系数比较大,绝对误差也是有限的。

而传统瀑布型项目就是另外一个样子,比如时间跨度也许达到1年,总的人月数约是120人月,在这种情况下,就不难理解为什么存在多个组织来维护功能点定义,收集数据,给出需要指数运算的估算公式。因为就算误差系数小,由于基数大,所造成的绝对误差就比较大。

在敏捷开发方法里,常见的,采用扑克估算方式,这个方法可以驱动整体团队的智慧来确定故事点的大小,也能提高估算的精确度,而且也能澄清不同的理解,是非常值得采纳的一个方法。

时间: 2024-10-16 19:34:01

关于软件项目工作量估算的若干问题的相关文章

依据软件项目工作量估算来测算合作伙伴采购预算及人力资源投入计划

[项目人力资源计划]是指通过对未来人力资源需求的预测,确定完成项目所需人力资源的数量和质量.各自的工作任务,以及相互关系的过程.它确保了在适当的时候,为适当的职位配备合适数量和类型的工作人员,并使他们能够有效地完成总体目标. 项目概况 系统基于Cordys BOP 4云架构办公能力平台,支撑公文管理.通用办公.流程管理三类业务,提供完善的流程全生命周期管理能力.可视化流程定制开发能力.快速复用能力及友好的个性化定制页面. (1)办公管理能力平台及接口(内含开发平台.基础平台和接口): (2)公文

Project Management: 软件项目估算与计划不是一般的难!

摘要:估算.计划.计划跟踪是项目管理的主要工作,难度之高超乎你想象!光靠学习项目管理理论难以管好项目,而往往真能管好项目的都是那些在具体项目中滚打出来的实干人士.本文将会让你全面学习项目估算.计划.计划跟踪的知识,体验实际项目管理的难度,学到提高项目管理水平的一些方法. 大纲:1.从建筑工程说起2.估算要估啥?3.估算如何做出来?4.计划有什么内容?5.计划是如何做出来的?6.如何跟踪计划?7.优秀项目经理是怎样炼成的? 特别声明:如需转载此文,请给出指向本网站的连接,如下:作者:张传波摘自:h

关于工作量估算,所有你知道的和你不知道

本文首次公布于 IEEE Software 杂志,由 InfoQ 和 IEEE Computer Society 为您呈现. 越来越多证据表明这样一个趋势:软件项目的成本和工作量超出限度,泛滥成灾.平均来看.这样的泛滥大约在 30% 左右[1]. 并且,对照 1980 年代和近期的调查中的估算准确程度,能够看出基本上没有改善.(仅仅有 Standish Group 的分析指出估算精确度有显著提升. 只是,在他们的 Chaos Reports 中提到的估算精确度显著低声.或许仅仅是因为他们自己分析

关于工作量估算,你知道的和你不知道的一切

本文首次发布于 IEEE Software 杂志,由 InfoQ 和 IEEE Computer Society 为您呈现. 越来越多证据表明这样一个趋势:软件项目的成本和工作量超出限度,泛滥成灾.平均来看,这种泛滥大约在 30% 左右[1].而且,对比 1980 年代和最近的调查中的估算准确程度,可以看出基本上没有改善.(只有 Standish Group 的分析指出估算准确度有显著提升.不过,在他们的 Chaos Reports 中提到的估算准确度显著低声,也许只是由于他们自己分析方法的改变

测试管理-测试工作量估算实践

测试工作量估算是整个测试过程中不可忽视的环节,关乎项目整体的交付计划及时间工期安排.预估的越准确,对项目整体节奏的把握更有利. 我们首先要强调,估算估算,本身就带有预测性质,其准确程度是要受到多方面因素制约的,尤其是信息的充分性. 越是大型的复杂项目,对于估算的要求就越高:反之,小规模“短频快”的项目则对于估算要求不那么高. 1. 估算办法 如何得出对于测试时间的准确估算,可以从三种思路去保证: 参照以往项目的经验 依靠专家经验进行估算 使用专业的估算算法 项目中常见的估算形式有自上而下式的,也

浅谈软件项目开发过程中的主要项目风险及对策

软件项目成果的需求分析方和软件项目的承担者都十分关心这样的一个问题:什么样的因素会导致软件项目的失败?与项目有关的因素的改变将对按时.按经费预算交付符合预定质量要求的软件成果产生什么样的影响?这些都属于软件项目开发过程中考虑的风险问题. 软件项目的风险是指在软件开发过程中可能出现的不确定因而造成损失或者影响,如资金短缺.项目进度延误.人员变更以及预算和进度等方面的问题.风险关注未来的事情,这意味着,软件风险涉及选择及选择本身包含的不确定性,软件开发过程及软件产品都要面临各种决策的选择.风险是介于

软件项目估算之代码行估算方法

现在软件在大多数基于计算机的系统中已成为最昂贵的部分,如果软件成本估算的误差很大,就会使盈利变成亏损. 软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题非常复杂,想一次性整体解决比较困难.因此,对问题进行分解,把其分解成一组较小的接近于最终解决的可控的子问题,再定义它们的特性. 估算技术一般有代码行(LOC)和功能点(FP)估算法,这是两种不同的估算技术,但有许多共同特性.项目计划人员首先给出一个有界的软件范围的叙述,再由此尝试着把软件分解成一些小的可分别独立进行估算的子功能.然后对

软件开发工作量的估算方法

在讨论软件工作量估算方法前,首先要清楚什么事软件工作量估算. 我理解的工作量估算,就是估算软件项目所耗费的资源数,这个资源包含人力和时间,一般用人天.人月的形式来衡量.(而软件的成本=耗费的资源*资源的单价).而且我个人觉得软件工作量与软件规模是不等的,规模是指大小是固定的,而一个软件开发的工作量与许多因素有关,如公司的效率啊,参与开发人员的编程水平等. 从估算单位角度来说,工作量估算的方法分为两类:直接估算法和间接估算法.直接法指基于WBS的工作量估算方法,直接估算出人天工作量:间接估算法是先

IT项目如何估算工作量 一起来学习吧!!!!

在项目管理过程中,工作量的估算是一个重要的环节,直接关系到项目的成功与失败. 工作量的估算方法有很多,如经验估算法,工作分解法,还有就是数学模型法等等,但在我们实际的项目管理过程中,许多著名的估算方法使用起来并不那么灵活.方便,并不一定适合于我们的实际项目. 很多项目经理对于项目评估.管理.控制的能力基本上是来自于项目经理本身的从业经验,由于各种各样的原因,项目经理更多的是一个全才,这是在当前环境下,保证项目还能正常运行的必然结果. 在实际情况中,项目不但耗时长,而且成功率也很低,其中一个很重要