Осциллограф языка

Осциллограф языка

Описание

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

(N1 + N2)/(n1 + n2)
Здесь:

  • N1 является количеством случаев операторов.

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

  • N2 является количеством случаев операндов.

  • n1 является количеством отличных операторов.

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

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

Совет

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

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

Чтобы осуществить пределы на метриках, смотрите, Вычисляют Метрики сложности кода.

Примеры

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

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 (17 + 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
Метрика HIS: да

Смотрите также