2009-05-26 5 views
4

Я ищу модульное тестирование как средство регрессионного тестирования проекта.Unit Test Connundrum

Однако проблема заключается в том, что проект в основном является прославленной командой DIR - он выполняет тесты на регулярные выражения и фильтры MD5 по результатам и позволяет указать многие критерии, но все это предназначено для обработки ввода из система, на которой он работает.

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

В этом случае стоит ли тестировать устройство? Если да, то как можно провести такие тесты?

EDIT: функции MD5 и Regex не предоставляются мной - они предоставляются библиотекой Crypto ++ и Boost соответственно. Поэтому я не получаю много опыта, тестируя их. Большая часть кода, который я просто загружаю в библиотеки, распечатывает результаты.

+1

Билли, мне кажется, это скорее вопрос агностики языка, если только вы не спрашиваете конкретно о платформе тестирования для C++. –

+0

Хорошая точка :) Отредактировано. –

ответ

3

ли модульное тестирование стоит в этой ситуации?

Совсем не обязательно, особенно для одного человека команды в я думаю, что это может быть достаточно, чтобы иметь автоматизированное тестирование чего-то большего, чем «единицы» ... Более подробно на «Should one test internal implementation, or only test public behaviour?»

+0

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

4

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

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

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

+0

Функции регулярного выражения и MD5 предоставляются библиотеками - я их не писал. –

+0

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

+0

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

1

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

0

Когда вы писали код, вы проверили его, когда пошли? Эти тесты могут быть записаны в автоматизированный сценарий, так что, когда вам нужно внести изменения через 2 месяца, вы можете повторно запустить все эти тесты, чтобы убедиться, что вы ничего не отменили.

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

0

Тест интеграции с файловой системой был бы полезен. Просто убедитесь, что он делает то, что нужно.

1

Значение регрессионного тестирования часто не реализуется до тех пор, пока оно не будет автоматизировано. Как только это будет сделано, все станет намного проще.

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

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

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

Чем больше вы можете автоматизировать это, тем лучше, даже как команда разработчиков с одним человеком.

0
  1. Является ли единичное тестирование ценным в сценарии с одним человеком? Абсолютно! Нет ничего лучше, чем возможность реорганизовать свой код с абсолютной уверенностью, что вы ничего не сломали.

  2. Как я могу это проверить? Откажитесь от системных вызовов, а затем проверьте остальную часть своей логики.

+0

Как именно «Mock системные вызовы»? –

+0

@Billy: Вы спрашиваете, какую насмешливую структуру использовать? –

+0

Я никогда не слышал о насмешливой структуре. –

0

я подвергаю сомнению ценность теста для кода, написанного мною, который написан мною

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