A B

реклама
Игорь Борисович Бурдонов
Александр Сергеевич Косачев
ТЕСТИРОВАНИЕ КОМПОНЕНТОВ
И ВЕРИФИКАЦИЯ КОМПОЗИЦИИ
РАСПРЕДЕЛЁННОЙ СИСТЕМЫ
Институт Системного Программирования РАН
RedVerst
1
Институт Системного
Программирования РАН
Группа RedVerst =
REsearch and Development:
VERification, Specification, Testing.
Методология и технология
верификации программ UniTesK
2
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
ОСНОВНАЯ
ПРОБЛЕМА
КОМПОЗИЦИИ СИСТЕМЫ
Если компоненты работают правильно,
почему система работает неправильно?
Кто виноват? И что делать?
1
Ошибка
реализации:
на самом
деле компоненты
Виноваты
разработчики
компонентов.
Нужно
тестировать
компоненты.
р а б о т а ю т
н е п р а в и л ь н о .
2
Ошибка композиции – требования к системе
Если
Нужно
к пуговицам
верифицировать
и рукавам
композицию.
претензий
нет,
не
согласованы
с требованиями
к компонентам
ивиноват
/ и л и закройщик
со схе=
м архитектор
о й к о м псистемы.
оновки.
3
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Что такое правильность?
правильность реализации определяется
в сравнении с эталоном (спецификацией)
более общее определение:
правильность = соответствие требованиям
спецификация = описание требований
требования функциональные
4
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Что такое функциональность?
функциональная спецификация
отвечает на вопро с «ЧТО?»,
но не отвечает на вопрос «КАК?».
С п е ц и ф и ка ц и я о п и с ы ва е т « фу н к ц и ю » ,
а н е а л г о р и т м в ы ч и с л е н и я фу н к ц и и .
Р е а л и з а ц и я – н а о б о р о т .
функциональность относительна: зависит от
того, что для нас важно (ЧТО),
а что – второстепенно (КАК).
5
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Формализация реализации,
спецификации и соответствия:
математическая модель
математическая модель
MModel
модель спецификации известна –
задана спецификацией
SSpecModel
тестовая гипотеза (G. Bernot ):
модель реализации м.б.
IImpl
Model
неизвестна, но существует
соответствие:
rel  ImplSpec
6
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Компоновка системы
Composition : Model  …  Model  Model
Спецификация системы корректна = композиция
любых конформных реализаций конформна:
( n In rel Sn )  Composition(I1,I2,…) rel S
Задача: найти самую сильную корректную
спецификацию S: S` - корректная
S rel S`
NEW
Проблема: Composition(S1,S2,…) м.б. некорректна.
Решение: найти каноническое преобразование F
спецификаций, чтобы Composition(F(S1),F(S2),…)
была самой сильной корректной спецификацией.
NEW
7
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Функциональность и взаимодействие
Мы ограничимся такой функциональностью,
когда всё «важное» относится к внешнему,
н а бл ю д а ем ом у п о в ед е н и ю р е а л и з а ц и и .
Реализация правильная, если она правильно
взаимодействует с окружением.
Реализация соответствует спецификации, если
взаимодействие реализации с окружением
«похоже» (соответствует) на взаимодействие
спецификации с окружением.
Становится возможным тестирование =
проверка правильно сти в эксперименте,
когда те ст подменяет собой окружение.
8
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Что нужно для тестирования?
Те с т о в ы е в о з м о ж н о с т и :
• ч то м ож н о н а бл юд ат ь ?
• как можно управлять?
Реализационные гипотезы :
• что может быть и чего
не может быть в реализации?
9
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Формализация эксперимента:
Машина тестирования
Модели
с одним множеством
наблюдаемых
можетдействия
разрушиться!
N E W реализация
наблюдение:
(внешние)
zZ трасс,
эквивалентны
= неразличимы в любом эксперименте,
N E W + разрушение ()
+ из
отказы
(refusal
sets)
Отказ
C
=
действия
C
не
наблюдаются
Разрушение
можно понимать
как
то
есть при любом взаимодействии
с окружением.
РАЗВИТИЕ

+ внутренняя активность ()
и
неб будут
сколько
ни
ждать.
“A”
,
“B”
,
“C”
,
где
A
,B
луправление:
ю
оТрассовая
е н енаблюдаться,
ж екнопки
л ат
е
л
ь
н
о
е
п
о
в
е
д
е н,CZ
ие.
модель = множе ство
трасс
кнопка
“A”
разрешает
выполнять
действиямашины.
zA
сПосле
ограничениями,
диктуемыми
разрушения
нетустройством
наблюдений.
РАЗВИТИЕ
- возможностей
отказвыполнить
трасса
разрушение
“A”
a1“B”b1“A”a2тестовых
“C” C “A”a
Формализация
2
наблюдений
действия
из
C
...
b
a
z21
чёрный
A
Bящик,Cв котором реализация
10
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Работа машины тестирования
В каждый момент времени может наблюдаться
действие или разрушение, если оно
возможно в машине и разрешено оператором.
Д ей ст в ие разр ешает ся наж ат ием кн опки ,
а разрушение всегда разрешено.
Если есть -активность, действия и разрушение
могут не наблюдаться: «машина думает».
Если нет -активности, то должно наблюдаться
возможное и разрешённое действие или разрушение,
если такие есть. Если таких нет, возникает deadlock:
машина «стоит в стабильном состоянии».
Deadlock может быть снят нажатием другой кнопки.
11
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Отказы и дивергенция.
Реализационная гипотеза.
Отказ C = действия из C не наблюдаются
и не будут наблюдаться, сколько ни ждать.
Реализационная гипотеза: Ограничим по времени
каждое
действие и каждую
конечную -активность.
КАК ВОЗМОЖНО
НАБЛЮДЕНИЕ
ОТКАЗА?
Б е с ко н е ч н а я  - а к т и в н о с т ь ( д и в е р г е н ц и я ,
С
кол
ь
ко
ж
д
ат
ь
,
ч
то
б
ы
убед
и
т
ь
с
я
,
ч
то
«зацикливание») внешне не отличима от deadlock`а.
б о л ь дивергенция
ш е ж д а- тнежелательное
ь н е н уповедение,
ж н о ?
Поэтому
NEW
т.е. дивергенция рассматривается как разрушение .
 = истечение тайм-аута
Отказ C =  при нажатой кнопке “C”.
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
12
RedVerst
NEW
Безопасность тестирования
Тест не должен разрушать реализацию:
нельзя наблюдать трассу с разрушением .
Реализация безопасна, если она не разрушается
после включения машины до нажатия кнопок.
Кнопка безопасна после трассы, если её нажатие
не может вызвать разрушение (после любого
возможного действия, разрешаемого кнопкой).
Трасса безопасна, если каждая её кнопка
б е з о п а с н а п о с л е п р е д ш е с т ву ю щ е г о е й
начального отрезка трассы.
13
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Обобщённое соответствие iocoмашина
Гипотеза о безопасности для iocoмашина :
Хорошо отвечает интуитивному пониманию
в«правильности»
с е б е з о п а с н ыклассическое
е т р а с с ы с псоответствие
ецификации,
имеющиеся в реализации, безопасны в ней.
ioco – Input-Output COnformance [Jan Tretmans].
NEW
Соответствие iocoмашина:
Предлагается обобщение этого соответствия
Еслипроизвольной
после общей трассы,
безопасной
в реализации
для
машины
тестирования
:
и с п ец и ф и кац и и , к н о п ка “ A ” бе зо п а сн а в
машина. после нажатия “A”
спецификации, то вioco
реализации
РАЗВИТИЕ
может наблюдаться действие aA или отказ A
только, если это возможно и в спецификации.
14
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
ТЕСТЫ
Конечный тест (test case).
Конечное число нажатий кнопок и наблюдений.
В конце работы выносится вердикт: fail или pass.
Реализация проходит тест, если эксперимент
при любой погоде заканчивается с вердиктом pass.
Набор тестов (test suite).
Sound :
Р соответствует спецификации
Р проходит тест
Exhaustive :
Р соответствует спецификации
Р проходит тест
Complete = Sound + Exhaustive
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
15
ИСП РАН
RedVerst
Генерация полного тестового набора
безопасная трасса
спецификации
“A”, A,
“B”, b
К сожалению,
полный
тестовый
набор
почти всегда
бесконечен,
каждый
fail
pass
aплохойA
aахороший
A тест
“A”
нужно прогонять неопределённо долго
Отказ A – это тайм-аут
В спецификации нет трассы
В
спецификации
( д л я р а з н ы х п о г од нпри
ы хнажатии
у с лкнопки
оесть
в и трасса
й“A”
).
РАЗВИТИЕ
“A”aa“B”
“A”
B
плохой
fail
bплохойB

“B”
“A” aхороший
“B” B
bхорошийB
pass
Поэтому почти всегда компоненты
В спецификации нет
трассы b В спецификации
есть трасса


р “A”
а с aп“B”
р еb д е л ё н н о й “A”сa и“B”с bт е м ы
плохой
хороший
Такая
безопасная
трасса
fail
н е п ол н о с т ь ю pass
п р о т е сесть
т иврспецификации
о в а н pass
ы
.
Тест как инструкция оператору машины тестирования
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
16
RedVerst
Отсутствие приоритетов.
Реализационная гипотеза.
Реализация без приоритетов:
Н а б л юд е н и е д е й с т в и я a н е з а в и с и т
от того, какая нажата кнопка A,
разрешающая это действие: aA.
Иными словами, действия, разрешённые
нажатой кнопкой, равноприори тетн ы .
можно удалить кнопки из трассы – failure traces:
“A”,a1,”B”,b1,”A”,a2,”C”,C
 a1,b1,a2,C
Если каждое действие разрешается
н е б о л е е ч е м од н о й к н о п ко й , т о
безопасность кнопки = безопасность действия.
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
17
RedVerst
Взаимодействие: стимулы и реакции
В з аи мод ей ст в и е ка к обм ен
дискретной информацией
между реализацией и тестом.
Два вида атомарного взаимодействия:
Тест
Стимул ?x
Реализация,
Тест
Реакция !y
Реализация.
18
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Ограниченные тестовые возможности
1.Можно послать в реализацию один стимул:
н е п р е д л а г а я е й д р у г и х с т и м ул о в
и не предлагая приёма реакций.
2.Можно только принимать от реализации
реакции: не предлагая ей стимулов.
3.Нельзя «выбирать», какую реакцию
принять от реализации, а какую нет:
тест либо принимает любую реакцию,
л и б о н и ч е го н е п р и н и м а е т.
19
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
-машина тестирования
управление:
NEW
для каждого ?x кнопка “?x”,
Реализация
может
разрушиться!
для всех
!y общая кнопка
“!”
Реализация
может
не
принимать
Ре
а
лизация
может
не
выдавать
Разрушение

можно
понимать
как
наблюдения: стимулы ?x и реакции !y + разрушение
отказы:
(отсутствие
л ю б о е н- стационарность
еникаких
ж е л ат
е лреакций!
ь н о е преакций)
оведение,
стимул!
в
т {?x}
ом
ч и с л стимула
е д идляв каждого
е р г е?xн
- блокировка
цию.
трассы
с задержками
стационарность
(обычные)
трассы
= нет
-стимула
реакций
- блокировка
-трассы
- разрушение
- traces
traces
?a
?a ?b !y !u  {?a}
?b


– Suspension traces
...
?b
?a
!u
!y

чёрный
ящик,
?a ?b
?cв котором
! реализация
20
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
ioco и классическое ioco
для каждого ?x кнопка “?x”,
всех !y общая кнопка “!”
ioco-спецификации = iocoдля
-спецификации
без 

разрушение 
наблюдения:
стимулы
?x и -реализации
реакции !y +без
ioco-реализации
= ioco
{?x} и 

отказы:  - стационарность (отсутствие реакций)
на общем
: I ioco S = I ioco?x
Gamma (S)
{?x}домене
- блокировка стимула для каждого
Два допущения
полноты
трассы с задержками:
ioco
-трассы:
ioco
(как понимать неспецифицированный стимул):
I ioco S В I и S нет разрушения. В реализации I нет блокировок.
Demonic
стимул принимается,
а дальше
всё, что
Не–проверяется
стимул, если его
нет в спецификации
S.
угодно, кроме блокировок и разрушения;
I ioco Demonic (S) Стимул есть в S с любым продолжением
без {} и  – демоническое пополнение.
Gamma – всё, что угодно,
включая
разрушение.
S всегда естьистимул
 ioco  ioco
I ioco Demonic
(S) Вблокировки
Используются
допущения
полноты. .
Для ioco
I ioco
Gamma (S) и другие
 можно продолжить
21
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Асинхронный автомат
Трассовая модель – «минимальная» модель,
до статочная для генерации тестов.
Но она недостаточна для описания
ко м п о з и ц и и с и с т е м ы и з ко м п о н е н т о в .
Теперь переходим к более «детальной» модели,
в ко т о р о й я в н о в в од я т с я со с т о я н и я .
IOA
- Input-Output Automaton
IOLTS - Input-Output Labelled Transition System
IOTS - Input-Output Transition System
IOSM - Input-Output State Machine
IOFSM - Input-Output Finite State Machine
АА
- Асинхронный автомат
22
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Асинхронный автомат
Z – алфавит стимулов и реакций.
S = ( V, Z, E, s0 )
Непустое множество V состояний
с выделенным начальным состоянием s0.
Наблюдаемый переход szs`  E
из состояния s в состояние s` по действию zZ или z=.
Внутренний переход ss`  E
из состояния s в состояние s` по -активности.
Внутренняя активность = цепочка -переходов.
Дивергенция = бесконечная цепочка -переходов.
Стабильное состояние: s
& s .
Стационарное состояние: стабильное и нет реакций:
s!y
для всех реакций !y.
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
23
RedVerst
-трассы асинхронного автомата
-трасса автомата = последовательность символов (кроме
символа ), которыми раскрашены переходы маршрута.
Множество -трасс асинхронного
В стабильных состояниях добавляются петли отказов:
автомата является трассовой моделью.
• петля
• петля
{?x}

в стабильном состоянии s?x
автоматная модель
,
в стационарном состоянии.
трассовая модель
.................................
Для финальности разрушения : автоматная модель
• все -переходы перенаправляются в терминальное -состояние.
Для каждой трассовой модели можно
Для моделирования
дивергенции
разрушением
:
построить много
автоматов
с тем
же
• туда
м же
н ведём
о ж еновые
с т в-переходы
о м из дивергентных
 - т р а ссостояний
с.
( в которых начинаются бесконечные цепочки -переходов ).
24
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
оператор
параллельной композиции
S T в алфавите
S в а лфавите A T в алфавите B
(A \ B)  (B \ A)
szs`
tzt`
sts`t`
синхронно
1
sas` & ( a=  a=  aB )
stas`t
2
( b=  b=  bA ) & tbt`
stbst`
3
T - тест: deadlock и tt`
stst`
4
Противоположное действие:
?x = !x,
!y = ?y.
Внутренние
: AB, для
: AB) ,
deadlock = алфавиты:
zABдля S( sz
 Ttz
& алфавит:
s для
& t
& \s
Внешний
S T : (A
B)  (B&\ t
A)
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
25
RedVerst
Композиция системы
Компоненты - асинхронные автоматы без -переходов.
Для них оператор
коммутативен, но не ассоциативен.
Схема компоновки = последовательность композиции :
Composition(A,B,C,D,E) = A
( (B C)
(D E) )
ОСНОВНАЯ ПРОБЛЕМА КОМПОЗИЦИИ СИСТЕМЫ:
Композиция компонентов, конформных своим спецификациям,
может быть не конформна композиции спецификаций :
A ioco SA & B ioco SB
(A B) ioco (SA SB)
или
A ioco SA & B ioco SB
(A B) ioco (SA SB)
26
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Асинхронное
тестирование
как частный случай тестирования
кАсинхронное
о
м
п
о
з
и
ц
и
и
Синхронное
тестирование
тестирование
Test Пример:
Impl
тест
Очереди
стимулов
и реакций
Context:
ImplImpl
очередь
среда очередь
стимуловпередачи реакций
Test
( Media Impl )
Context(Impl)
Impl
тестовый контекст
реализация
Spec
ioco
Context(Impl)
ioco
Context(Spec)
(Media
Impl)
ioco(Queue
(Media
Spec)
(Queue
Impl) ioco
= Impl iocoQueue
Spec
Media Spec
27
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
2 проблемы асинхронного тестирования
Реализация
I1
Реализация I2
Спецификация
Для моделей
без
блокировокSканоническое
преобразование не нужно.
s0 !a s1
i0 !a
i1
i0 !a
i1

Поэтому стремятся пополнить спецификацию:
 … ?x
?x
?x
доопределить неспецифицированные
стимулы,
используя то или иное допущение полноты.
s2 !b s3
i2 !a
i2 !b
i3
i3
Гамма-пополнение лучше демонического, так как оно
Дем о«помнит»,
ни ч еск о е какие
по полстимулы
не ние : были
?z
?z
?z доопределены
Г
а
м
м
а
п
о
п
о
л
н
е
н
и
е
:
П
е
т
л
и
п
о
в
с
е
м
по всем недостающим стимулам
переходы
по
всем
недостающим
(разрушающие
стимулы),
избежать
недостающим
стимулам
переходы
в состояние
с любымчтоs4позволяет
i4
i5 !c
с
т
и
м
у
л
а
м
в

с
о
с
т
о
я
н
и
е
лишних
проверок
при
асинхронном
тестировании.
дальнейшим поведением без {} и 
DEMON
( I1 ioco S )
I1 iocoQueue S
I2 ioco S
Gamma(S)
Demon(S)
( I2 iocoQueue S
)
Вседозволенность
Несохранение
Сохранение соответствия
Ничего не поделаешь...
Это
Это
нехорошо!
хорошо!
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
28
ИСП РАН
RedVerst
Н е с о х р а н е н и е с о от в ет с т в и я д л я
моделей с блокировками
алфавит
A = { ?x, !y, !u }
спецификация
!y
1
реализация
!y
1
0
A ioco
0
!u
B = { ?u }
A
2
Для моделей с блокировками
требуется
каноническое преобразование.
B
B ioco
0
?u
!y
A B = { ?x, !y } 0
0

2
2
A
B
(
B
0
=
2
1
0
A
?u
!y
0
0
A
B
2
1
0
ioco
после общей трассы {?x} в реализации системы есть !y
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
A
B)
29
RedVerst
Каноническое преобразование F:AAAA
Спецификация системы корректна
= композиция любых конформных реализаций конформна:
S1,S2AA : Corr(S1,S2) =def { SAA | I1,I2AA
( I1 ioco S1 & I2 ioco S2 )  I1 I2 ioco S }.
Каноническая спецификация эквивалентна исходной:
SAA
S ioco F(S)
&
F(S) ioco S.
Косая композиция = композиция канонических спецификаций
S1
S2 =def F(S1)
F(S2)
Косая композиция спецификаций
- самая сильная корректная спецификация системы:
S1 S2 Corr(S1,S2) & S Corr(S1,S2) S1 S2 ioco S.
30
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Существование канонического
преобразования
Каноническое преобразование эквивалентно
о бъ ед и н е н и ю ко н ф о рм н ых р е а ли з а ц и й :
U(S) =def  { IAA | I ioco S }
F(S) ioco U(S)
&
U(S) ioco F(S)
...
...
конформные
1 алгоритм
2 построения
3
Нужен
асинхронного
автомата
р е азаданному
лизации
канонической спецификации F(S) по


асинхронному
исходной спецификации S.
автомату
новое начальное состояние
Такой алгоритм есть, но времени рассказывать его нет.
31
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Использование косой композиции
1. Верификация заданной спецификации системы
= проверка корректности спецификации системы
= косая композиция спецификаций компонентов
должна быть конформна спецификации системы.
2. Ге н е р а ц и я с п е ц и ф и к а ц и и с и с т е м ы п о
спецификациям компонентов,
е сли н ет з аданной сп ец иф и кац ии си ст емы .
32
ИСП РАН
RedVerst
Смежные нерешённые проблемы
1. Канонические спецификации и косая композиция для
машины тестирования общего вида: с приоритетами
и произвольным набором кнопок.
ПРИ ЗАДАННОЙ СХЕМЕ КОМПОНОВКИ:
2. О с л а б л е н и е т р е б о в а н и й к к о м п о н е н т а м :
по спецификациям компонентов и
корректной (в частности, самой сильной) спецификации
с и с т е м ы
с г е н е р и р о в а т ь
о с л а бл е н н ы е с п е ц и ф и ка ц и и ком п о н е н т о в .
3. У с и л е н и е т р е б о в а н и й к к о м п о н е н т а м
(декомпозиция системных требований):
по спецификации системы и о слабленным
(в частности, пустым) спецификациям компонентов
сгенерировать полные спецификации компонентов.
33
ИСП РАН
RedVerst
продолжение следует...
34
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Асинхронное
тестирование
как частный случай тестирования
к
о
м
п
о
з
и
ц
и
и
тест
алфавит теста
среда
передачи
переименование
алфавит реализации
реализация
35
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
2 проблемы асинхронного тестирования
Реализация I2
Спецификация S
s0
!a


?x
s2
s1
DEMON
!b
…
i0
!a
i1
!b
!c
i3
?x
s3
i2
?z
?z
s4
i5
?z
!c
i4
Для реализаций без блокировок и разрушения асинхронное тестирование при
демоническом пополнении ловит больше ошибок, чем при гамма-пополнении.
Например, ловится ошибочная реакция !c после стимула ?x, а при гаммапополнении стимул ?x не проверяется.
Причина: домен гамма-пополнения шире, и допускается разрушение после ?x.
Если отсутствие блокировок и разрушения в реализации специфицировать явно,
то гамма-пополнение сведётся к демоническому пополнению.
36
Игорь Борисович Бурдонов & Александр Сергеевич Косачев
ИСП РАН
RedVerst
Скачать