14 June 2012

Что интересного я узнал на DevConf 2012

Website developmentPHPJavaScript
Привет, Хабрасообщество!
По следам недавно прошедшей конференции 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.4.5 и 5.4.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 как более легковесное решение (не нужен Селениум) но и менее богатый функционал.

Итог


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

UPD:
Ссылки на некоторые доклады и фото:
1. PHP Performance (Rasmus Lerdorf) (спасибо SamDark, листать стрелками)
2. Воротилин Дмитрий рассказывает про Sprockets (спасибо @py3u)
3. Егор Хомяков рассказывает про уязвимость в OAuth (спасибо @py3u)
4. Некоторые фото и отчет о конференции (спасибо zizop)
Tags:devconfphpjavascriptcontinuous integration
Hubs: Website development PHP JavaScript
+23
2.2k 94
Comments 30
Popular right now