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

в 16:19, , рубрики: continuous integration, devconf, javascript, php, Веб-разработка, метки: , , ,

Привет, читатели!
По следам недавно прошедшей конференции 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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js