Почему на границах часто возникают баги
Что проверяют
Понимаете ли вы, откуда граничные дефекты берутся в коде, и умеете ли выбирать значения для проверки. Названия техники мало: спросят, какие именно числа вы подставите и почему.
Как отвечать
Граница это точка, где меняется поведение системы: срабатывает условие, значение перестаёт помещаться в тип, алгоритм уходит в другую ветку. Условие пишет человек, и ошибка на единицу (< вместо <=, i <= arr.length) в середине диапазона невидима: и 50, и 60 обрабатываются одинаково, разница проявляется ровно в одной точке.
Типичные источники:
- неоднозначная формулировка: «до 100 символов» включительно или нет, в требованиях не сказано, фронт и бэк поняли по-разному;
- рассинхрон слоёв: маска ввода режет на 50 символах, API принимает 60, колонка в базе 50;
- пустые и одиночные случаи: ноль элементов, один элемент, последняя страница пагинации;
- типы: переполнение, потеря точности у дробных, даты на стыке суток, месяца и часового пояса.
Техника простая: для каждого класса эквивалентности беру саму границу и соседние значения. Для поля «возраст от 18» это 17, 18, 19, плюс ноль, отрицательное и нечисловое. Вариант из двух точек (граница и первое значение за ней) считается минимумом, вариант из трёх ловит ещё и ошибку в самой константе.
Где спотыкаются
Путают причину с обнаружением и отвечают «баги на границах, потому что их плохо тестируют». Слабое тестирование объясняет, почему дефект дожил до релиза, а появляется он из-за условия в коде.
Проверяют только числовые диапазоны. Границы есть у длины строки, размера файла, количества элементов в корзине, срока действия ссылки, размера страницы в выдаче, и именно там дефекты доживают до прода.
Берут границу из интерфейса, а не из требований и схемы данных. Поле ограничено маской, кандидат отчитывается «проверено», а тот же запрос через API проходит с большим значением и валит обработку.