Можно ли успешно добавить модульное тестирование в существующий производственный проект?Если да, то как и стоит ли это того? - PullRequest
129 голосов
/ 13 августа 2010

Я настоятельно рекомендую добавить модульное тестирование в существующий проект, который находится в производстве. Он был запущен 18 месяцев назад, прежде чем я действительно смог увидеть какую-либо пользу от TDD (лицо ладони) , так что теперь это довольно большое решение с рядом проектов, и я Туманная идея, с чего начать добавление юнит-тестов. Что заставляет меня задуматься об этом, так это то, что иногда старая ошибка, кажется, всплывает наружу, или ошибка фиксируется как исправленная без действительно исправления. Модульное тестирование уменьшит или предотвратит возникновение этих проблем.

Прочитав похожих вопросов по SO, я увидел такие рекомендации, как запуск на трекере ошибок и написание тестового примера для каждой ошибки, чтобы предотвратить регрессию. Тем не менее, я обеспокоен тем, что в конечном итоге мне не хватит общей картины и я пропущу фундаментальные тесты, которые были бы включены, если бы я использовал TDD с самого начала.

Существуют ли какие-либо процессы / этапы, которые необходимо соблюдать, чтобы гарантировать, что существующие решения должным образом проверены модулем, а не просто загружены? Как я могу гарантировать, что тесты хорошего качества и не просто случай любого теста лучше, чем отсутствие тестов .

Так что я думаю, что я тоже спрашиваю;

  • Стоит ли усилий для существующее решение, которое находится в производстве?
  • Было бы лучше проигнорировать тестирование для этого проекта и добавить его в возможное будущее переписать?
  • Что будет более полезным; расходы несколько недель, добавляя тесты или несколько недель добавляется функциональность?

(Очевидно, что ответ на третий пункт полностью зависит от того, говорите ли вы с руководством или разработчиком)


Причина получения награды

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

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

Ответы [ 23 ]

1 голос
/ 21 августа 2010

Я ни в коем случае не опытный эксперт по TDD, но, конечно, я бы сказал, что очень важно проводить юнит-тестирование настолько, насколько это возможно.Поскольку код уже существует, я бы начал с того, что установил некоторую автоматизацию модульного тестирования.Я использую TeamCity для выполнения всех тестов в своих проектах, и он дает вам хорошее резюме того, как компоненты работали.

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

Хорошо, так что теперь вы, надеюсь, чувствуете себя лучше в отношении этих критических частей.Вместо того, чтобы сесть и ударить все тесты, я бы напал на них, когда они подходят.Если вы столкнулись с ошибкой, которую нужно исправить с помощью PITA, напишите для нее модульные тесты и уберите их с пути.

В некоторых случаях вы обнаружите, что тестирование сложно, поскольку вы не можете создать экземпляропределенный класс из теста, так что вы должны издеваться над ним.О, но, может быть, вы не можете легко высмеять это, потому что вы не пишете в интерфейс.Я воспринимаю эти сценарии «упс» как возможность для реализации указанного интерфейса, потому что, ну, это хорошо.

Оттуда я получу ваш сервер сборки или любую другую автоматизированную систему, настроенную вами на месте, с помощьюинструмент покрытия кода.Они создают неприятные гистограммы с большими красными зонами, где у вас плохое освещение.Теперь 100% покрытие не ваша цель, и 100% покрытие не обязательно означает, что ваш код является пуленепробиваемым, но красная полоска определенно мотивирует меня, когда у меня есть свободное время.:)

0 голосов
/ 19 августа 2010

Это зависит ...
Замечательно иметь модульные тесты, но вам нужно подумать, кто ваши пользователи и что они готовы терпеть, чтобы получить более безошибочный продукт. Неизбежно, путем рефакторинга вашего кода, который в настоящее время не имеет модульных тестов, вы обнаружите ошибки, и многим пользователям будет трудно понять, что вы временно делаете продукт более дефектным, чтобы сделать его менее дефектным в долгосрочной перспективе. В конечном счете, последнее слово скажут пользователи ...

0 голосов
/ 13 августа 2010

Да.Нет. Добавление тестов.

Переход к более TDD-подходу на самом деле лучше проинформирует вас об усилиях по добавлению новых функций и сделает регрессивное тестирование намного проще.Проверьте это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...