拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何为Maven模块的“运行时复杂性”设定阈值?

如何为Maven模块的“运行时复杂性”设定阈值?

白鹭 - 2022-03-11 1962 0 0

我正在寻找一个 Maven 插件,它将测量模块中所有单元测验的运行时复杂性,如果它高于阈值,则构建失败。我需要这样做来防止意外增加复杂性,这不会破坏功能,但会使代码变慢。它存在吗?

uj5u.com热心网友回复:

复杂性是关于性能度量随着特定自变量或自变量增加而发生的变化运行一组单元测验的时间没有有意义的复杂性度量……因为:

  • 对于任何单个测验,(通常)没有一组自变量可以改变,并且
  • 测验套件的整体性能是通常做完全不同事情的单个测验的集合。

方法具有复杂性。但是您需要深入了解哪些方法很重要,它们打算如何使用,以及复杂性度量的自变量应该是什么,以便为它们生成一些有意义的“经验”复杂性近似值。我不认为任何人尝试实作 Maven 或 IDE 插件来做这种事情的可能性不大。或者,如果他们曾经这样做过,那将是可靠的。


我的建议是:

  • 找出对应用程序性能至关重要的方法和自变量。

  • 撰写一些性能测验来运行一系列自变量的方法。

  • 撰写一些“利用”代码来运行测验,捕获度量并将它们与您所针对的复杂性类的“预测”进行比较……对于每个度量。

  • 将这些测验集成到您的测验制度中。

但要注意撰写 Java 微基准测验的陷阱;请参阅如何在 Java 中撰写正确的微基准测验?.


实际上……我更好的建议是根本不要尝试衡量复杂性。相反,只需为您的应用程序创建一些常规基准,并确定一些性能阈值以引起您的注意。毕竟,您的真正目标应该是性能,而不是复杂性。

uj5u.com热心网友回复:

checkstyle 度量的源代码为波纹管的复杂性。圈复杂度是工具可能最适合您的需求。

  • BooleanExpressionComplexity-限制布尔运算子(的数量&&||&|^在表达式)。
  • ClassDataAbstractionCoupling - 测量给定类或记录中其他类的实体化数量。
  • ClassFanOutComplexity - 检查给定类/记录/界面/列举/注释依赖的其他型别的数量。
  • CyclomaticComplexity- 根据指定的限制检查圈复杂度。它是对通过源的可能路径的最小数量以及所需测验数量的度量。
  • JavaNCSS - 通过计算非注释源陈述句 (NCSS) 来确定方法、类和档案的复杂性。
  • NPathComplexity- 根据指定的限制检查 NPATH 复杂性。NPATH 度量通过函式(方法)计算可能的执行路径数。

我们可以启用他们的 mavenpom.xml档案

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *