代码重复检测:

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. 替换函数,相同或相似的代码可以通过调用实现该功能的函数来实现。

代码重复检查工具——python的使用CPD比较好用,clone digger针对py2,其他有名的如Simian PMD-CPD CloneDR CCCD CCFinder Bauhaus CodePro的更多相关文章

  1. python代码风格检查工具──pylint

    pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格,通过这个工具,可以使你的python代码尽量保持完美,哈哈.具体可以检查什么东西呢?比如你写了 f ...

  2. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  3. 玩转Eclipse — 自动代码规范检查工具Checkstyle

    大项目都需要小组中的多人共同完成,但是每个人都有自己的编码习惯,甚至很多都是不正确的.那么如何使小组所有开发人员都遵循某些编码规范,以保证项目代码风格的一致性呢?如果硬性地要求每个开发人员在提交代码之 ...

  4. C/C++代码静态检查工具Cppcheck在VS2008开发环境中的安装配置和使用

    Cppcheck is an analysis tool for C/C++code. Unlike C/C++ compilers and many other analysis tools, it ...

  5. 痞子衡嵌入式:恩智浦SDK驱动代码风格检查工具预览版

    大家好,我是痞子衡,是正经搞技术的痞子. 接上文 <恩智浦SDK驱动代码风格.模板.检查工具> 继续聊,是的,过去的三天里我花了一些时间做了一个基于 PyQt5 的 GUI 工具,可以帮助 ...

  6. python代码格式检查工具部署pre_commit

    如何使用pre_commit?1. 合并该分支 2. 在git根目录下使用pre-commit install即可3. 如果没有装pre-commit 安装一下pip install pre-comm ...

  7. SwiftLint:代码规范检查工具介绍

    Swift-CodeStyle Checker:SwiftLint 介绍: SwiftLint 是一个用于强制检查 Swift 代码风格和规定的一个工具,基本上以 GitHub's Swift 代码风 ...

  8. 代码检查工具jshint和csslint

    前面的话 Douglas Crockford大神根据自己的理念用JavaScript写了一个JavaScript代码规范检查工具,这就是JSLint.后来非常流行,也的确帮助了广大的JavaScrip ...

  9. 【FLYabroad 】微软内部代码检查工具 (Microsoft Source Analysis for C#)[转]

    SourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性. 早就听说了微软内部的静态代码检查和代码强制格式美化工具 StyleCop ...

随机推荐

  1. [LeetCode] 354. Russian Doll Envelopes 俄罗斯套娃信封

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...

  2. 使用 Consul 作为 Python 微服务的配置中心

    使用 Consul 作为 Python 微服务的配置中心 Consul 作为数据中心,提供了 k/v 存储的功能,我们可以利用这个功能为 Python 微服务提供配置中心. Consul 提供了 HT ...

  3. c#通过socket判断服务器连接是否正常

    判断Socket是否连接上,需要通过发包来确认. 之前确认都是调用调用socket的connected属性,然而该属性是上次的连接是否成功的结果,不及时. // 检查一个Socket是否可连接 pri ...

  4. Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?

    Oracle Spatial的空间索引R-TREE,其实现原理为一级级的MBR(最小定界矩形).我突然想到一个问题,它的ROOT MBR是怎么确定的?是根据元数据表user_sdo_geom_meta ...

  5. 第5/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...

  6. 15 SpringMVC的入门案例

    1.入门程序的需求 2.搭建开发环境 <1>Create New Project <2>创建一个webapps <3>设置maven路径和解决maven项目创建过慢 ...

  7. 在Linux下,使用Xmanager图形化显示

    linux在安装Oracle时,需要图形化展示,本博客将使用xclock显示钟表进行测试 首先需要下载Xmanager网址:http://www.xshellcn.com/ 安装之后 打开之后,点击t ...

  8. hdu 1850 题解

    题目 题意:n堆扑克牌,每次可以取走一堆中任意张数的扑克牌,问先手胜利第一步有几种可能. 这一题如果除去后面一问就直接问先手赢还是后手赢,这就是一道简单的 $ NIM $ 博弈问题. 定理 $     ...

  9. easyui_datagrid实现导出Excel

    easyui_datagrid实现导出Excel 一.PHPExcel使用方法 先下载PHPExcel类库文件,并引入. 二.利用AJAX实现datagrid导出Excel 原理:前台通过AJAX调用 ...

  10. CEF4Delphi 常用设置

    CEF4Delphi是由 SalvadorDíazFau 创建的一个开源项目,用于在基于Delphi的应用程序中嵌入基于Chromium的浏览器. CEF4Delphi 基于Henri Gourves ...