Найти тему

Практика тестирования. Поиск ошибок в программном коде. Классы эквивалентности и метод граничных значений

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

Изображение создано нейросетью PlaygroundAI
Изображение создано нейросетью PlaygroundAI

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

int func(int j) {

j = j - 1; // вместо j = j + 1;

j = j / 30000;

return j; }

Здесь объявлена функция типа integer, поэтому результат вычисления будет целым числом. Аргумент функции j также является целым числом. Во второй строке допущена ошибка, вместо плюса поставили минус. Автор книги предлагает найти значения аргумента, при которых ошибка будет найдена. Одно из этих чисел j = 29999, т.к. если из него вычесть единицу и разделить на 30000, то получится 0, а если прибавить 1 и разделить на 30000, то получится 1. Таким образом, тест покажет, что в вычислениях допущена ошибка. Ожидаемый и фактический результаты выполнения теста будут разными.

Если мы тестируем методом черного ящика, то вероятность найти такую ошибку очень мала. Это и хотел показать автор. Он утверждает, что значений аргумента, при которых можно найти ошибку вычисления функции, всего 4, исходя из предположения, что вычисления производятся на 16-разрядной операционной системе, а максимальное двоичное число, состоящее из шестнадцати единиц, равно 65535, поэтому при делении на 30000 максимальным значением будет 2. Попробуете сами найти остальные 3 значения аргумента от 0 до 65535, при которых находится ошибка в вычислении функции? Ответ напишите в комментарии.

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

  • от 0 до 16 не принимаются;
  • от 16 до 18 принимаются на неполный день;
  • от 18 до 55 принимаются на полный день;
  • от 55 до 90 не принимаются.

Если условие в программе реализовано следующим образом, то неизбежно возникнет ошибка на границе этих диапазонов значений:

If (Age >= 0 && Age <=16)

hireStatus="NO"; // не принимается

If (Age >= 16 && Age <=18)

hireStatus="PART"; // прием на неполный день

If (Age >= 18 && Age <=55)

hireStatus="FULL"; // прием на полный день

If (Age >= 55 && Age <=90)

hireStatus="NO"; // не принимается

В данном примере Age - это возраст кандидата, hireStatus - значение, соответствующее возможности приема на работу кандидата. В программе допущены ошибки, т.к. одни и те же граничные значения входят в разные диапазоны, поэтому ошибки возникнут для значений 16, 18, 55. При тестировании методом черного ящика, с применением техники граничных значений, должны быть проверены, в первую очередь, именно эти значения, находящиеся на границе классов.

Если Вы давно изучали этот материал и хотите его повторить, можно прочитать предыдущую статью по этой теме:

Дизайн тестов: что не так с техникой проверки граничных значений
Профессия тестировщик10 марта 2023

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