sonar静态扫描maven项目为啥还要编译class文件

问题

sonar不是只扫描静态代码吗,扫描maven项目为啥还要编译

简答

先说说静态扫描大概的定义

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等(摘自网上)

静态分析中有这个一个分析方法:

  • 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的数据域特性。

sonar 扫描java从4.x起已经自己定义了规则“sonarjava” (备注:findbug等插件需要自己额外)用最先进的技术(模式匹配,数据流分析)来分析代码并查找代码气味,错误和安全漏洞。Sonarqube分析源代码,而不分析编译器生成的代码。但可能会结合编译后的class代码更改/优化某些位置,所以扫描java maven项目,class文件能提供代码的依赖关系,如果没有提供,数据将丢失部分,出现更多的假阴性(应报告但未报告的问题)

当然maven项目下,不提供class文件也不会报错,也能扫描,而只会在sonar前端提示以下warning:

Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries property.

sonarjava 介绍
https://www.sonarsource.com/java/

所以sonar静态扫描maven项目需要编译后的class文件是提高准确性!

PMD、FindBug、checkstyle、sonar这些代码检查工具的区别 详见另外的文章
https://editor.csdn.net/md/?articleId=116450412

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值