Откройте актуальную версию документа прямо сейчас
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Приложение Е
(справочное)
Методы, не допускающие взаимодействия между элементами программного обеспечения на одном компьютере
Е.1 Введение
Независимое выполнение элементов ПО, работающих в одной компьютерной системе (состоящей из одного или более процессоров с памятью и другими устройствами, совместно используемыми этими процессорами), можно обеспечить и продемонстрировать с помощью различных методов. В настоящем приложении рассмотрены некоторые методы, не допускающие взаимодействия [между элементами ПО с различной стойкостью к систематическим отказам, между элементами, разработанными для реализации (или для принятия участия в реализации) одной и той же функции безопасности, или между элементами ПО, реализующими функции, связанные с безопасностью, и элементами ПО, реализующими функции, не связанные с безопасностью, на одном компьютере].
Примечание - Термин "независимость выполнения" означает, что элементы в процессе их выполнения не будут оказывать негативного влияния друг на друга, т.е. их выполнение не приведет к появлению опасного отказа. Этот термин используется для того, чтобы отличить другие аспекты независимости, которые могут потребоваться между элементами (в частности, "разнообразие") и которые соответствуют другим требованиям настоящего стандарта.
Е.2 Области поведения
Независимость выполнения должна быть обеспечена и продемонстрирована в областях пространства и времени.
Е.2.1 Пространственная область
Данные, используемые одним элементом ПО, не должны быть изменены другим элементом. В частности, данные не должны быть изменены элементом ПО, не связанным с безопасностью.
Е.2.2 Временная область
Функционирование одного элемента ПО не должно приводить к неправильному функционированию другого элемента, используя слишком большую часть общего времени процессора или блокируя работу другого элемента, запирая совместно используемый ресурс.
Е.3 Анализ причин
Для демонстрации независимости выполнения должна быть проведена для предложенного проекта идентификация всех возможных причин взаимовлияний между умозрительно независимыми (не взаимовлияющими) функционирующими элементами ПО в пространственной и временной областях. Анализ должен быть проведен при нормальных условиях функционирования и в условиях отказа. При анализе должны быть рассмотрены (как минимум):
- применение совместно используемой оперативной памяти;
- применение совместно используемых периферийных устройств;
- совместное использование времени процессора (где два элемента ПО или более выполняются на одном процессоре);
- коммуникации между элементами, необходимые для создания проекта всей системы;
- возможность того, что отказ в одном элементе (такой, как переполнение, или исключительная ситуация деления на ноль, или неправильное вычисление указателя) может вызвать последовательные отказы в других элементах.
Для обеспечения и обоснования независимости выполнения необходимо рассмотреть все эти идентифицированные источники взаимовлияний.
Е.4 Обеспечение пространственной независимости
Методы/средства для обеспечения и демонстрации пространственной независимости включают в себя использование:
- аппаратной защиты памяти между различными элементами ПО, включая элементы, различающиеся стойкостью к систематическим отказам;
- операционной системы, которая для каждого элемента ПО реализует отдельный процесс с его собственным пространством виртуальной памяти, поддерживаемым аппаратной защитой памяти;
- строгого анализа проекта, исходного кода и, возможно, объектного кода для демонстрации отсутствия любых явных или неявных обращений одного элемента ПО к памяти другого элемента, которые могут привести к искажению данных, принадлежащих этому элементу (для случая отсутствия аппаратной защиты памяти);
- программной защиты от недопустимой модификации элементом с более низким уровнем полноты данных элемента ПО с более высоким УПБ.
Передача данных от элемента ПО с более низким УПБ к элементу с более высоким уровнем УПБ не допустима в том случае, если элемент с более высоким УПБ не может проверить достаточную полноту получаемых данных.
Если необходимо передать данные между элементами ПО, которые должны быть выполнены независимо, то следует применять однонаправленные интерфейсы, такие, например, как сообщения или каналы, а не совместно используемая память.
Примечание - В идеальном случае независимые элементы не должны взаимодействовать друг с другом. Однако если проект системы требует, чтобы один элемент ПО передавал данные другому элементу, то проект коммуникационного механизма должен быть выбран таким, чтобы отправляющий и/или получающий сообщение элементы не находились в состоянии отказа, или их функционирование не будет заблокировано в случае прекращения или задержки передачи данных.
Кроме переменной информации в оперативной памяти при пространственном разделении должен быть учтен любой резидентный объект данных в постоянных запоминающих устройствах, таких как магнитные диски. Например, защита доступа к файлу, реализованная операционной системой, может быть использована для предотвращения записи одним элементом ПО в принадлежащие другому элементу области данных.
Е.5 Обеспечение временной независимости
Методы, гарантирующие временную независимость, включают в себя:
- детерминированные методы планирования, например применение:
циклического алгоритма планирования, при котором каждому элементу задают определенный интервал времени, полученный для каждого элемента в результате анализа времени его работы в наихудшем случае, чтобы статически продемонстрировать выполнение требований синхронизации для каждого элемента,
архитектуры с временным распределением;
- планирование, основанное на строгом приоритете, реализованное программой-диспетчером, работающей в реальном времени, со средствами, запрещающими смену приоритетов;
- временные заграждающие метки, которые завершают выполнение элемента в том случае, если происходит превышение выделенного для него времени выполнения или максимального времени (в этом случае должен быть проведен анализ риска, показывающий, что завершение выполнения элемента не приведет к опасному отказу и, таким образом, этот метод может быть эффективнее всего использован для элемента, не связанного с безопасностью);
- возможности операционной системы, которая запрещает какому-либо процессу применять полностью временные ресурсы процессора, например с помощью квантования времени. Такой подход применим, только если элементы, связанные с безопасностью, не устанавливают жестких требований к режиму реального времени и если показано, что алгоритм планирования не приведет к неоправданным задержкам обращения к какому-либо элементу.
Если элементы ПО совместно используют ресурс (например, периферийное устройство), то в проекте должно быть гарантировано, что элементы будут функционировать корректно, так как совместно используемый ресурс блокируется другим элементом. При определении отсутствия временного взаимовлияния необходимо учитывать время получения доступа к совместно используемому ресурсу.
Е.6 Требования к программному обеспечению поддержки
Если операционная система, программа-диспетчер, работающая в реальном времени, управление памятью, управление таймером или какое-либо подобное ПО должны быть использованы для обеспечения пространственной и/или временной независимости, то в таком ПО любые из его элементов, которые должны быть независимыми, должны обладать наиболее высокой стойкостью к систематическим отказам.
Примечание - Однако в таком ПО для независимых элементов существует возможность отказа по общей причине.
Е.7 Независимость программных модулей. Аспекты языка программирования
Таблица Е.1 содержит неформальные определения используемых терминов.
Таблица Е.1 - Связывание модулей. Определение терминов
Термин |
Неформальное определение |
Связность |
Мера прочности связей между данными и подпрограммами внутри одного программного модуля |
Связывание |
Мера прочности связей между программными модулями |
Инкапсуляция |
Ограничение внешнего доступа к внутренним (личным) данным и подпрограммам; термин используют главным образом с объектно-ориентированными программами |
Независимость |
Мера отсутствия связей между частями программы; антоним понятия "связывание" |
Модуль |
Выполняющая некоторую функцию ограниченная часть ПО, которая может иметь собственные данные: класс, иерархию классов, подпрограммы, блок, модуль, пакет и т.п. в соответствии с языком программирования |
Интерфейс |
Четко определенный набор заголовков подпрограмм, обеспечивающий доступ к программному модулю |
Случайные данные ("блуждающие данные") |
Полученные данные, не используемые в программном модуле, но передающиеся в другой программный модуль |
Как правило, независимость программного модуля увеличивается, если между модулями существует слабое связывание и сильная связность внутри модулей. Сильная связность обеспечивает такую ситуацию, в которой идентифицируемые функциональные модули точно соответствуют идентифицируемым модулям реализации, а слабое связывание модулей обеспечивает незначительное взаимодействие и, следовательно, высокую степень независимости между функционально не связанными модулями.
Слабо связанный программный модуль обычно формируется в результате сильной связности внутри модуля, объединяя вместе код и используемые данные для выполнения одной конкретной функции. Слабая связность формируется в модулях, если код и данные объединены достаточно свободно или в результате некоторой временной последовательности либо некоторой последовательности потока управления.
Необходимо различать виды связывания модулей (см. таблицу Е.2).
При чтении или анализе кода (см. 7.9.2.12) проверяют, насколько слабо связаны программные модули. Такой анализ обычно требует понимания целей модулей и способа их выполнения. Поэтому истинное связывание может быть оценено только после прочтения кода и его документации.
Связывания по контенту необходимо избегать. Глобальное связывание может быть использовано только в исключительных случаях. Связывания по управлению и структурного связывания необходимо избегать. Если возможно, модули должны быть соединены связыванием с помощью интерфейса (инкапсуляцией) и/или связыванием с помощью данных.
Таблица Е.2 - Виды связывания модулей
Связывание |
Определение |
Объяснение |
Обоснование |
Примечание |
Связывание с помощью интерфейсов, инкапсуляция |
Связывание только для четко определенного множества подпрограмм |
Доступ к модулю или к его данным только через подпрограммы; любое изменение величины переменной, любой вопрос о величине такой переменной или любой сервис, требуемый от модуля, выполняются через вызов подпрограммы |
Заголовки подпрограмм (сигнатуры) модулей объясняют доступные сервисы. Если требуется изменить модуль, то большая часть этих изменений может быть выполнена непосредственно в модуле, не затрагивая другие модули. Поддерживает слабое связывание (в целом рекомендуется) |
В основном для объектно-ориентированных программ, классов, иерархии классов, библиотек; не для подпрограмм |
Связывание с помощью данных списка параметров |
Передача только данных списка параметров или идентификаторов подпрограмм |
Доступ к модулю или к его данным только через переменные или объекты, указанные в заголовке подпрограммы; любое изменение величины переменной, любой вопрос о величине такой переменной являются явными |
Заголовок подпрограмм содержит данные или объекты, включенные в вызов подпрограммы. Поддерживает слабое связывание (в целом рекомендуется) |
Внутри классов объектно-ориентированных программ этот принцип обычно не востребован. К локальным переменным можно получить прямой доступ. Строгое следование этому принципу может также привести к получению случайных данных. Для того чтобы этого избежать, данный принцип должен быть нарушен |
Структурное связывание |
Передаваемые данные содержат больше данных, чем необходимо |
В получающую подпрограмму передается больше данных, чем это необходимо для выполнения требуемой функции |
Лишние данные обеспечивают получающий модуль той информацией, которая не нужна для его выполнения. Эти данные могут привести к недоразумениям при взаимодействии модулей, что, однако, допускается |
Как правило, этот недостаток может быть легко скорректирован |
Связывание по управлению |
Связывание, которое осуществляет непосредственное управление получающим модулем |
Передача данных, которая может выполнить только передачу управления на другой модуль и во многих случаях характеризуется передачей одного бита |
Более тесное связывание, чем предыдущее, так как требует немедленного действия, предписывая получающей подпрограмме что-либо выполнить. Необходимо проявлять осторожность. В целом не рекомендуется |
Не всегда можно избежать. Например, передача может быть необходима при завершении действия или подтверждении соответствия значения |
Глобальное связывание |
Связывание с помощью глобальных данных |
Модули могут получить доступ к данным, к которым другие модули имеют прямой доступ, или один модуль может получить прямой доступ к данным, принадлежащим другому модулю |
Заголовок подпрограмм не указывает на то, какие данные используются и откуда. Сложно понять функции подпрограмм и определить последствия любых изменений кода |
В целом критикуемый вид связывания. Например, может быть востребован исключительно для того, чтобы избежать случайных данных. Необходимо использовать только в строго ограниченных рамках в соответствии с четко определенным и документально оформленным стандартом кодирования |
Связывание по контенту |
Прямой переход в другие модули, оказывающий влияние на условие в условных операторах в этих модулях, или прямой доступ к данным в других модулях |
Реализуется в программах на языке ассемблера; не реализуется на всех языках высокого уровня. Может ускорить выполнение программы и уменьшить трудоемкость кодирования |
Критикуемый вид связывания. Отдельный модуль можно понять только на том уровне, на котором понятны все соединенные с ним модули. Программа становится чрезвычайно сложной для понимания и изменения |
В некоторых языках программирования связывание по контенту даже невозможно. Допускается всегда игнорировать |
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.