SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Креативный менеджмент
 глазами разработчика:
   Как выжить в "agile" проекте
Виталий Шибаев

Компания ИСС Арт

Разработчик в 1-м
поколении. Верю в TDD
и рефакторинг.
Зачем этот доклад?

Будут:
+ Решения фундаментальных проблем
разработки
+ Примеры из реальной работы большой
команды (25-30 человек)

Не будет:
- Теоретических выкладок
- Низкоуровневых технических деталей
Структура доклада
Context context = me.DescribeContext();
Debug.Assert(context.ProblemCount == 4);

for (int i = 0; i < context.ProblemCount; ++i)
{
  if (i == 2)
      me.ShowVideo();

  Problem problem = context.Problems[i];
  me.Analyze(problem);
}
me.Summarize();
Обзор проекта

Продолжительность   4+ года (c мая 2008)

Технологии          Java, JS, Groovy, Flex,
                    C#, C++, PHP, ...
Средний размер      20-25 разработчиков
команды
Всего работало      75 человек
Инструменты         Git, JIRA, Bamboo,
                    Review Board
Архитектура

 Render
Server (C#)          Backend
                      (Java)


Frontend       C++   BlackBerry   .NET CF
 (ExtJS)
Жили-были...

● Заказная разработка
● Небольшие проекты
● Микро-команды - 2-4 человека
Заказчик


● Крупный заказчик
● Масштабный проект
● Множество идей
И понеслось...

●   Неопытный менеджер
●   Резкий рост команды (8+ разработчиков)
●   Много разноплановых задач
●   Эйфория от работы над новым кодом
Разные члены команды пишут много кода в
разных частях системы без должных
проектирования и синхронизации.

В результате:
● Сырой код;

● Проблемы при
  интеграции;

● Люди знают только
  свой код;
Проблема 1: После релиза
    обнаруживаются критичные баги
Почему?
● Мало времени на написание кода
● Невнимательно тестировали код
● Низкий уровень знания разработчиков
● Не учли реальные условия

Как не допустить?
Тестировать продукт перед релизом

Идея:
Нельзя релизить непротестированный продукт.

Как:
Перед релизом тестируем продукт, фиксим
обнаруженные баги.
Пример 1: Продукт тестируют все
             разработчики

+ Можно оперативно пофиксить проблему;
+ Хорошо знают систему, при должной
внимательности могут найти много всего.

- Не замечают ошибок в собственном коде;
- Лень фиксить, проще забить;
- Разработчики не любят тестирование и
тестируют поверхностно;
- Можно увлечься локальным фиксом и
забыть про остальное;
Пример 2: Продукт тестирует аккуратный
             разработчик

+ Другие разработчики не отвлекаются на
тестирование - только фиксят;
+ Хорошо знает систему, при должной
внимательности может найти много всего;
+ “Это не баг, а фича” - не пройдет.

- Тестирование быстро надоедает, особенно
регрессионное;
- Тяжело найти такого разработчика.
Пример 3: Продукт тестируют
            тестировщики

+ Не дергаем разработчиков;
+ Полная объективность;
+ Профессионально занимаются этим;
+ Взгляд со стороны на систему.

- Ниже уровень технических знаний;
- Разработчики отрицают баги - “так и
должно быть”;
- Первое время часто репортят ерунду.
Проект сейчас

Команда из 7 тестировщиков в Омске
Релизная ветка фиксируется за 2 недели
2 раунда регрессионного тестирования
Sanity тестирование сразу после релиза
50 тестовых серверов
Тестовые скрипты в TestLink
Резюме
   После релиза обнаруживаются критичные баги

Тестировщики - лакмусовая бумажка
качества разработки.

Иногда привлекайте разработчиков к
тестированию.

Разработчики должны помогать
тестировщикам.
Проблема 2: После релиза ломается
        старый функционал

Почему?
● Невнимательно тестировали свой код
● Низкий уровень знаний разработчиков
  (код, система, язык)
● Невозможно все учесть

Как не допустить?
Автоматические тесты

Идея:
Покрывать код автоматическими тестами.
Перед релизом все тесты должны
проходить.

Как:
Пишем модульные и интеграционные тесты
для новых фич и багов.
Пример 1: Выделенный разработчик
  пишет интеграционные тесты после
         завершения задачи
+ Другие разработчики не отвлекаются на
написание тестов;
+ Взгляд на код со стороны;

- Не успевает за остальными;
- Тесты поверхностные - подгоняются под
функционал, а не наоборот;
- Если обнаруживаются проблемы -
исправление затягивается.
Пример 2: Java - все разработчики пишут
        интеграционные тесты

+ Позволило проекту дожить до
сегодняшнего дня

- Много интеграционных тестов - проходят
долго;
Пример 3: Render Server - покрытие
  большой базы существующего кода

Проект:
● зависит от многих сторонних компонентов
● многопоточный и многопроцессный
● требует тонких настроек окружения

Тесты:
+ Уверенность в отсутствии регрессий
+ Упростили отладку
Пример 4: Тесты для фронтенда (ExtJS)

+ Защищают от регрессий

- Сложно писать
- Сложно обеспечить глубокое покрытие
- Могут замедлять работу продакшн кода
- Очень чувствительны к окружению
Пример 5: Тесты проходят долго

Интеграционные тесты:
● работают долго
● зависят от окружения

Сервер для автоматических тестов
(Bamboo):
+ Продолжаем разработку пока тесты идут
- Дополнительный сервис
- Узкое место - нужен всей команде
Проект сейчас

 Java      4 плана Bamboo   2175 тестов
  Flex     1 план Bamboo    1048 тестов
  C++      3 плана Bamboo   290 тестов
  C#       2 плана Bamboo   109 тестов
  JS       2 плана Bamboo    60 тестов
Java Doc   1 план Bamboo      1 тест
Резюме
    После релиза ломается старый функционал

Тесты - ваш проводник в светлое будущее.

Тесты должны писать разработчики.

Интеграционные тесты будут работать
долго.

Покройте UI базовым набором тестов.
ВИДЕО
Проблема 3: Не можем выкатить релиз -
    код в репозитории нестабилен

Почему?
● Код не тестируется перед попаданием в
  публичный доступ
● Тесты занимают много времени
● Нельзя коммитить локально

Как не допустить?
Continuous integration
Идея:
Любые изменения в коде должны тестироваться.
Непротестированному коду запрещено попадать
в публичный доступ.

Как:
В основной ветке - только стабильный код.
Код стабилен, если проходят все тесты и
тестировщики не нашли багов.
Пример 1: Тесты перед каждым
           коммитом в SVN


- Коммиты становятся “жирными” и долгими
- Тестировщики не участвуют в проверке
кода
Пример 2: Каждая задача в отдельной
          ветке. С SVN на Git.
+ Легкая работа с ветками
+ Проще рулить конфликты
+ Возможность коммитить локально

- Мигрировать всю историю
- Другая идеология - людей надо учить
- Неудобный клиент под Windows
Пример 3: Жесткий workflow

Ограничения:
● Мержить в master может только JIRA.
  Jira2Bamboo plugin.
● Мерж возможен только когда пройдут все
  тесты и нет конфликтов.

+ Проблема решается железобетонно
- merge plugin не стабилен
- мержить может только один человек - надо
ждать, когда освободится
Пример 4: Эволюция merge plugin

Улучшения:
● Баг фиксы
● Поддержка очереди с приоритетом
● E-mail уведомления

+ Отправил в мерж и гуляй
+ Приоритетные задачи мержатся раньше
+ Задачи, где мало тестов, мержатся
раньше
Пример 5: Единый QA сервер -> N
          тестовых серверов


Сделано:
● JIRA plugin для резервирования сервера
● Скрипт для автоматического билда
  заданной ветки на сервере
Проект сейчас
До мержа обязательный прогон тестов и
полное ручное тестирование.

Обязательное обучение людей работе с Git
и workflow.

Jira2Bamboo плагин с поддержкой очереди.

Оптимизация работы с Bamboo - не гонять
тесты лишний раз.
Резюме
Не можем выкатить релиз - код в репозитории нестабилен

 В большом проекте создайте "островок"
 стабильного кода.

 Используйте DVCS для большой команды

 Обучайте людей workflow и работе с DVCS.

 Сделайте коммиты, билды, запуск тестов
 простыми и быстрыми операциями.
Проблема 4: Нужно править незнакомый код

Почему?
● Автор кода недоступен

Следствия:
● Тратится много времени на понимание кода
● Вероятность ошибок возрастает

Как не допустить?
Совместное владение кодом
Идея:
Любой участок кода должно знать минимум
2 разработчика.

Как:
Писать код в парах.
Обязательное ревью кода
Пример 1: Парное программирование
             обязательно
+ Качественней код
+ Непрерывная разработка - не нужны
перерывы
+ Люди учатся друг у друга

- Все равно получается медленней
- Надоедает
- Могут отвлекать других болтовней
- Гибкий график может быть проблемой
Пример 2: Парное программирование
    только для серьезных проблем


+ Взгляд со стороны на проблему
+ Максимально качественное решение
+ Не успевает наскучить
Пример 3: Неопытные разработчики
          работают в парах


+ Минимизируем негативный эффект в
первое время
+ Вдвоем проще осваивать незнакомую
систему
Пример 4: Позадачное code review

+ Любой код знает минимум еще 1 человек
+ Левый код отсеивается сразу
+ Меньше затрат, чем при работе в парах

- Опытный разработчик может скептически
относиться к замечаниям
- Затягивает процесс завершения задачи
- Разработчики ленятся ревьювить чужой
код
Пример 5: Review Board
Проект сейчас

Обязательное ревью перед тестированием.

Review Board, нет интеграции с JIRA.

Новые разработчики начинают ревьювить
код через 1-2 месяца.

Парное программирование только при
необходимости.
Резюме
        Нужно править незнакомый код

Используйте Code Review непрерывно.

Сделайте процесс Code Review удобным.

Применяйте парное программирование
только в сложных случаях.
Итоги
Непродуманные решения превратятся в
серьезные проблемы в будущем.

В большой команде проблемы будут
происходить постоянно.

Решайте проблемы фундаментально, чтобы
избежать повторного появления вовсе.

Готовьте команду к изменениям.
Итоги

На большом проекте с самого начала:
● Пишите тесты
● Наймите тестировщиков
● Используйте DVCS
● Следуйте принципам Continuous
  Integration
● Внедрите обязательное Code Review
Спасибо за внимание!

       Виталий Шибаев

       vshibaev@issart.com
       Skype: shibvit

       Компания ИСС Арт
       http://issart.com/
Для создания видео:
 Gource (+ ffmpeg)
http://code.google.com/p/gource/

Weitere ähnliche Inhalte

Was ist angesagt?

Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0WRider
 
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере BadooРИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере BadooТарасов Константин
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервисautomated-testing.info
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest
 
Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"Dakiry
 
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Mail.ru Group
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаAleksandr Makhomet
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромKirill Kovalchuk
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестированияRina Uzhevko
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileAlexey Krivitsky
 
Как заводить баги понятно всем
Как заводить баги понятно всемКак заводить баги понятно всем
Как заводить баги понятно всемSQALab
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Vyacheslav Lyalkin
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
евгения фирсова нерелизное тестирование
евгения фирсова   нерелизное тестированиеевгения фирсова   нерелизное тестирование
евгения фирсова нерелизное тестированиеAlexei Lupan
 
ROCS 2 - advanced platform for automated test execution in clustered environm...
ROCS 2 - advanced platform for automated test execution in clustered environm...ROCS 2 - advanced platform for automated test execution in clustered environm...
ROCS 2 - advanced platform for automated test execution in clustered environm...Rina Uzhevko
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 

Was ist angesagt? (19)

Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0
 
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере BadooРИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
РИФ 2016, Внедрение контроля качества в большом web-проекте на примере Badoo
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервис
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
 
Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"Олексій Брошков "Мистецтво Дослідницького Тестування"
Олексій Брошков "Мистецтво Дослідницького Тестування"
 
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Оценка проектов тестирования
Оценка проектов тестированияОценка проектов тестирования
Оценка проектов тестирования
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с Agile
 
Как заводить баги понятно всем
Как заводить баги понятно всемКак заводить баги понятно всем
Как заводить баги понятно всем
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
евгения фирсова нерелизное тестирование
евгения фирсова   нерелизное тестированиеевгения фирсова   нерелизное тестирование
евгения фирсова нерелизное тестирование
 
ROCS 2 - advanced platform for automated test execution in clustered environm...
ROCS 2 - advanced platform for automated test execution in clustered environm...ROCS 2 - advanced platform for automated test execution in clustered environm...
ROCS 2 - advanced platform for automated test execution in clustered environm...
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 

Andere mochten auch

2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля
2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля
2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиляHappyDev
 
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложенийHappyDev
 
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложенийHappyDev
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...HappyDev
 
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестированииHappyDev
 
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...HappyDev
 
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12HappyDev
 
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых системHappyDev
 
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...HappyDev
 
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерахHappyDev
 
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложенийHappyDev
 
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...HappyDev
 
Симуляция аттестации. Максим Дорофеев.
Симуляция аттестации. Максим Дорофеев.Симуляция аттестации. Максим Дорофеев.
Симуляция аттестации. Максим Дорофеев.IT-Доминанта
 
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...HappyDev
 
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...HappyDev
 
2015-04-12 06 Елена Гальцина. Осознанный ты
2015-04-12 06 Елена Гальцина. Осознанный ты2015-04-12 06 Елена Гальцина. Осознанный ты
2015-04-12 06 Елена Гальцина. Осознанный тыHappyDev
 
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12HappyDev
 
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...HappyDev
 

Andere mochten auch (18)

2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля
2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля
2014.12.06 03 Геннадий Омышев — Рецепт приготовления фирменного стиля
 
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений
09 01 HappyDev-lite'14 Андрей Токарев. Разработка iOS-приложений
 
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
 
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
 
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
 
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12
Александр Кудымов - Любовь и честность в интерфейсах | HappyDev'12
 
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
 
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...
13 HappyDev-lite'14 Павел Сумароков. Ответственный подход к профессиональном...
 
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
 
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
 
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...
11 HappyDev-lite'14 Андрей Казимиров. Особенности разработки по для встраива...
 
Симуляция аттестации. Максим Дорофеев.
Симуляция аттестации. Максим Дорофеев.Симуляция аттестации. Максим Дорофеев.
Симуляция аттестации. Максим Дорофеев.
 
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...
2015-12-06 Aнтон Непомнящих - Принципы канбан и теории ограничений на примере...
 
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...
Олег Годовых - Как учёба в универе и олимпиады не сделали мою жизнь хуже | Ha...
 
2015-04-12 06 Елена Гальцина. Осознанный ты
2015-04-12 06 Елена Гальцина. Осознанный ты2015-04-12 06 Елена Гальцина. Осознанный ты
2015-04-12 06 Елена Гальцина. Осознанный ты
 
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12
Рамиль Шайхутдинов - Фууу, стартап! | HappyDev'12
 
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
 

Ähnlich wie Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agile проекте | HappyDev'12

Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчейVitebsk DSC
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0HighLoad2009
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаZestranec
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика SQALab
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектомAndrey Karpov
 
Развитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныРазвитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныtfmailru
 
Выступление: инструменты и методы эффективной удалённой работы
Выступление: инструменты и методы эффективной удалённой работыВыступление: инструменты и методы эффективной удалённой работы
Выступление: инструменты и методы эффективной удалённой работыryba4
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"HYS Enterprise
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииSQALab
 
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuФорум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuYury Vetrov
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETAlexander Byndyu
 

Ähnlich wie Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agile проекте | HappyDev'12 (20)

Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
 
Развитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныРазвитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайны
 
Выступление: инструменты и методы эффективной удалённой работы
Выступление: инструменты и методы эффективной удалённой работыВыступление: инструменты и методы эффективной удалённой работы
Выступление: инструменты и методы эффективной удалённой работы
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграции
 
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuФорум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 

Mehr von HappyDev

2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?HappyDev
 
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli scriptHappyDev
 
2015-12-06 Константин Борисов - Как собеседовать программиста?
2015-12-06 Константин Борисов - Как собеседовать программиста?2015-12-06 Константин Борисов - Как собеседовать программиста?
2015-12-06 Константин Борисов - Как собеседовать программиста?HappyDev
 
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данныхHappyDev
 
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...HappyDev
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBenchHappyDev
 
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...HappyDev
 
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...HappyDev
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...HappyDev
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...HappyDev
 
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...HappyDev
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхроннымHappyDev
 
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...HappyDev
 
2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджингHappyDev
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователяHappyDev
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...HappyDev
 
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...HappyDev
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...HappyDev
 

Mehr von HappyDev (20)

2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
 
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
 
2015-12-06 Константин Борисов - Как собеседовать программиста?
2015-12-06 Константин Борисов - Как собеседовать программиста?2015-12-06 Константин Борисов - Как собеседовать программиста?
2015-12-06 Константин Борисов - Как собеседовать программиста?
 
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
 
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
 
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
 
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
 
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
 
2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
 
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
 

Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agile проекте | HappyDev'12

  • 1. Креативный менеджмент глазами разработчика: Как выжить в "agile" проекте
  • 2. Виталий Шибаев Компания ИСС Арт Разработчик в 1-м поколении. Верю в TDD и рефакторинг.
  • 3. Зачем этот доклад? Будут: + Решения фундаментальных проблем разработки + Примеры из реальной работы большой команды (25-30 человек) Не будет: - Теоретических выкладок - Низкоуровневых технических деталей
  • 4. Структура доклада Context context = me.DescribeContext(); Debug.Assert(context.ProblemCount == 4); for (int i = 0; i < context.ProblemCount; ++i) { if (i == 2) me.ShowVideo(); Problem problem = context.Problems[i]; me.Analyze(problem); } me.Summarize();
  • 5. Обзор проекта Продолжительность 4+ года (c мая 2008) Технологии Java, JS, Groovy, Flex, C#, C++, PHP, ... Средний размер 20-25 разработчиков команды Всего работало 75 человек Инструменты Git, JIRA, Bamboo, Review Board
  • 6. Архитектура Render Server (C#) Backend (Java) Frontend C++ BlackBerry .NET CF (ExtJS)
  • 7. Жили-были... ● Заказная разработка ● Небольшие проекты ● Микро-команды - 2-4 человека
  • 8. Заказчик ● Крупный заказчик ● Масштабный проект ● Множество идей
  • 9. И понеслось... ● Неопытный менеджер ● Резкий рост команды (8+ разработчиков) ● Много разноплановых задач ● Эйфория от работы над новым кодом
  • 10. Разные члены команды пишут много кода в разных частях системы без должных проектирования и синхронизации. В результате: ● Сырой код; ● Проблемы при интеграции; ● Люди знают только свой код;
  • 11. Проблема 1: После релиза обнаруживаются критичные баги Почему? ● Мало времени на написание кода ● Невнимательно тестировали код ● Низкий уровень знания разработчиков ● Не учли реальные условия Как не допустить?
  • 12. Тестировать продукт перед релизом Идея: Нельзя релизить непротестированный продукт. Как: Перед релизом тестируем продукт, фиксим обнаруженные баги.
  • 13. Пример 1: Продукт тестируют все разработчики + Можно оперативно пофиксить проблему; + Хорошо знают систему, при должной внимательности могут найти много всего. - Не замечают ошибок в собственном коде; - Лень фиксить, проще забить; - Разработчики не любят тестирование и тестируют поверхностно; - Можно увлечься локальным фиксом и забыть про остальное;
  • 14. Пример 2: Продукт тестирует аккуратный разработчик + Другие разработчики не отвлекаются на тестирование - только фиксят; + Хорошо знает систему, при должной внимательности может найти много всего; + “Это не баг, а фича” - не пройдет. - Тестирование быстро надоедает, особенно регрессионное; - Тяжело найти такого разработчика.
  • 15. Пример 3: Продукт тестируют тестировщики + Не дергаем разработчиков; + Полная объективность; + Профессионально занимаются этим; + Взгляд со стороны на систему. - Ниже уровень технических знаний; - Разработчики отрицают баги - “так и должно быть”; - Первое время часто репортят ерунду.
  • 16. Проект сейчас Команда из 7 тестировщиков в Омске Релизная ветка фиксируется за 2 недели 2 раунда регрессионного тестирования Sanity тестирование сразу после релиза 50 тестовых серверов Тестовые скрипты в TestLink
  • 17. Резюме После релиза обнаруживаются критичные баги Тестировщики - лакмусовая бумажка качества разработки. Иногда привлекайте разработчиков к тестированию. Разработчики должны помогать тестировщикам.
  • 18. Проблема 2: После релиза ломается старый функционал Почему? ● Невнимательно тестировали свой код ● Низкий уровень знаний разработчиков (код, система, язык) ● Невозможно все учесть Как не допустить?
  • 19. Автоматические тесты Идея: Покрывать код автоматическими тестами. Перед релизом все тесты должны проходить. Как: Пишем модульные и интеграционные тесты для новых фич и багов.
  • 20. Пример 1: Выделенный разработчик пишет интеграционные тесты после завершения задачи + Другие разработчики не отвлекаются на написание тестов; + Взгляд на код со стороны; - Не успевает за остальными; - Тесты поверхностные - подгоняются под функционал, а не наоборот; - Если обнаруживаются проблемы - исправление затягивается.
  • 21. Пример 2: Java - все разработчики пишут интеграционные тесты + Позволило проекту дожить до сегодняшнего дня - Много интеграционных тестов - проходят долго;
  • 22. Пример 3: Render Server - покрытие большой базы существующего кода Проект: ● зависит от многих сторонних компонентов ● многопоточный и многопроцессный ● требует тонких настроек окружения Тесты: + Уверенность в отсутствии регрессий + Упростили отладку
  • 23. Пример 4: Тесты для фронтенда (ExtJS) + Защищают от регрессий - Сложно писать - Сложно обеспечить глубокое покрытие - Могут замедлять работу продакшн кода - Очень чувствительны к окружению
  • 24. Пример 5: Тесты проходят долго Интеграционные тесты: ● работают долго ● зависят от окружения Сервер для автоматических тестов (Bamboo): + Продолжаем разработку пока тесты идут - Дополнительный сервис - Узкое место - нужен всей команде
  • 25. Проект сейчас Java 4 плана Bamboo 2175 тестов Flex 1 план Bamboo 1048 тестов C++ 3 плана Bamboo 290 тестов C# 2 плана Bamboo 109 тестов JS 2 плана Bamboo 60 тестов Java Doc 1 план Bamboo 1 тест
  • 26. Резюме После релиза ломается старый функционал Тесты - ваш проводник в светлое будущее. Тесты должны писать разработчики. Интеграционные тесты будут работать долго. Покройте UI базовым набором тестов.
  • 28. Проблема 3: Не можем выкатить релиз - код в репозитории нестабилен Почему? ● Код не тестируется перед попаданием в публичный доступ ● Тесты занимают много времени ● Нельзя коммитить локально Как не допустить?
  • 29. Continuous integration Идея: Любые изменения в коде должны тестироваться. Непротестированному коду запрещено попадать в публичный доступ. Как: В основной ветке - только стабильный код. Код стабилен, если проходят все тесты и тестировщики не нашли багов.
  • 30. Пример 1: Тесты перед каждым коммитом в SVN - Коммиты становятся “жирными” и долгими - Тестировщики не участвуют в проверке кода
  • 31. Пример 2: Каждая задача в отдельной ветке. С SVN на Git. + Легкая работа с ветками + Проще рулить конфликты + Возможность коммитить локально - Мигрировать всю историю - Другая идеология - людей надо учить - Неудобный клиент под Windows
  • 32. Пример 3: Жесткий workflow Ограничения: ● Мержить в master может только JIRA. Jira2Bamboo plugin. ● Мерж возможен только когда пройдут все тесты и нет конфликтов. + Проблема решается железобетонно - merge plugin не стабилен - мержить может только один человек - надо ждать, когда освободится
  • 33. Пример 4: Эволюция merge plugin Улучшения: ● Баг фиксы ● Поддержка очереди с приоритетом ● E-mail уведомления + Отправил в мерж и гуляй + Приоритетные задачи мержатся раньше + Задачи, где мало тестов, мержатся раньше
  • 34. Пример 5: Единый QA сервер -> N тестовых серверов Сделано: ● JIRA plugin для резервирования сервера ● Скрипт для автоматического билда заданной ветки на сервере
  • 35. Проект сейчас До мержа обязательный прогон тестов и полное ручное тестирование. Обязательное обучение людей работе с Git и workflow. Jira2Bamboo плагин с поддержкой очереди. Оптимизация работы с Bamboo - не гонять тесты лишний раз.
  • 36. Резюме Не можем выкатить релиз - код в репозитории нестабилен В большом проекте создайте "островок" стабильного кода. Используйте DVCS для большой команды Обучайте людей workflow и работе с DVCS. Сделайте коммиты, билды, запуск тестов простыми и быстрыми операциями.
  • 37. Проблема 4: Нужно править незнакомый код Почему? ● Автор кода недоступен Следствия: ● Тратится много времени на понимание кода ● Вероятность ошибок возрастает Как не допустить?
  • 38. Совместное владение кодом Идея: Любой участок кода должно знать минимум 2 разработчика. Как: Писать код в парах. Обязательное ревью кода
  • 39. Пример 1: Парное программирование обязательно + Качественней код + Непрерывная разработка - не нужны перерывы + Люди учатся друг у друга - Все равно получается медленней - Надоедает - Могут отвлекать других болтовней - Гибкий график может быть проблемой
  • 40. Пример 2: Парное программирование только для серьезных проблем + Взгляд со стороны на проблему + Максимально качественное решение + Не успевает наскучить
  • 41. Пример 3: Неопытные разработчики работают в парах + Минимизируем негативный эффект в первое время + Вдвоем проще осваивать незнакомую систему
  • 42. Пример 4: Позадачное code review + Любой код знает минимум еще 1 человек + Левый код отсеивается сразу + Меньше затрат, чем при работе в парах - Опытный разработчик может скептически относиться к замечаниям - Затягивает процесс завершения задачи - Разработчики ленятся ревьювить чужой код
  • 44. Проект сейчас Обязательное ревью перед тестированием. Review Board, нет интеграции с JIRA. Новые разработчики начинают ревьювить код через 1-2 месяца. Парное программирование только при необходимости.
  • 45. Резюме Нужно править незнакомый код Используйте Code Review непрерывно. Сделайте процесс Code Review удобным. Применяйте парное программирование только в сложных случаях.
  • 46. Итоги Непродуманные решения превратятся в серьезные проблемы в будущем. В большой команде проблемы будут происходить постоянно. Решайте проблемы фундаментально, чтобы избежать повторного появления вовсе. Готовьте команду к изменениям.
  • 47. Итоги На большом проекте с самого начала: ● Пишите тесты ● Наймите тестировщиков ● Используйте DVCS ● Следуйте принципам Continuous Integration ● Внедрите обязательное Code Review
  • 48. Спасибо за внимание! Виталий Шибаев vshibaev@issart.com Skype: shibvit Компания ИСС Арт http://issart.com/
  • 49. Для создания видео: Gource (+ ffmpeg) http://code.google.com/p/gource/