Конспект лекций по программированию для начинающих. Гладков В.П. - 45 стр.

UptoLike

Составители: 

47
Первый подход называют тестированием. Тестирование состоит в
выполнении программы со специально выбранными значениями исходных
данных - тестами, для которых заранее известен результат. Если ответ,
полученный программой, не совпадает с ожидаемым, то программа содержит
ошибку, которую необходимо найти и исправить. Однако если тест завершился
с ожидаемым результатом, мы не можем гарантировать,
что также завершится
любой другой тест. Более того, нельзя сказать утвердительно и о том, что этот
же тест завершится успешно в случае внесения изменений в программу.
Здесь имеется аналогия со следующей ситуацией. Предположим, что мы
приехали в какой-нибудь город, например в Норильск, и обнаружили, что там
во всех магазинах
продаются яблоки. Можно ли сказать, что так бывает всегда?
Ясно, что ответ на этот вопрос отрицательный, потому что мы не можем
сделать обоснованного вывода на основе результатов одной конкретной
поездки.
Поэтому при тестировании используют много разных тестов. Одни тесты
учитывают структуру программы, другие - вырожденные, частные случаи
исходных данных. После обнаружения
и исправления ошибки необходимо
повторить выполнение всех тестов. В любом случае с помощью тестирования
можно убедительно показать наличие ошибок в программе, но не доказать их
отсутствие.
Второй подход называется верификацией. В общем случае верификация
есть установление корректности программы, т.е. отсутствия в ней ошибок. Если
тестирование исследует отдельные выполнения программы,
то верификация
анализирует свойства всех допустимых выполнений программы с помощью
формальных доказательств присутствия требуемых свойств. Использование
методов верификации требует хорошей математической культуры, умения
пользоваться формальным аппаратом математической логики и теории
доказательств.
Основная идея верификации программы состоит в том, чтобы формально
доказать соответствие между текстом программы (на языке программирования)
и спецификации
задачи (на языке спецификации). Программа и спецификация
описывают одну и ту же задачу на разных языках. Язык спецификации
ориентирован на человека, язык программирования - на компьютер. Та
программа, которая соответствует спецификации задачи, признается
правильной.
Спецификация - четкое и формальное описание исходных данных,
результатов и того, что должна делать программа для преобразования исходных
данных в результат. Здесь указывается множество возможных значений
исходных данных и форма их представления в программе, множество
возможных значений результатов и форма их представления, а также для каких
конкретных значений исходных данных какой результат получается. Последние
сведения могут использоваться при тестировании и отладке программы. Кроме
того, в спецификации описывается и иллюстрируется
соответствующими
примерами идея преобразования исходных данных в результат.
Основу спецификации составляет идея преобразования исходных данных в
результат. Ее выявление является самым сложным, творческим компонентом в
                                       47

    Первый подход называют тестированием. Тестирование состоит в
выполнении программы со специально выбранными значениями исходных
данных - тестами, для которых заранее известен результат. Если ответ,
полученный программой, не совпадает с ожидаемым, то программа содержит
ошибку, которую необходимо найти и исправить. Однако если тест завершился
с ожидаемым результатом, мы не можем гарантировать, что также завершится
любой другой тест. Более того, нельзя сказать утвердительно и о том, что этот
же тест завершится успешно в случае внесения изменений в программу.
    Здесь имеется аналогия со следующей ситуацией. Предположим, что мы
приехали в какой-нибудь город, например в Норильск, и обнаружили, что там
во всех магазинах продаются яблоки. Можно ли сказать, что так бывает всегда?
Ясно, что ответ на этот вопрос отрицательный, потому что мы не можем
сделать обоснованного вывода на основе результатов одной конкретной
поездки.
    Поэтому при тестировании используют много разных тестов. Одни тесты
учитывают структуру программы, другие - вырожденные, частные случаи
исходных данных. После обнаружения и исправления ошибки необходимо
повторить выполнение всех тестов. В любом случае с помощью тестирования
можно убедительно показать наличие ошибок в программе, но не доказать их
отсутствие.
    Второй подход называется верификацией. В общем случае верификация
есть установление корректности программы, т.е. отсутствия в ней ошибок. Если
тестирование исследует отдельные выполнения программы, то верификация
анализирует свойства всех допустимых выполнений программы с помощью
формальных доказательств присутствия требуемых свойств. Использование
методов верификации требует хорошей математической культуры, умения
пользоваться формальным аппаратом математической логики и теории
доказательств.
    Основная идея верификации программы состоит в том, чтобы формально
доказать соответствие между текстом программы (на языке программирования)
и спецификации задачи (на языке спецификации). Программа и спецификация
описывают одну и ту же задачу на разных языках. Язык спецификации
ориентирован на человека, язык программирования - на компьютер. Та
программа, которая соответствует спецификации задачи, признается
правильной.
    Спецификация - четкое и формальное описание исходных данных,
результатов и того, что должна делать программа для преобразования исходных
данных в результат. Здесь указывается множество возможных значений
исходных данных и форма их представления в программе, множество
возможных значений результатов и форма их представления, а также для каких
конкретных значений исходных данных какой результат получается. Последние
сведения могут использоваться при тестировании и отладке программы. Кроме
того, в спецификации описывается и иллюстрируется соответствующими
примерами идея преобразования исходных данных в результат.
    Основу спецификации составляет идея преобразования исходных данных в
результат. Ее выявление является самым сложным, творческим компонентом в