Language Scope

Языковые возможности

Описание

Эта метрика измеряет стоимость обслуживания или изменения функции. Он вычисляется как:

(N1 + N2)/(n1 + n2)
Где:

  • N1 - количество вхождений операторов.

    Кроме идентификаторов (переменных или имен функции) и буквальных констант, все остальное считается операторами.

  • N2 - количество вхождений операндов.

  • n1 - количество отдельных операторов.

  • n2 - количество различных операндов.

    Метрика рассматривает буквальную константу с суффиксом как отличную от константы без суффикса. Для образца, 0 и 0U считаются различными.

Сообщая об этой метрике, Polyspace® округляет вычисленный язык возможностей до первого десятичного знака. Поскольку цель этой метрики состоит в том, чтобы указать поддерживаемость функции, языковые возможности функций, заданная в локальных классах, не вычисляется.

Совет

Как найти N1 + N2, подсчитать общее количество лексем. Как найти n1 + n2, подсчитать количество уникальных лексем.

Рекомендуемый верхний предел для этой метрики равен 4. Для снижения затрат на обслуживание функции попробуйте применить верхний предел для этой метрики. Например, если один и тот же операнд происходит много раз, чтобы изменить имя операнда, вы должны сделать много замен.

Для обеспечения пределов на метрики смотрите Compute Code Complexity Metrics.

Примеры

расширить все

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, ==, return, else, *, -, ;, }.

  • n2 = 4.

    Отличительные операнды f, i, 1 и g.

Языковые возможности f is (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();
  }
};

В этом примере пространство имен std неявно связан с func2. Язык возможностей расчета обработок func2() как std::func2(). Точно так же расчет обрабатывает func1() как my_namespace::func1().

Для образца язык возможностей значение для func1 равен 1.3. Чтобы разбить этот расчет:

  • N1 + N2 = 20.

  • n1 + n2 = 15.

    Отдельными операторами являются int, ::, (, запятые, ), {, return, ;, и }.

    Отличительные операнды my_namespace, func1, a, b, std, и func2.

Метрическая информация

Группа: Функция
Акроним: VOCF
ЕГО Метрика: Да