Оценка реализации проекта с помощью TDD
Существуют ли какие-либо рекомендации при цитировании оценок для проектов / задач, связанных с TDD?
Например, если сравнивать с обычной разработкой задачи, занимающей 1 день, сколько еще должно занять задание, управляемое TDD? На 50% больше времени или на 70% больше времени? Имеется ли какая-либо статистика, если разработчик хорошо разбирается в языке и тестовой среде?
5 ответов
Сначала разница велика, уменьшается с опытом, но, вероятно, всегда является фактором
Разница во времени реализации между традиционным кодированием и TDD будет уменьшаться, поскольку разработчик становится лучше в TDD. Новички в TDD и даже промежуточные пользователи, скорее всего, поймают себя на том, что решат, какие тесты писать, и / или напишут больше тестов, которые в итоге будут выброшены после рефакторинга. С опытом TDD'er станет более эффективным, так как он станет лучше и быстрее при выборе того, какие тесты писать.
Я не уверен, каков абсолютный нижний предел отношения обычного к TDD. Я бы предположил 1:1,5, но я не могу поверить, что большинство разработчиков когда-либо смогут тестировать код-драйв так же быстро, как они могут просто писать код, а тем более писать код, чем писать тесты.
И как уже говорили другие, значительная отдача за дополнительное время, затрачиваемое на работу с TDD, заключается в том, что время отладки для кода, управляемого тестами, значительно сокращается.
По моему опыту, написание тестов занимает столько же времени, а иногда и даже больше времени, чем разработка (т.е. добавление от 100% до 150% больше времени), но значительно сокращает время, затрачиваемое на исправление ошибок. Вот некоторые исследования по разработке через тестирование. Также взгляните на эту статью.
Время кодирования должно быть примерно таким же, как и в тестовой разработке. Время отладки должно быть сокращено примерно на 99%.
Другая выгода при создании кода с TDD заключается в том, что написанные тесты становятся набором регрессии. Затем тесты делают эти действия намного более безопасными:
- Рефакторинг по факту.
- Дальнейшая разработка того же кода.
- Исправление ошибок.
(Примечание: исправление ошибок, я помню пару раз, когда либо я забыл реализовать пару случаев, либо были поздние дополнения к спецификации, дополнительная разработка была пустяком с тестами на месте.)
Если вы хотите получить математический ответ, я обнаружил, что на тестирование было потрачено время: производство составляет 2:1 (консервативно - большая часть времени, потраченного на тестирование, - это ДУМАЮ). Однако вы не можете применить коэффициент 3X к вашим текущим (не TDD) оценкам, потому что TDD помогает вам стабильно прогрессировать... вы не тратите время
- кодирование вещей, которые вам не нужны
- бег по кругу ломать и чинить. ИЛИ ломая существующие функции.
- отдельная фаза поиска и исправления ошибок в конце
- Приблизительно к нулю присоединить отладчик и пройти через сеансы
Вдобавок ко всему, я бы пошел в 2 раза на ваши существующие оценки.