Подтвердить что ты не робот

Pro и Con модульного тестирования после факта

У меня довольно сложное приложение вокруг линий 27k. Его по существу правило управляет многопоточным процессором обработки, не давая слишком много. Его частично тестировали по мере его сборки, некоторые компоненты.

Вопрос: у меня есть, что такое pro и con для проведения модульного тестирования после того, как, так сказать, после его реализации. Понятно, что традиционное тестирование будет занимать 2-3 + месяца, чтобы протестировать каждый аспект, и все это должно работать, и это время на самом деле недоступно.

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

Что скажешь.

4b9b3361

Ответ 1

В зависимости от того, сколько ошибок появляется при "ручном тестировании", вы можете просто выполнить проверку ошибок с помощью теста, которая по моему опыту намного эффективнее, чем просто повысить охват кода, написав "post- mortem".

(Это не значит, что тесты на блочном модуле впоследствии являются плохими идеями, а именно, что TDD - это почти всегда лучшая идея.)

Ответ 2

Я думаю, что есть несколько преимуществ для модульного тестирования существующего кода

  • Управление регрессией
  • Лучшее понимание кода. Тестирование будет выявлять случаи, которые вы не ожидали, и поможет определить поведение кода
  • Он укажет на недостатки конструкции в коде, поскольку вы отключаетесь, чтобы протестировать плохо определенные методы.

Но я думаю, что более интересно рассмотреть минусы модульного тестового кода. AFAIK, нет никаких минусов. Все время, проведенное с добавлением тестов, будет оплачивать себя даже во всем, кроме кратчайших временных циклов.

Ответ 3

Существует много причин для кода unit test. Основная причина, по которой я буду выступать за модульное тестирование после того, как факт прост. Ваш код сломан, вы еще этого еще не знаете.

В программном обеспечении существует очень простое правило. Если код не проверен, он сломан. Сначала это может быть не сразу очевидным, но по мере того, как вы начинаете тестирование, вы будете находить ошибки. Это зависит от вас, чтобы определить, насколько вы заботитесь об обнаружении этих ошибок.

Кроме того, существует несколько других важных преимуществ модульного тестирования,

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

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

Ответ 4

Вот некоторые из моих соображений:

Pro:

  • Время сохраняется при отсутствии необходимости тестирования методов, которые были удалены по мере развития проекта со временем. Осталось то, что действительно нужно проверить.
  • Добавляя тесты, это позволяет просматривать все аспекты приложения и определять, какие другие оптимизации можно было бы добавить теперь, когда рабочий прототип готов.

Con:

  • Инвестиции большого времени, чтобы получить тесты, новые функции могут задерживаться на некоторое время, чтобы сгенерировать все тесты.
  • Возможно, были обнаружены ошибки, которые обнаружат тесты, которые могут привести к тому, что это будет длиннее, чем первоначально планировалось.

Главное, что добавление модульных тестов позволяет рефакторинг и добавление пользы в приложение.

Ответ 5

Я думаю, что один из самых больших тестов тестирования "после факта" заключается в том, что вы, вероятно, проведете более сложное тестирование. Если вы пишете код без тестов, вы, как правило, не имеете проверки и в конечном итоге набираете код, который трудно проверить.

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

Наконец, вы можете найти новые ошибки, которые раньше не были пойманы, и потратить некоторое время на его исправление. Но эй, что те тесты для =)

Ответ 6

Pro постфактумное тестирование:

  • Получить документацию, которой вы можете доверять.
  • Улучшите понимание кода.
  • Нажмите на рефакторинг и улучшите сам код.
  • Исправить ошибки, которые скрываются в коде.

Тестирование модулем post post facto:

  • Время от времени исправление ошибок, с которыми вы можете жить. (Если вы написали 27KLOC, мы надеемся, что он что-то сделает, правда?)
  • Проведите анализ времени и код рефакторинга, который вам не нужно понимать.
  • Потеряйте время, которое может перейти в следующий проект.

Не заданный вопрос: насколько важным является этот актив для вашей организации в долгосрочной перспективе?. Ответ на этот вопрос определяет, сколько вы должны инвестировать. У меня много (успешных) конкурентов, где основная цель их кода - вывести цифры, чтобы оценить некоторые новые техники или идеи. Как только у них есть номера, код имеет небольшое предельное значение. Они (правильно) тщательно проверяют, чтобы убедиться, что цифры имеют смысл. После этого, если есть пятьдесят открытых ошибок, которые не влияют на цифры, им все равно. И почему они должны? Код выполняет свою задачу.

Ответ 7

Если вы делаете какой-либо рефакторинг, эти тесты помогут вам обнаружить любые ошибки, которые появятся в процессе.

Ответ 8

Единичное тестирование "после факта" по-прежнему ценно и обеспечивает большинство тех же преимуществ модульного тестирования во время разработки.

Сказав это, я нахожу, что больше работы проверять после факта (если вы хотите получить тот же уровень тестирования). Он по-прежнему ценен и по-прежнему стоит.

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

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

Ответ 9

Тестирование модулей по-прежнему определенно полезно. Проверьте http://en.wikipedia.org/wiki/Unit_testing для полного списка и объяснения преимуществ.

Основными преимуществами, которые вы получите, являются документация, упрощение изменений и упрощение будущей интеграции.

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

Ответ 10

Единичное тестирование не доказывает, что система работает. Это доказывает, что каждое подразделение работает как самостоятельное подразделение. Это не доказывает, что интегрированная система будет работать

Единичное тестирование "после факта" полезно для двух вещей: поиск ошибок, которые вы пропустили до сих пор, и не найдете каких-либо других видов тестирования (особенно для редких условий - существует огромное количество редких условий, которые могут происходят в отдельных единицах для любой системы реального мира), и как регрессионные тесты во время обслуживания.

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

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

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

Ответ 11

Если развитие "сделано", я бы сказал, что в модульном тестировании не так много смысла.

Ответ 12

Это один из этих сложных оценочных типов вопросов.

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

Я бы добавил еще два комментария:

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