gpt4 book ai didi

unit-testing - 测量数据映射函数和闭包的圈复杂度

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

根据圈复杂度的基本规则,以下代码的复杂度应为 2(只有一个分支点 - for 循环)。

function SumArray(array_to_sum) {
var sum = 0;
for (var i = 0; i < array_to_sum.length; i++) {
sum += array_to_sum[i];
}
return sum;
}

很多现代框架等都提供了数据映射功能,如 jQuery.each()Underscore.js 中的大多数方法框架。考虑以下代码:
function SumArray(array_to_sum) {
var sum = 0;
jQuery.each(array_to_sum, function(index, value) {
sum += value;
});
return sum;
}

按照圈复杂度的典型规则,第二个例子的CC度量为1。工作完全相同,函数的人为复杂度根本没有改变。我所做的只是将一种循环数据的方式换成另一种循环数据的方式。

同样考虑这个人为的例子,我们将原始函数的内部包装在一个自调用闭包中,为外部方法生成 1 的圈复杂度,而实际上并未改变方法的工作方式:
function SumArray(array_to_sum) {
return (function() {
var sum = 0;
for (var i = 0; i < array_to_sum.length; i++) {
sum += array_to_sum[i];
}
return sum;
})();
}

圈复杂度的真正度量是否应包括数据映射/减少方法的考虑,例如 jQuery.each()特别是在使用匿名本地闭包时?

也许闭包应该将其复杂性导出到关闭的父级。此外,也许一般方法应该能够定义一个导出复杂性,该复杂性被添加到调用它的任何函数的复杂性中——例如也许 jQuery.each()应该具有 1 的导出复杂度,以便使用它代替正常循环计数复杂度相同。

最佳答案

圈复杂度是代码可读性的度量。 McCabe 部分描述了测量圈复杂度的前提,“此外,复杂的组件也难以理解、难以测试和难以修改。”

即对读者来说复杂的代码更容易出现错误,因为它更难测试(通过单个代码块的更多路径。它可能会留下错误,因为它很难修改,因为它们更难理解,所以人们避免修改它。

关于unit-testing - 测量数据映射函数和闭包的圈复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091959/

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