
Привет, Хабр!
Мы — Алевтина Чугунова (владелец продукта дизайн‑системы) и Дарья Каткова (QA‑инженер). В этой статье расскажем, как создаём и тестируем дизайн‑систему, с какими проблемами сталкивались и какие инструменты разработали, чтобы упростить жизнь себе и командам.
Вы узнаете:
-
Что такое дизайн‑система и зачем она нужна.
-
Как тестировать интерфейсы без боли.
-
Какие инструменты помогают автоматизировать проверки.
Что такое дизайн-система и когда она особенно нужна?
Если загуглить определение, то можно наткнуться на что-то вроде:
Дизайн-система — это набор правил и инструментов для визуального и технического исполнения, который отражает философию продукта и постоянно развивается.
Звучит довольно сложно, поэтому мы для себя дизайн-систему определили как «ДНК продукта, приложения и бренда». И, как настоящая ДНК, она состоит из основных компонентов:
-
Бренд — то, что представляет визуальный язык продукта (цвета, шрифты, айдентика).
-
UI Kit — готовые компоненты для дизайнеров (кнопки, карточки, формы).
-
Фреймворки — библиотеки для разработчиков.
Когда дизайн-система — must have?
-
У вас не стартап. Стартапам выбирать не приходится, и часто они экономят на системности ради скорости.
-
Много команд или продуктов. Дизайн‑система ускоряет разработку и тестирование.
-
Выпуск фич идёт медленно. Если люди тратят больше времени на вёрстку и отступы, чем на бизнес‑логику, то пришло время централизовать интерфейс.
А что было до дизайн-системы? Раньше команды сталкивались с хаосом:
-
Дефекты в интерфейсах доходили до пользователей. Интерфейс — это, буквально, лицо продукта, и любые ошибки здесь сразу бросаются в глаза.
-
Не было единообразия приложений на разных платформах. Версии под iOS и Android выглядели как разные приложения, а веб‑версия вообще жила своей жизнью.
-
Не было единой точки контроля визуальной составляющей продуктов. То есть не было человека или команды, отвечающей за внешность интерфейсов.
-
Тестировать интерфейсы было мучительно, ведь не было удобных инструментов.
Как тестировать дизайн-систему?
Дизайн-система — это единый источник истины. Если в кнопке баг, то он будет во всех продуктах, использующих эту кнопку. Поэтому тестирование должно быть максимально надёжным. В первую очередь нужно проверять:
-
функциональность;
-
адаптивность (как компонент выглядит на маленьком и большом экранах);
-
кроссбраузерность;
-
работу с системными элементами.
Особенности функционального тестирования
Функциональное тестирование в обычных продуктах подразумевает проверку бизнес-логики. Например, создание заявки или оформление заказа.
В дизайн-системах тоже есть функциональное тестирование, и оно подразумевает под собой проверку работы компонентов. Потому что компоненты наделены своей логикой и могут быть в разных состояниях:

Кроссбраузерность
Отдельной болью для нас стал браузер Safari. В нём есть свои особенности обработки контейнеров, из-за этого наши компоненты иногда непредсказуемо себя ведут.
Работа с системными элементами
В мобильных версиях нужно учитывать работу с системными элементами. Например, с панелью навигации внизу экрана. На данный момент они бывают в виде обычной панели навигации, состоящей из трех кнопок, либо Home Indicator — тонкой полоски внизу экрана, для навигации жестами.
Проблемы могут возникнуть именно с полоской. Если её не учесть и разместить какую-либо кнопку прямо под этой областью, то её будет плохо видно, а в некоторых случаях на кнопку невозможно будет нажать.

Инструменты для визуализации
Дизайн-систему нужно уметь тестировать. И без инструментов — никак. Компонентов становится всё больше, состояний — десятки, токенов — сотни. Нужна живая среда, где можно быстро показать компонент, отладить параметры, переключить тему и сразу увидеть баги. Именно такую среду мы выстраивали для нашей дизайн-системы. В этой главе мы расскажем о ней, подходах и примерах, которые помогли нам вывести тестирование интерфейса на новый уровень.
Для веба: Storybook
Storybook — отличный инструмент для документации компонентов с открытым исходным кодом, написан на JavaScript и предназначен для организации пользовательских интерфейсов. То есть он прямо из кода UI-компонентов генерирует полноценную документацию.
Так мы храним в Storybook наши иконки и цветовую палитру:


Сюда же встроена песочница: возможность интерактивно менять параметры компонента и сразу смотреть, как он себя ведёт. QA активно используют её для проверки багов, а аналитики — чтобы убедиться, что компонент подойдёт под конкретную задачу.
Регулярное обновление Storybook — часть нашего процесса. С каждым релизом библиотеки мы выкатываем свежую версию документации, и пользователи дизайн-системы всегда получают актуальную информацию.

Для мобилок: самописный инструмент
На мобильных платформах аналогов Storybook просто нет. Поэтому мы создали своё демо‑приложение, которое выполняет ту же функцию. Главный экран разбит на ключевые разделы:
-
Компоненты: каталог всех компонентов библиотеки, примеры использования;
-
Документация для тестировщиков и разработчиков;
-
Цвета: визуализация токенов по ролям и темам;
-
Шрифты: отображение типографики в разных контекстах;
-
Иконки: с возможностью посмотреть размеры и контраст;
-
Лаборатории: отдельные экраны для проверки визуальных нюансов.
Один из самых важных экранов — демонстрация компонента. Ниже показан наш компонент Bubble, который позволяет визуализировать переписки в мессенджерах. Под ним расположен список его параметров: тут можно изменять состояния, тему (светлую или темную), увидеть работу компонента на устройстве в реальных условиях, что особенно важно для тестирования.

Также по каждому компоненту у нас есть документация. Тестировщик перед ручным тестированием или написанием автотестов может посмотреть, что умеет делать компонент и как с ним работать:

Дополнительно мы собираем примеры использования. Любой разработчик может скопировать код и работать с уже готовым примером. Например, с собранной перепиской, составленной из компонента Bubble.

Также есть отдельный экран для наших цветов. Они все располагаются в одном месте и можно посмотреть, корректно ли они отображаются в светлой и тёмной темах. Иконки у нас разделены на Filled (залитые сплошным цветом ) и Outline (контурные). А также отдельно храним наши шрифты.

Инструменты, о которых нельзя молчать
Разобрались, как можно визуализировать дизайн‑систему, а теперь посмотрим, как её тестировать. Снова проведём параллель с вебом.
Когда вы проверяете интерфейсы в вебе, у вас всегда под рукой DevTools. С их помощью можно быстро протестировать вёрстку. Видны самые главные отступы, все стили, цвета и шрифты. И если вы используете дизайн‑систему, то будет видно ещё и название класса. Оно будет уникальным и соответствовать названию компонента.
В iOS в Xcode мы можем посмотреть всю иерархию интерфейса — View Hierarchy. В XCode эта функция также довольно просто устроена, можно подробно посмотреть все размеры, отступы и слои.
А вот в Android всё не так просто. В Android Studio есть встроенный инструмент Layout Inspector, но у него есть ограничения:
-
не все отступы отображаются, их сложно искать;
-
работает с Compose хуже, чем с традиционными View;
-
при работе со сложными иерархиями может тормозить;
-
иногда не показывает структуру компонентов;
-
нет визуальной подсветки на экране самого приложения.
Поэтому мы создали Debug Overlay — собственный инструмент, который даёт тестировщикам, дизайнерам и разработчикам под Android то, что уже давно есть на других платформах.
Debug Overlay
Debug Overlay — это вспомогательный инструмент визуального тестирования UI‑компонентов на Android, встроенный в каждое приложение, использующее дизайн‑систему. Он запускается в stage‑сборке, не попадает в прод и позволяет поверх интерфейса видеть:
-
границы компонентов;
-
их отступы и размеры;
-
вложенность компонентов внутри сложных блоков;
-
принадлежность к дизайн‑системе.
Инструмент лёгкий, не имеет отдельного интерфейса и запускается через стандартный набор кнопок разработчика в системных настройках Android. Мы сознательно делали его максимально «невидимым» в обычной работе, но при этом мощным в нужный момент.
В нашем демо-приложении есть переключатель, который позволяет включить Debug Overlay в любой момент:

Благодаря этому Debug Overlay можно использовать без специальных знаний: достаточно одного переключателя, чтобы получить всю информацию о визуале. Это не просто помощник для тестировщика, это способ сделать дизайн‑систему прозрачной, проверяемой и внедряемой. Благодаря ему:
-
мы ловим баги до релиза;
-
не тратим часы на субъективные «визуальные замечания»;
-
обучаем команды использовать ДС правильно;
-
и просто экономим время всех участников команды.
Чем он полезен?
Проверка отступов и размеров. Debug Overlay позволяет наглядно проверить соответствие отступов между компонентами. Для QA это ключевой способ верификации визуального качества интерфейса.
Проверка составных компонентов. Многие компоненты в дизайн‑системе — составные. Сложные карточки, формы, поля. Debug Overlay позволяет не только увидеть весь компонент, но и разобрать его на атомы: текст, иконку, отступ, кнопку.
Выявление «неправильных» компонентов. Благодаря встроенной логике Debug Overlay подсвечивает только компоненты дизайн‑системы. Если элемент не подсветился — это повод насторожиться: возможно, используется кастомное решение или обёртка. Это особенно важно при аудите, когда нужно быстро понять, где в продукте нарушена согласованность или почему компонент «ведёт себя странно».
Кто и как использует Debug Overlay?
Тестировщики. QA используют Overlay при финальном прогоне: проверяют отступы, выравнивание, соответствие компонентов требованиям. Это даёт уверенность, что интерфейс собран корректно и не поползёт после релиза.
Дизайнеры. Дизайнеры подключают Overlay, чтобы визуально свериться с макетом, особенно в случае адаптивов или пограничных случаев. Это избавляет от субъективных «кажется, не так», и превращает «ревью» в факт.
Разработчики. Иногда Debug Overlay — это способ самопроверки. Разработчик, подключая компонент, может убедиться, что взял именно тот блок из дизайн‑системы и что он отображается корректно.
Команда дизайн‑системы. Для нас это способ мониторинга: насколько активно и правильно используется дизайн‑система. Debug Overlay показывает, кто и где отходит от стандартов. Это помогает не только исправлять баги, но и обучать команды.
Когда мы подключаем Debug Overlay в продуктах других команд, он показывает, сколько элементов собраны на ДС, а сколько — на костылях. Это помогает планировать миграции и улучшать визуальное качество всего портфеля.
Лаборатории: как мы тестируем шрифты и тени
Лаборатории — это наша гордость. Когда мы проводили редизайн в дизайн‑системе, стало ясно: шрифты, тени и даже отступы ведут себя по‑разному в runtime, особенно в Android. Визуально компонент может выглядеть «почти как в макете», но не совпадать на пиксель. Поэтому мы сделали специальные экраны в демо‑приложении для проверки шрифтов и теней.
Проверка шрифтов
Для своих брендов большие компании чаще всего заказывают индивидуальные шрифты. У Сбера это SB Sans. Но подобные шрифты в макетах ведут себя одним образом, а в реальности — совершенно иначе, отображаются некорректно. Поэтому в Лаборатории шрифтов мы проверяем, как ведут шрифты при разных настройках:
-
в многострочных полях;
-
в жирном начертании;
-
при системном масштабировании;
-
при выравнивании и обрезке.
Это особенно критично для Android, где контейнеры могут случайно «отрезать» нижнюю линию текста или уехать на пару пикселей.
Проверка теней
В макете тень — это просто elevation. В коде — offset, blur и alpha. Мы вручную подбираем визуальное соответствие и фиксируем его в токенах. Благодаря Лаборатории мы добились точного соответствия между макетом и реализацией.

Theater: как мы снимаем «кино» про интерфейсы без операторов и монтажа
Когда мы рассказываем о дизайн‑системе пользователям или заказчикам, статичные скриншоты часто не передают всей картины. Как нам в картинках наглядно показать:
-
как плавно раскрывается «аккордеон»?
-
как кнопка реагирует на нажатие?
-
что происходит при ошибке в форме?
Теперь у нас есть Theater — библиотека, которая превращает код в профессиональные демо‑ролики. С её помощью можно получить нужное видео за 5 минут вместо нескольких часов съёмки. Theater автоматически генерирует видео работы интерфейсов прямо из кода (никаких ручных скриншотов и монтажа), а также позволяет проверить анимации на соответствие руководствам (тайминги, плавность, состояния).
Библиотека работает по принципу кинопроизводства. У нас есть «актёр», «сюжет» и «сцена».
Актёр (Actor) — это «герой»нашего ролика: любой UI‑компонент. Например, кнопка.
private class IconButtonActor : Actor { var variant by mutableStateOf(startVariant) var loading by mutableStateOf(value: false) var size by mutableStateOf(startSize) var shape by mutableStateOf(startShape) var color by mutableStateOf(startColor) var disabled by mutableStateOf(value: false) var icon by mutableStateOf(Flamingo.icons.User) @Composable override fun ActorScope.Actor() { Box(modifier = Modifier) { IconButton( onClick = {}, icon = icon, contentDescription = null, size = size, variant = variant, color = color, shape = shape, loading = loading, disabled = disabled ) } } }
Сюжет (Plot) — сценарий поведения: какие действия выполняет компонент.
private val iconButtonPlot = Plot<IconButtonActor, FlamingoStage> { hideEndScreenActor() layer0.animateTo( rotationX = 0f, rotationY = 0f, scaleX = 2.30393f, scaleY = 2.30393f, translationX = 0f, translationY = 0f, ) delay(timeMillis = 1000) leadActor.shape = IconButtonShape.SQUARE delay(timeMillis = 1000) leadActor.shape = IconButtonShape.CIRCLE delay(timeMillis = 1000) leadActor.indicator = IconButtonIndicator( IndicatorColor.DEFAULT, IndicatorPlacement.TOP_END ) delay(timeMillis = 1000) leadActor.loading = true delay(timeMillis = 1000) leadActor.loading = false delay(timeMillis = 1000) }
Сцена (TheaterPackage) объединяет актёров и сюжеты в готовый «фильм»:
class TheaterPkg : TheaterPackage { override val play: TheaterPlay<*, *> = TheaterPlay( stage = FlamingoStage(), leadActor = IconButtonActor(), cast = listOf( IconButtonTableActor() ), sizeConfig = TheaterPlay.SizeConfig( density = Density(density = 4f) ), plot = iconButtonPlot, backstages = listOf( Backstage( name = "Icon Button", actor = IconButtonActor() ), Backstage( name = "Icon Button Table", actor = IconButtonTableActor() ) ) ) }
За кулисами (бекстейдж). Самое сложное здесь — это анимация. Но разработчики упростили нам жизнь: добавили в демо-приложение экран режиссирования. Здесь мы можем настроить всю сцену, попробовать разные параметры анимации и сразу увидеть, как меняется поведение компонента.

Советы по тестированию интерфейса
Тестирование интерфейса — это не просто «проверить, чтобы выглядело нормально». Это комплексная проверка визуальной целостности, поведения и устойчивости интерфейса в разных условиях. У нас есть чек‑лист, в котором отражён структурированный подход к тестированию компонентов. Мы проверяем:
Визуальную целостность:
-
Геометрию:
-
точность размеров и отступов (кратность 8 px);
-
скругления углов, толщина границ;
-
выравнивание элементов по сетке;
-
-
Типографику:
-
размер, межстрочный интервал, начертание;
-
контрастность текста;
-
переносы и обрезка длинных слов;
-
-
Цвета:
-
соответствие палитре дизайн‑системы;
-
корректность состояний (error, success, warning).
-
Поведение компонентов:
-
Состояние:
-
Hover,Pressed,Active; -
Disabled— недоступные для взаимодействия элементы должны отличаться; -
Loading— должны отображаться крутящиеся индикаторы загрузки; -
Error— должно быть сообщение об ошибке, подсвеченное красным цветом;
-
-
Динамику:
-
плавность анимаций;
-
отсутствие «миганий» при переходах;
-
ripple‑эффекты.
-
-
Обратную связь:
-
изменение курсора — при наведении на кликабельные элементы курсор должен принимать вид указательного пальца (pointer);
-
визуальный ответ на действия (например, тень при нажатии).
-
Адаптивность:
-
Разные устройства:
-
телефоны (в том числе складные смартфоны);
-
планшеты;
-
десктоп‑версия.
-
-
Ориентации:
-
портретная;
-
альбомная.
-
-
Платформенные различия:
-
Safe Area в iOS;
-
навигационные панели в Android.
-
Темы:
-
светлая;
-
тёмная;
-
кастомные.
Качество интерфейса — это не только про пиксели, но и про предсказуемость поведения в любых условиях. Поэтому главный принцип: тестируйте не «как выглядит», а «как работает». Внедрите чек‑листы для компонентов, документируйте граничные случаи и не забывайте про accessibility.
Итоги: что даёт дизайн-система?
-
ускорение разработки: меньше времени на рутину;
-
качество: меньше багов в проде;
-
единообразие: один стиль на всех платформах.
Результаты можно оценить численно. Вот что дало внедрение нашей дизайн‑системы:

Дизайн-система поможет вашему продукту стать популярным. И если она будет удобная, качественная и протестированная, то и польза от неё будет выше.
ссылка на оригинал статьи https://habr.com/ru/articles/931210/
Добавить комментарий