Разработка через тестирование (TDD). Работает или нет?

Главная Форумы Программирование Технология программирования Разработка через тестирование (TDD). Работает или нет?

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 11 мес., 1 неделя назад.

  • Автор
    Сообщения
  • #3204

    Любой востребованный программный продукт развивается. Развитие означает добавление в проект новых возможностей. При добавлении новой фичи в продукт может случайно сломаться то, что исправно работало раньше. В этой связи возникает проблема тестирования – чем больше проект, тем больше всего нужно проверить отделу тестеров после любого изменения. Это случается не только добавление функционала, т.к. часто при исправлений одной ошибки возникают новые.

    Для решения описанной проблемы часто применяется автоматическое тестирование, чаще всего используются модульные тесты. Такие тесты пишутся для каждой функции и класса. В статье “Юнит-тестирование. Пример. Boost Unit Test” на простых примерах описывается процесс разработки тестов с помощью boost unit test framework. Кроме того, по теме можно посмотреть видео по юнит тестированию от докладчика из JetBrains. На мой взгляд, в лекции менее понятные примеры, но зато рассказывается про покрытие кода тестами, про то, как они используют юнит-тесты в своих крупных проектах.

    В видео рассказывается, в частности про то, что тесты позволяют не только проверить функциональность, но и являются средством документирования кода. Кроме того, многие отмечают, что тесты хорошо влияют на архитектуру системы. На эту же тему пишет в своей книге “Чистый код” Боб Мартин. Мартин пишет о правилах написания хороших (чистых) тестов, а вообще, у него книга не только о тестах. Аннотацию на книгу можно посмотреть тут: литература по разработке ПО.

    Я не писал бы этот пост, если бы не было подхода “разработка через тестирование” (TDD). Коротко, он сводится к простому принципу – сначала надо писать тесты, а потом код. Этот подход активно критикуется, в частности Сергеем Тепляковым (автором хорошей книги по шаблонам проектирования, аннотация на книгу). Тепляков с одной стороны отмечает положительное влияние модульных тестов (статья “Что значат для вас юнит-тесты?“), но с другой – критикует TDD (“Размышления о TDD” и цикл статей “Is TDD Dead“). Сергей говорит о том, что тесты писать надо, но он не хочет писать их до того, как напишет код (его возмущает это требование, т.к. на его взгляд, оно не обосновано).

    Модель разработки Test Driven Developing:
    Test_Driven_Developing_model

    Я писал Теплякову (в комментариях на блоге), но не дождался (за несколько лет) не только ответа, но даже публикации моего поста. Лично мне кажется противоречием то, что с одной стороны он отмечает позитивное влияние тестов на архитектуру (которая, очевидно, должна продумываться ДО написания кода), но с другой стороны настаивает на том, что тесты можно писать ПОСЛЕ. Кстати, в видео от JetBrains предлагают вообще одному программисту писать тесты, а другому – код (чтобы код не подгонялся под тесты, а тесты – под код) – тоже интересный подход, на мой взгляд.

    Этой заметки не было бы, если бы не новая статья на хабре – “TDD не работает“. Это перевод статьи Боба Мартина, который говорит обратное – TDD работает. Статья построена в виде интервью, ключевой вопрос – проведенное недавно исследование на тему TDD (как минимум, уже второе). Мартин рассуждает на тему того, насколько это исследование было адекватным. На мой взгляд, интервью интересное.

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

    Меня интересует, используете ли Вы модульные тесты? А TDD? – если возможно опишите свой опыт, пожалуйста.

Для ответа в этой теме необходимо авторизоваться.