Code base

Что такое Code Base и как её подсчитать

Code Base (кодовая база) — это совокупность всех исходных файлов программного обеспечения. Она включает в себя все скрипты, модули, конфигурационные файлы, библиотеки и прочие ресурсы, которые необходимы для компиляции, сборки и запуска проекта.

Зачем знать размер кодовой базы?

Размер кодовой базы может быть полезен для:

  • Оценки сложности проекта
  • Планирования рефакторинга
  • Поддержки документации
  • Оценки стоимости сопровождения

Как подсчитать размер кодовой базы?

Обычно размер измеряется в количестве строк кода (LoC — Lines of Code). Для подсчета можно использовать утилиты командной строки, такие как cloc или wc в Linux.

Пример 1: Подсчёт строк с помощью cloc

cloc /путь/к/вашему/проекту

Утилита cloc автоматически распознаёт типы файлов, игнорирует пустые строки и комментарии и выдаёт детальную статистику по каждому языку программирования.

Пример 2: Подсчёт строк вручную через wc

find . -name "*.c" -or -name "*.h" | xargs wc -l

Эта команда найдёт все файлы с расширением .c и .h в текущем каталоге и его подкаталогах, и выведет общее количество строк.

Что входит в кодовую базу

Обычно в code base включаются:

  • Исходные коды программ (например, файлы .c, .cpp, .py)
  • Заголовочные файлы (.h, .hpp)
  • Скрипты сборки (Makefile, CMakeLists.txt и т.д.)
  • Конфигурационные файлы (.json, .yaml, .ini и т.п.)
  • Документация, написанная в Markdown или других форматах

Простая утилитка для подсчета code base

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>

#define MAX_PATH 4096
#define BUFFER_SIZE 8192

// Глобальные счетчики
unsigned long long total_files = 0;
unsigned long long total_lines = 0;

// Подсчет строк в файле
unsigned long long count_lines_in_file(const char *filepath) {
    FILE *fp = fopen(filepath, "r");
    if (!fp) {
        fprintf(stderr, "Ошибка: не удалось открыть файл '%s' - %s\n", filepath, strerror(errno));
        return 0;
    }

    char buffer[BUFFER_SIZE];
    unsigned long long lines = 0;

    while (fgets(buffer, sizeof(buffer), fp)) {
        lines++;
    }

    fclose(fp);
    return lines;
}

// Рекурсивный обход директорий
void traverse_directory(const char *path) {
    DIR *dir = opendir(path);
    if (!dir) {
        fprintf(stderr, "Ошибка: не удалось открыть директорию '%s' - %s\n", path, strerror(errno));
        return;
    }

    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        char fullpath[MAX_PATH];
        snprintf(fullpath, sizeof(fullpath), "%s/%s", path, entry->d_name);

        struct stat st;
        if (stat(fullpath, &st) == -1) {
            fprintf(stderr, "Ошибка: не удалось получить информацию о файле '%s' - %s\n", fullpath, strerror(errno));
            continue;
        }

        if (S_ISDIR(st.st_mode)) {
            traverse_directory(fullpath);
        } else if (S_ISREG(st.st_mode)) {
            total_files++;
            unsigned long long lines = count_lines_in_file(fullpath);
            total_lines += lines;
        }
    }

    closedir(dir);
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Использование: %s <путь к директории>\n", argv[0]);
        return EXIT_FAILURE;
    }

    const char *start_path = argv[1];

    struct stat st;
    if (stat(start_path, &st) == -1 || !S_ISDIR(st.st_mode)) {
        fprintf(stderr, "Ошибка: '%s' не является директорией или недоступен\n", start_path);
        return EXIT_FAILURE;
    }

    traverse_directory(start_path);

    printf("Количество файлов: %llu\n", total_files);
    printf("Общее количество строк: %llu\n", total_lines);

    return EXIT_SUCCESS;
}

Методика подсчёта строк в кодовой базе code base

Строка кода (LoC — Line of Code) — это базовая единица измерения объема исходного кода. Подсчёт строк помогает оценить размер, сложность и стоимость сопровождения проекта.

Что учитывать при подсчёте code base

Чтобы получить корректную статистику, важно определить, какие строки включаются в подсчёт:

  • Полезный код: инструкции, функции, выражения
  • Пустые строки: строки, не содержащие кода или комментариев
  • Комментарии: однострочные (//, #) и многострочные (/* */)

Рекомендация: при анализе различать:

  • Total lines — все строки (включая пустые и комментарии)
  • Code lines — только строки с исполняемым кодом
  • Comment lines — строки с комментариями
  • Blank lines — пустые строки

Инструменты для подсчета

1. cloc (Count Lines of Code)

cloc — мощный кросс-платформенный инструмент, который различает код, комментарии и пустые строки.

cloc /путь/к/проекту

Вывод содержит таблицу с разбивкой по языкам программирования:

Language    files    blank    comment    code
C           10       120       80        950
Python      5        30        40        210
TOTAL       15       150       120       1160
  

2. Подсчёт вручную с использованием find + wc

Если нужен простой подсчёт всех строк в файлах определённого типа:

# Подсчёт всех строк .c и .h файлов
find . -name "*.c" -or -name "*.h" | xargs wc -l
  

Минус: не различает код, комментарии и пустые строки.

3. Подсчёт без пустых строк и комментариев (пример на Python)

Если хотите строго учитывать только код:

def count_code_lines(file_path):
    code_lines = 0
    with open(file_path, 'r') as f:
        for line in f:
            stripped = line.strip()
            if stripped and not stripped.startswith("//") and not stripped.startswith("#"):
                code_lines += 1
    return code_lines
  

Учет HTML и других текстовых форматов

HTML, XML, Markdown, YAML и другие текстовые форматы также входят в code base, если они участвуют в логике приложения (например, шаблоны или конфигурации).

  • HTML — часто содержит структуру интерфейса, может считаться частью кода
  • JSON/YAML — конфигурационные данные, важны для DevOps и CI/CD
  • Markdown — техническая документация

Заключение

Подсчёт строк в кодовой базе должен быть осознанным: просто общее количество строк — это не всегда показатель качества. Лучше использовать инструменты, которые различают полезный код, комментарии и пустые строки, и интерпретировать результаты в контексте архитектуры проекта.

Совет: для регулярного мониторинга размера проекта интегрируйте cloc или аналоги в ваш CI/CD-процесс.

Заключение code base

Кодовая база — это фундамент любого программного проекта. Знание её структуры и размера помогает управлять проектом, оценивать его сложность и принимать обоснованные решения по архитектуре и поддержке.