мартюшев почему юнит-тесты не работают. история...

35
Почему юнит-тесты не работают. История большого проекта Александр Мартюшев [email protected]

Upload: agiledays

Post on 09-Aug-2015

248 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: мартюшев   почему юнит-тесты не работают. история большого проекта

Почему юнит-тесты не работают. История большого проектаАлександр Мартюшев

[email protected]

Page 2: мартюшев   почему юнит-тесты не работают. история большого проекта

Александр МартюшевВнедряю и использую Agile с 2008 года

Вырос в компании АСКОН

Расту в компании SEMrush.com

Представитель ScrumTrek в Питере

Page 3: мартюшев   почему юнит-тесты не работают. история большого проекта

Renga Architecture

Page 4: мартюшев   почему юнит-тесты не работают. история большого проекта

2011

2012

2013

Старт проекта

Мы тут

Page 5: мартюшев   почему юнит-тесты не работают. история большого проекта
Page 6: мартюшев   почему юнит-тесты не работают. история большого проекта

Проблема:Появляются регрессионные ошибки

Мы не знаем где и когда отвалилось

Unit-тесты не помогают

Нет стабильной сборки

Page 7: мартюшев   почему юнит-тесты не работают. история большого проекта

Тестируют в изоляции

Почему Unit-тесты не помогли

Page 8: мартюшев   почему юнит-тесты не работают. история большого проекта
Page 9: мартюшев   почему юнит-тесты не работают. история большого проекта

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

Укрупняйте System Under Test

Page 10: мартюшев   почему юнит-тесты не работают. история большого проекта

Что это?

[0,0,0] [0,100,0] [1000,0,0] [1000,100,0][0,0,300] [0,100,300][1000,0,300] [1000,100,300]

Page 11: мартюшев   почему юнит-тесты не работают. история большого проекта

Простейший 3D объект

[0,0,0] [0,100,0] [1000,0,0] [1000,100,0][0,0,300] [0,100,300][1000,0,300] [1000,100,300]

Page 12: мартюшев   почему юнит-тесты не работают. история большого проекта

Нечитаемые данные

[0,0,0] [0,100,0] [1000,0,0] [1000,100,0][0,0,300] [0,100,300][1000,0,300] [1000,100,300]

Очень сложно писать

Ещё тяжелее поддерживать

Page 13: мартюшев   почему юнит-тесты не работают. история большого проекта

Тестировать через UI

Page 14: мартюшев   почему юнит-тесты не работают. история большого проекта

Тестировать через UI

Что проверять?

Page 15: мартюшев   почему юнит-тесты не работают. история большого проекта

Идея: Snapshot’ыСпециальная кнопка – F2

Модель, 3D сцена, DirectX, состояние UI

Реализовать сравнение snapshot’ов

Page 16: мартюшев   почему юнит-тесты не работают. история большого проекта

Зачем нам Test Complete/Squish?

Page 17: мартюшев   почему юнит-тесты не работают. история большого проекта

Архитектура

UI

Model

3D SceneDirectX

Page 18: мартюшев   почему юнит-тесты не работают. история большого проекта

Архитектура

UI

Model

3D SceneDirectX

Normal

Record

Play

Page 19: мартюшев   почему юнит-тесты не работают. история большого проекта

2 программиста сделали за 1 месяц Не нужно программировать чтобы создать тестВстроено и работает у всехЛегко отлаживатьЗапись/воспроизведение сценариев для других нужд

Требует поддержки

Page 20: мартюшев   почему юнит-тесты не работают. история большого проекта

Как же изменился наш процесс

Конец спринта

Запускаем тесты

Тесты красные

Теперь мы точно знаем: что то сломалось

Нет стабильной сборки

Page 21: мартюшев   почему юнит-тесты не работают. история большого проекта

Давайте прикрутим к CIТесты запускаются после вливания в master

Отчет приходит всем разработчикам

Page 22: мартюшев   почему юнит-тесты не работают. история большого проекта

Давайте прикрутим к CIТесты запускаются после вливания в master

Отчет приходит всем разработчикам

Всем пофиг

Нет стабильной сборки

Page 23: мартюшев   почему юнит-тесты не работают. история большого проекта

Закрутим гайки (DoD)Разъяснительная работа с разработчиками

Запуск на master + на ветках команд

Page 24: мартюшев   почему юнит-тесты не работают. история большого проекта

Закрутим гайки (DoD)

Авторы тестовой системы превратились в поддержку

Не успевали исправлять

Нет стабильной сборки

Разъяснительная работа с разработчиками

Запуск на master + на ветках команд

Page 25: мартюшев   почему юнит-тесты не работают. история большого проекта

Обучить всех Обучающий семинар для разработчиков

Авторы не исправляют, а обучают

Начало легчать

Page 26: мартюшев   почему юнит-тесты не работают. история большого проекта

Как сейчасЗапуск на всех CI после commit’а

Каждая фича «бетонируется» тестами сразу после разработки (DoD)

Полный регресс 5000 тестов занимает один час

Регрессия замкнута на программистах

Все участники проекта просто счастливы

Page 27: мартюшев   почему юнит-тесты не работают. история большого проекта

Чему этот кейс нас научил?

Page 28: мартюшев   почему юнит-тесты не работают. история большого проекта

Unit тестов недостаточноНе зацикливайтесь на unit тестах

В унаследованных системах начинайте сверху

Page 29: мартюшев   почему юнит-тесты не работают. история большого проекта

Стоимость ошибки

Page 30: мартюшев   почему юнит-тесты не работают. история большого проекта

Разработчики, помогайте!

Автотесты ближе к программированию чем к тестированию

Только программисты знают как лучше

Page 31: мартюшев   почему юнит-тесты не работают. история большого проекта

Встраивание в процессАвтотесты - часть процесса

Запуск на CI

Все умеют запускать тесты

Все знают как они устроены

Умеют починить

Page 32: мартюшев   почему юнит-тесты не работают. история большого проекта

Работа с веткамиКод и тесты в одном репо, а не отдельно

Текстовые snapshot’ы – отличная идея

Page 33: мартюшев   почему юнит-тесты не работают. история большого проекта

Автотесты это не бесплатно

Трудоёмкий процесс

В фоновом режиме неэффективно

Особенно если нет опыта

Выгодное вложение

Page 34: мартюшев   почему юнит-тесты не работают. история большого проекта

При чём тут Agile?

Выявил проблему

Заставил её решать

Page 35: мартюшев   почему юнит-тесты не работают. история большого проекта

Renga Architecture