度量术语之二:应用类和开发类生产率(实际度量案例)

一个令人震惊的事实是连生产率这样的常见度量数据都没有一个简单的定义。连我们日常经经常使用到的公式:生产率=工作产品/工作量(工作产品能够是代码行,功能点,也能够是不论什么能够计数的东西。比方文档页数)都是错误的。

假设你正常尝试使用生产率做度量,那么至少应该先分为以下两种度量数据。

注意以下的样例为了便于理解使用的是代码行,但实际上这两个概念是IFPUG(国际功能点用户组)对功能点计数时做的分类。

应用类数据 Application Type

以下这段对话将产生一个应用类度量数据:

A:“这个软件有多少代码行?”

B:“等我数一下……10000行”。

A:“多少人天开发出来的?”

B:“大约100人天吧”

A:“那么生产率=10000行/100人天=100行/人天”

这样的生产率是按一个应用(Application这个词汇的来历)的静态规模度量产生的生产率。过一段时间会发生戏剧性的变化:

三个月后……

B:“我们又改动了一些代码,添加了一些代码,可是也删除了一些代码”

A:“哦?”

B:“多投入了100人天,只是如今还是10000行。”

A:“那么如今的生产率是:10000行/200人天=50行/人天;假设仅仅算二期么……0。我也帮不了你了”

B:“好吧……二期算是白忙一场”

开发类数据 Development Type

A:“这个软件有多少代码行?”

B:“一共同拥有两期……等我数一下……第一期100人天开发了10000行……第二期也是100人天,添加2500行,删除2500行,改动5000行”。

A:“那么一期生产率=10000行/100人天=100行/人天”

B:“二期呢?”

A:“二期生产率=(添加2500+删除2500+改动5000)/100人天=10000行/100人天=100行/人天”

B:“yeah!“

A:”只是。也有的体系说二期生产率=(添加2500+删除2500/2+改动5000)/100人天=8750行/100人天=87.5行/人天

B:”啊?“

A:”等下……还有体系说二期生产率=(添加2500+删除2500/4+改动5000/2)/100人天=……这个,你自己算吧。

B:”好吧。总算比白忙一场好。

怎样使用?

场景一:计划与绩效考核=开发类数据

由于增删改都要花费工作量,所以用开发类数据做计划和考核更加公平一些。

只是,一般採用功能点更加合理一些。比方在重构中极有可能删除大段的代码(我们以前在15分钟左右把4000行代码重构为55行,功能不变)。而实际上应用的变化并不大。假设用这样的外界(客户。高层)难以感受到的“变化”来做度量元,非常难得到认同。

三种体系(增删改权值同样,或/2。或/2/4)选择哪个好呢?

我也不知道,由于这三种体系都有人在用。我的建议是:

1. 假设刚刚開始做度量

随便选择一个方法就好了,可是请记录下原始数据。

也就是说。要记住有多少新增,多少删除,多少改动。

2. 数据积累比較多了

请按三种方法都计算一次,然后对照一下计算结果和实际工作量的相关系数(相关系数日后会科普一下。Excel表里变有这个函数CORREL(B1:G1,B2:G2),相关系数越高表明用这样的方法做估算更接近事实。

度量分析没有“理论上哪个最好”,仅仅有数据本人才有发言权。

或者说。度量分析的本质就是消除各种理论的主观性、片面性、理想化,把发言权留给数据本身。

所以自己做数据分析是免不了的事情。

场景二:需求变更控制

只是,不论有多少理由,一个软件仅仅改动、删除功能而不添加功能。都不是一个正常的事情。

过多改动功能表明需求分析最初做的不好。而删除功能则表明做了过多的无用功能。

为了约束团队,防止他们把“改软件”当作工作,须要定期监控两者的比值:应用类/开发类。假设这个数据不断下降。表明大家都在改动之前的功能,非常久没有大量添加功能了。

在小而美的产品研发中,改动功能可能是一个常态,但这不能作为開始能够不深入思考“最佳功能”的理由。

在项目开发尤其是外包项目中。仅仅改动而不添加功能是一个灾难,由于客户多数时候不会为改动功能付费,他们觉得这是由于乙方未能深入分析需求造成的。

场景三:编码有效性

也就是用多少代码能实现多少功能的问题,编码有效性越高,则所需代码越少。(日后有具体文章描写叙述)

当然,这里的“功能”指国际标准功能点度量出来的功能,而不是我们平时所说的“个人理解不同规模也不同”的那种直觉功能。

在这样的场景中,应该使用:编码有效性=总代码行/总功能点数=总代码行/应用类功能点数。

比方在之前那个样例中,第二期代码行可能还是10000行,可是假设功能点添加了,那么编码有效性实际上增高了。

完整演示样例

以下是一个功能点、代码行、编码有效性、应用类、开发类数据的完整应用场景。

A:“这个软件有多少代码行和功能点?”

B:“一共同拥有两期……等我数一下……第一期100人天开发了10000行。200功能点……第二期也是100人天。添加2500行,删除2500行。改动5000行;添加50功能点,删除20功能点,改动30功能点”。

A:“那么一期代码行生产率=10000行/100人天=100行/人天,功能点生产率=200功能点/100人天=2功能点/人天”

B:“二期呢?”

A:“二期生产率=(添加2500+删除2500+改动5000)/100人天=10000行/100人天=100行/人天。功能点生产率=(增50+删20+改30)功能点/100人天=100功能点/100人天=1功能点/人天”(临时仅仅用第一种增删改权值算法)

B:“哪期项目做得快呢?“

A:“从代码行看,一样;从功能点看,一期项目快一倍。

B:“以哪个为准好呢?”

A:“功能点好,比較easy给客户和领导交代”

B:“二期真烂。

A:“也未必,你们的编码有效率提升了。

B:“怎么讲?”

A:“二期完毕后(不是二期开发本身),整个产品还是10000行。功能点却添加为300。你们如今的代码效率已经达到10000/300=33行/功能点了(越低越好。一期是10000/200=50)”

B:“生产率减少。编码有效性提高……怎么做总体评价呢?”

A:“生产率提高是终极目标。只是编码有效性的提升有利于未来的生产率和质量的提升。所以。如今总体评价是生产率下降了,未来要看你们以后能否真正发挥编码有效率的优势了。”

怎么样?假设是我,假设能写一个由数字组成的项目报告。我才不会写一大堆模棱两可的文字呢。

时间: 2024-10-05 02:32:48

度量术语之二:应用类和开发类生产率(实际度量案例)的相关文章

QT开发(二十七)——QT常用类(一)

QT开发(二十七)--QT常用类(一) 一.QString 1.QString简介 QString提供了Unicode编码的字符串,使用隐式共享技术来节省内存和不必要的数据拷贝,不必考虑跨平台的兼容性. QString类成员函数中除了 ascii().latin1().utf8().local8Bit()函数,其他所有的函数都是可重入的. 2.QString成员函数 QString::QString ( const QChar * unicode, int size ) QString::QSt

安卓开发技巧二:自定义日志工具类XLog的实现

我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项目,用到打印日志的地方肯定特别多,等到真正上线的时候,我们是不希望日志依旧能够打印出的,原因很简单,不仅多少有些影响效率,更有可能导致信息的泄露,所以我们就需要把所有的日志打印语句全部取消掉,难道我们真的一个一个的去删除这些打印日志的语句吗?项目那么大,就是想删除,也得耗费大量的时间和精力!大家不用怕,笔者这就给大家带来一款控制线上版本和线下版本

python开发学习-day07(面向对象之多态、类的方法、反射、新式类and旧式类、socket编程)

s12-20160227-day07 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin

十二、Android UI开发专题(转)

http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很多网友对Android用户界面的设计表示很感兴趣,对于Android UI开发自绘控件和游戏制作而言掌握好绘图基础是必不可少的.本次专题分10节来讲述,有关OpenGL ES相关的可能将放到以后再透露.本次主要涉及以下四个包的相关内容: android.content.res 资源类 android.gra

【鹏派】网上棋类牌类游戏开发领军品牌-如何赚95%棋类牌类平台利润

[合肥鹏派]网上棋类牌类游戏开发领军品牌-如何赚95%棋类牌类游戏利润 曾孕育中国最早一批游戏玩家的街机电玩,在无比恋旧难舍情怀的时代,棋类牌类手游的代表作.百分之百移植捕鱼游戏等特色玩法的街机,获得了80后.90后这两代消费大军的广泛支持.万人在线同台竞技重温经典的移动电玩时代已全面到來.合肥鹏派于2015年从街机游戏植入网络版的碰碰车,飞禽走兽,森林舞会,金鲨银鲨等多款游戏开始,获得了广大玩家的热爱.但如何紧跟鹏派的步伐赚取棋类牌类游戏95%的利润,需要避免以下棋类牌类游戏开发商的引导误区!

提高eclipse使用效率(二) 提高Android开发效率的小技巧

2013-09-04 22:49:33cnblogs.com-sw926-点击数:214 XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Window - Preferences,在右边的目录树中切换到XML - XML Files - Editor - Content Assist,是不是很熟悉,没错,就是Content Assist 接下来就简单了,延迟设为50ms,提示字母把能填的都填上去,设置完之后可以试一下.输入

开源分享二(Android相机开发实战)

开源分享二(Android相机开发实战) 开源分享 一(StickerCamera + 仿微信多图选择) 前言 上篇博文给大家分享了两个非常实用的项目功能模块,不知道大伙感觉如何?有木有一种臭袜子味扑鼻,酸爽的赶脚!!!贱笑贱笑了~ ~ OK!不扯淡了,言归正传.本文将主要为大家介绍Android中自定义相机的开发,做Android应用的童鞋应该都知道,在应用中使用相机功能有两种方式: 调用Camera API 自定义相机 调用系统相机 由于需求不同,所以选择的方案固然也不同,至于第二种调用系统

【开源夏令营优秀开题报告】专题之二 - 嵌入式与智能硬件类合集

CSDN开源夏令活动已经正式进入第一实习阶段,我们遴选出部分优秀提案开题报告进行展示.本文是嵌入式与智能硬件类开题报告展示. 编者按:CSDN开源夏令活动,已经正式进入第一实习阶段,我们遴选出了部分提案的优秀开题报告进行展示.优秀开题报告作者将得到CSDN高校俱乐部发出的"2014开源夏令营荣誉证书"及纪念品一份. 提案1:环境数据采集系统  提案简介:该项目是一套利用物联网技术对环境数据进行采集.处理的综合系统:其利用传感器网络,收集环境中的温度.湿度.光照度.风速.紫外线强度.粉尘

JavaFX战旗类游戏开发 第二课 游戏地图绘制

在上一节课中,我们对即将要完成的战旗Demo有了一个大概的了解,本节课当中,我们将会学习绘制游戏地图. 自从在JavaFX 2.2中增加了Canvas相关的功能,我们就可以使用Canvas来实现游戏绘制了. 游戏地图绘制主要用到GraphicsContext.drawImage方法. drawImage(Image image,double sx,double sy,double sw,double sh,double dx,double dy,double dw,double dh); 其中i