作者:华婧彤 职位:QA工程师
一、背景
什么是测试左移?
●测试左移是要尽早的发现和预防问题,使用必要的测试手段在软件开发周期的早些阶段发现问题。
●测试左移的方式有静态代码扫描、CodeReview、代码提交行为分析等。
我们知道问题发现的越早,解决的成本就越小。统计证明,在整个软件开发生命周期中,30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来提早发现的。今天我们来了解一下测试左移里面的其中一种方式——静态代码扫描。
二、静态扫描介绍
什么是静态扫描?
不运行代码的方式下,通过词法分析、语法分析、控制流、数据分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
静态代码扫描的优势
- 可以提前发现问题,提高软件可靠性并节省软件开发和测试成本。
- 提高研发效率,帮助开发人员更专注于分析和解决代码设计缺陷,快速定位代码隐藏错误和缺陷。
- CodeReview需要额外的人工介入,其质量参差不齐也无法得到保障,而且高质量的CodeReview也会花费较多时间,成本较高。静态代码扫描以一种低成本的方式,自动发现代码中存在的资损风险,从而保障代码质量。
工具对比
接下来我们来了解一下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. 针对于不同语言的扫描插件
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插件,对规则集进行补充。
成功安装插件后,就可以在仓库中看到以下规则:
①使用不同规则集进行对比扫描
a.使用Sonar内置的规则(Sonar way)进行扫描
b.仅使用pmd+findbugs+checkstyle规则进行扫描
②问题对比
a.Sonar内置规则检查出的空指针报错
b.findbugs插件检查出的空指针报错(对比Sonar内置规则发现的问题,内置规则给出了更多的修改建议)
c.PMD规则检查出的代码规范以及注释问题(会新增很多Sonar内置规则扫不出的问题)
c.自定义开发规则
Sonar还支持自定义规则开发,开发适用于自己项目的检查规则:
①开发步骤见 Writing Custom Java Rules 101,这是官方提供的 sonar-java 下面的指导文档,简述了怎么开发一个 Java 自定义规则
②下载的模版项目完成自定义开发后
a.执行编译 mvn clean package
b.把生成的文件放在 $SONAR_HOME/extensions/plugins 目录,重启 SonarQube
③【代码规则】对应左边栏【仓库】中会展示新增了导入的规则
4.2配置规则集合
我们可以通过自定义扫描规则集以及异常的等级来定制检测问题,可以大大减少误报,更高效的查看结果报告并进行处理。
①新创建规则集:【质量配置】-》【创建】
也可以对已存在的规则配置进行扩展以及复制规则一份进行修改。
②创建成功后,可对该规则集添加规则、设置应用的项目。
③添加更多规则
点击其中一条规则的“激活按钮”,弹出确认对话框,在对话框中可以修改规则的异常等级。
(也可批量修改”按钮可以将当前页过滤出来的所有规则批量应用到当前质量配置中)
4.3质量阈
质量阈是对项目指标进行度量的条件,项目必须达到所有条件才能算整体上通过
可以自定义进行设置质量阈(重复率,可靠性,可维护性,安全率、覆盖率等)
4.4多维度分析代码
①代码规范:sonar可以通过PMD,CheckStyle,Findbugs等代码规则检测工具规范代码编写。
②潜在的bug:sonar可以通过PMD,Findbugs等代码规则检测工具检测出潜在的缺陷。
③重复:显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。
④注释不足或者过多:没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
⑤复杂度分布:文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
⑥缺乏单元测试:sonar可以很方便地统计并展示单元测试覆盖率。
⑦糟糕的设计:通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测耦合。
4.5问题处理&跟踪
点击对应问题可进入问题详情页面,会看到问题源码,sonarQube会根据代码提交信息这自动将任务分配给相关人员,若该用户设置了检查结果提示,在执行代码检查完成后,会自动收到邮件通知,当然你也可以将这个问题指派给其他人处理。