Какие базовые практики тест-дизайна существуют?
Что проверяют
Умеете ли вы выбирать тесты осмысленно: ловить максимум дефектов минимумом проверок, а не перебирать всё подряд. Python-разработчику следом обычно предлагают тут же набросать тесты на pytest для функции с диапазоном или несколькими параметрами.
Как отвечать
Назовите основные техники и сразу покажите, как они ложатся на код:
- классы эквивалентности: входы делятся на группы, которые система обрабатывает одинаково, из каждой берётся одно значение. Для поля «возраст от 18 до 65» это один валидный класс и минимум два невалидных, меньше 18 и больше 65, плюс нечисловой ввод и пустое значение;
- граничные значения: ошибки чаще всего живут на краях, поэтому проверяют 17, 18, 65, 66, а в трёхточечном варианте ещё 19 и 64. В
pytestэто один тест с@pytest.mark.parametrizeи таблицей значений; - таблица решений: когда результат зависит от сочетания условий (скидка от суммы, статуса клиента и промокода), каждое правило таблицы становится тестом;
- переходы состояний: для сущностей с жизненным циклом, например заказ «создан, оплачен, отправлен, отменён». Проверяют и разрешённые переходы, и запрещённые: отменить отправленный заказ нельзя;
- попарное тестирование: при многих параметрах полный перебор взрывается, а большинство дефектов вызывает сочетание двух факторов. Инструменты вроде PICT строят набор, где каждая пара значений встречается хотя бы раз;
- предугадывание ошибок: опыт подсказывает, где ломается:
None, пустая строка, Unicode, очень длинный ввод, часовые пояса; - тестирование свойств: библиотека Hypothesis сама генерирует входные данные и проверяет инварианты, например что декодирование закодированной строки возвращает исходную.
Где спотыкаются
Забывают невалидные классы. Тестируют только корректный ввод, а приложение падает на пустом поле или отрицательном числе.
Путают классы эквивалентности с границами и берут «середину диапазона» вместо значений у самого края.
Приводят пример попарного тестирования с двумя параметрами. Для двух параметров все пары и есть полный перебор, выигрыш появляется с трёх параметров и больше.