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