проверка правильности кода php

Как и какими средствами находить ошибки в PHP коде?

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

Вопрос: какие есть способы, чтобы найти ошибки в PHP коде? Какие инструменты, методы, плагины, пути и пр.?

UPD (16.10.2021): список действенных способов в текущем топике (чтобы не листать все):

0Rd9E

6 ответов 6

Вчера всё работало, а сегодня не работает / Код не работает как задумано

Debugging (Отладка)

В чем заключается процесс отладки? Что это такое?

Процесс отладки состоит в том, что мы останавливаем выполнения скрипта в любом месте, смотрим, что находится в переменных, в функциях, анализируем и переходим в другие места; ищем те места, где поведение отклоняется от правильного.

Будет рассмотрен пример с PHPStorm, но отладить код можно и в любой другой IDE.

Подготовка

Для начала необходимо, чтобы в PHP имелась библиотека для отладки под названием xdebug. Если её еще нет, то надо скачать на xdebug.org.

Далее в php.ini прописываем настройки:

Перезагружаем сервер, на всякий случай.

UTOEK

нажимаем Add new local server

9ALwi

JzaZc

Запуск

yHMlH

Z5CSm

В данном случае, т.к. функция вызывается сразу на той же странице, то при нажатии кнопки Debug — отладчик моментально вызовет функцию, выполнение «заморозится» на первом же брейкпойнте. В ином случае, для активации требуется исполнить действие, при котором произойдет исполнение нужного участка кода (клик на кнопку, передача POST-запроса с формы с данными и другие действия).

Процесс

Для самого процесса используются элементы управления (см. изображение выше, выделено зеленым прямоугольником) и немного из дополнительно (см. изображение выше, выделено оранжевым прямоугольником).

Show Execution Point ( Alt+F10 ) — переносит в файл и текущую линию отлаживаемого скрипта. Например, если файлов много, решили посмотреть что в других вкладках, а потом забыли где у вас отладка 🙂

Step Over ( F8 ) — делает один шаг, не заходя внутрь функции. Т.е. если на текущей линии есть какая-то функция, а не просто переменная со значением, то при клике данной кнопки, отладчик не будет заходить внутрь неё.

Step Into ( F7 ) — делает шаг. Но в отличие от предыдущей, если есть вложенный вызов (например функция), то заходит внутрь неё.

Step Out ( Shift+F8 ) — выполняет команды до завершения текущей функции. Удобно, если случайно вошли во вложенный вызов и нужно быстро из него выйти, не завершая при этом отладку.

Rerun ( Ctrl+F5 ) — перезапускает отладку.

Resume Program( F9 ) — продолжает выполнение скрипта с текущего момента. Если больше нет других точек останова, то отладка заканчивается и скрипт продолжает работу. В ином случае работа прерывается на следующей точке останова.

Stop ( Ctrl+F2 ) — завершает отладку.

View Breakpoints ( Ctrl+Shift+F8 ) — просмотр всех установленных брейкпойнтов.

Mute Breakpoints — отключает брейкпойнты.

Итак, в текущем коде видно значение входного параметра:

L3wEK

Дальнейшие нажатия F8 переместят линию кода на строки 11, 12 и, наконец, 15.

Дополнительно

P2y1F

Это удобно, если останов нужен только при определённом значении, а не всегда (особенно в случае с циклами).

Источник

Сравнение анализаторов php-кода на примере разных веб-проектов

Вызывает интерес ваш технический прогресс.
Как у вас там сеют брюкву, с кожурою, али без?

© «Сказка про Федота-стрельца, удалого молодца», Леонид Филатов

Программист — творческая профессия. Мы создаем что-то новое, руководствуясь своими знаниями, внутренним пониманием качества и поставленными дедлайнами. Дедлайны и знания пока оставим в стороне и сосредоточимся на качестве.

Читайте также:  отменят кьюар коды в краснодаре

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

Ниже делимся статьей 2017 года.

image loader

«Что такое плохой/хороший код» — вопрос риторический. В нашей статье под качественным кодом мы будем понимать:

корректный с точки зрения платформы (без запросов к БД в шаблонах компонентов, запросы к БД с использованием индексов),

совместимый с актуальными версиями PHP (5.6, 7.0),

без ляпов (запросы к БД в цикле, запросы к внешним системам на хитах),

без уязвимостей (XSS, CSRF и т.д.).

С написанием хорошего кода отлично справляются самые опытные из нас: тимлиды. Но их мало (в штуках), а их время стоит дорого. У менее опытных разработчиков бывают проблемы со всем вышеперечисленным.

Как обеспечить качество кода с точки зрения методологии известно. Нужно развивать в команде процессы Continuous Integration: версионирование, тестирование, code review. Мы решили разобраться: какие инструменты подойдут для автоматизации code review при промышленной веб-разработке на PHP. А заодно проверим, как найденные инструменты оценят код нашего собственного сайта и нескольких решений из Marketplace 1С-Битрикс.

Инструменты для автоматизации code review PHP

Методика поиска инструментов

Мы нашли на github.com и packagist.org самые оцениваемые и самые скачиваемые проекты, связанные с анализом кода PHP. В обзор мы включили только надежные (созданы не вчера), поддерживаемые (есть сообщество и контрибьюторы) и популярные (количество звезд-”лайков”).

Выделили три категории инструментов:

проводящие анализ кода с целью поиска проблемных мест;

проверяющие совместимость версий PHP 5-7;

Инструменты для анализа PHP-кода

image loader

PHP Code Sniffer анализирует PHP, CSS и JavaScript-файлы на соответствие стандартам кодирования, находит и исправляет ошибки. Стандарт представляет собой совокупность sniff-файлов, задающих правила. Количество установок анализатора с 2016 года превысило

330 тысяч. Использование зафиксировано в

325 тысяч установок с начала 2016 года), так и у разработчиков (с 2017 года используется в

PHP Mess Detector определяет ошибки кода, неоптимальные и усложненные места, неиспользуемые переменные, методы, свойства. Позволяет создавать пользовательские правила. Поддерживает PHP 7. Сохраняет отчеты в трех форматах: текстовый, html, xml. С 2016 года пользователи установили

315 тысяч раз, используется в

PHP Metrics — инструмент статического анализа для PHP. Выдает информацию о проекте и используемых классах в виде сгенерированного сайта. Поддерживает PHP 7. С 2016 года зарегистрировано

260 тысяч скачиваний.

PHP Static Analysis Tool анализирует количество и типы параметров, передаваемых конструкторам, методам и функциям; типы, возвращаемые методами и функциями и т.д. Инструмент включает поддержку PHP 7 и предоставляет написание собственных правил. Количество скачиваний с 2016 года

150 тысяч раз, использован разработчиками в

PHP Copy Paste Detector выдает информацию о дублированных участках кода. Проект набирает популярность (количество установок с 2016 года составляет

100 тысяч раз, используется в

Phan — статический анализатор для PHP. Проверяет определение и доступность методов, функций, классов, traits, интерфейсов, констант, свойств и переменных, обнаруживает неиспользуемый код, проверяет код на обратную совместимость php7 к php5. С 2016 года зафиксировано

80 тысяч раз скачиваний.

PHP Dead Code Detector сообщает пользователю о функциях и методах, которые не используются в коде. Развитие проекта было остановлено в 2015 году. Начиная с 2016 года, количество установок пошло на спад.

Qafoo Quality Analyzer — инструмент, предназначенный для визуализации метрик исходного кода. Начиная с 2015 года, инструмент установлен пользователями

Инструменты для контроля совместимости кода с разными версиями PHP

image loader

PHP Compatibility — набор правил для PHP Code Sniffer, которые проверяют совместимость текущего кода с другими версиями PHP, включая PHP 7. Начиная с 2016 года, инструмент установлен пользователями

PHP 7 Compatibility Checker — инструмент для проверки кода PHP 5.3 – 5.6 на совместимость с PHP 7. Находит потенциальные проблемы в коде и генерирует отчеты, содержащие имена файлов, номера строк и краткое описание проблемы. При этом проблемы двух типов: ошибки, вызывающие серьезные проблемы (фатальная ошибка, ошибка синтаксиса и т.д.) и предупреждения, приводящие к логическим ошибкам. Начиная с 2016 года, инструмент установлен пользователями

Читайте также:  коды депо ремонта вагонов

Инструменты для поиска уязвимостей в PHP-коде

image loader

К сожалению нам не удалось найти ни одного проекта для анализа уязвимостей в PHP-коде, который заслуживал бы внимания. А жаль…

Что на выходе

PHP CS Fixer

файлы, в которых обнаружены ошибки;

правила, которые сработали;

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

3a1302de52b59456a620a448ece882dd

PHP Code Sniffer

bb4a8e6ddb783c05db90bcb950ec2288

PHP Mess Detector

Отчет в PHP Mess Detector генерируется в одном из трех форматов: текстовый, html, xml. Полученный файл содержит информацию об обнаруженных проблемах в файлах. Проблема описывается начальной и конечной строкой, сработавшим правилом и поясняющим сообщением.

09e743e4878823a2c4c7397460062b64

PHP Dead Code Detector

67334f459e663528cef307df43510443

PHP Copy Paste Detector

В отчет по PHP Copy Paste Detector заносятся файлы, в которых дублируются строки.

c23ed8f1a19f5fe78aac455cf1001035

PHP Static Analysis Tool

В отчете PHP Static Analysis Tool для каждого файла, в котором обнаружены ошибки, указывается номер строки в файле и описание ошибки. В конце отчета приводится общее количество найденных ошибок.

51e4b9dc4e0726a967bc18460fc4cc88

Результат работы в Phan может быть выведен в следующих режимах: ‘text’, ‘json’, ‘csv’, ‘codeclimate’, ‘checkstyle’, и ‘pylint’. В режиме ‘csv’ выводятся следующие столбцы: файл, строка, категория ошибки, phan-тип ошибки, сообщение.

d12c0ac41bc98b1553988ac9a493dbdb

PHP Compatibility

Результатом PHP Compatibility является список ошибок и предупреждений, найденных при проверке на совместимость с указанной версией PHP.

2e87d9364f9522df9cf3c02290f316bf

PHP 7 Compatibility Checker

При проверке на совместимость PHP 7 Compatibility Checker генерирует список нарушений в коде: указывается файл, строка, поясняющее сообщение и ошибочный код.

c34b9324badbe4915e67ad598b2bbb99

Qafoo Quality Analyzer

Qafoo Quality Analyzer генерирует отчет в формате xml, где для каждого файла приводится список обнаруженных ошибок с описанием.

8a8b3a2745717b7d731bb3028daf73ca

PHP Metrics

PHP Metrics по окончании своего выполнения генерирует количественный отчет по метрикам и визуализирует полученные данные в виде созданного сайта.

899ccbba4168f4c2ed08372c2e9923c2 cffaf9dc7c3f713e2903aa4ae9ba57f8

Итоговая таблица сравнения инструментов

Инструмент объясняет, в чём ошибка

Что считать? Какая метрика?

Своя конфигурация правил, свои правила

Патч-файл с перечнем рекомендованных изменений

Количество строк, которые предлагает заменить инструмент

Таблицы с перечнем ошибок и отметкой, какие можно исправить автоматически

1. Количество ошибок2. Количество неисправимых ошибок

PHP 7 Compatibility Checker

Единый отчёт, по каждой ошибке: файл, строка, объяснение сути ошибки

Единый отчёт, по каждой ошибке: файл, строка, объяснение сути ошибки

PHP Copy Paste Detector

Единый отчёт с перечнем мест, где повторяется тот или иной участок кода

1. Количество “клонов”2. Количество повторяющихся строк

PHP Dead Code Detector

Перечень неиспользуемых функций и методов, файл с их объявлением и количество строк кода

1. Количество неиспользуемых функций/методов2. Количество строк, которые занимают такие функции/методы

Перечень ошибок: файл, строка, правило

Перечень ошибок: файл, строка, правило

PHP Static Analysis Tool

Перечень ошибок: файл, строка, правило

Qafoo Quality Analyzer

Перечень ошибок: файл, серьёзность ошибки, строка, правило

1. Количество ошибок2. Количество предупреждений

Перечень ошибок: файл, серьёзность ошибки, строка, правило

1. Количество ошибок категории low2. Количество ошибок категории normal3. Количество ошибок категории critical

Апробация инструментов на 1С-Битрикс

image loader

Каждый из инструментов был опробован на коде:

тиражных решений из Marketplace 1С-Битрикс (3 платных решения, 5 бесплатных),

современного сайта ИНТЕРВОЛГИ (на 1С-Битрикс),

устаревшего сайта ИНТЕРВОЛГИ (на самописной CMS).

Теперь к итогам сравнения решений. Мы считали не общее количество ошибок, а количество ошибок на 1000 строк кода.

ВАЖНО! Чтобы получить максимально показательную картину, мы суммировали ВСЕ замечания ВСЕХ 15 инструментов. Не удивляйтесь, что число ошибок часто больше числа строк.

Места распределились таким образом:

Старый сайт ИВ (703 ошибки на 1000 строк)

1С-Битрикс: Современный интернет-магазин (1457 ошибки на 1000 строк)

Новый сайт ИВ (1881 ошибки на 1000 строк)

1С-Битрикс: Корпоративный сайт (1998 ошибки на 1000 строк)

Платный ИМ (2506 ошибки на 1000 строк)

Платный ИМ (2525 ошибки на 1000 строк)

Платный ИМ (2682 ошибки на 1000 строк)

Бесплатный ИМ (3542 ошибки на 1000 строк)

1С-Битрикс: Информационный портал (3578 ошибки на 1000 строк)

Бесплатный ИМ (7361 ошибки на 1000 строк)

ВАЖНО! Чтобы получить максимально показательную картину, мы суммировали ВСЕ замечания ВСЕХ 15 инструментов. Не удивлятесь что число ошибок часто больше числа строк.

Читайте также:  пятерочка бонусы спасибо принимают бонусы спасибо

То, что лучшим стал старый сайт ИВ нас искренне удивило — мы ожидали прямо противоположного результата. У этого проекта 2 рекордных показателя — количество ошибок и количество строк кода. Так и вышло, что на 1000 строк кода проблем меньше всего. Но старый сайт — “почётный” участник, посмотрим на реальные результаты.

Настоящий победитель нашего исследования — 1С-Битрикс: Современный интернет-магазин. Что можно о нём сказать по результатам исследования:

Из 1000 строк в этом решении — в среднем 17 строк “копипасты”.

В 2 строках есть вызовы устаревшего API.

Есть 6 нарушений при работе с методами и полями.

284 строки кода можно отформатировать автоматически с помощью PHP CS Fixer.

Почти нет проблем с совместимостью PHP.

image loader

image loader

Худшим решением по мнению “жюри” признан бесплатный ИМ из ТОПа маркетплейса.

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

image loader

Предпоследнее место — 1С-Битрикс: Информационный портал

Отличить настоящие ошибки от ложного срабатывания было сложно в PHP Dead Code Detector — тут оказывались обработчики событий, агенты, конструкторы и инсталляторы, которые явным образом нигде не вызываются в коде или вызываются извне модулей.

Насчёт PHP Static Analysis Tool уже было сказано, что почти все его ошибки были “ложными срабатываниями”.

Хорошо показал себя PHP Mess Detector: отследил мелкую, но неприятную ошибку статического вызова динамических методов и наоборот. В то же время он ругался на каждый else, так как “else is never necessary and you can simplify the code to work without else”.

Главный “хлеб” таких инструментов, как Qafoo Quality Analyzer, PHP Code Sniffer, PHP CS Fixer: превышение длины строк, переводы строк в конце файла, короткие-длинные открывающие php-теги, пробелы после ключевых слов if, for, while и т.п. Из предлагаемого инструментами набора правил мы выбрали наиболее похожие на стандарт оформления кода 1С-Битрикс, но всё равно получили около 50% ложных срабатываний.

Полезную статистику предоставляет PHP Metrics, если в вашей команде есть понимание, сколько операторов для класса уже “много”, а сколько — “ещё нормально”. Аналогично с цикломатической сложностью.

Вывод

Смысл затеи с инструментами проверки качества кода был в том, чтобы выяснить какой инструмент стоит выбрать для автоматизации Code Review. Эту цель мы достигли и свой выбор остановили на PHP CS Fixer и PHP Code Sniffer. Они адекватны задаче, популярны, развиваются, их можно расширять, и есть масса уже готовых тестов. Осталось только адаптировать их к реалиям разработки сайтов на 1С-Битрикс: Управление Сайтом.

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

Источник

Онлайн-тестеры PHP, JS и CSS кода

codecode

Полезные инструменты в складчину программиста, веб-разработчика, тестировщика. Эти онлайн-тестеры помогут протестировать ваш веб-код еще до внедрения на сайте, найти ошибки и “пофиксить” в реальном времени. Есть возможность симулировать любую версию PHP и даже фреймворки, а также протестировать и другой код, например CSS или Java Script.

PHPTester

PHPTESTER Test PHP code online

Позволяет протестировать свой php-код в режиме онлайн прямо в вашем браузере без использования веб-сервера. Поддерживаемые версии PHP: 5.5, 5.6, 7.0

Ссылка: //phptester.net/

PHP Sandbox

PHP Sandbox test PHP online PHP tester

Отличается от предыдущего только тем, что дает возможность выбрать любую версию PHP – от 4.4.9 до 7.4.

Ссылка: http://sandbox.onlinephpfunctions.com/

PHP Online Test

PhpFiddle PHPMySQL in browser IDE and online server

Удобный тестер с приятным пользовательским интерфейсом. Содержит в себе много еще других плюшек, например PHP виджеты, API, декодеры/энкодеры. Мне он очень понравился, рекомендую.

Ссылка: //phpfiddle.org/

PHP syntax checker

PHP Code Checker Online syntax check

Осуществляет проверку синтаксиса в PHP-коде. Позволяет загрузить и проверить код из файла. Поддерживает версий PHP: 5.3, 5.4, 5.5, 5.6, 7.1

Ссылка: https://extendsclass.com/php-tester.html

JS.DO – Online JavaScript Editor

Online Javascript Editor

Название говорит за себя – этот сервис тестирует ваш JS-код. После регистрации можно указать URL-адрес файла с кодом и проверить в реальном времени, не выходя из браузера. Есть возможность симулировать фреймворки – jQuery, Bootstrap.

Ссылка: https://js.do/

CSSDesk

CSSDesk Online CSS Sandbox

Замечательный онлайн-сервис. Позволяет поэкспериментировать с CSS-кодом в реальном времени и сразу просматривать результат. Готовый код вы можете скачать. А главное, сервис простой и дружелюбный. Новичку, однозначно понравится!

Источник

Поделиться с друзьями
admin
Здоровый образ жизни: советы и рекомендации
Adblock
detector