写点什么

度量和提高代码质量

  • 2016-01-17
  • 本文字数:1586 字

    阅读完需:约 5 分钟

Aigle Practitioners 2016 大会上, Boris Modylevsky 将做一场关于度量和提高代码质量的演讲。

InfoQ 就如下内容对他进行了采访:度量代码质量的重要性及如何使用度量提高代码质量,将静态代码分析工具集成进持续集成过程,测试覆盖率分析和测试自动化,将代码分析工具集成进持续集成过程以及测试覆盖率分析可以带来什么好处。

InfoQ:您能详细介绍下度量代码质量的重要性吗?

Modylevsky:作为软件开发人员,对于我们的软件产品,我们有很多可以说的。它是否可以用于特定的场景,它是否能够在受到某些限制时很好的运行,它是否能够从灾难中恢复过来。所有这些问题都没有回答我们的代码质量多好或多坏的问题。关于代码质量,有许多定义,但通常,人们所说的“高质量代码”是指具备灵活性、可测试性和可读性的代码。如果我们可以评价我们的代码有多好,那么我们就可以更准确地估计后续任务的工作量,或者为了提高代码质量,分配时间,用于减少技术债务。因此,通过度量内部代码质量,我们可以提高外部质量,结果就是提高了软件产品的质量。

InfoQ:关于如何度量代码质量以及如何使用代码度量提高代码质量,您能举例说明一下吗?

Modylevsky:我曾经参加过一个混合了遗留代码和新代码的项目。遗留代码需要重构,而且没有经过单元测试,而新代码是从头开始写的,经过了良好的设计,干净且经过测试。问题是,新代码同遗留代码混在了一起,很难确定哪块代码需要改进。当我们开始度量代码质量时,哪部分代码需要改进就非常清楚和明显了。度量代码质量帮助我们评估技术债务,我们可以分配资源用于重构。

InfoQ:您是如何将静态代码分析集成到持续集成过程和工具的?

Modylevsky:有许多现成的静态代码分析工具,重要的是选择最符合你的需求的工具。目前,我正致力于一个流程解决方案的开发,实现 QualiSystems CloudShell 和 VMWare VCenter 的集成。该项目是用 Python 编写的,托管在 Github 的一个公共库上。项目链接为 https://github.com/QualiSystems/vCenterShell

对于这个特定的项目,我一直在找配置最少,能与 Github 很好地集成,同时又是作为服务提供的工具。对于静态代码分析,我选择了 Code Climate,它可以快速准确地定位一些重复的代码和潜在的 Bug。不用说,它的配置非常简单,而且对公共库免费。

InfoQ:关于测试覆盖率分析和测试自动化,您能分享下您在这方面的经验吗?

Modylevsky:通常,代码覆盖率分析用于单元测试时非常有效。它可以识别出一些没有测到的边缘情况,或者找出测试覆盖率不够的大段代码。至于测试自动化,例如,端到端测试,即使有价值,价值也要小一些。代码覆盖率很高的自动化测试也不见得能够做到很好地测试所有的边缘情况。

InfoQ:将代码分析集成进持续集成过程,测试覆盖率分析,您从中获得了什么好处?

Modylevsky:在持续集成过程中进行代码分析和测试覆盖率分析很有价值。首先,它可以显示出每个指标随时间的变化趋势。其次,如果某个指标相对于上一次构建时降低了,那么它可以使构建失败。例如,如果实现了 Github 与 Coveralls.io 的良好集成,就可以将代码覆盖率分析配置为合并 Pull 请求的必备检查。这样,就可以确保持续改进,防止代码质量随着时间下降。

InfoQ:如果人们在寻找改进产品质量的方法,您能给他们提些建议吗?

Modylevsky:将这些工具作为一种游戏展示给开发团队,当这些指标提升时,就可以获得更多的分数。计量分数,并允许开发人员互相竞争。做一个仪表板,展示得分高的人,并显示在公司里的大屏幕上。

让人们为他们的代码自豪!

查看英文原文: Measure and Improve Code Quality


感谢谢丽对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016-01-17 18:006047
用户头像

发布了 1008 篇内容, 共 419.5 次阅读, 收获喜欢 346 次。

关注

评论

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

参加开源贡献后,大厂向我抛出了橄榄枝

LooK

Python Qt GUI设计:做一款串口调试助手(实战篇—1)

不脱发的程序猿

PyQt Python Qt Python Qt GUI设计 串口调试助手

MyBatis3源码解析(1)探索准备

Java mybatis

AI+遥感:释放每个像元价值

百度大脑

人工智能 AI

夜莺系统调研报告

苍狼

记线上服务 cpu 爆表 问题解决

常清静

性能优化 压测分析 CPU问题

模块 6 作业

miliving

你必须知道的Java17新特性-密封类(Sealed Classes)

蜜糖的代码注释

Java 开发 后端开发

ABAP 和 Java 里的单例模式攻击

汪子熙

Java abap 1月月更

openLooKeng1.5.0新版本正式上线

LooK

架构实战营 - 群讨论汇总 (2022)

华仔

#架构实战营

回顾明道云的2021(文末互动有奖)

明道云

🏆【Alibaba微服务技术系列】「Dubbo3.0技术专题」(1)Dubbo3新特性概览的介绍说明

码界西柚

dubbo Dubbo3 Alibaba技术 1月日更 Apache alibaba

云智慧智能研究院:2022年智能运维发展八大趋势

云智慧AIOps社区

趋势 AIOPS 智能运维 云智慧 运维发展

详解 Flink CEP(以直播平台监控用户弹幕为例)

五分钟学大数据

flink 1月月更

AI贺新年,开发者的虎年这样过才有意思

华为云开发者联盟

AI 华为云

对GO切片的理解

CRMEB

ReactNative进阶(三十七):应用 SectionList 实现分组列表

No Silver Bullet

1月月更 ReactNative sectionList

知名身份安全厂商九州云腾加入龙蜥社区

OpenAnolis小助手

Linux 开源 互联网

记 服务 内存飙升压测 - 分析总结

常清静

压测分析 内存问题 排查工具

Hive SQL底层执行过程 | 社区征文

五分钟学大数据

hive 新春征文

如何优雅地解决平台字体适应问题

编程三昧

CSS 前端开发 HTML5, CSS3 1月月更

Go 语言快速入门指南:Go 函数

宇宙之一粟

函数 Go 语言 1月月更

11张图深入理解分布式锁原理

慕枫技术笔记

微服务 后端 1月月更

实时渲染大赛太卷了!来看大佬提前交卷的优秀参赛作品

3DCAT实时渲染

3D 实时渲染

一文聊透Netty核心引擎Reactor的运转架构

bin的技术小屋

网络编程 nio 中间件 jdk8 netty

区块链赋能民生“第一单”:200多套房源试水,“链宜租”租房系统上线

CECBC

Spark 核心详解

五分钟学大数据

spark 1月月更

开发postgreSQL connector支持update/delete操作的代码

LooK

(1-23/23)Transformer依然很强

mtfelix

300天创作 2022Y300P

【架构师训练营】模块六作业

樰巳-堕~Horry

架构实战营 「架构实战营」

度量和提高代码质量_DevOps & 平台工程_Ben Linders_InfoQ精选文章