我正在寻找一个 Maven 插件,它将测量模块中所有单元测验的运行时复杂性,如果它高于阈值,则构建失败。我需要这样做来防止意外增加复杂性,这不会破坏功能,但会使代码变慢。它存在吗?
uj5u.com热心网友回复:
复杂性是关于性能度量随着特定自变量或自变量增加而发生的变化。运行一组单元测验的时间没有有意义的复杂性度量……因为:
- 对于任何单个测验,(通常)没有一组自变量可以改变,并且
- 测验套件的整体性能是通常做完全不同事情的单个测验的集合。
方法具有复杂性。但是您需要深入了解哪些方法很重要,它们打算如何使用,以及复杂性度量的自变量应该是什么,以便为它们生成一些有意义的“经验”复杂性近似值。我不认为任何人尝试实作 Maven 或 IDE 插件来做这种事情的可能性不大。或者,如果他们曾经这样做过,那将是可靠的。
我的建议是:
找出对应用程序性能至关重要的方法和自变量。
撰写一些性能测验来运行一系列自变量的方法。
撰写一些“利用”代码来运行测验,捕获度量并将它们与您所针对的复杂性类的“预测”进行比较……对于每个度量。
将这些测验集成到您的测验制度中。
但要注意撰写 Java 微基准测验的陷阱;请参阅如何在 Java 中撰写正确的微基准测验?.
实际上……我更好的建议是根本不要尝试衡量复杂性。相反,只需为您的应用程序创建一些常规基准,并确定一些性能阈值以引起您的注意。毕竟,您的真正目标应该是性能,而不是复杂性。
uj5u.com热心网友回复:
有checkstyle
度量的源代码为波纹管的复杂性。该圈复杂度是工具可能最适合您的需求。
BooleanExpressionComplexity
-限制布尔运算子(的数量&&
,||
,&
,|
和^
在表达式)。ClassDataAbstractionCoupling
- 测量给定类或记录中其他类的实体化数量。ClassFanOutComplexity
- 检查给定类/记录/界面/列举/注释依赖的其他型别的数量。CyclomaticComplexity
- 根据指定的限制检查圈复杂度。它是对通过源的可能路径的最小数量以及所需测验数量的度量。JavaNCSS
- 通过计算非注释源陈述句 (NCSS) 来确定方法、类和档案的复杂性。NPathComplexity
- 根据指定的限制检查 NPATH 复杂性。NPATH 度量通过函式(方法)计算可能的执行路径数。
我们可以启用他们的 mavenpom.xml
档案
0 评论