Framework/инструмент для обработки модульных тестов С++ с числовым выходом

Я работаю над приложением С++, которое использует методы компьютерного зрения для идентификации различных типов объектов в последовательности изображений. Изображения (1000+) были классифицированы вручную, поэтому у нас есть XML файл для каждого изображения, содержащего описание того, где объекты фактически находятся на изображениях.

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

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

Кто-нибудь знает инструмент/фреймворк, который может это сделать?

Ответ 1

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

Тестирование модулей должно сообщать вам, делает ли ваш код то, что он должен быть. Не уверен, что/как вы можете unit test целую цепочку от необработанного изображения до извлеченных объектов, но вы должны иметь возможность тестировать "единицы" (модули/методы/классы) индивидуально, которые объединены для выполнения задания. Единичные тесты должны давать вам "fail" или "pass". Если оптимизация скорости изменяет поведение кода, unit test должен сказать вам об этом. Для модульного тестирования доступно много доступных фреймворков (мне нравится Google Test, но есть и многие другие.)

Ваш вопрос, похоже, больше нацелен на вторую часть: оцените качество вашего алгоритма. Я лично люблю TeamCity, который в основном предназначен как сервер непрерывной интеграции Java/.net, но вы также можете легко использовать его с С++. Я написал несколько строк кода в нашем магазине, чтобы вывести результаты тестирования Google в формате TeamCity, используя их сервис API. Каждый раз, когда кто-то проверяет новую ревизию, TeamCity выполняет сборку (которая может быть решением Visual Studio, Ant, командной строкой script или другими.) Результаты видны всем товарищам по команде через хороший веб-сайт ui. Кроме того, вы можете сообщить статистику пользовательской сборки. Это может быть использовано для чего угодно, например, для тестирования ваших алгоритмов. Вы просто выводите строку типа

##teamcity[buildStatisticValue key='detectedObjectsPercent' value='88.3']

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

Не забудьте настроить свой собственный график, как описано здесь.

Я думаю, что TeamCity действительно прост в настройке, поэтому просто попробуйте! Мне даже нравится, если я сам работаю над проектом!

Ответ 2

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

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

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