2008-10-14 2 views
8

Я не новичок с тех пор, как программировался с 1983 года, но у меня есть только реальный опыт работы с такими сценариями, как Applescript, ARexx, HyperTalk и Bash.Является ли модульное тестирование подходящим для коротких программ

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

Большинство программ, которые я пишу, составляют до 200 строк с не более чем 10 функциями. В будущем я хочу написать более крупные, более способные программы. Я хочу улучшить свои методы, чтобы избежать создания хрупких, недостижимых беспорядков. В среде программирования, в которой я работаю (Script Editor.app и Text Wrangler.app), нет поддержки для автоматического тестирования.

В масштабе, что я работаю в настоящее время и писать процедурный код (не ОО), уместно писать модульные тесты, которые я понимаю являются:

коротких программ в проверяют индивидуальные функции перед объединением их в полностью функционирующую большую программу.

ли модульные тесты стоит по сравнению с их стоимостью при принятии программы на этой шкале?

ответ

1

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

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

Предупреждение: Следующие ссылки могут быть неприменимы, но последующее обсуждение является хорошим показанием.

В последнее время в рамках блогосферы возникла некоторая дискуссия относительно того, когда тестирование подходит, в частности, Test Driven Development (TDD).Возможно, вам захочется ознакомиться с некоторыми статьями, такими как thesethreearticles от Roy Osherove.

1

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

+0

Это только ваш способ сказать «всегда использовать модульные тесты, независимо от того, что»? – willc2 2008-10-14 05:42:32

2

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

только один из многих плюс-значение наличия набора тест на кусок кода.

7

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

+0

Конечно, все может быть протестировано. ВСЕГДА целесообразно создавать модульные тесты? – willc2 2008-10-14 05:46:30

+0

Единственный случай, когда я могу думать о том, что модульное тестирование не подходит, - это одноразовая программа, которая будет выполняться один раз, чтобы сделать что-то конкретное, а затем выбросить. Опять же, даже у них есть способ повесить и превратиться во что-то вообще полезное. – Ferruccio 2008-10-14 10:30:35

4

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

0

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

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

3

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

Рассмотрите смиренный оператор добавления. Прямо, верно? Ну, каково ожидаемое поведение при добавлении двух значащих целых чисел, оба из которых> MAXINT/2? Это MAXINT, или это отрицательное число?

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

4

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

0

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

Имея это в виду, я говорю, что кроме документирования как mcwafflestixlivejournalcom сказал, юнит-тесты только поможет вам, если вы не уверены на 100% вашего кода. Взяв пример оператора сложения для двух ints, я не забочусь о переполнении, если я добавляю возраст двух человек.

OTOH, модульные тесты заставляет вас отследить основную логику ваших программ (что заставляет вас делать что-то более модульное) и помогает вам протестировать быстрее, чем вы могли бы сделать, если бы вы тестировали «вручную». Не все из нас - Дональд Кнут.

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

Смежные вопросы