декларация героини
Честно говоря, PHP очень требователен к качеству кода. Прочитав эту серию статей, вы узнаете, как улучшить качество вашего PHP-кода.
PS: богатые технологии первой линии и разнообразные формы выражения — все это в «Разговоре о технологиях первой линии HULK», обратите внимание!
Честно говоря, PHP очень требователен к качеству кода. Прочитав эту серию статей, вы узнаете, как улучшить качество вашего PHP-кода.
Мы можем винить в этом множество причин, но дело не только в отсутствии надлежащих инструментов тестирования в экосистеме PHP. В этой статье я хочу показать вам простую настройку для базового тестирования качества проекта. Я не буду подробно описывать какие-то конкретные инструменты, а сосредоточусь на настройке тестовой среды.
В этой статье есть демонстрационный код, который можно найти на GitHub: https://github.com/mkosiedowski/php-testing-demo. Если у вас есть какие-либо вопросы по поводу примеров в этой статье, вы можете обратиться к ней.
1
Предпосылки
Я предполагаю, что вы знакомы с синтаксисом PHP 7.1, вы можете использовать Composer и PSR-4 для автозагрузки и стандартов кодирования PSR-1 и PSR-2. В моем примере двоичные файлы поставщика устанавливаются в каталог ./bin.
2
инструменты для сборки
Мы собираемся использовать несколько разных инструментов тестирования, поэтому было бы неплохо иметь что-то, что запускает их все с помощью скрипта. PHING дал нам отличное решение этой проблемы. Подобно Apache Ant, PHing может легко автоматизировать задачи с помощью XML-конфигурации. Мы можем установить его, выполнив следующую команду:
$ php composer.phar require --dev phing/phing
скопировать код
Затем создайте несколько базовых файлов build.xml в корневом каталоге проекта.
<?xml version="1.0" encoding="UTF-8"?><project name="MyProject" default="run"></project>
скопировать код
На следующих шагах мы добавим несколько целей, которые будут запускаться с помощью PHing.
3
Статический анализ кода
Мое первое, что вы можете сделать для улучшения качества кода, это настроить статический анализатор кода. Они прочитают ваш код ошибки, фактически не запуская его. Это похоже на проверку кода ботом за считанные секунды. Круто, не так ли?
4
стиль кода
Ваш код легче поддерживать, если он написан в правильном стиле. Все это знают (если нет, то вам следует хотя бы начать читать «Чистый код» Роберта С. Мартина), но все еще есть много команд, у которых есть проблемы с соблюдением согласованных ими стандартов. Мы можем автоматизировать эту задачу с помощью phpcs — обнюхивание PHP-кода, есть ли какое-то волшебство?
Мы можем установить, выполнив следующую команду:
$ php composer.phar require --dev squizlabs/php_codesniffer
скопировать код
Затем добавьте цель, которая запускает его, в build.xml. Теперь ваш build.xml должен выглядеть так:
<?xml version="1.0" encoding="UTF-8"?><project name="MyProject" default="run">
<target name="phpcs" description="Check code style with PHP_CodeSniffer">
<exec executable="bin/phpcs" passthru="true" checkreturn="true">
<arg line="--standard=PSR1,PSR2 -extensions=php src"/>
</exec>
</target>
<target name="run" depends="phpcs"/></project>
скопировать код
Теперь вы можете запустить ./bin/phing, и phpc автоматически проверит наличие ошибок в стандартах кодирования PSR-1 и PSR-2.
Многие фреймворки, такие как Symfony, определяют свои собственные правила стиля кода, которые мы также можем проверять автоматически. Например: если вы используете фреймворк Symfony, проверьте стандарт https://github.com/leaphub/phpcs-symfony2, чтобы узнать, как проверить стандарт Symfony с помощью phpcs.
Пример вывода для искаженного файла:
MyProject > phpcs:FILE: /home/maciej/workspace/php-testing/src/Domain/Price.php
-------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------28 | ERROR | Method name "Price::get_value" is not in camel caps format
-------------------------------------------------------------------------Time: 67ms; Memory: 6Mb
скопировать код
Хватит тратить время на проверку стандартов кодирования во время код-ревью, теперь это будет делаться автоматически!
5
Детектор копирования/вставки
Дублированный код — это плохо, это знают все. Иногда мы создаем такой код по ошибке и никогда этого не замечаем. Иногда мы делаем это, потому что нам лень. Лучше иметь инструмент, который может запрашивать это во время сборки. PHPCPD — детектор копирования/вставки PHP.
Установите его, выполнив следующую команду:
$ php composer.phar require --dev sebastian/phpcpd
скопировать код
Затем добавьте цель в build.xml:
<target name="phpcpd" description="Generate pmd-cpd.xml using PHPCPD">
<exec executable="bin/phpcpd" passthru="true">
<arg line="src"/>
</exec></target>...<target name="run" depends="phpcs,phpcpd"/>
скопировать код
Пример вывода проверки дублирующегося кода в каталоге поставщика:
phpcpd 4.0.0 by Sebastian Bergmann.
Found 74 clones with 2929 duplicated lines in 97 files:- /home/maciej/workspace/php-testing/vendor/phpspec/phpspec/src/PhpSpec/Matcher/TriggerMatcher.php:81-102
/home/maciej/workspace/php-testing/vendor/phpspec/phpspec/src/PhpSpec/Matcher/TriggerMatcher.php:114-135- /home/maciej/workspace/php-testing/vendor/squizlabs/php_codesniffer/src/Reports/Full.php:81-114
/home/maciej/workspace/php-testing/vendor/squizlabs/php_codesniffer/src/Reports/Code.php:162-195(...)
скопировать код
6
Хотите действительно глубокий анализ кода?
Если вы начинаете свой проект с нуля, обратите внимание на Phan — это очень мощный анализатор кода, который сделает ваш код красивым. Проверьте это на https://github.com/phan/phan. Установка очень проста — просто установите расширение php-ast (в Ubuntu вы можете попробовать запустить sudo apt-get install php-ast) и запустите:
$ php composer.phar require --dev phan/phan
скопировать код
Затем создайте файл конфигурации .phan/config.php со следующим содержимым:
<?phpreturn [ 'target_php_version' => '7.1', 'directory_list' => [ 'src', 'vendor/symfony/console',
], "exclude_analysis_directory_list" => [ 'vendor/'
],
];
скопировать код
Также создайте цель phan в файле build.xml:
<target name="phan" description="Check code with phan">
<exec executable="bin/phan" passthru="true" checkreturn="true"/></target>...<target name="run" depends="phpcs,phpcpd,phan"/>
скопировать код
Теперь вы можете запустить анализ кода, и если вы совершите ошибку (например, объявив неправильный тип phpdoc для атрибута класса), вы должны увидеть сообщение, подобное этому:
MyProject > phan:src/Domain/PriceComparator.php:17 PhanTypeMismatchProperty Assigning \Domain\PriceConverter to property but \Domain\PriceComparator::priceConverter is intsrc/Domain/PriceComparator.php:35 PhanNonClassMethodCall Call to method convert on non-class type int
скопировать код
Phan великолепен — он читает весь ваш код и выполняет несколько проверок, в том числе сравнивает объявления phpdoc с фактическим использованием переменных, методов, классов и т. д., вы можете проверить https://github.com/phan/phan# A список всех функций для функций.
Суммировать
Теперь у вас есть три полностью автоматизированных инструмента в вашем проекте, которые защищают качество вашего кода. Все, что вам нужно сделать, это запустить ./bin/phing вручную или подключить его к вашему git-хуку или непрерывной интеграции. Ваш код будет проверен на стандарты кодирования, дублирование и формальные ошибки. Эти проверки должны обеспечить более надежную среду выполнения и сократить время, затрачиваемое на проверку кода.
HULK рассказывает о технологиях первой линии
Публичный аккаунт по обмену технологиями, созданный командой облачной платформы 360, охватывает облачные вычисления, базы данных, большие данные, мониторинг, внешний интерфейс, автоматизированное тестирование и многие другие технические области. опыт, это приносит вам самый информативный обмен технологиями