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

24

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

У клиента есть проблема с высокими затратами на обслуживание из-за исправления ошибок в существующих приложениях. Их приложения имеют срок службы от 5 до 15 лет, в течение которого они постоянно добавляют новые функции. Я совершенно уверен, что они получат большую выгоду от начала модульных тестов.

Меня интересует влияние юнит-тестов на время и стоимость разработки:

  • Сколько времени добавит написание модульных тестов как части процесса разработки?
  • Сколько времени будет сэкономлено на работах по техническому обслуживанию (тестирование и отладка) при наличии хороших модульных тестов?
jgauffin
источник

Ответы:

25

Есть ли статистика, показывающая, сколько времени потребуется для разработки приложений при создании модульного теста во время разработки по сравнению с простым программированием?

Есть несколько очень интересных исследований по этому поводу. Прочитайте следующий технический документ:

Реализация улучшения качества с помощью тестовой разработки: результаты и опыт четырех промышленных групп

Технический документ и другие исследования одного из его авторов, Начи Нагаппана , обсуждаются здесь: http://research.microsoft.com/en-us/news/features/nagappan-100609.aspx

Исследование и его результаты были опубликованы в статье под названием «Реализация улучшения качества с помощью разработки, основанной на тестировании: результаты и опыт четырех промышленных групп», автором: Nagappan и коллеги по исследованиям Э. Майкл Максимилиен из исследовательского центра IBM Almaden; Тирумалеш Бхат, главный руководитель отдела разработки программного обеспечения в Microsoft; и Лори Уильямс из Университета штата Северная Каролина. Исследовательская группа обнаружила, что команды TDD создали код, который на 60-90 процентов лучше с точки зрения плотности дефектов, чем команды, не использующие TDD. Они также обнаружили, что командам TDD потребовалось больше времени, чтобы завершить свои проекты - на 15–35 процентов дольше.

«За 12-месячный цикл разработки 35 процентов - это еще четыре месяца, что огромно», - говорит Нагаппан. «Однако компромисс заключается в том, что вы значительно снижаете затраты на обслуживание после выпуска, поскольку качество кода намного лучше. Опять же, это решения, которые должны принимать менеджеры - где они должны принять удар? Но теперь они на самом деле имеют количественные данные для принятия этих решений ».

Кроме того, Джейсон Горман был предложен такой эксперимент в этом году на конференции Software Мастерства. Он пытался провести эксперимент по созданию того же приложения, используя подход TDD и не-TDD, и недавно он написал в блоге о своих результатах :

За 3 итерации среднее время, затраченное на заполнение ката без TDD, составило 28 м 40 с. Среднее время с TDD было 25м 27с. Без TDD я в среднем сделал 5,7 прохода (сдача в приемочные испытания). С TDD я в среднем сделал 1,3 прохода (в двух попытках они прошли впервые, за одну - 2 прохода).

Теперь, это был детский эксперимент, конечно. И не совсем лабораторные условия. Но я отмечаю пару интересных вещей, все же.

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

Имеется ли какая-либо статистика, показывающая, сколько часов снижается техническое обслуживание при наличии (хороших) модульных тестов?

Из приведенного выше документа:

Результаты исследований показывают, что плотность дефектов перед выпуском четырех продуктов снизилась на 40-90% по сравнению с аналогичными проектами, в которых не использовалась практика TDD.

Paddyslacker
источник
Мне нравится этот ответ. Я бы добавил, что инструмент «Язык и тестирование» также может оказать большое влияние на время TDD. Для такого языка, как C #, до NCRUNCH я не был так взволнован преимуществами TDD. После просмотра и использования NCRUNCH. На мой взгляд, тенденция к параллельному тестированию кода - это серьезный сдвиг в эффективности таких инструментов. Исследования, проведенные в 2008 году, могут не отражать существующие инструменты и их эффективность.
Фил Соеди