11. Деревья
шпят *
едят *
бегают *
висят *
Норы
шпят *
едят *
бегают *
During All
activities:
шуршпанят
Особенные случаи:
GIVEN шпят
WHEN есть кто за 2 метра
THEN становятся
невидимыми
Переходы:
деревья > норы *
деревья < норы *
Выбираем высокоприоритетные
“фичи”
12. Деревья
шпят *
едят *
бегают *
висят *
Норы
шпят *
едят *
бегают *
Переходы:
деревья > норы *
деревья < норы *
Что бы автоматизировать в первую очередь
и побыстрей (Smoke)
13. Сценарий (End to End)
перебежать в нору
побегать
перебежать на дерево
повисеть
поесть
перебежать в нору
пошпать
14. Деревья
шпят
едят e
бегают
висят e
Норы
шпят e
едят
бегают e
During All
activities:
шуршпанят
Особенные случаи:
GIVEN шпят
WHEN есть кто за 2 метра
THEN становятся
невидимыми
Переходы:
деревья > норы e
деревья < норы e
Прослеживаем покрытие
19. E2E тест одной Фичи
перебежать на дерево
пошпать невидимым
перебежать в нору
побегать
перебежать на
дерево
повисеть
поесть
перебежать в нору
пошпать
Заканчиваем Smoke покрытие
20. E2E тест одной Фичи
перебежать на
дерево
пошпать невидимым
проверить
шуршпание
Используем момент для увеличения покрытия
перебежать в нору
побегать
перебежать на
дерево
повисеть
поесть
перебежать в нору
пошпать
26. ДействияКонтексты Норы Деревья шуршпанят?
побегать !!e !f !f
- быстро
- медленно
повисеть - !!e !f
- низко
- высоко
поесть !!f !!e !f
- много
- мало
пошпать !!e !!f !f
Нет проверкам “всех возможных вариаций”
27. ДействияКонтексты Норы Деревья шуршпанят?
побегать !!e !f !f
- быстро
- медленно
повисеть - !!e !f
- низко
- высоко
поесть !!f !!e !f
- много
- мало
пошпать !!e !!f !f
Должны быть покрыты на уровне юнит тестов
разные вариации
одной “функции”
(дающие тот же
“user flow” )
28. Мы здесь =>
=> Только:
функциональны
е
юз-кейсы
высокого
приоритета
разные вариации
одной “функции”
Здесь =>
34. Действия
бегать, висеть,
есть, шпать
создать, редактировать, удалить,
переключить (активная/завершенная),
переключить все
Контексты
норы, деревья
фильтры:
все, активные, завершенные
37. Сценарий (End to End)
перебежать в нору
побегать
перебежать на дерево
повисеть
поесть
перебежать в нору
пошпать
38. Сценарий (End to End)
given at todomvc
add "a"
toggle "a"
filter active
filter completed
edit "a" to "a edited"
toggle "a edited"
…
39. Добавляем ожидаемые результаты
given at todomvc
add "a"
toggle "a"
filter active
assert no tasks
filter completed
edit "a" to "a edited"
toggle "a edited"
assert no tasks
…
40. given at todomvc
add "a"
toggle "a"
filter active
assert no tasks
filter completed
edit "a" to "a edited"
toggle "a edited"
assert no tasks
…
Часто можем оставить “неявные” проверки
42. Начнем же кодить ;)
given at todomvc
add "a"
toggle "a"
filter active
assert no tasks
filter completed
edit "a" to "a edited"
toggle "a edited"
assert no tasks
…
43. Помогаем компьютеру понять код (на Java)
givenAtTodoMVC();
add("a");
toggle("a");
filterActive();
assertNoTasks();
filterCompleted();
edit("a", "a edited");
toggle("a edited");
assertNoTasks();
//…
44. public class TodoMVCTest {
@Test
public void testTasksLifeCycle(){
givenAtTodoMVC();
add("a");
toggle("a");
filterActive();
assertNoTasks();
filterCompleted();
edit("a", "a edited");
toggle("a edited");
assertNoTasks();
//...
}
}
45. public class TodoMVCTest {
@Test
public void testTasksLifeCycle(){
givenAtTodoMVC();
add("a");
toggle("a");
filterActive();
assertNoTasks();
filterCompleted();
edit("a", "a edited");
toggle("a edited");
assertNoTasks();
//...
}
}
?
46. public static void givenAtTodoMVC(){
open("https://todomvc4tasj.herokuapp.com/");
newTask.shouldBe(enabled);
}
givenAtTodoMVC();
71. End to End Юнит/1-фича-на-тест
Стиль тестов
перебежать на дерево
пошпать невидимым
перебежать в нору
побегать
перебежать на дерево
повисеть
поесть
перебежать в нору
пошпать
73. End to End
Плюсы
+ больше покрытия
за меньшее время
с меньшими усилиями во
время реализации POC для
фреймворка
+ интеграционное покрытие
+ в случае багов, дают
более полный
репорт
+ с репортах проще
идентифицировать
проблему
=>
+ меньше времени и
усилий на саппорт
“Фиче-тесты”
74. End to End
Когда использовать?
+ в начале, во время разработки
POC для фреймворка
+ в спешке, для покрытия как
можно большего количества
фич
+ для “черновиков”
+ для интеграционного
покрытия
+ для новых фич
+ на регулярной
основе, когда POC
утвержден
“Фиче-тесты”
78. Как начать?
Выбрать язык
Выучить язык (книги, интерактивные туториалы, koans,
exercism.io, google.com, другое)
Выбрать “простые инструменты”
Найти ментора (друг, программист на проекте, it-чаты, форумы,
другое…)
Вперед!
79. Как выбрать язык?
Есть проект?
=> язык на котором пишут разработчики (бекенд)
Нет проекта но нужно побыстрее найти работу?
=> самый популярный язык на рынке
Нет проекта, не важна скорость нахождения работы,
важно удовольствие от процесса программирования?
=> язык который подходит вам по стилю
80. Нет простого инструмента для нужного
языка?
Недостаточно опыта?
=> попросить программистов помочь
Есть опыт/время?
=> реализовать самому