背景:对于代码的静态扫描工具,这边主要介绍sonar的一些简介和工作原理,下一篇再详细介绍soar的安装配置。
一种自动静态代码审查工具,用于检测代码中的错误、漏洞和代码异味。 可以从七个维度检测和扫描代码质量:
可靠性:发现代码中的潜在bug
安全性:发现代码中的安全漏洞
可维护性:发现代码中不符合代码编写规范的地方
单元测试:可以统计并展示单元测试的覆盖率
重复:可以统计并展示重复的行,块,密度等数据
注释:可以统计并展示代码的行数,注释的行数,占比等数据 、
复杂度:可以显示代码的圈复杂度和认知复杂度
1. 测试左移,项目过程中,问题发现的越早,解决的成本越小,通过代码静态扫描,帮助开发人减轻开发和修复的负担。
2. 规范代码编写规范,包括良好的命令,注释习惯等,可以使代码更好维护和传承,减少人员变动带来的交接成本。
CI流程:
1.开发人员在 IDE 中开发和合并代码,最好使用SonarLint插件在编辑器中接收即时反馈
2.Jenkins上配置CI流程,集成git+SonarQube 扫描器(SonarScanner)
3.开发人员推送代码到git中
4.CI工具-Jenkins触发自动构建, 执行SonarScanner
5.扫描器将结果发布到 SonarQube 服务器 6.服务器通过 SonarQube 界面、电子邮件等方式向开发人员提供反馈 7.开发人员根据扫描出的问题,评估修改相关代码
1.? 评级说明:
A-没有问题;
B-只要有一个次要问题;
C-只要有一个重要问题;
D-只要有一个严重问题;
E-只要有一个阻断级别问题;
bug:代码中的bug,原则上都需要修复
漏洞:指安全方面的问题,即可能会被黑客攻击利用的地方。比如密码在代码中明文传输
异味:主要是代码编写规范方面的问题,需要评估是否需要修改,可能会导致一些隐藏bug。比如父类和子类的命名一样,一个不变的字符串多次出现,就应该提取成一个常量,方便使用
覆盖率:单元测试覆盖率
重复块:连续十行代码重复,则定义为一个重复块
重复度:重复的代码行数和总的代码行数比例
2.?可以在质量配置,激活更多的校验或者把评估后没有必要的校验关闭
? 1.当前项目中常见阻断类(P0)bug:
资源没有关闭-Use try-with-resources or close this "xxx" in a "finally" clause.
循环没有写退出条件-Add an end condition to this loop.
2.当前项目中常见严重类(P1)bug:
Finally块中不应该写return,throw,break等-Remove this throw statement from this finally block.
随机数重复使用-Save and re-use this "Random".
0做为被除数 ?
3.当前项目中常见阻断类(P0)漏洞:
代码中密码等凭证使用硬编码-PWD' detected in this expression, review this potentially hardcoded credential.
不可信的XML应该使用本地静态DTD进行解析,否则会被XML实体攻击-Disable XML external entity (XXE)?