gpt4 book ai didi

整个代码库的 C 代码复杂性指标

转载 作者:行者123 更新时间:2023-11-30 15:06:40 25 4
gpt4 key购买 nike

我使用 McCabe 代码复杂性作为评估我的代码库的指标,但它只给出每个单独函数的代码复杂性得分。总体代码复杂性得分由我的代码库中所有函数的得分总和给出。我正在尝试提出一个标准化指标(考虑到代码行)来反射(reflect)我们随着时间的推移降低代码库复杂性的努力趋势。 (正如我们所知,删除/添加函数会改变复杂度分数,但复杂度不会改变)。有标准的方法吗?我的意思是平均复杂度之类的东西?

最佳答案

McCabe 代码复杂度指标意味着针对函数,而不是整个程序。简而言之:如果一个函数的 McCabe 数超过了一定的限制(俗语:意大利面条代码),您应该将其分解为几个更简单的函数。

实际衡量的是可能路径的数量。这对于单个函数来说相对容易,但对于多个函数来说相当复杂,如果它们是依赖的,也就是说,如果这些函数相互调用的话。

因此,如果您有独立的函数(例如:一个库),您可以添加它们,但如果它们是依赖的(例如:一个成熟的程序),您必须计算整个程序中所有可能的路径。如果节点是函数,则必须包含 McCabe 数,如果不是(例如:简单分支),则可以将其包含为 1(一),就像在单个函数中一样。

所以:

  • 独立函数:将它们全部添加
  • 独立功能:
    • 以线性方式调用(单个路径):将它们全部添加
    • 以两种方式调用(两条线性路径):在每个路径中添加函数并添加两条路径,就像函数中的分支一样
    • n种方式调用(n个线性路径):在每个路径中添加函数并添加所有路径,就像函数中的分支一样
    • 依赖函数:与上面类似,但是因为您需要计算所有可能的路径,所以您很快就会得到大量结果。

当然,您可以将这一切自动化。好的,您需要为您的语言编写一个解析器,能够计算所有可能的路径,这是否值得花钱……我不知道。

此外:您可以通过将一个大函数拆分为几个更简单的函数来减少函数的 MacCabe 数。现在,你如何用完整的程序来做到这一点?将其分成几个更简单的程序/库?是的,我认为这可行,所以你的想法似乎很合理。

但是工作量仍然很大。

顺便说一句:这可能是我的一个小烦恼,但我不认为 LoC 的数量与复杂性有很大关系。除了代码行数之外,LoC 是一个非常糟糕的指标。

关于整个代码库的 C 代码复杂性指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860460/

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