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

Управление нагрузкой на обслуживание модульных тестов

Сначала кодирование - я обнаружил, что, возможно, 3/4 моего кода - это модульные тесты; если бы я был действительно экстремальным и не писал строку кода, кроме как исправить неудачный unit test, это соотношение было бы еще выше. Поддержание всех этих модульных тестов добавляет огромное количество инерции для изменения кода. В начале, я сосать его и исправить. Как только возникает давление, я заканчиваю каталогом broken_unit_tests, чтобы пересмотреть "когда есть время". Похоже, что TDD слишком быстро распространяется, прежде чем дизайн успеет кристаллизоваться.

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

4b9b3361

Ответ 1

Сохраняя аспект Дисциплины Программиста в стороне... (это личное дело, если вы в порядке с регистрацией, не создавая приятеля или не фиксируя все тесты. Agile предполагает высокую дисциплину.. и Courage & Поддержка оставайтесь на правильном пути под давлением:),

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

Ответ 2

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

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

Также вы можете попробовать работать в короткие циклы. То есть вместо

  • Сделайте много изменений
  • Исправить множество модульных тестов
  • Повторите

Try

  • Планируйте небольшое изменение
  • Измените соответствующие unit test (s)
  • Изменить соответствующий код
  • Повторите

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

Ответ 3

Единичные тесты должны быть довольно неизменными.

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

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

Ответ 4

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

Вообще-то я не сторонник TDD.:)

Ответ 5

Ваш тест, вероятно, недостаточно сфокусирован, или у вас слишком много зависимостей в ваших системах.

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

Не уверен, что он на 100% очищен...