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

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

[email protected]

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

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

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

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

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

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

Renga Architecture

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

2011

2012

2013

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

Мы тут

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

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

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

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

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

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

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

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

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

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

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

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

Что это?

[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: 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: 11мартюшев   почему юнит-тесты не работают. история большого проекта

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

[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: 11мартюшев   почему юнит-тесты не работают. история большого проекта

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

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

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

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

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

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

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

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

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

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

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

Архитектура

UI

Model

3D SceneDirectX

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

Архитектура

UI

Model

3D SceneDirectX

Normal

Record

Play

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всем пофиг

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запуск на CI

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

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

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

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

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

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

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

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

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

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

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

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

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

При чём тут Agile?

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

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

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

Renga Architecture


Recommended