Основные проблемы тестирования
Рассмотрим два примера тестирования:
- Пусть программа H(x:int, y:int) реализована в машине с 64 разрядным словами, тогда мощность множества тестов ||(X,Y)||=2**64
Это означает, что компьютеру, работающему на частоте 1Ггц, для прогона этого набора тестов (при условии, что один тест выполняется за 100 команд) потребуется ~ 3K лет.
- На Рис. 2.3 приведен фрагмент схемы программы управления схватом робота, где интервал между моментами срабатывания схвата не определен.
Этот тривиальный пример требует прогона бесконечного множества последовательностей входных значений с разными интервалами срабатывания схвата (Пример 2.8).
Рис. 2.3. Тестовая последовательность сигналов датчика схвата
Отсюда вывод:
- Тестирование программы на всех входных значениях невозможно.
- Невозможно тестирование и на всех путях.
- Следовательно, надо отбирать конечный набор тестов, позволяющий проверить программу на основе наших интуитивных представлений
Требование к тестам - программа на любом из них должна останавливаться, т.е. не зацикливаться. Можно ли заранее гарантировать останов на любом тесте?
- В теории алгоритмов доказано, что не существует общего метода для решения этого вопроса, а также вопроса, достигнет ли программа на данном тесте заранее фиксированного оператора.
Задача о выборе конечного набора тестов(X,Y) для проверки программы в общем случае неразрешима.
Поэтому для решения практических задач остается искать частные случаи решения этой задачи.