В своем текущем проекте (игра на C ++) я решил, что я буду использовать Test Driven Development на 100% во время разработки.
С точки зрения качества кода это было здорово. Мой код никогда не был так хорошо спроектирован или так без ошибок. Я не смущаюсь при просмотре кода, который я написал год назад в начале проекта, и у меня появилось гораздо лучшее понимание того, как структурировать вещи, чтобы не только быть более легко тестируемыми, но и быть проще в реализации и использовании ,
Однако ... прошел год с тех пор, как я начал проект. Конечно, я могу работать над этим только в свободное время, но TDD все еще значительно замедляет меня по сравнению с тем, к чему я привык. Я читал, что медленная скорость разработки со временем становится лучше, и я определенно думаю, что тесты гораздо проще, чем раньше, но я занимался этим уже год, и все еще работаю в темпе улитки.
Каждый раз, когда я думаю о следующем шаге, который требует работы, мне приходится каждый раз останавливаться и думать о том, как написать для него тест, чтобы позволить мне написать реальный код. Иногда я застреваю на несколько часов, точно зная, какой код я хочу написать, но не зная, как разбить его достаточно точно, чтобы полностью покрыть его тестами. В других случаях я быстро придумаю дюжину тестов и потрачу час на написание тестов, чтобы покрыть крошечный кусочек реального кода, который в противном случае занял бы несколько минут.
Или, после завершения 50-го теста, чтобы охватить конкретную сущность в игре и все аспекты ее создания и использования, я смотрю на свой список дел и вижу следующую сущность, подлежащую кодированию, и ужасаюсь от мысли о написании еще 50 аналогичных тестов для его реализации.
Дошло до того, что, глядя на прогресс прошлого года, я рассматриваю возможность отказаться от TDD ради «завершения чертового проекта». Тем не менее, отказ от качества кода, который пришел с ним, не то, чего я с нетерпением жду. Боюсь, что если я перестану писать тесты, я избавлюсь от привычки делать код таким модульным и тестируемым.
Возможно, я делаю что-то не так, чтобы все еще быть таким медленным в этом? Существуют ли альтернативы, которые ускоряют производительность без полной потери преимуществ? TAD? Меньше тестового покрытия? Как другие люди переживают TDD, не убивая всю производительность и мотивацию?