Архивы для Март, 2010

Расписание мероприятий на 2010 год

Мы решили опубликовать расписание мероприятий на 2010 год. Это поможет вам быть в курсе последних событий, запланированных нами на ближайшее время. Пока оно заполнено до конца весны, но будет постоянно пополняться.

Из ближайших событий 17 апреля в Киеве мы проводим тренинг на тему «Continuous Integration на практике». Этот тренинг будет интересен не только разработчикам, но и менеджерам проектов, лидерам команд и руководителям. Благодаря обширной практической части участники смогут не только ознакомиться с основными принципами и подходами в представленной теме, но и получить достаточно практического опыта для внедрения предложенных практик и инструментов в своей компании. Данный тренинг ориентирован не только на Agile проекты, обсуждаемые практики помогут любому проекту вне зависимости от методологии разработки, языка программирования и применяемых инструментов. Будут рассмотрены наиболее современные инструменты для Continuous Integration (TeamCity, Hudson, Bamboo и другие), а также тенденции в развитии такого рода инструментов и сравнительный анализ рынка. Каждый сможет выбрать себе наиболее подходящий инструмент и быстро внедрить его в своем проекте. Продолжительность тренинга 8 часов, стоимость 800 гривен (с обедами и перерывами на кофе). Регистрация участников продлится до 13 апреля. Количество мест ограничено. Ждем вас на наших тренингах!

Опасные игры

Игры и симуляции зачастую применяются на тренингах и конференциях для лучшего усваивания предлагаемой концепции. Они позволяют людям на собственном опыте попробовать некоторые вещи и осознать материал более глубоко. Но в симуляциях таится ряд скрытых недостатков. Разделим все игровые симуляции на два типа. Одни визуализируют некую проблему или плохую практику, другие предлагают решение проблемы. Иногда одна игра совмещает в себе оба типа. С визуализацией проблем все работает очень неплохо, что в принципе логично. Если проблема возникает даже в простой игровой ситуации, то в реальной жизни все может быть еще хуже. Поэтому можно обыграть различные аспекты и вариации проблемы достаточно просто и доступно. Игры, которые призваны продемонстрировать решение проблемы, попросту вводят многих в заблуждение. Люди начинают думать, что в жизни проблема разрешится так же просто. Вместо того чтобы просто заставить задуматься над путями решения реальных проблем, такие симуляции часто воспринимаются как уже готовые решения. К сожалению, часто это делается для того, чтобы продемонстрировать преимущества определенного подхода или методологии. Тем самым завоевываются новые сторонники, которые начинают внедрять подходы на практике. Вот тут и может наступить разочарование, потому что реальные жизненные ситуации гораздо сложнее и запутаннее, чем игровые. Некоторые решения внедрить не удается, что автоматически вызывает цепную реакцию и разочарование переходит на методологию или подход в целом. В более тяжелом случае решение все-таки внедряется, но прямолинейно и неправильно, без учета реальной жизненной ситуации. В результате страдают проекты, команды и целые компании. Поэтому будьте бдительны и помните, что любая игровая стимуляция служит поводом для размышлений и толчком к поиску реальных решений. Не стоит обманываться простотой и пытаться перенести игровое решение на реальную жизнь без дополнительного анализа. Тренерам стоит всегда делать акцент на этом перед проведением игровых симуляций такого типа. Это убережет участников от неправильного восприятия и последующих ошибок.

Agile в больших командах

Очень часто поднимается вопрос о применении Agile в больших командах размером более 30 человек. Как известно, Agile методологии рекомендуют работать небольшой командой, желательно расположенной в одном месте. Это очень сильно упрощает коммуникации и позволяет успешно применять большую часть Agile практик. Но при разработке действительно большой системы не всегда можно справиться маленькой командой. Есть проекты с командами более 100 человек. Можно провести аналогию с программированием больших систем. Если у нас есть небольшая по функциональности система, к которой нет жестких требований по расширяемости и отказоустойчивости, то логично реализовать ее единым модулем. При этом возможно разделение на слои для облегчения тестирования и разделения логики. Архитектуры подобных систем очень простые и похожи друг на друга. Это очень напоминает работу небольшой команды. Когда же нам нужно разработать систему с серьезной бизнес логикой, работающую с внешними сервисами, имеющую высокие требования к расширяемости и отказоустойчивости, интегрирующуюся с различными устройствами и обрабатывающую огромные потоки информации, то все значительно усложняется. Тут на помощь приходит компонентная архитектура, асинхронное общение между компонентами, сервисно-ориентированный подход и т.д. Архитектура такого рода систем достаточно непроста и требует тщательного анализа, чтобы не только удовлетворять текущим требованиям, но быть достаточно гибкой и расширяемой. Именно из такого рода архитектур можно позаимствовать приемы организации работы больших команд.

Первый прием для построения компонентной архитектуры – это выделение полноценных компонентов. В случае большой команды такими компонентами являются маленькие подкоманды. Каждая подкоманда имеет все необходимое для независимого существования. У нее есть все нужные ресурсы, как человеческие, так и технические. В такой подкоманде можно сравнительно легко использовать любой понравившийся Agile процесс разработки. Для того, чтобы компонентная архитектура работала, у каждой компоненты должна быть четко очерченная зона ответственности. В случае подкоманды речь идет о части разрабатываемой системы. Для правильного выделения подкоманде ее зоны ответственности необходимо учесть, что компоненты должны быть максимально независимыми.

Это сразу делает проигрышным разделение по слоям (база данных, уровень доступа к данным, сервисная логика, пользовательский интерфейс). В этом случае зависимости слишком сильные, что влияет на коммуникации, планирование и остальные части процесса разработки. Разделение по слоям работает в проектах среднего размера, когда из-за специализации членов команд и их распределения тяжело выделить полнофункциональные подкоманды. В этом случае команды в каждой итерации анализируют точки соприкосновения и выделяют интерфейсы взаимодействия. В процессе разработки функционала используются техники заглушек и простых реализаций для обеспечения ранней интеграции. Второй вариант – это разделение по архитектурным компонентам системы. Этот вариант возможен при хорошей архитектуре самой системы, но таит в себе скрытые опасности. К таким опасностям относятся локализация архитектурных знаний, узкая специализация команд, распределенное планирование и т.д.

Второй прием – это обеспечение коммуникации между компонентами. Компоненты в архитектуре должны общаться только со своими ближайшими соседями, причем протокол может быть синхронный или асинхронный. В случае с синхронным протоколом (когда компоненты достаточно сильно зависят друг от друга) может применяться совместное планирование итерации, ежедневная синхронизация посредством проведения собрания представителей команд (Scrum of Scrum в методологии Scrum). В случае асинхронного протокола можно использовать Kanban подход. Если одной подкоманде необходимо, чтобы определенный функционал был реализован другой подкомандой, она помещает запрос на эту функциональность в очередь ожидания. Эта очередь может позволять управление приоритетами. Статус заявки можно отслеживать на Kanban доске по мере прохождения всех стадий разработки. Замеряя время цикла от постановки задачи в очередь до ее выполнения, можно добиться более точного планирования для зависимых задач.

Кардинально другой способ взаимодействия компонентов применяется в событийной архитектуре. Каждый компонент, в том числе и заказчик, может генерировать события определенных типов (задачи на реализацию определенного функционала). Все задачи поступают на общую шину. Это может быть система управления задачами или же физический инструмент визуализации (в отсутствии проблем с распределенной командой). Каждый компонент способен обрабатывать определенные типы задач, что зависит от его роли в системе. Таким образом, подкоманда всегда берет из шины задачи с максимальным приоритетом, которые она способна делать. Как только задача закончена, ее результаты публикуются в общедоступном месте либо же попадают обратно в шину в качестве задачи другого типа.

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

Пример построения Agile процесса в большой команде

Как видно из приведенных примеров, архитектуры современных систем таят в себе очень много интересных идей, которые можно использовать для организации процесса разработки в большой Agile команде. Ведь многие из существующих больших систем действительно работают! Я готовлю детальный доклад на эту тему, с которым планирую выступить на ближайшей конференции. Надеюсь с помощью идеи поиска аналогий в архитектуре вы сможете улучшить свой процесс разработки.

Скидки на участие в тренинге «Тестирование веб приложений с Selenium» 20 марта

На предстоящий тренинг «Тестирование веб приложений с Selenium» 20 марта открыт «льготный» доступ со скидкой 15%. Дело в том, что определенная группа участников приняла решение заказать внутренний тренинг в компанию, поэтому теперь тренинг 20 марта под угрозой отмены. При успешной укомплектации группы все участники, включая уже зарегистрированных, получат указанную скидку. Торопитесь зарегистрироваться, акция продлится до 17 марта!

Запись дискуссионного клуба Agile-практиков

Как и было обещано, мы выкладываем запись встречи дискуссионного клуба Agile-практиков, которая проходила 3 марта. На встрече обсуждались следующие вопросы, заданные слушателями:

  • Какие типичные проблемы свойственны Скрам командам? Пути решения.
  • Как совместить реальные артефакты процесса с необходимостью иметь отчет по состоянию проекта в принятой в компании системе? Стоит ли вообще отказаться от бумажек в пользу специальных программ, или лучше использовать бумажки, но в ущерб отчетности? Какие еще есть идеи на этот счет?
  • Расскажите про успешные переговоры с заказчиком, который сопротивлялся изменению процессов, но в конце-концов согласился. Какие доводы оказались самыми действенными?
  • Работа с распределенными командами – типичные проблемы и ошибки. Неоднородные(по проф. уровню) команды – возможна ли в них самоорганизация в принципе?
  • Хотелось бы ознакомиться с распространенными методами контроллинга хода проекта.
  • Кейсы и рекомендации использования scrum в качестве методологии для не-программистов. Есть ли практика использования scrum для продавцов?
  • C чего начать внедрение Scrum в команде?
  • Расскажите,пожалуйста, как происходит планирование проекта для скрам-команды?
  • Советы по планированию итераций, состоящих только из исправления багов.
  • Что такое эффективная команда? Методы построения таковой.
  • Есть ли корреляция между “сложностью” историй пользователей, “количеством” юз кейсов и продолжительностью спринта? На основании чего можно прогнозировать какая продолжительность спринта будет оптимальной в данном проекте для данной команды?
  • Интересует внедрение аджайл и скрама в частности в большой команде 30+ человек.

Вы можете скачать и прослушать запись по данной ссылке: Скачать файл (84.4 Мб/01:32:14 MP3, 128 kbps). Оригинал анонса можно посмотреть тут.

Отчет о тренинге «QA в Agile» 13 марта

В эту субботу 13 марта прошел тренинг, посвященный организации QA процесса в Agile команде. На тренинге были рассмотрены следующие вопросы:

  • автоматизация приемочного и функционального тестирования
  • факторы, затрудняющие тестирование, а также способы борьбы с ними
  • сбор и управления требованиями
  • специфика работы тестировщика в Agile команде, его роли и ответственности
  • особенности организации QA процесса при использовании Agile подходов
  • детальный процесс работы QA в Scrum команде

На практической части тренинга участникам была предоставлена возможность сформировать команды и разработать простенький продукт – картину загородного дома. Для этого каждая команды распределила роли и обязанности, а также выработала стратегию работы над продуктом. На продукт была предложена спецификация и пример видения готового продукта. Спецификация включала в себя различные ограничения на размеры и расположения элементов картины. В каждой команде был выделен тестировщик, который мог проверять насколько продукт соответствует спецификации. Только он имел право пользоваться инструментом контроля качества линейкой. Среди оставшихся членов команды был выбран участник со специальными умениями, которые мог применять только он, а именно стирать элементы картины. Остальные участники стали разработчиками-художниками. Разработка осуществлялась итеративно с длиной итерации в 3 минуты. После каждой итерации команда имела 2 минуты на ретроспективу. Тестировщик отмечал статус контроля качества продукта в конце каждой итерации. Было и весело и поучительно. Благодаря анализу стратегий и проблем, с которым столкнулись разные команды, участники могли задуматься над корреляцией с реальной разработкой. Получившиеся шедевры приводятся ниже:

первая команда
вторая команда
третья команда
четвертая команда

В целом тренинг прошел очень интересно и был насыщен общением, задавалось множество вопросов и приводилось немало примеров из реальных проектов. Мы ждем комментариев и отзывов от участников, чтобы развивать наш сервис и сделать его максимально полезным.

Напоминаем вам, что 20 марта в Киеве пройдет тренинг «Тестирование веб приложений с Selenium». Еще есть несколько свободных мест. Присоединяйтесь!

Тренинг «Continuous Integration на практике» 17 апреля в Киеве

17 апреля в Киеве пройдет тренинг «Continuous Integration на практике», посвященный одной из наиболее полезных инженерных практик. Продолжительность тренинга 8 часов, стоимость – 800 гривен (с обедом и перерывами на кофе). Количество мест ограничено. Регистрация уже открыта и продлится до 10 апреля.

Есть ли смысл в приемочном тестировании?

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

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

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

Второй этап использует тесты, созданные на первом этапе, для автоматизации приемочных критериев. В том, что их было бы неплохо автоматизировать, никто не сомневается. Вопрос лишь в инструментах и техниках автоматизации. Тут и начинается самое интересное. Можно использовать специализированный инструмент как FitNesse или Concordion. Преимуществ у такого рода инструментов три. Первое преимущество заключается в том, что с ними могут работать не только программисты. Конечно же помощь программистов понадобится на каком-то этапе, но можно произвести разделение процесса создания тестов. То есть появляется отделение процесса создания тестов от непосредственно программирования. Сторонним эффектом является то, что при изменениях в приложении не будут меняться сами тесты. Вместо этого будет изменяться программный код для соединения этих тестов с приложением. Второе преимущество заключается в том, что данные инструменты заставляют вас разработать DSL (доменный язык) для вашего приложения. Разработка этого языка позволяет вам писать новые тесты без привлечения разработчиков, а также дает представление о имеющихся возможностях системы. Последнее преимущество заключается в возможности хранить тесты вместе с требованиями и запускать их прямо из требований. Это приближает нас к мечте об «исполняемой спецификации».

Но эти же преимущества могут превратиться в недостатки при определенных условиях. Первое преимущество является таковым только тогда, когда тесты должен иметь возможность создавать человек, не имеющий отношения к программированию. Таким человеком может быть кто-то со стороны заказчика или совершенно не технический тестировщик. Если же таких людей нет, то время на поддержку связывающего кода становится пустой тратой времени. Если тесты создаются и поддерживаются только командой, то трата времени на поддержку никому не нужных возможностей просто неуместна. Второе преимущество разбивается благодаря тому, что большая часть инструментов предоставляют очень бедный функционал для создания доменного языка. Конечно же есть исключения, к примеру Twist, в которые этому аспекту уделяется достаточно внимания. К сожалению, последнее преимущество тоже достаточно спорное. Дело в том, что для хранения требований большая часть компаний использует специализированные инструменты. Это может быть Wiki в Trac, Confluence, Google Docs и многие другие. Эти инструменты упрощают процесс управления требованиями и делают его удобным. Реализация подобного рода функционала в инструментах для приемочного тестирования значительно уступает, поэтому успешное использование их для хранения требований возможно только на сравнительно небольших проектах.

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

В заключении хочу сказать, что приемочное тестирование – великолепный инструмент для расширения коммуникации и построения доверительных отношений между заказчиком и командой. Автоматизация приемочного тестирования возможна и ее успех зависит от понимания принципов и инструментов, а также от желания участников проекта. Надеюсь вы сможете улучшить ваш процесс с помощью этой практики. Удачи!

Дискуссионный клуб «Задай вопрос Agile-практику»

В эту среду 3 марта состоится дискуссионная встреча в формате вебинара под названием «Задай вопрос Agile-практику». В качестве спикеров приглашены: Николай Алименков, Алексей Кривицкий, Тимофей Евргашин и Евгений Компаниец. Во время дискуссии будут рассмотрены вопросы, заданные слушателями. В числе таких вопросов планирование в Agile, работа с распределенными командами, типичные проблемы Scrum-команды, работа с материальными артефактами и многие другие интересные темы. Все желающие могут еще успеть зарегистрироваться. Это мое первое участие в мероприятиях подобного формата. Я всегда предпочитал визуальное общение, именно поэтому мы не предоставляем услуг в формате вебинаров. Но я надеюсь, что дискуссия будет продуктивная и интересная. Как только появится запись мероприятия, она будет добавлена на страницу ресурсов нашего сайта.