首页 > 编程语言 >代码重复检查工具——python的使用CPD比较好用,clone digger针对py2

代码重复检查工具——python的使用CPD比较好用,clone digger针对py2

时间:2023-06-01 13:34:01浏览次数:44  
标签:JavaC 重复 代码 CPD py2 开源 C++ 类型 clone

代码重复检测:

cpd --minimum-tokens 100 --files g:\source\python\ --language python >log.txt

输出类似:

=====================================================================
Found a 381 line (1849 tokens) duplication in the following files: 
Starting at line 24 of xxxxalysis\policy_analysis.py
Starting at line 30 of xxxxxis\policy_analysis_cluster_1.py

logger = None
logger_running = None

COUNT = 2

SRC_IP = 0
SRC_PORT = 0
DEST_IP = 0
DEST_PORT = 0
PROTOCOL = 0
COMMAND = 0
COMMAND_ARGUMENT = 0
FATHER_PID = 0

  

 

重复代码检测工具

 

何谓重复代码

简单说,就是指重复或近似的代码。程序猿在码代码时,往往使用CP(copy and paste)大法,飞快的完成开发任务。不经意间代码中充斥着大量的重复、相似的代码。重复代码不仅让代码量大增,造成编译速度慢,而且占用大量存储空间,更严重的后果是造成了代码可维护性差,代码质量下降。
重复可能是软件中一切邪恶的根源,许多原则与实践规则都是为了控制与消除重复而创建。……软件开发领域的所有创新都是不断在尝试从源代码中消除重复。——《代码整洁之道》 马丁

重复代码都有哪些类型?

最简单明了的是完全一样的代码片段。此外,还有如下类型的重复代码:

  1. 类型Ⅰ,代码片段中除了空格、注释以及换行以外的内容完全一致
  2. 类型Ⅱ,代码片段中除了空格、注释、换行以及变量名以外的内容完全一致
  3. 类型Ⅲ,代码片段中除了空格、注释、换行以及变量名以外的语句可能有增删改,功能不变
  4. 类型Ⅳ,两个或更多个代码段执行相同的运算,但通过不同的语法和变量来实现。

不同的重复代码检测工具,由于在实现算法上有所不同,其所能检测的重复代码类型也不尽相同,如下表所示。

名称

Simian

PMD-CPD

CloneDR

CCCD

CCFinder

Bauhaus

CodePro

检测类型


Ⅰ,Ⅱ

Ⅰ,Ⅱ

Ⅰ,Ⅱ


Ⅰ,Ⅱ,Ⅲ

Ⅰ,Ⅱ,Ⅲ

支持语言

C/C++,Java

C/C++,Java

C/C++,Java

C,Java

C/C++,Java

C/C++,Java

Java

授权类型

商用,可免费

开源

商用,可免费

开源

开源

商用,可免费

开源

推荐星级

**

***

**

*

*

**

***

怎么消除重复代码?

《代码大全》在第七章“高质量的子程序”中指出,创建子程序是消除重复代码的有效方法。
在《重构——改善既有代码的设计》一书中,建议如下方法消除重复代码:

  1. 提取类,如果多个类中含有相同或相似的成员变量,方法,可以定义一个新的类来实现这些功能。原有的类可以作为子类继承。
  2. 提取函数,如果多个类中含有相同或相似的方法,可以把这些方法集中到新的类,供其他类调用。
  3. 替换函数,相同或相似的代码可以通过调用实现该功能的函数来实现。

标签:JavaC,重复,代码,CPD,py2,开源,C++,类型,clone
From: https://blog.51cto.com/u_11908275/6393403

相关文章

  • 支持在 Windows 环境下安装和使用。以下是在 Windows 环境下安装 CloneDeploy 的步骤
    CloneDeploy是一款基于Linux的开源系统部署解决方案,但也支持在Windows环境下安装和使用。以下是在Windows环境下安装CloneDeploy的步骤:准备环境:在安装CloneDeploy前,需要先在Windows操作系统中安装好Apache、PHP和MySQL服务。推荐使用XAMPP或WAMP等集成开......
  • 【tcpdump】安装及常用操作
    tcpdump是一款功能强大的网络抓包工具,可以用来实时显示和记录网络数据包,以及对数据包进行过滤和分析。本文将介绍tcpdump的安装和使用方法,帮助用户更好地使用该工具。安装tcpdumptcpdump是一款开源软件,可以通过包管理器进行安装。以Ubuntu系统为例,可以使用以下命令进行安装:sudo......
  • tcpdump的简单使用
    Tcpdump是一个常用的网络数据包抓取工具,可以在Linux/Unix和其他类Unix操作系统中使用。它可以嗅探网络接口上的数据包,并将它们写入文件或输出到屏幕上。以下是tcpdump的基本使用教程:命令格式:tcpdump[选项][表达式]常用选项:-i:指定抓取数据包的网络接口。-n:以数......
  • gmpy2库常用函数------2023.5.20
    1.mpz():初始化大整数importgmpy2gmpy2.mpz(909090)result:mpz(909090)2.gcd(a,b):求大整数a,b的最大公因数importgmpy2gmpy2.gcd(6,18)result:mpz(6) 3.invert(x,m):求大整数x模m的逆元yimportgmpy2#4*6≡1mod23gmpy2.invert(4,23)result:mpz(6)4.is_eve......
  • Android 有些机型不带tcpdump的解决办法
    输入mount命令[quote]mountrootfson/typerootfs(ro,relatime)tmpfson/devtypetmpfs(rw,relatime,mode=755)devptson/dev/ptstypedevpts(rw,relatime,mode=600)procon/proctypeproc(rw,relatime)sysfson/systypesysfs(rw,relatime)tmpfson......
  • 影子clone,深度clone
    下面的例子包含三个类UnCloneA,CloneB,CloneMain。CloneB类包含了一个UnCloneA的实例和一个int类型变量,并且重载clone()方法。CloneMain类初始化UnCloneA类的一个实例b1,然后调用clone()方法生成了一个b1的拷贝b2。最后考察一下b1和b2的输出: packageclone;classUnCloneA{p......
  • 浅谈Javascript 中几种克隆(clone)方式
    一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了:Js代码varsStr="kingwell";varcStr=sStr;alert(cStr);//输出kingwellsStr="abc";alert(cStr);//输出kingwell; 把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。 ......
  • 《开发板移植tcpdump 交叉编译 带有依赖库如何移植》
    1.下载源码由于tcpdump依赖于libpcap,所以需要先下载这两个的源代码;官方地址:https://www.tcpdump.org/这里示例所下载的版本是tcpdump-4.9.3.tar.gzlibpcap-1.9.1.tar.gz 2.编译libpcap解压libpcap源码,创建build目录,避免编译的临时文件污染源码tarxvflibp......
  • mysql_clone
    HowtoInstall安装UsingtheINSTALLPLUGINstatement:Unix/Linux:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.so';Windows:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.dll';Usingtheplugin-loadoptionintheMySQLco......
  • unity 之简单的实例(clone)对象池
    usingSystem;usingSystem.Collections.Generic;usingUnityEngine;publicclassGameObjectPoolEntity{publicQueue<GameObject>QueueList;publicstringName;publicGameObjectPool0bj;}publicclassQGGameObjectPool:IDisposable......