Code Review总是让人又爱又恨,它可以帮助我们在提测之前发现很多代码中比较“丢人”的问题,但是,Code Review通常会比写代码更加耗费精力,因为你需要理解别人的代码,而为了这一目的,往往需要很多次的沟通。

人们常说“见字如面”。我认为代码也是一样,看到一个人的代码,就会对这个人有一个大概的印象。例如,当你看到一段代码写的非常随意,随意的格式、随意的命名、随意的封装,然后又没有单元测试,那我们一般会认为这段代码的作者是一个不够严谨、做事随意、有些懒惰,又对自己的代码责任心不强的人。如果你不是这样的人,那就需要花费更多的力气向同事证明自己。而如果在代码中做好每一个细节,严格遵循编码规范,单元测试覆盖率比较高,那么同事对你的第一印象一定是这个人还是比较可靠的,跟他合作应该比较愉快。

说了这么多,其实就是想强调Code Review的重要性。那么既然它这么重要,但又给我们带来了更大的工作量。作为程序员,我们一定会想,能不能自动化?答案当然是可以。事实上现在也有很多公司实现了自动化,例如自动进行静态代码分析来确保代码质量,利用类似Cobertura这样的工具来检查单元测试覆盖程度等等。但是这并不能完全保证代码的整洁性和可靠性。

有了这些工具之后Code Review轻松了许多,但是这些工具的安装、使用也是需要花费很高的成本的。所以我想给大家介绍的是一个使用简单、方便的工具来帮我完成这些任务。在介绍之前,我们先来想一想我们平时在Review别人代码时可能会注意哪些问题。这里我简单列出来了一些:

  • 抛出的异常不能太过广泛
  • 不能写System.out,而是要用日志输出
  • 不能使用java.util.logging
  • 如果使用贫血模型开发,每个类需要放到对应的包中
  • 接口不能放在实现类的包中
  • Service层代码不能访问Controller层代码
  • 合理使用第三方库

这些事情以前我们都是靠人工来检查,直到我发现了ArchUnit这个库。感觉像是抓住了自动化道路上的救命稻草。

什么是ArchUnit?

ArchUnit的官方网站是 https://www.archunit.org

官网中原话介绍是

ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework.

意思是ArchUnit是一款免费、简单可扩展的库,它可以使用任何Java单元测试框架来检查Java代码的架构。

也就是说,它的主要功能是用来检查代码结构的。那么怎么使用呢?

如何使用?

ArchUnit的简单绝对不是空谈,如果你是maven项目,只需要在pom.xml文件中添加如下依赖:

<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit</artifactId>
<version>0.12.0</version>
<scope>test</scope>
</dependency>

如果你是Gradle项目,使用起来同样非常简单

dependencies {
testCompile 'com.tngtech.archunit:archunit:0.8.0'
}

当你添加了依赖以后,就可以为我们前面提到的规则写测试用例了。

当然,也有一些内建的通用规则,它们定义在

com.tngtech.archunit.library.GeneralCodingRules

这个类中。关于内建规则的细节,可以查看官方文档

自定义规则

除了内建规则以外,ArchUnit也支持你定义自己需要的规则,至于如何定义规则,文档中都有详细的介绍。当然,也可以参考这个例子来写一些规则。 https://github.com/TNG/ArchUnit-Examples

如何执行

规则定义好以后如何执行呢?我们说ArchUnit使用起来非常简单,如果需要测试,对maven项目来说只需要执行命令

mvn test

而对于Gradle项目来说,只要执行命令

gradle test

总结

ArchUnit看起来是一个很酷的三方库,我并没有在使用层面做过多介绍,因为我也在摸索中,感兴趣的朋友可以和我一起交流。

代码检查又一利器:ArchUnit的更多相关文章

  1. 使用ReSharper打造团队代码检查流程

    首先我想跟大家分享一下我们团队的代码检查流程. 1. 项目经理随时会检查成员的代码,如果发现有不符合规范的代码,会在注释里面加todo.比如,假设leo的代码不符合规范,那么项目经理就会加注释: // ...

  2. sublime3添加对react代码检查

    安装eslint npm install -g eslint npm install -g eslint-plugin-react 安装完后调用eslint --init 初始化,生成.eslintr ...

  3. [原创]Java静态代码检查工具介绍

    [原创]Java静态代码检查工具介绍 一  什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...

  4. 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)

    PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员 ...

  5. java 命名代码检查-注解处理器

    命名代码检查 根据 <Java 语言规范( 第 3 版 ) > 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. ...

  6. Android 代码检查工具SonarQube

    http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一 ...

  7. JavaScript代码检查工具 — JSHint

    静态代码检查是开发工作中不可缺少的一环,毕竟对于程序化的工作人的眼睛是不可靠的,更何况是自己的眼睛看自己的代码.即使最后的运行结果通过,但可能存在一些未定义的变量.定义了但最后没用过的变量.分号有没有 ...

  8. 一个实际的sonar代码检查的配置文件

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. SonarQube4.4+Jenkins进行代码检查实例之二

    SonarQube4.4+Jenkins进行代码检查实例之二 SonarQube4.4+Jenkins进行代码检查实例之二

随机推荐

  1. PHP 向数组头部插入数据

    PHP 向数组头部插入数据 函数: array_unshift() 示例: $s = array('a' => 0, 'b' => 3); array_unshift($s, '5'); ...

  2. (线段树)A Corrupt Mayor's Performance Art

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 题意: 区间更新, 区间询问: 题解: 区间更新, 区间询问, 一共30种颜色, 可用int 来 ...

  3. linux磁盘分区、格式化、挂载

    新建分区的操作步骤,如下图: 1)RAID卡: 机器有没有RAID卡可以在开机时看有没有出现配置RAID什么的提示(亲测),系统运行时有没有,不知道! 服务器大多有这个新加硬盘后不修改raid,开即f ...

  4. css未知高度垂直居中

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. 投票通过,PHP 8 确认引入 Union Types 2.0

    关于是否要在 PHP 8 中引入 Union Types 的投票已于近日结束,投票结果显示有 61 名 PHP 开发组成员投了赞成票,5 名投了反对票. 还留意到鸟哥在投票中投了反对票~) 因此根据投 ...

  6. Android中的设计模式

    一.设计模式的分类 总体来说23种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式 ...

  7. Three.js - 走进3D的奇妙世界

    本文将通过Three.js的介绍及示例带我们走进3D的奇妙世界. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第6期-支付结算部支付研发团队前端研发高级工程师-刘琳<three. ...

  8. git 删除误上传的.idea文件

    问题: 提交项目的时候忘记添加.gitignore文件,误上传了文件(如.idea)如何解决?(本文以.idea文件夹举例) 1.将项目文件拉取下来 git pull origin master 2. ...

  9. [UWP]UIElement.Clip虽然残废,但它还可以这样玩

    1. 复习一下WPF的UIElement.Clip 用了很久很久的WPF,但几乎没有主动用过它的Clip属性,我只记得它很灵活,可以裁剪出多种形状.在官方文档复习了一下,大致用法和效果如下: < ...

  10. windows安装Pytorch报错:from torch._C import * ImportError: DLL load failed: 找不到指定的模块”解决方案

    问题描述 python环境下安装cpu版本pytorch,安装成功,但是导入出错. 报错如下 解决方法 参考博客,大家解决方法大概有:升级numpy.添加.dll文件到环境变量,均没有成功.本地pyt ...