Почему вы должны использовать его Test Driven Development (TDD)

Это сообщение — выдержка из моей новой рассылки The Pragmatic Dev, посвященной инструментам для разработчиков, советам, хитростям и сопутствующим ресурсам. Пожалуйста, подпишитесь.

Прежде всего, я хочу извиниться перед своими подписчиками за то, что до сих пор не опубликовал выпуск. Я планировал сделать это в начале месяца, но моя жизнь была выведена из равновесия увольнением, и потребовалось некоторое время, чтобы переориентировать свою жизнь в условиях поиска работы. Тем не менее, я намерен публиковать эту рассылку еженедельно, предпочтительно по вторникам. Итак, без лишних слов, давайте перейдем к этому выпуску.

Этот выпуск был вдохновлен ответом на твит, который я опубликовал на этой неделе:

Майна Уайклифф
@mwycliffe_dev
Для вас это Test Driven Development или Test During Development?

#100DaysOfCode #webdev #программирование

13:51 PM — 20 Jul 2022

И ответ, который я получил от Доминика Фрея и с которым я полностью согласен, вдохновил меня на этот пост.

Доминик Фрей
@dominicfrei
@mwycliffe_dev Test Driven всегда, когда это возможно. Каждый раз, когда я этого не делаю, я злюсь на себя, потому что мне нужно больше времени, я пишу худший код и в итоге могу не покрыть тестами все важные функции.
13:54 PM — 20 Jul 2022

Итак, почему TDD?

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

  • Клиенты платят мне за написание кода, а не тестов.
  • У меня нет времени на написание тестов и так далее.

Но это предполагает две вещи: вы и ваш клиент можете позволить себе регрессии в своем проекте. Мы все были там, делали небольшое изменение, и все переставало работать. А во-вторых, у вас будет достаточно времени, чтобы отследить влияние ваших изменений или исправить любые ошибки и регрессии. Мы все слышали мантру «не нажимайте на кнопку в пятницу», поскольку вы можете не понять, что изменение что-то сломало, пока не станет слишком поздно.

Хорошие тесты помогают облегчить некоторые из вышеупомянутых проблем; они могут предотвратить попадание регрессии в продакшн и выведение всего из строя. Они также облегчают рефакторинг кода.

Хорошие тесты должны проверять ожидаемое поведение, а не внутреннюю работу кода, что означает, что вы можете переписать свой код, а тесты все равно пройдут. Это означает, что вы можете вносить изменения в свой код с большей уверенностью.

Еще одним преимуществом тестов является то, что они сами по себе выступают в качестве документации, но при тестировании различных случаев может использоваться определенный фрагмент кода; это может помочь другим людям, которые придут после вас, понять ваш замысел и как использовать его самостоятельно.

Надеюсь, я хорошо обосновал, почему вы всегда должны писать тесты. Следующий вопрос — почему вы должны писать их до, а не после кода. Многие из нас не любят писать тесты, потому что считают их написание рутинной работой; однако если перестроить свой рабочий процесс так, чтобы писать их заранее, они станут важным активом.

Приходилось ли вам когда-нибудь писать тесты для функции, только чтобы понять, что вы не знаете, что тестировать или как тестировать вашу функцию? Вы бросились писать код, что мы все делали, и забыли подумать о контракте для вашего кода, т.е. о ваших входах и выходах. Еще одна вещь, которая часто случается, когда вы бросаетесь писать код, не подумав, заключается в том, что в большинстве случаев вы впоследствии переписываете большую часть кода, чтобы его было легче тестировать.

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

Понравилась ли вам эта статья? Подпишитесь бесплатно, чтобы получать новые сообщения и поддерживать мою работу.

Итак, подведем итог: написав тесты заранее, вы получаете следующие преимущества:

  • Вы быстрее пишете код; вы уже четко сформулировали свое намерение, и теперь дело за реализацией.
  • Вы получаете более быстрый цикл обратной связи; имея на руках тесты, вы можете знать, когда ваша функция движется в правильном направлении. Это, безусловно, лучше ручного тестирования. С помощью таких инструментов, как watch mode в jest и других тестовых бегунов на разных языках, вы можете автоматизировать выполнение тестов при изменении, а не запускать их вручную.
  • У вас есть тесты — тесты, которые вы написали раньше, никуда не денутся, поэтому вы сможете использовать их в будущем при рефакторинге и внесении изменений, а также для автоматических проверок перед развертыванием в среде CI. Это позволит вам повысить качество кода в целом по сравнению с отсутствием тестов.
  • Это не рутина — тесты становятся неотъемлемой частью рабочего процесса разработки, и вместо того, чтобы казаться рутиной, они начинают ощущаться как актив, который делает вас более продуктивным.

Оцените статью
devanswers.ru
Добавить комментарий