美文网首页
重复代码检测

重复代码检测

作者: 怜悯是我的座右铭 | 来源:发表于2020-06-17 21:31 被阅读0次

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

背景

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

simian工具下载

Simian是一个可跨平台使用的重复代码检测工具,下载地址:http://www.harukizaemon.com/simian/get_it_now.html 点击底部的链接下载工具包, 如图所示


下载后拿出里面的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, 来格式化输出的结果,使之更清晰明了。

格式化输出

下载jar包 simianFormat.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

就可以执行整个流程了

相关文章

  • 重复代码检测

    ---Mac 平台, Java代码检测示例 背景 开发中,如果有相同逻辑,应当根据实际情况抽取公共方法或者公共类,...

  • 重复代码检测工具

    何谓重复代码 简单说,就是指重复或近似的代码。程序猿在码代码时,往往使用CP(copy and paste)大法,...

  • 检测代码重复率工具

    随着各个项目的迭代更新,项目中不可避免的会出现一些重复的代码,这可能是CTRL C + CTRL V造成的,也有可...

  • 基于 SonarQube7.4 实现代码规范自动化检测解决方案

    解决方案说明 概述 代码规范检测,是对代码的可靠性、安全性、可维护性、代码重复率、代码量大小进行检测和评判,生成质...

  • 收藏备用

    代码重复率检测简单了解一下,跑一下对重复性代码量有个了解。(1) cqc 简单易用,输出大概下面这样子。输出...

  • Jenkins iOS CPD 重复代码检测实践

    很早之前一起想重构,对重复代码进行处理,基于没有简单易用的工具 ,其实CPD这工具以前 很早就知道了,也用过,但是...

  • jscpd 检查js项目代码重复率

    jscpd工具介绍 jscpd是个开源的代码重复率检测工具,github地址:https://github.com...

  • 重复单词检测

    An isogram is a word that has no repeating letters, conse...

  • 重复问题检测

    1.基于序列到序列模型的句子级复述生成 2.深度学习之《社交网络问答系统-问题重复检测任务》实现

  • matlab C++混合编程——opencv

    Canny边缘检测 C++代码 matlab测试代码 Sobel边缘检测 C++代码 matlab测试代码

网友评论

      本文标题:重复代码检测

      本文链接:https://www.haomeiwen.com/subject/grcexktx.html