- •Верификация программного обеспечения
- •Исчисление высказываний
- •Операции над высказываниями
- •(Если a, то b)
- •Исчисление предикатов
- •Операции над высказывательными формами
- •Кванторы
- •Метод индуктивных утверждений
- •Общие сведения
- •Последовательность шагов по доказательству корректности схем-алгоритмов программ
- •Основные проблемы доказательства корректности программ
- •Проблема автоматизации верификации программ
Основные проблемы доказательства корректности программ
Недостатки [28]:
Программы, правильность которых доказана, могут содержать ошибки, так как правильность доказывается только по отношению ко входным и выходным утверждениям. Если выходное утверждение неправильно или неполно, то в принципе может быть доказана правильность, и ошибки в общем останутся необнаруженными.
Входное утверждение описывает исходные предположения и среду, в которой работает программа, но нет гарантий, что они будут справедливы в момент выполнения программы.
Само доказательство может быть неправильным, так как легко допустить ошибку в его процессе.
Ограничения реальных аппаратно-программных средств обычно не учитываются при доказательстве.
Ошибки в сопряжении между модулями (порядок следования фактических параметров не соответствует порядку следования формальных параметров) обычно не обнаруживаются при доказательстве.
Доказательство правильности нечисленных программ гораздо сложнее численных программ, реализующих какие-то алгоритмы.
Достоинства:
Попытка доказать правильность программы заставляет программиста очень детально исследовать как программу, так и спецификацию, а также формализовать своё понимание программы.
Процесс подготовки входных и выходных утверждений, даже если программист не собирается их доказывать, полезен сам по себе как метод формального утверждения спецификации.
Проблема автоматизации верификации программ
В соответствии с методом Флойда необходимо сначала задать входное и выходное и индуктивные утверждения в исчислении предикатов первого порядка. Затем надо определить выделенные пути и использовать саму исследуемую программу для генерации условий верификации. Затем программа автоматизации должна использовать правила вывода исчисляемых предикатов в сочетании с дедуктивным и эвристическим принципами, пытаясь доказать каждое условие верификации.
Проблемы [28]:
Генератор условий верификаций должен уметь манипулировать логическими верификациями, упрощать их, интерпретировать в операторы программы. Самая сложная задача - снабдить систему необходимыми аксиомами, для этого должны быть описаны все детали синтаксиса и семантики.
Связана с системой доказательств. Относится к области ИИ, т.к. человек при доказательстве теорем использует дедуктивные приемы рассуждений.
Процесс доказательства слишком трудоемок, так как велико число аксиом. Полностью автоматизированная система доказательства правильности программ - недостижимая цель. Реальный путь достижения процесса автоматизации доказательства - доказательство правильности в диалоговом режиме с системой правильности доказательств:
пользователь в процессе диалога может предоставить дополнительную информацию или направить рассуждения по другому пути.
В настоящее время используются автоматизированные системы проверки доказательства.
Если данной системе сообщить шаги доказательства, выполненного человеком, то система проверяет соответствие каждого шага известным ей правилам вывода.