В прошлой статье мы рассмотрели книгу Ли Копланда, посвященную разработке тестов программного обеспечения. К сожалению, без многочисленных примеров, рассмотренных в той книге, не весь материал обзора оказался понятен читателям, как я узнала из комментария. Поэтому предлагаю рассмотреть хотя бы некоторые интересные примеры из книги.
В первом примере, который мы рассмотрим, предлагается найти с помощью программного кода тестовые значения, при которых ошибка будет обнаружена:
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. При тестировании методом черного ящика, с применением техники граничных значений, должны быть проверены, в первую очередь, именно эти значения, находящиеся на границе классов.
Если Вы давно изучали этот материал и хотите его повторить, можно прочитать предыдущую статью по этой теме:
Подписывайтесь, чтобы найти ответы на все свои вопросы по теме тестирования. Если появятся вопросы, задавайте в комментариях.