Установка phpunit
В первую очередь необходимо убедиться, что установлен Composer - менеджер php пакетов.
Далее устанавливаем phpunit:
$ composer global require "phpunit/phpunit=4.6.*" $ sudo ln -s ~/.composer/vendor/bin/phpunit /usr/local/bin/phpunit
При работе с phpunit нам могут понадобиться некоторые дополнительные модули, такие как:
$ composer global require 'phpunit/dbunit=*' $ composer global require 'phpunit/php-invoker=*' $ composer global require 'phpunit/phpunit-selenium=*' $ composer global require 'phpunit/phpunit-story=*' $ composer global require 'phpunit/phpunit-skeleton-generator=*'
Есть еще ряд полезных иснтрументов, которые могут пригодиться для тестирования качества кода:
PHPDCD - Dead Code Detector (DCD) для PHP. Он сканирует в PHP проекте все неиспользуемые функции и методы и сообщает о них.
$ composer global require 'sebastian/phpdcd=*' $ sudo ln -s ~/.composer/vendor/bin/phpdcd /usr/local/bin/phpdcd
Пример проверки:
project_directory$ phpdcd .
PHPMD - PHP Mess Detector. Помогает найти в коде потенциальные проблемы, такие как возможные ошибки, субоптимальный код, усложненные выражения, неиспользуемые параметры, методы, свойства.
$ composer global require 'phpmd/phpmd=2.2.*' $ sudo ln -s ~/.composer/vendor/bin/phpmd /usr/local/bin/phpmd
Пример проверки:
project_directory$ phpmd . text codesize,unusedcode,naming
PHP Depend - показывает качество дизайна кода для расширяемости, повторного использования и сопровождения.
$ composer global require 'pdepend/pdepend=*' $ sudo ln -s ~/.composer/vendor/bin/pdepend /usr/local/bin/pdepend
phpDocumentor - инструмент для генерирования документации из PHP кода.
$ composer global require 'phpdocumentor/phpdocumentor=*' $ sudo ln -s ~/.composer/vendor/bin/phpdoc /usr/local/bin/phpdoc
Пример запуска:
project_directory$ mkdir docs && phpdoc -d . -t docs
PHP CodeBrowser - инструмент для создания HTML презентации PHP кода, где выделены участки с выявленными нарушениями по обеспечению качества инструментов, таких как PHP CodeSniffer или PHPMD.
$ composer global require 'mayflower/php-codebrowser=~1.1' $ sudo ln -s ~/.composer/vendor/bin/phpcb /usr/local/bin/phpcb
Пример запуска:
project_directory$ mkdir cb && phpcb -s . -o cb
PHP Copy/Paste Detector (PHPCPD) - инструмент для поиска дублированного кода.
$ composer global require 'sebastian/phpcpd=*' $ sudo ln -s ~/.composer/vendor/bin/phpcpd /usr/local/bin/phpcpd
Пример проверки:
project_directory$ phpcpd .
PHPLOC - инструмент для быстрого измерения размера и анализа структуры PHP проекта.
$ composer global require 'phploc/phploc=*' $ sudo ln -s ~/.composer/vendor/bin/phploc /usr/local/bin/phploc
Пример проверки:
project_directory$ phploc --log-xml phploc.xml .
PHP CodeSniffer - набор из двух PHP инструментов. Основной - phpcs, позволяет выявить нарушения стандартов кодирования в PHP, CSS и JS файлах. И второй - phpcbf, позволяет проводить автоматическую коррекцию стандартов. PHP CodeSniffer является важным инструментом , благодаря которому код остается чистым и последовательным.
$ composer global require 'squizlabs/php_codesniffer=*' $ sudo ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs
Дополнительная проверка стандарта Symfony2 для PHP CodeSniffer:
$ cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards $ git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2 $ cd Symfony2 $ git checkout 2.0.1
Пример проверки:
project_directory$ find . -type f -name '*.php' -exec phpcs --standard=Symfony2 '{}' ';'
Запуск тестов
Для запуска тестов выполните команду:
$ phpunit
Для тестирования Symfony2 проекта необходимо в первую очередь обновить вендоры.
Запуск тестирования проекта:
$ phpunit -c app
Для тестирования отдельного компонента нужно выполнить команду:
$ phpunit src/Symfony/Component/Finder/
Выполняйте тестирование кода перед сохранением изменений в системе контроля версий.
Покрытие кода тестами
При добавлении нового кода Вы можете проверить покрытие кода тестами, используя возможенисти phpunit:
$ phpunit --coverage-html=cov/
Проверте покрытие кода, открыв cov/index.html в браузере.
Установка одной командой
composer global require "phpunit/phpunit=4.6.*" && sudo ln -s ~/.composer/vendor/bin/phpunit /usr/local/bin/phpunit && composer global require 'sebastian/phpdcd=*' && sudo ln -s ~/.composer/vendor/bin/phpdcd /usr/local/bin/phpdcd && composer global require 'phpmd/phpmd=2.2.*' && sudo ln -s ~/.composer/vendor/bin/phpmd /usr/local/bin/phpmd && composer global require 'pdepend/pdepend=*' && sudo ln -s ~/.composer/vendor/bin/pdepend /usr/local/bin/pdepend && composer global require 'phpdocumentor/phpdocumentor=*' && sudo ln -s ~/.composer/vendor/bin/phpdoc /usr/local/bin/phpdoc && composer global require 'squizlabs/php_codesniffer=*' && sudo ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs && composer global require 'mayflower/php-codebrowser=~1.1' && sudo ln -s ~/.composer/vendor/bin/phpcb /usr/local/bin/phpcb && composer global require 'sebastian/phpcpd=*' && sudo ln -s ~/.composer/vendor/bin/phpcpd /usr/local/bin/phpcpd && composer global require 'phploc/phploc=*' && sudo ln -s ~/.composer/vendor/bin/phploc /usr/local/bin/phploc && composer global require 'phpunit/dbunit=*' && composer global require 'phpunit/php-invoker=*' && composer global require 'phpunit/phpunit-selenium=*' && composer global require 'phpunit/phpunit-story=*' && composer global require 'phpunit/phpunit-skeleton-generator=*' && cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards && git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2 && cd Symfony2 && git checkout 2.0.1
Дополнительные инструменты
Есть еще несколько полезных инструментов для проверки кода.
PHP lint - инструмент для проверки кода на наличие ошибок. Этот инструмент встроен в пакет PHP и запускается командой php -l:
project_directory$ find . -type f -name '*.php' -exec php -l '{}' ';'
Twig lint - инструмент првоерки Twig шаблонов на наличие ошибок. При использовании Symfony2 можно запустить проверку командой:
project_directory$ app/console twig:lint src
В большенстве web проектов часто используется JavaScript и CSS. Для этих языков есть свои инструменты проверки кода.
Они представляет собой модули Node.js. Поэтому вначале необходимо установить Node.js.
Пример установки для Ubuntu:
$ sudo apt-get install npm nodejs $ sudo ln -s /usr/bin/nodejs /usr/bin/node
JS lint - инструмент проверки кода JavaScript. Установить его можно с помощью npm:
sudo npm install -g jslint
Проверить код можно командой:
project_directory$ find . -type f -name '*.js' -exec jslint '{}' ';'
Если нужно исключить некоторые файлы из проверки:
project_directory$ find src -type f -name '*.js' -a \( -not -name 'jquery*.js' -a -not -name 'bootstrap*.js' \) -exec jslint '{}' ';'
JS hint - еще один инструмент проверки кода JavaScript. Установить его можно с помощью npm:
sudo npm install -g jshint
Проверить код можно командой:
project_directory$ find . -type f -name '*.js' -exec jshint '{}' ';'
Если нужно исключить некоторые файлы из проверки:
project_directory$ find src -type f -name '*.js' -a \( -not -name 'jquery*.js' -a -not -name 'bootstrap*.js' \) -exec jshint '{}' ';'
CSS lint - инструмент проверки кода CSS. Установить его можно с помощью npm:
sudo npm install -g csslint
Проверить код можно командой:
project_directory$ find . -type f -name '*.css' -exec csslint '{}' ';'
Если нужно исключить некоторые файлы из проверки:
project_directory$ find src -type f -name '*.css' -a -not -name 'bootstrap*.css' -exec csslint '{}' ';'
Согласно принципу единственной обязанности - Single responsibility principle (одному из принципов SOLID, который следует применять не только к написанию кода, но и к созданию архитектуры), библиотеки, которые нужно исключить, следует выносить в отдельные бандлы (модули), как это сделал я с jquery и twitter bootstrap.
Скорость загрузки JavaScript, CSS файлов и изображений является одним из показателей качества.