Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Работоспособность и безотказность




 

В этом разделе обсуждаются две близко связанные составляющие функциональной надежности – работоспособность и безотказность. Под работоспособностью системы подразумевается способность предоставлять пользователю все необходимые системные сервисы по мере возникновения потребности в них. Безотказность – это способность системы предоставлять именно те сервисы, которые заложены в систему ее спецификацией. Из этого следует, что безотказность более общий показатель, включающий в себя свойство работоспособности, поскольку если система не работоспособна, то о безотказности вообще речи идти не может.

Однако необходимо и различать эти свойства, так как требования к работоспособности и безотказности в разных системах могут быть различны. Например, некоторые системы могут иметь сравнительно частые сбои, но они также могут быстро восстанавливаться после сбоев. У таких систем сравнительно низкие требования к безотказности. В то же время они могут иметь высокие требования к работоспособности в связи с необходимостью непрерывного обслуживания пользователей.

Наглядный пример такой системы – коммутатор телефонной станции. Снимая трубку телефона, пользователь слышит зуммер, означающий, что "линия свободна" и система готова выполнить требования пользователя. В случае сбоя такая система должна быть легко восстанавливаема. Коммутатор телефонной станции имеет средства для восстановления неправильной работы и разрешает повторную попытку соединения. Это выполняется очень быстро, и абонент телефона может даже не почувствовать, что был сбой. В такой ситуации основным требованием к функциональной надежности системы является безотказность.

Другое различие между этими показателями заключается в том, что работоспособность системы зависит также от времени, которое требуется для устранения неисправности. Так как, если система А отказывает один раз в год, а система В отказывает раз в месяц, то система А более надежна, чем В. Однако, если системе А необходимо три дня для восстановления работоспособности, а системе В для этого достаточно всего 10 минут, то безотказность системы В выше, чем системы А. Исходя из этих соображений пользователь скорее выберет систему В, чем А

Безотказность и работоспособность системы могут быть определены более точно следующим образом.

 

1. Безотказность – это способность системы безотказно работать определенное время с указанной целью в определенном окружении.

2. Работоспособность – это способность системы правильно функционировать и предоставлять вовремя требуемые сервисы.

 

Одна из практических проблем, возникающая при разработке систем, заключается в том, что наши интуитивные понятия безотказности и работоспособности часто оказываются шире приведенных выше формулировок. При рассмотрении функциональной надежности системы должны быть приняты во внимание окружение, в котором будет действовать система, и цель, для которой она используется. Следовательно, оценка безотказности в одном окружении не обязательно переносится в другое окружение, где система используется по-другому.

Для примера рассмотрим безотказность системы программного обеспечения в двух средах (окружении) – в офисе и в университете. В офисе пользователи строго следуют инструкциям по работе с системой и не имеют времени и возможностей экспериментировать с ней. В университетской среде студенты пробуют все возможности системы и часто непредвиденными способами, что может привести к отказам системы, которые никогда бы не встретились в офисной среде.

Также важны способы использования системы и реакция человека на ее работу. Представим себе, что у автомобиля неисправна стеклоочистительная система – происходит сбой в работе стеклоочистителей. В дождливую погоду работа этой системы очень важна. Безотказность такой системы будет определяться местностью, где происходит действие, и реакцией водителя. Для водителя из Сиэтла (влажный климат) этот отказ будет более чувствителен, чем для водителя из Лас-Вегаса (сухой климат). Водитель из Сиэтла будет считать, что система не является безотказной, в то время как водитель из Лас-Вегаса вообще никогда не столкнется с этой проблемой.

В определении работоспособности и безотказности системы не рассматривается тяжесть и последствия отказов системы. Людям особенно небезразличны отказы, которые имеют серьезные последствия; от этого зависит восприятие безотказности системы. Например, работа автомобильного двигателя, который дает сбои сразу после запуска, а затем после перезапуска работает исправно, раздражает. Но это не затрагивает нормального режима эксплуатации автомобиля.

Считается, что система ведет себя надежно, если ее работа соответствует заданному алгоритму. Однако возможны ситуации, когда работа системы не совсем соответствует ожиданиям пользователей. К сожалению, системные требования часто бывают или неполны или некорректны. Разработчики в таких случаях должны сами решать, как будет вести себя система, но, не всегда являясь специалистами в конкретной области применения системы, они не могут учесть все факторы и запрограммировать такое поведение системы, которое необходимо пользователю.

Как показывает опыт, наиболее важными составляющими функциональной надежности являются безотказность и работоспособность. Если же система ненадежна, то трудно гарантировать ее безопасность или защищенность. Ненадежность системы влечет за собой большие материальные потери, такие системы приобретают репутацию некачественных и в дальнейшем теряют доверие потребителей.

Безотказность системы определяется отсутствием сбоев. Отказы системы могут происходить из-за плохого или неправильного ее обслуживания, могут быть следствием ошибок в алгоритме, а могут быть вызваны неисправностями систем связи. Однако во многих случаях причиной ошибочного поведения системы являются дефекты в самой системе. При рассмотрении безотказности полезно понимать различие в терминах сбой, ошибка и отказ, которые определены в табл. 16.1.

Таблица 16.1. Терминология безотказности

 

Термин Описание
Отказ системы Прекращение функционирования системы  
Системные ошибки Ошибочное поведение системы, не соответствующее ее спецификации  
Сбой системы Неправильное поведение системы, непредвиденное ее разработчиками  
Ошибка оператора Неверные действия пользователя, вызвавшие сбой в работе системы

 

Сбои не обязательно приводят к отказам системы, поскольку они могут быть кратковременными и система может прийти к нормальному функционированию раньше, чем произойдет отказ. Системные ошибки также не обязательно приводят к отказам системы, так как системы имеют защиту, гарантирующую, что ошибочный режим будет обнаружен и исправлен.

Терминология, приведенная в табл. 16.1, помогает понять три дополняющих друг друга подхода, используемых для повышения безотказности систем.

 

1. Предотвращение сбоев. Подход к разработке ПО, минимизирующий возможность появления ошибок и/или обнаруживающий ошибки прежде, чем они приведут к сбоям системы. Пример такого подхода – исключение подверженных ошибкам определенных конструкций языков программирования (например, указателей) и постоянный анализ программ для обнаружения различных аномалий программного кода (см. главу 19).

2. Обнаружение ошибок и их устранение. Использование разнообразных методов проверки системы в различных режимах позволяет обнаружить ошибки и устранить их до ввода системы в эксплуатацию. Регулярное тестирование системы и ее отладка – пример данного подхода.

3. Устойчивость к сбоям. Использование специальных методов, гарантирующих, что ошибки в системе не приведут к сбоям и что сбои не приведут к отказам системы. Пример такого подхода – применение средств самовосстановления системы с использованием дублирования модулей.

 

Разработка систем, устойчивых к сбоям, описана в главе 18, где также кратко обсуждаются некоторые методы предотвращения сбоев. Методы разработки ПО, предотвращающие сбои, приведены в главе 24. Вопросы обнаружения системных ошибок обсуждаются в главах 19 и 20.

 

Рис. 16.5. Программная система как отображение входных данных на множество выходных данных

 

Программный сбой приводит к отказу системы, когда "сбойный" программный код выполняется над определенными входными данными, приводящими к сбою системы. При этом программа может корректно работать на других входных данных. На рис. 16.5, заимствованным из работы [221], программная система представлена как отображение множества входных данных (входов) на множество выходных данных (выходов). Программа обрабатывает входные данные, получая выходные данные.

Некоторые из входных данных (см. рис. 16.5) приводят к отказам системы, в результате программа генерирует ошибочные выходные данные. Безотказность программного обеспечения характеризуется вероятностью, с которой при выполнении программы среди множества входных данных встретятся такие, что приведут к ошибочным результатам вычислений.

Существует сложная взаимосвязь между наблюдаемой безотказностью системы и количеством скрытых программных дефектов. В работе [239] подчеркивается, что не все программные ошибки в равной степени вызывают отказ системы. Обычно в множестве входных данных Iê, приводящих к ошибочным выходным данным, имеется ряд данных, вероятность выбора которых больше, чем у других данных. Если эти входные данные не требуют для своей обработки той части ПО, которая содержит ошибки, то системных сбоев не будет. Таким образом, безотказность системы зависит преимущественно от количества входных данных, приводящих к ошибочным результатам во время нормальной эксплуатации системы. Сбои системы, которые проявляются только в исключительных ситуациях, мало влияют на ее надежность.

Надежность системы связана с вероятностью ошибки, проявляющейся во время эксплуатации системы. Устранение программных ошибок в редко используемых системных модулях мало повлияет на повышение безотказности системы. В работе [239] показано, что устранение 60% программных ошибок только на 3% повысит безотказность системы. Это подтверждается и исследованиями ошибок в программных продуктах IBM. В работе [4] показано, что многие ошибки в программных продуктах реально вызывают сбои системы после сотен или тысяч месяцев эксплуатации.

Следовательно, программа может содержать ошибки и все же вызывать доверие пользователей. Сбои программы "никогда не будут возникать, если не выбирать входных данных, ведущих к сбоям. Кроме того, опытные пользователи часто работают, зная об ошибках программного обеспечения, вызывающих сбои системы, и умело избегают их. Устранение ошибок в таких случаях не даст практически никакого повышения надежности.

 

Рис. 16.6. Использование множества входных данных разными пользователями

 

Каждый пользователь системы по-своему избегает "встречи" с системными ошибками. Ошибки, с которыми встречается один пользователь, могут никогда не встретиться другому. На рис. 16.6 показано множество входных данных, используемых разными пользователями. Входные данные, выбранные пользователем 2 пересекаются с входными данными, приводящими к сбою системы. Поэтому пользователь 2 будет сталкиваться со сбоями системы. Пользователи 1 и 3 никогда не используют входных данных, приводящих к сбою системы, – для них программное обеспечение всегда будет безотказно.

Безопасность

 

Безопасность системы – это свойство, отражающее способность системы функционировать, не угрожая людям или окружающей среде. Там, где безопасность является необходимым атрибутом системы, говорят о системе, критической по обеспечению безопасности. Примерами могут служить контролирующие и управляющие системы в авиации, системы управления процессами на химических и фармацевтических заводах и системы управления автомобилями.

Управление систем, критических по обеспечению безопасности, гораздо проще организовать с помощью аппаратных средств, чем ПО. Однако сейчас строятся системы такой сложности, что управление не может осуществляться только аппаратными средствами. Из-за необходимости управлять большим числом сенсоров и исполнительных механизмов со сложными законами управления требуется управляющее программное обеспечение. В качестве примера можно привести системы управление военными самолетами. Они требуют постоянного программного управления самолетом, гарантирующего безопасность полета.

Программное обеспечение рассматриваемых в этом разделе систем подразделяется на два класса.

 

1. Первичное программное обеспечение, критическое по критерию безопасности. Это ПО включается в систему в виде отдельного блок управления. Неправильная работа такого ПО может быть причиной отказа оборудования, вследствие которого может возникнуть угроза жизни человека или нанесения вреда окружающей среде. Я особо обращаю внимание на этот класс программного обеспечения.

2. Вторичное программное обеспечение, критическое по критерию безопасности. Это ПО косвенным образом может привести к непредвиденным последствиям. Примерами могут служить автоматизированные системы в технике, неправильная работа которых может привести к ошибкам в работе объекта и поставить под угрозу жизнь людей. Другой пример такого ПО – медицинская база данных, содержащая описание лекарств, предназначенных пациентам. Ошибки в этой системе могут привести к неправильной дозировке препаратов.

 

Безотказность и безопасность системы – взаимосвязанные, но, очевидно, различные составляющие функциональной надежности. Конечно, система, критическая по обеспечению безопасности, должна соответствовать своему назначению и функционировать без отказов. Для обеспечения непрерывного функционирования даже в случае ошибок она должна иметь защиту от сбоев. Однако отказоустойчивость не гарантирует безопасности системы. Программное обеспечение может только один раз сработать неправильно, и это приведет к несчастным случаям.

Нельзя быть на сто процентов уверенным, что системное программное обеспечение безопасно и отказоустойчиво. Безотказность ПО не гарантирует его безопасность по ряду причин.

 

1. В системной спецификации может быть не определено поведение системы в некоторых критических ситуациях. Высокий процент сбоев систем – результат скорее неверных или неполных требований, чем ошибок программирования [49, 109, 226, 252, 8*, 20*, 29*]. После изучения ошибок в программных системах Лутц (Lutz, [226]) делает вывод:

 

"...трудности с формулировкой требований к разрабатываемой системе – основная причина ошибок программного обеспечения, связанных с безопасностью, которые нельзя выявить до сборки и тестирования системы".

 

2. Сбои в работе аппаратных средств могут привести к непредсказуемому поведению системы, в результате чего программное обеспечение сталкивается с непредвиденной ситуацией. Когда системные компоненты близки к состоянию отказа, они могут вести себя неустойчиво и генерировать сигналы, которые могут быть обработаны программным обеспечением непредвиденным образом.

3. Операторы, работающие с системой, могут внести ошибки, которые в особых ситуациях способны привести к сбою системы. Анекдотический пример – механик дал команду системе, управляющей полетом самолета, поднять шасси. Управляющая система выполнила команду механика несмотря на то, что самолет был на земле!

 

При разработке систем, критических по обеспечению безопасности, используется специальная терминология, приведенная в табл. 16.2. Эти термины взяты из работы [214] и уточнены мною.

Таблица 16.2. Терминология безопасности

 

Термин Описание
Авария (или несчастный случай) Незапланированное событие или последовательность событий, приводящие к человеческой смерти или ранению; нанесение ущерба собственности или окружающей среде. Пример несчастного случая – нанесение увечий оператору машиной, управляемой компьютерной системой  
Опасность (опасные ситуации) Ситуации, при которых возможны несчастные случаи и аварии. Пример опасности – отказ сенсора, который определяет наличие препятствия впереди машины  
Повреждения Оцениваются как ущерб от опасных случаев. Повреждения могут быть как незначительными, так и катастрофическими, приводящими к гибели людей  
Серьезность опасности Оценивается по самым большим повреждениям в результате самых опасных случаев. Серьезность опасности может ранжироваться от катастрофической, приводящей к гибели людей, до незначительной  
Вероятность опасности Вероятность появления событий, которые создают опасные ситуации. Значение вероятности определяется обычным образом. Опасные события ранжируются от вероятного (если, например, вероятность равна 1/100, т.е. на 100 "нормальных" событий произойдет одно опасное) и до невозможного (когда ни при каких условиях не возникнет опасной ситуации)  
Риск Измеряется как вероятность того, что система будет причиной несчастного случая. Для оценки риска определяются вероятность опасности, серьезность опасности и вероятность того, что опасная ситуация приведет к аварии

Считается, что система безопасна, если ее эксплуатация исключает аварии (несчастные случаи) или их последствия незначительны. Этого можно достичь тремя дополняющими друг друга способами.

 

1. Предотвращение опасности. Система разрабатывается таким образом, чтобы избежать опасных ситуаций. Например, чтобы во время эксплуатации машины избежать попадания рук оператора под лезвие, в системе раскроя предусматривается обязательное одновременное нажатие двух отдельных кнопок управления.

2. Обнаружение и устранение опасности. Система разрабатывается таким образом, чтобы возможные опасные ситуации были обнаружены и устранены до того, как они приведут к аварии. Например, система, управляющая химическим предприятием, для предотвращения взрыва от высокого давления должна вовремя обнаружить избыточное давление и открыть предохранительный клапан, чтобы уменьшить это давление.

3. Ограничение последствий. Система может включать способы защиты, минимизирующие повреждения, возникающие в результате происшедшей аварии. Например, в систему управления двигателями самолета обычно включается автоматическая система огнетушения. В случае возгорания такая система позволяет предотвратить пожар и не ставит под угрозу жизнь пассажиров и экипажа.

 

Аварии и несчастные случаи обычно являются результатом нескольких событий, которые происходят одновременно с непредвиденными последствиями. Анализируя серьезные аварии, в работе [275] показано, что почти все они произошли из-за комбинации системных сбоев, а не вследствие отдельных сбоев. Непредвиденная комбинация сбоев приводила к отказу системы. В той же работе утверждается, что невозможно предупредить все комбинации сбоев системы и эти аварии – неизбежное следствие использования сложных систем. Программное обеспечение имеет тенденцию разрастаться и усложняться, а сложность программно-управляемых систем увеличивает вероятность аварий и несчастных случаев.

Это, конечно, не означает, что программное управление обязательно увеличивает риск, связанный с системой. Программное управление и текущий контроль могут повысить безопасность систем. Кроме того, программно-управляемые системы могут контролировать более широкий диапазон условий по сравнению, например, с электромеханическими системами. Они также довольно легко настраиваются. Они предполагают использование компьютерных средств, которым свойственна высокая надежность и которые относительно компактны. Программно-управляемые сложные системы могут блокировать опасность. Они могут поддерживать управление во вредных условиях, уменьшая количество необходимого обслуживающего персонала.

Защищенность

 

Это способность системы защищать себя от внешних случайных или преднамеренных воздействий. Примером внешних воздействий на систему могли бы быть компьютерные вирусы, несанкционированное использование системы, несанкционированное изменение системы или данных и т.д. Защищенность важна для всех критических систем. Без приемлемого уровня защищенности работоспособность, безотказность и безопасность системы теряют смысл, поскольку причиной повреждения системы могут быть внешние воздействия.

Это связано с тем, что все методы подтверждения работоспособности, безотказности и защищенности полагаются на неизменность системы при эксплуатации и на соответствие ее параметров первоначально установленным. Если установленная система была повреждена каким-то образом (например, если программное обеспечение было изменено в результате проникновения в систему вируса), то параметры надежности и безопасности, которые первоначально были заложены, не могут больше поддерживаться. В этом случае программное обеспечение может вести себя непредсказуемо.

Имеются определенные типы критических систем, для которых защищенность – наиболее важный показатель надежности системы. Военные системы, системы для электронной торговли и системы, включающие создание и обмен конфиденциальной информацией, должны разрабатываться с очень высоким уровнем защищенности. Например, если система резервирования билетов авиакомпании недоступна, это причиняет неудобство в связи с некоторой задержкой продажи билетов, но если система не защищена и может принимать поддельные заказы, то авиакомпания может понести большие убытки.

Существует три типа повреждений системы, которые могут быть вызваны внешними воздействиями.

 

1. Отказ в предоставлении системных сервисов. Система может быть переведена в такое состояние, когда нормальный доступ к системным сервисам становится невозможным. Очевидно, это отражается на работоспособности системы.

2. Разрушение программ и данных. Компоненты программного обеспечения системы могут быть несанкционированно изменены. Это может повлиять на поведение системы, а следовательно, на надежность и безопасность. Если повреждение серьезно, система может стать не пригодной к эксплуатации.

3. Раскрытие конфиденциальной информации. Информация, находящаяся под управлением системы, может быть конфиденциальной, внешнее проникновение в систему может сделать ее публично доступной. В зависимости от типа данных, это может повлиять на безопасность системы и вызвать дальнейшие изменения в системе, которые скажутся на ее работоспособности и безотказности.

 

Как и в случае с другими составляющими надежности, есть специальная терминология, связанная с защищенностью систем. Некоторые термины, определенные в монографии [279], приведены в табл. 16.3.

Таблица 16.3. Терминология защищенности

 

Термин Описание
Внешнее воздействие Воздействие, в результате которого возможна потеря данных и/или повреждение системы  
Уязвимость Дефект системы, который может стать причиной потери данных или ее повреждения  
Атака Использование уязвимости системы  
Угрозы Обстоятельства, которые могут привести к потере данных или повреждению системы  
Контроль Защитные меры, уменьшающие уязвимость системы

 

В терминологии защищенности есть много общего с терминологией безопасности. Так, внешнее воздействие аналогично аварии (несчастному случаю), а уязвимость – опасности. Следовательно, существуют аналогичные подходы, увеличивающие защищенность системы.

 

1 Предотвращение уязвимости. Система разрабатывается таким образом, чтобы ее уязвимость была как можно ниже. Например, система не соединяется с внешней сетью, чтобы избежать воздействия из нее.

2. Обнаружение и устранение атак. Система разрабатывается таким образом, чтобы обнаружить предпринятую на нее атаку и устранить ее, пока она не привела к повреждениям и потерям. Пример обнаружения атак и их устранения - использование антивирусных программ, которые анализируют поступающую информацию на наличие вирусов и устраняют их в случае проникновения в систему.

3. Ограничение последствий. Система разрабатывается таким образом, чтобы свести к минимуму последствия внешнего воздействия. Например, регулярная проверка системы и возможность переустановить ее в случае повреждения.

 

Защищенность становится еще более актуальной при подключении системы к Internet. И хотя Internet-связь обеспечивает дополнительные функциональные возможности системы (например, клиент может получить удаленный доступ к своему банковскому счету), такая система может быть разрушена злоумышленниками. При подключенности к Internet уязвимые места системы становятся доступными для большого количества людей, которые могут воздействовать на систему.

Очень важным атрибутом систем, подключенных к Internet, является их жизнеспособность [107] т е. способность системы продолжать работать, в то время как она подвергается внешним воздействиям и часть ее повреждена. Жизнеспособность, конечно, связана и с защищенностью и с работоспособностью. Для обеспечения жизнеспособности следует определить основные ключевые компоненты системы, которые необходимы для ее функционирования [108]. Для повышения жизнеспособности используется три стратегии: противодействие внешним воздействиям, распознавание их и восстановление системы после атаки. Здесь нет возможности охватить эту тему, но на Web-странице данной книги имеются ссылки на источники с информацией относительно исследования жизнеспособности систем.

 

КЛЮЧЕВЫЕ ПОНЯТИЯ

• Функциональная надежность компьютерной системы – свойство, отражающее степень доверия к ней со стороны пользователей. Наиболее важные составляющие функциональной надежности: работоспособность, безотказность, безопасность и защищенность.

• Критическая система – система, в которой отказы могут приводить к значительным экономическим потерям, физическому повреждению или угрозам человеческой жизни. Три важных класса критических систем – системы, критические по обеспечению безопасности, системы, критические для целевого назначения, и системы, критические для бизнеса.

• Работоспособность системы – способность предоставлять сервисы, когда это необходимо. Безотказность системы – способность системы сервисов работать так, как предусмотрено их назначением.

• Безотказность и работоспособность рассматриваются как наиболее важные свойства функциональной надежности. Если система ненадежна, трудно гарантировать ее безопасность и защищенность, поскольку они могут быть подорваны отказами системы.

• Безотказность связана с вероятностью сбоев, возникающих при эксплуатации системы. Программа может содержать определенные ошибки, но будет восприниматься пользователем как безопасная, поскольку они могут никогда не использовать средства системы, содержащие эти ошибки.

• Безопасность – свойство системы, которое отражает ее способность функционировать без угроз людям или окружающей среде. Если безопасность является основной характеристикой, значит, это система, критическая по обеспечению безопасности.

• Защищенность важна для всех критических систем. Без приемлемого уровня защищенности работоспособность, безотказность и безопасность системы не имеют большего значения, поскольку внешние воздействия могут причинить повреждения системе.

 

Упражнения

16.1. Перечислите наиболее важные составляющие надежности систем. Почему зависимость между стоимостью разработки системы и ее надежностью имеет экспоненциальный вид?

16.2. Почему функциональная надежность важна для критических систем? Назовите шесть причин.

16.3. Объясните на примерах трудности точного определения безотказности программных систем.

16.4. Оцените надежность какой-либо системы, которую вы регулярно используете, перечислив отказы системы и наблюдаемые сбои. Составьте руководство пользователя, в котором опишите, что нужно делать для эффективного использования системы при наличии этих сбоев.

16.5. Назовите шесть промышленных изделий, которые содержат или могут содержать в будущем программные системы, критические по обеспечению безопасности.

16.6. Объясните, почему обеспечение безотказности системы не гарантирует ее безопасности.

16.7. В медицинской системе, управляющей облучением опухолей, предусмотрите опасность, которая может возникнуть в процессе работы системы, и предложите программное средство, которое определяет эту опасность и предотвращает возможные несчастные случае, обусловленные ею.

16.8. Объясните зависимость между работоспособностью системы и ее защищенностью.

16.9. В терминах компьютерной безопасности объясните разницу между атакой на систему и угрозой ей.

16.10. Этично ли поставлять клиенту программную систему с известными ошибками? Разумно ли сообщать клиенту о существовании этих ошибок и следует ли после этого принимать претензии относительно надежности программного обеспечения?

16.11. Предположим, вы входили в состав группы разработчиков программного обеспечения для химического завода, которое сработало неправильно и стало причиной серьезного загрязнения окружающей среды. Ваш босс заявил в телевизионном интервью, что нет никаких ошибок в программном обеспечении и что проблемы возникли из-за неправильной эксплуатации системы. Вы согласитесь с таким объяснением? Обсудите, как вы должны отнестись к такому заявлению.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...