Как стать автором
Обновить

Эффективен ли TDD?

Тестирование IT-систем *Программирование *TDD *Agile *Научно-популярное
Во время интересной дискуссии, один очень уважаемый человек «козырнул» «неубиваемым» аргументом:
Есть полно исследований, демонстрирующих эффективность TDD

Действительно. Если зайти на Google Scholar, забить ключевые слова «TDD» и «Эффективность» — будет много научных статей, но так ли все просто? Хоть я сам и являюсь большим фанатом TDD, но я так же считаю себя скептиком, и решил проверить, доказано ли научно, что TDD так крут.

I find your lack of scepticism disturbing

Test-driven development (TDD) с нами уже долгое время, и все это время он был предметом горячих споров. Суть TDD в том, что начинать разработку надо с написания падающего Unit test, после чего пишется код, который сделает этот тест «зеленым», и так по циклу. Для тех, кто не в курсе, можно посмотреть руководство по TDD в IDE Idea.

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

Но вернемся к науке. По счастливой случайности, так совпало, что я учусь в магистратуре Wrexham Glyndŵr University по программе Computer Science with Big Data Analytics (кстати — всем рекомендую, и распишу про нее отдельно) и прямо сейчас прохожу модуль «Critical Research», где учат читать научные статьи и анализировать их достоверность.
Какие наши доказательства?

Исследований на тему эффективности и полезности TDD, действительно, много. Однако, если почитать сами исследования, можно заметить, что они приходят к противоречивым выводам.

К примеру, в докладе “An Experimental Evaluation of the Effectiveness and Efficiency of the Test Driven Development”, опубликованном в 2007 был сделан вывод, что TDD улучшает продуктивность разработчиков, при этом не оказывая влияния на качество [1].

В другом докладе, в котором были рассмотрены выводы нескольких других исследований и проведено собственное исследование, “Evaluating the Effectiveness of Test Driven Development: Advantages and Pitfalls”, 2017 пришли к выводу, что TDD может улучшить качество продукта, но приводит с снижению продуктивности. Дополнительно, было замечено, что большинство разработчиков находят TDD неестественным [2].

По результатам еще одного исследования, “A Replicated Experiment on the Effectiveness of Test-First Development”, 2013 исследователи не смогли обнаружить убедительного и значимого влияния Test-First или Test-Last подходов на продуктивность разработчика или качество продукта [3].

Чтобы забить гвоздь в гроб «доказанности» эффективности и полезности TDD, можно почитать обзорный отчет “Overview of the Test Driven Development Research Projects and Experiments”, 2012 [4], в котором, на основе большого количества доступных исследований пытались придти к выводу о доказанности эффективности и положительном эффекте TDD. Авторы заключили, что не существует убедительных доказательств о положительном эффекте TDD. Различия в результатах предыдущих исследований авторы обосновали Confirmation bias — исследования, которые показали эффективность TDD изначально исходили из гипотезы, что TDD — эффективен.
Так почему же люди (включая меня), считают TDD отличной практикой?
После прочтения исследований, у меня есть только один логичный ответ — эффективность и применимость TDD зависит, прежде всего, от конкретного разработчика. Исследования эффективности TDD, видимо, недостаточно учли, что разработчики — не роботы, а TDD — не программа. Для части разработчиков, TDD принесет хорошие результаты, для части — не будет значимой разницы между TDD и простым написанием Unit tests, для части — TDD приведет к падению качества, продуктивности и мотивации.

Программирование — это социальная активность. Проблема с социальным взаимодействиями — это то, что это не точная наука. Осталось придумать как провести более-менее научный эксперимент чтобы подтвердить\опровергнуть эту гипотезу. Для начала предлагаю опрос.

Если вдруг вы захотите поделиться этой публикацией с англоязычными коллегами — есть чуть более формальная английская версия: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Можно также подписаться на мой Youtube канал тут.

Список источников

[1] A. Gupta, P. Jalote “An Experimental Evaluation of the Effectiveness and Efficiency of the Test Driven Development” presented at First International Symposium on Empirical Software Engineering and Measurement, Madrid, Spain, 2007
[2] Z. Khanam, M. Ahsan, “Evaluating the Effectiveness of Test Driven Development: Advantages and Pitfalls” International Journal of Applied Engineering Research vol. 12, no 18, p. 7705, 2017. Available: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf. [Accessed May 13, 2020].
[3] D. Fucci, B. Turhan, “A Replicated Experiment on the Effectiveness of Test-first Development” presented at ACM / IEEE International Symposium on Empirical Software Engineering and Measurement, Baltimore, MD, USA, 2013
[4] A. Bulajic, S. Sambasivam and R. Stojic “Overview of the Test Driven Development Research Projects and Experiments” presented at Proceedings of Informing Science & IT Education Conference (InSITE), 2012. Available: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243dd3bbd.pdf. [Accessed May 13, 2020].
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Ваше субъективное мнение о TDD
19.25% TDD повышает продуктивность и качество работы разработчика 31
47.2% TDD повышает качество работы разработчика, но ухудшает\не влияет на продуктивность 76
1.86% TDD повышает продуктивность разработчика, но ухудшает\не влияет на качество 3
18.01% TDD не влияет на продуктивность или качество 29
13.66% TDD ухудшает продуктивность и качество 22
Проголосовал 161 пользователь. Воздержались 48 пользователей.
Теги:
Хабы:
Всего голосов 18: ↑16 и ↓2 +14
Просмотры 6K
Комментарии Комментарии 60