栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

代码检查工具PMD/CPD

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

代码检查工具PMD/CPD

一.PMD/CPD介绍

PMD是一个源代码分析器。它寻找常见的编程缺陷,例如未使用的变量、空的catch块、多余的对象创建等等。支持Java、Javascript、Salesforce.com Apex、PLSQL、Apache Velocity、XML、XSL。

另外,它包含CPD(copy-paste-detector),一个复制粘贴检测器。CPD寻找重复的代码,支持Java、C、C++、C#、Groovy、PHP、Ruby、Fortran、Javascript、PLSQL、Apache Velocity、Scala、Objective C,Matlab,Python,Go,Swift和Salesforce.com Apex。

二.下载工具 1. 公网可以下载pmd-bin-6.39.0.zip,解压缩后进入bin目录

2.使用cpd的命令
./run.sh cpd --minimum-tokens 100 --files /vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/ --format text --language java 
3.使用cpd生成的报告
Found a 26 line (141 tokens) duplication in the following files:
Starting at line 128 of /vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/centralControl/service/impl/CentralControlInfoImpl.java
Starting at line 172 of /vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/centralControl/service/impl/CentralControlInfoImpl.java

        String codec = centerDictionaryDao.getML();
        for (ClientLoginState clientLoginState : onlineUsers) {
            if (clientLoginState == null || clientLoginState.getState() == 0) {
                continue;
            }
            res.add(ThreadPoolUtil.submit(() -> startRender(contentInfo, clientLoginState, codec, rateAdaptive)));
        }

        int failed = 0;
        CommonResult failedResult = null;
        // 处理结果
        for (Future> resultFuture : res) {
            try {
                CommonResult result = resultFuture.get();
                if (result.isSuccess()) {
                    clientDao.updateById(result.getData());
                } else {
                    failedResult = result;
                    failed ++;
                }
            } catch (Throwable e) {
                failed ++;
            }
        }
        int success = res.size() - failed;
        if (success == 0){
=====================================================================
Found a 35 line (128 tokens) duplication in the following files:
Starting at line 136 of /vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/client/service/impl/ClientDelayRecordServiceImpl.java
Starting at line 103 of /vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/client/service/impl/ClientMetricsRecordServiceImpl.java

            response.setHeader("Content-disposition", "attachment; filename=" + File.separator + "excel" + File.separator + PROBEDATE);
            response.setContentType("application/vnd.ms-excel");
            out = response.getOutputStream();
//            out = new FileOutputStream("D:/probe-date.xlsx");
            workbook.write(out);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != out) {
                try {
                    out.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

            if (null != wb) {
                try {
                    wb.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

            if (null != in) {
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
        return CommonResult.success();
    }
}
4.cpd的报告解析

用=======隔开的是两处代码重复的地方,

第一个表示同一个类自身的代码重复
/vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/centralControl/service/impl/CentralControlInfoImpl.java

自身的代码有重复,该类的128-153(26行)和172-197(26行)行的代码完全重复,重复的代码可以抽出来,写成一个公用方法

第二个表示两个不同的类代码重复
/vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/client/service/impl/ClientDelayRecordServiceImpl.java

的136-263(128行)
/vmdata/cloudci/XR_Server_BigSpace_New/XR_Server_BigSpace_New_DailyCI/1/xr-bigspace/src/main/java/com/zte/bigspace/modules/client/service/impl/ClientMetricsRecordServiceImpl.java

的103-230(128行)的代码重复,提示重复的代码可以抽出来,写一个工具类

5.使用pmd的命令
./run.sh pmd -dir /home/src/ -format html -reportfile /home/error.html -rulesets rulesets/java/quickstart.xml,category/java/codestyle.xml
6.使用pmd生成的报告


点蓝色的那几行,可以进入官网,了解代码的需要修改的提示,非常友好

7.官网的修复提示

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339223.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号