2009-11-19 2 views
2

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

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

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

+0

Я думаю, вы принимаете TDD слишком далеко. – nosklo

ответ

2

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

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

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

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

Крепеж:

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

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

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

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

Испытания на основе генератора не являются детерминированными по своей природе. Но, учитывая достаточные испытания, они следуют за Law of large numbers.

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

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

f(x) = f'(x) 

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

+0

Wow спасибо большое! Это был ответ, который я ожидал, я не слишком обеспокоен TDD, но проблемы обслуживания были представлены с золотыми файлами. – prafulfillment

+0

@ dasickis - Я добавил альтернативный подход. Это может быть полезно и проще реализовать. –

+0

Удивительный! Большое спасибо, я отчитаюсь после того, как поговорю с моим профессором. Они будут преподавать целый класс об модульном тестировании, поэтому я занимаюсь некоторыми исследованиями для этого. – prafulfillment

0

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

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

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

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

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