Добавление уровня аппаратной абстракции (HAL) необходимо, если вы ожидаете, что базовое оборудование изменится в течение срока службы продукта.Если все сделано правильно, вы можете создать модульные тесты для обеих сторон HAL.
Например, HAL - это просто API от вашего GUI до реального аппаратного обеспечения дисплея.Вы можете написать поддельный аппаратный драйвер, который не управляет физическим устройством, но реагирует по-разному, чтобы убедиться, что ваши верхние уровни API обрабатывают все возможные коды ответов из HAL.Может быть, он создает в памяти растровое изображение (вместо управления внешним вводом-выводом), которое можно сравнить с ожидаемым растровым изображением, чтобы убедиться в правильности его рендеринга.
Аналогично, вы можете написать модульный тест, который обеспечивает хороший охватHAL из верхних уровней, так что вы можете убедиться, что ваш новый драйвер оборудования отвечает правильно.Используя пример отображения, вы переключаетесь между всеми возможными режимами экрана, элементами интерфейса, методами прокрутки и т. Д. К сожалению, для этого теста вам потребуется физически наблюдать за дисплеем, но вы можете потенциально работать бок о бок со старым оборудованием дляувидеть улучшения скорости или отклонения в поведении.
Вернемся к вашему примеру.Насколько отличается переход на другой видео кодек?Вы все еще просто толкаете байты на верхних уровнях.Если вы реализуете известный кодек, было бы полезно иметь исходные файлы, которые действуют как модульный тест (охватывающий весь спектр возможных форматов данных), чтобы гарантировать, что ваш кодек декодирует и отображает их правильно (без сбоев!).Декодирование в растровое изображение в памяти делает хороший модульный тест - вы можете просто сравнить память с необработанным распакованным кадром.
Надеюсь, это поможет.Если нет, задавайте больше вопросов.