Ключ
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Разработчик(и) | Технологический институт Карлсруэ , Технический университет Дармштадта , Технологический университет Чалмерса |
---|---|
Стабильная версия | 2.10.0
/ 23 декабря 2021 г. [1] |
Написано в | Ява |
Операционная система | Linux, Mac, Windows, Солярис |
Доступно в | Английский |
Тип | Формальная проверка |
Лицензия | лицензия GPL |
Веб-сайт | www |
Инструмент KeY используется для формальной проверки программ Java . Он принимает спецификации, написанные на языке моделирования Java , для исходных файлов Java. Они преобразуются в теоремы динамической логики , а затем сравниваются с семантикой программы, которая также определяется в терминах динамической логики. KeyY обладает значительной мощью, поскольку поддерживает как интерактивное (т. е. вручную), так и полностью автоматизированное доказательство правильности. Неудачные попытки проверки могут быть использованы для более эффективной отладки или тестирования на основе проверки . К KeyY было сделано несколько расширений, позволяющих применять его для проверки программ на языке C или гибридных систем . KeyY разработан совместно Технологическим институтом Карлсруэ , Германия; Технический университет Дармштадта , Германия; и Технологического университета Чалмерса в Гетеборге, Швеция, и распространяется по лицензии GPL .
Обзор
[ редактировать ]Обычный пользовательский ввод в KeY состоит из исходного файла Java с аннотациями в формате JML. Оба переводятся во внутреннее представление KeY, динамическую логику . Из данных спецификаций вытекает несколько обязательств по доказательству, которые необходимо выполнить, т. е. необходимо найти доказательство. Для этого программа символически выполняется , а результирующие изменения переменных программы сохраняются в так называемых обновлениях . После полной обработки программы остается обязанность доказательства логики первого порядка . В основе системы KeY лежит средство доказательства теорем первого порядка, основанное на секвенциальном исчислении , которое используется для завершения доказательства. Правила вмешательства фиксируются в так называемых таклетах , которые состоят из собственного простого языка для описания изменений в секвенции.
Java-карта DL
[ редактировать ]Теоретической основой KeY является формальная логика под названием Java Card DL. DL означает динамическую логику. Это версия динамической логики первого порядка , адаптированная для программ Java Card. Таким образом, он, например, допускает такие утверждения (формулы), как , что интуитивно говорит о том, что постусловие должен сохраняться во всех состояниях программы, доступных при выполнении программы Java Card. в любом состоянии, удовлетворяющем предварительному условию . Это эквивалентно в исчислении Хоара, если и имеют чисто первый порядок. Динамическая логика, однако, расширяет логику Хоара тем, что формулы могут содержать вложенные модальности программы, такие как , или возможна количественная оценка по формулам, содержащим модальности. Существует также двойная модальность что включает в себя прекращение действия . Эту динамическую логику можно рассматривать как специальную мультимодальную логику (с бесконечным числом модальностей), где для каждого блока Java есть модальности и .
Компонент вычета
[ редактировать ]В основе системы KeY лежит средство доказательства теорем первого порядка, основанное на секвенциальном исчислении . Секвенция имеет вид где (предположения) и (предложения) — это наборы формул с интуитивным смыслом, который соответствует действительности. С помощью дедукции показано, что начальная секвенция, представляющая обязанность доказательства, может быть построена только из фундаментальных аксиом первого порядка (таких как равенство ).
Символическое выполнение кода Java
[ редактировать ]При этом модальности программы устраняются символьным выполнением . Например, формула логически эквивалентно . Как показывает этот пример, символическое выполнение в динамической логике очень похоже на вычисление слабейших предусловий . Оба и по сути обозначают одно и то же, за двумя исключениями: во-первых, является функцией некоторого метаисчисления, в то время как действительно является формулой данного исчисления. программе Во-вторых, символическое выполнение выполняется по всей так же, как и при фактическом выполнении. Чтобы сохранить промежуточные результаты заданий, KeY вводит концепцию, называемую обновлениями , которая аналогична заменам, но применяется только после устранения модальности программы. Синтаксически обновления состоят из параллельных (без побочных эффектов) присваиваний, записанных в фигурных скобках перед модальностью. Пример символьного выполнения с обновлениями: преобразуется в на первом этапе и на втором этапе. Тогда модальность пуста, и «обратное применение» обновления постусловия дает предварительное условие, в котором может принимать любое значение.
Пример
[ редактировать ]Предположим, кто-то хочет доказать, что следующий метод вычисляет произведение некоторых неотрицательных целых чисел. и .
int foo (int x, int y) {
int z = 0;
while (y > 0)
if (y % 2 == 0) {
x = x*2;
y = y/2;
} else {
y = y/2;
z = z+x;
x = x*2;
}
return z;
}
Таким образом, доказательство начинается с посылки и вывод, который нужно показать . Обратите внимание, что таблицы секвенционных исчислений обычно пишутся «в перевернутом виде», т. е. начальная секвенция оказывается внизу, а шаги вывода идут вверх. Доказательство можно увидеть на рисунке справа.
Дополнительные возможности
[ редактировать ]Отладчик символического выполнения
[ редактировать ]Отладчик символьного выполнения визуализирует поток управления программой в виде символического дерева выполнения , которое содержит все возможные пути выполнения программы до определенной точки. Он предоставляется в виде плагина к платформе разработки Eclipse .
Генератор тестовых примеров
[ редактировать ]KeY можно использовать как инструмент тестирования на основе моделей , который может генерировать модульные тесты для программ Java. Модель, из которой извлекаются тестовые данные и тестовый пример, состоит из формальной спецификации (представленной в JML ) и символического дерева выполнения тестируемой реализации, которое вычисляется системой KeyY.
Распространение и варианты системы Key
[ редактировать ]KeY — бесплатное программное обеспечение, написанное на Java и лицензированное под лицензией GPL . Его можно скачать с сайта проекта в исходниках; в настоящее время нет предварительно скомпилированных двоичных файлов. Еще одна возможность: KeY можно запустить непосредственно через веб-запуск Java без необходимости компиляции и установки.
Кей-Хоар
[ редактировать ]KeY-Hoare построен на основе KeY и включает в себя исчисление Хоара с обновлениями состояния. Обновления состояний — это средство описания переходов состояний в структуре Крипке . Это исчисление можно рассматривать как подмножество того, которое используется в основной ветви KeY. Из-за простоты исчисления Хоара эта реализация по сути предназначена для иллюстрации формальных методов на курсах бакалавриата.
Кеймаэра/КеймаэраX
[ редактировать ]KeYmaera [1] (ранее называвшийся HyKeY) — это инструмент дедуктивной проверки гибридных систем, основанный на исчислении дифференциальной динамической логики dL [2] . Он расширяет инструмент KeY системами компьютерной алгебры, такими как Mathematica , а также соответствующими алгоритмами и стратегиями доказательства, так что его можно использовать для практической проверки гибридных систем .
KeYmaera был разработан в Ольденбургском университете и Университете Карнеги-Меллон . Название инструмента было выбрано как , гибридного омофон Химеры животного из древнегреческой мифологии.
KeYmaeraX [3], разработанный в Университете Карнеги-Меллон, является преемником KeYmaera. Он был полностью переписан.
Ключ для C
[ редактировать ]KeY for C — это адаптация системы Key к MISRA C , подмножеству языка программирования C. Этот вариант больше не поддерживается.
АСМКей
[ редактировать ]Существует также адаптация для использования KeY для символического выполнения абстрактных государственных машин , разработанная в ETH Zürich . Этот вариант больше не поддерживается.
Ссылки
[ редактировать ]- ^ «Скачать – Проект KeyY» . key-project.org . Проверено 13 апреля 2021 г.
Источники
[ редактировать ]- Верификация объектно-ориентированного программного обеспечения: подход Key . Бернхард Беккерт, Райнер Хэнле, Петер Х. Шмитт (ред.). Спрингер , 2007. ISBN 978-3-540-68977-5 .
- Дедуктивная верификация программного обеспечения – Ключевая книга: от теории к практике . Вольфганг Арендт, Бернхард Беккерт, Рихард Бубель, Райнер Хэнле, Петер Х. Шмитт, Маттиас Ульбрих (ред.). Спрингер , 2016. ISBN 978-3-319-49812-6
- Сравнение инструментов для обучения формальной верификации программного обеспечения . Инго Файнерер и Гернот Зальцер. Спрингер , 2008 г.
- Программирование с доказательствами: языковые подходы к полностью корректному программному обеспечению . Аарон Стамп. Проверенное программное обеспечение: теории, инструменты и эксперименты, 2005.
- Высокая гарантия (безопасности и безопасности) и бесплатное программное обеспечение с открытым исходным кодом (FLOSS) . Дэвид Уилер, 2009 г.