The incredible machine или мой самый лучший тест

в 6:38, , рубрики: c++, open source, OpenPapyrus, Программирование, распознавание штрих-кода, тестирование, Тестирование IT-систем, штрихкод, метки:

Добрый день.

Помнится, в одном сериале про заучек ребята рулили стерео-системой, находящейся в пределах доступности собственной руки, из компьютера, передавая сигнал посредством интернета через всю планету. Здравомыслящая девушка, которую они хотели удивить, впечатлена не была, ибо полагала, что обычный ПДУ дешевле и проще.

image

Тем не менее, есть хорошая новость: incredible machine все-таки может быть полезна. Например, для тестирования программных систем.

Работая над большой ERP-системой OpenPapyrus, которая, в числе прочего, должна уметь выводить изображения штрихкодов разных стандартов и свойств, мы подключили популярную библиотеку zint для рендеринга штрихкодов. Библиотека интегрировалась и заработала. Но тестировать результат все равно надо.

Самым подходящим вариантом для теста будет тестирование посредством обратной функции:
image
на вход подаются случайные данные, преобразуются функцией $f$, затем к результату применяется функция $f^{-1}$, обратная к $f$ и сравнивается выход с исходными данными. Тестируются сразу две функции с бронебойным доказательством правильности работы (не алгоритмов, конечно, а реализации).

Обратной функцией к рендерингу штрихкода очевидно будет распознавание изображения штрихкода. Сказано — сделано. Взяли еще одну open source библиотеку zbar. Инегрировали — заработала.
image
Теперь схема тестирования оформилась вполне четко: входные данные это — текстовое представление штрихкода и его стандарт (ean-13, ean-8, upc-a, code-39, qr и т.п.). Это представление преобразуется в изображение, которое тут же распознается и в результате мы получаем, опять же, текстовое представление и стандарт.
Таким образом мы протестировали следующие компоненты:

  • Библиотеку zint
  • Библиотеку libpng (при выводе и распознавании кода в формате png)
  • Библиотеку zlib (она используется libpng и множеством иных подсистем)
  • Библиотеку libjpeg (при выводе и распознавании кода в формате jpeg)
  • Библиотеку zbar
  • Собственную инфраструктуру, которая все это интегрирует и связывает

Нам остался еще один шаг: zint умеет выводить штрихкод в векторном формате svg, однако же zbar своими средствами этот формат не понимает, но у нас есть собственная инфраструктура для чтения и рендеринга svg-изображения. Добавим в нашу схему еще один узелок и включим в тест. Все работает.
image
Теперь к списку протестированных компонентов можем добавить:

  • Модуль чтения svg-файлов и преобразования их во внутренний векторный формат
  • Модуль рендеринга векторных изображений

    Краткое итого

    Описанный тест примечателен тем, что использует значительное число модулей различного назначения, реализованных независимо друг от друга. Еще одним его ценным свойством является преобразование данных между качественно различными формами (текст — векторное изображение — растровое изображение — текст).
    И ложка дегтя: такой тест, имея великолепную демонстративность, не является достаточным. Он верифицирует функционал компонентов в весьма узком диапазоне областей определения каждого из них. То есть, рассчитывать на полноту тестирования методом «incredible machine» (интересно, ранее кто-нибудь использовал этот термин в таком контексте?), увы, нельзя. Детальные тесты отдельных функций он не отменяет.

    Спасибо за внимание.

Автор: Антон Соболев

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js