PHP质量工具系列之php-depend

php-depend是一个开源的静态代码分析工具,它的主要功能包括:
代码质量分析

复杂度度量:计算类、方法和函数的Cyclomatic Complexity(循环复杂度),帮助识别潜在的复杂代码段。

耦合度度量:分析类之间的耦合,以确定哪些类可能更难维护或重构。

继承分析:评估类的继承层次结构,以及类之间的继承关系。

设计问题检测:发现设计模式,如过深的继承树、过大的类等,这些都是代码质量下降的信号。
代码结构可视化

图形报告:生成诸如类图、调用图等图表,帮助开发者直观地理解代码结构。

文本报告:提供详细的文本报告,列出代码的度量指标。
可维护性指标

Maintainability Index(MI):计算代码的可维护性指数,帮助预测代码的可读性和可维护性。
自动化集成

持续集成:可以轻松集成到持续集成(CI)流程中,作为代码质量检查的一部分。

安装

shell 复制代码
composer global require --dev pdepend/pdepend

执行

shell 复制代码
pdepend --jdepend-xml=reports/pdepend_jdepend.xml --coverage-report=reports/phpunit_coverage_clover.xml ./app,./config,./route

参数介绍:

--jdepend-xml 指定结果输出文件

--coverage-report 利用phpunit执行的代码覆盖率,更精准的执行扫描和得到更精准的结果

后面三个位置需要扫描的目录,多个之间以逗号隔开

结果解读

TC(Total Classes):包中的总类数。

CC(Concrete Classes):包中的具体类数(非抽象类)。

AC(Abstract Classes):包中的抽象类数。

Ca(Afferent Couplings):进入该包的耦合数(即其他包有多少类使用了这个包中的类)。

Ce(Efferent Couplings):从这个包出去的耦合数(即这个包中的类使用了多少个其他包的类)。

A(Abstractness):抽象度,通常是抽象类数与总类数的比值(AC / (AC + CC))。

I(Instability):不稳定性,通常是Efferent Couplings与(Efferent Couplings + Afferent Couplings)的比值(Ce / (Ce + Ca))。

D(Distance):距离,通常用于表示抽象度和不稳定性的平衡,是抽象度和不稳定性的差的绝对值(|A + I - 1|)。

面向对象设计度量指标
Afferent Couplings (AC) :一个类或包被其他类或包依赖的程度。高AC值可能表示该类或包是核心组件,但需要小心维护以保持其稳定性。
Efferent Couplings (EC) :一个类或包依赖其他类或包的程度。高EC值可能表示该类或包与其他部分紧密耦合,可能导致维护困难。
Abstractness (A) :衡量类或包中抽象成分的比例。高抽象度通常意味着更好的可扩展性和可维护性。
Instability (I) :衡量类或包的稳定性。不稳定性高的类更容易发生变化,因为它们高度依赖于其他类或包。
Distance (D):是抽象度和不稳定性的函数,用于评估类和包的设计是否达到了理想状态(即高抽象度和低不稳定性)。

Jenkins中使用

jenkins插件之Jdepend

看到这里了,点个赞再走吧

PHP质量工具系列

PHP/JS质量工具,安全工具,Jenkins插件 总结
TOP 6 PHP代码质量工具
PHP质量工具系列之php-depend
PHP质量工具系列之phpmd
PHP质量工具系列之phpcpd
PHP质量工具系列之phploc
PHP质量工具系列之paslm
PHP质量工具系列之phpstan
PHP质量工具系列之Owasp dependency-check
PHP质量工具系列之php_codesniffer
PHP质量工具系列之phpunit
PHP质量工具系列之xhprof
SBOM生成之CycloneDX

CI/CD之Jenkins插件使用系列

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

相关推荐
liuyang-neu6 分钟前
java内存模型JMM
java·开发语言
我很好我还能学2 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
蓝婷儿2 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
渣渣盟2 小时前
基于Scala实现Flink的三种基本时间窗口操作
开发语言·flink·scala
糯米导航3 小时前
Java毕业设计:办公自动化系统的设计与实现
java·开发语言·课程设计
糯米导航3 小时前
Java毕业设计:WML信息查询与后端信息发布系统开发
java·开发语言·课程设计
MessiGo3 小时前
Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
开发语言·javascript·原型模式
大霞上仙3 小时前
nonlocal 与global关键字
开发语言·python
galaxy_strive3 小时前
绘制饼图详细过程
开发语言·c++·qt
黑客老李4 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached