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

不二家的小球迷 · February 27, 2018 · Last by 向阳 replied at January 02, 2019 · 3637 hits

背景

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

增量

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

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

你的目标是像 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

Author only
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去执行扫描。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up