github 检查代码质量_Android(8): 代码质量检查

代码质量检查是持续性的工作,检查的两个基本工具是FindBugs和CheckStyle。在实际项目中,检查的工作由测试人员实施,开发人员进行配合,形成日常性的工作。每天会对最新的代码进行检查,使用脚本(一般是测试用python写的)对检查结果进行解析,定位到代码行并根据SVN记录关联责任人,输出邮件,开发则根据邮件结果进行修复。

对于代码进行质量检查,在刚开始会有一些抵触情况。有的是之前没有接触过,有的是觉得需求已经很紧了,还要花时间解决这些问题。还有一方面原因是一刚开始扫描出来的问题会特别多,特别是代码规范的问题,好几千条。但只要走出第一步,熟悉了规则,解决了一些问题积累经验,后面的问题就比较少了。

FindBugs

FindBugs是针对java的静态分析工具,根据经验,确实能发现一些没有意识到的问题,对提高代码质量还是有帮助。扫出的问题以java文件为单位,会定位到代码行,并给出问题说明,处理起来也比较方便。

FindBugs有一些规则和级别,如果觉得有一些规则没太大必要可以进行调整。印象中有两个规则大家觉得比较“无聊”:第一个是有变量申明了但没有使用,第二个是没在静态函数中访问静态变量。这两个如果不处理也没什么问题,但还是最好处理,形成最佳实践。比如有没有使用的变量,可能是代码有Bug,应该使用的,笔误成了其它的变量;确实没有使用的话,就应该删掉。

FindBugs在实际项目中,没有集成到Android Studio,是测试对指定的代码目录进行了扫描。详细的使用方法可参考FindBugs的官网。

CheckStyle

CheckStyle是代码规范分析工具,保证团队的代码符合一个统一的代码规范。CheckStyle的检查也是根据定义的规范文件来的。实际项目中使用的规范文件据说是华为使用的,Github上有下载,我们使用的也是这份规范,并补充了一些规则。

CheckStyle有一个Android的插件,因些一般是集成到Android Studio中。

//添加Plugin

apply plugin: 'checkstyle'

//设置CheckStyle版本

/**

* 检查代码规范的checkstyle

* http://ju.outofmemory.cn/entry/187977

*/

checkstyle {

toolVersion '6.0'

showViolations true

}

//设置配置文件

task checkstyle(type: Checkstyle) {

configFile file("config/checkstyle/checkstyle.xml")

source 'src/main/java'

include '**/*.java'

exclude '**/gen/**'

ignoreFailures true

classpath = files()

}

配置好后,要进行检查,执行gradle checkstyle任务就好了,最终检查结果会生成HTML和XML文件。结果也是同FindBugs一样生成报告邮件。

在实际项目中,有争议的还是规则。有些人之前没有进行过代码规范的训练,已经形成了自己的习惯,扫描出来问题就特别多,但还是以规则为主;且规则不宜作太大的修改,尽量跟公司内还有业界保持一致。

有些规则的细节,可根据项目实际情况调整。比如函数最多参数个数这个规则就调了好几次,因为加入了一些历史代码,且不太好修改,只好调整规则。比如重复代码的行数,开始定10行,后来发现空行也算进去了,后面又调整成15行。其他的一些规则,如变量命名、方法命名则没有什么好商量的,按规则的来,习惯就好了。

Lint Clean

在实际项目中,我们还使用了一个LintClean这个工具。主要作用是清除项目中没有使用的资源文件及资源项,如有个xml、png或字符串没有引用。它会扫描出来并进行删除,也会将扫描结果保存到xml。通过持续清除项目中无效资源,即可保证工程整洁,也能防止包文件过大,虽然混淆也会清除无效资源,但还是有一定影响。

这个工具也是插件形式提供的,也可集成到项目,

dependencies {

classpath 'com.droidtitan:lint-cleaner-plugin:0.3.0'

}

apply plugin: 'com.droidtitan.lintcleaner'

配置好后,执行gradle lintClean,就可进行检查。有时,有些资源可能是resources.getIdentifier的使用的,这样就要加一些白名单。LintClean也提供了加白名单的功能。检查的结果也是由测试人员编写的脚本进行解析,定位到责任人,形成报告并发送邮件。

跟LintClean一起,我们还加了另一个功能,就是扫描资源目录下的png、jpg等图片资源文件,当发现文件大小超过100KB,会单独列出来,当成文件过大警告。根据项目的实际经验,一般单张图片大小比较少的情况下需要100K。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打印最少硬币的组合-dp+记录路径

题目: 有5种硬币,面值分别为:1,5,10,25,50。数量无限,输入非负整数s,选用硬币,使其和为s。要求输出最少的硬币组合的方案? 数据范围: s最大为250. 解题思路: 有时间再写…

SQL(四) - 子查询和union以及limit分页

子查询概念 什么是子查询?子查询都可以出现在哪里? select语句当中嵌套select语句,被嵌套的select语句是子查询。 子查询可以出现在哪里? select..(select). from..(select). where..(select).1.where子句中使用子查询 案例&a…

ASP.NET Core中的Http缓存

ASP.NET Core中的Http缓存Http响应缓存可减少客户端或代理对 web服务器发出的请求数。响应缓存还减少了 web服务器生成响应所需的工作量。响应缓存由 Http请求中的 header控制。而 ASP.NETCore对其都有相应的实现,并不需要了解里面的工作细节,即可对其进…

maven 排除配置文件打包_Maven打包pom里面配置exclude 排除掉环境相关的配置文件...

Maven打包pom里面配置exclude 排除掉环境相关的配置文件有几种方式:1. 打包时,指定环境参数把环境的配置文件复制过去2. 不打包所有的环境相关的配置文件,直接由运维的人维护可以在上传war包前把配置给改了,用rar工具改里面的配置…

快速幂(取模)模板

快速幂 代码如下: int fastpow(int x,int n) {if (n1) return x;int tmp fastpow(x,n/2);if (n%2){return tmp*tmp*x;}else return tmp*tmp; }位运算优化快速幂 代码如下: int fastpow(int x, int n) {int res 1;while (n) {if (n & 1)res * x;x…

SQL(五) - 表的创建以及操作

创建表 建表语句的语法格式: create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型,....);MySql常用数据类型 BLOB 二进制大对象(存储图片、视频等流媒体信息) Binary Large OBject (对应java中的Object&…

Istio 2020 年 Roadmap——一切为了商用

原文地址:https://preliminary.istio.io/zh/blog/2020/tradewinds-2020/,由 ServiceMesher 社区翻译。Istio 解决了人们在运行微服务时遇到的实际问题。甚至早期的预发行版本就已经可以帮助用户诊断其体系架构中的延迟,提高服务的可靠性以及透…

SQL(七) - 事务、索引、视图

事务(Transaction) 3.1、什么是事务? 一个事务是一个完整的业务逻辑单元,不可再分。 比如:银行账户转账,从A账户向B账户转账10000.需要执行两条update语句: update t_act set balance balan…

python二维数组遍历输出每行最大值_如何在二维数组中找到每行的最大值?

例如,我有一个二维数组:[[0.0,0.24320757858085434,0.14893361727523413,0.29786723455046826,0.18838778030301612,0.12160378929042717],[0.23717478210768014,0.0,0.16770789675478251,0.20539938644228997,0.25981195646349819,0.1299059782317491],…

GCD、LCM模板

最大公约数GCD 整数a和b的最大公约数记为gcd(a,b)。 代码如下: int gcd(int a,int b) {return b 0?a:gcd(b,a%b); }int gcd(int a, int b) {return b ? gcd(b, a % b) : a; }最小公约数LCM 整数a和b的最小公倍数记为lcm(a,b)。 代码如下: int lcm(i…

如何编写高性能的C#代码(二)

使用Benchmark.NET对C# 代码进行基准测试的简介在我以前的文章中[10],我介绍了该系列文章[11],在其中我将分享我的经验,同时了解C#和.NET Core(corefx)框架的新性能。在本文中,我想着重于对现有…

flutter图片预览_flutter好用的轮子推荐四-可定制的图片预览查看器photo

前言Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。IT界著名的尼古拉斯高尔包曾说:轮子是IT进步的阶梯!热门的框架千篇一律,好用轮子万里挑一!Flutter作为这两年开始崛起的跨平台开发…

pandas的apply函数解析

apply函数 apply函数是pandas里面所有函数中自由度最高的函数。该函数如下: DataFrame.apply(func, axis0, broadcastFalse, rawFalse, reduceNone, args(), **kwds)该函数最有用的是第一个参数,这个参数是函数,相当于C/C的函数指针。 这个…

如何编写高性能的C#代码(一)

原文来自互联网,由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除。作者介绍:史蒂夫戈登(Steve Gordon)是Microsoft MVP,Pluralsight的作者,…

hdu 2069 Coin Change(改)-dp

有5种面值的硬币&#xff0c;即1分&#xff0c;5分&#xff0c;10分&#xff0c;25分&#xff0c;50分。输入一个钱数s&#xff0c;输出组合方案的数量。 s<250&#xff0c;硬币数量不限。 代码如下&#xff1a; #include <iostream> using namespace std; const i…

博途plc连接电脑_PLC报错,电脑连接不了PLC

需要进行S7-1200的固件版本更新。更新CPU的固件具体步骤如下&#xff1a;第一步&#xff1a;使用电脑通过读卡器清除存储卡中内容。注意&#xff1a;不要格式化存储卡&#xff01;第二步&#xff1a; 从西门子官方网站下载最新版本的固件文件。下载并解压缩&#xff0c;用户可以…

SQL(八)- python执行SQL语句

PyMySQL python 3.x版本中连接MySQL数据库使用第三方库pysqhl&#xff1b;python 2.x版本中连接MySQL数据库使用第三方库mysqldb&#xff1b; 连接PyMySQL 安装&#xff1a; pip install pymysql连接 (1)用python连接mysql&#xff0c;执行sql语句&#xff0c;返回mysql当…

从Java转向.NET/C#,Are You OK?

最近由于项目变动&#xff0c;需要用.NET/C#做开发&#xff0c;经过一段时间的学习和培训&#xff0c;对这个技术栈有了一定的理解。大家可能都知道Java和.NET/C#很像&#xff0c;这里粗略的把两者做一个对比&#xff0c;希望对感兴趣的童鞋有所帮助。如果现在有人问我&#xf…

如何看待潘石屹搞python_潘石屹考了99分的Python,到底是一种什么存在?

去年&#xff0c;当地产大佬潘石屹要把学习Python作为生日礼物送给自己的时候&#xff0c;微博上还多是一阵调侃之声。可能正是印证了Python程序员们常常挂在嘴边的“人生苦短&#xff0c;就学Python”的口头禅&#xff0c;时年56岁的小潘同学要再一次抓住“青春”的尾巴吧。为…

python机器学习、数据分析常用第三方库(实时更新)

常用镜像源&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 豆瓣&#xff1a;http://pypi.douban.com/simple/ 华中理工大学&#xff1a;http://pypi.hustunique.com/ 山东理工大学&#xff…