И.Б.Бурдонов, А.С.Косачев. Верификация композиции распределенной системы. Труды Всероссийской научной конференции "Научный сервис в сети ИНТЕРНЕТ", Изд-во МГУ, 2005, стр.67-69. 2 стр. ____________________________________________________________ ВЕРИФИКАЦИЯ КОМПОЗИЦИИ РАСПРЕДЕЛЁННОЙ СИСТЕМЫ И.Б. Бурдонов, А.С. Косачев Компоненты распределённой системы моделируются асинхронными автоматами с блокировками стимулов и разрушением, а правильность – соответствием ioco – отношением между моделью реализации и моделью спецификации. Это отношение основано на безопасных трассах спецификации, которые не приводят к разрушению. Спецификации должны быть безопасными (не «саморазрушающимися») и безопасно-конвергентными (нет дивергенции на безопасных трассах), а реализация удовлетворять гипотезе об отсутствии разрушения и дивергенции на безопасных трассах спецификации. (См. наш доклад «Тестирование компонентов распределённой системы»). Основная проблема верификации распределённой системы звучит так: если компоненты работают правильно, то почему система работает неправильно? Одна из причин, очевидно, заключается в ложности посылки: на самом деле компоненты работают неправильно. Тестирование компонентов было не полным, и остались ошибки: реализации компонентов (РК) не конформны спецификациям компонентов (СК). Такое часто встречается на практике, однако этим проблема не исчерпывается: может оказаться, что даже при конформных РК реализация системы (РС) всё равно работает неправильно, то есть не конформна системной спецификации (СС). В этом случае претензий к разработчикам компонентов быть не может. Тогда кто виноват и что делать? Очевидно, причина лежит в иной плоскости: СК не согласованы с СС. А это уже ошибка архитектора, который неправильно декомпозировал требования к системе на требования к компонентам и схему их компоновки. По вполне понятным причинам такие ошибки гораздо труднее искать, и они приводят к более печальным последствиям. Какое соотношение СК и СС считать правильным? При заданных СК и схеме компоновки корректной системной спецификацией (КСС) будем считать такую СС, которая удовлетворяет условию монотонности: любая РС, составленная из конформных РК, конформна этой СС. Естественно определить самую сильную корректную системную спецификацию (ССКСС) как КСС, предъявляющую к системе самые сильные требования. Первой неожиданностью стало то, что СС, полученная из СК по тем же правилам компоновки, по которым РС получается из РК, может оказаться некорректной. Такая СС предъявляет к системе избыточные требования, которым система может не удовлетворять, хотя все РК конформны своим СК. Причиной этого являются разные уровни абстракции, используемые для определения соответствия (трассы наблюдений) и компоновки компонентов (асинхронные автоматы). В асинхронном тестировании (взаимодействие теста и реализации опосредуется средой передачи) эта проблема известна как проблема несохранения соответствия [1]: асинхронный тест обнаруживает ложные ошибки, которые не могут быть обнаружены при синхронном тестировании. Заметим, что из конформности РС не обязательно следует конформность РК: система может работать правильно, хотя в компонентах есть ошибки, но они не проявляются в работе системы в целом. В асинхронном тестировании это называется проблемой вседозволенности [1]: асинхронные тесты не могут обнаружить некоторые ошибки, обнаруживаемые при синхронном тестировании. Эта ситуация неизбежна и не так уж плоха, если нас интересует работа системы в целом. Для формализма асинхронных автоматов мы используем нотацию алгебры процессов CCS (Calculus of Communicating Systems [2]): стимулы снабжаются префиксом “?”, а реакции – префиксом “!”. Для каждого наблюдаемого действия определяется противоположное ему с помощью биекции «подчёркивание»: ?x = !x, !y = ?y. Внутренняя активность моделируется переходом по символу , а разрушение – переходом по символу . Алфавит автомата A, то есть множество стимулов и реакций, которые автомат в принципе может принимать и выдавать, обозначим LA. Композиция системы моделируется оператором параллельной композиции, который по двум взаимодействующим автоматам A и B строит третий автомат C=AB в алфавите LC=(LA\LB)(LB\LA), моделирующий их совместную работу. Состояния композиции C – это пары состояний компонентов A и B, а переходы делятся на синхронные и асинхронные. Синхронный переход – это -переход, порождённый парой противоположных переходов в компонентах: один посылает символ !z, а другой принимает этот же символ ?z; оба компонента меняют свои состояния. Асинхронный переход композиции C порождается одним переходом в одном из компонентов A или B: переход по , или внешнему символу zLC; другой компонент сохраняет своё состояние. z(A{,})\B, в A переход aza` в C переход abza` b; z(B{,})\A, в B переход bzb` в C переход abza b`; zAB, в A переход aza`, в B переход bzb` в C переход aba` b`. 1 И.Б.Бурдонов, А.С.Косачев. Верификация композиции распределенной системы. Труды Всероссийской научной конференции "Научный сервис в сети ИНТЕРНЕТ", Изд-во МГУ, 2005, стр.67-69. 2 стр. ____________________________________________________________ В общем случае оператор коммутативен, но не ассоциативен. Схема компоновки системы – это последовательность применения оператора . Например, (AB)(C(DE)). В отличие от «прямой» композиции РК (оператор ) предлагается «косая» композиция СК (оператор ), определяемая неявно как построение автомата эквивалентного (по ioco) ССКСС. Косая композиция используется для трёх целей. 1) Проверка компонуемости: проверка безопасности и безопасноконвергентности ССКСС гарантирует выполнение реализационной гипотезы для РС как прямой композиции конформных РК. 2) Верификация корректности СС: проверка того, что ССКСС конформна заданной СС. 3) Генерация системных тестов: при отсутствии заданной СС системные тесты можно генерировать непосредственно по ССКСС. Утверждается: существует такое преобразование спецификаций F, что косая композиция СК равна прямой композиции преобразованных СК: AB=F(A)F(B). Будем говорить, что соответствие ioco монотонно относительно F. Предлагается алгоритм выполнения такого преобразования. Тем самым, мы имеем алгоритм вычисления ССКСС по заданным СК и схеме компоновки. Заметим, что, если в спецификации нет блокировок и разрушения, то преобразование можно не делать: косая композиция тождественна прямой, ioco монотонно относительно тождественного преобразования. Именно поэтому стремятся пополнить спецификацию, трактуя неспецифицированные стимулы как принимаемые с дальнейшим поведением по умолчанию [3]. Возникающую здесь проблему потери информации о неспецифицированности стимула после трассы предлагается решать трактовкой такого стимула как разрушающего. Так пополненная спецификация – частный случай -нормального автомата: если после безопасной трассы некоторая реакция !a вызывает разрушение (есть трасса !a), то и любая другая реакция !b, продолжающая трассу (есть трасса !b), вызывает разрушает (есть трасса !b). После нашего пополнения все реакции безопасны и спецификация автоматически -нормальна. Если в спецификации допускается разрушение, то важны только безопасные трассы. Поэтому, если они не содержат блокировок, то преобразование F сводится к -нормализации, то есть преобразованию спецификации в ioco-эквивалентную ей -нормальную спецификацию. Соответствие ioco монотонно относительно -нормализации. В общем случае, когда блокировки допускаются в безопасных трассах, для доказательства существования преобразования F достаточно рассмотреть объединение всех реализаций, конформных данной спецификации A: U(A)={RA|RA ioco A}. Для объединения автоматов вводится новое начальное состояние, из которого проводятся -переходы в начальные состояния этих автоматов. Прямая композиция R=RARB любых реализаций, конформных своим спецификациям, RA ioco A и RB ioco B, – это подавтомат прямой композиции таких объединений S=U(A)U(B). Автомат R удовлетворяет реализационной гипотезе для спецификации S и, как подавтомат, конформен ей: R ioco S. Определение преобразования через конформные реализации неконструктивно: нужен алгоритм, который строил бы преобразованную спецификацию F(S) непосредственно по исходной спецификации S. Идея алгоритма заключается в следующем. Подмножество U состояний спецификации S -замкнуто, если любой -переход uu`, начинающийся в U, uU, заканчивается также в U, u`U. В качестве нестабильных состояний F(S) выбираются все -замкнутые подмножества состояний S. Начальное состояние нестабильно – это замыкание начального состояния S (состояния, достижимые из него по -переходам). Из состояния U проводим -переход в каждое стабильное состояние (I(U),I), где I – это множество стимулов и не более одной реакции, а I(U) определяется в зависимости от I (не для всяких I и U существует I(U)). 1) I содержит все стимулы и реакцию !y, а из U есть переход по каждому стимулу и реакции !y. Тогда I(U)=U. 2) I не содержит реакций, а I(U) – наибольшее подмножество U такое, что стимул ?xI тогда и только тогда, когда из некоторого состояния U есть ?x-переход. 3) I содержит не все стимулы и содержит реакцию !y, а I(U) – наибольшее подмножество U такое, что стимул ?xI тогда и только тогда, когда из некоторого состояния U есть ?x-переход, и, кроме того, из некоторого состояния U есть !y-переход. Из состояния (I(U),I) проводим переход по каждому символу zI в -замыкание множества состояний, достижимых из I(U) по z-переходам. Из состояния U проводим аналогичные переходы по каждому z, но только в том случае, если при этом можно попасть в состояние S, недостижимое по z из стабильных состояний (I(U),I) для всех возможных I. Исключение из этого правила – переход по стимулу z=?x, за которым в спецификации может следовать разрушение; в этом случае переход по ?x заканчивается в специальном -состоянии, в котором определяется -петля. 2 И.Б.Бурдонов, А.С.Косачев. Верификация композиции распределенной системы. Труды Всероссийской научной конференции "Научный сервис в сети ИНТЕРНЕТ", Изд-во МГУ, 2005, стр.67-69. 2 стр. ____________________________________________________________ ЛИТЕРАТУРА: 1. C. Jard, T. Jéron, L. Tanguy, C. Viho "Remote testing can be as powerful as local testing", FORTE XII/ PSTV XIX' 99, China, pp. 25-40. 2. R. Milner "Communication and Concurrency". Prentice-Hall, 1989. 3. M. van der Bijl, A. Rensink, J. Tretmans "Compositional testing with ioco" // Formal Approaches to Software Testing: Third International Workshop, FATES 2003, Montreal, Quebec, Canada. LNCS v. 2931, Springer, pp. 86-100. 3