• A
  • A
  • A
  • ABC
  • ABC
  • ABC
  • А
  • А
  • А
  • А
  • А
Regular version of the site

Software Systems Architecture Design

2019/2020
Academic Year
RUS
Instruction in Russian
3
ECTS credits
Course type:
Compulsory course
When:
3 year, 4 module

Instructor


Sharov, Gelii

Программа дисциплины

Аннотация

Дисциплина “Проектирование архитектуры программных систем” является одной из ключевых дисциплин из цикла курсов подготовки современного специалиста в области информационных технологий, т.к. дает полную картину всего цикла промышленной разработки программного обеспечения с использованием современных методологий, технологий и инструментария разработки. В рамках данного курса рассматриваются все этапы разработки и закладываются основы теоретического и практического подходов к самому процессу разработки, как к четкой последовательности фаз, приводящей к гарантированному результату в заданных временных рамках и с заданным качеством. Курс изучается с использования онлайн курса "Проектирование архитектуры программных систем" (https://www.coursera.org/learn/oop-patterns-python), университет-разработчик МФТИ
Цель освоения дисциплины

Цель освоения дисциплины

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

Планируемые результаты обучения

  • Знает предметную область курса «Программная инженерия»
  • Знает факторы и критерии качества программного обеспечения
  • Знает жизненный цикл программного продукта
  • Знает понятия каскадная модель: классическая; с повторениями; прототипирования; Итерационная (инкрементная) модель
  • Знает требования системные/разработчика (Dтребования)
  • Знает способы выражения результатов проектирования
  • Знает классические принципы проектирования
  • Знает методы проектирования: Абстракция, Инкапсуляция, Декомпозиция (модульность), Иерархическая организация, Типизация, Повторное использование
  • Знать основные факты, концепции, принципы и теории, связанные с промышленным процессом разработки ПО
  • Уметь подбирать наиболее подходящие методы и техники и применять их при разработке программ, с учетом различных аспектов поставленной задачи, таких как ограничение по времени, человеческим ресурсам, качеству
  • Владеть методами и инструментальными средствами разработки программ
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Введение в программную инженерию
    Предметная область курса «Программная инженерия», роль и место дисциплины в рамках процесса обучения, основные цели и задачи курса, требования к знаниям, промежуточные и итоговые испытания, литература рекомендуемая к самостоятельному изучению студентами курса. Роль и значение правильного выбора методологии разработки. Примеры.
  • Понятие качества ПО. Критерии качества
    Понятие качества программного продукта. Факторы и критерии качества программного обеспечения. Корректность. Устойчивость. Расширяемость. Повторное использование. Эффективность. Переносимость. Простота использования. Функциональность. Своевременность.
  • Жизненный цикл программного продукта и его этапы
    Жизненный цикл программного продукта. Этапы жизненного цикла ПО: Анализ осуществимости, Анализ требований, Проектирование, Кодирование, Тестирование, Интеграция, Установка, Сопровождение.
  • Модели жизненного цикла и их применимость
    Модели жизненного цикла: «пишем-исправляем»; Каскадная модель: классическая; с повторениями; прототипирования; Итерационная (инкрементная) модель; Унифицированный процесс разработки; Экстремальный процесс разработки; Test Driven Development (TDD).
  • Требования заказчика/разработчика. Классификация требований.
    Бизнес-требования. Требования заказчика/пользователей (С-требования). Бизнесправила. Требования системные/разработчика (D-требования). Классификация: Функциональные; Нефункциональные; Обратные требования. Характеристики продукта.
  • Введение в Проектирование ПО. Архитектура. Дизайн.
    Проектирование ПО. Стадии проектирования. Архитектура. Модели. Дизайн. Детальное проектирование. Способы выражения результатов проектирования. Паттерны проектирования: Template Method, Strategy, Adapter, Factory Method, Bridge, Abstract Factory, Visitor, Singleton.
  • Методы проектирования
    Методы проектирования: Абстракция, Инкапсуляция, Декомпозиция (модульность), Иерархическая организация, Типизация, Повторное использование. Проектирование по контракту. Основные принципы проектирования. Проектирование с учетом будущих изменений. Типичные причины перепроектирования. Проектирование в соответствии с интерфейсом, а не с реализацией. Признаки «загнивания» проекта: Закрепощенность, Неустойчивость, Неподвижность, Вязкость, Неоправданная сложность, Неоправданные повторения, Неопределенность. Чем вызвано «загнивание» программ.
  • Отношения между классами
    Отношения между классами: Ассоциация (осведомленность), кратность ассоциации; Агрегация по ссылке, агрегация физическая (композиция), делегирование; Наследование; Использование; Шаблонные классы (C++); Метаклассы (Java, C#, RTTI в C++); Динамическая генерация кода (C#). Как наследование заменить композицией и делегированием.
  • Полиморфизм. Множественное наследование. Мультиметоды.
    Полиморфизм. Статический и динамический полиморфизм. Множественное наследование. Множественный полиморфизм (мультиметоды). Виртуальное множественное наследование.
  • Объектно-ориентированное проектирование. Ортогональность
    Введение в объектно-ориентированное проектирование. Ортогональность и приемы обеспечения ортогональности. Преимущества. Классические принципы проектирования. Принципы быстрого проектирования. Их отличие и применимость. Стратегии проектирования: YAGNI - “You Aren’t Going to Need It”; KISS - “Keep It Short and Simple”; Проектирование при помощи переработки (TDD); Подход «Чем хуже, тем лучше»; Подход MIT.
  • Операции приведения типа. Инстанцирование (шаблона).
    Операции приведения типа для перемещения по иерархии классов. Инстанцирование (шаблона). Применение шаблонных технологий. Их плюсы и минусы.
  • Объекты. Отношения между объектами
    Объекты. Состояние, поведение, идентичность. Отношения между объектами: Связи, Агрегация.
  • Классы. Интерфейс. Тип объекта
    Классы. Интерфейс. Тип объекта. Сильная и слабая типизация. Отношения между классами и объектами. Качество классов и объектов: зацепление (связанность), связность, достаточность, полнота, примитивность. Как выбирать операции класса. Как выбирать отношения. Наследование, композиция, шаблоны. Как выбирать реализацию.
  • Объектно-ориентированный анализ
    Идентификация классов и объектов. Объектно-ориентированный анализ. Принципы проектирования: Принцип персональной ответственности (Self-Responsibility Principle - SRP); «Спаривание» ответственностей. Закон Деметера (принцип «генерального подрядчика»). Принцип открытия-закрытия (Open-Close Principle - OCP); Принцип подстановки Лискоу (Liskow Substitution Principle - LSP). Принцип инверсии зависимостей (Dependences Inversion Principle - DIP); Статический и динамический полиморфизм, достоинства. Принцип отделения интерфейса (Interface Separation Principle - ISP). Соединение интерфейсов путем делегирования, путем множественного наследования.
  • Основные приемы защиты от ошибок
    Инструментальные средства. Основные приемы защиты от ошибок: Хороший дизайн системы; Использование компилятора и средств языка. Основные приемы защиты от ошибок: Использование специальных библиотек и способов написания кода; Статический поиск ошибок. Основные и дополнительные инструменты.
  • Системы отслеживания запросов (Bug-tracking System)
    Системы отслеживания запросов на изменение программы (Bug-tracking System). Назначение и цели. Знакомство с одной из Bug-tracking System – Bugzilla. Интерфейс. Функционал. Методология использования. Настройка под свой проект.
  • Менеджмент качества
    Цели использования метрических показателей (менеджерами, разработчиками). Характеристики полезных метрических показателей. Общие вопросы менеджмента качества. Удовлетворенность потребителей. Постоянное улучшение качества: цикл Plan-Do-Check-Act. Анализ проблем. Корректирующие и предупреждающие действия.
  • Системы контроля версий (Version Control System)
    Управление конфигурациями. Версии ПО и артефактов. Составные части систем управления конфигурациями. Системы контроля версий (Version Control System). Назначение и цели. Системы: CVS, Subversion (SVN), GIT, Bazaar, Rational ClearCase, Microsoft Team Foundation Server, Perforce, Microsoft Visual SourceSafe.
  • Метрики процесса разработки ПО
    Метрики процесса разработки ПО. Классы измеряемых программных объектов: по способу получения, объективные и субъективные, по измеряемому объекту, по способу связи с внешней средой. Примеры. Основные метрические показатели: трудозатраты, изменения, дефекты. Аспекты измерений, отражающие качество ПО.
  • Моделирование с использованием UML.
    Моделирование с использованием UML. Архитектура программного проекта. Вид с точки зрения прецедентов (Use case view), проектирования (Design view), процессов (Process view), реализации (Implementation view), развертывания (Deployment view). Концептуальная модель UML. Структурные сущности: Класс, Интерфейс, Кооперация, Прецедент, Активный классы, Компонент, Узел. Поведенческие сущности: Взаимодействие, Автомат (State machine). Группирующие сущности: Пакеты. Аннотационные сущности: Примечание. Отношения в UML: Зависимость (Dependency), Ассоциация (Association) и Кратность, Агрегирование (Aggregation) и Композиция, Обобщение (Generalization) и Наследование, Реализация (Realization). Диаграммы в UML: диаграммы классов, диаграммы объектов. Диаграммы в UML: диаграммы прецедентов, диаграммы последовательностей (временные диаграммы), диаграммы состояний. Диаграммы в UML: диаграммы действий (диаграммы деятельности), диаграммы компонентов, диаграммы развертывания.
  • Мировые стандарты качества
    Стандарты качества: CMMI 1/2/3/4/5, ISO 9001:2000, TL 9000. Их области применения. Особенности. Процесс сертификации. Внешние и внутренние аудиты.
  • Регулярное тестирование. Автоматизация тестирования
    Методологии тестирования. Регулярное тестирование. White-box testing. Black-box testing. Интеграционное тестирование. Нагрузочное тестирование. Unit testing. Автоматизация тестирования. Системы автоматизации тестирования. Сравнение автоматического и мануального тестирования. Уровни автоматизации. Техники автоматического тестирования.
Элементы контроля

Элементы контроля

  • неблокирующий лабораторная работа
  • неблокирующий контрольная работа
  • неблокирующий экзамен
    "Экзамен проводится в устной форме (опрос по материалам курса). Экзамен проводится на платформе MS Teams (https://teams.microsoft.com). К экзамену необходимо подключиться согласно расписанию ответов, высланному преподавателем на корпоративные почты студентов накануне экзамена. Компьютер студента должен удовлетворять требованиям: наличие рабочей камеры и микрофона, поддержка MS Teams. Для участия в экзамене студент обязан: поставить на аватар свою фотографию, явиться на экзамен согласно точному расписанию, при ответе включить камеру и микрофон. Во время экзамена студентам запрещено: выключать камеру, пользоваться конспектами и подсказками. Кратковременным нарушением связи во время экзамена считается нарушение связи до 5 минут. Долговременным нарушением связи во время экзамена считается нарушение 5 минут и более. При долговременном нарушении связи студент не может продолжить участие в экзамене. Процедура пересдачи аналогична процедуре сдачи."
Промежуточная аттестация

Промежуточная аттестация

  • Промежуточная аттестация (4 модуль)
    0.5 * контрольная работа + 0.5 * лабораторная работа
Список литературы

Список литературы

Рекомендуемая основная литература

  • Котляров В.П. - Основы тестирования программного обеспечения - Национальный Открытый Университет "ИНТУИТ" - 2016 - 248с. - ISBN: 5-9556-0027-2 - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/100352

Рекомендуемая дополнительная литература

  • Black, R. (2011). Pragmatic Software Testing : Becoming an Effective and Efficient Test Professional. Chichester: Wiley. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=364274