写点什么

衡量软件质量的常用指标

  • 2012-10-09
  • 本文字数:2347 字

    阅读完需:约 8 分钟

最近,资深软件工程师 Cagdas Basaraner 在博客中总结了软件开发实践过程中常用的几个衡量软件质量的指标,包括源代码行数、代码段/ 模块/ 时间段内的平均Bug 数、代码覆盖率、设计/ 开发约束等。

源代码行数(SLOC)

计算源代码行数也许是最简单的办法。它主要体现了软件的规模,并为项目的发展和规划提供了有用的信息。比如,如果我们每月计算一次源代码行数,那么就可以绘制一个项目成长图。当然,这种方式并太不可靠,原因是重构和设计阶段等因素会对此产生影响,但是至少可以为项目描绘一个趋势。

源代码行数的统计如果只计算逻辑代码行,那么会得到比较准确的信息。逻辑代码行不包括空行、单个括号行和注释行等等。统计源代码行数的工具有很多,比如 Metrics 等。

代码行数不应该用于评估开发人员的效率,这可能会导致重复的、无法维护和不专业的代码。

Shahar Yair Steve McConnell 早己指出,首先,使用代码行数之和无法有效评估一个项目的实际进度,因为它更注重行为而不是结果。最终产品在多大程度上依赖于代码的性能和质量,这也是代码行数无法说明的。因此,聚焦于此实际上是非常有限的工作效率测量方式。SLOC 无法表明要解决的问题的复杂性,也不能以可维护性、灵活性、扩展性等等因素来说明最终产品的质量。说到质量,它反而可能起到负面作用。通过重构、使用设计模式会减少代码行数,同时提升代码质量。代码量大,可能意味着有更多不必要的代码、更高不必要的复杂性、更加僵化难懂。

代码段 / 模块 / 时间段内的 Bug 数

缺陷跟踪对于更好的测试和维护是必不可少的。通过缺陷跟踪,我们可以利用报告工具(如 Mantis )计算出每个代码段、模块或者特定时间段内的 bug 数量。凭借这些数据,我们可以尽早的查出和解决缺陷起因。

Bug 数量可能会作为衡量开发人员效率的指标之一,但是必须非常谨慎。如果把这项指标看得太重,那么开发人员和测试人员可能会成为敌人。在一个高效率的公司,所有的员工必须团结协作。为了更好地实现评估,bug 可以被分为低、中、高等,因为这些缺陷的重要性和解决成本不是相同的。

此前,InfoQ 中文站曾经针对“Bug 统计是否在浪费时间”做了讨论,大家的看法包括:

其实我一直都不低调:bug 统计到底有没有用见仁见智,关键要看怎么统计,想得到什么。从来没有认真分析过 bug 数据的人,肯定不会知道数据里面隐藏着什么。抛开 bug 统计这个问题,缺陷追踪工具到底是一个什么地位?一个项目 2000bug,如果没有工具辅助,所有人估计要崩溃了。没有人直接反对这个想法,应该这是 DEV 的内部会议,与测试无关。

双子的天马行空 -Adey :其实我觉得他说得很有道理的, 真正的敏捷应该不需要 bug track system。Facebook 的开发模式,就是 dev 直接面向客户,它有多个直接面向客户的开发团队,,只要有需求,开发后直接上线。如果后面有 issue,是有 second tier 的 dev team 来 support fix。tier one 的 dev 永远在敏捷快速状态。

柴阿峰:回复 @双子的天马行空 -Adey : 三五个人的成熟团队敏捷也许不需要,大部分还是需要的。否则各种基于 bug trace 的管理系统就不需要开发持续集成、变更驱动测试的功能了。好的软件可以帮助实施敏捷,而不是反过来,不可能什么都靠嘴和白板的。

Sab866 :敏捷的基础是团队成员都是自律自发且积极的,不需要用报告来鞭策,但是简单易用的缺陷管理工具还是必须的,不然还真是会一片混乱。

代码覆盖率

代码覆盖率反映了程序当中源代码被测试的程度。有许多自动化工具可以完成该功能,比如 Cobertura

代码覆盖率不能完全代表单元测试的整体质量,但是可以反映出测试覆盖率的问题。它可以和其他测试指标一起作为软件质量的指标。同时,单元测试代码、集成测试场景和结果应该经常地被审查。

有关质量模型的问题,支付宝 SQA 团队的西剑提出有效的代码度量模型应具备以下特征:

  • 与组织的目标一致:代码度量模型的底线要与组织的要求一致,和业务相关的东西会体现在规范里。在支付宝,代码安全规范、敏感信息处理规范被作为代码质量最基本的要求。
  • 有针对性:要做针对性分析,比如对线上故障的研发原因进行分析,分析的规则会有周期性变动的,但不要太频繁,而且规则会随着组织的成熟度而改变。
  • 可操作性:要对度量维度做进一步分解,比如测试要有明确的检查点,覆盖要完整,可重复运行。支付宝就制定了具体的度量维度,从多个维度对系统加以度量。
  • 有工具支持:这不是必要条件,工具不能解决所有问题!能用工具最好,不行的话就人工检查。工具检测维度要按照优先级和操作性,逐步增加精细化维度。这一点上,支付宝将一些编码规则的检查放入了持续集成工具之中,以求尽早检查、频繁检查。

设计 / 开发约束

在软件开发过程中,存在许多设计约束和准则,其中包括:

  • 类和方法的长度
  • 单个类里方法和属性的个数
  • 方法或者构造函数的参数个数
  • 代码中的魔数、字符串用法等等
  • 注释行比例等

这些准则对代码可维护性和可读性至关重要。开发团队可以选择一些工具来统计这些约束的实施情况,比如 maven pmd plugin

有关设计 / 开发约束的讨论,读者朋友可以查看 InfoQ 的《代码之丑》和《编码那些事》专栏,最新一期的文章是《代码覆盖的 15 种典型情景》:代码覆盖为何物?相信程序员特别是测试人员不陌生,很多人都喜欢用代码覆盖来驱动测试的开展和完善。确实代码覆盖可以找出测试疏漏和代码问题,但是单纯的代码覆盖率高低并不能直接反映代码质量的好坏。大多我们的努力方向都是找出那些没有覆盖到的代码,然后补充用例,完善测试。而摆在我们面前的问题是:是否我们已经充分认识到哪些不需要、不能、必须被覆盖?只有对代码覆盖的各种情景了然于胸,才能不盲目乐观于代码覆盖率之高,悲观于代码覆盖率之低。在实践中(本文面向主要 Java 语言,基于 emma 工具),梳理可知,对于代码覆盖我们可能都会遇到以下 15 种典型情景……

2012-10-09 19:1816730
用户头像

发布了 501 篇内容, 共 282.3 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

源码解析丨一次慢SQL排查

GreatSQL

慢查询

Hype 4 Pro:打造惊艳HTML5动画与交互设计的全能之选

Rose

html5 网页制作 交互设计工具 Hype 4 Pro破解版 Hype 4 Pro下载

抢先一步,获取最全测试开发岗求职攻略

霍格沃兹测试开发学社

如何使用 NFTScan NFT API 在 Blast 网络上开发 Web3 应用

NFT Research

API NFT\ NFTScan

cURL 命令全面解析:提高工作效率

Apifox

程序员 前端 后端 API curl

苹果电脑3D壁纸屏保 Screen Wonders动态壁纸

Rose

动态壁纸 Screen Wonders壁纸 苹果电脑屏保 mac屏保

IntelliJ IDEA 2023:智能编码,让开发更高效!

Rose

ide 编程开发 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023 IDEA 2023激活码

flowjo 10破解版图文教程 flowjo 10 mac专业的细胞分析工具

Rose

mac软件下载 流式细胞分析软件 FlowJo 10下载 FlowJo 10破解版

霍格沃兹测试开发学社,全方位的测试解决方案提供商

霍格沃兹测试开发学社

低代码无法取代程序员,但为什么很多程序员却反感低代码?

天津汇柏科技有限公司

程序员 低代码 数字化转型

人工智能如何让测试更智能更高效?

霍格沃兹测试开发学社

想在Mac电脑上畅玩Windows游戏,那就试试CrossOver 24虚拟机吧!

Rose

CrossOver 24 CrossOver 24虚拟机 如何在Mac运行win 苹果电脑虚拟机软件

工业物联网App开发:连接未来智能制造的关键

天津汇柏科技有限公司

数字化转型 工业物联网

SnailSVN Mac版:从 Finder 的上下文菜单中快速访问各种最常用的 SVN 功能

Rose

Mac软件 SVN客户端 SnailSVN Pro下载 Subversion(SVN)客户端

Yummy FTP Pro for mac中文直装版 最可靠的ftp文件传输工具

Rose

Mac软件 文件传输工具 ftp传输 Yummy FTP Pro 破解版 Yummy FTP Pro 下载

章文嵩等技术大咖共同探讨企业数据治理和降本增效策略运用!

AutoMQ

#云原生 KubeBlocks #Kafka #OceanBase #AutoMQ

教你用python爬取『京东』商品数据,原来这么简单!

技术冰糖葫芦

API 接口

在 GraalVM 静态编译下无侵入实现可观测探索

阿里巴巴云原生

Java 阿里云 云原生

【干货】需求驱动的配货

第七在线

全智能深度演进,一键成片让视频创作颠覆式提效

阿里云CloudImagine

云计算 媒体 云剪辑

keyshot2023怎么保存低版本(keyshot2023下载安装教程)

Rose

KeyShot2023pro安装包 keyshot2023下载

苹果电脑软件开发工具:Xcode 15全新发布

Rose

编程开发 Xcode Mac版 Xcode 15

AI力量:如何让测试更智能更高效

测试人

软件测试

Puppet 2024年度报告:平台工程发掘 DevOps 无限潜质

SEAL安全

DevOps 平台工程 puppet

达芬奇调色软件破解版 davinci resolve 18.6.6最新中文安装包

Rose

DaVinci Resolve 破解 DaVinci Resolve18下载 达芬奇下载 达芬奇视频调色

Puppeteer实践:复杂的问题简单化

南城FE

JavaScript 前端 nodejs puppeteer

衡量软件质量的常用指标_语言 & 开发_崔康_InfoQ精选文章