DevOps guide for awesome quality assurance

Post on 16-Apr-2017

105 views 3 download

Transcript of DevOps guide for awesome quality assurance

DevOps guide for awesome quality assurance

Вы хотите, чтобы у вас каждая фича «протаскивалась» до production за 3 часа? Тогда вам нужно вывести своё тестирование на продвинутый уровень!

Пару слов о себе:• Devops

• Agile Testing couch

• Руководитель автоматизации тестирования

• В QA c 2012 года

• В IT с 2007 года

• В Альфа Банке внедряю Облака

• Немного пишу код =)

• Люблю Linux

А что же было раньше?

Регресс регрессом погонял.

Как было:

UI-приемка и регресс

Автотесты

Unit-тесты*

Unit-тесты: • Черный ящик для всех. Никто не

знал что именно покрыто

юнит-тестами, а что не покрыто. • Все на усмотрение разработчика.

• Code coverage не считался.

* Unit-тесты - тесты, которые пишутся разработчиками

Как было:

UI-приемка и регресс

Автотесты

Unit-тесты

Автотесты: Автоматизированные UI E2E сценарии, покрывающие ТМ* регресса. 

- Не все проекты имели автотесты

- Отсутствие доверия у команды к

автотестам- Дублировалось ручным тестированием

*ТМ - тестовая модель

• E2E-тесты - любые интеграционные тесты, проверяющие

межкомпонентное или межсистемное взаимодействие

• Selenium-тесты - UI-тесты, эмулирующие действия

пользователя в браузере

Как было:

UI-приемка и регресс

Автотесты

Unit-тесты

UI-приемка: • Приемочное тестирование новой

функциональности.

• Осуществляли аналитики, в заключительных итерациях

привлекая тестера для написания

ТМ. 

UI-тесты - тесты, которые проверяют то, что видит пользователь

Как было:

UI-приемка и регресс

Автотесты

Unit-тесты

Регресс:   • Регрессионное тестирование

стабильной версии релиза

на не ухудшение.

• Длилось от 2 дней до 2 недель,

в зависимости от системы.

Как было:

UI-приемка и регресс

Автотесты

Unit-тесты max 20 %

Не более 30 %: появляются с опозданием

50 % - ручная работа

Что “болело”: Чтобы назначить лечение, надо диагностировать болезнь.

Отсутствие собственной экспертизы

Автоматизация тестирования

Непрозрачность

Экспертиза

Докум

ентация

Автоматизация тестирования “отстает” от разработки самого продукта

Непрозрачность всех процессов тестирования

для команды

Документация отнимает много времени и “пишется в стол”

Что и как мы изменили?

При внедрении DevOps, как культуры, процесс тестирования эволюционировал.

Пирамида тестирования

- способ визуализации того, как мы меняем тестирование

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

Unit-тесты: • Тесты на ту часть кода,

которая не исполняет какую-

либо бизнес-логику.

• Пишутся разработчиками.

• Учитываются в подсчете code

coverage. 

UI-приемка

Test coverage - тестовое покрытие требований, в %;

1 требование = min 2 тест-кейса (RUP)

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

E2E тесты:• Проверяют взаимодействие с

внешними слоями (API, UI);

• Пишут "тестер-разработчик"

или “аналитик-тестер”;

• Исполняются на mocks;

• Часть документации проекта. 

UI-приемка

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

Компонентные тесты: • Проверяют только одну

компоненту внутри API или UI;

• Являются частью

документации проекта;

• Пишутся в паре "тестер-

разработчик" или “тестер-

аналитик”

UI-приемка

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

UI-приемкаАвтотесты e2e:

• Интеграционные UI тесты

полного цикла. Проверяют

взаимодействие всех слоев

приложения с внешними

системами.

• Разрабатываются в паре

"автотестер-тестер".

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

UI-приемкаАвтотесты UI: 

• Компонентные тест-кейсы,

которые проверяют UI с точки

зрения конечного

пользователя. Исполняются на

мокированном API.

• Разрабатываются в паре

"автотестер-тестер".

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

UI-приемкаUI приемка:

• Ручное тестирование изменения

артефакта, который в рамках

новой версии был изменен.

• Проводится тестировщиком и

имеет жесткое ограничение по

времени. 

Как сейчас:

Автотесты (e2e, UI)

e2e-тесты, компонентные тесты

Unit-тесты

UI-приемка

30-90 % - code coverege

40 %

50 % - отставание в 1 user story

10 % - ручное тестирование

Manual testing

20 % от всего test coverаge - ручное тестирование

Стратегия

Тестировщик участвует в review юнит-тестов на полноту test coverage;

Тестировщик в паре с разработчиком пишет

юнит-тесты;

Max время приемки - 30 минут;

Обучаем всех тестировщиков программировать.

Приемочное тестирование на скорость

SCRUM PROCESS TESTING

QA EngeenerUser Story Artefact

30 минут

3 часа

User Story

PRODUCT

Документация как код

Как решить проблему устаревшей документации? Или той, что пишется “в стол”?

Test-case как документация проекта

Зачем качественно проектировать тестовую модель и гарантировать тестовое покрытие в 100% ?

Specification by Example:API: Аналитик с тестировщиком генерируют два артефакта для проекта:

1.UML диаграмма. Используем PlantUML. Диаграмма находится в

репозитории проекта;

2.Test-case в нотации BDD в репозитории проекта - каркас для

юнит-тестов. Парная разработка с тестировщиком;Во время сборки проекта генерируется html-документ в artifactory, как документация к релизу;

Используемые инструменты:

Spock Framework

Проектирование тест-кейсов – важнейшая часть тестирования

Почему?

Зачем мы это делаем?

• Тестируем требования

• Проектируем тестовую модель

• Приоритезируем и категоризируем тест-кейсы

REST-сервис

Функциональная логикаВход Выход

Внешняя БД Внешний сервис

Specification by Example:UI: Проектирование тест-кейсов происходит на user-story:

1.Тестировщик с разработчиком автотестов в паре для

 user-story описывает все возможные случаи в BDD сразу в коде проекта автотестов;

2.В тест-кейсах для автотестов всегда точное отражение

того, какими функциональными требованиями обладает US;

Используемые инструменты:Spock Framework

Жизненный цикл ТМПроектированиеТМнаAPi

Парнаяразработкатест-кейсовсаналитиком

Парнаядоработкатест-кейсовсразработчиком

РевьюpullrequestсAPIнаполнотуТМ

ПроектированиеТМнаUI,подготовкатест.данных

Парнаяразработкаавтоматизированныхтест-кейсовнаUi,савтотестером

В итоге - чудо:• Документация для проекта хранится в коде:

• Документация версионируется;

• Документация актуальная, потому что тестировщики и аналитики

вынуждены поддерживать её,

иначе автотесты будут «ломаться»;

• Визуализация тестового покрытия (test coverage);

• Сбор статистики и метрик по тестированию и качества проекта;

Unit-тестирование

Тесты на API, как документация к коду

Автогенерация спецификации на API

Автогенерация спецификации на API

Структура тестовой модели

Automated testing

Внедрение TDDРазработчики пишут юнит-тесты на API, UIПокрытие кода тестами (unit-tests, e2e);Code coverage не менее 25%;Парное программирование;

Разработка автотестов• Разработчики автотестов разрабатывают интеграционные и UI

автотесты с отставанием в один спринт

• Автотесты запускаются при каждом pull request

• Парное программирование с кем-нибудь из команды;

• Доработка фреймворка с автотестами: время прогона каждой

сборки с автотестами не должно превышать 30 минут. 

• Автоматизация тестирования адаптивности и кроссбраузерности;

Инфраструктура

Инфраструктура для

автотестов позволяет

делать любой регресс

за 30 минут

Инфраструктура для автотестов

…или как выжать максимум пользы от того что имеем.

Инструменты и технологии• Selenium Webdriver• Selenium Grid• Ansible• Docker• Mesos + marathon• Azure Pack• Jenkins 2.0

git

Mesos Slave

Mesos Slave

Mesos Slave

Mesos Slave

CI Pipeline

CI Autotests

CLI Number Of Containers

CLI Create Selenium Grid

Repo Autotests projects

Repo Docker Images

Mesos master

marathon REST APIКластер c произвольным количеством VM

c различными физ. характеристиками и в различных VLAN,

ОС: Centos 7.2

Инфраструктурное ПО: • ansible• docker• zookeeper• mesos• marathon

Pipeline single job autotests

Seleniumchrome

node

Seleniumfirefoxnode

Seleniumchrome

node

Seleniumfirefox node

Jenkins: Job1 cli Number Of Containers

cli Create Selenium Grid

Selenium Hub

Maven, JDK

Selenium Grid

Mesos master

marathon REST API

Hub, node запущеныв docker-контейнерах

cli Delete Selenium Grid

Pipeline CLI Number of Containersgit

Jenkins: Job1

CLI Number Of Containers

Repo Autotests projects

Входные параметры: • Наименование проекта (git repo)• Max время прогона автотестов - 30 мин• Наименования docker images (необязательно)

1.Подсчитывает

количество .story файлов или test-сетов в проекте

2.Исключает skipped тест-ы3.Считает по формуле, какое

количество контейнеров-nodes необходимо поднять в selenium

grid4.Возвращает целочисленное

значение

Целевая схема нагрузочного тестирования

Продукт должен быть не только без багов, но и быстро работать

Разрабатываем централизованное хранилище моков

Переиспользуется разработчиками, тестировщиками для автотестирования и нагрузочного тестирования.

Встраиваем запуск нагрузочного

тестирования в Pipeliene проекта. Нагрузочное тестирование запускается в

момент запуска регрессионных автотестов, после установки приложения на стенд.

Автоматизируем анализ

результатов автотестов на

основании предустановленного SLA.

Снимаем метрики:

- скорость загрузки страницы (UI)

- время отклика REST-сервиса (API)

Метрики по тестированию

Как мы понимаем, что достигли цели?В каждом проекте для оценки качества должно использоваться не менее 5 различных метрик.

Как померить качество?… или как мы гарантируем себе, что в погоне за быстрым деплоем мы не ухудшаем качество продукта?

МЕТРИКИ КАЧЕСТВА

Code coverage

Дефекты, обнаруженные в продакшне

Качество исправления дефектов

% автоматизации тестового покрытия

(e2e UI, unit тесты)

Test coverage

Частота проведения регрессии

Дефекты, обнаруженные при интеграции

$: есть ли выгода?… метрики, которые мы используем для понимания выгодно ли то, что мы делаем для Бизнеса.

МЕТРИКИ “ЦЕНА/КАЧЕСТВО”

Окна анализа результатов тестирования

Окно автоматизации тестирования

Время на создание автоматизированных

тестов

Окно тестирования =< 30 мин

Автоматизация• Весь регресс автоматизирован;• Автоматизируем подсчет test coverage;

• Интегрируем отчеты результатов автотестов в jira pipeline;

• Автоматизируем сбор метрик с помощью jira; 

Эволюция культуры

Процессные изменения

• Прозрачность тестирования;• Учимся принимать риски;

КОММУНИКАЦИИ

Супертестировщик - кто же он?

Т-образность: cross domain skills & attitudes

Немножко программист:

– Обладает навыками программирования на Java или на JS;– Понимает алгоритмы на начальном уровне;

Супертестировщик – это…

Немножко аналитик:

– Знает архитектуру тестируемого приложения;– Не тестирует «черный ящик» и может залезть в код;– Осуществляет приемочное тестирование;

Супертестировщик – это…

И просто крутой QA engineer:

– Владеет техниками тест-дизайна;– Умеет проектировать тестовую модель с точки зрения используемой пирамиды;

– Пишет/проектирует модульные тесты;

Супертестировщик – это…

ВАЖНО! •Тестер•Тестировщик• QC engineer

Не синонимы QA engineer

QA engineer <> QC engineer

Нужны крутые тестировщики

Вы не найдете идеальных людей для себя!Ищите людей с потенциалом для обучения.

Эволюция тестировщика до супертестировщика

4 level

Написание тестовой

документации сразу в коде: BDD тесты на API и E2E UI

3 level

Тестирование документации

на этапе аналитики

2 level

Самостоятельная доработка

автотестов сразу в коде

1 level

Самостоятельное сопровождение автотестов

Что же мы сделали?

1 автоматизатор = 2 командыНамеренно создали дефицит ресурса

• Автоматизатор разрабатывает только фреймворк для

приложения команды

• Учит тестировщика писать BDD тесты с использованием

фреймворка

• Обучает 2х тестировщиков из своих команд

• Передает сопровождение разработанных автотестов

команде

Совет: обезопасьте себя• Если есть крутой специалист - пусть он всю работу делает

чужими руками парной сессией.

• Выделяйте время для максимального шаринга экспертизы

между людьми.

• Обучая людей будьте готовы к тому, что они попросят

повышения ЗП

• Придумайте систему мотивации для уже “выросших”

супертестировщиков

Внутреннее community тестировщиков

Зачем коммуникации нужны и как их развивать?

Внутреннее сommunity• Коммуникации = знания и обмен информацией

• Обмен опытом

• Предотвращение дублирования одной и той работы в разных

командах

• Мотивация людей для развития

Выводы

Devops - это не только автоматизация всего и всея

Недостаточно внедрить технологию и сделать CI и CD при отсутствии культуры качества

Функциональные “колодцы” есть не только между dev и ops. Являются ли ваши тестировщики частью Dev?

DevOps - это в первую очередь история про людей, а не про технологии.

Вы потратите больше времени на выстраивание коммуникаций внутри команды, чем на настройку Pipeline

Devops не может существовать без Agile и инженерных практик.

Мои контакты:

@travieso_nastya

traviesonastya

anastasia.aseeva