Случайное тестирование
Случайное тестирование — это способ проверки алгоритма, при котором входные данные создаются автоматически случайным образом, а результат сравнивается с правильным ответом или результатом другого, уже проверенного алгоритма.
Случайное тестирование является частью общего тестирования алгоритмов. Сначала определяют допустимые входные данные и готовят набор тестов, а затем программа-генератор создаёт новые варианты. Для каждого варианта алгоритм запускают и проверяют его ответ.
На практике часто используют эталонный алгоритм — простой и очевидно правильный способ решения задачи. Ответы проверяемого и эталонного алгоритмов сравниваются автоматически. Если они различаются, найден тест, на котором основной алгоритм работает неверно.
Пусть алгоритм должен найти максимум в массиве. Генератор случайно создаёт массивы разной длины, например \([4, 1, 9, 2]\), \([-3, -8]\) или \([5, 5, 5]\). Результат проверяемого алгоритма сравнивают с результатом простой функции, перебирающей все элементы. Так можно обнаружить ошибку, из-за которой неправильно обрабатываются отрицательные числа или массив из одного элемента.
Случайное тестирование не означает полностью случайную и бессистемную проверку. Генератор должен соблюдать ограничения задачи и охватывать важные случаи: минимальные и максимальные размеры, нулевые и отрицательные значения, повторяющиеся элементы. Если выбирать данные только случайно, некоторые граничные случаи могут вообще не встретиться. Для этого рядом применяют тестирование классов эквивалентности.
Что нужно сделать, если ответы проверяемого и эталонного алгоритмов различаются?
После обнаружения расхождения тест сохраняют, упрощают и используют повторно. Это помогает выполнить локализацию ошибки в алгоритме и дополнить набор постоянных проверок.
Главное
- Случайное тестирование автоматически проверяет алгоритм на случайно созданных допустимых входах.
- Результаты сравнивают с эталонным решением или известным правильным ответом.
- Случайные данные дополняют, но не заменяют граничные и специально подобранные тесты.