https://www.cnblogs.com/hunternet/p/9672680.html

前言#

软件开发中如何合理的预估项目的开发时间始终是一个难题。因为项目中不确定性的因素太多。这里我们根据日常项目中开发的规律总结出一种工作量预估的模型。该模型参考物理学中时间的计算方式:

时间(T)=距离(S)速度(V)时间(T)=距离(S)速度(V)

得到我们的软件开发时间计算公式:

开发时间(T)=工作量(S)开发速度(V)开发时间(T)=工作量(S)开发速度(V)

一、工作量的确定#

工作量主要与三方面的因素有关系。任务的规模、任务的复杂度以及完成该任务的人员能力水平。这里我们先假设一个标准的人员水平(即:理想状态下人员水平都是一定的标准工程师)。那么此时工作量主要与任务的规模与任务的复杂度有关系。

1.1 任务规模(S)#

关于任务的规模拆分出如下等级。(我们可以总结自己项目的规律来调整这个等级):

级别 描述
5 任务规模极其之大,甚至不能估计,可以拆分成很多小任务,甚至子工程。
4 任务规模较大,需要一周左右的时间来完成,可以拆分成很多小任务
3 中等规模的任务,需要三到五天左右的工作量
2 任务小,需要两到三天左右的工作量
1 任务较小,需要一天左右的工作量
0.5 任务非常小,需要很少的工作量,需要几个小时的工作

注意:这里的工作量只是完成任务本身所需的工作量,但软件开发往往不只是完成任务本身,更多时候任务还会涉及到其它相关的任务、系统。也有些任务可能涉及到团队技术的盲点,需要一定的时间研究分析等。因此,我们还需要结合任务的复杂度来进行工作量的评估。

1.2 任务复杂度(C)#

关于任务复杂度,同样可以拆分出以下几个等级。

级别 描述
5 极其复杂,更多依赖于其它任务、系统或子系统,含有团队中缺乏的技术,或者一些重要的经验,任务描述很不清晰,有许多未知因素,对外部任务、系统或子系统有很大的影响等
4 非常复杂,依赖于其它任务、系统或子系统,其中所涉及到的一些技术点、经验在团队中不是强项,任务描述不清晰,有些未知因素,需要极高的一些技术能力才能完成,对外部任务、系统或子系统有一定的影响等
3 中等程度复杂,有些依赖于其它任务、系统或子系统,完成任务很少或不需要研究,任务描述很清晰,未知因素基本没有,只需要一般的技术能力就可以完成,对外部任务、系统或子系统很少的影响等
2 简单,很少依赖于其它任务、系统或子系统,其中所涉及到的一些技术点、经验在团队中曾经有过,任务描述基本清晰,未知因素较少,只需要一般的技术能力就可以完成,对外部任务、系统或子系统基本没有影响
1 较简单,基本没有未知因素,所涉及的技术、经验都是团队非常熟练的。只需要基本的编程能力就可以完成,任务影响力仅涉及自身。

1.3 工作量(E)#

单个任务工作量(o)=SC单个任务工作量(o)=SC
项目的总工作量(E)=∑i=1n(SC)i项目的总工作量(E)=∑i=1n(SC)i

这里,我们定义工作量的最小工作单位为sp,单位时间一天的工作量。1sp即:我们的标准工程师一天的工作量为1sp(即:我们的标准工程师理想中的开发速度为1sp);

二、开发速度的评估#

2.1 理想开发速度#

我们的一个标准工程师理想中的开发速度就是一天可以完成1sp的工作量。前提是标准程序员,但显然我们团队中的程序员不可能都是标准工程师。因此理想中我们的团队开发速度为:

团队理想开发速度(Vt)=标准工程师开发速度(Vs)∗团队人员个数(R)团队理想开发速度(Vt)=标准工程师开发速度(Vs)∗团队人员个数(R)

2.2 开发速度的影响因子#

项目开发速度是一个很复杂的概念,很难准确的对其进行定义。考虑到不同团队成员的能力不同,则开发速度也不相同,即使是同一团队,其开发速度也不是一成不变的,会受到各种因素的影响。理想开发速度仅仅是没有受到任何阻力影响时的速度。但在项目过程中,总会遇到一些影响。其影响因素主要包括两方面。确定性因素以及突发性因素,在项目开始前,项目经理对以下两种因素预估的越准确,那么对开发时间的评估也越准确。

确定性因素一般是项目客观存在的,容易在开始前预测的。关于确定性因素大致参考如下:

影响因子 影响因子分数(以下为示例分数,具体分数可根据情况自定义i>0,若稳定则为1)
团队组成 0.95
开发过程 1
需求清晰完整度 0.96
技术因素 0.97
团队配合 1.05
其它因素 0.98

团队组成:考虑到团队成员不可能为标准工程师。因此团队人员的能力是影响团队开发速度的一个很大因素。我们可以在团队中找一个接近于标准工程师的人,得到他的能力系数(SF)为1sp(一天可以完成1sp的工作量),则以他为基准可以得到团队所有人的能力系数。则团队组成的影响因子分数(TF)计算公式为:

TF=∑Ni=1(SF)iNTF=∑i=1N(SF)iN

开发过程:考虑到改进开发过程(采用敏捷,优化测试方法等)会对开发速度有影响,因此开发过程是影响因素之一。其值可大于1也可以小于1,若稳定不变则为1

需求清晰完成度:需求是否足够清晰、完整也会对开发速度有影响。

技术因素:若完成该项目涉及到团队中未知、不具备的技术知识也是风险之一。当然也可能为正面因素。

团队配合:一个配合好的团队和配合差的团队其开发速度也是明显不同的。

说明:以上因素具体项目团队可自行调整。

确定性因素(FF)的综合影响(FR)计算公式为:

FR=∏i=0n(FF)iFR=∏i=0n(FF)i

突发性因素往往是项目开始前哪一预测的。关于突发性因素大致参考如下

突发性因素\影响因子分数 高(+) 中(+) 低(+) 稳定 低(-) 中(-) 高(-)
团队变化 1.1 1.05 1.02 1 0.98 0.95 0.91
需求变化 - - - 1 0.99 0.98 0.97
团队成员兼职 - - - 1 0.98 0.96 0.94
业务方失误 - - - 1 0.97 0.95 0.92
开发环境变化 1.1 1.05 1.02 1 0.98 0.95 0.92
临时增加减少任务 1.1 1.05 1.02 1 0.97 0.95 0.91
其它 1.1 1.05 1.02 1 0.99 0.97 0.96

团队变化:团队人员离职,新增成员等

需求变化:开发过程中需求的变更

团队成员兼职:团队成员身兼数职,在其他团队也有工作。

业务方失误:业务方提出错误的要求等

开发环境变化:项目开发过程中开发环境发生变化

临时增加减少任务:项目过程中临时性的新增或减少需求。

说明:以上因素具体项目团队可自行调整。

突发性因素(VF)的综合影响(DF)计算公式为:

DF=∏i=0n(VF)iDF=∏i=0n(VF)i

2.3 实际开发速度#

实际开发速度需要在理想开发速度的基础上增加各种影响因子。其公式如下:

V=VFR×DFtV=VtFR×DF

如上图,由下往上分别为3-8人的开发团队开发速度与综合影响因子分数的函数图像(影响因子在0.8-1.2之间)。

2.3 开发时间评估

开发时间计算公式如下:

T=EV=∑ni=1(SC)iVFR×DFt(Days)T=EV=∑i=1n(SC)iVtFR×DF(Days)

三、模型举例#

输入:

  • 任务数:50
  • 团队人数:7
  • 固定性因素影响值:
    • 团队组成 0.97
    • 开发过程 1
    • 需求清晰完整度 0.95
    • 技术因素 0.96
    • 团队配合 1.02
    • 其它因素 0.96
  • 突发性因素影响值:
    • 团队变化 0.95
    • 需求变化 0.98
    • 团队成员兼职 0.99
    • 业务方失误 1
    • 开发环境变化 1
    • 临时增加减少任务 1
    • 其它 0.99

输出:

  • 总工作量: 150

  • 理想开发速度: 7

  • 理想开发时间: 21.4天

  • 固定性因素影响综合值: 0.87

  • 突发性因素影响值: 0.91

  • 实际开发速度: 4.65

  • 实际开发时间: 32.2天

结束语#

以上仅个人针对我们公司项目所制定的一种工作量评估模型。其具体实用程度,使用中存在的问题等,还有待时间与大量数据的支撑。也希望道友们能提供一些宝贵的意见。你们的团队是如何进行工时与工作量的评估的。

软件(敏捷)开发中工作量与工时评估模型相关推荐

  1. 软件项目开发中的百分之九十效应

    在软件项目管理中,经常遇到这样的情况:进度到百分之九十后开始停滞,要花很长很长时间很大很大代价(甚至超过前百分之九十所花费的工时.工期)才能完成最后的百分之十.我把这种情况叫作:软件项目的百分之九十效 ...

  2. 敏捷开发中,团队成员认领的是任务还是用户故事?

    一次敏捷workshop上,有同学问:"敏捷软件开发中,团队成员自己主动认领的,是用户故事还是被分解成的任务?"同学们一时讨论热烈. 稍具敏捷开发实践经验的同学都应该知道,答案是- ...

  3. 敏捷开发中如何写好用户故事?

    什么是用户故事? 用户故事(user story)是一个用来确认用户和用户需求的简短描述,作为什么用户,希望如何,这样做的目的或者价值何在.用户故事在软件研发中又被描述为需求.用户故事通常的格式为:作 ...

  4. 如何编写敏捷开发中的user story

    对于敏捷开发来说,User Story是开发的基础,它不同于传统的瀑布式开发方式,而是把原本需求拆成最小粒度的Story,以方便拆分Task,估计开发时间,领取开发任务. 优点和好处 Being ve ...

  5. [转]敏捷开发中编写高质量Java代码

    本文转自:http://dev.yesky.com/103/11164603.shtml 敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的 ...

  6. [转]敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别

    敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP- 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自 ...

  7. 敏捷开发中史诗故事与用户故事的颗粒度

    作者:陈勇 出处:blog.csdn.net/cheny_com 用户故事的颗粒度一直是一个谈论已久的话题,但参加了很多研讨会,搜索了很多网络资源后发现一直没有定论,只好在这里原创一下. 前言:为何需 ...

  8. 产品经理必读:敏捷开发中的需求管理过程全解

    产品的源头是需求.一切伟大产品的实现都是从需求管理开始的.敏捷开发中的需求管理大致分为三个阶段:需求调研,需求分析和需求确认. 需求调研阶段 产品立项后,产品经理便开始了和需求打交道的漫长过程.第一步 ...

  9. 敏捷开发中的可用性测试

    陈 序明, 资深研发工程师及售前工程师, IBM 王 建芳, 资深软件测试工程师, IBM 李 雨恭, 软件工程师, IBM 简介: 近年来有两个词语在软件行业迅速"走红",一个是 ...

  10. 敏捷开发中QA如何做质量管理?

     敏捷开发中QA如何做质量管理? 经常有人会问我,敏捷模式下,QA的职责是什么?QA有什么价值?我们还需要QA吗?敏捷转型中遇到的问题,QA能帮助解决吗?这些问题以前也思考过,笔者就是QA出身的, ...

最新文章

  1. bootstrap与Select2使用小结
  2. 计算机辅助技术课设,《计算机辅助设计技术》课程标准-20210311103339.doc-原创力文档...
  3. JQuery学习笔记——JQuery基础
  4. CRecordset类
  5. (需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试
  6. linux源码scripts目录是什么,linux-kernel – linux / scripts / recordmcount:没有这样的文件或目录...
  7. python读取xml文件内容显示不全_python读取xml文件时的问题
  8. 集合python_Python 集合
  9. redis缓存命中率计算
  10. i3 2310M i7 9700T i7 9700K MacBookPro 16寸 CPU 跑分对比
  11. 指定条件查找计算机,利用excel数组函数完成“根据给定条件查找匹配数据”-excel技巧-电脑技巧收藏家...
  12. 「堡垒之夜」母公司Epic元宇宙蓝图:颠覆Facebook的社交媒体,拆除苹果的高墙花园...
  13. IP数据包格式各字段详解说明
  14. 使用Guacamole实现远程桌面控制
  15. 《码农翻身:用故事给技术加点料》的思维导图
  16. 在网页上实现大华视频监控摄像头在线
  17. matlab论文致谢,2020大学毕业论文致谢信
  18. 比亚迪芯片BF7615BMxx芯片怎么烧录
  19. python中print()换行的问题
  20. Spritekit中如何判断触摸点击的精灵

热门文章

  1. jQuery conflict with other Liberary
  2. 服务器地图不显示图片,传奇小地图不显示怎么办 传奇服务端小地图制作教程...
  3. 钉钉webhook小笔记
  4. sql server 替换字符串中的某些字符
  5. MATLAB免疫算法求解超市物流配送中心选址问题实例
  6. dos格式化linux,linux mformat命令对MS-DOS文件系统的磁盘进行格式化
  7. 【UWB】UWB基本定位原理
  8. stm32固件库文件
  9. ESXI洗白安装黑群晖教程,附文件
  10. 用Python对自己的文章做文本分析