Найти в Дзене
Будни тестировщика

Базовые случаи, граничные случаи, угловые случаи.

Продолжим наше изучение сенсорного датчика давления. Пройдя через различные тестовые ситуации (тест-кейсы), мы можем понять, что они различаются по своей распространенности. Бóльшую часть времени давление либо будет нормальным, либо немного меньше, либо немного больше. Каждый из таких случаев является базовым (base case) — система работает с ожидаемыми параметрами в обычном режиме.

Ситуация, когда входные значения лежат за границами нормальных рабочих параметров или приближаются к тем пределам, которые еще может обработать система, называется граничным случаем (edge case). Граничным случаем является дыра в шине и падение давления до нуля. Другим случаем станет то, что кто-то забыл про подключенный насос, и из-за этого давление подскочило до 200 PSI, что является максимально допустимым значением для шины.

Угловые случаи (corner case, иногда называемые патологическими случаями) относятся к ситуациям, когда сразу несколько составляющих работают неправильно в одно и то же время, или значение, грубо говоря, совершенно не попадает в диапазон ожидаемых значений. В качестве примера можно привести датчик значения шины, получающий значение 2 млрд PSI, что значительно выше давления внутри ядра Земли. В качестве другого примера можно привести шину, лопнувшую в тот момент, когда датчик ломается и пытается отправить сообщение об ошибке.

Хотя я использовал простую функцию с относительно хорошо заданными входными и выходными значениями, базовые случаи, граничные случаи и угловые случаи могут быть определены и изучены через другие виды операций. Рассмотрим интернет-магазин. Для тестирования корзины покупателя возможны следующие базовые случаи:

1. Добавить товар в пустую корзину.

2. Добавить товар в корзину, в которой уже присутствует товар.

3. Удалить товар из корзины, в которой уже присутствует товар.

Это всё счастливые пути — данные являются валидными, обычными, а проблемы отсутствуют. Нет ошибок и не возникают исключения, скорее всего, их создаст пользователь, система работает нормально и т. д. Теперь давайте рассмотрим граничные случаи:

1. Пользователь пытается добавить 1000 единиц товара в корзину одновременно.

2. Пользователь пытается нажать кнопку Удалить в корзине, которой нет товаров.

3. Пользователь открывает и закрывает корзину множество раз, ничего при этом больше не делая.

4. Пользователь пытается добавить в корзину товар, которого нет на складе.

Все эти случаи могут произойти, но они не "нормальные". Они могут потребовать специальных обработчиков ошибок (таких, как попытка удалить товары из пустой корзины или добавить товар, которого нет в продаже), иметь дело с большими числами (например, добавление 1000 предметов) или нагружать систему странным способом (открывать и закрывать корзину снова и снова).

В итоге угловые случаи являются случаями, в которых возникают самые разрушительные проблемы или задействуются очевидно плохие данные. Несколько примеров:

1. Товар, который был в наличии на момент загрузки страницы, закончился на складе перед тем, как пользователь нажал кнопку Добавить в корзину.

2. Система получает запрос добавить 1080 товаров (что примерно соответствует количеству атомов во Вселенной) в корзину.

3. Память, в которой хранилось содержимое корзины, оказалась повреждена.

Угловые случаи часто включают в себя катастрофические сбои (потерю сетевого соединения, поломку ключевой подсистемы), генерацию полностью неправильных данных или множественные сбои, произошедшие одновременно.