将圈复杂度保持在 5-10 之间会使单元测试更容易吗?
Does keeping cyclomatic complexity between 5-10 makes unit testing easier?
我计划跟踪方法的圈复杂度,类 在 5-10 之间。
如果我们将它保持在该范围内,编写单元测试会更容易吗?
它是否有助于我们编写有效的单元测试,这在长期 运行 中很有价值?
我知道可以在不跟踪圈复杂度的情况下正确编写单元测试。
有什么想法吗?
是,因为圈复杂度除了计算函数中的决策次数外什么都不做。
您的决定越多,您在测试中必须考虑的分支就越多。此外,保持较低的圈复杂度将帮助您构建具有更高可维护性的软件,因为它或多或少会迫使您将功能开发得更加原子化。举个例子:
您可以编写一个单元测试来涵盖以下函数及其所有 3 个可能的分支:
foo(a, b, c) {
if (a) {
if (b && c) {
return 1;
}
return 2;
}
return 3;
}
或者你可以这样拆分:
foo(a, b, c) {
if (a) {
return foo2(b, c);
}
return 3;
}
foo2(b, c) {
if (b && c) {
return 1;
}
return 2;
}
编写两个单元测试,一个用于函数 foo2(b,c)
,如果您为函数 foo(a,b,c)
编写单元测试,您不再关心 foo2(b,c)
的正确性,因为您已经测试过它。
长话短说:圈复杂度不仅会增加可测试性,还会增加代码的可维护性和可读性以及其他非功能性需求。
我计划跟踪方法的圈复杂度,类 在 5-10 之间。 如果我们将它保持在该范围内,编写单元测试会更容易吗? 它是否有助于我们编写有效的单元测试,这在长期 运行 中很有价值?
我知道可以在不跟踪圈复杂度的情况下正确编写单元测试。
有什么想法吗?
是,因为圈复杂度除了计算函数中的决策次数外什么都不做。
您的决定越多,您在测试中必须考虑的分支就越多。此外,保持较低的圈复杂度将帮助您构建具有更高可维护性的软件,因为它或多或少会迫使您将功能开发得更加原子化。举个例子:
您可以编写一个单元测试来涵盖以下函数及其所有 3 个可能的分支:
foo(a, b, c) {
if (a) {
if (b && c) {
return 1;
}
return 2;
}
return 3;
}
或者你可以这样拆分:
foo(a, b, c) {
if (a) {
return foo2(b, c);
}
return 3;
}
foo2(b, c) {
if (b && c) {
return 1;
}
return 2;
}
编写两个单元测试,一个用于函数 foo2(b,c)
,如果您为函数 foo(a,b,c)
编写单元测试,您不再关心 foo2(b,c)
的正确性,因为您已经测试过它。
长话短说:圈复杂度不仅会增加可测试性,还会增加代码的可维护性和可读性以及其他非功能性需求。