专家分享选择开源和自研道路上的考量以及具体的业务案例,点击查看 了解详情
写点什么

使用 SonarQube 和 Visual Studio 减轻技术债

  • 2015 年 5 月 06 日
  • 本文字数:1136 字

    阅读完需:约 4 分钟

来自 SonarSource 的 Olivier Gaudin 与来自微软的 Stuart Kent 在本周举行的 Build 大会上为听众介绍了使用 SonarQube 所带来的益处,以及如何让它更方便地为.NET 开发者所用。Kent began 在演讲的开始描述了技术债的累积所带来的沉重负担。当某个项目的开发过程结束之后,此时的技术债只是会分散实现新功能的注意力而已,但随着时间的推移,开发团队经常会发现他们的所有时间都消耗在处理技术债上了。

Gaudin 在这个背景下介绍了如何衡量代码的质量与技术债的技巧。在分析代码库时,有一种非正式的衡量指标叫做每分钟飙脏话的次数。他为我们描述了技术债的出现是由于开发者这 7 种致命的原罪所造成的:

  1. 重复
  2. 糟糕的复杂性分布
  3. 意大利面式设计风格
  4. 缺少单元测试
  5. 缺乏代码标准
  6. 潜在的 bug
  7. 注释不足或过多,或者干脆不正确(单元测试对这种类型的 bug 无能为力)

Gaudin 表示,当项目已经开始运行之后,再回过头去实现某种试图缓解技术债的策略是非常困难的。有许多原因会让团队感觉实现这一点过于困难,包括缺乏自主性(在 QA 与开发者之间,谁应当对质量拥有自主权呢)、多样化的需求以及质量门。为了“改变游戏规则”,Gaudin 提出了以下几条建议:

  • 让开发团队拥有质量的自主权
  • 缩短反馈循环
  • 统一质量门
  • 成本并不重要
  • 这很有趣!

为了对实现目标起到帮助,应当尽量缩短反馈循环,让开发团队能够第一时间获得反馈。对于现有的软件来说,重要的是不要让问题变得更糟了,因此首先要改进正在编写的新代码的质量,然后再去处理遗留代码中的问题。

SonarQube 为开发者提供了一种描述代码库的仪表板,其中提供了多种实用的指标。例如某些仪表板上的 widget 就提供了处于监控中的项目的代码行数和代码覆盖率,此外还包括单元测试覆盖率和这些单元测试的通过率。它还能够对新编写的代码进行分离式的代码覆盖率检查,而不会受现有代码库的影响,因此团队就能够确保他们所编写的新代码不会使质量继续下降。

SonarQube 从用户那里获得的反馈是,虽然这一工具在 Java 项目上表现很好,但它并不符合 C#的风格。因此 SonarQube 联系了微软,希望得到一些优秀 C#开发者的帮助。Kent 表示,虽然代码质量数据非常实用,但一上来就面对大量的指标(代码分析、克隆、代码指标等等)会让人感到喘不过气。他建议使用者创建一个质量简报,对显示哪些数据进行过滤、建立基线、设立质量门、并设立一种补救政策,从而得到一个经过精练的问题列表,让它帮助你避免、或至少是减少你被过多的工作压垮的机会。

虽然还有一部分工作还在进行中,但新版本已经可以在 TFS2013 中使用了,有兴趣的开发者可以尝试一下。要了解更多的细节,请参考Stuart Kent 撰写的关于使用SonarQube 整合MSBuild 与Team Build 的文章。

查看英文原文: Reducing Technical Debt with SonarQube and Visual Studio

2015 年 5 月 06 日 09:303001
用户头像

发布了 428 篇内容, 共 159.7 次阅读, 收获喜欢 30 次。

关注

评论

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

TcaplusDBx 王者荣耀|五五开黑节与其背后的数据库

数据人er

数据库 nosql tencentdb TcaplusDB

Netty整体架构学习笔记

六维

Netty 5月日更

《互联网人的英语私教课》复习

IT蜗壳-Tango

5月日更

小企业面对大数据如何破局,高并发与海量数据技术又如何操作?

守护石

大数据 分布式架构 高并发系统设计 战略思考

服务调用链相关基础知识

luojiahu

调用链

腾讯云TcaplusDB与华为鲲鹏完成兼容性认证

数据人er

数据库 nosql tencentdb TcaplusDB 华为鲲鹏

打破思维定式(十)

Changing Lin

网络攻防学习笔记 Day14

穿过生命散发芬芳

5月日更 网络攻防

声网2020实时大会后的弱网对抗实践

Fenngton

音视频 网络环境 视频编解码 声网 弱网下的极限实时视频通信

花一周整理!Python全系列学习资料,全是干货

Python研究者

这个世界不会欺负诚实的人,也绝对不会亏待努力的人

小天同学

5月日更 真诚 诚信 努力

JS中every()和some()的对比使用

三掌柜

5月日更 领航计划

Flutter开发:Gridview的使用

三掌柜

5月日更

数据续谈

顿晓

数据 5月日更

TcaplusDBx 王者荣耀|五五开黑节背后的数据存储挑战

TcaplusDB

nosql 分布式 存储 TcaplusDB

世界电信和信息社会日 | TcaplusDB君节日介绍

数据人er

数据库 nosql tencentdb TcaplusDB

API网关关键技术

lenka

5月日更

JavaScript 进阶——井字棋游戏智能AI搭建

空城机

JavaScript 大前端 5月日更 web游戏

就这?腾讯云高工熬夜手写'Java微服务学习笔记'也就让我月薪涨3k

Java 编程 程序员 架构 面试

不是会员不让复制粘贴?看我“三板斧”!

liuzhen007

使用技巧 5月日更

今日学习小结

Nydia

学习

APP透露的焦虑

wgc

杂谈

5分钟速读之Rust权威指南(二)

码生笔谈

rust

学生管理系统考试试卷存储方案

Simon

架构实战营

今天被问微服务,这几点,让面试官刮目相看

Xiao8

面试 微服务 5月日更

世界电信和信息社会日 | 电信助力产业发展

TcaplusDB

数据库 nosql 分布式 存储 TcaplusDB

Golang library source file 库源码文件

escray

学习 极客时间 Go 语言 5月日更

音视频同步!RTCP协议解析及代码实现

明儿

c++ 音视频 协议 Wireshark 流媒体

数据挖掘从入门到放弃(一):线性回归和逻辑回归

数据社

机器学习 5月日更

Nginx通过split_client实现客户端分流

运维研习社

nginx 灰度发布 5月日更 分流

c++的并发操作(多线程)

赖猫

c++ Linux 多线程 服务端 并发

面向体验的视频云-火山引擎增长沙龙

面向体验的视频云-火山引擎增长沙龙

使用SonarQube和Visual Studio减轻技术债_.NET_Jeff Martin_InfoQ精选文章