Экономически эффективный процесс тестирования (codefest...

51
Экономически эффективный процесс тестирования Андрей Солнцев

Upload: andrei-solntsev

Post on 18-Jul-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Экономически эффективный процесс тестирования (Codefest 2015)

Экономически эффективный

процесс тестирования

Андрей Солнцев

Page 2: Экономически эффективный процесс тестирования (Codefest 2015)

• Интернет-банк Санкт-Петербург

• idemo.bspb.ru

Page 3: Экономически эффективный процесс тестирования (Codefest 2015)

• Сроки

Релиз “для своих” 1 мес.

Публичный релиз 5 мес.

Page 4: Экономически эффективный процесс тестирования (Codefest 2015)

• Ресурсы

тест-аналитиков 0

автоматизаторов 0

тестировщиков 0

разработчиков 4

Page 5: Экономически эффективный процесс тестирования (Codefest 2015)

Автотесты

юнит-тесты 1200 шт 10 сек

UI тесты 120 шт 4 мин

Как это возможно?

Page 6: Экономически эффективный процесс тестирования (Codefest 2015)

• В чём секрет?

Page 7: Экономически эффективный процесс тестирования (Codefest 2015)

Новый

• Вот секрет:

юнит-тесты

медленные

тормознутые

ручные

парное программирование

аджайл

непрерывная интеграция

чистый код

рефакторинг

KISS

YAGNI

XP

Page 8: Экономически эффективный процесс тестирования (Codefest 2015)

• Почему

• никто

• eго

не использует?

Page 9: Экономически эффективный процесс тестирования (Codefest 2015)

9

Потому что

Кто-то

когда-то

решил,

что

разработчики дорогие,

а тестировщики на дороге валяются.

Page 10: Экономически эффективный процесс тестирования (Codefest 2015)

10

И поэтому

Чтобы сэкономить,

Пусть разработчики фигачат код,

а всякое г….

спихнём на тестировщиков!

Page 11: Экономически эффективный процесс тестирования (Codefest 2015)

Локальная оптимизация!

аналитик разраб тестировщик

больше

спеков!

больше

кода!

больше

тестов!

Page 12: Экономически эффективный процесс тестирования (Codefest 2015)

• Интеграционные тесты - ОБМАН

Page 13: Экономически эффективный процесс тестирования (Codefest 2015)

• Интеграционные тесты - ОБМАН

Page 14: Экономически эффективный процесс тестирования (Codefest 2015)

• Интеграционные тесты - ОБМАН

Page 15: Экономически эффективный процесс тестирования (Codefest 2015)

• Интеграционные тесты - ОБМАН

Page 16: Экономически эффективный процесс тестирования (Codefest 2015)

Экспоненциальный рост!

• Интеграционные тесты - ОБМАН

Page 17: Экономически эффективный процесс тестирования (Codefest 2015)

• Что же делать?

Page 18: Экономически эффективный процесс тестирования (Codefest 2015)

тестируй!

• и

• Разбивай

Page 19: Экономически эффективный процесс тестирования (Codefest 2015)

• Разбивай и тестируй!

Линейный рост!

Page 20: Экономически эффективный процесс тестирования (Codefest 2015)

• Разбивай и тестируй!

• Это общий принцип

• - Юнит-тесты

• - UI-тесты

Page 21: Экономически эффективный процесс тестирования (Codefest 2015)

• Писать

• юнит-

тесты

ВЫГОДНО

Page 22: Экономически эффективный процесс тестирования (Codefest 2015)

• Юнит-тесты - выгодно

• Менеджерам

Page 23: Экономически эффективный процесс тестирования (Codefest 2015)

• Чак Норрис не ходит на охоту

• Чак Норрис ходит убивать!

• охота = возможность неудачи

Page 24: Экономически эффективный процесс тестирования (Codefest 2015)

Нам некогда писать юнит-тесты,

мы и так не успеваем.

Вы потому и не успеваете,

что у вас нет юнит-тестов!

Page 25: Экономически эффективный процесс тестирования (Codefest 2015)

Без юнит-тестов

С юнит-тестами

Page 26: Экономически эффективный процесс тестирования (Codefest 2015)

Без юнит-тестов

С юнит-тестами

разработка

разработка

тест багфикс тест

тест багфикс в бой!

Page 27: Экономически эффективный процесс тестирования (Codefest 2015)

Юнит-тест

делает из мальчика мужчину

Page 28: Экономически эффективный процесс тестирования (Codefest 2015)

• А что же с UI-

тестами?

• То же самое:

• Разбивай и тести!

Page 29: Экономически эффективный процесс тестирования (Codefest 2015)

Rocket scienceТребования:

При скорости ветра 100 км/ч

Подъёмная сила крыла должна быть 150 кН

Как бы вы стали это тестировать?

Page 30: Экономически эффективный процесс тестирования (Codefest 2015)

Запустить ВЕСЬ самолёт

Протестировать крыло ОТДЕЛЬНО

Rocket science

Тестируемое

Эмулятор

Page 31: Экономически эффективный процесс тестирования (Codefest 2015)

WebDriver позволяет

слишком легко

запустить

ВЕСЬ

самолёт

Проблема нашего поколения

Page 32: Экономически эффективный процесс тестирования (Codefest 2015)

Логин Заказы Новый Отослан

• Разбивай и тестируй!

LoginTest

- 1 тест

- 2 тест

- 3 тест

Page 33: Экономически эффективный процесс тестирования (Codefest 2015)

Логин Заказы Новый Отослан

NewOrderTest

- 1 тест

- 2 тест

/fastLogin?user=bob&url=/orders/new

• Разбивай и тестируй!

Page 34: Экономически эффективный процесс тестирования (Codefest 2015)

• А это не

опасно?• Нет!

• Только в тесте

• Выгода больше риска

/fastLogin?user=bob&url=/orders/new

Page 35: Экономически эффективный процесс тестирования (Codefest 2015)

• Быстрые

тесты

ВЕБ

БД

Сервер

Сервисы браузер

Жёлтые штуки

ДОЛЖНЫ БЫТЬ

- быстрые

- управляемые

Page 36: Экономически эффективный процесс тестирования (Codefest 2015)

rrange

ct

ssert

A

A

A

• Суть тестов

Page 37: Экономически эффективный процесс тестирования (Codefest 2015)

• Быстрые

тесты

ВЕБ

БД

Сервер

Сервисы

In-memory – H2, Sqlite

- Jetty

Эмулятор

- Play!

браузер

- контроль

- JS

Page 38: Экономически эффективный процесс тестирования (Codefest 2015)

Сервер

http://habrahabr.ru/post/126066/

@BeforeClass

public static void startServer() {

Server server = new Server(8080);

WebAppContext shop =

new WebAppContext("webapp",

"/shop");

server.setHandlers(shop);

server.start();

}

Page 39: Экономически эффективный процесс тестирования (Codefest 2015)

@Test

public void loginTest() {

open(“http://localhost:8080/shop”);

}

Сервер запустился!

Без всякой инсталляции

Прямо из тестов

В считанные секунды

Page 40: Экономически эффективный процесс тестирования (Codefest 2015)

In-memory DB

db.url=jdbc:oracle:thin:@ip:1521:SID

db.driver=oracle.jdbc.OracleDriver

%test.db.url=jdbc:h2:mem:shop

%test.db.driver=org.h2.Driver

Структура ДБ:

Page 41: Экономически эффективный процесс тестирования (Codefest 2015)

Неэффективный процесс

разраб админ

https://

test.firma.ruразраб QA

Page 42: Экономически эффективный процесс тестирования (Codefest 2015)

Эффективный процесс

разраб

QA

http://

localhost:8080разраб админ

http://

localhost:8080

Page 43: Экономически эффективный процесс тестирования (Codefest 2015)

Эффективный процесс

Тесты ДО КОММИТА!

Тесты вместе с кодом в GIT

Тесты на http://localhost:8080

> ant unit-tests

> ant ui-tests

Возможность запускать

Page 44: Экономически эффективный процесс тестирования (Codefest 2015)

Используй правильные

инструменты!

• Как победить

• StaleElementException?

Инструмент

многое может

Инструмент

решает мои

проблемы

Page 45: Экономически эффективный процесс тестирования (Codefest 2015)

45

ru.selenide.org

Page 46: Экономически эффективный процесс тестирования (Codefest 2015)

WebDriverWait.presenceOfElementLocated

ru.selenide.org

StaleElementException

Implicit timeout

Page 47: Экономически эффективный процесс тестирования (Codefest 2015)

• Видео:

• https://vimeo.com/73128965

Page 48: Экономически эффективный процесс тестирования (Codefest 2015)

Используй правильные

инструменты!

Винтовка -

оружие новичка

Выбор профессионала -

нож!

Page 49: Экономически эффективный процесс тестирования (Codefest 2015)

• Подытожим• Быстрых - много, медленных - мало.

• Arrange. Act. Assert.

Эмулируй ненадёжные зависимости.

• Убеди этих ленивых ушлёпков писать юнит-тесты!

• Выбирай простые и надёжные средства

а не всемогущие фреймворки, “решающие ваши проблемы”.

Page 50: Экономически эффективный процесс тестирования (Codefest 2015)

• Что значит

мастер

Видео:

https://dl.dropboxusercontent.com/u/2856647/aikido.mp4

• Мастер не тот, кто знает

100500 технологий

• А тот, кто решает задачу легко,

потратив минимум энергии

Page 51: Экономически эффективный процесс тестирования (Codefest 2015)

• Андрей

Солнцев

@asolntsev

[email protected]

selenide.org