idea 检测 重复代码_重复代码检测

---Mac 平台, Java代码检测示例

背景

开发中,如果有相同逻辑,应当根据实际情况抽取公共方法或者公共类,这是程序员的一个基本素养。 但在历史有一定久远的工程中, 代码重复的现象可能就会比较多。代码重复率可以做为评判项目中代码质量的一个指标,那么就需要一个工具来检测工程中哪些地方存在重复代码

simian工具下载

下载后拿出里面的jar包,simian-2.5.10.jar,这个就是我们接下来会用到的东西。

simian工具使用

例如 : 从工程src目录下找到重复10行以上的代码,并将找到的结果放入桌面result.txt中, 运行如下命令

java -jar ./simian-2.5.10.jar -threshold=10 "/Users/xxname/workspace/idea/xxproject/src/**/*.java" > /Users/xxname/Desktop/result.txt

结束后打开result.txt可以看到类似如下结果:

Similarity Analyser 2.5.10 - http://www.harukizaemon.com/simian

Copyright (c) 2003-2018 Simon Harris. All rights reserved.

Simian is not free unless used solely for non-commercial or evaluation purposes.

{failOnDuplication=true, ignoreCharacterCase=true, ignoreCurlyBraces=true, ignoreIdentifierCase=true, ignoreModifiers=true, ignoreStringCase=true, threshold=10}

Found 10 duplicate lines with fingerprint 1806290bacb9214406c69813cbb2b487 in the following files:

Between lines 937 and 949 in /Users/xxname/Documents/workspace/xxproject/app/src/com/xx/xx/FooClass.java

Between lines 851 and 863 in /Users/xxname/Documents/workspace/xxproject/app/src/com/xx/xx/BarClass.java

Found 10 duplicate lines with fingerprint 1806290bacb9214406c69813cbb2b487 in the following files:

Between lines 937 and 949 in /Users/xxname/Documents/workspace/xxproject/app/src/com/xx/xx/XxClass.java

Between lines 851 and 863 in /Users/xxname/Documents/workspace/xxproject/app/src/com/xx/xx/XxClass.java

... ...

Found 7505 duplicate lines in 371 blocks in 98 files

Processed a total of 63312 significant (118918 raw) lines in 581 files

Processing time: 2.984sec

从以上结果中, 可以看到一份代码或几份不同代码中,哪些行代码是重复的,但是这个txt文件看起来不够简洁,尤其是冗长的文件目录, 笔者做了另一个jar, 来格式化输出的结果,使之更清晰明了。

格式化输出

执行命令

java -jar ./simianFormat.jar result.txt formatResult.txt

第一个参数 result.txt为上一步得到的原始结果文件, 第二个参数formatResult.txt为格式化输出的文件

执行后可以看到类似如下结果

FooClass 937 ~ 949

FooClass 851 ~ 863

FooClass 2729 ~ 2741

BarClass 962 ~ 975

这样是不是就清晰明了多了? -v-

集合命令

将以上两个步骤聚合在一个shell脚本中, 方便使用, 创建simian.sh如下

#!/usr/bin/env bash

codeFile=/Users/xxname/Documents/workspace/xxproject/src/**/*.java

threshold=$1

echo threshold=$threshold

echo "计算中(1/2)..."

java -jar ./simian-2.5.10.jar -threshold=$threshold "$codeFile" > ./result.txt

echo "格式化中(2/2)..."

java -jar ./simianFormat.jar result.txt formatResult.txt

echo "结束"

修改codeFile中的路径和通配符为你的路径和通配符,保存。

执行chomd +x ./simian.sh为simian.sh添加执行权限,以后只需要执行

./simian.sh 10

就可以执行整个流程了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值