zoukankan      html  css  js  c++  java
  • 代码重复检查工具——python的使用CPD比较好用,clone digger针对py2,其他有名的如Simian PMD-CPD CloneDR CCCD CCFinder Bauhaus CodePro

    代码重复检测:

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

    输出类似:

    =====================================================================
    Found a 381 line (1849 tokens) duplication in the following files: 
    Starting at line 24 of xxxxalysispolicy_analysis.py
    Starting at line 30 of xxxxxispolicy_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. 类型Ⅳ,两个或更多个代码段执行相同的运算,但通过不同的语法和变量来实现。

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

    名称SimianPMD-CPDCloneDRCCCDCCFinderBauhausCodePro
    检测类型 Ⅰ,Ⅱ Ⅰ,Ⅱ Ⅰ,Ⅱ Ⅰ,Ⅱ,Ⅲ Ⅰ,Ⅱ,Ⅲ
    支持语言 C/C++,Java C/C++,Java C/C++,Java C,Java C/C++,Java C/C++,Java Java
    授权类型 商用,可免费 开源 商用,可免费 开源 开源 商用,可免费 开源
    推荐星级 ** *** ** * * ** ***

    怎么消除重复代码?

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

    1. 提取类,如果多个类中含有相同或相似的成员变量,方法,可以定义一个新的类来实现这些功能。原有的类可以作为子类继承。
    2. 提取函数,如果多个类中含有相同或相似的方法,可以把这些方法集中到新的类,供其他类调用。
    3. 替换函数,相同或相似的代码可以通过调用实现该功能的函数来实现。
  • 相关阅读:
    线上环境 Linux 系统调用追踪
    深挖前端 JavaScript 知识点 —— 史上最全面、最详细的 Cookie 总结
    揭秘 vivo 如何打造千万级 DAU 活动中台
    我和大厂Offer有个约会之padding-top的百分比值参考对象竟是父级元素的宽度
    【Electron Playground 系列】文件下载篇
    [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)
    【人生苦短,我学 Python】基础篇——基本语句(Day5)
    P3224 [HNOI2012]永无乡
    P2146 [NOI2015]软件包管理器
    P3203 [HNOI2010]弹飞绵羊
  • 原文地址:https://www.cnblogs.com/bonelee/p/11045207.html
Copyright © 2011-2022 走看看