1

Анализируем размер проекта

Среди метрик качества проекта теоретики выделяют число LOC == lines of code, измеряемое обычно в тысячах.

Для измерения размера проекта в строках кода есть интересный проект cloc, запускаемый в том числе в docker (зачем docker?).

Cloc для заданного каталога анализирует все файлики, по расширению и содержимому файлов определяет язык программирования, считает число пустых строк, строк с комментариями и строки кода. На мой взгляд, удобнее бы смотреть на итоговую сумму, но я заставить его выводить total не смог.

Пример для одного легаси проекта

Пример для одного легаси проекта

А теперь интересное. LOC является очень противоречивой метрикой для контроля. С одной стороны, чем меньше проект, тем лучше. С другой — сокращение размера кода может вредить его читаемости.

Пост из канала DevFM.

Лига программистов

2.2K постов12K подписчик

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

1
Автор поста оценил этот комментарий

Второе по полезности - реализовать фичу за меньшее количество кода, чем коллега.

Ну нет... Если говорить про достаточно большие проекты и команды, то гораздо важнее, чтобы кусок кода был понятнее всем, чем его компактность. Приходится иногда жертвовать лаконичностью и даже скорость работы (!) в пользу наглядности.


P.S. Это с мой точки зрения, всякий кровавый энтерпрайз со сложной бизнес логикой. При написании например, драйверов, скорее всего другие критерии будут важны.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Понятность во главе угла, конечно. Я не про хаки уровня 0x5F3759DF в quake III, а про способность разработчика за счёт более удачной абстракции писать меньше кода. Код при этом должен оставаться понятным и поддерживаемым

2
Автор поста оценил этот комментарий

Ваш вывод в финальных строках связан с тем, что вы просто неправильно используете эту метрику )

Она не дает, и не может дать какого-то точного значения, используемого в расчетах - как какой-нибудь модуль прочности или предельное усилие разрыва.

Она дает только оценку размера проекта, его масштаба.

Лучше использовать не само количество строк кода, а его логарифм )

Ну, или оценивать цифру не по точному значению, а по "количеству нулей в конце".

Проект в 100 строк подходит для задач начинающим.

Проект в 2000 строк подходит для задач студентам - программистам. (Даже такого размера проекты преподавателю будет трудно проверить. Но на меньшем размере студенту вообще не понять, зачем нужно как-то структурировать код.)

Проект размером несколько десятков тысяч строк - скорей всего, потребует не одного программиста, а команды. До 10 000 строк можно и "в одну каску" писать.


P.S. Еще вспомнил. Для очень примерной оценки производительности на уровне "делал что-нибудь или нихера не делал". Если человек две недели работал, говорит, что писал код, а кода написано меньше тысячи строк - что-то тут не так. Или он не код писал, а придумывал алгоритм, структуру или т.п. Или он просто врет.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

О, спасибо за развёрнутый ответ

1. Про логарифм - интересная идея. Но я бы лучше смотрел на диапазоны, это проще и понятнее. Типа до 1к, 1-10к, 10-100к. Блин, вот он и логарифм) но звучит проще всё же. Занятно, кстати, что студенты очень сильно не понимают про проектную работу в целом. Интересно, где-нибудь учат программированию через относительно большие проекты?


2. Предлагаю смотреть на динамику. Деление по языкам в целом нужно для фана. Дальше смотрим либо на общую сумму, либо на нужных язык (условно, трекаем python только). Что смотрим? На прогресс. В январе было 15к, в феврале 16к, в марте 17к, а в апреле снова 17к. Почему? В чём причина?


3. Про размер проекта в контексте команды совершенно согласен. Если на 50к строк у вас один Вася - быть беде)


4. С последним тейком про оценку производительности не соглашусь. Самое полезное - удалять код. Второе по полезности - реализовать фичу за меньшее количество кода, чем коллега. Для оценки разработчика я бы смотрел на связку закрытых задач и изменений кода (см. удаления и добавления в гите). Код же не самоцель, а то будем поэмы в комментариях писать, как индусы в своё время, когда их оценивали по строчкам кода. Или как Маяковский писать)

показать ответы
0
Автор поста оценил этот комментарий
У вас столько разных языков используются... Это вы специально так делаете? Или это специфика приложения такая?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Основная часть - это бэк на питоне (FastAPI). Плюс есть небольшой фронт (html на jinja2), который выдан "как есть" и его можно расширять. Кто хочет - делает отдельный фронт для красоты. Есть кусочек bash для демонстрации отдельного контейнера с заполнением базы. В этом году экспериментировали с интеграцией java-приложения готового, разработанного на другом курсе. Понятно, что ещё compose. Итого должны быть python, html, yaml, css, javascript, bourne shell, dockerfile, markdown. Остальное - какие-то вспомогательные мелочи. А, ini, наверное, для alembic миграций

показать ответы
0
Автор поста оценил этот комментарий

Существуют вирусы, заражающие исходный код. В наше время скачивающихся зависимостей достаточно несколько строчек добавить.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

И для поставленного через apt это очень критично. А для запущенного докер контейнера - поверхность атаки только в выдаваемом конкретном каталоге, что не очень критично. Точнее менее критично, чем доступ к хосту

Автор поста оценил этот комментарий

Грань это здравый смысл. Микросервисы уже давно изобрели.

И как соблюсти баланс между плюсами монолита и микросервисов это вопрос вопросов.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Только микросервисы вносят многие дополнительные накладные расходы и в том числе поэтому не являются серебрянной пулей.


Если вам известна грань, просьба в цифрах её привести. Какой должен быть размер микросервиса? В строчках кода или любой другой измеримой метрике, а не "я так чувствую"

0
Автор поста оценил этот комментарий

Ну, насчет оценки производительности - это, конечно, никак не основной инструмент.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Интереса ради посмотрел, как у моих студентов. По-моему, достойный проект на выходе командной работы из 4 человек. Мне кажется, что у меня диплом примерно такой был по размеру)

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

Если в проекте 100к уже стоит призадуматься. Как доп метрика возможно и будет интересен.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Собственно, где та грань? Вон у django больше 1кк строк)

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

Запускать на своей машине неизвестные бинарники - так себе идея. Пакеты ОС модерируются, в гитхабе остаются следы изменений, а запускать примаунченные докер образы - удел отважных.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А в чём проблема? Докер как раз тем и славен, что меня могут атаковать в пределах выданных данных, в данном случае - каталога с проектом. То есть его могут удалить или отправить кому-то. Удаление меня на смущает - всё в локальном гитлабе. Отправить кому-то? Ну, если паранойя, запускайте на машине с выключенной сетью)


Установленный софт, даже прошедший через модерацию ОС, гарантий также не даёт. Забыл, как назвали практику, когда софт смотрит ip или локаль, и если из РФ, то начинает делать плохие вещи. Только уже с доступом ко всему хосту без ограничений

показать ответы
0
Автор поста оценил этот комментарий

apt install cloc

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Можно и так. Но я не люблю на хост систему тянуть что попало. Зачем, если есть докер?


К тому же сам автор пишет

Note: I don't control any of these packages. If you encounter a bug in cloc using one of the above packages, try with cloc pulled from the latest stable release here on GitHub (link follows below) before submitting a problem report.

Конечно, что в реальности мне прям важна последняя версия этой вспомогательной тулзы

показать ответы
0
146%
Автор поста оценил этот комментарий

оценка стоимости продукта же

раскрыть ветку (1)
Автор поста оценил этот комментарий

Вроде никто в строках стоимость не считает. Или у вас есть опыт?


Более того, строчки уже есть, то есть нельзя заранее оценить стоимость разработки. Если речь именно про стоимость готового продукта, то тут тоже из строчек кода непонятно, как сделать вывод. Я в институте ещё с помощью модели COCOMO2 считал стоимость разработки notepad++ и word. Получившиеся цифры оказались близки, что явно противоречит здравому смыслу. Либо COCOMO бестолковая, либо я неверно применил методологию

1
Автор поста оценил этот комментарий

Что даст определение размера проекта?!

Как это повлияет на работу?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Глобально, никак. Просто красивое


Если чуть больше подумать, можно чуть повысить управляемость. В плане, если у вас 100кк строк кода, а занимается этим один Вася, то вас ждут проблемы. Плюс при возникновении идей "давайте всё перепишем" очень легко проиллюстрировать, почему так делать не надо, и не стать очередным умершим Netscape navigator


То есть понимание размера проекта может стать доп метрикой, на которую можно поглядывать. Резкий рост или даже уменьшение размера проекта может сигнализировать о неких проблемах, которыми нужно заниматься

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества