管理学大师德鲁克说:你如果你无法度量它,就无法管理它。要想做有效的管理,就很难绕开度量的问题。

软件开发的过程或者技术团队的管理也存在着如何去合理的度量效率的问题。而度量是把双刃剑,度量具有极强的引导性。度量指标会激励团队重视并改善能够度量元素,也会导致你忽视无法度量的元素,并使得问题进一步恶化。所以,选择合适的度量指标考核技术团队成员,需要慎重考虑。例如,代码行数和千行代码Bug率指标就值得商榷。

什么是千行代码Bug率

首先我们来看一下,千行代码Bug率是怎么定义的:

千行代码Bug率 = Bug数量/ (代码行数/1000)

度量的标准:千行代码Bug率数值越小质量越好。

关于CMMI级别中和BUG率相关的信息如下:

CMMI级别 BUG率
CMM1级 11.95‰
CMM2级 5.52‰
CMM3级 2.39‰
CMM4级 0.92‰
CMM5级 0.32‰

考核千行代码Bug率的问题

从考核千行代码Bug率来看,主要存在两个方面的问题: 
首先,从考核标准上来说,Bug率数值越小就说明越好,基于这个结果,会引导团队成员做出一些对长远和整体效率无益的行为,例如: 
1. 增大基数,增加无意义代码 
2. 把定长循环分开写,写成顺序方法 
3. 把可配置信息写死到代码中 
4. 大量的复制、粘贴代码 
5. 重新发明各种轮子

统计“千行代码Bug率”和“每日生产代码行数”一样,都是没经过大脑思考,而直接打算把优秀员工踢出团队的懒人式管理方式。特别是对从事智力型工作工程师来说,是很不合适的考量指标。

因为优秀的程序员是通过减少代码行数来增加功能的。

千行代码Bug率,虽然没有明确鼓励增加代码行数,但是这个计算结果对于优秀的员工来说是相当的不公平。它隐含的推广了“尽量增大代码行数”这个意思。

其次,从考核阶段看,Bug率的数据主要产出在研发阶段的后期,及提交测试后产出bug数。从项目的研发阶段和效率价值金字塔来看,其对项目的整体质量方面更多的聚焦在微观层面问题,整体的质量的影响范围会较小。而前面几个阶段的缺陷,会影响整个项目的进度,甚至导致项目失败,管理者和团队更应该将风险控制和度量指标向前移。

研发阶段和效率价值金字塔

如何更合理的度量质量

如果考核千行代码Bug率不能很好的解决质量核心问题,那我们还有那些方法和方案来提高项目的整体质量呢? 
个人觉得,我们还是从项目的研发阶段和效率价值金字塔出发,重整体上去把控质量,上下游一体,从源头开始:

1. 需求的评审 
2. 架构设计方案评审 
3. 代码模块设计,包的依赖的规划,接口的设计的review
4. 代码的review的机制 
5. 测试用例评审
6. 使用代码检测工具,自动发现问题

过程评审是最有效也是成本最低的质量和效率保证和提升的手段。另外,过程评审还是迅速提高新人能力及其成果物的规范性的一个有效手段。 
但是过程评审,也存在一些问题: 
1. 前期过度依赖于团队的人员素质 
2. 规则的定义也比较难,产出不好量化 
3. 评审耗时多 
4. 团队的意识不一致

对于过程评审的实施,最核心的统一团队意识,团队意识不一致时,效果一定不好。 意识意识不一致,在资源的投入上就会缩手缩脚;只有把过程评审做到位,才能体会到评审活动的高效,避免那种走马观花式的“评审”,是浪费时间,不是真正的评审。到位地完成评审后,会有那种对系统质量“踏实了”的感觉,过程中辅以严密的变更管理和风险控制手段,系统质量出大问题可行性会很小或者近乎为零。

系统质量是要靠上游工程做出来的,而且上游的工作质量会更为重要,上游的问题的影响范围将更广,对效率和价值的影响更大,应该是我们重点关注的地方。仅仅依赖下游工程(种种测试)来把质量关,是十分低效,而且代价是非常昂贵的。

总结

想做有效的管理,就很难绕开度量的问题。在选择度量指标上,大部分管理者总是倾向于关注容易度量的指标,而忽略难以度量的指标。但是容易度量的指标不一定是重要的,难以度量的反而可能是重要的。 
软件开发产出最直观的结论就是一行行代码,实际上代码行数的多少并不代表价值的多少。当考核不合理导致出现大量的复制,不合理的设计,大量的冗余,不但难以理解和维护,甚至没有实际运行起来。这样就造成大量的时间浪费,同时也造成质量的严重腐化。 
而基于全过程的评审机制和持续改进方法,可以很好的改善质量。但持续改进需要一个过程,需全团队从认知达成一致,并共享问题,统一步调和规范,持续的执行和改进。

另外,从工程师自身来说,千行代码Bug率用来自我评估和改进,还是很有价值的。

你的leader还在考核你的千行代码Bug率吗?的更多相关文章

  1. 比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在 ...

  2. DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)

    codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Descripti ...

  3. 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)

    V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...

  4. Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)

    之前项目中没有涉及到显示gif图片的功能,也没有着重研究过,最近项目中要用到显示gif图片,于是就在网上一顿搜,用过之后发现如下几个缺点. 1.加载大的gif图片会出现oom. 2.没有预加载和缓存功 ...

  5. base64stego 还不懂base64的隐写,详解15行代码带你领略

    网上写了好多关于xctf MISC新手篇的base64Stego隐写的教程,但大都不太清楚,基本上都是讲了一段隐写原理,直接上代码了.但是代码是这道题的关键,代码讲了如何解码这个隐写的完整流程,这次我 ...

  6. 我所亲身经历的CMMI3 [问题点数:20分,结帖人outer2000]--转载

    很荣幸,作为某公司软件部门的软件项目经理,亲身经历了CMMI3,以下就把整个改进过程,用自己的亲身体会,详述如下,文中一些观点与看法难免带有个人感情,还请各位酌情参考. 公司情况简单介绍下,因为是为某 ...

  7. 互联网公司员工职级、研发效能度量、OKR与绩效考核

    今天要写这篇文章,来自最近有两个点触动了我.第一个触动点是奈飞(netflix)做出了一个巨大动作<"不搞职级.人人平等" 25 年后行不通了?Netflix 破天荒引入细分 ...

  8. 人生,还没困难到"非死不可"

    最近半个月,美国著名的Facebook公司,出了好几件大事.第一件事,2019年9月19日,一名陈姓中国软件工程师在Facebook加州总部跳楼自杀.第二件事,2019年10月4日,一名软件工程师在座 ...

  9. 五年.net程序员转型Java之路

    大学毕业后笔者进入一家外企,做企业CRM系统开发,那时候开发效率最高的高级程序语言,毫无疑问是C#.恰逢公司也在扩张,招聘了不少.net程序员,笔者作为应届生,也乐呵呵的加入到.net程序员行列中. ...

随机推荐

  1. struts2--使用<s:token></s:token>标签防止重复提交

    取个小例子:这是网页: <body> <s:actionerror/> <s:form action="LoginAction" method=&qu ...

  2. Tomcat他山之石.可以攻玉(一)Server组件

    Server组件 Server组件作用: 采用观察者模式,又叫源-收听者的设计模式,提供了可以动态添加.删除的监听器,作用是在Server组件的不同生命周期中完成不同的功能.逻辑: Tomcat容器的 ...

  3. 第1章 Linux文件类基础命令

    1. 关于路径和通配符 Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号. 路径展开符号: . :(一个点)表示当前目录 .. :(两个点)表示上 ...

  4. Go基础系列:常量和变量

    常量(Constants)和iota 常量包含不会发生更改的数据.常量的数据类型只能是boolean.number(int/float/complex)或string. 定义方式: const NAM ...

  5. 【转载】ASP.NET生成图片的缩略图

    图片处理是C#程序开发中时常会涉及到的一个业务,除了图像的上传.保存以及下载等功能外,根据上传的图片生成一个缩略图也是常见业务,在C#语言中,可以通过Image类提供的相关方法对图片进行操作,如指定宽 ...

  6. c#使用js上传图片

    前几天朋友说用js上传图片过去遇到点问题,于是自己也想写一个demo这里就把自己挖的坑填了. 话不多说上代码 前台就一个file控件加按钮 <!DOCTYPE html> <html ...

  7. 支持MySelf

    编程思路分享,BUG上报,主推Java Web方向与软件架构设计,不定期推出系列针对性基础教程,项目均放置于GitHub,个人运营精力有限,感谢支持. 交流群:628793702 个人技术公众,欢迎关 ...

  8. EL表达式的特性

    一.EL(Expression Language)表达式语言一.作用:从作用域中取值,再将值显示给客户 二.目的:在JSP中消灭java代码 三.使用:<%@ page isELIgnored= ...

  9. JavaScript中的三种弹窗

    ---恢复内容开始--- 1.警告窗口(alert) <script type="text/javascript"> alert("我是警告弹框!" ...

  10. software testing

    Software Testing Software testing is the process of evaluation a software item to detect differences ...