Привет, читатели!
По следам недавно прошедшей конференции DevConf 2012 хочу поделиться записями из своего блокнота, которые показались лично мне наиболее интересными и полезными. Возможно, кому-то все это хорошо известно. Поскольку доклады шли одновременно в нескольких залах, то все их посетить было невозможно, поэтому ваши дополнения с удовольствием почитаю в комментариях.
Темы, которые прежде всего интересовали меня, это:
— развертывание системы и непрерывная интеграция (Continuous Integration)
— PHP 5.4, PHPUnit, Yii
— тестирование в javascript
Развертывание системы и непрерывная интеграция (CI)
Развертывание системы оказалось популярной темой конференции, было 3 или 4 доклада. Для себя я это обрисовал так: ставится сервер непрерывной интеграции, который, например, каждую ночь собирает ваш проект из репозитория, запускает тесты, проверяет код на потенциальные косяки и отправляет вам отчет. Утром вы смотрите этот отчет и сразу видите, как у вас обстоят дела с проектом. Еще преимущества, это возможность в любой момент показать менеджерам готовую рабочую версию проекта, да и для себя появляется четкое понимание, что готово, а что нет.
В качестве сервера непрерывной интеграции упоминались:
— jenkins
есть много плагинов, в т.ч. самый важный плагин — Чак Норис)
— teamcity
более приятный веб интерфейс, чем у jenkins
— phpundercontrol
— что-то еще
В качестве системы сборки проекта можно использовать:
— bash-скрипт
— capistrano
сделан для Ruby, но можно использовать и для php. Особых знаний Ruby не требуется. Для symfony есть специальная версия capifony.
— phing
написан на php, есть много готовых тасков. Билд описыается в виде xml-файлов. Из недостатков услышал отсутствие возможности отката из дефолтной поставки (нужно писать самому).
Для тестирования PHP-кода стандартно используется PHPUnit. В кулуарах говорили еще о Codeception, что он больше ориентирован на тестировщиков.
Сами тестовые методы удобно писать по шаблону GIVEN-WHEN-THEN (т.е прямо комментариями отбивая эти блоки):
function testMethodAbc()
{
//given
$a = new Object();
$a->x = 123;
//when
$a->methodAbc();
//then
$this->assertTrue($a->x);
}
Для анализа PHP-кода есть несколько хороших инструментов, которые также можно запускать автоматически при сборке или коммите:
— Lint (верификация синтаксиса)
— PHP_CodeSniffer (соответствие стандарту кодирования)
— phploc (разная статистика типа кол-ва комментов и т.д.)
— PHP_Depend (анализ кода, например расчет разных коэффициентов типа связности классов и т.д.)
— PHP_Mess Detector (поиск потенциальных косяков в коде)
— PHP_Code Coverage (покрытие кода тестами, идет вместе с PHPUnit)
— PHP Copy/Paste detector (догадайтесь сами :))
На счет деплоя базы данных советовали dbDeploy. Миграции используются, но пишутся только в одну сторону. В том числе потому, что не всегда в принципе возможно написать обратную миграцию (например при удалении таблицы). Хороший совет — протестировать деплой базы на тестовом сервере, предварительно слив на него копию рабочей базы, т.к. источником ошибок могут быть сами данные.
Ну и касательно самой последовательности развертывания проекта мне была полезна такая схема:
1. распаковать исходники в новую папку
2. подтянуть зависимые библиотеки
3. накатить обновления базы
4. перекинуть symlink на новую версию
5. перекинуть symlink на пользовательские данные
6.* запустить тесты. в случае ошибки — откат. (для тестового сервера)
7. отправить емейлы пользователям/менеджерам о выходе новой версии
Что нового в PHP 5.4
как сказал сам автор PHP 5.4 = PHP6.0 — Unicode.
Основные новинки это:
— примеси (traits),
— использование [] для массивов
— встроенный веб-сервер
Также было полезно узнать, что 5.5 и 5.6 выйдут в течение двух ближайших месяцев.
Были интересные вопросы:
Q1: Unicode… when?
A1: May be year, may be ten years, may be never… We need your support!
Q2: What about integrating APC into PHP?
A2: We are working on it, but APC is not stable enough sometimes..
Yii / Yii2
Было интересно пообщаться с Александром Макаровым (SamDark) — одним из core-разработчиков фреймворка. Основные вопросы касались Yii2:
— дата выхода Yii2 пока держится в секрете
— в команде сейчас три активных участника + github-сообщество, куда приглашаются все желающие для поддержки и развития проекта
— в Yii2 ActiveRecord претерпит сильные изменения и будет разделена на непосредственно модель и объект Query, который заменит существующий DbCriteria
— из связей останется только две: HAS_ONE и HAS_MANY. Обещают реализовать автоматическое сохранение Related моделей для родительской
— в интерфейсе появится twitter bootstrap
— были еще какие-то улучшения, но я их не запомнил
Тестирование в JS
Для тестирования JS есть специальный фреймворк от Yahoo: YUI Test Framework. Работает все это через Selenium, т.е. нужно поставить дополнительный драйвер. Он даже сможет посчитать code coverage для js кода.
Для моделирования ajax-ответов от сервера советовали Sinon.js. В нем можно достаточно гибко настроить разные варианты ответов.
Для небольших проектов еще рекомендовали jsTestDriver как более легковесное решение (не нужен Селениум) но и менее богатый функционал.
Итог
Вот все, что в сухом остатке получилось у меня.
Считаю, что конференция была весьма полезной и информативной. Если есть что добавить — пишите.
Спасибо всем докладчикам, а также организаторам за вкусные пирожные в перерывах.
Автор: vitalets