Методы тестирования программного обеспечения. Степанченко И.В. - 11 стр.

UptoLike

Составители: 

13
только в соответствии со спецификацией программы (т. е. без учета зна-
ний о ее внутренней структуре).
При таком подходе обнаружение всех ошибок в программе является
критерием исчерпывающего входного тестирования. Последнее может
быть достигнуто, если в качестве тестовых наборов использовать все
возможные наборы входных данных. Необходимость выбора именно это-
го критерия
иллюстрируется следующим примером. Если в той же задаче
о треугольниках один треугольник корректно признан равносторонним,
нет никакой гарантии того, что все остальные равносторонние треуголь-
ники так же будут корректно идентифицированы. Так, для треугольника
со сторонами 3842, 3842, 3842 может быть предусмотрена специальная
проверка и он считается неравносторонним. Поскольку программа пред-
ставляет собой черный
ящик, единственный способ удовлетворения при-
веденному выше критериюперебор всех возможных входных значений.
Таким образом, исчерпывающий тест для задачи о треугольниках
должен включать равносторонние треугольники с длинами сторон вплоть
до максимального целого числа. Это, безусловно, астрономическое чис-
ло, но и оно не обеспечивает полноту проверки. Вполне вероятно, что ос-
танутся некоторые
ошибки, например, метод может представить тре-
угольник со сторонами 3, 4, 5 неразносторонним, а со сторонами 2, А, 2 –
равносторонним. Для того, чтобы обнаружить подобные ошибки, нужно
перебрать не только все разумные, но и все вообще возможные входные
наборы. Следовательно, мы приходим к выводу, что для исчерпывающего
тестирования задачи о треугольниках требуется бесконечное число тестов.
Если такое испытание представляется сложным, то еще сложнее соз-
дать исчерпывающий тест для большой программы. Образно говоря, чис-
ло тестов можно оценить «числом, большим, чем бесконечность». Допус-
тим, что делается попытка тестирования методом черного ящика компи-
лятора с языка Java. Для построения исчерпывающего теста нужно ис-
пользовать все множество правильных программ на
Java (фактически их
число бесконечно) и все множество неправильных программ (т. е. дейст-
вительно бесконечное число), чтобы убедиться в том, что компилятор
обнаруживает все ошибки. Только в этом случае синтаксически неверная
программа не будет компилирована. Если же программа имеет собствен-
ную память (например, операционная система, база данных или система
распределенных вычислений),
то дело обстоит еще хуже. В таких про-
граммах исполнение команды (например, задание, запрос в базу данных,
выполнение расчета) зависит от того, какие события ей предшествовали,
т. е. от предыдущих команд. Здесь следует перебрать не только все воз-
можные команды, но и все их возможные последовательности.
Из изложенного следует, что построение
исчерпывающего входного
теста невозможно. Это подтверждается двумя аргументами: во-первых,
только в соответствии со спецификацией программы (т. е. без учета зна-
ний о ее внутренней структуре).
      При таком подходе обнаружение всех ошибок в программе является
критерием исчерпывающего входного тестирования. Последнее может
быть достигнуто, если в качестве тестовых наборов использовать все
возможные наборы входных данных. Необходимость выбора именно это-
го критерия иллюстрируется следующим примером. Если в той же задаче
о треугольниках один треугольник корректно признан равносторонним,
нет никакой гарантии того, что все остальные равносторонние треуголь-
ники так же будут корректно идентифицированы. Так, для треугольника
со сторонами 3842, 3842, 3842 может быть предусмотрена специальная
проверка и он считается неравносторонним. Поскольку программа пред-
ставляет собой черный ящик, единственный способ удовлетворения при-
веденному выше критерию – перебор всех возможных входных значений.
      Таким образом, исчерпывающий тест для задачи о треугольниках
должен включать равносторонние треугольники с длинами сторон вплоть
до максимального целого числа. Это, безусловно, астрономическое чис-
ло, но и оно не обеспечивает полноту проверки. Вполне вероятно, что ос-
танутся некоторые ошибки, например, метод может представить тре-
угольник со сторонами 3, 4, 5 неразносторонним, а со сторонами 2, А, 2 –
равносторонним. Для того, чтобы обнаружить подобные ошибки, нужно
перебрать не только все разумные, но и все вообще возможные входные
наборы. Следовательно, мы приходим к выводу, что для исчерпывающего
тестирования задачи о треугольниках требуется бесконечное число тестов.
      Если такое испытание представляется сложным, то еще сложнее соз-
дать исчерпывающий тест для большой программы. Образно говоря, чис-
ло тестов можно оценить «числом, большим, чем бесконечность». Допус-
тим, что делается попытка тестирования методом черного ящика компи-
лятора с языка Java. Для построения исчерпывающего теста нужно ис-
пользовать все множество правильных программ на Java (фактически их
число бесконечно) и все множество неправильных программ (т. е. дейст-
вительно бесконечное число), чтобы убедиться в том, что компилятор
обнаруживает все ошибки. Только в этом случае синтаксически неверная
программа не будет компилирована. Если же программа имеет собствен-
ную память (например, операционная система, база данных или система
распределенных вычислений), то дело обстоит еще хуже. В таких про-
граммах исполнение команды (например, задание, запрос в базу данных,
выполнение расчета) зависит от того, какие события ей предшествовали,
т. е. от предыдущих команд. Здесь следует перебрать не только все воз-
можные команды, но и все их возможные последовательности.
      Из изложенного следует, что построение исчерпывающего входного
теста невозможно. Это подтверждается двумя аргументами: во-первых,
                                  13