Я был в «3. «Нет никакой пользы» стану, и я до сих пор твердо стою.

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

Давайте пройдемся по преимуществам, которые вы заявили:

  1. Код самотестирования

Является ли это случаем приписывания преимуществ наличия тестов самому TDD? Конечно, наличие тестов перед добавлением новой функции, рефакторингом существующего кода или исправлением ошибок — это здорово. Но как это хотя бы отдаленно связано с тем, как/когда были написаны эти тесты (до или после кода)?

2. Заставляет разработчиков думать, прежде чем писать код

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

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