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

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

背景

去年做过 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

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

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