问答 android 代码和 iOS 代码的增量检查有什么好的方案吗?

不二家 · 2018年02月27日 · 最后由 重口味 回复于 2021年01月04日 · 7582 次阅读

背景

去年做过 android 平台类似于 lint,findbugs 检查,然后传输至 sonar,同时还有 iOS 的 infer 以及 oclint 等,同样也将执行结果传输至 sonar 展示。但是效果并不好。

增量

所以想跟大家探讨一下,做增量的静态代码检查,有什么好的方案?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 27 条回复 时间 点赞

你的目标是像 sonar 那样,只要求增量代码符合要求,还是全部代码都需要符合要求?大部分静态测试工具都是针对全量,增量的不多。我们是传到 sonar 后,sonar 用质量阈检查是否符合要求,然后 jenkins 会获取质量阈是否符合要求的结果,如果不符合就 fail 。

效果不好,具体是怎么不好,可以详细说说不?

对 陈恒捷 回复

效果不好,体现在已存在的代码 warning 和 error 都非常多,达到千级别,现在根本没有开发关注,sonar 只做了一个摆设,所以才会去考虑增量做检查,这样,只考虑新代码的基础上,开发还能关注的多点。

对 不二家 回复

我想到 你是不是可以把旧的代码模块忽略掉只扫描新的模块。虽然不能完全 满足你的需求

对 不二家 回复

sonar 的推荐用法不是只针对新的代码(界面上叫泄露期)进行监控和改进吗?只要新代码持续符合规范,那么只要有足够的时间,旧代码都会被新代码代替。

关于 sonar 的落地,你也可以参考下京东红色那本质量保障书里提到的方法,先找出公认需要解决的 top 10 问题重点改进,然后根据公司情况定制规则,逐步推广。

只扫描 git diff 的文件,我是在做这样的尝试,也按照简书上的一篇帖子尝试了,但是遇到点问题,很多检查项检查不出来,gradle 和 lint 的结合那块我搞的还不是很明白。

对 陈恒捷 回复

还想请教下,你们肯定也实践了自定义规则吧。对于 android lint 方面的自定义规则,你们有更具体的落地方案吗?

对 不二家 回复

因为成本问题,我们只是在官方规则中剔除了我们觉得不适用的和调整了下优先级,还没有自行开发规则。

目前我们主要针对服务端项目,android 的涉及比较少。

哈哈 我们最近刚好在做这个 目前实现的是每个开发人员可以只对自己的增量部分进行静态扫描 结合 sonar 的质量阀控制开发人员的分支是否可以合并到当前版本开发分支 增量代码部分的获取是结合 git diff 和提交人的信息做的 指定增量代码是用 sonar 自带的 include

对 AngryTester 回复

能详细讲一下,你们的增量静态扫描,是如何实现的吗?不太明白 sonar 的 include 的实现方式?谢谢。

对 AngryTester 回复

可否方便加一个 qq 详细聊一下?如果方便加我 872489864

仅楼主可见
对 AngryTester 回复

明天加你,仔细的咨询一下。感觉遇到了导师。谢谢

在一个 sonar project 里先后扫两个分支,第二次的结果就是增量的。

对 Nova 回复

我是这么理解的是,sonar 只是一个展示比如 lint-result.xml 等检查结果的,先后扫两个分支是什么意思?

我们不做增量检查,但是我们在本地建立了错误库,对于不修复或者推迟修复的,会在报告中体现出来。另外我们定制了不少规则,可以有效降低错误数量,提高准确率,让开发更专注的看问题。

对 simple 回复

感觉你们新建了服务展示检查结果,未借助 sonar 吗

对 不二家 回复

我们自己开发了一套,加入了很多自定义规则,自己开发了 jenkins 插件、android studio 插件,今年准备增加 sonar 插件,方便内部集成到公司的编译平台中,另外我们在编译平台中试过 infer,太慢了放弃了。lint 在开发本地 build 的时候就会触发,所以一般不会让我们测试去提供检查,findbugs 的规则不够准确,有些问题开发都没办法改,我们都给梳理了一遍,只保留了一部分规则。另外我们内部集成了阿里的 P3C 规则,让开发自己选择是否检查。

对 simple 回复

有个疑问,lint 在 build 的时候触发,是全量检查吗?会不会太慢呢?

对 不二家 回复


sonar 平台确实只是一个展示, 我们是用 sonar scanner 扫描指定的分支,从而能自动得到一个差量的报告, 新增的代码问题会在右侧栏目里展示,这样实现一种增量。

对 AngryTester 回复

你一直没接收我 qq 申请,我再问细一点吧,sonarqube 只是服务,你们如何实现去调用 sonar 的 inclusion 的呢?自己依据 sonar 写了插件吗?变更列表,我知道获取, git diff --name-only --diff-filter=ACMRTUXB HEAD~1 HEAD~0,还是不太明白你的实现方式,能再深入的讲一点吗?谢谢了。

对 不二家 回复

你好,我也有同样的疑问,关于如何实现去调用 sonar 的 inclusion,请问你有解决办法了吗?

后来我没通过此实践了。

对 不二家 回复

那你现在用的什么方式去增量扫描呢?

尝试了将差异文件写到配置文件里边,用 sonar-scanner 去执行扫描。

对 simple 回复

您好,我对您发的自定义 Android 检测规则非常感兴趣,我们公司正需要一套这样的自定义规则,能否加您微信请教一下,我的微信 gs726442240

请问楼主现在增量扫描是怎么做的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。