主要内容

语言范围

维护或更改函数的成本

描述

此度量衡量维护或更改函数的成本。它的计算方式如下:

(N1 + N2)/(n1 + n2)
其中:

  • N1 是运算符的出现次数。

    除了标识符(变量或函数名称)和字面常量外,其他所有内容都算作运算符。

  • N2 是操作数的出现次数。

  • n1 是非重复运算符的数量。

  • n2 是非重复操作数的数量。

    此度量将带有后缀的字面值常量与没有后缀的字面常量视为不同常量。例如,0 与 0U 会被视为不同常量。

报告此度量时,Polyspace® 会将计算得出的语言作用域舍入到小数点后第一位。由于此度量的用途是指示函数的可维护性,因此不会计算在局部类中定义的函数的语言作用域。

提示

要求 N1 + N2 的结果,请计算标记的总数。要求 n1 + n2 的结果,请计算唯一标记的数量。

此度量的建议上限为 4。为了降低函数的维护成本,请尝试对此度量强制应用一个上限。例如,如果同一个操作数出现多次,要更改操作数名称,则必须进行多次代换。

要对度量强制应用某些限制,请参阅使用 Polyspace 计算代码复杂度度量

示例

全部展开

int g(int);
int f(int i)
{
    if (i == 1)
        return i;
    else
        return i * g(i-1);
}

在此示例中:

  • N1 = 19。

  • N2 = 9。

  • n1 = 12。

    非重复运算符是 int(){if==returnelse*-;}

  • n2 = 4。

    非重复操作数包括 fi1g

f 的语言作用域是 (19 + 9) / (12 + 4) = 1.8。

namespace std {
  int func2() {
    return 123;
  }
};

namespace my_namespace {
  using namespace std;

  int func1(int a, int b) {
    return func2();
  }
};

在此示例中,命名空间 stdfunc2 隐式关联。语言作用域计算将 func2() 视为 std::func2()。同样,该计算将 func1() 视为 my_namespace::func1()

例如,func1 的语言作用域值为 1.3。此计算可分解如下:

  • N1 + N2 = 20。

  • n1 + n2 = 15。

    非重复运算符包括 int::(、逗号 (,)、){return;}

    非重复操作数包括 my_namespacefunc1abstdfunc2

度量信息

:函数
缩写VOCF
HIS 度量:是

版本历史记录

全部展开