exponenta event banner

Область языка

Область применения языка

Описание

Эта метрика измеряет затраты на ведение или изменение функции. Рассчитывается как:

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

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

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

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

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

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

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

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

Совет

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

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

Сведения о наложении ограничений на метрики см. в разделе Метрики сложности вычислительного кода.

Примеры

развернуть все

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 является (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
ЕГО метрика: Да