122
Существуют два подхода к проверке программ прагматический и доказательный. При
прагматическом подходе проверка программ выполняется на ЭВМ путем тестирования.
Тестирование
это проверка программ на ЭВМ с помощью некоторого набора тестов. Ясно, что
тестирование не дает гарантий правильности выполнения программ на всех допустимых данных.
Следовательно, тестирование в общем случае не может дать и не дает полных гарантий отсутствия
ошибок в программах.
Напомним, что отладка программ
это процесс поиска и исправления ошибок в программах на
ЭВМ. Однако поскольку поиск ошибок при отладке программ проводится с помощью тестов, то полных
гарантий нахождения и исправления всех ошибок в программах отладка не дает и в принципе дать не
может.
По этой же причине неясно, когда процесс отладки программ процесс поиска и исправления
ошибок на ЭВМ может считаться завершенным. А выявлены или нет все ошибки в программе при ее
отладке не может сказать никто.
Таким образом, прагматический подход чреват созданием программ, содержащих ошибки даже
после «завершения» отладки, что и наблюдается практически во всех больших программах для ЭВМ.
Рассмотрим в качестве иллюстрации принципов тестирования алгоритм и программу вычисления
максимума из трех чисел: а, b, с.
алг «максимум трех чисел»
'максимум трех чисел
нач
cls
ввод (а, b, с)
input a, b, с
если а > b то
if а > b then
тах := a
max = a
инеc b > с то
elseif b > с then
тах := b
mах = b
инеc с > а то
elseif с > a then
тах:= с
mах = с
кесли
end if
вывод («тах=»,тах)
? «mах=»; mах
кон
end
Запуск этой программы на ЭВМ можно проверить на следующих данных:
Tecт1
Тест2
Тест3
? 1 1 2
? 1 2 3
? 3 2 1
max = 2
max = 3
max = 3
Все три результата правильные. Отладку программы после запуска этих примеров можно было бы
считать завершенной. Однако есть контрпример:
Контрпример1
? 2 1 3
max = 2
Но этот результат - неправильный. Следовательно, алгоритм и программа содержат ошибки. Но
сколько этих ошибок - одна, две, а может быть больше?
При доказательном подходе разработка алгоритмов и программ предполагает составление
спецификаций и доказательство их правильности по отношению к этим спецификациям. Процесс
разработки программ считается завершенным после проверки их на ЭВМ и предоставлении
доказательств отсутствия ошибок.
Доказательства правильности алгоритмов и программ, равно как и любые другие доказательства,
строятся на основе суждений и рассуждений. В данном случае суждения и рассуждения касаются
результатов выполнения алгоритмов и программ с теми или иными данными.
|