in Русский

Подготовка

Разработчику стоит приготовиться для использования TDD. В первую очередь подготовить рабочее окружение и среду разработки.
Приведу свой пример подготовки.

Настрой IDE

Чем медленнее выполняются тесты, тем меньше желание запускать тесты. Допустим, имеется набор тестов, выполняющихся менее двух секунд. Что ещё может уменьшить желание запускать тесты? Способ запуска.
Среднее количество слов в минуту для разработчика равно 70, обозначим длину слова в 5 символов, получаем:
70*5/60/1000 = 0.0058 char/ms. 1 символ в 200 мс. Я использую CTRL+’ для запуска тестов и трачу на это 400 мс.
В среднем требуется 2-3 секунды чтобы запустить тесты в IDE с помощью мышки. Навести курсор, сделать пару кликов и так далее.
Запуская тесты 30 раз в рабочий день:
Горячая клавиша – 400*30=12000 ms=12 s
Мышь – 3000*30=90000 ms=90 s
Используй горячую клавишу для запуска тестов.
Запуск тестов должен быть комфортным, доведённым до автоматизма, действием.
В JetBrains Rider в настройках назначаются хоткеи для запуска тестов в текущей области видимости и запуска текущей сессии.
JetBrains Rider key assignment image
Run Unit Tests стартует тесты в текущей области видимости. Область видимости зависит от позиции курсора, если курсор внутри тест метода, запустится только этот метод. Если курсор в тест классе, но вне тест метода, запустятся тесты текущего класса.
Run Current session стартует тесты из текущей тест сессии. Тесты солюшена включатся в текущую сессией по умолчанию. Rider разрешает создавать сессии. Полезная практика разделять на отдельные сессии изолированные тесты бизнес логики и интеграционные тесты, проверяющие доступность баз данных или сторонних сервисов.

В VSCode нажмите CTRL+SHIFT+P и выберите Preferences: Open Keyboard Shortcuts File.
VSCode open keyboard shortcuts file
В keybindings.json находится JSON массив с хоткеями. Добавьте:

При нажатии CTRL+’ запустится таск с именем test. Также нужно добавить таск с таким именем в проект.
Ниже пример для .NET Core проекта.
Установите .NET Core и убедитесь что dotnet команды работают в консоли.
Сделайте директорию и перейдите в неё. Выполните:

Жмём CTRL+’ и наблюдаем как открывается терминал, запускается и проходит один тест из файла UnitTest1.cs.
tasks.json выглядит так:

Используй блокнот

Разработчик забывает часть кейсов в процессе разработки фич. Краткосрочная память человека удерживает не более четырёх цепочек информации. Б. Оакли, Думай как математик. Разгрузите память в надёжное место с помощью блокнота.
Думай наперёд и записывай кейсы в блокнот.
При работе над фичей фиксируем функциональности в блокнот, 5-10 минут. Выбираем понятную функциональность и работаем над тест кейсами, и записываем в блокнот. Когда идеи закончились выбираем простейший кейс – ядро. Ядро определяет остальные тест кейсы для функциональности. Декомпозируем тест кейсы на функциональности если обнаруживаем более одного ядра.
Пишем тест для ядра, пишем достаточно продакшн кода для прохождения теста, рефакторим, вычёркиваем ядро из блокнота. Повторяем для следующего кейса. Блокнот показывает что сделано и что нужно ещё сделать для завершения работы над фичей.
Записи в блокноте помогают разработчику быстрее вернуть контекст задачи. Можно со спокойной совестью пойти на обед, прогуляться или размяться. Подробнее в Task Interruptions in Requirements Engineering.
Также блокнот помогает справиться с внешними раздражителями – вопрос коллеги, телефонный звонок, email по работе, сообщение в чате и прочее. Избегайте раздражителей. Восстановление контекста задачи небесплатно. Исследования немецких психологов подтверждают что при борьбе с раздражителями повышается уровень стресса, возникает ощущения временного давления и ухудшается настроение.
Избегайте раздражителей.

Итого

  • Используем горячую клавишу для запуска тестов
  • Думаем наперёд, используем блокнот

На следующей неделе приведу примеры разработки по TDD, увидимся.

Ещё

J. B. Rainsberger Reintroduction to TDD

Write a Comment

Comment