Тестирование сложных типов данных? - PullRequest
2 голосов
/ 19 ноября 2009

Каковы некоторые способы тестирования сложных типов данных, таких как видео, изображения, музыка и т. Д. Я использую TDD и удивляюсь, есть ли альтернативы тестированию «золотого файла» для алгоритмов рендеринга. Я понимаю, что есть способы протестировать другие части программы, которые не отображаются, и использовать полученные результаты. Тем не менее, меня особенно интересуют алгоритмы рендеринга, в частности, тестирование изображения / видео.

Вопрос возник, когда я использовал OpenCV / Python для базового распознавания лиц и хотел проверить его правильность.

Даже если нет ничего определенного, любое предложение поможет.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

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

f(f^-1(x)) = x

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

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

Крепеж:

actual = parse("file.xml")
expected = "magic value"
assert(actual == expected)

Генерируемые значения:

expected = generate()
input = render(expected)
actual = parse()
assert(actual == expected)

Хорошая особенность генераторов в том, что вы можете строить из них довольно сложные графы объектов, начиная с примитивных типов и полей ( python Quickcheck версия ).

Генераторные тесты не являются детерминированными по своей природе. Но при достаточном количестве испытаний они следуют Закону больших чисел .

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

Альтернативный подход к тестированию заключается в тестировании с эквивалентной функцией:

f(x) = f'(x)

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

0 голосов
/ 19 ноября 2009

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

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

Даже при тестировании простых функций и основных классов приложения метод setUp создает своего рода «золотой файл» для этого класса или функции.

Что не так с этой техникой? Пожалуйста, обновите ваш вопрос с конкретными проблемами, которые у вас есть.

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