---
title: 问题发现早，处理代价小｜测试左移——静态代码扫描SonarQube
description: 统计证明，在整个软件开发生命周期中，30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来提早发现的。今天我们来了解一下测试左移里面的其中一种方式——静态代码扫描。
image: https://blog.advance.ai/hubfs/%E6%88%AA%E5%B1%8F2023-12-08%2019.07.14-1.png
---

[![wordmark-green-01-1](https://blog.advance.ai/hs-fs/hubfs/wordmark-green-01-1.png?width=446&height=54&name=wordmark-green-01-1.png "wordmark-green-01-1")](https://www.advanceai.com.cn/)

- 核心产品 
    - - AI 生物识别验证 
                  - [活体检测](https://www.advanceai.com.cn/liveness-detection)
                  - [人脸图像比对](https://www.advanceai.com.cn/face-comparison)
                  - [人脸搜索](https://www.advanceai.com.cn/face-search)
                  - [多维依据凭证人脸信用评分](https://www.advanceai.com.cn/facial-multi-loan-score)
          - AI 文档验证 
                  - [证件识别](https://www.advanceai.com.cn/id-document-recognition)
- 解决方案 
    - [数字身份验证](https://www.advanceai.com.cn/digital-identity-verification)
    - [视频身份验证](https://www.advanceai.com.cn/video-identification)
    - [更多部署方案](https://www.advanceai.com.cn/deployment-options)
- 行业应用 
    - [金融服务](https://www.advanceai.com.cn/financial-services)
    - [银行业](https://www.advanceai.com.cn/banking)
    - [旅游出行](https://www.advanceai.com.cn/travel)
    - [共享经济](https://www.advanceai.com.cn/sharing-economy)
    - [电子商务](https://www.advanceai.com.cn/e-commerce)
    - [金融科技](https://www.advanceai.com.cn/fintech)
- ADVANCE.AI研究 
    - [市场活动](https://www.advanceai.com.cn/events)
    - [白皮书和报告](https://www.advanceai.com.cn/whitepaper-reports_1)
    - [博客中心](https://www.advanceai.com.cn/blog)
- 关于我们 
    - [公司简介](https://www.advanceai.com.cn/about-advance-ai)
    - [安全团队](https://www.advanceai.com.cn/security-team)
    - [合作伙伴](https://www.advanceai.com.cn/partnership)
    - [新闻动态](https://www.advanceai.com.cn/company-news)
    - [加入我们](https://www.advanceai.com.cn/join-us)

- 核心产品 
    - 人工智能面部识别 
          - [活体检测](https://www.advance.ai/cn/liveness-detection)
          - [人脸图像比对](https://www.advance.ai/cn/face-comparison)
          - [人脸搜索](https://www.advance.ai/cn/face-search)
          - [欺诈人脸](https://www.advance.ai/cn/fraud-face)
          - [多维数据人脸信用评分](https://www.advance.ai/cn/facial-multi-loan-score)
    - 人工智能文件识别 
          - [证件识别](https://www.advance.ai/cn/id-document-recognition)
          - [身份证打码工具](https://www.advance.ai/cn/id-card-masking)
          - [证件打码](http://demo2019.test.yongsy.net/zhixinyin/index.html)
    - 人工智能文件处理 
          - [收据识别](https://www.advance.ai/cn/receipt-recognition)
          - [银行流水账单分析工具](https://www.advance.ai/cn/bank-statement-analyser)
    - 智慧零售货架识别 
          - [智慧零售](https://www.advance.ai/cn/smart-retailing)
- 解决方案 
    - [数字身份验证](https://www.advance.ai/cn/digital-identity-verification)
    - [视频身份验证](https://www.advance.ai/cn/video-identification)
    - [联合建模](https://www.advance.ai/cn/joint-modelling)
    - [更多部署方案](https://www.advance.ai/cn/deployment-options)
- 行业应用 
    - [金融服务](https://www.advance.ai/cn/financial-services)
    - [银行业](https://www.advance.ai/cn/banking)
    - [数字支付](https://www.advance.ai/cn/payment)
    - [医疗保健](https://www.advance.ai/cn/healthcare)
    - [旅游出行](https://www.advance.ai/cn/travel)
    - [共享经济](https://www.advance.ai/cn/sharing-economy)
    - [电子商务](https://www.advance.ai/cn/e-commerce)
    - [金融科技](https://www.advance.ai/cn/fintech)
    - [智慧物联](https://www.advance.ai/cn/internet-of-things)
- 领创研究 
    - [分享会](https://www.advance.ai/cn/events)
- 关于我们 
    - [公司简介](https://www.advance.ai/cn/about-advance-ai)
    - [安全团队](https://www.advance.ai/cn/security-team)
    - [新闻动态](https://www.advance.ai/cn/company-news)
    - [加入我们](https://www.advance.ai/cn/join-us)
    - [联系我们](https://www.advance.ai/cn/contact-us)

免费试用

中

- [EN](https://advance.ai/)

![](https://blog.advance.ai/hubfs/%E6%88%AA%E5%B1%8F2023-12-08%2019.07.14-1.png)

# 问题发现早，处理代价小｜测试左移——静态代码扫描SonarQube

 Published by [Sample HubSpot User](https://blog.advance.ai/zh-cn/author/sample-hubspot-user) on  Dec 8, 2023, 7:03:02 PM

**作者：华婧彤  职位：QA工程师**

## **一、背景**

### **什么是测试左移？**

●测试左移是要尽早的发现和预防问题，使用必要的测试手段在软件开发周期的早些阶段发现问题。

●测试左移的方式有静态代码扫描、CodeReview、代码提交行为分析等。

我们知道问题发现的越早，解决的成本就越小。统计证明，在整个软件开发生命周期中，30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来提早发现的。今天我们来了解一下测试左移里面的其中一种方式——静态代码扫描。

## **二、静态扫描介绍**

### **什么是静态扫描？**

不运行代码的方式下，通过词法分析、语法分析、控制流、数据分析等技术对程序代码进行扫描，验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

### **静态代码扫描的优势**

1. 可以提前发现问题，提高软件可靠性并节省软件开发和测试成本。
2. 提高研发效率，帮助开发人员更专注于分析和解决代码设计缺陷，快速定位代码隐藏错误和缺陷。
3. CodeReview需要额外的人工介入，其质量参差不齐也无法得到保障，而且高质量的CodeReview也会花费较多时间，成本较高。静态代码扫描以一种低成本的方式，自动发现代码中存在的资损风险，从而保障代码质量。

### **工具对比**

**![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-46-51-6396-AM.png?width=633&height=1244&name=image-png-Dec-08-2023-10-46-51-6396-AM.png)**

 

接下来我们来了解一下SonarQube～

 

## **三、****SonarQube入门介绍**

### **SonarQube简介**

●SonarQube是一款静态代码扫描工具，用于检测代码中的错误，漏洞和代码异味。

●支持Java、Python、PHP、JavaScript、CSS等25种以上的语言。

●多维度分析代码：代码量、安全隐患、编写规范隐患、重复度、复杂度、测试覆盖率、代码增量等。

●支持和CI/CD环境进行集成（如Gitlab,Github,Jenkins等）能够持续进行代码质量检测。

●支持集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量。

### **SonarQube组成**

1. SonarQube服务端：

webserver（配置和管理sonar）

searchserver（搜索结果返回给sonarUI）

ComplateEngineserver

（计算服务 将分析结果入库）

2. SonarScanner扫描工具，类似客户端

（可以有多个）

3. Sonarqube对应的数据库：数据库 存放配置

4. 针对于不同语言的扫描插件

 

**![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-50-43-5423-AM.png?width=627&height=517&name=image-png-Dec-08-2023-10-50-43-5423-AM.png)**

### **集成sonar的开发流程**

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-51-26-9638-AM.png?width=638&height=530&name=image-png-Dec-08-2023-10-51-26-9638-AM.png)

1. 开发人员可在IDE工具中安装SonarLint插件并设置sonar服务地址，可在编辑器中接收即时反馈，及时修改问题。

2. 开发人员将他们的代码推送到对应的代码管理的平台。

3. 组织的持续集成 (CI) 工具检查、构建和运行单元测试，集成的 SonarQube 扫描仪分析结果（我们可以通过设置sonar质量门，扫描结果不符合阀值要求，当pipeline在运行的时扫描结果会失败）

4. 扫描器将结果发布到 SonarQube 服务器，该服务器通过 SonarQube 界面、电子邮件、IDE 内通知（通过 SonarLint）以及对拉取或合并请求的修饰向开发人员提供反馈。

5. 开发者对扫描出来的问题进行解决、评论、跟踪等。

## **四、功能介绍**

**4.1 扫描的规则**

#### **a.内置规则**

Sonar内嵌了Sonar way的扫描规则，不同语言（比如Java/Python/C#等）具有不同规则。

#### **b.集成插件规则**

Sonar集成了pmd/findbugs/checkstyle插件，对规则集进行补充。

成功安装插件后，就可以在仓库中看到以下规则：

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-54-27-5350-AM.png?width=630&height=732&name=image-png-Dec-08-2023-10-54-27-5350-AM.png)

 

**①使用不同规则集进行对比扫描**

a.使用Sonar内置的规则（Sonar way）进行扫描

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-55-00-5434-AM.png?width=637&height=195&name=image-png-Dec-08-2023-10-55-00-5434-AM.png)

 

b.仅使用pmd+findbugs+checkstyle规则进行扫描

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-55-28-5548-AM.png?width=628&height=102&name=image-png-Dec-08-2023-10-55-28-5548-AM.png)

 

**②问题对比**

a.Sonar内置规则检查出的空指针报错

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-56-17-0320-AM.png?width=627&height=564&name=image-png-Dec-08-2023-10-56-17-0320-AM.png)

 

b.findbugs插件检查出的空指针报错（对比Sonar内置规则发现的问题，内置规则给出了更多的修改建议）

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-56-47-6766-AM.png?width=625&height=426&name=image-png-Dec-08-2023-10-56-47-6766-AM.png)

 

c.PMD规则检查出的代码规范以及注释问题（会新增很多Sonar内置规则扫不出的问题）

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-57-21-4432-AM.png?width=616&height=522&name=image-png-Dec-08-2023-10-57-21-4432-AM.png)

#### **c.自定义开发规则**

Sonar还支持自定义规则开发，开发适用于自己项目的检查规则：

①开发步骤见 Writing Custom Java Rules 101，这是官方提供的 sonar-java 下面的指导文档，简述了怎么开发一个 Java 自定义规则

②下载的模版项目完成自定义开发后

a.执行编译 mvn clean package

b.把生成的文件放在 $SONAR\_HOME/extensions/plugins 目录，重启 SonarQube

③【代码规则】对应左边栏【仓库】中会展示新增了导入的规则

### **4.2配置规则集合**

我们可以通过自定义扫描规则集以及异常的等级来定制检测问题，可以大大减少误报，更高效的查看结果报告并进行处理。

①新创建规则集：【质量配置】-》【创建】

也可以对已存在的规则配置进行扩展以及复制规则一份进行修改。

②创建成功后，可对该规则集添加规则、设置应用的项目。

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-10-59-25-8647-AM.png?width=629&height=863&name=image-png-Dec-08-2023-10-59-25-8647-AM.png)

 

③添加更多规则

点击其中一条规则的“激活按钮”，弹出确认对话框，在对话框中可以修改规则的异常等级。

（也可批量修改”按钮可以将当前页过滤出来的所有规则批量应用到当前质量配置中）

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-11-00-01-7472-AM.png?width=619&height=571&name=image-png-Dec-08-2023-11-00-01-7472-AM.png)

 

### **4.3质量阈**

质量阈是对项目指标进行度量的条件，项目必须达到所有条件才能算整体上通过

可以自定义进行设置质量阈（重复率，可靠性，可维护性，安全率、覆盖率等）

 

![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-11-00-43-8477-AM.png?width=639&height=549&name=image-png-Dec-08-2023-11-00-43-8477-AM.png)

 

### **4.4多维度分析代码**

**![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-11-01-04-5657-AM.png?width=638&height=829&name=image-png-Dec-08-2023-11-01-04-5657-AM.png)**

 

①代码规范：sonar可以通过PMD,CheckStyle,Findbugs等代码规则检测工具规范代码编写。

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

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

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

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

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

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

 

### **4.5问题处理&跟踪**

点击对应问题可进入问题详情页面，会看到问题源码，sonarQube会根据代码提交信息这自动将任务分配给相关人员，若该用户设置了检查结果提示，在执行代码检查完成后，会自动收到邮件通知，当然你也可以将这个问题指派给其他人处理。

 

**![](https://blog.advance.ai/hs-fs/hubfs/image-png-Dec-08-2023-11-02-37-7208-AM.png?width=625&height=854&name=image-png-Dec-08-2023-11-02-37-7208-AM.png)**

 

 

 

 

 

[Back to Blog](https://blog.advance.ai/zh-cn)

## Related Articles

<https://blog.advance.ai/zh-cn/警惕-ai-欺诈代理身份攻击正进入自主进化时代>

## [警惕 AI 欺诈代理：身份攻击正进入自主进化时代](https://blog.advance.ai/zh-cn/警惕-ai-欺诈代理身份攻击正进入自主进化时代)

 随着生成式 AI 的快速普及，数字欺诈正在悄然发生质变。

[Read More](https://blog.advance.ai/zh-cn/警惕-ai-欺诈代理身份攻击正进入自主进化时代)

## [ADVANCE.AI 副总裁崔琦接受钛媒体专访，分享新航海时代下出海企业如何兼顾“增长”与“合规”](https://blog.advance.ai/zh-cn/interview-0)

 作者：ADVANCE.AI

[Read More](https://blog.advance.ai/zh-cn/interview-0)

<https://blog.advance.ai/zh-cn/从数字编码到生物身份墨西哥curp改革真能终结欺诈吗-clone>

## [从数字编码到生物身份，墨西哥CURP改革真能终结欺诈吗？ (Clone)](https://blog.advance.ai/zh-cn/从数字编码到生物身份墨西哥curp改革真能终结欺诈吗-clone)

 作者：ADVANCE.AI

[Read More](https://blog.advance.ai/zh-cn/从数字编码到生物身份墨西哥curp改革真能终结欺诈吗-clone)

[![wordmark-white-01](https://blog.advance.ai/hs-fs/hubfs/AAI%20logo/wordmark-white-01.png?width=3809&name=wordmark-white-01.png "wordmark-white-01")](http://demo2019.test.yongsy.net/zhixincn/index.html)

- 友情链接 
    - [领创集团](https://www.advancegroup.com.cn/)
- 核心产品 
    - [AI 生物识别验证](https://www.advanceai.com.cn/liveness-detection)
    - [AI 文档验证](https://www.advanceai.com.cn/id-document-recognition)
- 解决方案 
    - [星鉴解决方案](https://www.advanceai.com.cn/xingjian)
    - [视频身份验证](https://www.advanceai.com.cn/video-identification)
    - [更多部署方案](https://www.advanceai.com.cn/deployment-options)
- 行业应用 
    - [金融服务](https://www.advanceai.com.cn/financial-services)
    - [银行业](https://www.advanceai.com.cn/banking)
    - [旅游出行](https://www.advanceai.com.cn/travel)
    - [共享经济](https://www.advanceai.com.cn/sharing-economy)
    - [电子商务](https://www.advanceai.com.cn/e-commerce)
    - [金融科技](https://www.advanceai.com.cn/fintech)
- 关于我们 
    - [公司简介](https://www.advanceai.com.cn/about-advance-ai)
    - [安全团队](https://www.advanceai.com.cn/security-team)
    - [合作伙伴](https://www.advanceai.com.cn/partnership)
    - [新闻动态](https://www.advanceai.com.cn/company-news)
    - [加入我们](https://www.advanceai.com.cn/join-us)

© 2024 ADVANCE.AI. 请参阅领创智信的[服务条款](https://beta.advance.ai/terms-of-service)和[隐私和安全声明](https://beta.advance.ai/privacy-security-statement)

[![Contact Icon](https://blog.advance.ai/hs-fs/hubfs/raw_assets/public/AdvanceIntelligence_October2020/images/icon1.png?width=180&name=icon1.png "Contact Icon")](https://info.advance.ai/cn-free-trial)

[![Message Icon](https://blog.advance.ai/hs-fs/hubfs/raw_assets/public/AdvanceIntelligence_October2020/images/icon2.png?width=180&name=icon2.png "Message Icon")](https://info.advance.ai/zh-cn/advance.ai-lianxiwomen)

![Back To Top](https://blog.advance.ai/hubfs/raw_assets/public/AdvanceIntelligence_October2020/images/icon4.png)