Настоящие причины для разработки через тестирование 💎

Почему люди применяют TDD? Вот секрет: это не для тестов. Узнайте о реальных целях и ценностях, скрытых под поверхностью разработки через тестирование.

Каковы реальные причины использования TDD? 🧼

Разработка через тестирование (TDD) — спорная тема среди разработчиков. После многих лет ежедневной работы с TDD я думаю, что отчасти причина в том, что некоторые люди не полностью понимают причины, лежащие в основе TDD.

Давайте сначала разберемся с самым большим заблуждением: TDD — это не про тестирование. Это средство для развития.

Цель, согласно Разработке через тестирование: на примере, проста, но мощна:

Чистый код, который работает

Мне нравится это краткое объяснение, и если есть что-то, что вы вынесете из этого поста, то это должно быть так. Однако конкретные причины использования TDD лучше всего выражены в терминах ценностей экстремального программирования. Это:

  • Обратная связь
  • Простота
  • Храбрость
  • Коммуникация
  • Уважать

TDD и ценности XP 🧗

TDD предлагает много преимуществ, но я предпочитаю другую перспективу, которая копает немного глубже. На мой взгляд, Экстремальное программирование (XP) лучше всего описывает причины для использования TDD.

Кент Бек определил пять ценностей в Объяснении экстремального программирования (книга, которую я настоятельно рекомендую), которые составляют основу всего, что она влечет за собой. Как вы увидите, TDD также построен на этом фундаменте.

Но сначала несколько слов о том, почему все это вообще имеет значение.

Почему ценности имеют значение в первую очередь? 🏃

Участвуешь ли ты в каких-либо видах спорта? Если да, то вы, вероятно, делаете растяжку до и после ваших усилий.

А зачем ты растягиваешься? Вероятно, потому что вы знаете о его эффекте предотвращения травм и увеличения гибкости. Без этих знаний растяжка кажется пустой тратой времени и усилий.

Именно основные ценности практики придают ей значение.

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

Улучшение обратной связи с помощью TDD 🧭

Во-первых, TDD — один из лучших способов получения обратной связи. Отзыв о чем? По каждому из этих атрибутов:

  • Правильность. Проще говоря, делает ли код то, что вы хотите? Принципиальное отличие test-after заключается в том, что с TDD вы получаете это, пока еще программируете проблему. Не нужно использовать операторы печати или играть в компилятор в голове, чтобы понять, что делает код.
  • Качество. TDD заставит вас писать тестируемый код, то есть слабо связанный и высоко связанный, что означает, что ваш код имеет более высокое качество. Если тестирование становится трудным, это контрольный признак того, что ваш дизайн нуждается в улучшении. Таким образом, TDD — это эффективный способ получить отзыв о внутреннем качестве вашего кода.
  • Прогресс. Поскольку вы начинаете определять поведение как неудачный тест, вы точно знаете, когда закончите: как только тест станет зеленым. Сочетание этого с Приемочной разработкой на основе тестирования или Разработкой на основе поведения усиливает обратную связь на уровне функций.

По сути, TDD использует тесты для получения обратной связи. Как компас, он постоянно показывает, в правильном ли направлении вы движетесь.

Достижение простоты с помощью TDD ❤️

Во-вторых, разработка через тестирование — отличный способ написать более простой код. В программировании трудно достичь простоты, но не менее важно стремиться к ней. Это помогает управлять сложностью. Определение простоты, которое мне больше всего нравится, взято из agile-манифеста:

Простота – искусство максимизировать объем незавершенной работы – очень важна.

Но как TDD достигает этой волшебной вещи?

Во-первых, это заставляет вас недвусмысленно выражать нужное вам поведение. В итоге вы должны написать именно тот код, который вам нужен, следуя принципу Вам это не понадобится. Опытный специалист по TDD стремится как можно быстрее перейти от красного к зеленому, и простота — верный способ сделать это.

Кроме того, последним шагом в цикле tdd является рефакторинг. Этот непрерывный цикл рефакторинга приводит к более читабельному и простому коду.

Станьте смелым, применяя TDD 🦁

В-третьих, TDD дает вам здоровую дозу смелости. Смелость кажется странной ценностью для TDD, но это ценность, которая привлекает наибольшее внимание в Разработке через тестирование: на примере. В книге Кент описывает смелость как управление страхом и объясняет, как TDD является эффективным средством для этого.

Что означает страх?

Вам когда-нибудь приходилось менять какой-то непонятный код? Как насчет того, чтобы в коде отсутствовали (хорошие) тесты? Чувство, которое вы испытывали, вероятно, было страхом. Вы боялись, что можете взломать код. TDD должен привести к кодовой базе, в которой вам больше никогда не придется испытывать этот тип страха, потому что вы можете положиться на надежный набор тестов. Это дает вам уверенность одним нажатием кнопки и смелость по требованию.

ТДД помогает справиться со страхом, когда вы не знаете, что делать дальше. Иногда вы не знаете, как решить проблему, и страх поднимет свою уродливую голову. Страх усложняет решение проблем. TDD позволяет вам переключить передачу и решить проблему одним крошечным шагом за раз. Эти детские шаги позволят вам преодолеть страх и начать двигаться вперед.

Влияние TDD на общение 🗣️

Коммуникация — четвертое неоспоримое преимущество TDD. Результатом TDD является солидный набор тестов. При правильном выполнении хорошо написанные тесты сообщают читателям о поведении системы.

Тесты эффективно документируют назначение кода и являются моим любимым местом для понимания незнакомого кода. Представьте, что было бы, если бы вся ваша кодовая база содержала тесты, объясняющие, что код делает в определенных условиях. Разве это не здорово?

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

Выполнение TDD показывает уважение 🙇

Наконец, применение TDD — это знак уважения. Используя его, вы проявляете уважение к своим:

Почему? Вспомните цель TDD: чистый работающий код.

Для членов вашей команды это означает удобный, хорошо документированный код, с которым приятно работать. Вы уважаете своих заинтересованных лиц, поскольку пишете ровно столько кода, сколько нужно для достижения результата, в котором они заинтересованы. Это также позволяет вам поддерживать устойчивый темп предоставления функций, контролируя технический долг. Наконец, ваши пользователи получат стабильный, хорошо продуманный продукт с меньшим количеством дефектов.

«Но я получаю эти эффекты и с Test-After» ☝️

Критики могут посмотреть на эти эффекты и сказать, что они получают их и при регулярном тестировании постфактум. Я говорю этим людям: вы правы… и не правы!

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

С помощью test-after вы кодируете решение, затем тестируете, и только после этого начинаете генерировать обратную связь. TDD, напротив, позволяет вам получить преимущества, начиная с первой строки производственного кода, и продолжать использовать их на каждом этапе пути.

Тем не менее, эта тема заслуживает отдельного поста, так что следите за новостями!

Резюме 📝

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

TDD следует всеобъемлющим ценностям XP. При правильном применении вы можете ожидать, что это улучшит коммуникацию, упростит ваш код, усилит обратную связь, уменьшит страх, и проявляйте уважение ко всем вовлеченным сторонам. Разве это не звучит потрясающе?

Вы используете TDD? Какие эффекты TDD удивили вас? Поделитесь своими мыслями в разделе комментариев.

Дальнейшее чтение 📚

Первоначально опубликовано на https://www.codecraftr.nl 13 сентября 2022 г.