Спасение утопающих Покрываем тестами взрослый Ruby on Rails проект
1
Николай Шебанов@killthekitten
Gistflow
2
Зачем нужны тесты?
• Безопасные релизы
4
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг
5
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг• Предсказуемая разработка
6
Почему тестов нет?
• «Есть задачи поважнее»
9
Почему тестов нет?
• «Есть задачи поважнее»
• Мешают на стадии прототипа
10
Рост приложения
0
12,5
25
37,5
50
0 1 2 3 4 5
Новые фичи
Релизы
Разработка с тестамиРазработка без тестов
11
Почему тестов нет?
• «Есть задачи поважнее»
• Мешают на стадии прототипа• Команда не имеет опыта тестирования
12
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг• Предсказуемая разработка
13
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг• Предсказуемая разработка
14
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг• Предсказуемая разработка
15
Зачем нужны тесты?
• Безопасные релизы• Безопасный рефакторинг• Предсказуемая разработка
16
Нужно писать тесты
21
Работа над ошибками
22
Работа над ошибками
• Программист может ошибаться
23
Работа над ошибками
• Программист может ошибаться• Тесты - часть задачи
24
Работа над ошибками
• Программист может ошибаться• Тесты - часть задачи
• Долго пишет тот, кто не умеет
25
Работа над ошибками
• Программист может ошибаться• Тесты - часть задачи
• Долго пишет тот, кто не умеет• «Потомдопишу» Driven Development
26
Работа над ошибками
• Программист может ошибаться• Тесты - часть задачи
• Долго пишет тот, кто не умеет• «Потомдопишу» Driven Development
• Нужно менять воркфлоу
27
Фигакс, фигакс и в продакшн
Requirement
Research & Development
Production
28
Делаем по науке
Requirement
Research & Red-Green Cycle
Code Review & CI Server
Production
29
Делаем по науке
Requirement
Research & Red-Green Cycle
Code Review & CI Server
Production
30
Делаем по науке
Requirement
Research & Red-Green Cycle
Code Review & CI Server
Production
31
Средняя температура по больнице
32
0
20
40
60
80
Junior Senior Senior Teamlead
Уровень
, lvl
Программисты
Средняя температура по больнице
33
0
20
40
60
80
Junior Senior Senior Teamlead
Уровень
, lvl
Программисты
Средняя температура по больнице
34
Средняя температура по больнице
35
Серебряной пули нетПокрываем тестами баги, новый код, рефакторинг
36
Что тестировать
•Request Specs
37
Что тестировать
•Request Specs• Model Specs
• Controller Specs
• Helper Specs
38
Приоритеты
• Читаемые• Edge-кейсы
• Быстрые
39
Что нужно уметь
• Mock + Stub
• let/set, синтаксический сахар RSpec
• FactoryGirl
40
Инструментарий• factory_girl_rails
• rspec-rails
• capybara & capybara-webkit
• rr
• simplecov
• shoulda
• webmock
• guard
• zeus/spin/spring
• guard-rspec
• terminal-notifier-guard
41
Fast Sync
• codeschool.com/courses/rails-testing-for-zombies
• codeschool.com/courses/testing-with-rspec
• betterspecs.org (issues/20)
• betterspecs.org/#resources
44
Займемся списыванием
• github.com/rails/rails
• github.com/gitlabhq/gitlabhq
• github.com/infews/keydown
• github.com/spree/spree
• github.com/errbit/errbit
• Любой большой опенсорc
45
ToDo List
• Осознаем проблему
• Меняем базовый воркфлоу
• Посвящаем спринт тестам
• Синхронизируем знания
• Ни коммита без тестов
46
Николай Шебанов@killthekitten
Gistflow
Спасибо!
Вопросы?
47