idea 检测 重复代码_重复代码检测
发布日期:2021-10-31 09:14:56 浏览次数:7 分类:技术文章

本文共 2376 字,大约阅读时间需要 7 分钟。

---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

就可以执行整个流程了

转载地址:https://blog.csdn.net/weixin_39945523/article/details/111715707 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:jenkins远程构建job_jenkins:一个jenkins项目远程触发另一个jenkins项目构建配置
下一篇:和csm_CSM等厚水泥土搅拌墙施工案例

发表评论

最新留言

不错!
[***.144.177.141]2024年04月18日 12时58分41秒