Пособие для начинающих тестирования: обработка ошибок на предельных случаях

posobie dlya nachinayushhih testirovaniya obrabotka oshibok na predelnyh sluchayah

Джон Лука Де Каро

Создавая сложные части программного обеспечения, независимо от языка, вы начинаете замечать закономерности в своих привычках тестирования. На разных платформах или проектах возникнут одинаковые проблемы. Независимо от того, создаете ли вы очередную простую демонстрацию списка дел для разговора или проектируете всеобъемлющий серверный механизм для стартапа PaaS, начинают появляться одинаковые общие шаблоны.

Есть шесть случаев, которые следует проверить, чтобы прояснить множество вопросов. Они не преследуют цель быть исчерпывающими или собственными полными тестами. Скорее, это легкое для запоминания подмножество общих парадигм тестирования, которые можно применить к любому языку, фреймворку или среде.

Эти случаи сразу становятся полезными в двух аспектах ежедневных программ кодирования: устранение особых проблем по мере возникновения и создания набора тестов для базы кода. Они предназначены как общие, отвлеченные формы тестирования, которые прольют свет на некоторые из самых распространенных проблем, с которыми сталкиваются младшие разработчики.

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

Шесть тестов являются следующими:

  • Нулевой
  • один
  • Два
  • От двух до максимум-1
  • макс
  • макс.+1

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

Нулевой

Ноль используется для обозначения какой-либо формы нулевого ввода, будь то undefined, null, пустой массив или просто фактическое число 0. Возможно, самой распространенной и простой формой ошибки является ссылка на нулевое значение, и она всегда требует проверки. Просто проверьте функцию, конечную точку или загрузку с помощью нулевого ввода и убедитесь, что они ведут себя правильно.

один

Единица, как и ноль, является основной формой обобщенного единого теста. Функция проверяется с первым действительным нормальным вводом. Это наиболее полезно для регрессионного тестирования. В будущих итерациях кода этот тест быстро покажет, работает ли программа (или процесс) надлежащим образом.

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

Два

Two – это не просто тестирование индекса массива 2 или того, работает ли ваш алгоритм с 2 входами. Он также охватывает происходящее, когда вы запускаете тот же код дважды.

Что произойдет, если кто-то дважды подряд отправит HTTP-запрос DELETE в один ресурс? Если функция сортировки со специальным компаратором вызывается дважды подряд, ведет ли она себя правильно?

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

Это сводится к модификации состояния и пониманию поведения функции. Если все, что у нас есть, это имя функции, тогда этот код ведет себя так, как ожидалось. У вас переменная с названием 0, вы вызываете функцию setVarToOne, а затем утверждаете, что она равна единице.

На первый взгляд это повелось точно так, как ожидалось. Однако тестирование с идеей Two подразумевает более глубокие проблемы с кодом. Вы бы проверили его, вызвав его дважды и утверждая, что в обоих случаях mVar равно 1.

От двух до максимум-1

От двух до максимум-1 – это проверка разумности. Он очень похож на тест One, но есть тонкое отличие. Это должно быть средний случай использования — не самый простой или понятный или самый легкий для чтения. Просто средний вариант использования, который, возможно, не очень прост, но это справедливо общий.

Макс

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

Если у вас простая реализация связанного списка, вы можете представить, что у вас есть, казалось бы, бесконечное количество разрешенных вставок. На самом деле существует верхний предел — будь то INT_MAX, количество дескрипторов файлов, которые может открыть ваша ОС, или просто объем памяти или дискового пространства, выделенного для вашей программы.

При определенных обстоятельствах Макс может казаться невозможным тестом, поскольку не существует известного максимума для тестирования. Однако в этих случаях цель другой природы – провести стресс-тест вашей программы.

Например, возможно, что определенная часть данных, предоставленных пользователем, сокращается и пропускается через функции, пока не достигнет определенного вами цикла. Если эти данные, скажем, INT_MAX, для завершения кода может потребоваться достаточно много времени. Хуже того, это может привести ваш код в состояние без остановки. Это могут быть тонкие проблемы, возникающие только после того, как ваш код переходит в производство, поэтому важно обнаружить их на этапе тестирования.

Макс+1

Max+1 — это тест, в основном используемый для проверки стандартов или правил, установленных программистом. Это предполагает тестирование чего-либо к его теоретическому пределу + эпсилон.

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

Если максимальный размер файла для загрузки составляет 2 Мб, попробуйте загрузить файл размером 2 Мб+1 б. Если у вас есть ограничения на количество записей в каталоге пользователей, убедитесь, что проверка происходит на обеих сторонах клиента и стороне сервера.

Вывод

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *