Формальная верификация: методы и приложения В. Кулямин Е. Корныхин План Общие вопросы Модели Методы Инструменты и приложения 2/23 Определение Верификация – проверка корректности результатов некоторого этапа разработки по отношению к требованиям, сформулированным на предыдущих этапах Потребности Требования Проектные решения (Проектные решения)' Валидация Система 3/23 Формальная верификация Формальная проверка Должны быть представлены в виде формальных моделей = реализация Требования = спецификация Результаты I S Соответствие между ними должно быть определено формально 4/23 Формальное и неформальное Формально можно проверить только что-то формальное Реальные потребности и реальная система – неформальны Проверять адекватность самих формальных моделей нужно другими способами Потребности Спецификация Реализация Система 5/23 Объект верификации Программное и аппаратное обеспечение Формальная верификация Предистория Взлом шифраторов: E. F. Moore – 1956 Начало ПО: Floyd – 1967, Hoare – 1969 Развитие В основном АО: 1979–1995 Почему АО? Более простые примитивы + более однородная структура Стоимость ошибок значительно выше Повторно используется больше проектной информации Инженеры привычны к строгим ограничениям и точным описаниям 6/23 Общие требования Полезные системы достаточно сложны Есть несколько уровней детализации Верификация должна быть иерархической Верификация должна быть модульной 7/23 Абстракция и уточнение Абстракция упрощает модель Но уточнение должно обеспечить перенос результатов Виды абстракций Структурная абстракция Функциональная абстракция Абстракция данных Абстракция взаимодействий Временная абстракция 8/23 План Общие вопросы Модели Методы Инструменты и приложения 9/23 Основные виды моделей Виды формализмов Логико-алгебраические Операционные (исполнимые) L E Виды соответствий I ⊢ S (I S) Моделирование I ⊨ S Симуляция I↝S Выводимость L-L E-L E-E 10/23 Логико-алгебраические Алгебраические Реляционные алгебры (Codd - 1970) Абстрактные типы данных (Zilles, Liskov – 1974) Алгебры процессов CSP (Hoare - 1978) CCS (Milner - 1980) ACP (Bergstra, Klop - 1982) … Abstract State Machines (Гуревич - 1984) Логические 11/23 Логические μ-исчисление (Pratt, Kozen – 1982) μ, ν интервалы ITL (Moszkowski – 1983) CTL (Clarke, Emerson - 1981) A, E TPTL (Alur, Henzinger - 1989) явное время G, F, X, U LTL (Prior - 1957) λ по объектам типы Исчисление высказываний Логики высших порядков (Peirce – 1885) Hoare logic (Hoare - 1969) по объектам λ-исчисление (Church – 1936) λ по типам Логика 1-го порядка λ-исчисления высшего порядка (Girard – 1971) по предикатам/типам 12/23 Операционные ω-автоматы (Buchi – 1960) [ASM] гибридные (Alur, Henzinger - 1996) ω-слова временные (Alur, Dill - 1990) Statecharts (Harel – 1987) таймеры разделение I/O взаимодействие данные FSM (Huffman 1954) EFSM (1973 ?) Сети Петри (Petri – 1962) LTS (1980 ?) [алгебры процессов] IOA (Tuttle, Lynch – 1987) Машины (Тьюринг – 1936) CFSM (Brand, Zafiropulo - 1983) 13/23 План Общие вопросы Модели Методы Инструменты и приложения 14/23 Методы верификации С полным моделированием – Спецификация и реализация известны S ? I С неполным моделированием – Известна только спецификация S I Система ? 15/23 Полное моделирование Дедуктивный анализ (theorem proving) Floyd – 1967 Проверка моделей (model checking) Clarke, Emerson – 1981 Проверка симуляции (simulation checking, equivalence checking) Moore – 1956 Символическое выполнение (symbolic execution) Topor, Burstall – 1972 Абстрактная интерпретация (abstract interpretation) Cousot – 1975 16/23 Неполное моделирование Формальное тестирование (formal conformance testing) Василевский – 1973 Hennessy, DeNicola – 1984 Верификационный мониторинг (runtime verification, passive testing) С 1970-х было много работ, в которых этот термин не употреблялся ~1999 – термин (Havelund, Rosu ?) 17/23 Распределение работ Abstract interpretation Theorem proving Provers, SAT solvers Symbolic execution Simulation Formal Model checking checking conformance Model checkers testing Runtime verificatio n 18/23 План Общие вопросы Модели Методы Инструменты и приложения 19/23 Дедуктивный анализ Неавтоматизированный анализ ASM Автоматизированный анализ (Boyer, J. S. Moore – 1971) ~ 20 примеров, JVM (700 страниц) HOL (Gordon, 1988) ~ 30 примеров PVS (Owre, Rushby, Shankar – 1992) ~ 30 примеров ACL2 Isabelle Coq 20/23 Проверка моделей и симуляции Model checkers SPIN (Holzman ~ 1982) SMV (McMillan et al.– 1994) и производные Murφ (Dill – 1992) UPPAAL (Larsen et al. – 1995) Equivalence checkers Verity (Kuehlmann et al. – 1995) Смешанные CADP (INRIA ~ 1990) ~ 50 примеров приложений 21/23 Что осталось? Тестирование TGV (1997) Gotcha (1999) Мониторинг TemporalRover (1995) ESC/Java 2 (2002) Java PathFinder (2004) Abstract interpretation ASTREE (2001) 22/23 Спасибо за внимание! 23/23 Дедуктивный анализ I Неавтоматизированный анализ: ASM Модель взаимодействия потоков Java (без исключений и пр.) Гуревич, Schulte, Wallace – 1999 Семантика JVM, Java и преобразования (без параллелизма) Borger, Schimd, Stark – 2001 Семантика SDL 2000 Eschbach, Glasser, Gotzhein, Prinz – 2000 24/23 Дедуктивный анализ II R. S. Boyer, J. S. Moore Ограниченная логика 1-го порядка + Applicative Common Lisp 1971 первый инструмент 1986 Nqthm 2001 ACL2 Ранние приложения Процессоры FM8501, FM8502 (1985); FM9001 (1997) Motorola MC68020 (1993), CAP DSP (100 страниц) AMD K5 (1995), Athlon (1997) IBM 4758 security model Rockwell JVM (2001-2004) (700 страниц) 25/23 Дедуктивный анализ III HOL (Gordon – 1988) Основан на LCF (Milner – 1973) + higher-order logic + ML Несколько десятков работ по применению HOL Банки памяти (1996) Первый верифицированный коммерческий процессор Процессоры TAMARACK (1987) Viper (1987) Intel (Harrison, O’Leary) После верификации найдена ошибка! ПО Web-сервер (1995) Протоколы 26/23 Дедуктивный анализ IV PVS (Owre, Rushby, Shankar – 1992) higher-order logic + язык, похожий на VDM Тоже несколько десятков приложений Протоколы Авионика + космос (NASA) (1996-1998) Часть ядра ОС (1998) Управляющая система АЭС (1999) Процессоры AAMP5 (1995) VAMP FPU (2005) 27/23