Поблочное тестирование математический код

Я пишу маленькую утилиту для вычисления сложной математической формулы (пользующийся библиотекой математики свободного городского населения для интеграции и корневого открытия). Я пытался записать это таким же образом как нормальное бизнес-приложение, однако я нашел, что добираюсь быстро растущее число классов. Для получения первого шага вычислений (1 формула строки с 2 интегралами) я уже записал 3 класса для каждого крошечного бита вычисления, так, чтобы я мог использовать внедрение зависимости и правильно дразнить все вызовы к математике свободного городского населения. Это - вид того, чтобы выходить из-под контроля, хотя, я закончу с 20 классами для проблемы, которая могла быть решена на 2 экранах в одном классе (без поблочного тестирования). Каков был бы Ваш предпочтительный подход? Я очень испытываю желание только полагаться на принятие и высокоуровневые тесты для этого.

8
задан Grzenio 6 July 2010 в 12:58
поделиться

2 ответа

Не позволяйте тестированию создать совершенно непригодный для использования и непонятный код. И не переусердствуйте с объектно-ориентированным подходом.

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

9
ответ дан 5 December 2019 в 12:07
поделиться

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

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

Одна техника, которая иногда срабатывает для меня ... обычно в математическом коде есть "простые, но медленные" методы и "быстрые, но трудные для программирования" методы. При написании кода вы хотите использовать быстрый, но сложный для написания (поэтому вы ожидаете ошибок). Итак ... быстро пройдите тестируемую систему (SUT). Когда вы делаете модульный тест, создайте 1000 случайных задач и решите их «простым, но медленным» методом. Затем запустите SUT и убедитесь, что ответы аналогичны.

При условии, конечно ... что создание случайных проблем - это простая проблема. Иногда это так, иногда нет. Сложно сказать, не рассказав нам о самом математическом коде. Теперь ... Это ВСЕ дела? Нет. Но достанутся «общие» случаи. И если на практике возникает угловой случай, завершите его в модульном тесте и исправьте в следующей версии вашего кода.

5
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: