什么是千行代码缺陷率?
什么是千行代码缺陷率?
- 1 定义
- 2 目的
- 3 CMMI定义
- 4 指标的缺点
- 5 改进
- 5.1 圈复杂度
- 5.2 平均缺陷修复时间
- 6 其他推荐指标
1 定义
先来看下【千行代码缺陷率】是怎么回事?
- 一千行代码产生的缺陷,这个概念在CMMI中有定义;
- 计算公式为:
bug数/代码行数*1000
。
2 目的
- 为了度量产品质量,通过这一数据督促开发提高代码质量,提高产品质量。
3 CMMI定义
- CMMI定义为:
CMMI级 | 千行代码缺陷率 |
---|---|
1级 |
11.95‰
|
2级 |
5.52‰
|
3级 |
2.39‰
|
4级 |
0.92‰
|
5级 |
0.32‰
|
- 度量的标准为:千行代码Bug率数值越小质量越好。
4 指标的缺点
- 从这个指标我们可以看出,分子越小,分母越大,质量越好,表面看似简单的数据呈现,其实这样的衡量太过单一;
- 我们举个例子:某公司的千行代码缺陷率要求,CMMI3级,即
2.39‰
,以下是三个程序员的对功能M模块的进行实现:
例一:
A程序员用20万行代码实现了功能M,产生了bug20个,千行代码缺陷率为1.0‰;这个指标符合公司的要求。但是A的代码极度复杂,为了修改bug,代码耦合性很高,维护成本极大;
例二:
B程序员用5000行代码实现了功能M,产生了bug20个,千行代码缺陷率为4.0‰,不满足公司的标准要求。但是B的代码非常精练,可读性高,便于维护,移植性好;
例三:
C程序员用5000行代码实现了功能M,产生了bug30个,千行代码缺陷率为6.0‰,不满足公司的标准要求。但是C非常好学,他很努力在向B学习,争取使得自己的代码更具有可读性;
- 然后呢,公司根据以上三个人的千行代码缺陷率,定义三者的绩效为A最好,B不及格,C被淘汰了;
- 过了N年,这个M模块需要重构,A程序员的代码维护起来非常困难,面对庞大的代码,因为可读性差,维护会产生很多bug;B程序员的代码很容易进行修改,感觉很简单;C的代码仅次于B。但是呢最后评绩效的时候,仍然是A最好,B不行,为什么?
大家都认为A很牛逼,代码量庞大;B的代码太简单了。
所以从此刻开始,公司的开发同事就使劲的增加分母,让代码足够大,这样处于分子的缺陷再多,也会绩效很好。而B优秀的代码被抛弃,像B这样的程序员被淘汰。那么可想而知这个公司的最终之路是什么??
5 改进
- 综上所述,现在的产品质量不能单一的使用千行代码缺陷率来表示,起码我是这样认为的,那我们用哪些指标更好呢?
- 博主通过查阅资料得到以下指标:
5.1 圈复杂度
- 圈复杂度越高的代码会有越多的Bug;
- 圈复杂度反应了代码的耦合度;
- 推荐的圈复杂度不要超过10;
- 测量圈复杂度的工具:
Source Insight、Code Metrics、Cobertura
5.2 平均缺陷修复时间
- 平均缺陷修复时间能够更好地反映代码本身的质量状况,以及团队的成熟程度;
- 平均修复时间较长的代码都是复杂度高,耦合度高的代码;
- 平均修复时间短的代码都是结构相对清晰,命名规范,容易理解,扩展和变更的代码。
6 其他推荐指标
以下这些仅供参考:
- 缺陷修复率;
- 重新打开缺陷占比;
- 严重及以上缺陷占比;
- 缺陷遗留DI值等。
什么是千行代码缺陷率?相关推荐
- 研发效能度量:破解千行代码缺陷率引发的“血案”
本文共计2500字,建议阅读时间:5~6分钟. 阅读本文你将收获: 1.搞清楚度量的概念和分类 2.用系统化破解"血案" 3.研发效能度量的系统方法 前言:人们常常认为软件 ...
- python基础代码事例-Python基础总结成千行代码,让Python入门更简单!
只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python! 不管学习任何东西,入门方面都是比较快的,但是要深入的话,还是需要一个积累的过程,这是一个漫长且需要坚持的事 ...
- python常用代码入门-Python基础总结成千行代码,让Python入门更简单!
只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python! 不管学习任何东西,入门方面都是比较快的,但是要深入的话,还是需要一个积累的过程,这是一个漫长且需要坚持的事 ...
- python图书馆管理系统设计,千行代码带你学!
写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...
- 代码原型模板_原型值得一千行代码
代码原型模板 一张图片胜过千言万语. 原型价值一千行代码. 产品管理和敏捷开发的两个关键要素是启发和反馈. 低保真度伪影可以显着改善两者. 抛光,编纂的原型可以创建阻止你获得通信的好处的问题. 原型反 ...
- ibm软件工程师含金量_令人难以理解的软件工程师:几千行代码能搞定的为什么要写几万行?...
原标题:令人难以理解的软件工程师:几千行代码能搞定的为什么要写几万行? 一 我们公司的 Windows 版软体已经有十多年的历史,经过历代工程师的整治之后,内容已经凌乱不堪.过去三个月,我找时间自己重 ...
- 难以理解的软件工程师:几千行代码能搞定为什么要写几万行?
导读:"所以程序高手原本就不多,而一直继续在写程序的程序高手就更是稀有了."本文是一位从业多年的软件工程师分享的经验和看法,他提到的一些现象,槽点颇多,应该是从业人员都会遇到的,不 ...
- python1000行代码_写个人脸识别程序员,C可能要两千行代码,Java两百!但是Python只需二十行即可!...
今天给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提取.识别.操作人脸. 基于业内领先的 C++ 开源库 dlib 中的深度学习模 ...
- 几千行代码就能搞定,你为什么要写几万行?
微信又改版了,为了方便第一时间看到我们的推送,请按照下列操作,设置"置顶":点击上方蓝色字体"程序员之家"-点击右上角"-"-点击" ...
最新文章
- 用于半监督语义分割的基于掩码的数据增强
- 2021年春季学期-信号与系统-第八次作业参考答案
- 单片机与外设模块数据传输不成功各种原因分析总结
- Pycharm 折叠展开代码快捷键
- java des加密解密
- jdby mysql_06_dljd_mysql数据库常用操作
- iphone图片等比缩放
- 30+ 新鲜惊奇的 jQuery 插件与教程
- python 数据结构 树 dev get items_python数据结构之树(二叉树的遍历)
- java 5 多线程_Java基础系列五、多线程
- qt通过http连接mysql_Qt如何利用MySQL连接远程数据库?
- python视频教程-Python视频教程
- 科普:关于ES版的CPU(正显、不显、QS等)
- linux配置命令route,linux路由配置命令route学习
- P5018 对称二叉树
- ai人工智能写歌词app,ai写歌词网站,ai作词软件创作版,作词人的辅助工具,押韵助手
- python 两点曲线_ECC椭圆曲线加密算法:ECDH 和 ECDSA
- 水逆了一整年的王源,2020年年初能靠《大主宰》翻身吗?
- cocos2dx 背包界面的实现
- Vs2017 开发 调用 WCF