Статические анализаторы кода(static code analyzers)

stalxed

Новичок
Пользовался поиском, не нашёл.
Почему нет тем по статическим анализаторам кода?

Начну с себя...

Использую SonarCube.
Поддержка php из коробки.
Использую по следующей схеме:
1) Заливаю код в хранилище GIT. В качестве хранилища используется Atlassian Stash.
2) Atlassian Bamboo по тригеру видит комит и запускает, среди прочего, Sonar Runner.
3) Запуск Sonar Runner происходит через обычную команду ant sonar.xml
4) Для Ant установлен плагин Sonar.

Если кому интересно, могу про установку подробнее описать. Правда под Windows Server.
Ничего сложного.

Теперь о самом анализаторе.
Есть поддержка не только php, но и смежных нам, веб разработчикам, технологий: xml, html, css.
К сожалению, я работаю только c php. Остальной код вне моей рабочей ответственности.
Что же нам даёт php плагин?
2 профиля правил:
  • PSR-2
  • Sonar way.
Я включил все правила, конфликты правил(одни и те же правила, с разными настройками) разобрал вручную. Потом пару раздражающих правил выключил из моего кастумного профиля.
Получилось 61 правило.

Примеры правил:
1) Class names should comply with a naming convention ^[A-Z][a-zA-Z]*$
2) Comments should not be located at the end of lines of code.
3) Function names should comply with a naming convention
^[a-z][a-zA-Z0-9]*$
и т.д.
Регулярные выражения можно редактировать!

Конечно, правила выше могут вызвать только смех, типа и всего!
Но есть правила и поинтереснее, например, проверка форматирования по стандартам PSR2:
PHP:
closing_curly_brace: true
closure_format: true
extends_implements_line: true
foreach_space: true
function_calls_arguments_indentation: true
function_declaration_arguments_indentation: true
interfaces_indentation: true
namespace_blank_line: true
no_space: true
no_space_method_name: true
one_space_after: true
one_space_before: true
one_space_for: true
open_curly_brace_classes_functions: true
open_curly_brace_control_structures: true
space_comma: true
use_after_namespace: true
use_blank_line: true
Конечно, каждый параметр можно изменить под себя!

Я стараюсь придерживаться стандартов PSR, но разрабатываю под Windows, поэтому иногда случается, что создаю файлы с windows переводом строк. Также иногда закрываю php код тегом ?>
И подобной мелочевки достаточно много, которую SonarCube позволяет заметить и устранить.

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

Интерфейс очень классный и удобный.
Продукт бесплатный!

О стабильности: Sonar не вызвал fail не для одного из 500 билдов приложения. Fail вызывают другие компоненты(привет composer и zend server depoyment).
О скорости: 500 файлов общим размером около 1 мб проверились в последнем билде за:
Код:
30-Nov-2014 17:55:27    BUILD SUCCESSFUL
30-Nov-2014 17:55:27    Total time: 42 seconds
30-Nov-2014 17:55:27    Finished task 'Sonar' with result: Success
Я считаю, что это быстро.

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

Недостатки:
  • Для php правил гораздо меньше, чем для Java, речь идёт о разнице в 10-20 раз! Плагин под php развивается, не заброшен, очень надеюсь, что количество правил в дальнейшем будет увеличиваться.
  • Если вы не используйте системы Continuous Integration то использовать Sonar Cube очень проблематично в плане ресурсов. Я выделил приложению 1ГБ ОЗУ. Хотя по умолчанию... хм 768Mb. Не мало... Держать на том же компьютере, где работают современные IDE(Zend Studio, PhpStorm) - не лучшее решение. А постоянно запускать и останавливать Sonar Cube вам попросту надоест.
Что я хочу попробовать:
Я с ними только игрался. В реальном деле, в отличие от Sonar не использовал.
НО!
Их главное отличие от Sonar Cube - они облачные. Т.е. ваш код становится не только вашим...
Конечно они красиво описали о мерах безопасности... Но это лишь слова.

Периодически говорю с Sensio - у них в разработке серверная версия.
НО! Она будет полусерверная, т.е. анализ будет на вашем сервере, а к ним в облако будет уходить только результат.
Меня это устраивает, с нетерпением жду.

С Scrutinizer хочу поговорить, есть ли у них серверная версия.

Во общем пост создал для того, чтобы услышать ваш опыт по использованию подобных инструментов и поделиться своим. Если что интересно ещё в моём опыте - спрашивайте, с радостью отвечу. А если у вас ест опыт, то поделитесь им: какие инструменты используйте, как интегрировали, что нравится, что не нравится и т.д.

Также кто имеет опыт создания правил под SonarCube - помогите пожалуйста с правилом - построчной валидации по регулярному выражению.

Надеюсь тема получит здесь развитие.
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
Для CS используем просто phpcs для git-хука при пуше. Всё устраивает.

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

stalxed

Новичок
На php много интересных анализаторов: PHPCS названный вами, php depend, mess detector, иногда ещё что-то интересное встречаю.
Но куда при пуше вы сохраняете результат проверки? В каком формате? Удобно ли это результат просматривать?
 

stalxed

Новичок

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Гиг выделить на рабочей машине - не проблема, а проверять 60 правил и допиливать разрешение на _ в имени классов как-то влом потому что синтаксис - то фигня.
 

Вурдалак

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

Absinthe

жожо
Но куда при пуше вы сохраняете результат проверки? В каком формате? Удобно ли это результат просматривать?
Хуком в гит. Не прошло проверку - не примет.

Скоро от Jetbrains выйдет аналог FishEye с анализатором кода вне IDE (для джавы уже можно скачать) - может как-то и его можно будет прикрутить.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак, у меня в команде не нужно следить чтоб перед обедом мыли руки и тепло одевались когда идут гулять
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
хм, а какой антоним к слову одиночка: многоночка? программист-из-пары? :) I-can't-dance-I-can't-sing, I'm just standing here programming everything
 

Вурдалак

Продвинутый новичок
Не нужно рассказывать сказки, что всех в твоей команде устраивает отсутствие consistency в коде. Это либо у тебя команда из 2-х человек, либо ты никогда не интересовался мнением команды относительно CS. Расскажи *****, Mamba, etc., что CS — это фигня, ога.
 

hell0w0rd

Продвинутый новичок
Вурдалак, мне кажется grigori имеет ввиду то, что CS и так все соблюдает. В принципе если все используют нормальную ide и файлик настроек проекта в репозитории - проверка cs не нужна)

А по теме - SensiolabsInsight туповат.
 

Вурдалак

Продвинутый новичок
hell0w0rd, не бывает такого, что все соблюдают. Такое, повторюсь, может быть в случае, если команда из 2-х человек и оба чувака договорились. В общем случае всегда найдётся тот, у кого привычка писать по-другому (он может забыть/не знать или вовсе сознательно не соблюдать). Переучивать, напоминать про CS — это глупо и неэффективно, лучше сделать хук.

grigori не говорит, что все соблюдают, он прямо говорит, что ему насрать на CS.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
о, Вурдалак, теперь я знаю кого звать когда надо будет заняться поиском глубинного смысла в чужих мыслях!
 

stalxed

Новичок
Гиг выделить на рабочей машине - не проблема, а проверять 60 правил и допиливать разрешение на _ в имени классов как-то влом потому что синтаксис - то фигня.
Это делается за 1-2 часа. Один раз. В графическом интерфейсе! И все последующие проекты подхватят профиль.

Хуком в гит. Не прошло проверку - не примет.
Сразу возникают вопросы:
  • Что если я в локальном репозитории сделаю 10 комитов. А потом выгружу на сервер. Проблемный будет где-то посередине...
  • Не принял, а как узнать почему не принял?
Скоро от Jetbrains выйдет аналог FishEye с анализатором кода вне IDE (для джавы уже можно скачать) - может как-то и его можно будет прикрутить.
Вернее не Atlassian FishEye, а Atlassian Clover. Но я не видел, чтоб к нему прикрутили поддержку PHP, только Java и Groovy. Поэтому, имхо, если у Jetbrains и дойдут руки до PHP, то уж очень не скоро.

Кстати, по сути SonarCube, Sensio, Scrutinizer - и есть анализаторы вне IDE.
С очень классными админками, в графическом режиме, и прочими финтифлюшками.

А по теме - SensiolabsInsight туповат.
Вы тестировали его с symfony проектами? Почему туповат?

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

Вообще, когда смотришь правила к Java, C# то становится грустно, у них такие классные вещи умеют находить статические анализаторы, что диву даёшься. А у нас PHP...

Имхо, но главные плюсы статических анализаторов кода:
1) Не нужно обслуживать, раз настроил и забыл.(например unit test требуют обслуживания, приходится поддерживать 2 параллельные ветки кода)
2) Не могут испортить код.
3) Не требуют никаких знаний.(unit test требуют большого багажа специфичных знаний: работа с фикстурами, моками, etc).

У меня возникает вопрос, почему в среде PHP статические анализаторы не популярны?
 
Последнее редактирование:

Redjik

Джедай-мастер
Что если я в локальном репозитории сделаю 10 комитов. А потом выгружу на сервер. Проблемный будет где-то посередине...
Не принял, а как узнать почему не принял?
а не надо в мастер гадить =) через пул реквестики все
 

Absinthe

жожо
разу возникают вопросы:
  • Что если я в локальном репозитории сделаю 10 комитов. А потом выгружу на сервер. Проблемный будет где-то посередине...
  • Не принял, а как узнать почему не принял?
Пуш отвалится. Нужно будет исправлять и заливать снова.
Прочитать глазками ошибки.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Это делается за 1-2 часа. Один раз. В графическом интерфейсе!
на 3х компьютерах! а потом еще у 3х людей! а потом каждый раз у всех новых людей! и на скорость или качество разработки это не повлияет!
но ты кодер, деньги - не твоя забота

Вообще, когда смотришь правила к Java, C# то становится грустно
как говорят, java-кодеры, скомпилировалось - значит, работает
 
Сверху