去年做过 android 平台类似于 lint,findbugs 检查,然后传输至 sonar,同时还有 iOS 的 infer 以及 oclint 等,同样也将执行结果传输至 sonar 展示。但是效果并不好。
所以想跟大家探讨一下,做增量的静态代码检查,有什么好的方案?
你的目标是像 sonar 那样,只要求增量代码符合要求,还是全部代码都需要符合要求?大部分静态测试工具都是针对全量,增量的不多。我们是传到 sonar 后,sonar 用质量阈检查是否符合要求,然后 jenkins 会获取质量阈是否符合要求的结果,如果不符合就 fail 。
效果不好,具体是怎么不好,可以详细说说不?
效果不好,体现在已存在的代码 warning 和 error 都非常多,达到千级别,现在根本没有开发关注,sonar 只做了一个摆设,所以才会去考虑增量做检查,这样,只考虑新代码的基础上,开发还能关注的多点。
sonar 的推荐用法不是只针对新的代码(界面上叫泄露期)进行监控和改进吗?只要新代码持续符合规范,那么只要有足够的时间,旧代码都会被新代码代替。
关于 sonar 的落地,你也可以参考下京东红色那本质量保障书里提到的方法,先找出公认需要解决的 top 10 问题重点改进,然后根据公司情况定制规则,逐步推广。
只扫描 git diff 的文件,我是在做这样的尝试,也按照简书上的一篇帖子尝试了,但是遇到点问题,很多检查项检查不出来,gradle 和 lint 的结合那块我搞的还不是很明白。
因为成本问题,我们只是在官方规则中剔除了我们觉得不适用的和调整了下优先级,还没有自行开发规则。
目前我们主要针对服务端项目,android 的涉及比较少。
哈哈 我们最近刚好在做这个 目前实现的是每个开发人员可以只对自己的增量部分进行静态扫描 结合 sonar 的质量阀控制开发人员的分支是否可以合并到当前版本开发分支 增量代码部分的获取是结合 git diff 和提交人的信息做的 指定增量代码是用 sonar 自带的 include
能详细讲一下,你们的增量静态扫描,是如何实现的吗?不太明白 sonar 的 include 的实现方式?谢谢。
sorry 拼错了 是sonar.inclusions
参考:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
在一个 sonar project 里先后扫两个分支,第二次的结果就是增量的。
我们不做增量检查,但是我们在本地建立了错误库,对于不修复或者推迟修复的,会在报告中体现出来。另外我们定制了不少规则,可以有效降低错误数量,提高准确率,让开发更专注的看问题。
我们自己开发了一套,加入了很多自定义规则,自己开发了 jenkins 插件、android studio 插件,今年准备增加 sonar 插件,方便内部集成到公司的编译平台中,另外我们在编译平台中试过 infer,太慢了放弃了。lint 在开发本地 build 的时候就会触发,所以一般不会让我们测试去提供检查,findbugs 的规则不够准确,有些问题开发都没办法改,我们都给梳理了一遍,只保留了一部分规则。另外我们内部集成了阿里的 P3C 规则,让开发自己选择是否检查。
sonar 平台确实只是一个展示, 我们是用 sonar scanner 扫描指定的分支,从而能自动得到一个差量的报告, 新增的代码问题会在右侧栏目里展示,这样实现一种增量。
你一直没接收我 qq 申请,我再问细一点吧,sonarqube 只是服务,你们如何实现去调用 sonar 的 inclusion 的呢?自己依据 sonar 写了插件吗?变更列表,我知道获取, git diff --name-only --diff-filter=ACMRTUXB HEAD~1 HEAD~0
,还是不太明白你的实现方式,能再深入的讲一点吗?谢谢了。
尝试了将差异文件写到配置文件里边,用 sonar-scanner 去执行扫描。
您好,我对您发的自定义 Android 检测规则非常感兴趣,我们公司正需要一套这样的自定义规则,能否加您微信请教一下,我的微信 gs726442240
请问楼主现在增量扫描是怎么做的