Выбор стран для тестовых данных — это не вкусовое решение и не список любимых рынков, а проектирование набора, от которого зависят все последующие проверки. Как только вы определили, какие страны попадут в набор, вы одновременно определили, какие дефекты сможете поймать, а какие пройдут мимо и всплывут уже в рабочей среде. Поэтому набор стран стоит выбирать так же осознанно, как выбирают тестовые сценарии: по осям, с обоснованием и с версией.
Ниже разберём три оси выбора, роль крайних случаев, отдельное место для стран, у которых нужного поля просто нет, и способ держать весь набор под контролем.
Зачем вообще выбирать страны, а не взять все подряд?
Соблазн простой: взять полный перечень и проверять на всём сразу. На практике это решение почти всегда проигрывает. Полный перечень означает десятки наборов полей, длинные прогоны и расплывчатое сообщение об ошибке: непонятно, дело в стране, в конкретном поле или в самом правиле. Когда падает проверка на одной стране из шестидесяти, разбирательство занимает больше времени, чем была бы вся выборка.
Второй довод ещё важнее. Полный перечень создаёт иллюзию, что разные страны — это разные случаи одного и того же. На самом деле большая часть перечня ведёт себя одинаково: те же обязательные поля, тот же порядок ввода, те же ограничения. Различия сосредоточены в нескольких десятках мест, и именно их нужно ловить адресно. Небольшой обоснованный набор находит эти места быстрее и объясняет их понятнее.
Третий довод — стоимость поддержки. Каждая страна в наборе требует примера адреса, примера документа и объяснения, почему значение выглядит именно так. Набор из шестидесяти стран быстро устаревает, и через полгода уже никто не помнит, зачем в нём была конкретная строка.
Три оси выбора: доступность, сложность данных и крайние случаи
Отбирать страны удобно по трём независимым осям. Они не пересекаются, и это их главное достоинство: по каждой оси можно вести отдельный разговор и не путать причины.
- Деловая доступность. Есть ли у продукта доставка, платежи, расчёт и поддержка в этой стране. Если страна не обслуживается, её данные всё равно нужны, но уже как проверка отказа, а не как проверка оформления заказа.
- Сложность данных. Использует ли страна другую письменность, другую длину строк, другой набор уровней адреса. Сюда же попадает всё, что заставляет форму перестраиваться.
- Пограничная ценность. Крайние случаи: очень маленькая территория, очень густонаселённый рынок, местность с необычно длинными названиями.
Оси независимы настолько, что одна и та же страна может попасть в набор по разным причинам. Если это произошло, стоит записать, какая из осей решающая: иначе при чистке набора страну удалят не подумав, и вместе с ней уйдёт единственная проверка на длинную строку.
Какой набор стран считается достаточным по умолчанию?
Практичный набор по умолчанию состоит из трёх частей, и пропуск любой из них оставляет целый класс дефектов без проверки.
- Основная страна. Там, где продукт работает чаще всего и где сосредоточены основные сценарии. Это база, с которой сравнивают всё остальное.
- Несколько крупных рынков. Две-четыре страны с другой письменностью, другой длиной полей или другим набором уровней адреса.
- Крайние случаи. Одна-две записи, специально выбранные за неудобство: маленькая территория, самая длинная строка, местность без привычных уровней адреса.
Такая тройка объясняется за минуту и защищается на любом обсуждении. У неё есть и скрытое достоинство: она остаётся маленькой. Когда набор мал, каждую строку можно осмысленно назвать, а значит, любое удаление и добавление проходит через вопрос «что мы перестанем проверять».
Какие страны дают крайние случаи?
Крайний случай — это не экзотика ради экзотики, а измеримая нагрузка на интерфейс и на разбор данных. Полезнее всего те страны, где какое-то значение оказывается заметно длиннее или короче привычного.
Самые продуктивные крайние случаи такие:
- местность с очень длинным составным названием административной единицы;
- город, название которого длиннее, чем рассчитана колонка в таблице;
- страна, где в адресе больше уровней, чем в основной стране набора;
- страна, где уровней меньше, и привычное поле остаётся пустым;
- территория, у которой поля формально есть, но заполняются они не так, как ожидает форма.
Каждый из этих случаев проверяет конкретную вещь. Длинное название ловит обрезку строки и переполнение колонки. Лишний уровень ловит форму, которая жёстко знает, сколько полей ей показывать. Пустое поле ловит правило обязательности, написанное без учёта того, что поля может не быть вовсе.
Что делать, если у страны нет нужного поля?
Это самая недооценённая часть набора. В разных странах у адреса разный состав уровней, а почтовый индекс есть далеко не везде. Если в наборе только страны с полным набором полей, правило обязательности никогда не столкнётся с честным отсутствием значения.
Дальше происходит предсказуемое: на реальных данных форма требует заполнить поле, которого у пользователя нет, и не пропускает корректный адрес. Дефект выглядит как проблема конкретного человека, хотя на самом деле это дефект правила.
Отсюда требование к набору: в нём должны быть представлены три разных состояния. Поле применимо и заполнено; поле к этой стране не применяется вовсе; поле должно быть, но данных нет. Третий случай отличается от второго, и путать их нельзя: во втором случае отсутствие значения правильно, в третьем — это пропуск, который нужно найти. Разбор этих состояний подробно разобран в материале про список покрытия данных по странам.
Набор стран имеет смысл держать рядом с источником, из которого берутся значения. Отдельно взятый список стран без признака происхождения бесполезен: через полгода непонятно, откуда взялся формат, описанный в комментарии к тесту.
Практичный порядок такой: у каждой строки набора есть код страны, короткое пояснение, зачем она в наборе, и признак, из какого описания взяты её значения. Тогда при расхождении видно, ошибается тест или устарело описание. Как вообще устроена свежесть таких описаний и что с ней делать, разобрано отдельно в статье про актуальность данных о странах.
Полезно и обратное движение: время от времени открывать каталог стран и регионов и сверять, все ли страны набора по-прежнему там описаны так, как вы ожидаете. Каталог показывает страны и регионы сгруппированными, поэтому удобно проверять, не выпала ли какая-то часть мира из вашего набора целиком.
Что стоит помнить о крупных рынках набора
Крупный рынок не становится «похожим» только из-за размера. Наоборот, именно там чаще всего обнаруживается, что настройки по умолчанию были подогнаны под основную страну. Например, привычный порядок полей или привычная ширина колонки могут оказаться тесными.
Отдельно стоит проверить, как ведёт себя набор при переключении между странами внутри одной формы: остаются ли значения предыдущей страны, пересчитываются ли зависимые поля, не подставляется ли прежний город к новой стране. Такие дефекты видны только тогда, когда в наборе действительно несколько стран, а не одна.
Что важно разработчику
Первое: держите набор стран одним файлом с версией. Версия меняется тогда же, когда меняется состав, и это записывается рядом с результатами прогона. Без версии вчерашний успешный прогон нельзя сравнить с сегодняшним: непонятно, изменился продукт или изменился набор.
Второе: заведите правило для добавления страны. Оно простое: новая строка попадает в набор только вместе с ответом на вопрос, какую проверку она добавляет. Страна без ответа — это не покрытие, а вес.
Третье: не используйте настоящие сведения о людях и организациях. Примеры адресов и документов собираются как демонстрационные значения, а не берутся из чужих выгрузок. Удалить настоящую строку из набора задним числом сложнее, чем не добавлять её.
Четвёртое: отделяйте набор стран от правил проверки. Набор отвечает на вопрос «что мы проверяем», правила — на вопрос «как». Когда эти две вещи смешаны, любое расширение набора превращается в правку логики.
Что делать дальше
Начните с малого: соберите тройку «основная страна, один крупный рынок, один крайний случай» и опишите словами, что именно проверяет каждая строка. Затем посмотрите на каталог стран и регионов и отметьте, какие части мира в наборе не представлены вовсе, — обычно там обнаруживается целая группа, о которой никто не думал.
Дальше логично перейти к теме измерения: как понять, что набор действительно покрывает то, что о нём заявлено, и как отличить «нет данных» от «здесь этого поля не бывает». Этому посвящён материал про список покрытия данных по странам, а про то, откуда берётся расхождение между описанием и реальностью, — статья про актуальность данных о странах.
Заодно стоит зафиксировать: примеры, приведённые в этой статье, придуманы автором как условный материал для объяснения устройства набора. Они не описывают реально существующие государства, ведомства или организации и не являются образцом документа, подтверждением места жительства либо основанием для какой-либо заявки.