【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

度量和提高代码质量

  • 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:005614
用户头像

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

关注

评论

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

一文搞懂PV、UV、VV、IP及其关系与计算

冰河

多线程 高并发 流量 并发流量

诺奖以上,真相未满:追捕黑洞二百年

脑极体

第四周作业

Geek_4c1353

极客大学架构师训练营

架构师训练营 1 期 - 第四周总结(vaik)

行之

极客大学架构师训练营

云服务时代,未来怎么样保障自己的核心竞争力?

boshi

个人成长 职业规划 云服务

TensorFlow安装

菜鸟小sailor 🐕

学习

第二周课后练习

大大猫

极客大学架构师训练营

Redis-技术专题-哨兵配置和原理

洛神灬殇

浅析 Java 内存模型 三

朱华

Java volatile JMM

典型互联网公司使用的技术

happy

【硬件篇之功耗测试】

良知犹存

硬件

手把手教你AspNetCore WebApi:数据验证

AI代笔

ASP.NET Core web api 数据验证

甲方日常 27

句子

生活 工作 随笔杂谈 日常

spring-boot-route(十一)数据库配置信息加密

Java旅途

Java Spring Boot

第4周 作业一

bearlu

架構師訓練營 week4 作業

ilake

架构师训练营第 1 期 -week4

习习

Spring学习笔记(一)手写一个简单的Spring

无语

Spring Framework

第9周总结

Vincent

极客时间 极客大学

第 4 周 系统架构总结

bearlu

系统架构

实用威胁建模指南(二)

亚伦碎语

敏捷 安全 系统安全架构 系统安全 威胁建模

go-zero流数据处理利器

万俊峰Kevin

stream functional Go 语言

架構師訓練營 week4 總結

ilake

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

knight

详解「区块链」溯源

netkiller

区块链 防伪 超级账本 标签 区块链产品溯源

延迟满足

时间是一个人最好的证明

延迟满足感 成功

《我想进大厂》之Redis夺命连环11问

艾小仙

Java redis 面试 程序语言

浅析 Java 内存模型 一

朱华

Java JMM

第三周架构师训练营作业

Geek_4c1353

极客大学架构师训练营

架构师训练营 1 期 - 第四周作业(vaik)

行之

极客大学架构师训练营

第9周作业

Vincent

极客时间 极客大学

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