воскресенье, 27 марта 2011 г.

XP Party #3 (27.03.2011)

В воскресенье 27 марта 2011 года была проведена третья XP-Party. Под катом моё описание событий и впечатления.

Утро добрым не бывает

Утро для меня началось весьма неудачно: накануне я благополучно забыл про перевод часов и поставил будильник без учёта этого. В итоге у меня потерялся час времени, и все дела пришлось выполнять в ускоренном темпе, что вылилось в весьма агрессивный стиль перемещения по разбитым весной дорогам Самары с риском если не пробить колесо, то получить штраф за превышение. К счастью, всё обошлось без происшествий, и я даже почти не опоздал.

Часть первая. Теоретическая

Встреча началась с рассказа Антона Каткова о его поездки в Москву и sсrum-сертификации, которую проводил Хенрик Книберг. Майка, одетая Антоном, какбЭ намекала, что её владелец обладает некими страшными магическими тайнами, что внушало трепет и благоговение.

Также Антон сделал анонс AgileDays-Самара, запланированного на начало июня, предложив нам подумать о возможности сделать там доклад.

После такой вводной начались запланированные выступления участников. Следует отметить, что в этот раз был несколько изменён протокол выступления: сначала докладчик давал аннотацию, а слушатели высказывали свои ожидания от презентации. Я надеюсь, что представленные презентации их авторы опубликуют в блоге позже, я же расскажу о них вкратце.

Первым выступал Виталий Ружников с рассказом про запахи кода. Тема доклада очень обширна, и, пожалуй, невозможно рассказать по ней всё за один раз. Поэтому презентация немного вышла за временные рамки. Вторым выступал Алексей Тулин, представивший свой доклад на смежную тему — запахи тестов. В отличии от Виталия, Алексей чётко уложился в отведённое время и даже оставил небольшой его запас на флуд обсуждение. Наконец, слово перешло к Денису Тучину, рассказавшему про эволюционное проектирование.

Нельзя не отметить Антона, который, сидя в стороне, модерировал процесс, а также фиксировал возникающие в аудитории вопросы и озвученные проблемы.

Наконец, пришла пора нашего с Владимиром Игнатьевым треш-доклада про парное программирование. Аудитории была продемонстрирована нанопрезентация с нанослайдами. Владимир весьма экспрессивно и эмоционально начал объяснять суть парного программирования на модели взаимодействующих говнокодеров, обогащая свою речь врезающимися в память сочными метафорами и яркими эпитетами. Я, не обладая таким талантом ярких выступлений, в свою очередь постарался рассказать про плюсы и минусы. Обещанный пост с результатами исследований британских учёных сравнения одиночного и парного стилей программирования находится здесь.

Часть вторая. Практическая

Затем был объявлен перерыв на обед, после которого наступила практическая часть нашей встречи. Участникам было предложено реализовать какой-нибудь простой проект с использованием XP- и Agile-методик.

Одним из предложений была игра "Змейка", другим — игра "Волейбол". Т.к. единогласного мнения достигнуто не было, участники разделились на 4 двойки, две из которых делали одну игру, остальные — другую. В дальнейшем я расскажу ход мероприятия с точки зрения разработчика "Волейбола".

Смысл игры прост: по полю летает шарик, который отскакивает от стенок. Имеются две "ракетки", которыми управляют игроки, задача которых — не дать шарику упасть.

Я работал в паре с Алексеем Тулиным, а вторую двойку составили Антон и Владимир Абрамов.

Сначала было проведено планирование в методологии Scrum`а; product owner`ом выступил Владимир. Он составил backlog, а команда в лице всех нас решила какие фичи брать в первый "спринт" (45 минут), а также оценила их с использованием planning poker`а. В итоге на первую итерацию были взяты следующие фичи:
  1. "По полю движется шарик с учётом законов отражения", 20 story point`ов (sp, считали 1 sp = 1 минуте)
  2. "При нажатии на кнопку движется ракетка с фиксированной скоростью", 13 sp
После на стене с помощью самоклеящихся стикеров был организован kanban, и команды приступили к разработке.

Наша двойка, работая за моим ноутбуком, сразу попробовала TDD в действии. Не могу не отметить упорство и старание Алексея, севшего за непривычную для него клавиатуру в так же непривычной IDEA на совсем непривычной Vista. Однако первый спринт мы успешно провалили, не завершив даже первую фичу (по факту, у нас была готова модель игры, покрытая тестами, но не было интерфейса вообще). Внезапно выяснилось, что мы не единственные лузеры из всех команд только Антон с Владимиром могут провести демо по итогам первой итерации. Да и, признаться, их летающий по одной и той же траектории квадрат (!) не умел отражаться, поэтому я сильно сомневаюсь, что можно считать первую фичу закрытой ими ;)

После был объявлен второй спринт, планирование которого проводилось уже в парах. После fail`а первого, мы с Алексеем решили не брать на себя слишком много, ограничившись:
  1. "По полю движется шарик с учётом законов отражения" (закончить), 8 sp
  2. "При нажатии на кнопку движется ракетка с фиксированной скоростью", 20 sp
  3. "При попадании шара на нижнюю границу экрана засчитывается поражение", 8 sp
Т.к. у меня больший опыт работы со Swing`ом, то на сей раз за написание кода сел я. Первую фичу мы доделали весьма быстро, затем реализовали третью. До конца итерации почти успели сделать вторую (ракетки появились на поле, шарик от них отражался, но ракетками нельзя управлять), однако время спринта вышло, и Антон совершенно безжалостно пресёк мои попытки срочно допилить версию, чтобы появилась возможность задавать начальное положение и направления движения шарика. Так у нас и осталась версия с фиксированной точкой старта. Желающие могут унести ту сборку отсюда.

Демо прошло весело. На сей раз все команды представили результаты своей работы: тут были и квадратные красные яблоки (дважды), и летающая окружность, иногда движущаяся рывками и отражающаяся от стенок после "погружения" в них на величину радиуса ;)

Но время шло неумолимо, и эта итерация стала последней.

Выводы

В конце встречи были подведены итоги. Антоном было резонно замечено, что мы все повторили классическую ошибку: в общем-то было понятно, что за 2 спринта (1,5 часа) мы навряд ли успеем написать в паре хоть в каком-то виде конечный продукт, однако мы всё равно принялись его делать, не добиваясь снижения требований. Алексей Тулин вызвался быть scrum-мастером следующей party.

В заключение мне хочется отметить хорошую атмосферу мероприятия (особенно во второй части). Не знаю как остальные, но я получил много фана.