Регрессионная проверка шрифта: как сравнить две сборки

Регрессионная проверка помогает понять, что именно изменилось между опубликованной и новой сборкой шрифта и не появились ли побочные дефекты. Для этого не нужен сложный стенд: достаточно сохранить эталонный набор строк, повторить экспорт в одинаковых условиях, сравнить глифы, интервалы, метрики и реальные макеты. Ниже — рабочий порядок, который превращает проверку перед выпуском в повторяемую процедуру.
Что проверяет регрессионный набор
В шрифте правка редко затрагивает только одну изолированную вещь. Изменение контура может повлиять на ширину знака, боковые поля, соединение в слове или положение надстрочного элемента. Новая буква способна изменить переносы в старом документе. Поэтому проверка сборки должна отвечать не только на вопрос «появился ли новый знак», но и на вопрос «что стало иначе в знакомых сценариях».
Регрессионный набор — это небольшой постоянный комплект строк и макетов, который вы прогоняете после каждого заметного изменения. Он не доказывает математически, что шрифт безупречен. Его задача практичнее: поймать видимые и повторяемые отличия до того, как файл попадёт в работу.
Хороший набор покрывает несколько слоёв:
- **Набор символов:** кириллицу, латиницу, цифры, пунктуацию, пробелы и те специальные знаки, которые заявлены в проекте.
- **Сочетания:** пары и последовательности, где встречаются узкие или широкие буквы, диагонали, округлые формы, выносные элементы и диакритика.
- **Текстовый ритм:** короткую подпись, заголовок, абзац, числа с разделителями и строку с длинными словами.
- **Технический результат:** правильный файл, корректную карту символов, метрики и поведение в целевых редакторах.
Не стремитесь включить в тестовую страницу весь словарь. Набор должен быть достаточно коротким, чтобы его действительно проверяли при каждом выпуске, и достаточно разнообразным, чтобы изменения не прятались за одной удобной фразой.
Шаг 1. Зафиксируйте базовую сборку
Выберите последнюю сборку, которая уже прошла проверку и используется как эталон. Сохраните исходник проекта, экспортированный файл, дату или метку версии и контрольные материалы в отдельной папке. Не перезаписывайте эталон новой сборкой: иначе сравнивать будет не с чем.
Запишите условия теста: название файла, приложение, операционную систему, размер текста, межстрочный интервал, масштаб просмотра и формат экспорта. Если на одном снимке новая версия показана при 100%, а старая — при увеличении 125%, сравнение формы становится ненадёжным. Для экранной проверки отключите случайное авто-масштабирование окна; для печатной — используйте один и тот же размер страницы и настройки принтера или PDF.
В паспорте эталона хватит короткой записи: «Сборка 1.4.2; проверена в редакторе макетов; файл сохранён отдельно; контрольная страница — дата; выявленных блокирующих проблем нет». Это не заменяет журнал изменений, а фиксирует, с какой именно версией сопоставляется следующая.
Шаг 2. Составьте постоянные контрольные строки
Разделите примеры по проверяемым свойствам. Привяжите каждую строку к вопросу, на который она должна ответить. Тогда замечание «здесь стало хуже» можно будет превратить в конкретную диагностику.
Матрица коротких тестов
| Проверка | Что включить | На что смотреть |
|---|---|---|
| Покрытие | Строку с каждым обязательным знаком | Пропуски, подстановки, неверные формы |
| Проблемные пары | Сочетания из узких, широких, округлых и диагональных букв | Слипание, чрезмерный разрыв, неравномерный ритм |
| Диакритика | Буквы с точками и надстрочными знаками | Высоту, столкновение с соседней строкой, центрирование |
| Цифры | Дату, номер, дробь, сумму и последовательность цифр | Ширину, различимость, положение разделителей |
| Пунктуация | Кавычки, тире, скобки, двоеточие и многоточие | Интервалы и соответствие соседним буквам |
| Текст | Заголовок и короткий абзац из проекта | Переносы, общий цвет строки, выразительность |
Примеры подбирайте по назначению гарнитуры. Для дневника подойдут дата, заголовок записи и несколько строк обычного текста; для настольной игры — названия карточек, номера и короткие команды; для подписи — имя, фамилия и узкие строки. Важно использовать один и тот же текст до и после изменения. Если заменить контрольную фразу между сборками, вы потеряете общий знаменатель.
Добавьте в набор проблемные сочетания, найденные на прошлых проверках. Например, если в фамилиях часто встречается пара букв с тесным соединением, оставьте её в контрольном наборе даже после исправления. Старые дефекты полезны как постоянные тесты: они не должны возвращаться вместе с новой правкой.
Шаг 3. Сравните сборки в одинаковых условиях
Экспортируйте новую версию отдельно от эталона и явно подпишите оба файла. Откройте каждый в одной и той же среде. Убедитесь, что приложение действительно выбрало нужный файл: установленные копии с одинаковыми внутренними именами легко перепутать. Если сомневаетесь, временно изолируйте остальные варианты или проверяйте файл в приложении, которое позволяет выбрать конкретный файл напрямую.
Сделайте два вида сравнения. Сначала сравните контрольную страницу рядом: так проще заметить изменение ширины, ритма и характерных деталей. Затем наложите изображения старой и новой версии или быстро переключайтесь между ними. Наложение помогает увидеть смещение контура, но не заменяет чтение: пиксельное отличие может быть незаметным или, наоборот, визуально безвредным.
Проверяйте изменения слоями, в одном порядке:
- **Загрузка и состав.** Откройте файл, наберите контрольную строку, проверьте отсутствие пустых квадратов и неожиданных подстановок.
- **Формы.** Сравните исправленный знак с соседними по стилю и проверьте проблемные пары, где его контур должен взаимодействовать с другими буквами.
- **Интервалы и переносы.** Проверьте короткие строки и прежние макеты. Изменившаяся ширина может переставить слово на следующую строку, даже если отдельная буква стала аккуратнее.
- **Метрики и вертикальные зоны.** Посмотрите на строчные, заглавные, верхние и нижние выносные элементы. Убедитесь, что строки не задевают друг друга и важные части букв не обрезаются.
- **Экспорт и повторное открытие.** Закройте документ, откройте его снова, проверьте сохранение выбранного начертания и итоговый PDF или изображение, если он входит в рабочий процесс.
Новая сборка не обязана совпадать с эталоном пиксель в пиксель: исправление и должно давать различия. Задайте ожидаемый результат заранее. Если менялась только строчная «т», новая форма этого знака ожидаема, небольшое уточнение его ширины может быть частью работы, а изменения цифр и кавычек требуют объяснения. Чем яснее границы задачи, тем легче классифицировать отличия.
Шаг 4. Проверяйте не только экранный образец
Контрольная страница удобна для быстрого осмотра, но у реального макета есть собственные ограничения: фиксированная колонка, стили, переносы, смешанные размеры. Возьмите несколько старых документов, где шрифт уже используется, и откройте копии с новой версией. Сначала запишите прежнее поведение: какие слова стояли в строке, где начинался следующий абзац, хватало ли места под подпись.
Для печатного проекта сохраните контрольный PDF с одинаковым размером листа и включением шрифтов по правилам вашего рабочего процесса. Для экранного интерфейса проверьте реальные компоненты при типичных ширинах окна. Не пытайтесь за один раз проверить бесконечное число устройств: выберите среды, которые действительно используются, и записывайте их в паспорт выпуска.
Если менялись только контуры, но не метрики, старый макет может выглядеть почти так же, однако визуальное впечатление всё равно стоит проверить в заголовках и тексте. Если менялась ширина знака или боковые поля, внимательнее посмотрите на строки у границы переноса. Отдельно проверьте ручные разрывы, подчёркивания, табличные числа и области, где текст соседствует с графикой.
Шаг 5. Разберите каждое отличие и примите решение
Ведите таблицу сравнения с четырьмя полями: место, эталон, новая версия, решение. Вместо «стало теснее» запишите: «в строке с датой 12.09 расстояние после запятой уменьшилось; проверить боковое поле и сравнить на кегле макета». Такая запись помогает воспроизвести проблему и не смешивает впечатление с диагнозом.
Присвойте находке один из статусов:
- **Ожидаемое изменение:** цель правки достигнута, побочный эффект допустим.
- **Требует решения:** отличие заметно, но его влияние на проект неясно; нужна дополнительная проверка или обратная связь.
- **Регрессия:** уже работавший сценарий сломан или ухудшился без намерения.
- **Шум сравнения:** тест выполнен в других условиях, выбран другой файл или изображение сравнивалось при ином масштабе.
Не смешивайте исправления с подтверждением теста. Если обнаружилась регрессия, заведите отдельную запись, поправьте исходник, экспортируйте новую сборку и снова прогоните весь набор. Проверка только проблемной строки может пропустить побочный эффект повторного изменения. После последнего исправления именно последний экспорт становится кандидатом на выпуск; прежний экранный просмотр не подтверждает файл, который вы сохранили позже.
Мини-чеклист перед выпуском
- Эталон и новая сборка хранятся раздельно и однозначно подписаны.
- Тестовые строки одинаковы, а условия сравнения зафиксированы.
- Проверены состав символов и заявленные новые знаки.
- Формы, пары, интервалы, метрики и проблемные места просмотрены.
- Открыты копии существующих макетов, которые важны проекту.
- Все отличия объяснены или записаны как блокирующие.
- После последней правки проверен именно итоговый экспорт.
- Контрольная страница и краткий результат проверки сохранены рядом с кандидатом выпуска.
Этот список можно сократить для маленького исправления, но не удаляйте из него постоянные проверки состава и экспорта. Для расширения набора добавляйте тест, когда реальная правка однажды сломала ранее рабочее место.
Частые ошибки при сравнении
Меняют текст теста между сборками. Сравнение разных строк не показывает, изменилась ли именно гарнитура. Сохраняйте одну версию контрольного текста и обновляйте её намеренно.
Сравнивают разные условия. Другое приложение, масштаб, кегль или включённый подменный файл способны создать ложное впечатление. Записывайте настройки и проверьте выбранную гарнитуру до оценки рисунка.
Смотрят только на изменённую букву. Ошибки проявляются в паре или абзаце: знак может стать яснее отдельно, но чрезмерно раздвинуть слово. Проверяйте и крупные формы, и контекст.
Считают любое отличие дефектом. Цель сравнения — объяснить разницу, а не добиться одинаковых снимков. Сопоставляйте каждый эффект с задачей изменения и влиянием на старые макеты.
Проверяют промежуточный экспорт. Исправили контур после просмотра — значит, прежний просмотр больше не подтверждает релизный файл. Привяжите результат теста к конкретному сохранённому файлу и повторите прогон.
FAQ
Сколько строк нужно для регрессионного теста шрифта?
Фиксированного числа нет. Начните с короткой страницы, которая покрывает обязательные знаки, трудные пары, цифры, пунктуацию и типичный текст проекта. Если проверка занимает слишком много времени и её пропускают, сократите набор до самых диагностичных строк.
Нужно ли сравнивать файл картинками наложением?
Наложение полезно для поиска смещения и изменения контура, но его нельзя трактовать как автоматический вердикт. Смотрите на изображение при одинаковых настройках, затем читайте результат в словах и макетах. Для многих решений достаточно двух страниц рядом и внимательного визуального просмотра.
Что делать, если новая версия меняет перенос строки?
Сначала проверьте, какой именно знак изменил длину строки и было ли изменение ширины запланировано. Затем оцените важность макета: заголовок, подпись или колонка могут требовать отдельной коррекции. Зафиксируйте решение и проверьте копию документа после финального экспорта.
Нужно ли тестировать каждую букву отдельно?
Для полного набора полезно иметь строку, где можно заметить отсутствующие символы, но не обязательно оценивать каждый знак изолированно после любой мелкой правки. Уделяйте отдельный осмотр знакам, которых касалось изменение, и их характерным соседям; постоянный набор должен проверять наиболее рискованные сценарии.
Можно ли считать список тестов неизменным?
Сохраняйте стабильное ядро, чтобы сравнение между выпусками оставалось осмысленным. Дополняйте его после появления новых требований или найденной регрессии, а изменение самого теста отмечайте отдельно. Не заменяйте весь набор только потому, что новая версия выглядит лучше на другой фразе.
Как понять, что тест пройден?
Тест пройден, когда ожидаемые изменения подтверждены, обязательные сценарии работают, а непреднамеренные отличия устранены или признаны допустимыми конкретным проектом. Запишите версию и результат рядом с файлом кандидата, чтобы решение относилось к точной сборке.
Итог
Регрессионная проверка делает выпуск шрифта предсказуемее: вы сравниваете одну и ту же контрольную страницу, прежние макеты и итоговый экспорт, а не полагаетесь на память. Сохраните базовую сборку, объясните ожидаемые изменения и закрепите обнаруженные ошибки как постоянные тесты. Когда нужно быстро создать или дополнить рукописную гарнитуру, начните с Fontgenerator: https://fontgenerator.ru/.