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

具体实现方式:后台存储采用了自定义的Sharepoint列表,此工具采用C#开发,与SonarQub的交互采用SonarQub的Web API。本工具与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检查的更多相关文章
- 分享一个非常好用又好看的终端工具--Hyper (支持windows、MacOS、Linux)
分享一个非常好用又好看的终端工具--Hyper 官网地址: https://hyper.is/ 打开官网,选择对应版本安装即可:(可能网络原因,无法下载, 可以从我分享的链接下载 链接: https: ...
- 分享一个嵌入式httpdserver开发库 - boahttpd library
http://sourceforge.net/projects/boahttpd/ 一个C接口的开发库,适用于 windows/linux/或其它嵌入式平台,支持CGI扩展,支持多线程.採用面向对象开 ...
- 【整站源码分享】分享一个JFinal3.4开发的整站源码,适合新手学习
分享这个源码是14年开发上线的<威海创业者>站点的全套整站源码,前后端都在一个包里.当时开发使用的是JFinal1.4,最近改成了JFinal3.4.使用的JSP做的页面.有一定的参考价值 ...
- 分享一个js对象开发组件写法
var TextCount = (function(){ //私有方法,外面将访问不到 var _bind = function(that){ that.input.on('keyup',functi ...
- 分享一个LiteDB做的简单考试系统辅助工具
凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...
- 分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型
这张图每位程序员应该都深有感触. 人民心目中的程序员是这样的:坐在电脑面前噼里啪啦敲着键盘,运键如飞. 现实中程序员是这样的:编码5分钟,调试两小时. 今天我要给大家分享一个用WebGL开发的网站,感 ...
- Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...
- 分享一个简单的C#的通用DbHelper类(支持数据连接池)
每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 <connectionStrings> <add ...
- VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)
VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...
随机推荐
- Type difference of character literals in C and C++
Every literal (constant) in C/C++ will have a type information associated with it. In both C and C++ ...
- 【编程思想】【设计模式】【结构模式Structural】组合模式composite
Python版 https://github.com/faif/python-patterns/blob/master/structural/composite.py #!/usr/bin/env p ...
- this指针的用法和基本分析
当在不同的对象中采用this指针,就已经是在给它赋值了.对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址. this 指针是由系统自动提供的指向对象的特殊指 ...
- Apache Log4j 2 报高危漏洞,CODING 联手腾讯安全护卫软件安全
导语 12 月 9 日晚间,Apache Log4j 2 发现了远程代码执行漏洞,恶意使用者可以通过该漏洞在目标服务器上执行任意代码,危害极大. 腾讯安全第一时间将该漏洞收录至腾讯安全漏洞特征库中,C ...
- ios导出ipa文件
步骤1:选择运行设备,IOS Device 步骤2:选择Product --- Archive开始编译(注意第一步一定要选IOS Device,否则此步Archive为灰sè无法操作) 步骤3:一段 ...
- Linux 01 计算机硬件之冯诺依曼体系
1. 计算机硬件软件体系 1.1 冯诺依曼体系结构 (1) 计算机处理的数据和指令用二进制表示 (2) 按顺序执行指令 (3) 计算机硬件:运算器.控制器.储存器.输入设备和输出设备. 1.2 计算机 ...
- heap exploit about ptmalloc in glibc version 2.31
学习的一下高版本的libc的利用方式. 项目地址:https://github.com/StarCross-Tech/heap_exploit_2.31 tcache_dup 源代码: 1 #incl ...
- [V&N2020 公开赛]babybabypwn
写在开头,感谢"影二つ"师傅的指点. 题目的做法思路网上一搜一大把,这篇博客主要记录一下这道题用pwntools写srop的时候,为什么需要省略前面8个字节. 在看题目之前,先来学 ...
- urllib结合 concurrent.futures 多线程下载文件。
示例: #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 2020/12/16 10:42 # @Author:zhangmingda # ...
- Spring核心原理之IoC容器初体验(2)
本文节选自<Spring 5核心原理> 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现 ...