-
都 2020 年了,还在用代码行数评估开发工作量吗?
2020-03-10 14:58:22这时许多管理者为了图方便,直接只用代码行数来评估开发人员的工作量,这让很多开发人员都苦不堪言。 在开发工作中,代码行数体现的数据最直观,这点我们不能否认,它一定是一个可以参考的维度。但是如果仅用代码...衡量开发人员的工作量一直是让很多管理者头疼的问题,开发工作的不易量化让对于开发人员个体的工作变得难以评估。这时许多管理者为了图方便,直接只用代码行数来评估开发人员的工作量,这让很多开发人员都苦不堪言。
在开发工作中,代码行数体现的数据最直观,这点我们不能否认,它一定是一个可以参考的维度。但是如果仅用代码行数来评估开发人员的工作量,甚至以代码行数来设定 KPI ,这无疑是非常错误的行为,其带来的后果也是非常严重的。
首先这并不是一种非常专业且科学的评估方式,甚至会让制定该规则的人显得有些「业余」。亲自有过项目经验的开发者和技术管理人员应该都知道,一个项目中真正耗费精力的地方是框架搭建、功能需求分解,以及后续的功能测试,真正去写代码的时间占比其实并没有多少。
其次,如果仅用代码行数来评估开发工作量的话,团队所面临的最大难题便是垃圾代码的增加。团队成员为了完成 KPI ,在本就能 20 行写完的功能上加入各种注释和无用的函数,甚至直接往项目里面贴源码,而不去考虑代码的耦合性、可读性、可维护性、重用性等。虽然 KPI 完成了,但开发人员逐渐降低的效率、延误越来越久的项目、质量越来越低的代码,团队在进行着完全没有必要的内耗,会让整个项目越来越艰难,和最初的目的背道而驰。
比尔盖茨曾经总结过这么一句话,“用代码行数来衡量编程的进度,就如同用重量来衡量飞机的制造进度”。没错的,代码数量并不等于代码质量,一味的追求写了多少行代码没有多大本质意义,关键在于是不是真的解决了实际问题。而只用代码行数来评估工作量,无疑是管理方式落后的表现。不客气的讲,这样的管理者思想仍旧停留在农耕时代,高产出=高价值,这样的等式在软件研发领域是不成立的。
那么,一个合格的管理者到底应该如何科学的评估开发人员的工作量呢?
目前比较常见的方法是基于 WBS(Work Breakdown Structure)的工作量估算,也称作自下而上法。通常的估算步骤如下:
- 寻找类似的历史项目,进行项目的类比分析,根据历史项目的工作量凭经验估计本项目的总工作量;
- 进行 WBS 分解,力所能及地将整个项目的任务进行分解;
- 参考类似项目的数据,采用类比法或专家法,估计 WBS 中每类活动的工作量;
- 汇总得到项目的总工作量;
- 与第1步的结果进行印证分析,根据分析结果,确定估计结果。
此外,也有 Putnam 模型、 COCOMOⅡ模型、IBM 模型等科学的估算方法,虽然看起来比较复杂,但比「一刀切」式的只看代码行数的评估方法要有效的多。
始终追求高效开发协作的 Gitee 企业版也在和大家一起探索更科学、合理、公正的工作量评估体系,Gitee 企业版刚上线不久的「统计」模块将多维度可视化的指标独立出来,让管理者更全面、直观、立体地了解项目进度级团队情况。
「统计」模块在未来仍将会是 Gitee 企业版的重点,后续我们会对该模块持续改进,提高大家的效率是我们不变的目标。
-
知乎千赞回答:怎么看待代码行数评估工作量?
2018-10-22 06:50:00王二是一个非常优秀的程序员,别人100行代码才能完成的事儿,他往往10行搞定,别人一星期才能搞定的任务,他往往半天做完。王二不想揽那么多事情,就总是在每周快结束的时候才工...王二是一个非常优秀的程序员,别人100行代码才能完成的事儿,他往往10行搞定,别人一星期才能搞定的任务,他往往半天做完。王二不想揽那么多事情,就总是在每周快结束的时候才工作,其他时间都想办法娱乐。
领导很是看王二不惯,可又没什么办法。后来领导一统计,这王二的代码量是整个团队最少的。于是,有一天,领导就颁布了一条规定:要按代码行评估绩效,每周统计大家的代码行数,平均前三加绩效,年中和年底根据绩效发奖金。
王二一听,心里明白怎么回事儿。不过他也不生气,很快想到办法:把一行代码能完成的功能,写成 10 行。比如一个给定两点计算矩形面积的函数,原本他写成下面这样一行代码:
新规定颁布后,他会写成这样:
一行变40行!
王二心想,娘希匹,看哪个龟孙的代码行数能超过老子!
果然,年中一算绩效,我的天呐,王二拿的奖金最高!
领导一看,不对呀,以往王二的代码量最少。于是,他就来查代码。这一查,勃然大怒,看出其中蹊跷,就取消了王二的奖金,还罚了王二几百块钱。
领导出了口气,不想和王二计较了,可又不想随便废掉新政,觉得那样太下不来台,就左思右想,琢磨改进的事儿。
终于,给他想到一个绝妙的办法,于是颁布了一个新规定:还是按代码行数评估绩效,规则更改为,在完成工作任务的同时,谁的代码行数最少,谁的绩效最高;谁的代码行数最多,谁的绩效最低。
这下,很多程序员傻眼了,没办法,还得适应新龟腚呀,就开始改变,每天都猛琢磨,怎么把原本200行代码可以实现的功能用一行来完成。
结果呢,整个团队,全变成了思考者,很多人一个月也不写一行代码,一年写不了10行。王二更绝,一年就写一行!
最后,大家任务都没完成,谁也没拿到奖金。
这下,领导又发飙了!
于是,苦思冥想一昼夜,颁布了一个新规定:还是按代码行数评估绩效,规则更改为,在完成任务的前提下,代码行数量越靠近均位数,拿的奖金越多。
这个法令一出,大家死活想不到办法,整日里愁眉苦脸。
要说还是王二聪明,熬了一夜,抽掉13包长沙后,写出来一个代码行归一工具:只要你输入一个数字,这个工具就能把你的代码拆成那么多行。比如你输入300,它就可以把你的一行代码拆成300行,还不影响功能。
王二乐于助人,编译了一个写死300行的工具发给大家使用。这样,每个人提交代码前,都用这个工具跑一下,工具自动完成折行、加空行等操作,把代码行数调整到300行。这样,大家每周代码行数量都变成了300行,半年下来,都有望拿到最高奖金。
然而,领导狂飙啦!天底下就不该有这种事啊!
于是,领导就又来查代码,结果发现,每个人的代码都跟加过扰似,根本读不懂!
最后,领导两天两夜没睡觉,第三天早上,发布了新规定:废除按代码行数评估绩效。
大家一听,都心安了。
然后好景不长,第四天,领导颁布了一条新规定:从今天开始,大家的绩效,按每千行代码bug数来计算,bug越多,绩效越低,bug越少,绩效越高。
王二一听,哇呀,这下难了,可他心高气傲,心想老子还能想不出办法来?于是每日里别事不干,就琢磨怎么降低每千行代码bug数……
一晃半年过去,王二一行代码没写,结果却发生了意料不到的事情:他的每千行代码bug数为0,最低,绩效最高!
王二大笑三声,跑去找领导要奖金,领导难以承受巨大的冲击,狂喷三分钟鲜血,被120接走了……
这是我在知乎回答的一个问题,感兴趣的可以戳阅读原文,看这个回答后面各种有趣的留言。
◇
最近相关文章:
-
代码行数统计
2020-08-09 01:53:24因为按业务本身复杂度来统计需要熟悉所有代码,执行上很难操作,因此用代码行数来评估工作量 研究了几种工具和方法 python的line包 直接安装pip install line-counter,以goredis目录为例子 wjcdeMacBook-Pro-2:...最近做一些批量化的改造,需要预估团队整体工作量。因为按业务本身复杂度来统计需要熟悉所有代码,执行上很难操作,因此用代码行数来评估工作量
研究了几种工具和方法
- python的line包
直接安装pip install line-counter
,以goredis目录为例子
wjcdeMacBook-Pro-2:redis wujingci$ line Search in /Users/wujingci/go/src/github.com/go-redis/redis/ file count: 68 line count: 17776 wjcdeMacBook-Pro-2:redis wujingci$ line -d Search in /Users/wujingci/go/src/github.com/go-redis/redis/ LICENSE 25 Makefile 20 README.md 143 bench_test.go 220 cluster.go 1439 cluster_commands.go 22 cluster_test.go 880 command.go 1048 command_test.go 60 commands.go 2175 commands_test.go 3290 doc.go 4
缺点在于只能统计总文件,肯定会有一些配置文件,会导致估算不准确
- CLOC工具:https://www.npmjs.com/package/cloc
安装nodejs后直接安装即可。直接可以统计各种语言的行数,以goredis的目录为例子
xxxMacBook-Pro-2:redis wujingci$ git ls-files| xargs cloc 70 text files. 70 unique files. 3 files ignored. github.com/AlDanial/cloc v 1.85 T=0.14 s (466.1 files/s, 123562.4 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Go 64 2899 594 14085 Markdown 1 31 0 112 YAML 1 4 0 16 make 1 5 0 15 ------------------------------------------------------------------------------- SUM: 67 2939 594 14228 -------------------------------------------------------------------------------
这个方法可以较快统计出内容甚至把编程语言也给明确了。缺点在于统计不够定制化。比如go服务引入了govendor,那实际有效代码行数很有可能被误统计进去
- 自己写bash代码
去注释:find . -name "*.go"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
去vendorfind . -name "*.go| grep -v vendor"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
改动更自由,需求更定制化
- python的line包
-
VS2015 统计项目代码的行数
2019-04-24 21:04:43虽然代码行并不能说明工作量,但是,大致的评估还是有一定的作用的 今天需要统计VB.net项目的代码的行数,顾专门做个记录~ open Solution 以后,我们运行查找和替换 --快捷键是 ctrl + shift + f 查找项 输入 ^b*... -
如何在一般情况下进行工作量的评估?
2010-07-31 11:36:50[b]如何在一般情况下进行工作量的评估? [/b] [b]类比估算法:[/b]根据类似的项目工作量进行预估,再对估计值根据具体情况进行调整。 参数估算法:我们公司可能缺乏这方面的数据支持,比如通过估计某个项目可能... -
如何统计你的开发工作量
2021-02-06 10:47:43在IT界曾经流传过一种方法:使用代码行数来评估程序员工作量。 虽然至今没有亲身体验,但是在某种程度上,这种方法是有效的,比如一个对代码要求很高,总是不断优化和重构,将代码从100行变成10行的人,这是纯粹对... -
PM工作中常见问题及解决方法
2012-03-12 11:24:17如何在一般情况下进行工作量的评估? 类比估算法:根据类似的项目工作量进行预估,再对估计值根据具体情况进行调整。 参数估算法:我们公司可能缺乏这方面的数据支持,比如通过估计某个项目可能会有的代码... -
PM工作中常见问题及解决方法(转)
2011-12-13 16:02:00如何在一般情况下进行工作量的评估? 类比估算法:根据类似的项目工作量进行预估,再对估计值根据具体情况进行调整。 参数估算法:我们公司可能缺乏这方面的数据支持,比如通过估计某个项目可能会有的代码... -
高级程序员要有动态调整责权和成员工作状况的能力
2011-10-03 08:35:36没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求高级程序员能真正评估一个模块的复杂性和工作量。项目组内程序员的水平是有差距的,同时用户需求又在不断变化,高级程序员要... -
软件工程管理-第六章软件项目成本计划
2020-08-12 14:33:40优点:代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。缺点:对代码行没有公认的可接受的标准定义;代码行数量依赖于所用的编程语言和个人的编程风格;在项目早期,需求不稳定、设计不成熟、实现不... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码
2013-02-04 12:49:33从1996年开始使用Oracle,在应用开发、大型系统实现以及性能评估方面具有丰富的经验。她是OakTable的成员,同时是Expert Oracle Practices (2010年 Apress出版)一书的合著者。 RIYAJ SHAMSUDEEN 专注于性能/... -
软件工程中对于个人的贡献的评价方法
2012-10-16 02:18:00具体来说是一下3点1,根据工作量,比如花费时间、代码行数等等。工作量大,相应的贡献也就越大2,任务完成的质量。代码没有bug,易懂好读,对于其他同学的帮助就越大,贡献也就越大3,是否在规定的时间内完... -
(转)软件项目设计开发管理
2010-05-07 14:28:00没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组... -
没有量化就很难做到合适的绩效考核
2011-09-29 22:21:31没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求高级程序员能真正评估一个模块的复杂性和工作量。项目组内程序员的水平是有差距的,同时用户需求又在不断变化,高级程序员要... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--详细书签版
2013-02-04 12:43:52从1996年开始使用Oracle,在应用开发、大型系统实现以及性能评估方面具有丰富的经验。她是OakTable的成员,同时是Expert Oracle Practices (2010年 Apress出版)一书的合著者。 RIYAJ SHAMSUDEEN 专注于性能/... -
c语言编写单片机技巧
2009-04-19 12:15:17并以量大低单价为产品主流,目前16位MCU与8位产品,还有相当幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU仍是MCU产品的主流。 13. 学习ARM及嵌入式系统是否比学习其它一般单片机更有... -
SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册)--详细书签版
2013-02-06 11:52:198.6.3 以字符串字面量表示二进制数据 240 8.6.4 计算表达式返回的数据类型 241 8.7 排名函数 242 8.7.1 生成递增行号 242 8.7.2 根据排名返回行 244 8.7.3 根据无间隔排名返回行 245 8.7.4 使用NTILE ... -
VC++科学计算器的设计V1_4Beta.rar
2010-03-23 04:54:59事实上,它几乎完全可以替代MATLAB、Scilab等计算软件而独立工作。 二、 问题分析 程序设计的基本要求是:(1)有效性(2)正确性(3)有穷性(4)输入(5)输出。 因此,我们先来考虑所要实现的计算器内核的输入。... -
会计理论考试题
2012-03-07 21:04:405.西文工作方式下不可输入汉字。( Y ) 6.微机的键盘是一种分离式的智能键盘,通过电缆与显示器连接。( N ) 7.写保护口用于保护存储在软盘片上的信息,避免误写入信息或计算机病毒的侵入。( Y ) 8.常见的形码汉字...
-
ELF视频教程
-
算法设计与分析-蚁群算法原理及应用.zip
-
瓦级连续双波长输出Nd:YAP/KTP稳频激光器
-
C语言
-
Metro风格应用的统一设计
-
【硬核】一线Python程序员实战经验分享(1)
-
重振美国科技-波托马克政策研究所.pdf
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
OlioH3-源码
-
opencv_ffmpeg.7z
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
数学建模-线性规划模型
-
statusline.vim-源码
-
Liunx 优化思路与实操步骤
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
用微服务spring cloud架构打造物联网云平台
-
华为1+X——网络系统建设与运维(高级)
-
全球汽车零部件供应商研究2020-罗兰贝格.pdf
-
C语言编程入门:控制台字符界面贪吃蛇小游戏制作!
-
翁恺老师的城堡游戏python版.rar