Pull to refresh

Comments 20

Спасибо за статью. Подпишусь под каждым словом. Добавлю, что SonarQube особенно хорош для больших гетерогенных проектов, например BE (Java), Android приложение (Kotlin), iOS (ObjC/Swift).

Мне с сонаром как-то не пришлось плотно работать, его можно запустить на локальном коде?

SonarQube сервер можно запускать локально.

Извините, я у вас спрошу про это предложение:
Этот человек несёт персональную ответственность за технические решения, принимаемые на проекте, а также следит за качеством кода.
Что означает эта ответственность? Вы его уволить в случае чего захотите (или того, кто его нанял на эту позицию), или побить захотите, чтобы он все выходные проверял чьё-то качество кода?

Нет, без рукоприкладства, конечно)

На проекте должен быть кто-то, кто принимает технические решения. Такой человек должен быть один, иначе будет коллективная безответственность. Этот человек разруливает спорные/конфликтные ситуации по технической части. Например, один разработчик хочет Кафку для нового проекта, а другой - RabbitMQ. И они никак не могут договориться. Архитектор должен сделать выбор. Он не должен идти на компромиссы и стараться угодить всем. Он может выбрать, например, Pulsar)

Эта ответственность чаще всего зашивается в KPI и премиальную часть.

Если такой человек раз за разом принимает неудачные решения, то однозначно, что роль архитектора не для него. Вовсе не обязательно его за это увольнять (если это не был специально нанятый архитектор в команду).

а большинство людей негативно воспринимает нововведения; особенно те, которые их как-то ограничивают

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

В нашем энтерпрайзе мы использовали как обязательные (по требованию отдела безопасности) - Fortify, Checkmarx, Black Duck, а вот Sonar использовался только как добровольная дополнительная проверка на уровне проекта.

Из свежих и интересных ещё стоит упомянуть Qodana от Jetbrains.

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

У sonar'a есть хорошая интеграция с битбакетом - где он подтягивает информацию о покрытии кода для PR, помечая цветом с боку о покрытии или нет. Удобно для ревьюрера.

Не то чтобы я был против статического анализа, но вот практика мне говорит, что увы — в реальности от большинства упомянутых инструментов (а их их использовал или использую почти все) для меня пользы практически ноль. Они не окупают усилий по их настройке и поддержанию пайплайна в рабочем состоянии. Упомянутый тут Checkmarx, скажем, дает одни ложные срабатывания, просто без исключений.

Я не знаю, в чем отличие наших проектов от проектов автора, или в чем отличие команды, но наверное оно есть. Может быть, проекты в основном интеграционные, или просто нестандартные, может быть квалификация команды влияет (ну то есть, влияет скорее всего — скажем, синьоры не склонны делать «детские» типовые ошибки, а именно эти ошибки как раз хорошо ловятся линтерами).

Упомянутый тут Checkmarx, скажем, дает одни ложные срабатывания, просто без исключений.

Встречался с сообщениями от него и они все были по месту.
Хотя местами их и приходилось выключать:

  • то из-за того что эта ошибка в тестовом коде и нам тут проще знать что она возможна чем чинить её

  • то из-за того что это редкий false positive, но там реально сложно понять что в нашем случае проблему эксплуатировать не получится

Ну так я и не говорю, что оно совсем не работает. Просто… ну скажем так, оно активно диагностирует всякие веб уязвимости, а так как у нас этого веба нет — то они все и ложные почти без исключения. Или попросту говоря, человеку в наших условиях как раз легко понять, что эксплуатировать вот это не получится. А ему без контекста это понять сложно. То что оно их диагностирует — совершенно правильно, но малополезно. Возможно, если порыться в настройках, и выключить 90% диагностик, можно оставить только полезное.

Ну для меня вот это

Упомянутый тут Checkmarx, скажем, дает одни ложные срабатывания, просто без исключений.

это совсем не

Ну так я и не говорю, что оно совсем не работает.

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

ИМХО обычный code coverage(например JaCoCo) не очень полезен, так как line coverage можно набить и тестами, которые будут просто запускать код, но не выполнять ни единой проверки. Предпочитаю вместо этого использовать mutation testing, например https://pitest.org/

Мне кажется, вы сильно утрируете. Обычный code coverage прекрасно решает свою задачу. На code review будет видно, что проверки в тестах бесполезны, и задача вернётся на доработку.
Мутационное тестирование - очень интересная вещь, но не для всех, я бы сказал. Я сейчас внедряю pitest на личных проектах. При использовании со Spring есть сложности. Если у вас есть рекомендации/опыт внедрения, поделитесь, пожалуйста, буду очень благодарен.

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

ИМХО обычный code coverage(например JaCoCo) не очень полезен, так как line coverage можно набить и тестами, которые будут просто запускать код, но не выполнять ни единой проверки

+1. Покрывать нужно конечные сценарии, а не код сам по себе

Sign up to leave a comment.

Articles