SlideShare a Scribd company logo
1 of 31
Download to read offline
Институт систем информатики им. А. П. Ершова СО РАН
Лаборатория теоретического программирования ИСИ СО РАН
Расширение метагенерацииРасширение метагенерации
условий корректности концепцией
семантической разметки
Кондратьев Дмитрий Александрович
Научный руководитель: канд. физ.-мат. наук
Алексей Владимирович Промский
Новосибирск, 2015 г.
Проект C-light
– В ИСИ СО РАН разрабатывается проект C-light;
– Проект C-light – система дедуктивной верификации
Си-программ;Си-программ;
– Дедуктивную верификацию предложил Ч. Хоар в 1969-м
году;
– Задача создания расширяемой системы верификации;
– Задача создания удобной для всех пользователей системы
верификации.
Задача создания удобной системы верификации
– Система верификации должна быть удобной не только для
специалистов-теоретиков, но и для обычных
программистов.
– Как анализировать недоказанные УК?
– Как определить, какие правила вывода были применены
при генерации УК?
– Как сопоставить подформулы УК и фрагменты– Как сопоставить подформулы УК и фрагменты
программы?
Метод решения задачи
– В 2008-м году Денни и Фишер предложили метод
семантической разметки*.
– По концепции Денни и Фишера полученные после
генерации УК несут в себе дополнительную информацию,
выраженную в виде семантических меток.
– Метки проходят различные стадии обработки и
переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке.
* Denney E., Fischer B. Explaining Verification Conditions // Proc.
AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.
Метод семантической разметки
– Структура УК. После упрощения УК обычно имеют вид
Хорновских дизъюнктов:
H1 ˄ ... ˄ Hn ⊃ C
– Структура метки.
Введем нотацию tl, где
• t – терм,
• l – метка или список меток.
Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где
• c – концепция, описывающая предназначение терма,
• o – позиция связанных с меткой программных конструкций,
• n – список меток, «просочившихся» в данную.
Метод семантической разметки: концепции
– Гипотезы подразделяются на
• Утверждения – аннотации из программы, вошедшие в УК;
• Предикаты, управляющие потоком исполнения, –
подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы.
– Заключения передают информацию об основной цели УК.
– Уточнители характеризуют и гипотезы, и заключения,
передавая информацию о том, как подформула появилась
в УК и как она была преобразована.в УК и как она была преобразована.
– Индуктивные уточнители передают второстепенную
цель УК.
Модифицированные правила Хоара
{P1} S {INVest_inv_iter}pres_inv,
(INVass_inv_exit ˄
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) = 0)while_ff ⊃ Q,type(e, MeM, TP), int) = 0)while_ff ⊃ Q,
(INVass_inv ˄
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) ≠ 0)while_tt ⊃ P1
pres_inv
–––––––––––––––––––––––––––––––––––––––––––––––––
{INVest_inv} while(e) S {Q}{INV } while(e) S {Q}
Упрощение имеющих метки УК
Правила для не имеющих меток УК нельзя переиспользовать
без пересмотра, так как
– Семантическая разметка может изменить применимость
правила;
– Нужно аккуратно работать с областью действия меток.
Правила упрощения должны достигать следующих целей:
– Удаление лишних меток;– Удаление лишних меток;
– Минимизация области действия оставшихся меток;
– Сохранение достаточного числа меток.
Правила упрощения имеющих метки УК
Введем
c(o, l) ⊗ m = c(o, l • m), где • – конкатенация списков.
Группировка правил:
1) Правила, удаляющие метки из тривиальных, тождественно
истинных (под-)формул;
2) Правила, выборочно удаляющие имеющие метки
тождественно ложные подформулы;
3) Правила, заменяющие всю формулу на false;
4) Правила, осуществляющие «просачивание» меток.
Например:
– P ˄ Ql → Pl ˄ Ql
– tnm → tn ⊗ m
Трансляция
1) Нормализация УК с использованием правил их
упрощения;
2) Извлечение меток после применения правила устранения2) Извлечение меток после применения правила устранения
вложенности;
3) Нормализация меток для сопоставления меткам шаблонов
объяснений;
4) Генерация текста с использованием шаблонов4) Генерация текста с использованием шаблонов
объяснений.
Конструкция label
Введем конструкцию (label t c), где
– t – терм, к которому приписана метка;
– c – строка (тип метки).
Расширение языка шаблонов семантическими метками
(label {P1} S {(label INV est_inv_iter)}
pres_inv),
((label INV ass_inv_exit) /
(label
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) = 0type(e, MeM, TP), int) = 0
while_ff)) => Q,
(label
((label INV ass_inv) /
(label
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) != 0type(e, MeM, TP), int) != 0
while_tt)) => P1
pres_inv)
|-
{(label any_predicate(INV) est_inv}
while(simple_expression(e)) any_code(S)
{any_predicate(Q)}
Задание шаблонов объяснений
Введем конструкцию (label_pattern label format_text), где:
– label – концепция метки;
– format_text – форматная строка, задающая текстовый
шаблон, в которой можно использовать специальные
конструкции:
• %begin – начало диапазона строк относящегося к
данной метке программного кода;
• %end – конец диапазона строк относящегося к данной• %end – конец диапазона строк относящегося к данной
метке программного кода.
Реализация концепции семантической разметки
– Структура label:
struct label
{{
char* concept;
int location_begin;
int location_end;
}}
– Иерархия на метках.
Протокол для локализации ошибок
Транслятор: добавляет метаинформацию
До применения правила трансляции:
56. for(; i > 0 ; i++)
57. {
58. k++;
59. continue;59. continue;
60. j++;
61. }
После применения правила трансляции:
78. /* begin changes BCE5 17 79-85 */
79. for(; i > 0; i++)
80. {
81. j++;81. j++;
82. goto l;
83. k++;
84. l:
85. }
86. /* end changes */
Протокол для локализации ошибок
Обратный транслятор: использует метаинформацию транслятора
До применения правила обратной трансляции:
69. /* begin changes BCE5 19 70-76 */
70. for(; i > 0; i++)
71. {
72. j++;
73. goto l;
74. k++;
75. l:
76. }
77. /* end changes */
После применения правила обратной трансляции:
43. /*begin reverse 70-76*/
44. for(; i > 0 ; i++)
45. {
46. k++;
47. continue;
48. j++;
49. }
50. /* end reverse */
Пример содержащей ошибку функции на языке C-light
Функция NegateFirst на языке C-kernel
Недоказанное условие корректности
Объяснение недоказанного условия корректности
Поиск максимума в массиве
/*@ requires (a != NULL) && (length > 0);
ensures (0 <= x) && (x < length);
ensures forall int i; (0 <= i) && (i < length) ==>
(a[x] => a[i]);
*/*/
int max(int* a, int length);
Содержащая ошибку функция max
int max(int* a, int length)
{
int x = 0;
int y = length - 1;
/*@ loop invariant (0 <= x) && (x < length) &&
(0 <= y) && (y < length) &&(0 <= y) && (y < length) &&
(y >= x) &&
(forall int i; (0 <= i) && (i <= x) ==>
(a[i] <= a[x]) || (a[i] <= a[y])) &&
(forall int i; (y <= i) && (i <= length - 1) ==>
(a[i] <= a[x]) || (a[i] <= a[y]));
*/*/
while (x == y)
{
if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;}
}
return x;
}
Полученная C-kernel программа
1 // (AND (NEQ a |@NULL|)(> length 0))
2 int max(int* a, int length)
3 {
4-11 ...
12 }12 }
13 /* (AND (<= 0 x)(< x length)
(FORALL (i) (IMPLIES (AND (<= 0 i) (< i length))
(>= a[x] a[i]))))
*/
Функция max на языке C-kernel
2 int max(int* a, int length)
3 {
4 auto int x = 0;
5 auto int y = length - 1;
6 /* (AND (<= 0 x)(< x length)(<= 0 y)6 /* (AND (<= 0 x)(< x length)(<= 0 y)
(< y length)(>= y x)
(FORALL (i) (IMPLIES (AND (<= 0 i) (<= i x))
(OR (<= a[i] a[x]) (<= a[i] a[y]))))
(FORALL (i) (IMPLIES (AND (<= y i)
(<= i (- length 1)))
(OR (<= a[i] a[x])
(<= a[i] a[y])))))
*/*/
7 while (x == y)
8 {
9 if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;}
10 }
11 return x;
12 }
Недоказанное условие корректности
( )( )( ) ( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( )








































∧



















≤
∧≤
∀
∧≥
∧<
∧≤
∧<∧≤
xMeMMDiMeMMD
iMeMMD
i
xMeMMDyMeMMD
lengthMeMMDyMeMMD
yMeMMD
lengthMeMMDxMeMMDxMeMMD
exitinvass
0
0
0
6__
( )( ) ( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( )( ) ( )( )( )
( )( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( )( ) ( )( )( )( )( )
( )
























∧


























































≤
∨≤
⇒






−≤
∧≤
∀
∧


























≤
∨≤
⇒
 ≤
∀
yMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDaMeMMDiMeMMDaMeMMD
lengthMeMMDiMeMMD
iMeMMDyMeMMD
i
yMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDiMeMMD
i
,,
,,
1
,,
,,
( )( ) ( )( )( )( )( )
( )( ) ( )( )( )( )
( )
( )( )( ) ( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( ) 

































≥⇒






<
∧≤
∀
∧<∧≤
⇒














=





=
=
iMeMMDaMeMMDxMeMMDaMeMMD
lengthMeMMDiMeMMD
iMeMMD
i
lengthMeMMDxMeMMDxMeMMD
TPMeMyMeMMDxMeMMDtype
STDMeMyMeMMDxMeMMDvalval
cast
ffwhile
,,
0
0
0
int,,,
,..,
7_
Объяснение недоказанного условия корректности
This VC corresponds to function "max".
Hence, given
– assumption that loop invariant holds without loop entry at line 6,
– assumption that the loop condition doesn't hold at line 7 .
Копирование файла
Копирование файла на языке C-kernel
Условие корректности
где
Объяснение условия корректности
Институт систем информатики им. А. П. Ершова СО РАН
Лаборатория теоретического программирования ИСИ СО РАН
Расширение метагенерацииРасширение метагенерации
условий корректности концепцией
семантической разметки
Кондратьев Дмитрий Александрович
Научный руководитель: канд. физ.-мат. наук
Алексей Владимирович Промский
Новосибирск, 2015 г.

More Related Content

What's hot

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
RF-Lab
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемы
aleksashka3
 
Логические основы построения эвм
Логические основы построения эвмЛогические основы построения эвм
Логические основы построения эвм
aleksashka3
 
КР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пкКР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пк
aleksashka3
 

What's hot (20)

TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Алгоритмическая конструкция следование
Алгоритмическая конструкция следованиеАлгоритмическая конструкция следование
Алгоритмическая конструкция следование
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 
Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
 
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
 
Структурные формулы и функциональные схемы
Структурные формулы и функциональные схемыСтруктурные формулы и функциональные схемы
Структурные формулы и функциональные схемы
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
Логические основы построения эвм
Логические основы построения эвмЛогические основы построения эвм
Логические основы построения эвм
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
КР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пкКР Решение логических задач. логические основы построения пк
КР Решение логических задач. логические основы построения пк
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 

Viewers also liked

Viewers also liked (20)

TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemTMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
 
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade SystemsTMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
 
TMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard FunctionsTMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: A Need To Specify and Verify Standard Functions
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
 
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2015: Automated process of creating test scenarios for financial protoco...
 
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
 
TMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir ApproachTMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Software Engineering Education: The Messir Approach
 
TMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in RoboticsTMPA-2015: Formal Methods in Robotics
TMPA-2015: Formal Methods in Robotics
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
 
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
 
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentTMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
 
TMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored AccessTMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: FPGA-Based Low Latency Sponsored Access
 
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart CastsTMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
 
TMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems VisualizationTMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Layered Layouts for Software Systems Visualization
 

Similar to TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup

20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
Computer Science Club
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
Computer Science Club
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
etyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
RF-Lab
 
Natalia Shabaldina. CSEDays
Natalia Shabaldina. CSEDaysNatalia Shabaldina. CSEDays
Natalia Shabaldina. CSEDays
LiloSEA
 
практика 2
практика 2практика 2
практика 2
student_kai
 

Similar to TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup (20)

20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
 
верификация
верификацияверификация
верификация
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Верификация управляющих программ в системе автоматизации РТК (Iron hand)
Верификация управляющих программ в системе автоматизации РТК (Iron hand)Верификация управляющих программ в системе автоматизации РТК (Iron hand)
Верификация управляющих программ в системе автоматизации РТК (Iron hand)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Natalia Shabaldina. CSEDays
Natalia Shabaldina. CSEDaysNatalia Shabaldina. CSEDays
Natalia Shabaldina. CSEDays
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
практика 2
практика 2практика 2
практика 2
 
07 HappyDev-lite-2015 spring. Евгений Тюменцев. Зачем программисту нужно зна...
07 HappyDev-lite-2015 spring. Евгений Тюменцев. Зачем программисту нужно зна...07 HappyDev-lite-2015 spring. Евгений Тюменцев. Зачем программисту нужно зна...
07 HappyDev-lite-2015 spring. Евгений Тюменцев. Зачем программисту нужно зна...
 

More from Iosif Itkin

More from Iosif Itkin (20)

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesExactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test Oracles
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolExactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market Infrastructures
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AI
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresEXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiEXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenEXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
 
QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop Testing
 
Behaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileBehaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibile
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in Review
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and Strategy
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesFIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
 

TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup

  • 1. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.
  • 2. Проект C-light – В ИСИ СО РАН разрабатывается проект C-light; – Проект C-light – система дедуктивной верификации Си-программ;Си-программ; – Дедуктивную верификацию предложил Ч. Хоар в 1969-м году; – Задача создания расширяемой системы верификации; – Задача создания удобной для всех пользователей системы верификации.
  • 3. Задача создания удобной системы верификации – Система верификации должна быть удобной не только для специалистов-теоретиков, но и для обычных программистов. – Как анализировать недоказанные УК? – Как определить, какие правила вывода были применены при генерации УК? – Как сопоставить подформулы УК и фрагменты– Как сопоставить подформулы УК и фрагменты программы?
  • 4. Метод решения задачи – В 2008-м году Денни и Фишер предложили метод семантической разметки*. – По концепции Денни и Фишера полученные после генерации УК несут в себе дополнительную информацию, выраженную в виде семантических меток. – Метки проходят различные стадии обработки и переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке. * Denney E., Fischer B. Explaining Verification Conditions // Proc. AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.
  • 5. Метод семантической разметки – Структура УК. После упрощения УК обычно имеют вид Хорновских дизъюнктов: H1 ˄ ... ˄ Hn ⊃ C – Структура метки. Введем нотацию tl, где • t – терм, • l – метка или список меток. Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где • c – концепция, описывающая предназначение терма, • o – позиция связанных с меткой программных конструкций, • n – список меток, «просочившихся» в данную.
  • 6. Метод семантической разметки: концепции – Гипотезы подразделяются на • Утверждения – аннотации из программы, вошедшие в УК; • Предикаты, управляющие потоком исполнения, – подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы. – Заключения передают информацию об основной цели УК. – Уточнители характеризуют и гипотезы, и заключения, передавая информацию о том, как подформула появилась в УК и как она была преобразована.в УК и как она была преобразована. – Индуктивные уточнители передают второстепенную цель УК.
  • 7. Модифицированные правила Хоара {P1} S {INVest_inv_iter}pres_inv, (INVass_inv_exit ˄ cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) = 0)while_ff ⊃ Q,type(e, MeM, TP), int) = 0)while_ff ⊃ Q, (INVass_inv ˄ cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) ≠ 0)while_tt ⊃ P1 pres_inv ––––––––––––––––––––––––––––––––––––––––––––––––– {INVest_inv} while(e) S {Q}{INV } while(e) S {Q}
  • 8. Упрощение имеющих метки УК Правила для не имеющих меток УК нельзя переиспользовать без пересмотра, так как – Семантическая разметка может изменить применимость правила; – Нужно аккуратно работать с областью действия меток. Правила упрощения должны достигать следующих целей: – Удаление лишних меток;– Удаление лишних меток; – Минимизация области действия оставшихся меток; – Сохранение достаточного числа меток.
  • 9. Правила упрощения имеющих метки УК Введем c(o, l) ⊗ m = c(o, l • m), где • – конкатенация списков. Группировка правил: 1) Правила, удаляющие метки из тривиальных, тождественно истинных (под-)формул; 2) Правила, выборочно удаляющие имеющие метки тождественно ложные подформулы; 3) Правила, заменяющие всю формулу на false; 4) Правила, осуществляющие «просачивание» меток. Например: – P ˄ Ql → Pl ˄ Ql – tnm → tn ⊗ m
  • 10. Трансляция 1) Нормализация УК с использованием правил их упрощения; 2) Извлечение меток после применения правила устранения2) Извлечение меток после применения правила устранения вложенности; 3) Нормализация меток для сопоставления меткам шаблонов объяснений; 4) Генерация текста с использованием шаблонов4) Генерация текста с использованием шаблонов объяснений.
  • 11. Конструкция label Введем конструкцию (label t c), где – t – терм, к которому приписана метка; – c – строка (тип метки).
  • 12. Расширение языка шаблонов семантическими метками (label {P1} S {(label INV est_inv_iter)} pres_inv), ((label INV ass_inv_exit) / (label cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) = 0type(e, MeM, TP), int) = 0 while_ff)) => Q, (label ((label INV ass_inv) / (label cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) != 0type(e, MeM, TP), int) != 0 while_tt)) => P1 pres_inv) |- {(label any_predicate(INV) est_inv} while(simple_expression(e)) any_code(S) {any_predicate(Q)}
  • 13. Задание шаблонов объяснений Введем конструкцию (label_pattern label format_text), где: – label – концепция метки; – format_text – форматная строка, задающая текстовый шаблон, в которой можно использовать специальные конструкции: • %begin – начало диапазона строк относящегося к данной метке программного кода; • %end – конец диапазона строк относящегося к данной• %end – конец диапазона строк относящегося к данной метке программного кода.
  • 14. Реализация концепции семантической разметки – Структура label: struct label {{ char* concept; int location_begin; int location_end; }} – Иерархия на метках.
  • 15. Протокол для локализации ошибок Транслятор: добавляет метаинформацию До применения правила трансляции: 56. for(; i > 0 ; i++) 57. { 58. k++; 59. continue;59. continue; 60. j++; 61. } После применения правила трансляции: 78. /* begin changes BCE5 17 79-85 */ 79. for(; i > 0; i++) 80. { 81. j++;81. j++; 82. goto l; 83. k++; 84. l: 85. } 86. /* end changes */
  • 16. Протокол для локализации ошибок Обратный транслятор: использует метаинформацию транслятора До применения правила обратной трансляции: 69. /* begin changes BCE5 19 70-76 */ 70. for(; i > 0; i++) 71. { 72. j++; 73. goto l; 74. k++; 75. l: 76. } 77. /* end changes */ После применения правила обратной трансляции: 43. /*begin reverse 70-76*/ 44. for(; i > 0 ; i++) 45. { 46. k++; 47. continue; 48. j++; 49. } 50. /* end reverse */
  • 17. Пример содержащей ошибку функции на языке C-light
  • 18. Функция NegateFirst на языке C-kernel
  • 21. Поиск максимума в массиве /*@ requires (a != NULL) && (length > 0); ensures (0 <= x) && (x < length); ensures forall int i; (0 <= i) && (i < length) ==> (a[x] => a[i]); */*/ int max(int* a, int length);
  • 22. Содержащая ошибку функция max int max(int* a, int length) { int x = 0; int y = length - 1; /*@ loop invariant (0 <= x) && (x < length) && (0 <= y) && (y < length) &&(0 <= y) && (y < length) && (y >= x) && (forall int i; (0 <= i) && (i <= x) ==> (a[i] <= a[x]) || (a[i] <= a[y])) && (forall int i; (y <= i) && (i <= length - 1) ==> (a[i] <= a[x]) || (a[i] <= a[y])); */*/ while (x == y) { if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;} } return x; }
  • 23. Полученная C-kernel программа 1 // (AND (NEQ a |@NULL|)(> length 0)) 2 int max(int* a, int length) 3 { 4-11 ... 12 }12 } 13 /* (AND (<= 0 x)(< x length) (FORALL (i) (IMPLIES (AND (<= 0 i) (< i length)) (>= a[x] a[i])))) */
  • 24. Функция max на языке C-kernel 2 int max(int* a, int length) 3 { 4 auto int x = 0; 5 auto int y = length - 1; 6 /* (AND (<= 0 x)(< x length)(<= 0 y)6 /* (AND (<= 0 x)(< x length)(<= 0 y) (< y length)(>= y x) (FORALL (i) (IMPLIES (AND (<= 0 i) (<= i x)) (OR (<= a[i] a[x]) (<= a[i] a[y])))) (FORALL (i) (IMPLIES (AND (<= y i) (<= i (- length 1))) (OR (<= a[i] a[x]) (<= a[i] a[y]))))) */*/ 7 while (x == y) 8 { 9 if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;} 10 } 11 return x; 12 }
  • 25. Недоказанное условие корректности ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )                                         ∧                    ≤ ∧≤ ∀ ∧≥ ∧< ∧≤ ∧<∧≤ xMeMMDiMeMMD iMeMMD i xMeMMDyMeMMD lengthMeMMDyMeMMD yMeMMD lengthMeMMDxMeMMDxMeMMD exitinvass 0 0 0 6__ ( )( ) ( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( )( ) ( )( )( ) ( )( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( )( ) ( )( )( )( )( ) ( )                         ∧                                                           ≤ ∨≤ ⇒       −≤ ∧≤ ∀ ∧                           ≤ ∨≤ ⇒  ≤ ∀ yMeMMDaMeMMDiMeMMDaMeMMD xMeMMDaMeMMDiMeMMDaMeMMD lengthMeMMDiMeMMD iMeMMDyMeMMD i yMeMMDaMeMMDiMeMMDaMeMMD xMeMMDaMeMMDiMeMMDaMeMMD xMeMMDiMeMMD i ,, ,, 1 ,, ,, ( )( ) ( )( )( )( )( ) ( )( ) ( )( )( )( ) ( ) ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( )                                   ≥⇒       < ∧≤ ∀ ∧<∧≤ ⇒               =      = = iMeMMDaMeMMDxMeMMDaMeMMD lengthMeMMDiMeMMD iMeMMD i lengthMeMMDxMeMMDxMeMMD TPMeMyMeMMDxMeMMDtype STDMeMyMeMMDxMeMMDvalval cast ffwhile ,, 0 0 0 int,,, ,.., 7_
  • 26. Объяснение недоказанного условия корректности This VC corresponds to function "max". Hence, given – assumption that loop invariant holds without loop entry at line 6, – assumption that the loop condition doesn't hold at line 7 .
  • 31. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.