SlideShare a Scribd company logo
1 of 12
Download to read offline
Разработка автоматных программ методом трансформации требований 
Шелехов В.И. 
Институт Систем Информатики им. А.П. Ершова, Новосибирск 
15.11.14 “Инструменты и методы анализа программ”, TMPA’14
Автоматное программирование 
Автоматная программа – конечный автомат в виде гиперграфа. Вершины – управляющие состояния. Дуги – сегменты кода. В качестве автоматной программы используется спецификация требований на языке продукций вида 
<условие1>,…, <условиеn>  <действие1>, …, <действиеm> 
Класс реактивных систем 
Класс программ-функций 
Программу-функцию можно перестроить таким образом, чтобы все операторы ввода данных находились в начале программы, а весь вывод собран в конце программы 
Не следует использовать автоматное программирование для программ-функций.
pred move(DATA buf, x : DATA buf’, x’) 
pre len(buf)  47 
post buf’ + x’ = buf + x & ( len(buf + x)  47 ? len(buf’)=47 : x’=nil ); 
Функциональное программирование 
Предикатное программирование 
Императивное программирование 
Предикатное программирование 
Язык функций и выражений 
Нет переменных 
Предикат – оператор 
Нет циклов типа while и указателей 
Гиперфункции 
Erlang 
Akka 
Автоматное программирование А. Шалыто 
? 
buf 
x 
x’
hyper move(DATA buf, x: DATA buf’ #1: 
DATA buf’ #2: 
DATA buf’, x’ #3) 
pre len(buf)  47 // общее предусловие 
pre 1: len(buf+x) < 47 
pre 2: len(buf+x) = 47 
pre 3: len(buf+x) > 47 
post 1: len(buf’) < 47 & buf’ = buf + x 
post 2: len(buf’) = 47 & buf’ = buf + x 
post 3: len(buf’) = 47 & buf + x = buf’ + x’ & x’≠nil; 
buf 
x 
x’
Пример автоматной программы 
Состояние. Объект класса Лифт. 
Управляющие состояния программы Lift: 
idle: inv dir = neutral; // лифт стоит на этаже, двери закрыты 
start: inv dir ≠ neutral; // лифт начинает движение в напр. dir 
open; // лифт подошел к этажу или уже стоит на этаже 
process Lift { 
idle  decision1( : #idle : #start : #open); 
start  Movement( : #open); 
open  atFloor( : #idle : #start) 
} 
idle 
open 
start
Автоматная программа управления лифтом 
process Lift { 
idle: decision1( : #idle : #start : #open); 
start: starting(); 
move: if (near_floor()) check_floor( : #move : #stop); 
stop: stopping(); 
open: openDoor(); 
delay Tdoor; 
closeDoor(); 
close: if (closedDoor()) decision2( : #idle : #start); 
if (blockedDoor() { openDoor(); 
delay Tdoor1; 
closeDoor() 
} 
#close 
}
Трансформации требований 
1.Эквивалентные замены move(buf, x : buf’, x’)  move(buf, x: buf’ #G: buf’ #G: buf’, x’ #G); G: 
2.Специализация H: S  H1: inv e(x); S H2: inv e(x); S 
3.Редукция суперпозиции H: B(s: s’); C  H: B(s: s’) #K K: inv e(s); C
Требования к Передатчику в протоколе асинхронного способа перадачи данных (ATM ) уровня AAL-2 
len(packs) < 47, CPSpacket(pd)  
set_Timer_CU, 
packs’ = packs + ConstructCPS_PacketHeader(pd)+ pd; 
len(packs)  47, SEND_request()  
extract_block(packs: block, packs’), 
ATM_data(stf + block), 
if (packs’≠nil) set_Timer_CU, 
stf’ = ConstructSTF(min(len(packs’), 47)); 
0 < len(packs) < 47, timer(), SEND_request()  
ATM_data(stf + fill(packs)), 
packs’ = nil, 
stf’ = ConstructSTF(0). 
H
Трансформация 1. Заменим packs на buf + ph + pd в требованиях (1). 
Трансформация 2. В требовании (3.1) заменим вызовы программы move на эквивалентные вызовы гиперфункций. 
Трансформация 3. Введем новые управляющие состояния с инвариантами: 
PART: inv len(buf) < 47 & ~ph & ~pd; 
B1: inv len(buf) = 47 & ~ph & ~pd; // ph и pd полностью переписаны 
B2: inv len(buf) = 47 & ~ph; // ph полностью переписан 
B3: inv len(buf) = 47 & ph’≠nil; // ph переписан частично 
Трансформация 4. Проведем специализацию требования (3.4) для управляющих состояний B1, B2 и B3, а также требований (3.2) и (3.3) для управляющего состояния PART. 
Трансформация 5. Проведем уточнение итоговых управляющих состояний во всех требованиях
Требования: (4) 
PART, CPSpacket(pd)  
set_Timer_CU, ph = ConstructCPS_PacketHeader(pd), H; 
H  move(buf, ph: buf’ #G : buf’ #B2: buf’, ph’ #B3); 
G  move(buf, pd: buf’ #PART : buf’ #B1 : buf’, pd’ #B2); 
PART, buf≠nil, timer(), SEND_request()  ATM_data(stf + fill(buf)), 
buf’ = nil, stf’ = ConstructSTF(0), PART; 
B1, SEND_request()  ATM_data(stf + buf), 
buf’ = nil; stf’ = ConstructSTF(0), PART; 
B2, SEND_request()  ATM_data(stf + buf); set_Timer_CU, 
buf’ = nil; stf’ = ConstructSTF(min(len(pd), 47)), G; 
B3, SEND_request()  ATM_data(stf + buf), set_Timer_CU, 
buf’ = ph; stf’ = ConstructSTF(min(len(ph + pd), 47)), G.
process transfer() { 
PART: inv len(buf) < 47 & ~ph & ~pd; 
if (CPSpacket(pd)) { 
set_Timer_CU(); 
ph = ConstructCPS_PacketHeader(pd); 
move(buf, ph : buf’ #G: buf’ #B2 : buf’, ph’ #B3) 
G: inv len(buf) < 47 & ~ph; 
move(buf, pd : buf #PART: buf’ #B1: buf’, pd’ #B2) 
} else if (buf≠nil & timer() & SEND_request()) { 
send ATM_data(stf + fill(buf)); 
buf = nil; stf = ConstructSTF(0) #PART 
} 
B1: inv len(buf) = 47 &~ph & ~pd; 
receive SEND_request(); 
send ATM_data(stf + buf); stf’ = ConstructSTF(0); 
buf =nil #PART 
B2: inv len(buf) = 47 &~ph; 
receive SEND_request(); 
send ATM_data(stf + buf); set_Timer_CU(); 
buf =nil; stf’ = ConstructSTF(min(len(pd), 47)) #G 
B3: inv len(buf) = 47 & ph≠nil; 
receive SEND_request(); 
send ATM_data(stf + buf); set_Timer_CU(); 
buf = ph; stf’ = ConstructSTF(min(len(ph + pd), 47)); #G 
}
Заключение 
Разработан метод трансформации требований от простых к более сложным. В процессе трансформаций в исходных требованиях (1) было найдено 7 ошибок. 
Планы 
Построить серию протоколов взаимного исключения методом трансформации требований 
Разработать дуальное (текстовое и графическое) представление автоматных программ на базе графической оболочки языка Дракон (НПЦ автоматики и приборостроения, ракетно- космическая отрасль). Эргономические методы.

More Related Content

What's hot

Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsAlexey Paznikov
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 

What's hot (20)

Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 

Similar to Optimization of Automata-Based Programs by means of Requirements Transformation Method

трасировка Mpi приложений
трасировка Mpi приложенийтрасировка Mpi приложений
трасировка Mpi приложенийMichael Karpov
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3etyumentcev
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмыЕлена Ключева
 
01 линейные структуры данных
01 линейные структуры данных01 линейные структуры данных
01 линейные структуры данныхFedor Tsarev
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Sigma Software
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхSergey Vasilyev
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLvitaliykulanov
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеYandex
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поискFedor Tsarev
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statementsvitaliykulanov
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Использование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в WindowsИспользование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в WindowsSQALab
 

Similar to Optimization of Automata-Based Programs by means of Requirements Transformation Method (20)

трасировка Mpi приложений
трасировка Mpi приложенийтрасировка Mpi приложений
трасировка Mpi приложений
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмы
 
01 линейные структуры данных
01 линейные структуры данных01 линейные структуры данных
01 линейные структуры данных
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программирование
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поиск
 
Statements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent StatementsStatements in VHDL - Concurrent Statements
Statements in VHDL - Concurrent Statements
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Использование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в WindowsИспользование cygwin для автоматизации процессов тестирования в Windows
Использование cygwin для автоматизации процессов тестирования в Windows
 

More from Iosif Itkin

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Iosif Itkin
 
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...Iosif Itkin
 
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 OraclesIosif Itkin
 
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 ProtocolIosif Itkin
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresIosif Itkin
 
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 SeasonIosif Itkin
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AIIosif Itkin
 
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 InfrastructuresIosif Itkin
 
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...Iosif Itkin
 
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 ShamraiIosif Itkin
 
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 OpenIosif Itkin
 
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...Iosif Itkin
 
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...Iosif Itkin
 
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)Iosif Itkin
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop TestingIosif Itkin
 
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 possibileIosif Itkin
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in ReviewIosif Itkin
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyIosif Itkin
 
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 ChallengesIosif Itkin
 
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)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)
 

Optimization of Automata-Based Programs by means of Requirements Transformation Method

  • 1. Разработка автоматных программ методом трансформации требований Шелехов В.И. Институт Систем Информатики им. А.П. Ершова, Новосибирск 15.11.14 “Инструменты и методы анализа программ”, TMPA’14
  • 2. Автоматное программирование Автоматная программа – конечный автомат в виде гиперграфа. Вершины – управляющие состояния. Дуги – сегменты кода. В качестве автоматной программы используется спецификация требований на языке продукций вида <условие1>,…, <условиеn>  <действие1>, …, <действиеm> Класс реактивных систем Класс программ-функций Программу-функцию можно перестроить таким образом, чтобы все операторы ввода данных находились в начале программы, а весь вывод собран в конце программы Не следует использовать автоматное программирование для программ-функций.
  • 3. pred move(DATA buf, x : DATA buf’, x’) pre len(buf)  47 post buf’ + x’ = buf + x & ( len(buf + x)  47 ? len(buf’)=47 : x’=nil ); Функциональное программирование Предикатное программирование Императивное программирование Предикатное программирование Язык функций и выражений Нет переменных Предикат – оператор Нет циклов типа while и указателей Гиперфункции Erlang Akka Автоматное программирование А. Шалыто ? buf x x’
  • 4. hyper move(DATA buf, x: DATA buf’ #1: DATA buf’ #2: DATA buf’, x’ #3) pre len(buf)  47 // общее предусловие pre 1: len(buf+x) < 47 pre 2: len(buf+x) = 47 pre 3: len(buf+x) > 47 post 1: len(buf’) < 47 & buf’ = buf + x post 2: len(buf’) = 47 & buf’ = buf + x post 3: len(buf’) = 47 & buf + x = buf’ + x’ & x’≠nil; buf x x’
  • 5. Пример автоматной программы Состояние. Объект класса Лифт. Управляющие состояния программы Lift: idle: inv dir = neutral; // лифт стоит на этаже, двери закрыты start: inv dir ≠ neutral; // лифт начинает движение в напр. dir open; // лифт подошел к этажу или уже стоит на этаже process Lift { idle  decision1( : #idle : #start : #open); start  Movement( : #open); open  atFloor( : #idle : #start) } idle open start
  • 6. Автоматная программа управления лифтом process Lift { idle: decision1( : #idle : #start : #open); start: starting(); move: if (near_floor()) check_floor( : #move : #stop); stop: stopping(); open: openDoor(); delay Tdoor; closeDoor(); close: if (closedDoor()) decision2( : #idle : #start); if (blockedDoor() { openDoor(); delay Tdoor1; closeDoor() } #close }
  • 7. Трансформации требований 1.Эквивалентные замены move(buf, x : buf’, x’)  move(buf, x: buf’ #G: buf’ #G: buf’, x’ #G); G: 2.Специализация H: S  H1: inv e(x); S H2: inv e(x); S 3.Редукция суперпозиции H: B(s: s’); C  H: B(s: s’) #K K: inv e(s); C
  • 8. Требования к Передатчику в протоколе асинхронного способа перадачи данных (ATM ) уровня AAL-2 len(packs) < 47, CPSpacket(pd)  set_Timer_CU, packs’ = packs + ConstructCPS_PacketHeader(pd)+ pd; len(packs)  47, SEND_request()  extract_block(packs: block, packs’), ATM_data(stf + block), if (packs’≠nil) set_Timer_CU, stf’ = ConstructSTF(min(len(packs’), 47)); 0 < len(packs) < 47, timer(), SEND_request()  ATM_data(stf + fill(packs)), packs’ = nil, stf’ = ConstructSTF(0). H
  • 9. Трансформация 1. Заменим packs на buf + ph + pd в требованиях (1). Трансформация 2. В требовании (3.1) заменим вызовы программы move на эквивалентные вызовы гиперфункций. Трансформация 3. Введем новые управляющие состояния с инвариантами: PART: inv len(buf) < 47 & ~ph & ~pd; B1: inv len(buf) = 47 & ~ph & ~pd; // ph и pd полностью переписаны B2: inv len(buf) = 47 & ~ph; // ph полностью переписан B3: inv len(buf) = 47 & ph’≠nil; // ph переписан частично Трансформация 4. Проведем специализацию требования (3.4) для управляющих состояний B1, B2 и B3, а также требований (3.2) и (3.3) для управляющего состояния PART. Трансформация 5. Проведем уточнение итоговых управляющих состояний во всех требованиях
  • 10. Требования: (4) PART, CPSpacket(pd)  set_Timer_CU, ph = ConstructCPS_PacketHeader(pd), H; H  move(buf, ph: buf’ #G : buf’ #B2: buf’, ph’ #B3); G  move(buf, pd: buf’ #PART : buf’ #B1 : buf’, pd’ #B2); PART, buf≠nil, timer(), SEND_request()  ATM_data(stf + fill(buf)), buf’ = nil, stf’ = ConstructSTF(0), PART; B1, SEND_request()  ATM_data(stf + buf), buf’ = nil; stf’ = ConstructSTF(0), PART; B2, SEND_request()  ATM_data(stf + buf); set_Timer_CU, buf’ = nil; stf’ = ConstructSTF(min(len(pd), 47)), G; B3, SEND_request()  ATM_data(stf + buf), set_Timer_CU, buf’ = ph; stf’ = ConstructSTF(min(len(ph + pd), 47)), G.
  • 11. process transfer() { PART: inv len(buf) < 47 & ~ph & ~pd; if (CPSpacket(pd)) { set_Timer_CU(); ph = ConstructCPS_PacketHeader(pd); move(buf, ph : buf’ #G: buf’ #B2 : buf’, ph’ #B3) G: inv len(buf) < 47 & ~ph; move(buf, pd : buf #PART: buf’ #B1: buf’, pd’ #B2) } else if (buf≠nil & timer() & SEND_request()) { send ATM_data(stf + fill(buf)); buf = nil; stf = ConstructSTF(0) #PART } B1: inv len(buf) = 47 &~ph & ~pd; receive SEND_request(); send ATM_data(stf + buf); stf’ = ConstructSTF(0); buf =nil #PART B2: inv len(buf) = 47 &~ph; receive SEND_request(); send ATM_data(stf + buf); set_Timer_CU(); buf =nil; stf’ = ConstructSTF(min(len(pd), 47)) #G B3: inv len(buf) = 47 & ph≠nil; receive SEND_request(); send ATM_data(stf + buf); set_Timer_CU(); buf = ph; stf’ = ConstructSTF(min(len(ph + pd), 47)); #G }
  • 12. Заключение Разработан метод трансформации требований от простых к более сложным. В процессе трансформаций в исходных требованиях (1) было найдено 7 ошибок. Планы Построить серию протоколов взаимного исключения методом трансформации требований Разработать дуальное (текстовое и графическое) представление автоматных программ на базе графической оболочки языка Дракон (НПЦ автоматики и приборостроения, ракетно- космическая отрасль). Эргономические методы.