- •Оглавление
- •Начало
- •Использование стабильной версии (5.5)
- •Встроенный веб-сервер
- •Установка на Mac
- •Установка в Windows
- •Vagrant
- •Стандарты написания кода
- •Основные моменты языка
- •Парадигмы программирования
- •Пространства имен
- •Стандартная Библиотека PHP (SPL)
- •Интерфейс командной строки
- •XDebug
- •Менеджер зависимостей
- •Composer и Packagist
- •PEAR
- •Практики написания кода
- •Основы
- •Дата и время
- •Design Patterns
- •Исключения
- •Уровни абстракции
- •Безопасность
- •Безопасность веб-приложений
- •Хэширование паролей
- •Фильтрация данных
- •Конфигурационные файлы
- •Использование глобальных переменных
- •Сообщения об ошибках
- •Тестирование
- •Тесто-ориентированная разработка
- •Поведенческо-ориентированная разработка
- •Дополнительные инструменты тестирования
- •Сервера и развертывание
- •Платформа, как сервис (PaaS)
- •Виртуальный или выделенный сервер
- •Виртуальный хостинг
- •Кэширование
- •Кэширование байткода
- •Кэширование объектов
- •Ресурсы
- •Из источника
- •Их следует читать в твиттере
- •Наставничество
- •PHP PaaS поставщики
- •Фреймворки
- •Компоненты
- •Сообщество
- •Пользовательские группы PHP
- •Конференции PHP
- •Советы по повышению эффективности PHP
- •Профилируйте ваш код для обнаружения узких мест
- •Обновите ваш PHP
- •Кэширование
- •Использование буферизации вывода
- •Не копируйте переменные без причины
- •Избегайте SQL запросов в цикле
- •Дополнительные руководства
- •Основы
- •Операторы сравнения
- •Условные операторы
- •Глобальное пространство имён
- •Строки
- •Тернарный оператор
- •Объявление переменных
- •Функциональное программирование в PHP
- •Шаблоны проектирования
- •Фабрика (англ. Factory)
- •Одиночка (англ. Singleton)
- •Фронт-контролер (англ. Front Controller)
- •Модель-представление-контроллер (англ. Model-View-Controller)
Тестирование
Написание автоматизированных тестов для вашего кода PHP, считается наилучшей практикой. Автоматизированные тесты являются отличным инструментов для подтверждения того, что ваше приложение не сломается, когда вы внесете изменения или добавите новую функциональность.
Существует несколько различных типов инструментов тестирования (или фреймворков) доступных для PHP, которые используют различные подходы — все, пытаются избежать ручного тестирования и нуждаются в больших командах проверки качества, чтобы убедиться, что изменения не сломают существующую функциональность.
Тесто-ориентированная разработка
Из Википедии :
Разработка через тестирование (TDD) представляет собой процесс разработки программного обеспечения, который опирается на повторении очень короткого цикла разработки: сперва, разработчик пишет автоматизированные тесты, которые определяют желаемое улучшение или новую функцию, далее производит код, который успешной пройдет этот тест и наконец производит рефактор кода для соответствия со стандартами. Kent Beck, человек которому приписывают статус разработчика или “переоткрывателя” техники, TDD предлагает простую конструкцию, а также вселяет уверенность.
Существует несколько различных типов тестирования, которые вы можете сделать для вашего приложения
Модульное тестирование (Unit Testing)
Модульное тестирование — это подход к программированию, который позволяет удостовериться, что функции, классы и методы работают, как ожидается с момента начала и до конца разработки. Проверяя значения, которые приходят и выходят из различных функций и методом, вы можете быть уверены, что внутренняя логика работает правильно. Используя Внедрение Зависимостей и внедрение классов «макетов» и заглушек, вы можете убедиться, что зависимости используются правильно для большего покрытия тестами.
http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1% 80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Тестирование |
28 |
При создании класса или функции, вы должны создать модульный тест для каждого возможного поведения. На базовом уровне, вы должны убедиться, что ваш код выдает ошибку, если вы отсылаете неправильные аргументы и работает, если вы отсылаете правильные аргументы, соответсвенно. Это поможет убедиться в том, что изменения, которые вы сделаете относительно этого класса или функции позднее не помешают старым работать как ожидалось. Единственная альтернатива этому var_dump() в test.php, который не является способом создания приложений — больших или маленьких.
Еще одно использование модульных тестов — вклад в open source. Если вы можете писать тесты, которые показывают сломанную функциональность, тогда почините её, и покажите, что тест пройден, патчи имеют больше шансов быть принятыми. Если вы запускаете проект, который допускает Pull Request, тогда вы должны указать это в качестве требования.
PHPUnit является фреймворком тестирования стандарта де-факто для написания модульных тестов в PHP приложениях, но также существует несколько альтернатив.
•SimpleTest
•Enhance PHP¹
•PUnit¹ ¹
•atoum¹ ²
Интеграционное тестирование
Из Википедии¹ ³:
Интеграционное тестирование (иногда называется Интеграция и Тестирование, с аббревиатурой “I&T”) это фаза в тестирование програмнного обеспечения, в котором отдельные модули, комбинируются и тестируются, как группа. Это происходит после модульного тестирования и перед валидационным тестирова-
нием. Integration testing takes as its input modules that have been unit tested, groups them in larger aggregates, applies tests defined in an integration test plan to those aggregates, and delivers as its output the integrated system ready for system testing.
Многие инструменты, которые могуть быть использованы для модульного тестирования, так-же могут быть использованы для интеграционного тестирования, поскольку используются схожие принципы.
http://phpunit.dehttp://simpletest.org ¹http://www.enhance-php.com/ ¹ ¹http://punit.smf.me.uk/ ¹ ²https://github.com/atoum/atoum
¹ ³http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0% BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Тестирование |
29 |
Функциональное тестирование
Также известное, как подтверждающее тестирование, функциональное тестирование состоит из использования инструментов для создания автоматизированных тестов, которые понастоящему используют ваше приложение, а не просто проверяют, что отдельные куски (модули) кода ведут себя и могут взаимодействовать правильно. Эти инструменты обычно работают, используя реальные данные и симулируя реальных пользователей приложения.
Инструменты функционального тестирование
•Selenium¹
•Mink¹
•Codeception¹ это фреймворк для тестирования (всё-в-одном), включающий инструменты подтверждающего тестирования
Поведенческо-ориентированная разработка
Существует две разновидности Поведенческо-ориентированной разработки (BDD): SpecBDD и StoryBDD. SpecBDD концентрируется на техническом поведении или коде, в то время как StoryBDD концентрируется на деле, будущем поведении или взаимодействии. PHP имеет фреймворки для обоих типов BDD.
Используя StoryBDD, вы пишите читаемые людьми истории, которые объясняют поведение вашего приложения. Эти истории могут быть запущены, как актуальные тесты для вашего приложения. Фреймворк используемый в PHP приложения для StoryBDD - Behat, который вдохновлен проектом для Ruby Cucumber¹ и реализует Gherkin DSL для объяснения особенностей поведения.
Вместе со SpecBDD, вы пишите спецификацию, которая объясняет как ваш код должен себя вести. Вместо тестирования функции или метода, вы объясняете, как эта функция или метод должен себя вести. PHP предлагает фреймворк PHPSpec для данных целей. Этот фреймворк вдохновлен проектом RSpec¹ для Ruby.
Инструменты
•Behat¹ , StoryBDD фреймворк для PHP, вдохновленный проектом для Ruby Cucumber¹¹ ;
•PHPSpec¹¹¹, SpecBDD фреймворк для PHP, вдохновленный проектом для Ruby RSpec¹¹²;
¹http://seleniumhq.com ¹http://mink.behat.org ¹http://codeception.com ¹http://cukes.info/ ¹http://rspec.info/ ¹http://behat.org/ ¹¹http://cukes.info/
¹¹¹http://www.phpspec.net/ ¹¹²http://rspec.info/
Тестирование |
30 |
•Codeception¹¹³ это фреймворк для тестирования (всё-в-одном), использующий принци-
пы BDD;
Дополнительные инструменты тестирования
Помимо индивидуального тестирования и поведенческо-ориентированных фрэймворков, существует ряд общих фреймворков и вспомогательных библиотек, полезных для любого предпочтительного подхода.
Инструменты
•Selenium¹¹ автоматизационный инструмент для браузера интегрируемый с PHPUnit¹¹
•Mockery¹¹ Mock Object Framework интегрируемый с PHPUnit¹¹ или PHPSpec¹¹
¹¹³http://www.codeception.com ¹¹ http://seleniumhq.org/ ¹¹ http://www.phpunit.de/manual/3.1/en/selenium.html ¹¹ https://github.com/padraic/mockery ¹¹ http://phpunit.de/
¹¹ http://www.phpspec.net/