Пока я писал модульные тесты для большей части кода, который я сделал, я только недавно получил копию TDD на примере Кента Бек. Я всегда сожалел о некоторых дизайнерских решениях, которые я принял, поскольку они не позволяли приложению быть "проверяемым". Я прочитал книгу, и, хотя некоторые из них выглядят чужими, я чувствовал, что смогу это сделать, и решил попробовать ее в текущем проекте, который в основном представляет собой клиент-серверную систему, через которую эти две части общаются. USB. Один на гаджете, а другой на хосте. Приложение находится в Python.
Я начал и очень скоро запутался в беспорядке переписывания и крошечных тестов, которые я позже понял, ничего не испытал. Я отбросил большинство из них и теперь получил рабочее приложение, для которого все тесты были свернуты всего лишь 2.
Основываясь на моем опыте, у меня есть несколько вопросов, которые я хотел бы задать. Я получил некоторую информацию от Новый для TDD: есть ли примеры приложений с тестами, чтобы показать, как делать TDD?, но у вас есть некоторые конкретные вопросы, на которые я бы хотел ответить/обсудить на.
- Кент Бек использует список, который он добавляет и удаляет, чтобы руководить процессом разработки. Как вы делаете такой список? Вначале у меня было несколько таких элементов, как "сервер должен запускаться", "сервер должен прервать, если канал недоступен" и т.д., Но они были смешанными, и, наконец, теперь это просто "клиент должен иметь возможность подключиться к серверу" (который запуск подключенного сервера и т.д.).
- Как вы обрабатываете перезаписи? Сначала я выбрал полудуплексную систему на основе именованных каналов, чтобы я мог разработать логику приложения на своей собственной машине, а затем добавить часть связи USB. Они переместились, чтобы стать основанной на сокетах, а затем перешли от использования сырых сокетов к использованию модуля SocketServer Python. Каждый раз, когда что-то менялось, я обнаружил, что мне пришлось переписать значительную часть тестов, которые раздражали. Я подумал, что тесты будут несколько неизменным руководством во время моего развития. Они просто чувствовали, что больше кода обрабатывать.
- Мне нужен клиент и сервер для общения по каналу для тестирования с каждой стороны. Я мог высмеять одну из сторон, чтобы проверить другую, но тогда весь канал не будет проверен, и я волнуюсь, что я пропущу это. Это уменьшило весь красный/зеленый/рефакторический ритм. Это просто недостаток опыта или я делаю что-то неправильно?
- "Подделка, пока вы не сделаете это" оставила мне много грязного кода, который я позже потратил много времени на реорганизацию и очистку. Так ли это работает?
- В конце сеанса теперь у меня есть клиент и сервер, работающий с 3 или 4 модульными тестами. Мне потребовалось около недели, чтобы это сделать. Думаю, я мог бы сделать это за один день, если бы использовал модульные тесты после кода. Я не вижу выигрыша.
Я ищу комментарии и советы от людей, которые полностью или почти полностью реализовали крупные нетривиальные проекты, используя эту методологию. Мне разумно следовать за ним после того, как у меня есть что-то уже запущенное и хочу добавить новую функцию, но делать это с нуля, кажется, утомительно и не стоит усилий.
P.S.: Пожалуйста, дайте мне знать, если это должна быть вики сообщества, и я помечаю ее так.
Обновление 0: все ответы были одинаково полезными. Я выбрал тот, который я сделал, потому что он наиболее резонировал с моими переживаниями.
Обновление 1: Практика Практики Практики!