Многоэтапный анализ архитектурной надежности и синтез отказоустойчивого программного обеспечения сложных систем
Покупка
Основная коллекция
Издательство:
Сибирский федеральный университет
Год издания: 2020
Кол-во страниц: 143
Дополнительно
Вид издания:
Монография
Уровень образования:
Профессиональное образование
ISBN: 978-5-16-013303-4
Артикул: 827880.01.99
В монографии предложен комплекс математических моделей и алгоритмов анализа надежности программного обеспечения сложных систем с учетом их многоуровневости и распределенности архитектуры. Представлена система построения трансляторов мультисинтаксических языков программирования мультиверсионного программного обеспечения сложных систем. Предназначена специалистам, работающим в области проектирования
и разработки программного обеспечения, а также аспирантам и докторантам. Материалы монографии рекомендуются к использованию при проведении лекционных и практических занятий у магистрантов укрупненных
групп 220000 «Автоматика и управление», 230000 «Информатика и вычислительная техника».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство образования и науки Российской Федерации Сибирский федеральный университет А.С. Кузнецов, С.В. Ченцов, Р.Ю. Царев МНОГОЭТАПНЫЙ АНАЛИЗ АРХИТЕКТУРНОЙ НАДЕЖНОСТИ И СИНТЕЗ ОТКАЗОУСТОЙЧИВОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СЛОЖНЫХ СИСТЕМ Монография Красноярск СФУ 2020
УДК 004.052.3 ББК 32.973.2-18 К891 Рецензенты: А.А. Ступина, доктор технических наук, профессор кафедры «Системный анализ и исследование операций» СибГАУ им. М.Ф. Решетнева; А.К. Шлепкин, доктор физико-математических наук, профессор, зав. кафедрой прикладной математики и информационной безопасности КрасГАУ К891 Кузнецов, А.С. Многоэтапный анализ архитектурной надежности и синтез отказоустойчивого программного обеспечения сложных систем: монография / А.С. Кузнецов, С.В. Ченцов, Р.Ю. Царев. – Красноярск: Сиб. федер. ун-т, 2020. – 143 c. ISBN 978-5-16-013303-4 В монографии предложен комплекс математических моделей и алгоритмов анализа надежности программного обеспечения сложных систем с учетом их многоуровневости и распределенности архитектуры. Представлена система построения трансляторов мультисинтаксических языков программирования мультиверсионного программного обеспечения сложных систем. Предназначена специалистам, работающим в области проектирования и разработки программного обеспечения, а также аспирантам и докторантам. Материалы монографии рекомендуются к использованию при проведении лекционных и практических занятий у магистрантов укрупненных групп 220000 «Автоматика и управление», 230000 «Информатика и вычислительная техника». УДК 004.052.3 ББК 32.973.2-18 ISBN 978-5-16-013303-4 © Сибирский федеральный университет, 2020
ОГЛАВЛЕНИЕ ВВЕДЕНИЕ .......................................................................................................... 6 1. ПРОБЛЕМЫ АНАЛИЗА АРХИТЕКТУРНОЙ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СЛОЖНЫХ СИСТЕМ ....................... 8 1.1. Повышение архитектурной надежности программного обеспечения ...................................................................................................... 9 1.1.1. Терминологические проблемы анализа архитектурной надежности .................................................................................................. 10 1.1.2. Адекватность программных архитектур условиям и требованиям работоспособности систем ................................................. 14 1.1.3. Системные методы повышения архитектурной надежности ...... 17 1.2. Архитектура программного обеспечения сложных систем управления и обработки информации ......................................................... 19 1.2.1. Фазы разработки программного обеспечения сложных систем управления и обработки информации ......................................... 19 1.2.2. Анализ фазы архитектурного дизайна ........................................... 20 1.2.3. Архитектурная спецификация критических систем ..................... 26 2. МОДЕЛЬНО-АЛГОРИТМИЧЕСКИЙ АППАРАТ АНАЛИЗА АРХИТЕКТУРНОЙ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СЛОЖНЫХ СИСТЕМ ........................................................ 33 2.1. Аналитическое определение показателей архитектурной надежности программного обеспечения ..................................................... 33 2.2. Модели анализа архитектурной надежности программного обеспечения сложных систем ....................................................................... 41 2.2.1. Универсальная модель анализа архитектурной надежности программного обеспечения сложных систем .......................................... 41 2.2.2. Анализ надежности программного обеспечения сложных систем на фазе кодирования ...................................................................... 45 2.2.3. Анализ надежности программного обеспечения сложных систем на фазе тестирования системы ..................................................... 46 2.2.4. Операционные профили тестирования компонент ....................... 48 2.2.5. Модель оценки надежности объектно-ориентированного программного обеспечения ....................................................................... 52 2.2.6. Модель оценки транзакционной надежности ПО сложных систем .......................................................................................................... 56 2.2.7. Модификация универсальной модели для анализа архитектурной надежности систем с программной архитектурой «клиент-сервер» .......................................................................................... 59
3. ПРОБЛЕМЫ СОЗДАНИЯ МУЛЬТИВЕРСИОННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ............................................................. 67 3.1. Методология мультиверсионного программирования как средство повышения надежности программного обеспечения ................ 67 3.2. Критические замечания относительно современного состояния методологии мультиверсионного программирования ............................... 72 4. СОЗДАНИЕ МУЛЬТИВЕРСИОННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ПРИМЕНЕНИЕМ МУЛЬТИСИНТАКСИЧЕСКИХ ЯЗЫКОВ И ТЕХНОЛОГИЙ ............................................................................ 78 4.1. Неформальное определение мультисинтаксического языка (МСЯ) .............................................................................................................. 78 4.2. Обзор современных мультисинтаксических средств .......................... 79 4.2.1. Использование ассемблерных вставок при программировании на языках высокого уровня ..................................... 79 4.2.2. Скриптовые языки для создания динамических Web-страниц ... 84 4.2.3. Встраивание языков запросов данных в языки программирования ..................................................................................... 87 4.2.4. Концепция Domain Specific Languages .......................................... 90 4.2.5. Синтаксис включений в программы на одном языке кода на другом языке ............................................................................................... 92 4.3. Формальное описание мультисинтаксического языка ....................... 94 5. МОДЕЛИРОВАНИЕ РАСПОЗНАВАТЕЛЕЙ МУЛЬТИСИНТАКСИЧЕСКИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ....... 99 5.1. Мультиавтоматы с магазинной памятью как средство распознавания мультисинтаксических языков ........................................... 99 5.2. Формирование таблиц синтаксического анализа мультисинтаксических языков программирования ................................. 105 5.3. Лексический анализ мультисинтаксических языков программирования ....................................................................................... 109 5.4. Семантический анализ мультисинтаксических языков программирования и этап синтеза компилятора МСЯ ............................ 114 6. АВТОМАТИЗАЦИЯ РАЗРАБОТКИ ТРАНСЛЯТОРОВ МУЛЬТИСИНТАКСИЧЕСКИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ МУЛЬТИВЕРСИОННЫХ ПРОГРАММНЫХ СИСТЕМ ........................... 117 6.1. Система построения трансляторов мультисинтаксических языков программирования мультиверсионных систем MuYacc ............ 117 6.2. Входная спецификация системы MuYacc .......................................... 119
6.3. Применение трансляторов МСЯ при разработке мультиверсионного ПО ............................................................................... 123 6.3.1. Проект IntegrAsm – компилятор языка C, обеспечивающий вставки ассемблерного кода .................................................................... 123 6.3.2. Проект MulQuery – компилятор языка C, обеспечивающий включение кода на языках запросов к СУБД ........................................ 125 6.3.3. Использование трансляторов MulQuery и IntegrAsm для разработки мультиверсионного ПО ....................................................... 127 ЗАКЛЮЧЕНИЕ ............................................................................................... 130 БИБЛИОГРАФИЧЕСКИЙ СПИСОК .......................................................... 132
ВВЕДЕНИЕ Современные исследования сложных систем управления и обработки информации показали, что качество их работы напрямую зависит от надежности и безотказности программного обеспечения. Быстрый рост сложности и размеров современного программного обеспечения при одновременном увеличении ответственности выполняемых функций систем управления и обработки информации резко повысил требования со стороны заказчиков и пользователей к их качеству, надежности функционирования и безопасности применения. За прошедшие десятилетия было создано множество методов и моделей исследования надежности программного обеспечения (ПО), однако единого подхода к решению этой проблемы предложено не было. Причиной этому является уникальность каждой программной системы. Можно отметить, что на сегодняшний день практически отсутствует литература, систематически и достаточно полно отражающая особенности и методы обеспечения качества архитектур сложных систем управления и обработки информации и их основной, интеллектуальной, части – программных средств. Тем не менее при разработке ответственных проектов, их создатели стараются в той или иной степени получить оценку надежности ПО, как правило, на основе результатов конечных испытаний. Современные программные системы используют при работе колоссальный объем данных, проходящих через стандартные модули и функции. Поэтому выявить все связи и пути обработки информации, даже для достаточно несложной программы, практически невозможно. Исходя из этого, детализация элементов расчета надежности (условно называемых программными модулями) должна ограничиваться законченными программными образованиями, которые, взаимодействуя между собой, составляют более сложное объединение, надежность которого нас интересует. Принципиально изменились характеристики основных проектов: разработки перешли от программирования «в малом» к программированию «в большом». По мере расширения сферы применения и увеличения сложности систем управления и обработки информации выделились области, в которых ошибки или недостаточное качество программного обеспечения могут нанести ущерб, значительно пре
вышающий положительный эффект от их использования. В этих критических случаях недопустимы аномалии и дефекты функционирования программного обеспечения при любых искажениях исходных данных, сбоях, частичных отказах аппаратуры и других нештатных ситуациях. Однако иногда излишне высокие требования к качеству программных средств подобных системам принципиально не могут быть выполнены вследствие реальных ограничений всех видов ресурсов: бюджета, длительности разработки, характеристик вычислительных систем и квалификации специалистов. Это обусловило появление, развитие и применение методов, стандартов и средств автоматизации промышленной программной инженерии, обеспечивающих создание сложных программных архитектур для систем управления и обработки информации с заданными высокими показателями качества при реальных ограничениях на использование ресурсов разработки. Поэтому стратегической задачей в жизненном цикле современных систем стало обеспечение требуемого качества их программной архитектуры. В связи с изложенным появилась настоятельная потребность в разработке эффективного модельно-алгоритмического обеспечения методов и средств надежностного анализа программных архитектур, реализуемого в виде единой технологии многоэтапного анализа архитектурной надежности программного обеспечения сложных систем. Работы в области надежностного исследования программного обеспечения сложных систем управления и обработки информации требуют больших затрат, однако современные масштабы программных разработок и внедрения систем управления и обработки информации не оставляют сомнений в экономической целесообразности, своевременности и актуальности поставленных задач.
1. ПРОБЛЕМЫ АНАЛИЗА АРХИТЕКТУРНОЙ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ СЛОЖНЫХ СИСТЕМ Архитектура программного обеспечения, как правило, определяется концепцией архитектурного проектирования [25; 39]. На рис. 1.1 представлены этапы проектирования сложной программной системы. Архитектурное проектирование Обобщенные спецификации Проектирование интерфейсов Компонентное проектирование Проектирование структур данных Проектирование алгоритмов Рис. 1.1. Этапы проектирования программной системы Под архитектурным проектированием в работе понимается определение подсистем, структуры управления и взаимодействия подсистем, что является соединяющим звеном между процессом проектирования и этапом разработки требований. В качестве подсистемы понимается отдельная система, операции (методы) которой не зависят от сервисов, предоставляемых другими подсистемами. Подсистема состоит из модулей. Модуль – компонент системы, предоставляющий один или несколько сервисов для других модулей. Целью архитектурного проектирования является описание архитектуры программного обеспечения (ПО). При этом декомпозиция необходима для структуризации и организации системных спецификаций [87]. Архитектурное проектирование состоит из следующих этапов: структурирование системы – формирование совокупности относительно независимых систем; моделирование управления – управление взаимоотношениями между частями системы;
модульная декомпозиция – подсистемы разделяются на модули. Результатом архитектурного проектирования является документ, отображающий архитектуру программной системы (ПС) [64]. Существуют следующие архитектурные модели: статическая структурная модель ПС – подсистемы разрабатываются независимо; динамическая модель процессов – организация процессов во время работы системы; интерфейсная модель – определяются сервисы, предоставляемые каждой подсистемой через общий интерфейс; модели отношений – рассматриваются взаимоотношения между частями системы. В зависимости от требований выбираются различные атрибуты модели: 1. Производительность – за все критические ситуации отвечает минимальное количество подсистем с минимальным взаимодействием между собой. Лучше использовать крупномодульные компоненты ПС. 2. Защищенность – многоуровневая структура, в которой критические системные элементы защищены на внутренних уровнях. 3. Безопасность – максимально снижается количество подсистем, влияющих на безопасность. 4. Надежность – включение избыточных компонентов, которые можно заменять и обновлять без прерывания работы ПС. 5. Удобство сопровождения – применяются мелкие структурные компоненты, которые можно легко изменять. Программы, создающие данные, отделены от тех компонент, которые эти данные используют. 1.1. Повышение архитектурной надежности программного обеспечения Архитектурно-сложное программное обеспечение сложных систем управления и обработки информации должно обладать адекватным уровнем архитектурной надежности в рамках отведенных бюджетов. В программных приложениях, к которым предъявляются предельно высокие требования по надежности, должны применяться особые архитектурные решения, обеспечивающие отказоустойчи
вость и коэффициент готовности не менее 99,999 % (т. е. не более 5 минут простоев в год). Надежность программного обеспечения сложных систем управления и обработки информации обходится очень недешево, и существующие сегодня высоконадежные архитектурные решения базируются либо на операционных системах собственной разработки, либо на одном из клонов Unix [50]. Поставщики аппаратных платформ обеспечивают высокую надежность, заставляя платить за избыточность аппаратных и программных средств. Еще больше возрастает эта плата, когда необходимо решать программными средствами не нашедшие своего аппаратурного решения проблемы, возникающие в ходе неизбежных упущений в процессе разработки. Проанализируем проблему повышения архитектурной надежности программного обеспечения и рассматриваются современные архитектурные решения, обеспечивающие требуемую отказоустойчивость и доступность ресурсов программного обеспечения сложных систем управления и обработки информации. В работах [1; 62; 76] отмечается, что до недавнего времени надёжными системами считались только сложные закрытые и дорогие корпоративные системы, предполагающие частое дублирование узлов. С появлением открытых компьютерных сетей появилась возможность строить надежные системы из универсальных архитектурных компонентов, которые можно заменить в случае аварии без нарушения работоспособности конфигурации в рамках корпоративной структуры. 1.1.1. Терминологические проблемы анализа архитектурной надежности В результате анализа многих работ из области исследования надежности программных систем был выявлен широкий ряд проблем, основной причиной которого является отсутствие единого стандарта в области обеспечения надежности и отказоустойчивого ПО. Данной проблеме посвящены труды многих зарубежных и отечественных исследователей, таких как Авиженис [88], Майерс, Боэм, Ашфари, Луи, Соммервилл [65], Дилон, Берман, Липаев [50], Черкесов, Орлов [56], Ковалев [33–42] и др. Среди множества различных институтов и организаций (ISREE, IEEE, NASA), независимых исследователей проблем надежности ПО не существует единой терминологии, единых параметров и показателей надежности, методологии разработки отказоустойчивого ПО.