Как долго мы обычно проводим написание юнит-тестов для новой функции или исправления ошибок?

9

Когда мне приходится реализовывать новую функцию или исправлять ошибку, я обычно пытаюсь воссоздать ситуацию с помощью теста. Я иногда провожу около 3 часов, придумывая приспособления и записывая тест. Реальная реализация функции или исправление ошибки занимает менее 1 часа.

Кто-нибудь еще тратит как минимум в 3 раза больше времени на написание теста по сравнению с реальной реализацией функции или исправлением ошибки? Каково приемлемое соотношение времени, потраченного на написание теста на написание кода?

Тьерри Лам
источник
2
Подумайте об этом следующим образом: исправление ошибки заняло бы меньше часа, если у вас не было теста, чтобы подтвердить, что он существует, гораздо меньше было исправлено?
Майкл К
2
Ответ на заголовок вопроса: Столько, сколько нужно.
Марсело
3
Я считаю, что рабское подчинение принципам TDD независимо от стоимости или стоимости бизнеса всегда является правильным ответом.
Джереми
Как вы справляетесь со случаем, когда ваш менеджер хочет, чтобы вы исправили его как можно скорее, и не может ждать дополнительного дня, чтобы полностью протестировать реализацию?
Тьерри Лам
2
Обычно я объясняю стоимость не прохождения теста. То есть я могу отправить исправление прямо сейчас, но если мы не напишем тест, нам придется все повторить позже. Иногда они согласны с этой будущей стоимостью, но обычно мы пишем тесты.
Кристофер Биббс

Ответы:

12

Это зависит от сложности ошибки или функции. Я вспоминаю один проект, который когда-то имел оценку времени разработки за 1,5 недели ... и оценку тестирования за 3 месяца. Изменение кода было небольшим, несколько строк тут и там, но это повлияло на ряд компонентов системы страхования разными способами, поэтому пришлось проверять очень тщательно. В другой раз была ошибка, заключающаяся в том, что в неправильном месте была скобка. Потребовалось 2 часа, чтобы найти его, 2 секунды, чтобы его исправить, но около недели, чтобы протестировать десятки сценариев, которые могли быть затронуты изменением логики.

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

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

FrustratedWithFormsDesigner
источник
6

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

Каждая ситуация будет отличаться; не может быть какого-то отношения. Некоторые тесты будут занимать в десятую часть времени реализации, другие - в сотни раз больше времени.

эд-ка морт-ора-й
источник
Это настоящий ответ.
DJClayworth
4

Однажды я сделал сюрприз после введения модульных тестов в проекте. Результат: время, потраченное на написание тестов, снова составило около 40%, столько же, сколько было потрачено на внедрение. Но мы не стремились к полному освещению там, и это был устоявшийся проект с сильной структурой и соглашениями.

Майкл Боргвардт
источник
0

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

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

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

Эдвард Стрендж
источник