0. Stepa86 1286 22.07.19 13:49 Сейчас в теме

Управление качеством кода

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Evil Beaver 6404 22.07.19 11:26 Сейчас в теме
Охрененно! Аффтар, пешы есчо, хорошо же получается!
theelectric; pbabincev; tsmult; PowerBoy; pavlov_dv; gubanoff; Winstoncuk; Labotamy; zeegin; olegtymko; Stepa86; +11 Ответить
2. mrXoxot 2236 22.07.19 11:34 Сейчас в теме
Очень здорово!
Пусть все получиться!
pbabincev; vlad.frost; Labotamy; +3 Ответить
3. artbear 1165 22.07.19 11:56 Сейчас в теме
(0) >Все любят хорошую документация

Опечатка.
4. artbear 1165 22.07.19 12:16 Сейчас в теме
(0) Отличная статья. Радует, что все больше разработчиков/команд обращают внимание на качество своей работы - статический анализ кода, автоматические тесты, CI, DevOps и вот это вот все.
pbabincev; pavlov_dv; YPermitin; +3 Ответить
5. artbear 1165 22.07.19 12:24 Сейчас в теме
Проверяются только модули со снятыми замками.
Если замок стоит - это не наша проблема.


Вот тут на самом деле непросто.
Да, такое решение упрощает жизнь, скорость анализа, количество замечаний и т.п.

Но самом деле модули на замке (модули от вендора) - это также проблема "наша" (команды, разработчиков), если эти модули используются в бою.
Ведь если в продуктиве возникнет ошибка в таком модуле, бизнес будет обращаться к нам, как к разработчикам/внедренцам системы, а не к вендору, верно :) ?

Команде проекта нужно решить, нужно ли все-таки учитывать такие модули или нет.

Для сложных систем для наших клиентов я советую следующее:
- учитывать модули на замке, а не отбрасывать
- анализировать только новые замечания с уровнем (критичные, блокирующие, важные) - как в статье в соседней рекомендации и написано.
- вдруг все-таки вендор серьезно ошибся, ведь и такое бывает.
Светлый ум; Redokov; nvv1970; Winstoncuk; zeegin; +5 Ответить
6. Scorpion4eg 255 22.07.19 14:43 Сейчас в теме
Жаль что никто кроме EDT напрямую с внешними обработками не работает.
АПК от слова совсем. Sonar более менее пережевывает... А ведь во внешних печатных формах можно столько всего на плохокодить.
7. olegtymko 405 22.07.19 14:45 Сейчас в теме
(6) Паковать обработки / отчеты в cf/cfe и прогонять в EDT, АПК и заливать все в SonarQube. Тогда весь плохокод будет на лицо.
Scorpion4eg; +1 Ответить
9. artbear 1165 22.07.19 15:51 Сейчас в теме
(7) Костыль ИМХО. но ради качества на что не пойдешь :)
Scorpion4eg; +1 Ответить
8. artbear 1165 22.07.19 15:50 Сейчас в теме
(6) Почему "никто" ? наш платный плагин для SonarQube (от Пули) прекрасно работает.

и в VSC можно немедленно получать результаты, если кодируешь код в VSC.

давно проверяю инструмент Ванесса-АДД, построенный как раз на внешних обработках.
10. theshadowco 90 22.07.19 16:20 Сейчас в теме
(8) токо в формате edt увы работает неахти
Жолтокнижниг; Labotamy; +2 Ответить
11. Scorpion4eg 255 22.07.19 16:42 Сейчас в теме
(8) Не спорю, классно работает! Но когда мы его тестировали была проблема с "Возможно неиспользуемая процедура" для обработчиков элементов формы. Решили уже?
12. Fox-trot 108 22.07.19 17:33 Сейчас в теме
(11) достаточно добавить операнд "Экспорт", хотя костыль конечно
13. artbear 1165 22.07.19 17:51 Сейчас в теме
(11) Да, эта проблема решена в конце прошлого года или начале этого
Scorpion4eg; +1 Ответить
14. vlad.frost 186 22.07.19 23:49 Сейчас в теме
Правило бойскаута
Отдельно выделю - Оставляйте код чище, чем застали. Сделайте чуточку лучше тот код, который трогаете при кодировании текущей задачи.


SonarQube, кстати, позволяет этому правилу следовать с чуть меньшими рисками:
во-первых, можно заранее, перед выполнением задачи, посмотреть, какие есть в коде нарушения стандартов;
во-вторых, после всех правок убедиться, что все нарушения-таки исправлены.
artbear; Stepa86; +2 Ответить
15. user614660_dajigin 23.07.19 06:47 Сейчас в теме
Все таки есть сомнения по поводу "Иначе". Очень много конструкций таких типов:

Если КакойТоПризнак = ПервоеЗначение Тогда
ВыполнитьДополнительныеДействия1;
ИначеЕсли КакойТоПризнак = ВтороеЗначение Тогда
ВыполнитьДополнительныеДействия2;
КонецЕсли;

...Продолжаем выполнение по плану: действия, которые должны выполняться для ПервоеЗначение, ВтороеЗначение и все последующие....

Что в этом случае? Пустой "Иначе" делать? Какой в нем смысл? Исключения выкидывать нельзя, т.к. "непопадание" в условия это не ошибка.
16. Labotamy 23.07.19 06:52 Сейчас в теме
(15)В этих случаях диагностика ничего вам не скажет. Диагностика срабатывает на Если ИначеЕсли без Иначе.
17. user614660_dajigin 23.07.19 06:53 Сейчас в теме
Уже понял косяк)) Исправил вопрос))
18. Labotamy 23.07.19 06:58 Сейчас в теме
(17)Посмотрите комментарии к статье Олега. Там весёлый холиварчик на эту тему вышел.
olegtymko; Stepa86; +2 Ответить
19. user614660_dajigin 23.07.19 07:07 Сейчас в теме
20. artbear 1165 23.07.19 12:05 Сейчас в теме
(15) Да, эта диагностика холиварна и дает много срабатываний.

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

Если ложных очень много, это создает шум, мешающий команде разработки.

Поэтому мы для своего платного плагина (от Пули) все еще думаем над необходимостью введения этого правила.

Создавать правило, которое, скорее всего, чаще будет отключено, не хочется.
21. olegtymko 405 24.07.19 03:17 Сейчас в теме
(20) Опять же это очень холиварная тема.
На стадии разработки эта проверка очень много нервов и жизней может спасти. Но и в проде поможет отловить определенную массу косяков.
К примеру:
Дан какой-нибудь произвольный обмен с партнером через FTP в их кастомном формате. В коде есть условие, которое определяет что делать с документом
ДД = Новый ДвоичныеДанные(); // какие-то двоичные данные
ВидФайла = "ARRAIV"; // вид файла, который прочитали из именя файла

Если ВидФайла = "PICK" Тогда
	ЗагрузитьКакРасходнуюНакладную(ДД);
ИначеЕсли ВидФайла = "ORDER" Тогда
	ЗагрузитьКакЗаказ(ДД);
ИначеЕсли Видфайла = "STOCK" Тогда
	ЗагрузитьКакРеестрОстатков(ДД);
КонецЕсли;
Показать


Если не сообщить о виде файла, что он не поддерживается, то проблема может жить очень долго и никто об этом не узнает. В этом случае можно код допилить так:
Если ВидФайла = "PICK" Тогда
	ЗагрузитьКакРасходнуюНакладную(ДД);
ИначеЕсли ВидФайла = "ORDER" Тогда
	ЗагрузитьКакЗаказ(ДД);
ИначеЕсли Видфайла = "STOCK" Тогда
	ЗагрузитьКакРеестрОстатков(ДД);
Иначе
	// или исключение (при условии что выше по уровню стоит попытка и отлавливает все исключения)
	ВызватьИсключение(СтрШаблон("Вид файла %1 не поддерживается"));
	// или соообщение в какой нибудь лог
	Логирование.Ошибка("Обмен.СамыйЛучшийПарнер", СтрШаблон("Вид файла %1 не поддерживается"));
КонецЕсли;
Показать


Да, ложные срабатывания бывают. Когда в алгоритме понятно, что если условия не выполнились то и делать ничего не надо. Но есть способ отключить проверку в определенном блоке кода.
24. Scorpion4eg 255 03.11.19 14:25 Сейчас в теме
(20) Никогда не понимал почему холиварная. Для себя давно завел правило: не знаешь что писать в иначе, пишу ВызватьИсключение "Неожиданный вариант".
Исключение - обработка оповещения в формах
olegtymko; Labotamy; +2 Ответить
26. Ndochp 101 13.11.19 11:55 Сейчас в теме
(24) Ну вот смотри, у тебя есть что-то, что работает с десятком видов документов и в 8 в реквизите то, что тебе надо, в девятом префикс "ДД.", в десятом - суффикс ".Ик"
вот ты и пишешь:

Если ВидФайла = "PICK" Тогда
    ПараметрСтрокой = Сред(ПараметрСтрокой, 4);
ИначеЕсли ВидФайла = "ORDER" Тогда
    ПараметрСтрокой = Лев(ПараметрСтрокой, СТрДлина(ПараметрСтрокой) - 3);
КонецЕсли;
27. Scorpion4eg 255 13.11.19 15:14 Сейчас в теме
(26) Это понятно. Но что ты будешь делать, если ВНЕЗАПНО (а это всегда внезапно) придет новый ВидФайла? Сколько времени потребуется на поиск ошибки?

А так добавляешь строку:
Иначе
ВызватьИсключение "Неожиданное значение переменной ВидФайла" + ВидФайла;
КонецЕсли;
olegtymko; Labotamy; +2 Ответить
28. Ndochp 101 13.11.19 21:22 Сейчас в теме
(27)У меня для 8 видов все хорошо, для двух - проблемы. Скорее всего с одиннадцатым все будет тоже хорошо. А если не будет, то я об этом не забуду.
Или вы предлагаете сделать еще один блок с видами файла 1..8? А если я точно знаю, что у меня 2 исключения, но не уверен, сколько основных?
Типа уникального перемещения между складами - единственный документ с двумя складами. Вы знаете все документы в конфигурации с реквизитом "Склад"?
29. Labotamy 14.11.19 08:42 Сейчас в теме
(28) А все коллеги знают и помнят эти "нюансы"? И те кто будут после, тоже?
30. Ndochp 101 18.11.19 15:31 Сейчас в теме
А куда деваться? или предлагаете перед каждым использованием реквизита "Склад" в экспортных процедурах модулей складской подсистемы делать проверку на тип документа и выбрасывать исключение для новых типов?
22. kalimehtar 20 29.07.19 08:12 Сейчас в теме
(15)
Пустой "Иначе" делать? Какой в нем смысл?


Смысл в том, что ты явно указал любому читающему, что ветка Иначе пропущена не случайно. Также как в проверках Си "while (c = getchar()) " считается ошибкой, а "while ((c = getchar()))" нормальный код. Вторая пара скобок указывает, что присваивание там осознанно, а не перепутали со сравнением "==".
25. Ndochp 101 13.11.19 11:49 Сейчас в теме
(22) Только АФАИР влетаешь в диагностику " в блоке нет кода"
23. Tavalik 2127 29.07.19 16:36 Сейчас в теме
31. FrancuzbyGmailcom 29.11.19 11:28 Сейчас в теме
Кажется это "содрано" из книги "Совершенный код" ;)
32. Labotamy 29.11.19 15:02 Сейчас в теме
33. Stepa86 1286 29.11.19 15:03 Сейчас в теме
(32) Про стандарты 1С у Макконнелла все же лучше написано
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист/Cтарший программист 1С
Москва
зарплата от 100 000 руб. до 250 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день