DEV Community на русском
Подписаться
Ширина моей подписи прошла все тесты. Она измеряла текст, который рендерер никогда не отрисовывал.
Жалоба пользователя на плохо сегментированные субтитры привела к исправлению ошибки, которое породило новую, едва заметную проблему. Изначальная проблема заключалась в том, что субтитры разбивались на фиксированные блоки слов, игнорируя структуру предложения. Это приводило к бессмысленным разрывам, например, обрывая предложение на полуслове.Исправление включало внедрение правил для лучшего разбиения, в том числе с учетом пунктуации и стремления к определенному количеству слов в блоке. Важным дополнением стало ограничение по ширине в пикселях для отрисованных блоков, чтобы они помещались на экране. Это ограничение ширины предназначалось для измерения фактической ширины отрисованного текста.Однако код, измеряющий ширину текста, некорректно преобразовывал текст в верхний регистр перед измерением. Это произошло из-за заимствования шага из другой части видеоконвейера, где намеренно использовались все заглавные буквы для визуального стиля. Текст в верхнем регистре в выбранном шрифте шире, чем текст со смешанным регистром.Измерение было точным для введенного текста в верхнем регистре, но фактические субтитры отрисовывались в их исходном смешанном регистре. Это несоответствие означало, что ограничение ширины, полагая, что текст намного шире, принудительно вызывало ненужные разбиения. Это привело к созданию однословных блоков, что было хуже для пользователя, чем изначальная проблема.Важно отметить, что все автоматизированные тесты прошли успешно, поскольку функция измерения ширины корректно работала с полученными данными, то есть с текстом в верхнем регистре. Тесты не проверяли, соответствует ли измеренный текст тексту, фактически отрисованному на экране. Ошибка была обнаружена только человеком, просматривавшим отрисованное видео.Эта ситуация подчеркивает распространенную ловушку: раздельные пути кода для продакшена и верификации, которые должны совпадать в предположениях, таких как преобразование текста. Когда эти предположения расходятся, возникают тонкие ошибки, которые автоматизированные тесты пропускают. Автор предлагает в качестве стратегий смягчения последствий совместное использование функций преобразования между путями или регулярное выборочное инспектирование фактического отрисованного вывода. Доверие исключительно зеленым наборам тестов без человеческого надзора может позволить таким тонким расхождениям оставаться незамеченными.