gpt4 book ai didi

java - 如何计算项目(而不是类/函数)的圈复杂度?

转载 作者:行者123 更新时间:2023-12-02 08:41:01 27 4
gpt4 key购买 nike

如何计算cyclomatic complexity整个Java项目?我的每种方法都很复杂,但如何将它们全部聚合成一个数字指标?有什么想法或现有方法吗?

我不是在寻找工具,而是在寻找算法。

简单平均很难起作用,因为有许多 1-复杂度方法,这些方法的复杂度并不低,但对代码库的重要性较低(在大多数情况下)。

最佳答案

整本书都是关于代码指标的,所以你很幸运你问了一个更具体的问题。对于 Java 圈复杂度,您可以找到超过 5 或 6 圈复杂度的方法数量(您在此处选择数字)。如果这个数字超过了方法数量的一定百分比,那么总体圈复杂度就很差。百分比的好数字完全取决于项目的大小,因此,也许您可​​以不只除以方法数量,而是通过使其在较大数量时缓慢增长,减少除法中方法计数的权重,例如平方根或对数,以尝试使其随着项目的发展而更加稳定。

也许是这样的:

public double evaluateCyclomaticComplexity(List<MethodStat> methodStats) {
int bad = 0;
for (MethodStat methodStat : methodStats)
if (methodStat.getCyclomaticComplexity() >= 6)
bad++;

double denominator = Math.sqrt(methodStats.size());
return bad * 100.0 / denominator;
}

这里返回的数字越小越好。对于非常糟糕的项目,这将返回大于 100 的值。

分母函数应该表示随着代码库的增长,复杂性增长的速度是可以接受的。通常,随着代码的增长,您希望每个函数的 CC 较低,以便保持可维护性,因此随着项目规模的增加,增长速度较慢的内容是最好的。

测试它、调整它等等。最终,代码指标很难做到恰到好处,在阅读了几篇关于使用数字表示“可维护性”的开源软件的期刊论文后,我可以证明这一点。如果花足够的时间,我们在这里能想到的任何东西都可能会得到很大的改进。

关于java - 如何计算项目(而不是类/函数)的圈复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com