我使用Mccabe代码复杂度作为评估我的代码库的指标,但它只给出了每个函数的代码复杂度得分。 整体代码复杂性得分由我的代码库中所有函数的得分总和给出。 我试图提出一个规范化的指标(考虑到代码行),以反映我们努力降低代码库中的复杂性的趋势。 (我们知道删除/添加功能会改变复杂性得分,但复杂性不会改变)。 有标准的方法吗?我的意思是平均复杂度有点像吗?
答案 0 :(得分:1)
McCabe代码复杂度指标意味着用于函数,而不是整个程序。简单来说:如果一个函数的McCabe数超过某个限制(vulga:意大利面条代码),你应该把它分解成几个更简单的函数。
实际量度是可能路径的数量。对于单个函数来说这是相对容易的,但如果它们是相关的,那么对于几个函数来说相当复杂,也就是说,如果这些函数相互调用。
因此,如果你有独立的函数(例如:一个库),你可以添加它们,但如果它们是相关的(例如:一个完整的程序),你必须通过整个程序计算所有可能的路径。如果一个节点是一个函数,你必须包含McCabe数字,如果没有(例如:一个简单的分支),你可以将它包含为1(一),就像在一个函数中一样。
所以:
当然,您可以自动完成所有操作。好的,你需要为你的语言编写一个能够计算所有可能路径的解析器,如果值得的话......我不知道。
此外:通过将大型函数拆分为几个更简单的函数,可以减少函数的MacCabe数。现在,你如何使用完整的程序?将它拆分成几个更简单的程序/库?是的,我认为这样可行,所以你的想法似乎很合理。
但它仍然需要做很多工作。
顺便说一下:这可能是我的一个宠儿,但我不认为LoC的数量与复杂性有很大关系。除了代码行数之外,LoC是一个非常糟糕的指标。