DEV Community на русском
Подписаться
Правило проверки, которое никогда не подведет
Студия автора производит анимационные детские мультфильмы с помощью автоматизированного конвейера, включающего языковые модели, преобразование текста в речь и рендеринг. Важной частью этого процесса являются контрольные точки валидации, которые обеспечивают точность контента. Одна из таких точек проверяет, соответствуют ли произнесенные слова буквам, которым обучают, предотвращая фактические ошибки для юных зрителей.Когда эта точка проверки букв была протестирована на всех существующих эпизодах, она сообщила о проблемах в большинстве из них, продемонстрировав свою полезность. Однако конкретное правило проверки соответствия букв и слов не выявило никаких проблем. При расследовании автор обнаружил критическую ошибку в регулярном выражении, используемом для валидации.Шаблон регулярного выражения, предназначенный для проверки границ слов, из-за обработки строк неправильно интерпретировал '\b' как буквальный символ возврата на шаг (backspace). Это сделало шаблон неспособным сопоставить какой-либо реальный текст, сделав правило валидации совершенно неэффективным. Проблема была тонкой, поскольку недействительный шаблон компилировался без ошибок и не давал вывода, казалось бы, функционируя правильно.Эта тишина скрывала серьезную проблему, поскольку точка контроля пропустила бы эпизод, содержащий фактическую ошибку. Автор обнаружил эту ошибку не путем прямого чтения кода, а следуя правилу тестирования новых точек контроля на заведомо некорректных входных данных. Эта практика выявила ненадежность точки контроля, которая никогда не давала сбоев.Автор выступает за сохранение некорректных входных данных в качестве ценных тестовых случаев и за подтверждение положительных результатов, сочетая тесты "нет проблем на чистых входных данных" с тестами "именно эта проблема на грязных входных данных". Они также подчеркивают важность печати скомпилированного шаблона, а не исходного кода, для выявления несоответствий. Ошибка с возвратом на шаг была классическим примером индикатора, который ничего не сообщает, что может быть ошибочно принято за нормальное состояние.После исправления регулярного выражения точка контроля успешно выявила неточный факт о том, что цветок начинается с буквы 'П', в двух разных эпизодах. Эта избыточность, возникшая из-за написания правил как утверждений о мире, а не о конкретных форматах файлов, оказалась полезной. Этот опыт подчеркивает важность тщательного тестирования и обманчивую природу тихих сбоев в автоматизированных системах.