静态代码扫描

一、 Sonar简介

Sonar是一个用来管理源码质量的开源平台,可以从多维度进行静态代码检测。利用其可扩展性,sonar平台通过扩展插件的方式,支持不同测试工具、代码分析工具以及持续集成工具的集成,从而实现多种编程语言的代码质量检查和管理。正是因为它可以实现多种变成语言的代码检测,所以相对单一语言的检查工具或平台来看,稍显厚重,相对的可扩展性也就更强大。
sonar作为一个代码质量管理和检测平台,既可以单独完成代码质量检查和结果分析,也可以通过插件获取其他静态代码检测工具的检查结果进行分析,因此,我们目前已有的Jenkins上实现的静态代码检查,通过插件和环境的配置,可以实现将检查结果集成到sonar平台,还可以将不同检测工具(Findbugs、OCLint、ESLint)的检查结果的统一化

代码扫描工具对比

工具名称

语言支持

类型

开源/付费

主要特点

spotbugs/findbugs

java

静态分析

开源

使用静态分析查找 Java 代码中的错误

TScanCode

C/C++、C#、Lua

静态扫描

开源

助力开发与测试人员从代码层面挖掘问题,支持自定义配置检查项

pclint

C/C++

静态分析

付费

检查 C/C++ 源代码并发现错误、冗余代码等

Cppcheck

C/C++

静态分析

开源

提供独特的代码分析来检测错误,并专注于检测未定义的行为和危险的编码结构

Klocwork

C、C++、C#、Java、JavaScript

静态分析

付费

可识别软件安全性、质量和可靠性问题

Coverity Prevent

C/C++、C#、Java

静态分析

付费

专长于最准确地找到最严重和最难检测的缺陷

ESLint

JavaScript、Node.js

代码检查

开源

用于寻找有问题的模式或代码,不依赖于具体的编码风格

Flake8

Python

代码检查

开源

综合 PyFlakes、pep8 和 McCabe,提供静态检查和代码复杂度分析功能

Pylint

Python

代码检查

开源

检查 Python 代码错误、执行编码标准并查找代码异味

PhpMetrics

PHP

代码分析

开源

分析 PHP 代码并提供关于复杂性、依赖关系、违规等的报告

golangci-lint

Go

Lint 聚合器

开源

速度快,易于集成和使用,支持 go modules

sonarqube

多种

静态代码分析

开源

支持多种语言,能够集成在 IDE、Jenkins、Git 等服务中,提供代码质量分析报告

ESLint

JavaScript、Node.js

代码检查

开源

用于寻找有问题的模式或代码,不依赖于具体的编码风格

二、 Sonar的核心

SonarQube主要由以下部分组成:

SonarQube 组成

?

SonarQube Server

Sonar服务

SonarQube Database

数据库本自带H2的数据库

SonarQube Plugins

插件

SonarQube Scanner

扫描器

其中,SonarQube Scanner就是SonarCube用来进行静态代码检查的工具,通过它,将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。和我们目前在Jenkins上使用的ESLint等工具是一样的,只是在Sonar这里使用是将ESLint这些工具作为插件使用的。

SonarQube检测的核心:

SonarQube 检测的核心

检查代码是否遵循编程标准

命名规范,编写的规范等

检查设计存在的(潜在)缺陷

检测代码存在的缺陷

检测代码的重复代码量

展示项目中存在大量复制粘贴的代码

检测代码中注释的程度

是否源码注释过多或者太少

检测代码中包、类之间的关系

分析类之间的关系是否合理,复杂度是否合适

官网上给出的Sonar会检测出来的代码七大问题:

代码七大问题

糟糕的复杂度分布

文件、类、方法等复杂度过高

重复

大量的复制粘贴代码的出现

缺乏单元测试

Sonar会统计并展示单元测试覆盖率

没有代码标准

通过PMD,CheckStyle,Findbugs等这些代码规则检测工具规范代码编写

没有足够的或者过多的注释

避免过多的注释降低代码可读性

潜在的bug

通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug

糟糕的设计

找出循环,展示包与包、类与类之间的相互依赖关系,检测自定义的架构规则

三、 Sonar的优势

Sonar的分析器在分析源码的时候,提供了技术债务、代码覆盖率、代码复杂度、已检测到的问题等。检查结果和其他静态代码检测工具是类似的,除了可以检测出bug外,还会包括可能的bug,可能引起bug的问题等等。简单总结Sonar的优点:

1. 支持多种源码检测:
Sonar支持多种语言的检测,包括J ava、Python、Groovy、C、C++、JS等几十种编程语言的检测。
2. 报告格式清晰统一:
Sonar在对检查结果进行分析后,会输出一个统一格式的分析结果,我们可以借助这一点实现多种编程语言的检查结果的统一化(我们目前Android、IOS、RN使用的不同检查工具的检查结果形式都是不同的)。
Sonar检查结果会展示在一个动态的页面,通过不同的高亮方式标记不同的文件,清晰明显的标记告知查看者检查结果。而且在这个动态页面,还可以容易准确的查看项目的历史检测详情,便于对比。用图表和可视化的形式随着时间跟踪项目质量,还可以针对某个精确的时间放大分析结果,做更多的粒度分析。
3. 代码内可自定义规则:
如果我们需要在Sonar上直接进行静态代码检查,也是可以增加自定义检查规则的,而Sonar的检查结果,自然也会将自定义的检查结果一同进行分析,实现更加定制化的代码质量管理。
Sonar在标准设定后,会强制性进行代码检测,代码必须通过所有检查项的检查。
4. 支持本地检测:
SonarQube平台以源码作为输入。源码可以从IDE输入或者从SCM中提取。对于大多数流行的IDE,都有相应的SonarQube插件,使代码分析能够更加容易地在IDE中执行。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值