评价一个系统或软件的质量高低,我始终认为除了需求和设计外,代码质量很重要,一个高质量的系统或软件,并不是被测试出来的,更多的是要靠设计和开发出来的。目前也有很多自动化的测试工具,更多的是从功能和性能角度进行测试验证,对于代码质量,尤其对静态代码质量,业内实际也有成熟的检查工具: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. malloc() vs new

    Following are the differences between malloc() and operator new. (1)new calls constructors, while ma ...

  2. Linux:expr、let、for、while、until、shift、if、case、break、continue、函数、select

    1.expr计算整数变量值 格式 :expr arg 例子:计算(2+3)×4的值 1.分步计算,即先计算2+3,再对其和乘4 s=`expr 2 + 3` expr $s \* 4 2.一步完成计算 ...

  3. webpack配置(vue)

    Vue-loader Vue-loader 是一个加载器,能把 .vue 文件转换为js模块. Vue Loader 的配置和其它的 loader 不太一样.除了将 vue-loader 应用到所有扩 ...

  4. 【Python】文本包jieba使用

    看了一个教程:https://www.cnblogs.com/wkfvawl/p/9487165.html 有些不懂的地方自己查阅了一下 键值的添加,获得文件中相同字符出现的次数, counts = ...

  5. js--生成器总结

    前言 生成器gengrator是es6 新增的函数功能,它允许你定义一个包含自有迭代算法的函数, 同时它可以自动维护自己的状态. 本文来总结一下JavaScript 中生成器的相关知识点. 正文 1. ...

  6. Intellij IDEA设置自定义类描述信息

    Intellij IDEA设置自定义类描述信息 样图 新建Java类自动生成模板信息:作者,时间,描述和其他信息 步骤 以 IntelliJ IDEA Community Edition 2020.1 ...

  7. Nginx模块之ngx_http_gzip_module

    Module ngx_http_gzip_module 该ngx_http_gzip_module模块是一个使用"gzip"方法压缩响应的过滤器.这通常有助于将传输数据的大小减少一 ...

  8. shell脚本 双向登陆免密

    一.简介 源码地址 日期:2018/4/23 介绍:用于hadoop的双向免密脚本,让填写机器互相之间免密登陆 效果图: 暂无 二.使用 适用:centos6+ 语言:中文 注意:执行前需要填写脚本里 ...

  9. bjdctf_2020_babyrop2(没有成功拿到shell)

    看到程序先例行检查一下 可以看到开启了canary和nx保护,需要注意的是这个acnary 将程序放入ida中shift+f12 没有关键性函数.我们进入main函数中 在main的gift程序里面我 ...

  10. 自定义日历(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 日历有三种:标准日历.24小时日历和夜班日历. 但这三种在现实中远远不够用,别的不说,就说那个标准日历,默认是8点到12点 ...