Какие проверки нужны для проверки прохода по цепочке из трех элементов?
Что проверяют
Умеете ли вы сначала уточнить расплывчатое требование, а потом разложить его на проверки техниками тест-дизайна. «Цепочка из трёх элементов» может быть связным списком, а может быть процессом из трёх шагов, и интервьюер смотрит, спросите ли вы об этом. Следом обычно просят: а если элемент в середине отвалится?
Как отвечать
Спросите, что за цепочка, а если ответа нет, разберите оба прочтения.
Если это структура данных, например список A → B → C:
- порядок: обход возвращает ровно A, B, C, каждый элемент один раз;
- завершение: у C ссылка
nextпустая, обход останавливается, а не уходит в бесконечность; - целостность связей: у B пропала ссылка на C, обход возвращает A, B и не падает с
NullPointerExceptionилиAttributeError; - цикл: C ссылается на A, обход это обнаруживает, а не зависает;
- граница по количеству: 0, 1, 2, 3 и 4 элемента. Функция, написанная «под три», часто ломается на соседних значениях;
- двусвязный вариант: обход назад даёт C, B, A, а ссылки
prevсогласованы сnext.
Если это процесс, например заказ, оплата, доставка или цепочка обработчиков:
- успешный проход: все три шага выполнились в нужном порядке, данные дошли без искажений;
- сбой на каждом шаге по очереди: на первом, втором, третьем. Если шаги независимы и идут параллельно, перебираются все 8 комбинаций успеха и отказа;
- что после сбоя: цепочка останавливается, предыдущие шаги откатываются или компенсируются, пользователь видит понятную ошибку;
- повтор: повторный запуск после сбоя не выполняет первый шаг дважды, например не списывает деньги второй раз.
Где спотыкаются
Отвечают, не уточнив, о какой цепочке речь, и тратят время на проверки не той системы.
Проверяют только счастливый путь A → B → C. Интервьюера интересуют разрыв, цикл и сбой в середине.
Забывают про границы по количеству элементов и про повторный запуск. Именно там живут ошибки на единицу и двойные списания.