评价一个系统或软件的质量高低,我始终认为除了需求和设计外,代码质量很重要,一个高质量的系统或软件,并不是被测试出来的,更多的是要靠设计和开发出来的。目前也有很多自动化的测试工具,更多的是从功能和性能角度进行测试验证,对于代码质量,尤其对静态代码质量,业内实际也有成熟的检查工具:SonarQube,特别是互联网和大型企业都很关注代码本身的质量。我在之前汽车行业工作的时候,公司也特别关注静态代码质量并使用了SonarQube进行代码的检查,要求代码无致命和严重的BUG才能算代码检查过关。

那什么是SonarQube呢?SonarQube是开源的代码质量管理平台,用于管理代码的质量,通过插件形式可以支持包括Java、C#、JavaScript、TypeScript、CloudFormation、Terraform、Kotlin、Ruby、Go、Scala、Flex、Python、PHP、HTML、CSS、XML 、VB.NET等等二十几种编程语言的代码质量管理与检测的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,sonarqube提供能力不仅显示应用健康而且突出问题新推出的。有了质量门,您就可以修复漏洞,从而系统地提高代码质量。它的主要功能如下:

1.不遵循代码标准。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。

2.潜在的缺陷。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。

3.糟糕的复杂度分布。文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

4.重复。显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。

5.注释不足或者过多。没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅度下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

6.缺乏单元测试。sonar可以很方便地统计并展示单元测试覆盖率。

7.糟糕的设计。通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则。通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测耦合。

8、提高代码质量。了解自己在编码过程中犯过的错误,让自己的代码更具有可读性和维护性。

具体就不在这里介绍了,SonarQube最新版本是9.2.4,社区版是免费的,下载地址:https://www.sonarqube.org/downloads/,如下图

SonarQube 社区版免费下载
SonarQube 质量阀

虽然可以通过登录SonarQube,在线进行分析浏览代码静态质量,但当有很多项目的时候查看效率就很低,且静态代码质量随时都会发生变化,前提是只要修改了源代码。因此,自行研究开发了一个SonarQube的静态代码质量审计工具,这个工具是一年多前开发的,如下图:

SonarQub静态代码质量审计工具

具体实现方式:后台存储采用了自定义的Sharepoint列表,此工具采用C#开发,与SonarQub的交互采用SonarQub的Web API。本工具与Sonar前台权限一致,如果在Sonar前台看不到任何一个项目,则本工具也无法正常使用。Sonar项目名称,需要注意一点:实际一个项目可能会对应多个不同Sonar项目名称,如下图:

一个项目实际有多个Sonar项目
选择要检查的Sonar项目
Sonar项目检查结果
Sonar项目清单

最后简单介绍一下Sonarqube的Web API,具体如下:

1.所有Sonar项目:http://{ip}/api/projects/index

2.所有issues:http://{ip}/web_api/api/issues

3.度量的结果:https://{ip}/api/measures/component?component={sonar项目}&metricKeys=duplicated_lines_density,new_uncovered_conditions,new_uncovered_lines,new_duplicated_blocks,new_lines_to_cover,bugs,files,new_bugs,new_vulnerabilities,new_code_smells,new_duplicated_lines,new_violations,uncovered_conditions,new_branch_coverage,new_coverage,new_lines,new_sqale_debt_ratio,new_maintainability_rating&additionalFields=metrics,periods

更多技术沟通交流,可关注我的微信号:odoodev

长按图片扫描二维码

也可以关注我的今日头条号:

长按图片扫描二维码

 

分享一个自研开发的QA自动化审计工具-Sonar检查的更多相关文章

  1. 分享一个非常好用又好看的终端工具--Hyper (支持windows、MacOS、Linux)

    分享一个非常好用又好看的终端工具--Hyper 官网地址: https://hyper.is/ 打开官网,选择对应版本安装即可:(可能网络原因,无法下载, 可以从我分享的链接下载 链接: https: ...

  2. 分享一个嵌入式httpdserver开发库 - boahttpd library

    http://sourceforge.net/projects/boahttpd/ 一个C接口的开发库,适用于 windows/linux/或其它嵌入式平台,支持CGI扩展,支持多线程.採用面向对象开 ...

  3. 【整站源码分享】分享一个JFinal3.4开发的整站源码,适合新手学习

    分享这个源码是14年开发上线的<威海创业者>站点的全套整站源码,前后端都在一个包里.当时开发使用的是JFinal1.4,最近改成了JFinal3.4.使用的JSP做的页面.有一定的参考价值 ...

  4. 分享一个js对象开发组件写法

    var TextCount = (function(){ //私有方法,外面将访问不到 var _bind = function(that){ that.input.on('keyup',functi ...

  5. 分享一个LiteDB做的简单考试系统辅助工具

    凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...

  6. 分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型

    这张图每位程序员应该都深有感触. 人民心目中的程序员是这样的:坐在电脑面前噼里啪啦敲着键盘,运键如飞. 现实中程序员是这样的:编码5分钟,调试两小时. 今天我要给大家分享一个用WebGL开发的网站,感 ...

  7. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目

    本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...

  8. 分享一个简单的C#的通用DbHelper类(支持数据连接池)

    每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 <connectionStrings> <add ...

  9. VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)

    VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...

随机推荐

  1. tomcat 之 session 集群

    官网地址 https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html #:配置各tomcat节点 [root@node1 ~]# vim / ...

  2. LoadRunner中怎么设置密码参数化与用户名关联

    对密码参数化时从parameter里的"Select next row"列表中选择Same Line As这一选项,意思就是每一个密码参数化取值与对应行的用户名关联起来了

  3. Druid数据库监控

    一.简介 Druid是阿里开源的一个JDBC应用组件, 其包括三部分: DruidDriver: 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource ...

  4. C#获取Windows10屏幕的缩放比例

    现在1920x1080以上分辨率的高分屏电脑渐渐普及了.我们会在Windows的显示设置里看到缩放比例的设置.在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置.然而在默认情况下, ...

  5. 一个超好用的 Python 标准库,彻底玩透路径操作

    pathlib 学习 Python 时,尤其是在进行文件操作和数据处理时,经常会处理路径问题.最常用和常见的是 os.path 模块,它将路径当做字符串进行处理,如果使用不当可能导致难以察觉的错误,而 ...

  6. 00 - Vue3 UI Framework - 阅读辅助列表

    阅读列表 01 - Vue3 UI Framework - 开始 02 - Vue3 UI Framework - 顶部边栏 03 - Vue3 UI Framework - 首页 04 - Vue3 ...

  7. (转)Zookeeper原理和作用

    本周末学习zookeeper,原理和安装配置 本文参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ http:/ ...

  8. 转: 再谈select, iocp, epoll,kqueue及各种I/O复用机制

    首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ...

  9. 使用.NET 6开发TodoList应用(4)——引入数据存储

    需求 作为后端CRUD程序员(bushi,数据存储是开发后端服务一个非常重要的组件.对我们的TodoList项目来说,自然也需要配置数据存储.目前的需求很简单: 需要能持久化TodoList对象并对其 ...

  10. 基于MirrorDriver的录屏技术

    计算机屏幕图像的截取在屏幕的录制.计算机远程控制以及多媒体教学软件中都是关键术,基于Windows操作系统有多种截屏方法,研究的重点集中在如何快速有效的截取DBI(Device-Independent ...