Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ТП.doc
Скачиваний:
12
Добавлен:
13.08.2019
Размер:
183.81 Кб
Скачать

Введение.

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

В результате изучения дисциплины слушатель должен:

  • Знать принципы и содержание процесса разработки сложных программных систем коллективами разработчиков;

  • Освоить и научиться выбирать современные технологии и методы проектирования программных компонентов и комплексов с использованием различных алгоритмических языков;

  • Научиться разрабатывать распределенные системы и применять средства интеграции приложений, используя возможности современных операционных систем;

  • Научиться пользоваться современными инструментальными средствами, поддерживающими разработку программного обеспечения;

  • Научиться использовать средства моделирования при проектировании программного обеспечения;

  • Получить представление о качестве и надежности, отладке и тестировании программного обеспечения;

  • Научиться проектировать экранные интерфейсы с пользователем;

  • Знать правила составления технического задания и оформления документации разрабатываемого программного продукта.

Проблемы разработки сложных программных систем.

Свойства простой программы:

  1. Она решает одну чётко поставленную задачу не очень существенную для какой-либо практической деятельности;

  2. Неважно насколько быстро она работает;

  3. Ущерб от неправильной работы программы почти нулевой;

  4. Программу не требуется дополнять новыми возможностями;

  5. Не требуются новые версии или исправление ошибок;

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

Свойства сложной программы:

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

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

  3. Низкая производительность на реальных данных приводит к значительным потерям для пользователей;

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

  5. Для выполнения своих задач она должна взаимодействовать с другими программами и аппаратными средствами, работая на различных системах;

  6. Пользователь, работающий с ней, приобретает дополнительную выгоду от того, что программа развивается. Необходимость наличия правильной документации позволяет развивать её вовсе не тем разработчикам, которые её создавали, без больших затрат;

  7. В разработку программы вовлечено значительное количество людей. Большую программу практически невозможно написать с первой попытки и с небольшими усилиями;

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

Аспекты разработки сложных программных систем:

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

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

Принципы работы со сложными системами:

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

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

Хорошее разделение системы на модули – не простая задача, при её выполнении привлекаются следующие выполнимые принципы:

  1. Выделение интерфейсов и сокрытие информации. Модули должны взаимодействовать друг с другом через чётко определённые интерфейсы и скрывать друг от друга внутреннюю информацию. При этом интерфейс модуля обычно значительно меньше, чем набор всех операций и данных в нём;

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

  3. Разделение ответственности – создание отдельных модулей под каждую задачу, решение системы или необходимых для решения основной задачи. Принцип разделения ответственности имеет несколько важных принципов: 1. Принцип разделения политик и алгоритмов. 2. Разделение интерфейса и реализации. Этот принцип используется при отделении внешней видимой структуры модуля и задач, которые он решает от способов решения задач.

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

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