Comment Density

Отношение количества комментариев к количеству операторов

Описание

Метрика задает отношение комментариев к операторам в процентах.

Основываясь на спецификациях HIS:

  • Комментарии из нескольких строк считаются одним комментарием.

    Например, одно замечание представляет собой следующее:

    // This function implements
    // regular maintenance on an internal database

  • Комментарии, начинающиеся с линии исходного кода, не учитываются как комментарии.

    Например, этот комментарий не считается комментарием для метрики, а считается как оператор:

     remove(i); // Remove employee record
  • Оператор обычно заканчивается точкой с запятой за некоторыми исключениями. Исключения включают точек с запятой в for циклы или объявления поля структуры.

    Для образца, инициализация, условие и шаг в круглых скобках в for цикл учитывается как один оператор. В качестве одного оператора учитывается следующее:

    for(i=0; i <100; i++)
    Если вы также объявляете счетчик цикла при инициализации, он считается двумя операторами.

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

Для обеспечения пределов на метрики:

Примеры

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

    struct record {
    char name[40];
    long double salary;
    int isEmployed;
};

struct record dataBase[100];

struct record fetch(void);
void remove(int);

void maintenanceRoutines() {
// This function implements
// regular maintenance on an internal database
    int i;
    struct record tempRecord;

    for(i=0; i <100; i++) {
        tempRecord = fetch(); // This function fetches a record
        // from the database
        if(tempRecord.isEmployed == 0)
            remove(i);         // Remove employee record
        //from the database
    }
}

В этом примере плотность комментариев составляет 38. Расчет выполняется следующим образом:

КодВыполнение общего количества комментариевВыполнение общего количества операторов
struct record {
    char name[40];
    long double salary;
    int isEmployed;
};

01
struct record dataBase[100];
struct record fetch(void);
void remove(int);
04
void maintenanceRoutines() {
04
// This function implements
// regular maintenance on an internal database
14
int i;
struct record tempRecord;
16
for(i=0; i <100; i++) {
16
 tempRecord = fetch(); // This function fetches a record
        // from the database
27
if(tempRecord.isEmployed == 0)
            remove(i);         // Remove employee record
        //from the database
  }
}
38

Всего 3 комментария и 8 операторы. Плотность комментария - 3/8 * 100 = 38.

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

Группа: Файл
Акроним: COMF
ЕГО Метрика: Да