lect07 (1158548)

Файл №1158548 lect07 (К. Савенков - Верификация программ на моделях (2010))lect07 (1158548)2019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Верификация программна моделяхЛекция №7Практические приёмы абстракции.Спецификация и верификация свойств припомощи автоматов Бюхи.Константин Савенков (лектор)План лекции••••Практические приёмы абстракцииПроверка свойств правильностиАвтоматы БюхиПроверка свойств при помощи автоматовБюхиПрактические приёмы абстракцииОбщая схемаПрограмма на СМодель наPromela• Неправильный подход!– Если строить модель без оглядки на проверяемыесвойства, то она получится слишком детальной.– Скорее всего, не хватит ресурсов на верификацию.Общая схемаПрограмма на СМодель наPromelaПроверяемыесвойства• Модель должна моделировать только то,что влияет на выполнимость проверяемыхсвойств.Примерvoid f(int x){while(x < 10){if(x < 3){printf(“Case 1\n”);}else{printf(“Case 2\n”);}x++;}}• Модель точная, но у неёслишком многодостижимых состояний.• Давайте посмотрим назаданные свойства.proctype f(int x){do:: x < 3 ->printf(“Case 1\n”);x = x + 1:: x >= 10 ->break;:: else ->printf(“Case 2\n”);x = x + 1od}init {int x;do:: x++;:: x--;:: break;od;run f(x)}Примерvoid f(int x){while(x < 10){if(x < 3){printf(“Case 1\n”);}else{printf(“Case 2\n”);}x++;}}«Проверить, что передпечатью “Case 2”всегда была выполненапечать “Case 1”.»proctype f(int x){do:: x < 3 ->printf(“Case 1\n”);x = x + 1:: x >= 10 ->break;:: else ->printf(“Case 2\n”);x = x + 1od}init {int x;do:: x++;:: x--;:: break;od;run f(x)}Примерvoid f(int x){while(x < 10){if(x < 3){printf(“Case 1\n”);}else{printf(“Case 2\n”);}x++;}}«Проверить, что передпечатью “Case 2”всегда была выполненапечать “Case 1”.»mtype {X1, X2, X3};proctype f(mtype x){do:: x == X1 ->printf(“Case 1\n”);incr(x);:: x == X3 ->break;:: x == X2 ->printf(“Case 2\n”);incr(x);inline incr(x){odif}:: x += 1;init{:: skipmtype x;fiif}:: x = X1:: x = X2:: x = X3fi;run f(x)}Не загромождаеммодельПриёмы абстракции•••••Абстракция предикатовАбстракция типов данныхАбстракция наблюдаемых переменныхАбстракция от «лишнего» кодаАбстракция от функций и системныхвызововАбстракция предикатовif(x < 0){printf (“Case 1”);}else{printf (“Case 2”);}…if:: printf (“Case 1”);:: printf (“Case 2”);fi• В модели увеличивается количество возможныхвычислений– если формула не нарушается ни на одном вычислении модели,то на исходной программе она также будет выполнима,– если формула нарушается на одном из «добавленных»вычислений, необходимо увеличить уровень детализациимоделиАбстракция типов данныхint x;…if(x < 0) {…}else {if(x < 3) {…}else {…}…}mtype { X1, /*x < 0*/X2, /*0 <= x < 3*/X3 /*x >= 3*/};if:: x == X1 -> …:: x == X2 -> …:: x == X3 -> …fi• Диапазон типа данных разбивается на классыэквивалентности относительно конструкций организациипотока управления и проверяемых свойств.• Необходимо корректно моделировать:– предикаты в операторах ветвления,– операторы, изменяющие значения переменных этого типа.Абстракция наблюдаемыхпеременных• Из модели удаляется переменные, значениякоторых не влияют на выполнимость заданныхсвойств:– не используются при формулировке свойства,– не влияют на поток управления модели.• Операторы модели могут быть связаныдостаточно сложными зависимостями поданным и управлению, поэтому в ходе удаленияпеременных допускается только расширениемножества возможных вычислений моделиАбстракция наблюдаемыхпеременныхint x;…while (x != 0){x = get_value();}…printf (“Something\n”);printf (“Something\n”);do:: skip:: breakod;printf(“Something\n”)• Свойство – операция печати будет выполнена один раз,• Если абстрагируемся от цикла – теряем возможностьбесконечного зацикливания (сужаем множествовозможных вычислений).Абстракция «лишнего» кода…some_func();printf(“Func called!\n”)……some_func: skip;…• Свойство – some_func() будет вызвана.• Можно абстрагироваться от:– кода, не влияющего на проверяемое свойство (printf),– реального выполнения операторов, если нас интересует лишьфакт его выполнения («функция была вызвана»).• Здесь также необходимо следить за допустимымивычислениями.…int x;x = some_func();if (x)……int x;some_func: skip;if:: x -> ……Абстракция от функций и системныхвызововff(){sys_call();}sys_callcallres• Выполнение реальной функции заменяется наобмен сообщениями с процессом-«заглушкой»,• Обмен сообщениями должен корректномоделировать вызов функции:– синхронное взаимодействие, гарантированный отклик.От чего не стоит абстрагироваться• Поток управления:– ветвление, циклы;• Можно добавлять новые ветви и пути выполнения:– см.

«абстракция предикатов»,– если на добавленных путях будет нарушаться свойство,то эта ошибка будет обнаружена при анализеконтрпримера.• Нельзя убирать пути выполнения на основе «методапристального взгляда»– можно случайно убрать путь выполнения программы,на котором происходит нарушение свойстваправильности программы.Пример поэтапной абстракцииint x = 0;…while (x < 5){x++;}…printf (“Something\n”);1cycle: do:: inc: skip:: breakod;printf(“Something\n”)2//finite cycle removedprintf (“Something\n”);• Свойство – «Рано или поздно “Something” будетнапечатано».• При полной предикатной абстракции модель корректна, ноне адекватна свойству.• Если мы докажем, что в цикле – конечное число итераций,от него можно абстрагироваться.• Для этого нужно показать, что между двумя проверкамиусловия цикла всегда происходит инкремент х.Типичные ошибки и «странности»bit b;...if:: b ==:: b ==:: b ==:: b ==fi«Я хочу повыситьвероятность b == 1»1110->->->->AAABНедетерминизм связанне с понятием вероятности, ас понятием возможностиТипичные ошибки и «странности»bit b;active proctype A(){do:: b == 1 -> A:: else -> skipod}bit b;active proctype A(){(b == 1) -> A}«Я жду, пока невыполнится условие!»Используйте нативныеконструкции Promela!Типичные ошибки и «странности»bit b;...if:: b = 1:: b = 0fi;if:: b == 1 -> A:: b == 0 -> Bfiif:: A:: Bfi«Переменная можетпринимать разныезначения»От неё вообще нужноабстрагироваться!Типичные ошибки и «странности»chan f1 = [0] of bit;chan f2 = [0] of bit;active proctype caller(){do:: if::f1!m;:: else -> breakfi;...od}active proctype callee(){msg m;do:: f1?m -> f2!mod}«Но я же долженучесть, что каналможет быть занят!»Некорректное моделированиевызова функции: вызов«сбрасывается», если процесс«заглушка» занятТипичные ошибки и «странности»«Я сначала построюмодель, а потомуберу всё лишнее»Сначала прочитайтеспецификацию!!!Автоматы Бюхи.Проверка свойств линейноговремени.Проверяемые свойства(напоминание)• Свойства моделей– Tr(M) – множество всех трасс модели,– φ – свойство правильности.• Свойство выполняется на модели:M   ,   Tr( M )     • Свойство нарушается на модели, еслинарушается хотя бы на одной из трасс:M    ,   Tr( M )     Отрицание свойств(вспоминаем про двойственность)• Доказательство нарушения свойства φM    ,   Tr( M )     • Отличается от доказательства выполнения¬φM    ,   Tr( M )    • ПОЧЕМУ?M    ,   Tr( M )     MM    ,   Tr( M )        ,   Tr( M )    Более наглядноM φM ¬φφ ¬φМММ¬ (M φ)¬ (M ¬φ)Пример• Одновременное выполнение Mbyte x = 0;init {do:: x = 0:: x = 2od}  и M never {do:: assert(x == 0)od}Нарушаетсявыполнениемx=2never {do:: assert(x != 0)od}Нарушаетсявыполнениемx=0Автоматы и логика• Проще проверять нарушение свойства, чемего выполнение• Нарушение свойства описывается припомощи конструкции never – автомата,распознающего неправильное поведение• Свойства на последовательностяхсостояний удобно описывать при помощитемпоральной логикиКонечные автоматы• Конечный автомат A задаётся сигнатуройS , s0 , L, F , Tгде– S – множество состояний,– s0  S – начальное состояние,– L – конечное множество меток (символов),– F  S – множество терминальных символов,– T  S  L  S – отношение перехода насостояниях.Пример конечного автоматаA  S , s0 , L, F , Ts0α0S  s0 , s1 , s2 , s3 , s4 α2α4L  0 , 1 ,  2 ,  3 ,  4 , 5 s1α1s2 α s45α3s3F  {s4 }T  {( s0 , 0 , s1 ), ( s1 , 1 , s2 ),...}Вариант интерпретации(планировщик процессов)idles0α0α4α1s2 α s45α3s3readypre-empts1α2startexecuteunblockwaitingrunstopblockendЗаписываем в виде neveridlestartreadypre-emptnever {idle:(start) ->ready:(run) ->execute: if:: (pre-empt) -> goto ready:: (block) -> goto waiting:: (stop) -> goto endfi;waiting: (unblock) -> goto execute;end:skipexecuteunblock}waitingrunstopblockendДетерминизм и недетерминизм• Конечный автомат A  S , s0 , L, F , Tназывается детерминированным, только еслиs, l , (a, l , s' )  T  ( s, l , s' ' )  T   s'  s' ' – т.е.

целевое состояние перехода однозначноопределяется исходным состоянием и меткой– в противном случае автомат называетсянедетерминированнымdenyМодель серверазапросов, работающегов бесконечном циклеs0approves2trues1requests3trueОпределение прохода• Проходом конечного автомата S , s0 , L, F , Tназывается такое упорядоченное и, возможно,бесконечное множество переходов из T:  ( s0 , l0 , s1 ), ( s1 , l1 , s2 ), ( s2 , l2 , s3 ),...что i, i  0 : ( si , li , si 1 )  T .• Проход соответствует последовательности состояний из Sи слову в алфавите L.idlestartПоследовательность состояний:{idle, ready, {execute, waiting}*}readypre-emptrunstopexecuteendblockunblockwaitingСоответствующее слово в L:{start, run, {block, unblock}*}Допускающий проход• Допускающим проходом конечногоавтомата A называется конечный проход σ,финальный переход которого (sn-1,ln-1,sn)ведёт в терминальное состояниеidlestartreadypre-emptrunПоследовательность состоянийдля допускающего прохода:{idle, ready, execute, waiting, execute, end}stopexecuteendblockunblockwaitingСоответствующее слово в L:{start, run, block, unblock, stop}Язык автомата• Языком автомата А называется множествослов в алфавите L, соответствующихдопускающим проходам автомата АЯзык автомата:{idlestartstart,run,{{pre-empt,run}+{block,unblock}*}*,stopreadypre-emptrunstopexecuteendblockunblock}waitingСамое короткое слово языка:{start, run, stop}Описание свойств при помощиавтоматаПример свойства:если сначала p=T,а позже q=T,!qто впоследствии r=F!ppq!rЕсли мы попали втерминальное состояние, тосвойство нарушаетсяrerrorИногда нужно рассуждать опотенциально бесконечной задержкеКлассическое свойство живучести:«если p, тогда впоследствии q»Такое свойство может быть нарушено толькобесконечным проходомКлассическое определение описывает лишьконечные проходыНужно описать, что автомат не можетнаходиться в терминальном состояниибесконечно долго.!q!pperrorqНемного обозначений• Для любого бесконечного прохода σ конечногоавтомата можно выделить два множества:– множество σ+ состояний, встречающихся конечноечисло раз,– множество σω состояний, встречающихся бесконечноечисло раз.σωσσ+Допускающий проход по Бюхи(ω-допускание)• Допускающим ω-проходом конечного автомата Аназывается такой бесконечный проход σ, чтоi  0, ( si 1 , li 1 , si )   : si  F  si  т.е.

Характеристики

Тип файла
PDF-файл
Размер
1014,48 Kb
Тип материала
Высшее учебное заведение

Тип файла PDF

PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6534
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее