Первый шаг, по крайней мере
Первый шаг, по крайней мере для маленьких программ и отдельных функций, — расширение тестов на граничные условия, описанных в предыдущем разделе: систематическое тестирование отдельных случаев.
Предположим, что у нас есть функция, осуществляющая двоичный поиск в массиве целых чисел. Начнем со следующих тестов (как нетрудно заметить, расположены они в порядке увеличения сложности):
поиск в пустом массиве;
поиск в массиве с одним элементом — пробное значение:
- меньше чем элемент массиша;
- равно элементу массива;
- больше чем элемент массива;
поиск в массиве с двумя элементами — пробные значения:
- тестируем все пять возможных вариантов;
проверяем поведение при дублировании элемента — пробные значения:
- меньше значения в массиве;
- равно значению в массиве;
- больше значения в массиве;
поиск в массиве с тремя элементами (так же, как и с двумя);
поиск в массиве с четырьмя элементами (так же, как с двумя и тремя).
Если функция пройдет эти тесты без ошибок, она, по всей видимости, находится в неплохой форме, однако ее можно тестировать и дальше.
Приведенный набор тестов достаточно мал, чтобы выполнять их все вручную, но лучше создать оснастку (test scaffold — подмости тестирования) для механизации процесса. С этой целью мы напишем простейшую программу (по сути, драйвер). Она будет считывать строки, содержащие ключ, по которому будет производиться поиск, и размер массива; после этого будет создан массив указанного размера, содержащий значения 1, 3, 5 и т. п.; результат поиска будет выводиться на экран.
Содержание раздела