Слайд 2Основные понятия
программной инженерии. Принципы проектирования сложных программных систем
Лекция 1
![Основные понятия программной инженерии. Принципы проектирования сложных программных систем Лекция 1](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-1.jpg)
Слайд 3Технология – сложный комплекс, в основе которого лежит применение различных орудий, инструментов
![Технология – сложный комплекс, в основе которого лежит применение различных орудий, инструментов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-2.jpg)
и аппаратов, использующий наработанные человечеством знания и умения [1].
В широком смысле под технологией программирования будем понимать технологию разработки программных средств, включая в нее все процессы, начиная с момента зарождения идеи этого средства и до момента изъятия из эксплуатации. Сюда же включаются все процессы, связанные с созданием необходимой программной документации.
Слайд 4Информационная технология – система методов и способов сбора, получения, накопления, хранения, обработки,
![Информационная технология – система методов и способов сбора, получения, накопления, хранения, обработки,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-3.jpg)
анализа и передачи информации с использованием средств ЭВМ.
Применяется для повышения эффективности, защищенности и оперативности производственных процессов.
Методология – совокупность механизмов, применяемых при разработке программных систем и объединённых единым философским подходом.
Слайд 5Метод – концептуальное описание правил построение моделей системы, представляющих разные взгляды на
![Метод – концептуальное описание правил построение моделей системы, представляющих разные взгляды на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-4.jpg)
проект с использованием специальных графических нотаций, которые определяет изобразительные средства и состав документации по проекту.
Слайд 6Главное различие между технологией программирования и программной инженерией как дисциплинами для изучения
![Главное различие между технологией программирования и программной инженерией как дисциплинами для изучения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-5.jpg)
заключается в способе рассмотрения и систематизации материала.
В технологии программирования акцент делается на изучении процессов разработки ПС и порядке их прохождения. Методы и инструментальные средства, используемые для разработки ПС, образуют технологические процессы, которые рассматриваются в дисциплине технология программирования.
Слайд 7Программная инженерия изучает различные методы и инструментальные средства разработки ПС с точки
![Программная инженерия изучает различные методы и инструментальные средства разработки ПС с точки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-6.jpg)
зрения достижения определенных целей.
Методы и средства, изучаемые в данной дисциплине, могут использоваться в разных технологических процессах и в разных технологиях программирования.
Слайд 8В технологии программирования методы рассматриваются с точки зрения организации технологических процессов.
В методологии
![В технологии программирования методы рассматриваются с точки зрения организации технологических процессов. В](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-7.jpg)
программирования методы рассматриваются с точки зрения основ их построения.
Методология программирования определяется как совокупность механизмов, применяемых в процессе разработки программного обеспечения и объединенных одним общим философским подходом.(Г. Буч. Объектно-ориентированное проектирование с примерами применения. - М.: Конкорд, 1992).
Слайд 9Например, надежность является неотъемлемым атрибутом ПС. Будем рассматривать технологию программирования как технологию
![Например, надежность является неотъемлемым атрибутом ПС. Будем рассматривать технологию программирования как технологию](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-8.jpg)
разработки надежных ПС. Это означает:
мы будем рассматривать все процессы разработки ПС, начиная с момента возникновения замысла ПС;
нас будут интересовать не только вопросы построения программных конструкций, но и вопросы описания функций и принимаемых решений с точки зрения их человеческого (неформального) восприятия;
Слайд 10в качестве продукта технологии принимается надежная (далеко не всегда правильная) ПС.
Такой
![в качестве продукта технологии принимается надежная (далеко не всегда правильная) ПС. Такой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-9.jpg)
взгляд на технологию программирования будет существенно влиять на организацию технологических процессов, на выбор в них методов и инструментальных средств.
Слайд 11Основные требования к методикам и
методам проектирования ПО
Метод должен отражать специфику подхода
![Основные требования к методикам и методам проектирования ПО Метод должен отражать специфику](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-10.jpg)
(парадигму программирования).
Метод должен быть освоен всеми участниками проекта и должен быть наглядным с точки зрения полученных результатов.
Должны существовать формальные переходы от этапов анализа к этапу проектирования и обратно.
Должны существовать инструментальные средства, поддерживающие все эти методы
Слайд 12Понятие сложной системы
Международная организация по стандартизации (МОС) в области науки о компьютерах
![Понятие сложной системы Международная организация по стандартизации (МОС) в области науки о](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-11.jpg)
и ИТ определила понятие "система" следующим образом:
"Система - это множество элементов и отношений между ними, рассматриваемых, как единое целое". Такими элементами могут быть как материальные, так и логические объекты, а также результаты деятельности людей (например, организационные формы предприятий, математические методы и языки программирования.
Слайд 13
Классификация ИС
Классификации всегда относительны. Так в детерминированной системе можно найти элементы стохастических
![Классификация ИС Классификации всегда относительны. Так в детерминированной системе можно найти элементы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-12.jpg)
систем.
Цель любой классификации ограничить выбор подходов к отображению системы и дать рекомендации по выбору методов.
Слайд 14Системы классифицируются следующим образом:
по виду отображаемого объекта—технические, биологические и др.;
по виду научного
![Системы классифицируются следующим образом: по виду отображаемого объекта—технические, биологические и др.; по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-13.jpg)
направления — математические, физические, химические и т. п.;
по виду формализованного аппарата представления системы — детерминированные и стохастические;
по типу целеустремленности-открытые и закрытые;
по сложности структуры и поведения — простые и сложные;
по степени организованности — хорошо организованные, плохо организованные (диффузные), самоорганизующиеся системы.
Слайд 15Классификация систем по сложности
Г. Н. Поваров в зависимости от числа элементов,
![Классификация систем по сложности Г. Н. Поваров в зависимости от числа элементов,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-14.jpg)
входящих в систему, выделяет четыре класса систем:
малые системы (10...103 элементов),
сложные (104...107 элементов),
ультрасложные (107. ..1030 элементов),
суперсистемы (1030.. .10200 элементов).
Слайд 17Понятие сложной информационной системы
Система, которая разрабатывается не одним человеком, а группой разработчиков
![Понятие сложной информационной системы Система, которая разрабатывается не одним человеком, а группой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-16.jpg)
(более 5 человек).
Если количество строк исходного кода исчисляется сотнями тысяч или даже миллионами.
Если сложную задачу можно декомпозировать на более простые задачи (которые будут реализованы более мелкими подсистемами).
Если в требованиях встречаются взаимоисключающие требования. Например, нужно обработать огромные информационные потоки, и время отклика должно быть минимальным. Следует найти компромисс.
Слайд 18
Сложная программа обладает
следующими свойствами:
Она решает одну или несколько связанных задач,
![Сложная программа обладает следующими свойствами: Она решает одну или несколько связанных задач,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-17.jpg)
зачастую сначала не имеющих четкой постановки, настолько важных для каких-либо лиц или организаций, что те приобретают значимые выгоды от ее использования.
Существенно, чтобы она была удобной в использовании. В частности, она должна включать достаточно полную и понятную пользователям документацию, возможно, также специальную документацию для администраторов, а также набор документов д ля обучения работе с программой.
Ее низкая производительность на реальных данных приводит к значимым потерям для пользователей.
Ее неправильная работа наносит ощутимый ущерб пользователям и другим организациям и лицам, даже если сбои происходят не слишком часто.
Для выполнения своих задач она должна взаимодействовать с другими программами и программно-аппаратными системами, работать на разных платформах.
Слайд 19Пользователи, работающие с ней, приобретают дополнительные выгоды от того, что программа развивается,
![Пользователи, работающие с ней, приобретают дополнительные выгоды от того, что программа развивается,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-18.jpg)
в нее вносятся новые функции и устраняются ошибки. Необходимо наличие проектной документации, позволяющей развивать ее, возможно, вовсе не тем разработчикам, которые ее создавали, без больших затрат на обратную разработку (реинжиниринг).
В ее разработку вовлечено значительное количество людей (более 5-ти человек). «Большую» программу практически невозможно написать с первой попытки, с небольшими усилиями и в одиночку.
Велико количество ее возможных пользователей.
Слайд 20Математика делает то, что можно, так, как нужно.
Информатика делает то, что нужно,
![Математика делает то, что можно, так, как нужно. Информатика делает то, что](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-19.jpg)
так, как можно!
Программистский фольклор
Слайд 22Общие принципы построения распределенных систем
Создание распределенных систем высокого качества является одной из
![Общие принципы построения распределенных систем Создание распределенных систем высокого качества является одной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-21.jpg)
наиболее сложных задач по разработке ПО. Технологии типа J2EE и .NET создаются как раз для того, чтобы сделать разработку широко встречающихся видов распределенных систем — так называемых бизнес приложений, поддерживающих решение бизнес-задач некоторой организации, — достаточно простой и доступной практически любому программисту.
Слайд 23Основная задача, которую пытаются решить с помощью распределенных систем — обеспечение как
![Основная задача, которую пытаются решить с помощью распределенных систем — обеспечение как](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-22.jpg)
можно большему числу пользователей максимально простого доступа к возможно большему количеству ресурсов.
Наиболее важными свойствами такой системы являются прозрачность, открытость, масштабируемость и безопасность.
Слайд 24Прозрачность (transparency).
Прозрачностью называется способность системы скрыть от пользователя физическое распределение ресурсов, а
![Прозрачность (transparency). Прозрачностью называется способность системы скрыть от пользователя физическое распределение ресурсов,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-23.jpg)
также аспекты их перераспределения и перемещения между различными машинами в ходе работы, репликацию (т.е. дублирование) ресурсов, трудности, возникающие при одновременной работе нескольких пользователей с одним ресурсом, ошибки при доступе к ресурсам и в работе самих ресурсов.
Слайд 25Степень прозрачности может быть различной, поскольку скрывать все эффекты, возникающие при работе
![Степень прозрачности может быть различной, поскольку скрывать все эффекты, возникающие при работе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-24.jpg)
распределенной системы, неразумно. Кроме того, прозрачность системы и ее производительность обычно находятся в обратной зависимости — например, при попытке преодолеть отказы в соединении с сервером большинство Web-браузеров пытается установить это соединение несколько раз, а для пользователя это выглядит как сильно замедленная реакция системы на его действия.
Слайд 26Открытость системы (openness) определяется как полнота и ясность описания интерфейсов работы с
![Открытость системы (openness) определяется как полнота и ясность описания интерфейсов работы с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-25.jpg)
ней и служб, которые она предоставляет через эти интерфейсы.
Такое описание должно включать в себя все, что необходимо знать для того, чтобы пользоваться этими службами, независимо от реализации данной системы и платформы, на которой она развернута.
Слайд 27Открытость системы важна как для обеспечения ее переносимости, так и для облегчения
![Открытость системы важна как для обеспечения ее переносимости, так и для облегчения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-26.jpg)
использования системы и возможности построения других систем на ее основе. Распределенные системы обычно строятся с использованием служб, предоставляемых другими системами, и в то же время сами часто являются составными элементами или поставщиками служб для других систем.
Именно поэтому использование компонентных технологий при разработке практически полезного распределенного ПО неизбежно.
Слайд 28Масштабируемость системы (scalability). — это зависимость изменения ее характеристик от числа ее
![Масштабируемость системы (scalability). — это зависимость изменения ее характеристик от числа ее](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-27.jpg)
пользователей, числа подключенных ресурсов, а также от степени географической распределенности системы.
В число значимых характеристик при этом попадают функциональность, производительность, стоимость, трудозатраты на разработку, на внесение изменений, на сопровождение, на администрирование, удобство работы с системой.
Слайд 29Система хорошо масштабируема по производительности, если параметры задач, решаемых ей за одно
![Система хорошо масштабируема по производительности, если параметры задач, решаемых ей за одно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-28.jpg)
и то же время, можно увеличивать достаточно быстро (лучше — линейно или еще быстрее, но это возможно не для всех задач) при возрастании количества имеющихся ресурсов, в частности, отдельных машин.
Слайд 30Большую роль играет административная масштабируемость системы — зависимость удобства работы с ней
![Большую роль играет административная масштабируемость системы — зависимость удобства работы с ней](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-29.jpg)
от числа административно независимых организаций, вовлеченных в ее обслуживание.
При реализации очень больших систем (поддерживающих работу тысяч и более пользователей, включающих сотни и более машин) хорошая масштабируемость может быть достигнута только с помощью децентрализации основных служб системы и управляющих ею алгоритмов.
Слайд 31Вариантами такого подхода являются следующие:
Децентрализация обработки запросов за счет использования нескольких машин
![Вариантами такого подхода являются следующие: Децентрализация обработки запросов за счет использования нескольких](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-30.jpg)
для этого.
Децентрализация данных за счет использования нескольких хранилищ данных или нескольких копий одного хранилища.
Использование, где это возможно,
асинхронной связи — передачи сообщений
без приостановки работы до прихода ответа.
Слайд 324. Децентрализация алгоритмов работы за счет использования «уникальных» алгоритмов,
не требующих полной
![4. Децентрализация алгоритмов работы за счет использования «уникальных» алгоритмов, не требующих полной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-31.jpg)
информации о состоянии системы,
способных продолжать работу при сбое одного или нескольких ресурсов системы,
не предполагающих единого хода времени на всех машинах, входящих в систему.
Слайд 335. Использование комбинированных систем организации взаимодействия, основанных на следующих схемах:
Иерархическая организация систем,
![5. Использование комбинированных систем организации взаимодействия, основанных на следующих схемах: Иерархическая организация](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-32.jpg)
хорошо масштабирующей задачи поиска информации и ресурсов.
Репликация — построение копий данных и их распределении по системе для балансировки нагрузки на разные ее элементы — и ее частном случае, кэшировании, организующем хранение результатов наиболее часто используемых запросов как можно ближе к клиенту.
Взаимодействие точка-точка (peer-to-peer, P2P), обеспечивающем независимость взаимодействующих машин от других машин в системе.
Слайд 34Безопасность (safety).
Так как распределенные системы вовлекают в свою работу множество пользователей, машин
![Безопасность (safety). Так как распределенные системы вовлекают в свою работу множество пользователей,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-33.jpg)
и географически разделенных элементов, вопросы их безопасности получают гораздо большее значение, чем при работе обычных приложений, сосредоточенных на одной физической машине. Это связано как с невозможностью надежно контролировать доступ к различным элементам такой системы, так и с доступом к ней гораздо более широкого и разнообразного по своему поведению сообщества пользователей.
Слайд 35Понятие безопасности включает следующие характеристики:
Сохранность и целостность данных.
При обеспечении групповой работы многих
![Понятие безопасности включает следующие характеристики: Сохранность и целостность данных. При обеспечении групповой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-34.jpg)
пользователей с одними и теми же данными нужно обеспечивать их сохранность, т.е. предотвращать исчезновение данных, введенных одним из пользователей, и в тоже время целостность, т.е. непротиворечивость, выполнение всех присущих данным ограничений.
Слайд 36Это непростая задача, не имеющая решения, удовлетворяющего все стороны во всех ситуациях.
![Это непростая задача, не имеющая решения, удовлетворяющего все стороны во всех ситуациях.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-35.jpg)
При одновременном изменении одного и того же элемента данных разными пользователями итоговый результат должен быть непротиворечив, и поэтому часто может совпадать только с вводом одного из них. Как будет обработана такая ситуация и возможно ли ее возникновение вообще, зависит от дополнительных требований к системе, от принятых протоколов работы, от того, какие риски — потерять данные одного из пользователей или значительно усложнить работу пользователей с системой — будут сочтены более важными.
Слайд 37Защищенность данных и коммуникаций.
При работе с коммерческими системами, с системами, содержащими большие
![Защищенность данных и коммуникаций. При работе с коммерческими системами, с системами, содержащими](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-36.jpg)
объемы персональной и бизнес-информации, с системами обслуживания пользователей государственных ведомств очень важна защищенность, как информации, постоянно хранящейся в системе, так и информации одного сеанса работы.
Для распределенных систем обеспечить защищенность гораздо сложнее, поскольку нельзя физически изолировать все элементы системы и разрешить доступ к ней только людям.
Слайд 38Отказоустойчивость и способность к восстановлению после ошибок.
Одним из достоинств распределенных систем является
![Отказоустойчивость и способность к восстановлению после ошибок. Одним из достоинств распределенных систем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-37.jpg)
возможность построения более надежно работающей системы из не вполне надежных компонентов. Однако для того, чтобы это достоинство стало реальным, необходимо тщательное проектирование систем с тем, чтобы избежать зависимости работоспособности системы в целом от ее отдельных элементов.
Слайд 39Перед разработчиками систем, удовлетворяющих перечисленным свойствам, встает огромное количество проблем.
Решать их
![Перед разработчиками систем, удовлетворяющих перечисленным свойствам, встает огромное количество проблем. Решать их](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-38.jpg)
все сразу просто невозможно в силу ограниченности человеческих способностей. Чтобы хоть как-то структурировать эти проблемы, их разделяют по следующим аспектам:
Организация связи и передачи данных между элементами системы.
Поддержка идентификации и поиска отдельных ресурсов внутри системы.
Слайд 40Организация работ в рамках процессов и потоков.
Синхронизация параллельно выполняемых потоков работ.
Поддержка целостности
![Организация работ в рамках процессов и потоков. Синхронизация параллельно выполняемых потоков работ.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1044670/slide-39.jpg)
данных и непротиворечивости вносимых изменений.
Организация отказоустойчивой работы.
Организация защищенности данных и коммуникаций.