185 похожих чатов

Платим за написание удаление кода Мы, разработчики, сидим и код какой-то

пишем. Пишем, пишем, его всё больше и больше, а старое почти не удаляем. А когда удаляем то не ясно «а всё ли удалили» — Xcode никак не подсказывает, что где-то какие-то хвостики остались.

В итоге целая пачка проблем:
- Иногда при написании нового кода приходится что-то актуализировать в старом, а он может быть вообще нигде не используется и просто мертвым грузом лежит. Это мы время теряем.
- Иногда при подготовке кода к новым фичам что-то рефачим и случайно удаляем вызов важного метода. Это мы баги заносим.
- Постоянно билдим проект локально и на CI, и в том числе билдится и вот такой мертвый код. Это мы время теряем.

8 июня 2023, то есть год назад, я затащил в проект Додо Пиццы тулзу Periphery — она анализирует весь наш код и говорит «вот тут чет лишнее осталось и вот там кусок бесхозный стал». Её одобрение — одна из обязательных проверок на CI при влитии ПРов.

Я не знаю сколько нового мертвого кода она запретила вливать (хз как посчитать) и сколько багов предотвратила. Но у нас тут с мертвой точки сдвинулась война с брошенными фичатоглами и тулза сильно помогла при их выпиле. И продолжает помогать.

Сначала я скормил ей весь наш проект и она выдала мне около 3000 варнигов. Я понял, что устранить их за раз не вариант. Тогда я загнал все наши модули под карантин, а потом аккуратно раскарантинивал и устранял варнинги. Где-то месяца 2-3 назад я передал задачу другой разработчице, Маше, и где-то полтора месяца назад она закончила выносить все модули из карантина. Но это только первый этап был.

Вторым этапом стал тюнинг настроек Периферии: мы попросили ругаться ещё и на публичные проперти, если они не юзаются или если им нет необходимости быть публичными, так как никто снаружи их не юзает. Это дало нам ещё 3000 варнингов. Маша их устраняла последние полтора месяца.

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

Что это нам дало:
- Перестали тратить время на поддержание кода, который никогда не выполняется на проде.
- Сократили количество легаси. Вот прям сегодня после рефактора очередной кусок удалил по наводке периферии, потому что он перестал использоваться.
- Проект стал билдиться быстрее. Пруфов не будет.
- Ускорили и удешевили билды на CI.

Итог
С самого начала проекта мы считали количество строк кода по мере раскарантинивания проекта. Цифры такие:
Удалили: 27к
Добавили: 5к

Это много или мало? Давайте посмотрим на аналитику сонара:
Lines: 400к
Lines of Code: 250к

Получается мы удалили где-то 5-10% нашего приложения.

Что дальше
Можно подключить к периферии ещё и тесты — там много моков валяется бесполезных и хелперов лишних, на которые мы тож тратим время и силы.

1 ответов

23 просмотра

затестил, топовая тулзовина

Похожие вопросы

Обсуждают сегодня

А есть ли способ заставить конечный класс в иерархии классов реализовать все, всё ещё не реализованные абстрактные методы? самый простой пример: program Project1; {$mode delph...
notme
58
Добрый вечер. Прошу помощи у неравнодушных - являюсь просто пользователем сайта на данной платформе, просто выкладываю туда инфо, новости. Ничего не понимаю в ваших формулах, ...
Надежда
24
what do you do for keep coding? i after 5~10 minutes get tired and waste 30 minutes on internet, watching movies, etc
Mr Thieves
18
хочу поделиться нашими свежими цифрами по использованию dets В базу данных пишется неширокая строка: имя потока, имя файла, таймстемп. в код закралась ошибка и база данных...
Maksim Lapshin
14
Список чатов, например, в каком формате?
The Bird of Hermes
16
Согласны ли вы, что любой инженер-программист должен понимать код на ассемблере, устройство процессора, ОС и тд? Т.е должен знать базу
Ghost
42
my $source = "127.0.0.1:12345"; $source =~ /(.*?):(\d+)/; print "Result: " . Dummy::test($1) . "\n"; "$1"; print "Result: " . Dummy::test($1) . "\n"; $ perl test-xs.plx Usel...
Warstone
6
program Project1; type TRec = record class procedure method; static; inline; end; TMyClass<T> = class R: T; procedure proc; end; procedure TMyClass<T>.pro...
notme
7
Итак... понадобилось мне примерно следующее: program Project1; type TMyClass1 = class class procedure instance_proc; static; inline; procedure DoWork; end; TMyCl...
notme
5
Why does tiktok give you other information of a profile on mobilephone than the desktop, if someone mind me asking?
Witold ♥️🩷
11
Карта сайта