白盒测试 android 静态代码扫描

2024-06-19 12:18

本文主要是介绍白盒测试 android 静态代码扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

白盒测试 android 静态代码扫描

https://testerhome.com/topics/4653

https://testerhome.com/topics/4653

https://testerhome.com/topics/4653


开始做这样一个东西是为了帮助开发减少代码方面的问题,提高代码质量,减小以后上线的风险。前面看了360的那个静态代码扫描感觉很强大,但目前没这实力去做成这样,希望早日开源,多多学习。所以就先用开源的也能解决下问题。

怎么来的

开始做是想直接使用sonar自带的android静态代码扫描,但后面发现不是很好用,而且sonar对于移动端的扫描能力好像也不是很强。
后面在逛github时发现一个项目,就是关于android的代码扫描的,觉得思路不错,而且扩展性也不错,就参考了这个项目,传送门

怎么做的

我们项目是用gradle进行编译,我用的方法比较low,每次jenkins拉下代码后,直接用自己的gradle文件替换项目的文件,然后将配置文件夹config直接拷进项目。

  1. 说下gradle文件吧,主要是先引用config/quality.gradle这个gradle文件,主要是添加apply from: '../config/quality.gradle',
  2. quality.gradle这个文件定义了包括checkstyle,findbugs,pmd,lint这些扫描工具的任务,因为现在我们项目的android代码没有定义规范,所以checkstyle就没用,文件内容如下: ``` apply plugin: 'findbugs' apply plugin: 'pmd'

/*

  • Copyright 2015 Vincent Brison. *
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at *
  • http://www.apache.org/licenses/LICENSE-2.0 *
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License. */

// Add checkstyle, findbugs, pmd and lint to the check task.
check.dependsOn 'findbugs', 'pmd', 'lint'

task findbugs(type: FindBugs, dependsOn: assembleDebug) {
ignoreFailures = true #注意这里需要设置为true,否则有失败就会停止,后面的任务就不会跑了
effort = "max"
reportLevel = "low"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")
classes = files("${project.rootDir}/app/build/intermediates/classes")

source 'src'
include '/*.java'
exclude '
/gen/**'

reports {
xml.enabled = true #因为需要在jenkins中集成,所以需要开启xml
html.enabled = false #而且xml和html只能开启一个,注意关掉html哦
xml {
destination "$project.buildDir/reports/findbugs/findbugs.xml"
}
html {
destination "$project.buildDir/reports/findbugs/findbugs.html"
}
}

classpath = files()
}

task pmd(type: Pmd) {
ignoreFailures = true #注意这里需要设置为true,否则有失败就会停止,后面的任务就不会跑了
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ruleSets = []

source 'src'
include '/*.java'
exclude '
/gen/**'

reports {
xml.enabled = false #同理
html.enabled = true
xml {
destination "$project.buildDir/reports/pmd/pmd.xml"
}
html {
destination "$project.buildDir/reports/pmd/pmd.html"
}
}
}

android {
lintOptions {
abortOnError true
xmlReport false
htmlReport true
lintConfig file("${project.rootDir}/config/quality/lint/lint.xml")
htmlOutput file("$project.buildDir/reports/lint/lint-result.html")
xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")
}
}


### 怎么集成的
1. 下载`gradle`编译的插件,并且在系统管理中配置gradle的路径
2. 下载`findbugs`,`pmd`以及`lint`相应的插件
3. 插件都弄完后,在jenkins中创建任务,指定拉去代码仓库,跑下shell脚本替换指定文件,并且加入config目录
4. 指定gradle的task`clean findbugs pmd lint`
5. 如有需要指定需要什么什么跑
6. 然后再配置各个插件收集结果的xml文件,注意需要设置`Run always`,根据自己的需求进行配置
7. 设置邮件模版,将结果发给指定的开发基本就完成了
![](/photo/2016/ad1da298153d8d8d1a395a71a7d30b7d.png)### 后续
目前还处在试验阶段,开发对这东西也还不怎么习惯,毕竟以前有些人以前都不会怎么关注代码的一些质量问题,并且相关的问题信息都是英文的...不过基本还是正向的,毕竟以后代码质量优化这块肯定要做的,而且确实代码一些潜在问题可能现在看不出,但这都是隐患。另外有些规则确实也没什么卵用,所以现在需要开发在磨合过程中,逐渐完善扫描规则,让扫描不是一个摆设。





这篇关于白盒测试 android 静态代码扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075007

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局