jcvviljoen / php-stability-metrics
基于清洁架构原则计算架构稳定性指标的 PHP 工具
Requires
- php: ^8.3
- ext-json: *
- symfony/console: ^6.0|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.2
- slevomat/coding-standard: ^8.15
README
PHP 稳定依赖性指标分析器
概述
稳定性 是一款基于 PHP 的工具,旨在分析和计算架构中软件组件的稳定性。
它利用清洁架构原则和稳定依赖性指标,为您提供对代码库的可维护性和鲁棒性的见解。
稳定性是对 稳定依赖性原则 和 稳定依赖性指标 的认可,实际上我们是在测量 不稳定性。
目标是识别出过于抽象或过于不稳定的组件。
为什么要使用稳定性?
稳定性可以帮助您识别出过于复杂(过于抽象)或过于紧密耦合(过于不稳定)的组件。
随着项目的持续发展,通过监控组件的指标,您可以提前检测到代码库/架构中可能需要重构的区域。
这可以帮助您提高代码库的可维护性和鲁棒性,同时使代码更容易理解。这些指标还可以用于指导您的开发过程,并说服利益相关者进行改进的需求。
安装
要安装该包,请使用 Composer 将其包含为开发依赖项
composer require --dev jcvviljoen/stability
使用
要计算组件的稳定性,请运行以下命令
php vendor/bin/stability
还支持各种参数(不用担心,任何无效的设置都会引导您完成此过程)
-i, --init
: 初始化配置文件--config
: 指定自定义配置文件/路径--debug
: 启用调试输出(暴露异常堆栈跟踪)
例如,您可以指定自定义配置文件(只要它是受支持的格式)
php vendor/bin/stability --config "path/to/config.php"
配置字段
您可以使用各种配置字段来自定义分析,所有这些都在 示例配置文件 中进行了说明。
您可以执行以下操作
- 指定要扫描的主应用程序源。
- 定义您想要分析的应用程序中的组件。
- 对于每个组件,您还可以
- 排除特定文件/目录的扫描。
- 进入痛苦区域的阈值(未指定时默认为 0.7)。
- 进入无意义区域的阈值(未指定时默认为 0.7)。
发挥创意
您不必将自己限制在单个应用程序源上。您还可以在更高(或更低)粒度级别分析您的项目!
例如,让我们考虑一个模块化单体。您可以
- 分析整个应用程序以查看模块之间的交互;
- 分析每个模块以查看模块内部层的交互;或者
- 分析层内的领域以查看领域内类的交互。
如果您发现任何有趣的事情或想要分析某些特定内容,请分享或贡献力量!
功能
- 组件解析:根据您的配置将类和模块解析为组件。
- 稳定性计算:计算抽象度、不稳定性以及主序列距离(DMS)等指标。
- 输出结果:输出计算出的稳定性结果,供进一步(手动)分析。
* 更多关于潜在未来功能的详细信息,请参阅路线图。
稳定依赖度指标
稳定性使用以下指标来评估组件的稳定性:
抽象度(A)
衡量抽象类和接口与类总数量的比率。值越高表示抽象组件越多。
不稳定性(I)
衡量输出依赖与总依赖数的比率。值越高表示不稳定的组件越多(即由于依赖数量多而难以更改的组件)。
主序列距离(DMS)
结合抽象度和不稳定性,以确定组件与抽象和稳定性理想平衡状态的距离。
更多关于应用原则的详细信息,请参阅CLEAN_ARCHITECTURE文件。
贡献
欢迎贡献!
有关更多信息,请参阅CONTRIBUTING文件。
许可
本项目采用MIT许可证——有关详细信息,请参阅LICENSE文件。
致谢与引用
本项目在很大程度上受到Robert C. Martin的工作的启发,他在其著作《Clean Architecture》中引入了稳定依赖度指标的概念。
此外,向Sergio Rodríguez表示敬意,他在这里提供了这本书的良好总结。
最后,感谢Thiago Cordeiro在项目开发过程中的指导和建议。