当前位置:首页 > 经验 >

find扫描软件的使用方法(哪种扫描软件最好用)

来源:原点资讯(www.yd166.com)时间:2022-11-01 01:52:03作者:YD166手机阅读>>

可以看到确实只扫描了一个文件。那么扫描到底使用了哪些输入数据呢,我们可以通过扫描结果的提示清楚看到:

find扫描软件的使用方法,哪种扫描软件最好用(13)

这里我们能看到很多有用的信息:

  • 源码目录列表,包含了工程中的Java目录,res目录,以及编译过程中生成的一些类目录;
  • 需要分析的目标Class集合,为编译后的Build目录下的当前Java文件对应的Class文件;
  • Aux Classpath Entries,表示分析上面的目标文件需要用到的类路径。

所以,根据IDEA的扫描结果来看,我们在做增量扫描的时候需要解决上面这几个属性的获取。在前面我们分析的属性是Gradle在FindBugs lib的基础上,定义的一套对应的Task属性。真正的Finbugs属性我们可以通过[官方文档]或者源码中查到。

配置AuxClasspath

前文提到,ClassPath是用来分析目标文件需要用到的相关依赖Class,但本身并不会被分析,所以我们需要尽可能全的找到所有的依赖库,否则在扫描的时候会报依赖的类库找不到。

FindBugs增量扫描误报优化

对于增量文件扫描,参与的少数文件扫描在某些模式规则上可能会出现误判,但是全量扫描不会有问题,因为参与分析的目标文件是全集。举一个例子:

静态变量buildTime会被认为应该加上Final,但是其实其他类会对这个变量赋值。如果单独扫描类A文件,就会报缺陷BUG_TYPE_MS_SHOULD_BE_FINAL。我们通过FindBugs-IDEA插件来扫描验证,也同样会有一样的问题。要解决此类问题,需要找到谁依赖了类A,并且一同参与扫描,同时也需要找出类A依赖了哪些文件,简单来说:需要找出与类A有直接关联的类。为了解决这个问题,我们通过ASM来找出相关的依赖,具体如下:

通过以上方式,我们可以解决一些增量扫描时出现的误报情况,相比IDEA工具,我们更进一步降低了扫描部分文件的误报率。

CheckStyle增量扫描

相比而言,CheckStyle的增量扫描就比较简单了。CheckStyle对源码扫描,根据[官方文档]各个属性的描述,我们发现只要指定Source属性的值就可以指定扫描的目标文件。

优化结果数据

经过全量扫描和增量扫描的优化,我们整个扫描效率得到了很大提升,一次PR构建扫描效率整体提升50% 。优化数据如下:

find扫描软件的使用方法,哪种扫描软件最好用(14)

落地与沉淀

扫描工具通用性

解决了扫描效率问题,我们想怎么让更多的工程能低成本的使用这个扫描插件。对于一个已经存在的工程,如果没有使用过静态代码扫描,我们希望在接入扫描插件后续新增的代码能够保证其经过增量扫描没有问题。而老的存量代码,由于代码量过大增量扫描并没有效率上的优势,我们希望可以使用全量扫描逐步解决存量代码存在的问题。同时,为了配置工具的灵活,也提供配置来让接入方自己决定选择接入哪些工具。这样可以让扫描工具同时覆盖到新老项目,保证其通用。所以,要同时支持配置使用增量或者全量扫描任务,并且提供灵活的选择接入哪些扫描工具

扫描完整性保证

前面提到过,在FindBugs增量扫描可能会出现因为参与分析的目标文件集不全导致的某类匹配规则误报,所以在保证扫描效率的同时,也要保证扫描的完整性和准确性。我们的策略是以增量扫描为主,全量扫描为辅,PR提交使用增量扫描提高效率,在CI配置Daily Build使用全量扫描保证扫描完整和不遗漏

我们在自己的项目中实践配置如下:

我们希望扫描插件可以灵活指定增量扫描还是全量扫描以应对不同的使用场景,比如已存在项目的接入、新项目的接入、打包时的检测等。

执行脚本示例:

希望一次任务可以暴露所有扫描工具发现的问题,当某一个工具扫描到问题后不终止任务,如果是本地运行在发现问题后可以自动打开浏览器方便查看问题原因。

为了保证提交的PR不会引起打包问题影响包的交付,在PR时触发的任务实际为打包任务,我们将静态代码扫描任务挂接在打包任务中。由于我们的项目是多Flavor构建,在CI上我们将触发多个Job同时执行对应Flavor的增量扫描和打包任务。同时为了保证代码扫描的完整性,我们在真正的打包Job上执行全量扫描。

总结与展望

本文主要介绍了在静态代码扫描优化方面的一些思路与实践,并重点探讨了对Lint、FindBugs、CheckStyle增量扫描的一些尝试。通过对扫描插件的优化,我们在代码扫描的效率上得到了提升,同时在实践过程中我们也积累了自定义Lint检测规则的方案,未来我们将配合基础设施标准化建设,结合静态扫描插件制定一些标准化检测规则来更好的保证我们的代码规范以及质量。

参考资料

  • CheckStyle插件文档
  • FindBugs插件文档
  • Android Lint 开发介绍
  • Lint增量扫描
  • FindBugs配置属性介绍
  • 美团外卖Android Lint代码检查实践
  • Gradle源码
  • 静态代码检测工具对比
  • Android Gradle 插件源码

作者简介

鸿耀,美团餐饮生态技术团队研发工程师。

栏目热文

find的用法归纳(find后加名词的用法)

find的用法归纳(find后加名词的用法)

find命令是我们日常工作中比较常用的Linux命令。全面的掌握这个命令可以使很多操作达到事半功倍的效果。如果对find...

2022-11-01 02:35:24查看全文 >>

find怎么用(find的方式)

find怎么用(find的方式)

概述find命令是linux下一个强大的查找命令。与locate命令相比,它需要遍历磁盘文件,因此查找速度较慢,但正因如...

2022-11-01 02:26:51查看全文 >>

find正确使用方法(find使用技巧大全)

find正确使用方法(find使用技巧大全)

Linux是一个“一切皆文件的系统”,Linux中标识文件不通过后缀。find命令,不指定查找目录的情况下是针对整个文件...

2022-11-01 02:23:18查看全文 >>

finder在哪里打开(finder在哪打开)

finder在哪里打开(finder在哪打开)

Finder中文名“访达”,应该是Mac中使用最多的程序了,可是对于这么一个需要频繁使用的软件,你真的会用了吗?下面小编...

2022-11-01 02:21:08查看全文 >>

find 怎么用(find怎么使用教程)

find 怎么用(find怎么使用教程)

一 exec 和args 结合find命令区别find 和 exec 、 xargs 搭配使用也是有区别的: 1、exe...

2022-11-01 02:08:58查看全文 >>

如何使用find软件(find软件操作说明)

如何使用find软件(find软件操作说明)

作为一名评测编辑,体验各种新款手机是我工作中的一大乐趣。而折叠屏手机作为近年手机市场中的发展趋势,我对它所带来的新奇体验...

2022-11-01 02:11:10查看全文 >>

find查找软件包(find 查找最新的文件)

find查找软件包(find 查找最新的文件)

IT之家 6 月 20 日消息 据外媒 XDA 论坛消息,近日谷歌服务更新了 21.24.13 Beta 版本,外媒在其...

2022-11-01 02:00:45查看全文 >>

find软件是干什么的(find软件购买一次会持续收费吗)

find软件是干什么的(find软件购买一次会持续收费吗)

去年年末,OPPO发布了自己的首款折叠屏产品OPPO Find N。不论是强悍的产品力还是相对亲民的定价,都贯彻了“从尝...

2022-11-01 02:10:58查看全文 >>

finder软件怎么关闭(finder怎么退出)

finder软件怎么关闭(finder怎么退出)

在macOS上,Finder是您启动所有应用程序,管理和共享文件以及执行各种其他操作的中心。如果您想提高Mac的生产力,...

2022-11-01 02:35:49查看全文 >>

手机find软件的使用方法(手机日常生活实用软件)

手机find软件的使用方法(手机日常生活实用软件)

折叠屏手机对于不少人来说,还是一个新鲜的产物,更多是作为一个尝鲜产品。OPPO首款OPPO Find N折叠屏手机已经发...

2022-11-01 01:53:42查看全文 >>

文档排行