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

TDD. Когда вы можете двигаться дальше?

При выполнении TDD, как сказать "достаточно тестов для этого класса/функции"?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

На некотором уровне это ощущение кишки

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Просто не забывайте, что если вы обнаружите ошибку позже, сначала напишите тест, чтобы воспроизвести ошибку, затем исправьте ее, чтобы предотвратить дальнейшее изменение в будущем!

Некоторые люди жалуются, когда у них нет X процентов от охвата.... какой-то тест бесполезен, а 100% охват не означает, что вы проверяете все, что может сделать ваш разрыв кода, только тот факт, что он не сломается как вы его использовали!

Ответ 6

Тест - это способ точно описать то, что вы хотите. Добавление теста расширяет область действия того, что вы хотите, или добавляет детали того, что вы хотите.

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

Ответ 7

Тесты TDD охватывают спецификацию , на самом деле они могут быть заменой для спецификации. В TDD тесты не касаются покрытия кода. Они обеспечивают, чтобы код охватывал спецификацию, потому что код не пройдет тест, если он не охватывает спецификацию. Любой дополнительный код, который у вас есть, не имеет значения.

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

Ответ 8

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

Ответ 9

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

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

С уважением

Ответ 10

Теоретически вы должны охватить все возможные комбинации ввода и проверить правильность вывода, но иногда это просто не стоит.

Ответ 11

Многие другие комментарии поразили гвоздь на голове. Чувствуете ли вы уверенность в коде, который вы написали, с учетом вашего тестового покрытия? Как ваш код развивается, ваши тесты все еще адекватно покрывают его? Выполняют ли ваши тесты предполагаемое поведение и функциональность тестируемого компонента?

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

Я не собираюсь лгать, но я часто ленив, возвращаясь, чтобы написать дополнительные тесты. Я мог бы пропустить это свойство, которое содержит код 0 или конструктор по умолчанию, который мне неинтересен. Иногда не полностью анальный процесс может сэкономить вам время n областей, которые менее критичны (миф 100% -го кода).

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

Удачи и счастливого кодирования.

Ответ 12

Вы всегда можете использовать инструмент для тестирования, например EMMA (http://emma.sourceforge.net/) или его плагин Eclipse EclEmma (http://www.eclemma.org/) или тому подобное. Некоторые разработчики считают, что 100% -ное охват тестирования - достойная цель; другие не согласны.

Ответ 13

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

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

Это не о покрытии кода. Это опасная метрика, потому что код "покрыт" задолго до того, как он "хорошо протестирован".