Подтвердить что ты не робот

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

Я программист-контрактник с большим опытом. Я привык к тому, что меня нанял клиент, чтобы войти и сделать программный проект той или иной формы самостоятельно, как правило, из ничего. Это означает чистый сланц, почти каждый раз. Я могу принести библиотеки, которые я разработал, чтобы быстро начать, но они всегда являются необязательными. (и зависит от получения правильных IP-предложений в контракте) Много раз я могу указать или даже разработать аппаратную платформу... поэтому мы говорим о серьезной свободе здесь.

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

Однако в моей ситуации мне сложно рационализировать что-то большее. Я приму вещи, когда они окажутся полезными, но я не собираюсь слепо следовать чему-либо.

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

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

Чтение таких вопросов, как этот, Самый проголосовавший за ответ, кажется, говорит, что в этом плакате опыт/мнение TDD на самом деле тратит время, если у вас меньше 5 человек (даже при условии определенного уровня компетентности/опыта работы с TDD). Однако это, по-видимому, покрывает начальное время разработки, а не техническое обслуживание. Неясно, как TDD складывается на протяжении всего жизненного цикла проекта.

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

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

Почему единственный разработчик с хорошей репутацией примет TDD?

Мне бы хотелось услышать какие-либо показатели, сделанные (формально или нет) в TDD... с упором на разработчиков соло или очень маленьких команд.

В противном случае, анекдоты вашего личного опыта тоже будут приятными.:)

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

4b9b3361

Ответ 1

Я не собираюсь слепо следовать чему-либо.

Это правильное отношение. Я использую TDD все время, но я не придерживаюсь его так строго, как некоторые.

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

Другая причина, по которой я использую TDD, заключается в том, что при написании тестов мне приходится думать о моем API спереди. Я вынужден думать о том, как я собираюсь использовать класс, прежде чем писать. Поездка в проект на этом высоком уровне работает для меня. Есть и другие способы сделать это, и если вы нашли другие методы (есть много), чтобы сделать то же самое, я бы сказал, продолжайте делать то, что работает для вас.

Ответ 2

Я считаю его еще более полезным при полете соло. Никому не нужно отказываться от идей, и никто не может проводить экспертные обзоры, вам потребуется уверенность в том, что вы код твердый. TDD/BDD предоставит вам эту гарантию. Тем не менее TDD немного противоречиво. Другие могут полностью не согласиться с тем, что я говорю.

EDIT: могу добавить, что если все сделано правильно, вы можете создавать спецификации для своего программного обеспечения одновременно с написанием тестов. Это отличный побочный эффект BDD. Вы можете заставить себя выглядеть супер-разработчиком, если вы прокручиваете твердый код вместе со спецификациями, все по своему усмотрению.

Ответ 3

Хорошо, моя очередь... Я бы сделал TDD даже сам по себе (для кода non-spike/experimental/prototype), потому что

  • Подумайте, прежде чем прыгать: заставляет меня думать, что я хочу сделать, прежде чем я начну прокручивать код. Что я пытаюсь сделать здесь... "Если я предполагаю, что у меня уже была эта штука... как бы я ожидал, что она сработает?" Поощряет интерфейс в дизайне объектов.
  • Легче изменить. Я могу с уверенностью вносить изменения. "Я не нарушал ничего на этапе1-10, когда менял шаг 5". Регрессионное тестирование мгновенно
  • Улучшение дизайна emerge: я нашел лучшие разработки, которые не могут инвестировать в проектную деятельность. test-first + Рефакторинг приводит к слабосвязанным, минимальным классам с минимальными методами. Никакой overengineering.. нет кода YAGNI. Классы имеют более эффективные публичные интерфейсы, небольшие методы и более читабельны. Это что-то вроде дзэн... вы только замечаете, что получили его, когда получите его ".
  • Отладчик больше не мой костыль. Я знаю, что делает моя программа. Не тратя часы на мой собственный код. В настоящее время, если я трачу более 10 минут с отладчиком.. начинают звонить сигналы тревоги.
  • Помогает мне вернуться домой вовремя. Я заметил заметное снижение количества ошибок в моем коде с TDD.. даже если утверждение похоже на трассировку консоли, а не на тип XUnit AT.
  • Производительность/поток: это помогает мне определить следующий дискретный шаг ребенка, который приведет меня к завершению... держит снежный каток. TDD помогает мне быстрее входить в ритм (или то, что XPers вызывает поток). Я получаю больший кусок качественной работы за единицу времени, чем раньше. Цикл красно-зеленого рефактора превращается в... своего рода вечный двигатель.
  • Я могу доказать, что мой код работает одним нажатием кнопки
  • Практика делает совершенным. Я нахожу себя обучением и поиском драконов быстрее.. с большим временем TDD под моим поясом. Может быть, диссонанс.. но я чувствую, что TDD сделал меня лучшим программистом, даже если я не пошел сначала на тест. Споттинг рефакторинга стал второй натурой...

Я обновлю, если буду думать больше... вот что я придумал за последние 2 минуты размышления.

Ответ 5

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

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

Ответ 6

Тесты позволяют реорганизовать с уверенностью, что вы не нарушаете систему. Написание тестов сначала позволяет испытаниям определять, что такое рабочее поведение для системы. Любое поведение, которое не определено тестом, по определению является побочным продуктом и разрешено изменять при рефакторинге. Написание тестов сначала также стимулирует дизайн в хороших направлениях. Чтобы поддерживать тестируемость, вы обнаружите, что вам нужно отделить классы, использовать интерфейсы и следовать хорошему шаблону (например, инверсии управления), чтобы сделать ваш код легко проверяемым. Если после этого вы будете писать тесты, вы не можете быть уверены, что в тестах вы рассмотрели все поведение, ожидаемое вашей системой. Вы также обнаружите, что некоторые вещи трудно проверить из-за дизайна - поскольку он, скорее всего, был разработан без тестирования, - и у него возникает соблазн отказаться от тестов или пропустить их.

Я вообще работаю соло и в основном делаю TDD - случаи, когда я не просто, где я не в состоянии соответствовать моим практикам или еще не нашел хороший способ, который работает для меня, чтобы делать TDD, например с веб-интерфейсами.

Ответ 7

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

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

С логической точки зрения, любой код, который вы пишете, должен быть протестирован, и без TDD вы сами будете его проверять вручную. С другой стороны, к pyftpdlib, худший код по количеству ошибок и частоте основных проблем - это код, который/был исключительно протестирован разработчиками и QA, проверяя новые функции вручную. Вещи не проходят тестирование из-за нехватки времени или падения трещин. Старые коды кода забыты, и даже самые старые стабильные функции в конечном итоге ломаются, основные выпуски заканчиваются тем, что важные функции нефункциональны. и т.д. Ручное тестирование имеет решающее значение для проверки и некоторой рандомизации тестирования, но, основываясь на моем опыте, я бы сказал, что важно иметь как ручное тестирование, так и тщательно сконструированную структуру unit test. Между двумя подходами пробелы в охвате меньше, и вероятность возникновения проблем может быть уменьшена.

Ответ 8

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

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

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

Итак, для меня это зависит не столько от размера команды, сколько от размера приложения. Можете ли вы отслеживать каждую часть приложения? Каждое требование? Каждый тест, который нужно запустить, чтобы убедиться, что приложение работает? Что еще означает сказать, что приложение "работает", если у вас нет тестов для его подтверждения?

Только мои $0,02.

Ответ 9

TDD не собирается тестировать его написание кода. Таким образом, он предоставляет много преимуществ даже одному разработчику. Для многих разработчиков это смелость для написания более надежного кода. Например, как часто вы думаете: "Теперь, как этот код может не работать?" после написания кода без TDD? Для многих разработчиков ответ на этот вопрос отсутствует. Для практиков TDD он переключает мышление на такие вещи, как проверка того, являются ли объекты или строки нулевыми, прежде чем что-то делать с ними, потому что вы пишите тесты, чтобы сделать это (разбить код).

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

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

Ответ 10

Я склонен согласиться с обоснованностью вашей точки зрения о накладных расходах TDD для проектов "один разработчик" или "хобби", не оправдывающих расходы.

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

Например, TDD сохраняет время тестирования /bugfixing в долгосрочной перспективе, а не через 5 минут после того, как вы создали первый unit test.

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

То же самое относится к проектам хобби. Вы можете устать от этого и захотите передать его кому-то. Вы можете стать коммерчески успешным (подумайте Craiglist), и у вас будет еще 5 человек.

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

При выполнении чего-то вы должны подумать о OTHER. Вам нужно подумать, планировать рост, планировать устойчивость.

Если вы не хотите этого делать - придерживайтесь ковбойского кодирования, это намного проще.

P.S. То же самое относится к другим методам:

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

etc ad infinitum

Ответ 11

Я собираюсь ответить на этот вопрос довольно быстро, и, надеюсь, вы начнете видеть некоторые рассуждения, даже если вы все еще не согласны.:)

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

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

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

Ответ 12

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

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

У меня есть довольно большие базы кода, над которыми я работаю, и есть много нетривиальных вещей. Достаточно легко внести изменения, которые пульсируют, и вдруг X произойдет, когда X никогда не произойдет. Мои тесты несколько раз спасали меня от критической (но тонкой) ошибки, которая могла остаться незамеченной человеческими тестировщиками.

Когда тесты терпят неудачу, у них есть возможность взглянуть на них и на производственный код и убедиться, что он правильный. Иногда дизайн меняется, и тесты должны быть изменены. Иногда я пишу что-то, что проходит 99 из 100 тестов. Тот тест, который не прошел, как коллега, просматривает мой код (в некотором смысле), чтобы убедиться, что я все еще строю то, что я должен строить.

Ответ 13

Я больше не реорганизую ничего без разумного набора модульных тестов.

Я не делаю полноразмерный TDD с единичными тестами, а второй - вторым. Я делаю CALTAL - Код A LIttle, Test A Little - разработка. Как правило, код идет первым, но не всегда.

Когда я нахожу, что у меня есть рефакторинг, я убеждаюсь, что у меня достаточно тестов, а затем я полностью убеждаюсь в структуре с полной уверенностью в том, что мне не нужно сохранять всю старую архитектуру - план новой архитектуры в моей голове. Мне просто нужно снова пройти тесты.

Я реорганизую важные биты. Получите существующий набор тестов.

Тогда я понимаю, что кое-что забыл, и я вернулся к разработке CALTAL над новым материалом.

Затем я вижу вещи, которые я забыл удалить, но они действительно не используются повсюду? Удалите их и посмотрите, что не удается в тестировании.

Только вчера - часть пути через большой рефакторинг - я понял, что у меня все еще нет точного правильного дизайна. Но тесты все равно должны были пройти, поэтому я был вправе реорганизовать мой рефакторинг, прежде чем я был сделан с первым рефакторингом. (whew!) И все это хорошо работало, потому что у меня был набор тестов для проверки изменений.

Для летного соло TDD является моим вторым пилотом.

Ответ 14

Я чувствую, что в качестве сольного разработчика по проекту, особенно более крупного, вы, как правило, довольно тонкие. Вы находитесь в середине большого рефакторинга, когда внезапно обнаруживается пара критических ошибок, которые по какой-то причине не отображались во время предварительного тестирования. В этом случае вам нужно все бросить и исправить, и, проведя две недели, разрывая волосы, вы, наконец, можете вернуться к тому, что вы делали раньше. Через неделю один из ваших крупнейших клиентов осознает, что у них абсолютно должна быть эта прекрасная новая блестящая функция, иначе они не будут размещать заказ на те единицы 1M, которые они уже должны были заказать месяц назад.
Теперь, через три месяца, вы даже не помните, почему вы начали рефакторинг в первую очередь, не говоря уже о том, что должен был делать код, который вы рефакторинг. Слава богу, вы хорошо поработали над этими модульными тестами, потому что, по крайней мере, они говорят вам, что ваш реорганизованный код все еще выполняет то, что он должен был делать.
Намочите, промойте, повторите.

.. история моей жизни за последние 6 месяцев.: -/

Ответ 15

Единственный разработчик должен использовать TDD в своем проекте (послужной список не имеет значения), поскольку в конечном итоге этот проект может быть передан другому разработчику. Или может быть добавлено больше разработчиков.

У новых людей очень сложно работать с кодом без тестов. Они сломают вещи.

Ответ 16

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

Ответ 17

Я думаю, что TDD как методология - это не просто "наличие тестов при внесении изменений", поэтому это не зависит от команды или от размера проекта. Это о том, чтобы отметить одно из ожиданий о том, что делает код кода/приложения до того, как кто-то начинает действительно думать о том, как осуществляется указанное поведение. Основное внимание TDD заключается не только в том, что у вас есть тест на письменный код, но и написание кода меньше, потому что вы просто выполняете то, что делает тест зеленым (и рефакторингом позже).

Если вы похожи на меня и очень трудно подумать о том, что делает часть/все приложение БЕЗ, думая о том, как его реализовать, я думаю, что это прекрасно, чтобы написать свой тест после вашего кода и, таким образом, диск "тесты.

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

Ответ 18

Вот несколько мемов и моих ответов:

"TDD заставило меня задуматься о том, как это провалится, что сделало меня лучшим программистом"

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

"Приложения должны работать правильно"

Это предполагает, что вы можете протестировать абсолютно все. Вы не будете лучше разбираться во всех возможных тестах правильно, чем правильно писать функциональный код. "Приложения должны работать лучше" - гораздо лучший аргумент. Я согласен с этим, но он идеалистичен и не достаточно осязателен, чтобы мотивировать столько, сколько пожелаю. Метрики/анекдоты были бы замечательными.

"Отлично работает для моего библиотечного компонента X > "

Я сказал в вопросе, что видел значение в этих случаях, но спасибо за анекдот.

"Подумайте о следующем разработчике"

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

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

"Рефакторинг намного проще"

Рефакторинг - это навык, как любой другой, и итеративное развитие, безусловно, требует этого навыка. Я, как правило, выбрасываю значительные количества кода, если я думаю, что новый дизайн сэкономит время в долгосрочной перспективе, и кажется, что также будет ужасное количество тестов. Что более эффективно? Я не знаю.

...

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

Ответ 19

TDD позволяет мне более четко определить проблему в моей голове. Это помогает мне сосредоточиться на реализации только тех функций, которые требуются, и не более того. Это также помогает мне создать лучший API, потому что я пишу "клиент", прежде чем писать сам код. Я также могу реорганизовать, не беспокоясь о том, чтобы что-то сломать.

Ответ 20

Мотивированный самостоятельный интерес.

В моем случае единственный разработчик переводится как владелец малого бизнеса. Я написал разумное количество библиотечного кода, чтобы (якобы) облегчить мою жизнь. Многие из этих подпрограмм и классов не являются наукой о ракетах, поэтому я могу быть уверен, что они работают должным образом (по крайней мере, в большинстве случаев), просмотрев код, некоторые из них проводят выборочное тестирование и отлаживают методы, чтобы убедиться, что они ведут себя так Думаю, что да. Грубая сила, если хотите. Жизнь хороша.

С течением времени эта библиотека растет и используется в большинстве проектов для разных клиентов. Тестирование становится более трудоемким. Особенно случаи, когда я (надеюсь) исправляю ошибки и (еще более надеемся) не ломаю что-то еще. И это не только ошибки в моем коде. Я должен быть осторожным, добавляя функциональность (клиенты продолжают запрашивать больше "вещей" ) или убедитесь, что код по-прежнему работает при перемещении в новую версию моего компилятора (Delphi!), Сторонний код, среду выполнения или операционную систему.

В крайнем случае я мог потратить больше времени на просмотр старого кода, чем на новые (прочитанные: оплачиваемые) проекты. Подумайте об этом как о углу покоя программного обеспечения (насколько высоко вы можете сложить непроверенное программное обеспечение, прежде чем оно упадет:).

Методы, такие как TDD, дают мне методы и классы, которые более тщательно продуманны, более тщательно проверены (прежде чем клиент их получит) и нуждаются в меньшем количестве обслуживания в будущем.

В конечном счете, это означает меньшее время на техническое обслуживание и больше времени на то, чтобы потратить на то, что выгоднее, интереснее (почти что угодно) и более важно (например, семья).

Ответ 21

Мы все разработчики с хорошим послужным списком. В конце концов, мы все читаем Stackoverflow. И многие из нас используют TDD, и, возможно, у этих людей отличный послужной список. Меня нанимают, потому что люди хотят, чтобы кто-то написал отличную автоматизацию тестирования и научил этому других. Работая в одиночку, я делаю TDD над своими проектами по кодированию дома, потому что я обнаружил, что если я этого не сделаю, я потратил время на ручное тестирование или даже отладку, и кому это нужно. (Возможно, у этих людей только хорошие послужные списки. Я не знаю.)

Когда дело доходит до того, чтобы быть хорошим водителем, все считают, что они "хороший водитель". Это когнитивный уклон, который есть у всех водителей. У программистов есть свои предубеждения. Причины, по которым разработчики, такие как OP, не используют TDD, описаны в этой серии подкастов Agile мыслей. В архиве подкастов также есть содержание концепций автоматизации тестирования, таких как пирамида тестов, и введение о том, что такое TDD и зачем писать тесты, начиная с эпизода 9, в архиве подкастов.