Снегопат
https://snegopat.ru/forum/

Говнокод, часть вторая
https://snegopat.ru/forum/viewtopic.php?f=3&t=661
Страница 1 из 5

Автор:  alonehobo [ 11 окт 2014, 23:04 ]
Заголовок сообщения:  Говнокод, часть вторая

Всем привет. Продолжаем нашу борьбу с говнокодом.
В прошлый раз мы закончили на том, что отформатировали наш модуль, и говнокод стал более-менее симпатичным, но запашок все равно остался.
Сегодня мы поговорим о рефакторинге кода. Т.е. превращаем "говно"-код в "прекрасно/прэлестно/офигенно"-код.
В этом нам будет помогать новый скрипт "Анализ кода". Работа над ним началась только сегодня, поэтому возможностей в нем пока чуть менее, чем ничего.
Но работа ведется, идей море (лишь бы мозгов хватило реализовать), а значит все будет путем. Параллельно с этим скриптом буду дорабатывать и скрипт самого рефакторинга, для устранения тех проблем, которые будут выявляться Анализатором.

Прошу, пробуйте, пишите ваши отзывы и идеи.

На данный момент реализованы следующие проверки:
1. Размер метода (в строках, комментарии пока тоже считаются, потом сделаю настройку для их отключения)
2. Количество параметров в методе
3. Проверка строк кода длиннее определенного значения (по рекомендации 1С это 80 - 120 символов)
4. Проверка сложности условия (т.е. слишком много условных операторов И и ИЛИ)
5. Проверка "мертвых методов"
6. Проверка "мертвых меременных".
7. Проверка переменных на синтаксические ошибки (предложение от EvilBeaver)
8. Дублирование кода

Анализ дублирования запускается отдельной кнопкой т.к. процесс долгий и выполняется внешней обработкой, при этом конфигуратор блокируется.

На данный момент модуль из 5500 строк у меня проверяется 1 минуту. при минимальном блоке 4 строки и максимальном 20. Это можно регулировать в настройках.
Если кликнуть по колонке с количеством повторов в дереве, появится список с номерами строк, в которых встречается этот код.

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

Планируется:
1. Старый код (тот, который закомментировали, но так и не удалили)
2. ну и наверняка еще что-нибудь, совершенству кода нет предела.

P.S. Потестил на одной базе, оказывается столько там хлама было, жуть! Надеюсь и вам пригодится.

Вложения:
CodeAnalysis.zip [46.92 КБ]
Скачиваний: 449
Image 1.png
Image 1.png [ 16.69 КБ | Просмотров: 14565 ]

Автор:  EvilBeaver [ 12 окт 2014, 17:51 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Переменной присваивается значение, но потом оно не используется. Часто указывает на опечатки:
Код:
Переменная = 3;
Если ЧтоТоТам Тогда
   Перемнная = 2;
КонецЕсли;

Возврат Переменная; // Всегда будет возвращать 3.

Автор:  alonehobo [ 12 окт 2014, 17:55 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Да, это один из следующий пунктов. Наверное напишу попозже, что я хочу сделать, а вы уже накидывайте сверху идеи.

Автор:  gigabyte-artur [ 13 окт 2014, 11:18 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Например, переменные, совпадающие с ключевыми словами/функциями. Такие как Сумма, Максимум, Значение и т.д. Впоследствии это может вызвать конфликт имен, а то и привести к непредсказуемым логическим ошибкам.

Автор:  alonehobo [ 13 окт 2014, 19:36 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

update

Автор:  gigabyte-artur [ 14 окт 2014, 10:00 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Видимо, у меня настолько плохой код, что на некоторых модулях скрипт не выдерживает такого позора и падает в ужасе :D

Изображение

Изображение

Изображение

Автор:  FinalPatch [ 14 окт 2014, 11:40 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Если нет активного окна в конфигураторе

Вложения:
Image 1.png
Image 1.png [ 9.67 КБ | Просмотров: 14631 ]

Автор:  gigabyte-artur [ 14 окт 2014, 13:00 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Несколько примеров ложных срабатываний:
1. Некоторые экзотические обработчики (такие как ПриВыводеПериода у Поля календаря) - уверяет, что метод не используется.
2. Реквизиты формы по-видимому не отлавливаются. Практически все, насколько я понял. Говорит, что переменная не используется.
Понятно, что лучше ложные срабатывания, чем упущенные ошибки... Но если есть возможность - ох можно попробовать пофиксить. Впрочем, не горит.
Полезная штуковина, нашел неиспользуемый метод у себя :)

Автор:  alonehobo [ 14 окт 2014, 15:02 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

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

Автор:  gigabyte-artur [ 14 окт 2014, 15:53 ]
Заголовок сообщения:  Re: Говнокод, часть вторая

Хм... Хорошо. Однако, событие формы ПриОткрытии (и ещё несколько) обработано правильно - не было внесено в список. Тем лучше, спорить не буду.
Кстати, если информация поможет: насколько я помню, скрипт "Список функций" умеет получать обработчики - можно посмотреть, как там сделано.

Страница 1 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/