Отсканил пару страничек из книги Майерса:
ГЛАВА 1
ТЕСТ ДЛЯ САМООЦЕНКИ
Прежде чем приступить к работе над книгой, рекомендуем читателю выполнить следующий простой тест. Задача состоит в том, чтобы проверить некоторую программу.
Эта программа производит чтение с перфокарты трех целых чисел, которые интерпретируются как длины сторон треугольника. Далее программа печатает сообщение о том, является ли треугольник неравносторонним, равнобедренным или равносторонним.
Напишите на листе бумаги набор тестов (т. е. специальные последовательности данных), которые, как вам кажется, будут адекватно проверять эту программу. Построив свои тесты, проанализируйте их.
Следующий шаг состоит в оценке эффективности вашей проверки. Оказывается, что программу труднее написать, чем это могло показаться вначале. Были изучены различные версии данной программы и составлен список общих ошибок. Оцените ваш набор тестов, попытавшись с его помощью ответить на приведенные ниже вопросы. За каждый ответ «да» присуждается одно очко.
1. Составили ли вы тест, который представляет правильный неравносторонний треугольник? (Заметим, что ответ «да» на тесты, со значениями 1, 2, 3 и 2, 5, 10 не обоснован, так как не существует треугольников, имеющих такие стороны.)
2. Составили ли вы тест, который представляет правильный равносторонний треугольник?
3. Составили ли вы тест, который представляет правильный равнобедренный треугольник? (Тесты со значениями 2, 2, 4 принимать в расчет не следует.)
4. Составили ли вы по крайней мере три теста, которые представляют правильные равнобедренные треугольники, полученные как перестановки двух равных сторон треугольника (например, 3, 3, 4; 3, 4, 3 и 4, 3, 3)?
5. Составили ли вы тест, в котором длина одной из сторон треугольника принимает нулевое значение?
6. Составили ли вы тест, в котором длина одной из сторон треугольника принимает отрицательное значение?
7. Составили ли вы тест, включающий три положительных целых числа, сумма двух из которых равна третьему? (Другими словами, если программа выдала сообщение о том, что числа 1, 2, 3 представляют собой стороны неравностороннего треугольника, то такая программа содержит ошибку.)
8. Составили ли вы по крайней мере три теста с заданными значениями всех трех перестановок, в которых длина одной стороны равна сумме длин двух других сторон (например, 1, 2, 3; 1, 3, 2 и 3, 1, 2)?
9. Составили ли вы тест из трех целых положительных чисел, таких, что сумма двух из них меньше третьего числа (т. е. 1, 2, 4 или 12, 15, 30)?
10. Составили ли вы по крайней мере три теста из категории 9, в которых вами испытаны все три перестановки (например, 1, 2, 4; 1, 4, 2 и 4, 1, 2)?
11. Составили ли вы тест, в котором все стороны треугольника имеют длину, равную нулю (т. е. 0, 0, 0) ?
12. Составили ли вы по крайней мере один тест, содержащий нецелые значения?
13. Составили ли вы хотя бы один тест, содержащий неправильное число значений (например, два, а не три целых числа)?
14. Специфицировали ли вы в каждом тесте не только входные значения, но и выходные данные программы?
Конечно, нет гарантий, что с помощью набора тестов, который удовлетворяет вышеперечисленным условиям, будут найдены все возможные ошибки. Но поскольку вопросы 1—13 представляют ошибки, имевшие место в различных версиях данной программы, адекватный тест для нее должен их обнаруживать. Если вы не программист, то вы не очень хорошо справитесь с составлением теста. Для сравнения отметим, что опытные профессиональные программисты набирают в среднем только 7—8 очков из 14 возможных. Выполненное упражнение показывает нам, что тестирование даже тривиальных программ, подобных приведенной, — непростая задача. И коль скоро это так, рассмотрим трудности тестирования программ размером в 100000 операторов для системы управления воздушным движением, компилятора или программы расчета зарплаты.