php质量工具系列之phpmd

PHPMD PHP Mess Detector
它是PHP Depend的一个衍生项目,用于测量的原始指标。
PHPMD所做的是,扫描项目中可能出现的问题如:

  • 可能的bug
  • 次优码
  • 过于复杂的表达式
  • 未使用的参数、方法、属性

PHPMD是一个成熟的项目,它提供了一组不同的预定义规则

安装

composer global require --dev phpmd/phpmd

使用

phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit

参数介绍:
格式固定为 phpmd 被扫描目录 输出格式 规则集文件或规则名称(多个规则名称以逗号分隔)
后面的参数全部是option
–report-file 结果输出文件地址
–ignore-errors-on-exit phpmd发生错误时也以0码退出脚本
–ignore-violations-on-exit phpmd扫描出问题时也以0码退出脚本 主要用在自动构建的场景终止,避免打断整个项目的执行
–suffixes “php,phtml” 有效源代码文件扩展名,多个以逗号隔开
–exclude 需要忽略的目录,多个以逗号隔开

自定义规则集

复制以下内容,保存为phpmd.xml到项目,phpmd第三个参数即可使用此配置

<?xml version="1.0"?>
<ruleset name="Custom Ruleset">
    <description>Custom rules for PHPMD</description>

    <rule ref="rulesets/cleancode.xml">
        <exclude name="StaticAccess"/>
        <exclude name="ElseExpression"/>
    </rule>
    
    <rule ref="rulesets/codesize.xml"/>
    
    <rule ref="rulesets/controversial.xml">
        <exclude name="Superglobals"/>
    </rule>
    
    <rule ref="rulesets/design.xml"/>

    <rule ref="rulesets/naming.xml">
        <exclude name="ShortMethodName"/>
        <exclude name="ShortVariable"/>
    </rule>
    
    <rule ref="rulesets/unusedcode.xml"/>
</ruleset>

结果查看

此图是利用jenkins中的插件warnings可视化的
在这里插入图片描述

Jenkins中的应用

构建步骤新增执行shell

#执行phpmd
if `docker exec phpfpm82 /tmp/composer/vendor/bin/phpmd >/dev/null 2>&1`; then
  echo '开始执行pdepend'
else
  docker exec phpfpm82 composer global require --dev phpmd/phpmd
fi

docker exec phpfpm82 /bin/sh -c "cd /var/www/workspace/$JOB_NAME/ && /tmp/composer/vendor/bin/phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit"

输出可视化报告

查看jenkins插件之Warnings的 phpmd一章

PHP质量工具系列

TOP 6 PHP代码质量工具
php质量工具系列之PHPCPD
PHP质量工具系列之phpunit
PHP质量工具系列之xhprof
PHP质量工具系列之php_CodeSniffer
php质量工具系列之 Owasp Dependency-Check
php质量工具系列之PHPStan
php质量工具系列之paslm
php质量工具系列之phploc
SBOM生成之CycloneDX

CI/CD之Jenkins插件使用系列

jenkins插件之xunit
jenkins插件之Warnings
jenkins插件之dependency-check
jenkins插件之plot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fortigate防火墙二层接口的几种实现方式

初始配置 FortiGate出厂配置默认地址为192.168.1.99&#xff08;MGMT接口&#xff09;&#xff0c;可以通过https的方式进行web管理&#xff08;默认用户名admin&#xff0c;密码为空&#xff09;&#xff0c;不同型号设备用于管理的接口略有不同。 console接口的配置 防火墙…

1.2 QT随手简记(二)

QT学习篇2 一、QT学习方法 1. QT查询与学习资源 QT助手&#xff1a;学会使用QT的助手和上网查询&#xff0c;掌握API文档的查询与使用。QT设计师界面&#xff1a;通过图形界面进行组件的拖拽布局&#xff0c;所见即所得。 2. QT设计师界面操作 跳转与代码生成&#xff1a;…

大数据湖一体化平台整体建设方案(PPT原件)

背 景&#xff1a;大数据湖的发展背景与建设理念 体 系&#xff1a;大数据湖体系规划与建设思路 生态圈&#xff1a;探索新兴业务入湖建设模式 共 享&#xff1a;大数据湖统一访问共享规划 运 营&#xff1a;大数据湖一体化运营管理建设 软件全套资料部分文档清单&…

使用Django JWT实现身份验证

文章目录 安装依赖配置Django设置创建API生成和验证Token总结与展望 在现代Web应用程序中&#xff0c;安全性和身份验证是至关重要的。JSON Web Token&#xff08;JWT&#xff09;是一种流行的身份验证方法&#xff0c;它允许在客户端和服务器之间安全地传输信息。Django是一个…

Canva如何通过从MySQL迁移到DynamoDB来管理每日新增的5000万素材

随着数字化设计的蓬勃发展&#xff0c;Canva作为一家在线设计平台&#xff0c;面临着海量的用户生成内容。每天&#xff0c;平台上新增的素材数量高达5000万&#xff0c;这对数据库系统提出了前所未有的挑战。为了应对这一挑战&#xff0c;Canva决定将原本基于MySQL的数据库系统…

100000开发的系统,执意重构钱多执念?

收到一位客户询盘&#xff0c;要重做自己的系统&#xff0c;原因&#xff1a;嫌弃基于PHP做的系统服务器消耗大。咨询了好几拨人&#xff0c;觉得外包公司贵&#xff0c;个人程序员又不靠谱&#xff0c;总之一门心思要重构。 现状&#xff1a; 1、系统研发耗费100000。 2、目…

5款相见恨晚的神级软件推荐,每一款都让人惊喜

今天来给大家种草5款特别赞且完全免费的软件&#xff0c;每一款都超级好用&#xff0c;的值得大家去试试。 搜书大师「Android、iPhone」 亮点&#xff1a;看小说神器。 搜书大师是看小说的神器&#xff0c;而且永久免费哦&#xff0c;看书的时候再也不会被那些烦人的弹窗广…

Scala 练习一 将Mysql表数据导入HBase

Scala 练习一 将Mysql表数据导入HBase 续第一篇&#xff1a;Java代码将Mysql表数据导入HBase表 源码仓库地址&#xff1a;https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化配置信息&#xff1a;多条(hbase.zookeeper.…

软件测试——Java单元测试(常用注解+断言)待续

1.软件及环境 软件&#xff1a;IDEA 环境&#xff1a;JDK1.8&#xff0c;Junit 4.13 2.环境配置 这里我们采用IDEA编辑器&#xff0c;利用Maven对项目进行构建&#xff0c;如下&#xff1a; 然后项目构建完之后&#xff0c;首先第一步是进入pom文件&#xff0c;添加Junit4.13依…

JavaSE——【逻辑控制】(知识)

目录 前言 一、顺序结构 二、分支结构 三、循环结构 总结 前言 公元 3050 年&#xff0c;地球的科技已经发展到令人难以想象的地步。这天&#xff0c;艾米莉在自己的房间里启动了最新的虚拟旅行装置&#xff0c;下一秒&#xff0c;她发现小奥奇的博客更新了。立即放弃了虚…

Linux部署调度工具xxl-job

背景&#xff1a; Pentaho Data Integration&#xff08;kettle&#xff09;作为用户规模最多的开源ETL工具&#xff0c;强大简洁的功能深受广大ETL从业者的欢迎。但kettle本身的调度监控功能却非常弱。Pentaho官方都建议采用crontab(Unix&#xff0c;linux平台)和计划任务(Win…

Warning:成交前,永远相信意外即将发生

作为一名首次次创业者&#xff0c;随着创业进入深层次阶段&#xff0c;越来越感觉到&#xff1a;创业是一条不归路&#xff0c;因为路上不止有惊喜&#xff0c;还有风尘。创业之前我认为世界是“天圆地方”的&#xff0c; 创业后你猜我怎么看这个世界的&#xff1f; 创业前我一…

输入a,b,c3个整数,按由大到小的顺序输出

解题思路&#xff1a; 用3个指针变量指向3个整型变量&#xff0c;然后用swap函数来实现互换3个整型变量的值。 编写程序&#xff1a; 运行结果&#xff1a; 程序分析&#xff1a; exchange函数的作用是使指针变量p1,p2,p3所指向的整型变量按由大到小的顺序交换它们的值…

ARM32开发——串口库封装(初级)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程分组创建 接口定义完整代码 开发流程 在文件系统中&#xff0c;创建库目录Library在keil工程中&#xff0c;创建分组管理…

【Vue】组件通信

文章目录 一、组件之间如何通信二、组件关系分类三、通信解决方案四、父子通信流程五、父向子通信代码示例六、子向父通信代码示例 组件通信&#xff0c;就是指组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据。想使用其他组件的数据&…

Java集合简略记录

一、集合体系结构 单列集合&#xff1a;Collection 双列集合&#xff1a;Map 二、单列集合 List系列集合&#xff1a;添加的元素是有序、可重复、有索引 有序指的是存和取的顺序是一致的&#xff0c;和之前排序的从小到大是没有任何关系的 Set系列集合&#xff1a;添加的元素是…

28 hive安装-本地模式

1.安装mysql&#xff08;参考文章&#xff1a;centos7.8安装Mysql8.4-CSDN博客&#xff09; 2.将mysql驱动拷贝到/opt/module/hive/lib目录下 &#xff08;直接windows通过finalShell上传&#xff09; 3./opt/module/hive/conf目录下新建hive-site.xml文件&#xff0c;进行配置…

c#与汇川plc通信 使用官网API库

前言 上位机开发中有时会要求与PLC进行通信&#xff0c;汇川官网也有好用的API库方便大家使用。记录一下开发过程。 1.下载资料 汇川官网地址&#xff1a;汇川技术 - 推进工业文明 共创美好生活 打开后选择&#xff1a;服务与支持-》资料下载-》 资料下载 这里可以直接搜索&am…

傅立叶变换矩阵的频谱响应

傅立叶变换矩阵的频谱响应 线性变换可以用矩阵表示&#xff0c;傅立叶变换是一种线性变换&#xff0c;因此也可以使用矩阵表示。具体可以参考&#xff1a;离散傅立叶变换和线性变换的关系&#xff1a;什么是线性空间&#xff1f; 1、傅立叶矩阵 X [ k ] ∑ n 0 N − 1 x [ …

实测有效:Win11一键恢复win10经典右键菜单,让Win11右键默认显示更多设置教程!

Win11一键还原win10右键菜单&#xff1f;win11右键菜单怎么改&#xff1f;怎样让Win11右键默认显示更多选项&#xff1f;今天&#xff0c;我要给你们介绍一款专为Windows 11系统设计的小巧工具&#xff0c;它能让你的右键菜单瞬间回到Win10时代&#xff0c;那种熟悉的感觉&…