200 Часть II: Приемы и технологии тестирования
Мы рекомендуем равномерно разделить каждый диапазон тестируемых
входных значений на ряд поддиапазонов (их может быть около сотни) и
протестировать по одному значению внутри каждого из них. Например,
если функция получает значения между -1 и 1, введите одно значение,
лежащее межу -1 и -0,98, второе — между -0,98 и 096 и т.д. После ввода
каждого значения проверяйте, правильный ли получился результат, чтобы
не тратить зря времени, если что-то не так.
Получив общую картину поведения функции, проанализируйте его на
предмет резких перемен. Если значения функции на отдельных участках
области ее определения резко возрастают или уменьшаются либо наблюда-
ются разрывы и скачки, на них необходимо обратить более пристальное
внимание.
Предположим, что на входном диапазоне от 0,4 до 0,46 значения фун-
кции (или их расхождение со значениями эталонной функции) резко воз-
растают. Разделите этот диапазон на 100 равных частей и проверьте по
одному значению внутри каждой из них. Если все в порядке, вы убедитесь,
что значения тестируемой и эталонной функции для всех тестируемых
аргументов совпадают, а если нет, можно будет документировать ошибку.
При профессиональном тестировании математических функций не
обойтись без некоторых знаний из теории вероятности. Если речь идет не
об одной, а о целом ряде функций, необходимы боле эффективные и на-
учно обоснованные технологии поиска критических участков области оп-
ределения функции — тех, где ее значения резко меняются или отличаются
от эталонных. Их описания можно найти в специальной литературе. Для
начала подойдет книга Бека и Арнольда (Beck & Arnold 1977). Кроме того,
мы рекомендуем работы таких авторов, как Бард (Bard, 1974) и Чамберс
(Chambers, 1977).
Случайный ввод
Вместо разделения всей тестируемой области определения функции на
определенное количество равных участков можно воспользоваться другим
способом подбора входных значений — случайным. Случайный выбор
значений более эффективен, поскольку гарантирует их полную равноправ-
ность. Например, тестируя такую последовательность входных значений,
как 0,02; 0,04; 0,06 и т.д., вы никогда не узнаете, как программа обрабаты-
вает нечетные числа — как 0,03 или как числа с большим количеством
значащих цифр, такие как 0,1415. В то же время при выборе входных зна-
чений случайным образом область определения функции покрывается го-
раздо более полно, все типы и диапазоны значений входных данных
охватываются равномерно.
Если вы затрудняетесь в выборе методики подбора входных данных или
не вполне уверены в поведении тестируемой функции, остановитесь на
Глава 7: Разработка тестов 201
случайном способе. Он прекрасно подходит и для автоматизированного
тестирования.
Не имея четкого обоснования для выбора конкретных входных значе-
ний, можно компенсировать этот недостаток количеством проводимых
тестов. Здесь нет никаких ограничений — чем больше тестов проводится
для каждого из классов эквивалентности, тем лучше. Обычно при автома-
тизированном тестировании со случайными входными значениями мы
проводим как минимум 1000 вычислений.
Что такое генератор случайных чисел
"Случайный" ввод вовсе не означает "все, что приходит в голову",
иначе он будет слишком предвзятым, чтобы претендовать на равномерный
охват области определения функции. Здесь больше подойдут таблицы слу-
чайных чисел, а еще лучше — компьютерная программа, которая может
генерировать такие числа в неограниченном количестве. Однако следует
иметь в виду, что алгоритмы, используемые многими подобными програм-
мами, вовсе не случайны. Кроме того, нередко в программах даже базовый
алгоритм реализован не точно. Поэтому, прежде чем выбрать конкретный
генератор случайных чисел, даже написанный вполне авторитетной компа-
нией или встроенный в один из стандартных языков программирования,
необходимо выяснить, какой алгоритм положен в основу его работы и
подходит ли он для ваших нужд. То, что годится простенькой программке,
рисующей на экране разноцветный салют, может совершенно не подойти
для профессионального тестирования сложных инженерных программ.
Нередко генераторы случайных чисел повторяют их последовательность
через определенный интервал — например, после каждых 65 535 чисел все
начинается с начала.
Подробный рассказ о теории генераторов случайных чисел в задачи
этой книги не входит. На эту тему имеется достаточно литературы, и, в
частности, можно прочитать работы таких авторов, как Канер и Воуки
(Kaner & Vokey, 1984) и Кнут (Knuth, 1981). Однако несколько советов и
предложений вам все же пригодятся.
• Перед тем как приступить к тестированию, почитайте литературу о
генераторах случайных чисел. Не доверяйте какой-либо программе
просто потому, что она у вас уже есть, а другую еще придется поискать.
Продолжайте чтение до тех пор, пока нижеследующие предложения
не покажутся вам вполне понятными. Не обязательно ими пользо-
ваться, но, если вы не можете их даже понять, значит, знаете о
предметной области еще слишком мало, чтобы принимать самосто-
ятельные решения. И может оказаться, что, потратив время на те-
стирование, вы вдруг выясните, что оно проводилось некорректно,
поскольку входные данные были вовсе не случайными.