Все потоки
Поиск
Написать публикацию
Обновить
2.31

TDD *

Разработка через тестирование

Сначала показывать
Порог рейтинга

Здесь просто мысли… даже, скорее, гипотеза, которая давно жила во мне, и в связи со статьёй Типы и тесты нашла, наконец, какой-то выход. Это не первый раз, когда я сталкиваюсь со спором между (условно) "типизаторами" и "тестировщиками", в одном или двух даже участвовал.

И у меня возникла ощущение, что для "типизаторов" центральное место в разработке занимает проблема правильности. Программа, которая "работает правильно" только в некоторых случаях, судя по всему, для них похожа на стоящие часы — да, они пару раз в сутки показывают правильное время, но на самом деле они же не работают!

Отсюда логично выплывает идея разработки как сборки системы из уже доказанно-правильных кусков. Если их ещё и собрать правильно, то и вся программа будет правильной. Такими "кусками" являются типы.

Данная трактовка, возможно, является ошибочной — знатоки Type-Driven Development меня поправят.

Вероятно, именно из этих предпосылок вытекает восприятие TDD как как тестирования — попытку обосновать правильность программы. И, разумеется, с их точки зрения TDD выглядит странной и очевидно бессмысленной идеей: доказывать правильность в общем случае, перебирая частные случаи, глупо — сил и времени потратишь много, а результат для бесконечных или очень больших множеств входных значений будет ничтожным.

Но на самом деле суть Test-Driven Development к тестированию имеет очень мало отношения. TDD следует воспринимать как воплощение стратегии "разделяй и властвуй": давайте сначала напишем программу, которая будет правильно вести себя всего в одном случае; потом добавим ещё один и попробуем обобщить реализацию; если результат не удовлетворяет, добавляем ещё один и снова обобщаем… — до тех пор, пока мы не будем вполне уверены в том, что написали практически правильную программу.

Да, здесь ставится немного другая цель — не написать такую программу, которая всегда работает правильно, а такую, которая лишь на практике работает правильно.

Очевидно (для меня), что Test-Driven Development — это построение программной системы по индукции.

Можно ли тогда утверждать, что Type-Driven Development — это построение программной системы по дедукции?

Теги:
+2
Комментарии2

Всем привет!

Как приучить себя писать модульные, они же unit тесты?

  1. начинать лучше на новом проекте. Основная проблема с тестами в том, что часто писать тесты сложно - приходится создавать много моков, возможно рефакторить код. На новом проекте проще изначально начать писать тестируемый код. Особенно хорошо изначально тестируемый код получается писать используя TDD. А потом, когда втянешься - можно дописать тесты и для legacy)

  2. изначально определить, что обязательно должно быть покрыто тестами, остальное исключить из контроля покрытия. Если конечно у вас подключен контроль покрытия) Ничто так не демотивирует, как написание ненужных тестов на тривиальный код

  3. заставить себя написать первые скажем 100 тестов. Или 200. После того, как ключевые классы с бизнес-логикой будут покрыты тестами, появляется уверенность при рефакторинге кода. Правишь что-то, запускаешь тесты, убеждаешься, что ничего не сломал. Возвращаешься к коду спустя полгода, что-то правишь и снова все ок. Это одно из самых крутых свойств нормального покрытия кода тестами. Но для начала этого уровня покрытия нужно достичь, т.е. первое время видимого эффекта от тестов не будет.

  4. переписать медленные тесты, разделить быстрые и медленные. Как правило это разделение совпадет с модульные-интеграционные. Модульные запускать как можно чаще. Причина - ожидание 5 минут ну когда же закончатся тесты - бесит

  5. самый смешной пункт - включить в IDEA отображение успешно пройденных тестов. Сотня зеленых галочек... успокаивает что ли))))

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Запуск тестов параллельно с мокнутыми импортами, но..

  • Медленное исполнение каждого теста

  • Врут про Zero Config

  • Развесистый сложный API

  • Заточка под модульные тесты вместо компонентных

  • Красивые отчёты не помогают в отладке

Поблагодарить: https://boosty.to/hyoo

Теги:
Всего голосов 6: ↑3 и ↓30
Комментарии0