Slide 1

Slide 1 text

Odin Разработка коммерческого ПО с высокой долей инноваций (на примере Parallels Cloud Server) Дмитрий Мишин Руководитель проекта Сергей Бронников Руководитель отдела тестирования

Slide 2

Slide 2 text

Odin О проекте 01 Вводная о том, что такое Parallels Cloud Server и для кого мы его разрабатываем Глава

Slide 3

Slide 3 text

Parallels Cloud Server •  Решение для виртуализации: Linux + Containers + Hypervisor •  Стартовал в 2000м году •  Целевая аудитория – хостинг провайдеры 3

Slide 4

Slide 4 text

Рынок хостинга •  Высокая конкуренция, низкая прибыльность – как следствие: –  Экономия на всём – софте, железе, персонале –  Желание выделиться –  Время реакции на изменения – критично для выживания (поддержка новых ОС и модных приложений) •  В то же время – средний срок жизни виртуального сервера – годы (инертность в установке обновлений) 4

Slide 5

Slide 5 text

Требования к продукту •  Поддержка дешёвого железа •  Минимизация накладных расходов на виртуализацию •  Гибкость (возможность различных конфигураций) •  Стабильность •  Быстрая интеграция новых технологий •  Поддержка обратной совместимости 5

Slide 6

Slide 6 text

Odin Разработка 02 С чего начинали и к чему пришли Глава

Slide 7

Slide 7 text

Первая версия •  Идея - контейнерная виртуализация •  Проектная группа: 5 человек •  Тестирование – базовая проверка приложений внутри контейнеров силами студентов •  Разработка заняла год, планировали за 8 месяцев •  Результат – по нынешним меркам - PoC. 7

Slide 8

Slide 8 text

Текущее состояние •  Команда – ~30 инженеров •  3,165,894 SLOCs продуктового кода •  5 продуктов в режиме «поддержки», 60 обновлений за прошлый год (порядка тысячи багфиксов и десятки новых фич) •  ~30,000 серверов (>1,000,000 Контейнеров и ВМ) •  ~2,000 клиентов 8

Slide 9

Slide 9 text

Модель разработки •  Было –  Классический «водопад»: •  Мажорные релизы раз в год, •  новая функциональность – только в следующем мажорном релизе •  Стало –  Модель “Release train”: •  Раз в квартал – мажорное обновление с новой функциональностью •  Между мажорными обновлениями – хотфиксы раз в две недели (при необходимости) 9

Slide 10

Slide 10 text

Политика выпуска обновлений •  Для флагманского продукта (1): •  4 мажорных обновления в год (новая функциональность + багфиксы) •  Хотфиксы раз в две недели (в случае обнаружения критических багов) •  Поддержка новых дистрибутивов: –  в Контейнерах – 1 месяц с даты выхода –  в ВМ – 1-2 мажорных обновления с даты выхода •  Для остальных продуктов (4): •  2 мажорных обновления в год (багфиксы) •  Проблемы безопасности (5): •  0-day – 1-2 дня, Важные – в срок <= 2 недель, Остальные – в срок <= 1 месяц 10

Slide 11

Slide 11 text

11 Так вы «стол полируете»!

Slide 12

Slide 12 text

Odin Инновации 03 Как мы разрабатываем что-то новое Глава

Slide 13

Slide 13 text

Примеры инноваций 13 •  Контейнеры •  Распределённое хранилище данных •  Системы де-дупликации данных •  Формат хранения данных в ВМ и контейнере •  Миграция ВМ/Контейнеров с минимальным даунтаймом •  Контейнеры в контейнерах (Docker) •  И т.д. …

Slide 14

Slide 14 text

Классификация инноваций 14 •  Задача инженерная или исследовательская? •  Понятно что именно делать или нет •  Интрузивная или нет? •  Сколько компонентов затронуто изменениями •  Time to Market •  Насколько важно быстро выпустить новую функциональность

Slide 15

Slide 15 text

Исследовательские задачи 15 •  Пример: •  «Хотелось бы побыстрее» •  Разработка: •  Резервируем время на исследование, выделяем разработчика/группу на него •  Задача – происследовать, сделать PoC, детализировать •  Оценка общих сроков задачи – только после окончания исследования

Slide 16

Slide 16 text

Интрузивные инновации 16 •  Пример: •  Изменение формата хранения данных •  Разработка – в отдельной ветке кода •  После выполнения 90% задач – включение в основную ветку •  Предусмотреть: •  Большой интервал времени для стабилизации/ тестирования – от 4х месяцев •  Возможность спрятать новую функциональность

Slide 17

Slide 17 text

Супер-инновации 17 •  Пример: •  Распределённое хранилище данных •  Разработка: •  Небольшая проектная группа, задача – исследовать проблему и подготовить PoC •  После PoC – подключение основной группы разработчиков, разработка в ветке следующего мажорного релиза (срок выпуска - от года)

Slide 18

Slide 18 text

Инновации с коротким deadline 18 •  Пример: •  Поддержка Контейнеров в Контейнерах (Docker) •  Разработка: •  Формируем фиче-группу (разработчики + тестеры) •  Разработка тестов и документации параллельно с написанием кода •  Еженедельные (или чаще) совещания фиче-группы

Slide 19

Slide 19 text

19 Это всё теория, а как это выглядит на практике?

Slide 20

Slide 20 text

Odin Инструменты 04 Что нам помогает выпускать релизы по расписанию Глава

Slide 21

Slide 21 text

Backlog запросов на новую функциональность 21 Summary P Design Sz State Fix Version/s CPU features masking Critical not required M In QA PCS6.0-Update9 Live migration compatibility pools Critical not required M In QA PCS6.0-Update9 Docker inside PCS container Blocker required L in dev PCS6.0-Update9 e1000e emulation Blocker not required L in QA PCS6.0-Update-next Implement NIC virtio-net Major not required M in QA PCS6.0-Update-next Container and Virtual Machine templates on shared storage Blocker done L in dev PCS6.0-Update-next Virtual Machine Generation ID in Windows Server 2012 Major not required M in dev PCS6.0-Update-next yum to install and update PVA and vzagent Major required M in dev PCS6.0-Update-next pcompact enhanced with degragmentation support Major required in dev PCS6.0-Update-next Offline migration from OpenVZ to PCS6 Blocker not required not started PCS6.0-Update-next Cloud Boot Feature Critical done M not started PCS6.0-Update-next PСS SDK Java and PHP Bindings Critical not required not started PCS6.0-Update-next

Slide 22

Slide 22 text

Burndown 22

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

24 С разработкой понятно, а как с тестами?

Slide 25

Slide 25 text

Odin Планирование и контроль автоматического тестирования 05 Проблемы, инструменты, методики Глава

Slide 26

Slide 26 text

Реальность 26 •  Ограниченность  ресурсов:  время,  люди  (10+1),  сервера  (130+)     •  Нестабильность  автоматических  тестов  и  продукта     •  Большое  количество  тестовых  конфигураций  для     регресионного  тестирования  (400+)     •  Постоянно  меняющиеся  требования  к  продукту     •  Большое  количество  возможных  конфигураций  для  продукта    

Slide 27

Slide 27 text

Проблемы в тестировании 27 •  Непредсказуемость  даты  окончания  тестирования  для  больших   объемов  тестирования   •  Отсутствие  метрик  для  выполненной  работы  (много  сделали? сколько  ещё  осталось?)   •  Проблемы  в  диагностике  проблем  сходимости  тестирования   •  Нет  возможности  спрогнозировать  время  тестирования   обновления  до  начала  тестирования     •  Нет  возможности  связать  объём  тестирования  и  объём   сделанных  изменений  в  продукте    

Slide 28

Slide 28 text

Общая технология тестирования 28 •  ︎Две  команды:  разработчики  и  тестировщики   •  Автоматические  тесты   •  Конфигурации  тестов   •  Управление  серверами   •  Требования  тестов  к  серверам   •  Планировщик  тестов  (robot.py)    

Slide 29

Slide 29 text

Жизненный цикл сервера 29

Slide 30

Slide 30 text

Инструменты 30 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 31

Slide 31 text

Инструменты 31 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 32

Slide 32 text

Инструменты: Tестплан Возможные состояния тестов 32 •  тест  ни  разу  не  запускался     •  ︎тест  успешно  прошёл     •  ︎была  найдена  проблема  и  заблочен  открытым  багом     •  ︎тест  заблокирован  протриаженным  багом     •  ︎блокирующий  баг  исправлен  и  тест  готов  к  перезапуску     блокирующий  баг  исправлен  и  тест  готов  к  перезапуску     •  ︎баг  протриажен  и  помечен  как  случайный,  тест  готов  к   перезапуску    

Slide 33

Slide 33 text

Инструменты: Tестплан Возможные состояния тестов 33

Slide 34

Slide 34 text

Инструменты: Tестплан Общий тестплан 34

Slide 35

Slide 35 text

Инструменты 35 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 36

Slide 36 text

Инструменты: Покрытие продукта регрессионными тестами 36

Slide 37

Slide 37 text

Инструменты 37 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 38

Slide 38 text

Инструменты 38 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 39

Slide 39 text

Инструменты: Диаграмма сгорания тестов 39

Slide 40

Slide 40 text

Инструменты 40 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 41

Slide 41 text

Инструменты: Интеграция багтрекера с системой обслуживания тестов 41

Slide 42

Slide 42 text

Инструменты 42 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 43

Slide 43 text

Инструменты: График утилизации серверов 43

Slide 44

Slide 44 text

Инструменты 44 •  ︎Тестплан,  интегрированный  с  багтрекером     Тестплан,  интегрированный  с  багтрекером     •  ︎График  покрытия  автоматическими  тестами     •  Непрерывная  интеграция  (bisect,  оперативный  фидбек  на   изменения,  контролируемые  разломы)     •  ︎Диаграмма  сгорания  тестов  (бёрндаун)     •  ︎Интеграция  багтрекера  с  системой  обслуживания  серверов     •  График  утилизации  тестовых  серверов     •  ︎Правильная  статистика  для  фокусирования  разработчиков    

Slide 45

Slide 45 text

Инструменты: Статистика дефектов 45

Slide 46

Slide 46 text

Итог 46 •  Предсказуемая  и  контролируемая  сходимость  (только  при   наличии  данных)     •  Новая  метрика  -­‐  количество  ”сгоревших”  тайтлов     •  Возможность  диагностики  проблем  сходимости  тестирования    

Slide 47

Slide 47 text

Odin Проблемы 06 Что мы хотели бы изменить или улучшить Глава

Slide 48

Slide 48 text

Проблемы 48 •  Тестирование •  Нельзя спрогнозировать время тестирования обновления до начала тестирования •  Сложно спрогнозировать объём тестирования на основе объёма сделанных изменений в продукте •  Разработка •  Много фич классифицируется как «интрузивные» •  Тестирование интрузивных фич в процессе их разработки •  Недооценка на раннем этапе – как учесть всё?

Slide 49

Slide 49 text

Odin Спасибо за внимание, вопросы? Дмитрий Мишин [email protected] Сергей Бронников [email protected]