Креативный менеджмент
 глазами разработчика:
   Как выжить в "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/

More Related Content

PDF
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
PPTX
Ошибки начинающих Tdd практиков, плюсы применения
PPTX
Лучшие практики на практике
PPTX
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
PPTX
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
PPTX
Continious integration-Automated Testing-Solid-Agile
PDF
андрей дмитриев взгляд со стороны разработчика
PPTX
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Ошибки начинающих Tdd практиков, плюсы применения
Лучшие практики на практике
Grammarly Test Club#2. Выступление Алексея Лупана (SysIQ, Inc.): "Без тест-ке...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
Continious integration-Automated Testing-Solid-Agile
андрей дмитриев взгляд со стороны разработчика
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?

What's hot (19)

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

Viewers also liked (18)

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

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

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

More from HappyDev (20)

PPT
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
PPTX
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
PPTX
2015-12-06 Константин Борисов - Как собеседовать программиста?
PDF
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
PPTX
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
PDF
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
PPTX
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
PDF
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
PDF
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
PDF
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
PDF
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
PDF
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
PPTX
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
PDF
2015-12-05 Александр Рожнов - Свое облако под стейджинг
PPTX
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
PDF
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
PPTX
2015-12-05 Андрей Сидоренко - Сценарии использования и их роль в процессе раз...
PPTX
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
PDF
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Антон Непомнящих - Agile — как уложиться в сроки и бюджет?
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli script
2015-12-06 Константин Борисов - Как собеседовать программиста?
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
2015-12-06 Букуров Алексей - Автоматическое формирование интерфейса по метаоп...
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
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. Спасибо за внимание! Виталий Шибаев [email protected] Skype: shibvit Компания ИСС Арт http://issart.com/
  • 49. Для создания видео: Gource (+ ffmpeg) http://code.google.com/p/gource/