software engineering i - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... ·...

50
Software Engineering I Объектно-ориентированный анализ и проектирование Раздел 1. Введение (Advanced Introduction) Пышкин Е.В. Санкт-Петербургский политехнический университет

Upload: others

Post on 19-Jun-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software Engineering IОбъектно-ориентированный анализ и проектирование

Раздел 1. Введение

(Advanced Introduction)

Пышкин Е.В.

Санкт-Петербургский политехнический университет

Page 2: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

План курса

• Введение

▫ Дуализм ПО: инженерия и искусство

▫ Сложность, присущая программному

обеспечению

▫ Обеспечение качества в процессе разработки

▫ Модели жизненного цикла ПО

▫ Что такое ООАиП

▫ Объектная модель: основополагающие

концепции

Page 3: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

План курса

• Концептуальное основание ООП

▫ Инструмент для рассмотрения: UML

Развитие и использование UML

Структура UML

▫ Моделирование пользовательских аспектов:

варианты использования (прецеденты)

▫ Моделирование предметной области

Классы и отношения

Диаграммы классов UML

Другие диаграммы UML

Page 4: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

План курса

• Шаблоны проектирования (GoF и другие)

▫ Что такое «шаблон проектирования» (design

pattern). Оправданность применения

▫ Механизмы повторного использования

▫ Описание паттернов

Порождающие паттерны

Структурные паттерны

Паттерны поведения

Другие паттерны

Page 5: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

План курса

• Тестирование программного обеспечения

▫ Основные виды тестирования

▫ Особенности организации тестирования

объектно-ориентированных приложений

▫ Модульное тестирование

Основные концепции

Разработка, управляемая тестированием

Связь с процессом разработки

Инструменты тестирования

Page 6: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

План курса

• Специальные лекции▫ Современные тенденции развития языков

программирования. Объектно-ориентированная парадигма, особенности ее реализации в С++

▫ Введение в Scientific Writing

▫ Конференция «Разработка ПО 2015»: обзор

▫ Введение в программную инженерию

▫ Проектирование на базе интерфейсов: практический подход

▫ Основы тестирования и быстрой разработки программного обеспечения

Page 7: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Ресурсы и организация курса

• Программа на сайте курса

• Рекомендуемые источники

• Две траектории практикума

▫ Проект + статья (4-5)

▫ Статья (3-4)

Page 8: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Введение

• Дуализм природы программного обеспечения

• Сложность, присущая программному

обеспечению

Page 9: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Две основные фазы программирования

▫ Понять, что требуется

▫ Выразить в терминах имеющихся средств

проектирования

Page 10: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software: Part Art, Part Engineering

“A programmer is rather not a

mathematician but a

philosopher and a linguist all

in one: ability to program is

not simply a kind of creative

ability but the best one”

(Richie O’Bower, 1977)

“Software development is a

kind of human activity which

is mistakenly attributed to

engineering”

(Sergey Arkhipenkov, 2012)

Image from eDX “Computing: Art, Magic, Science”Learn the principles and techniques behind modern Information Technology

Page 11: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software Complexity

• Proving program correctness may be difficult, long or impossible

Logical complexity

• Details = Complexity• Complexity of interface

Structural complexity

• Associative human memory

Psychological complexity

Shneiderman

Page 12: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование
Page 13: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software Complexity

Why is SOFTWARE complex?

• Software projects are not material

▫ Team leader can’t touch the project result

▫ You can hardly see the progress

• How to choose the “right” design process

▫ Difficult to recognize possible bottlenecks

• Most big projects are unique

▫ Technologies change

▫ Difficult planning

▫ Experience appears in process

Why is software COMPLEX?

• Real subject domain complexity

▫ Users and developers

▫ Requirements that change

▫ Implicit limitations

• How to evaluate quality?

• Very creative process with a lot

of different types of activity

▫ Human factors

▫ Even if we use CASE tools

• Interface vs implementation

▫ Easy to use ≠ easy to

implement

13

Page 14: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software Complexity

▫ Efficiency▫ Reliability

▫ Portability

▫ Maintainability▫ Project time▫ Cost

A lot of mutually exclusive properties

• The cheapest, fastest, and most reliable components are those that aren’t there (Gordon Bell)

Cheap, fast, and reliable. Choose any two

Page 15: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Nice Quotes on Complexity

• The computing scientist’s main challenge is not to get confused by the complexities of his own making

(Edsger W. Dijkstra)

• Controlling complexity is the essence of computer programming

(Brian Kernighan)

• So much complexity in software comes from trying to make one thing do two things

(Ryan Singer)

Page 16: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Давайте посмотрим клип

▫ EDS Plane

Page 17: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Разработка программных систем: теория и практика▫ Элементы теории для отдельных направлений

проектирования появляются на основе использования удачных практических достижений и анализа результатов неудачных разработок Практика приходит первой и развивается вначале

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

Красивая теория может быть разрушена под напором ужасной действительности (Роберт Гласс)

Page 18: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Взаимодействие теории и практики

▫ Практика скорее предшествует теории:

Проектирование программного обеспечения

Сопровождение программного обеспечения

Разработка пользовательского интерфейса

Программирование больших систем

Метрики программного кода и процесса

проектирования

Page 19: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Иерархичность сложных систем▫ Простой пример:

персональный компьютер Рассматриваем

части и их взаимодействие

Уровни иерархии представляют различные уровни абстракции

Чаще всего, система содержит несколько иерархий

Page 20: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Иерархичность сложных систем

▫ Некоторые считают, что, скорее всего, мы

можем понять только те системы, которые

имеют иерархическую структуру

Мы создаем иерархии для лучшего понимания

структуры того, что мы проектируем

Мы создаем иерархии, чтобы другие лучше

понимали, что мы проектируем

▫ Основной путь к пониманию сложной системы–

обнаружение общих абстракций и механизмов

Способность к абстрагированию – одна из сторон

творческих способностей человека (Дмитрий

Лихачев)

Page 21: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Иерархическая декомпозиция сложных

систем

▫ Функционально-иерархическая

(алгоритмическая)

Проектирование «сверху вниз»

Сфокусирована на процессах

main

OpenFile ProcessTextCloseFile

ScanLex

GelLit

GetSynterm LexFirst LexNext LexFinish

LexemaLitera

File

Main

LEXER

main

OpenFile ProcessTextCloseFile

ScanLexGelLit

GetSynterm LexFirst LexNext LexFinish

LexemaLitera

File

Main

Page 22: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

• Иерархическая

декомпозиция

сложных систем

▫ Объектно-

ориентированная

Сфокусирована на

моделировании

данных

Опирается на

основные абстракции

предметной области

Page 23: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Основы инженерии программного

обеспечения: предисловие• Основные принципы инженерии ПО

(программной инженерии)

• Роль объектно-ориентированного дизайна и проектирования▫ ООП – доминирующий подход, но это не только

подход к проектированию

▫ Сначала – принципы, затем – методы, затем –мотивированный выбор

• Пример:▫ Сокрытие информации

▫ Реализация в ООП: инкапсуляция, наследование

Page 24: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Основы инженерии ПО

• История программной инженерии▫ От маленьких проектов к большим

▫ От систем для небольшого числа пользователей к требованиям масштабируемости

▫ От прикладных систем математического обеспечения к глобальным информационным системам

▫ От локальных систем к распределенным

▫ От исследования к инженерии

▫ От систем, проектируемых отдельными разработчиками, к управлению самим процессом проектирования

Page 25: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Разрывы в разработке ПО

• Кризис ПО [Парнас, Брукс, Ньюман]

▫ Методологический разрыв

Теория не дает ответов на запросы практики

▫ Семантический разрыв [Лекарев]

Изобразительные средства языков

программирования не полностью адекватны

сложности решаемых задач

▫ Ответственность программной инженерии

• Корректность, надежность и устойчивость

ПО. Обсуждение

Page 26: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Современные проблемы

проектирования ПО• Повторное использование кода

▫ Много такого кода

▫ Трудности сопровождения и модификации

• Гетерогенность программных систем▫ Распределенные системы

▫ Различные операционные системы и вычислительные архитектуры

• Временные ограничения▫ Потребности рынка и изменение требований

▫ Быстро, дешево, качественно – выберите два

Page 27: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ПО как продукт

инженерии

Управление разработкой

Организация команды

Улучшение языков и

технологий

Стандарты кодирования

Формальные методы(теория)

Page 28: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Основы инженерии ПО

Средства и технологии

Методологии

Методы и приемы

Принципы

Ин

жен

ери

я П

О

Page 29: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Основы инженерии ПО

• Фундаментальные принципы программной инженерии и связанные с ними методы и концепции▫ Строгость и формальность

▫ Декомпозиция задач

▫ Модульность

▫ Абстрагирование

▫ Ожидание изменений

▫ Общность

▫ Инкрементность

Page 30: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

•Спецификация•Управление требованиями

•Алгоритмы•Корректность•Верификация•Теория компиляции

Строгость и формальность

•Функциональная декомпозиция

•Последовательные вычисления

•Параллелизм•Управление проектом•Парадигмы

Декомпозиция задач

•Стратегии проектирования

•Раздельная компиляция•Иерархическое проектирование

•Пространства имен•Пакеты•Компоненты

Модульность

•Уровни абстрагирования•Управление сложностью•Языки программирования

Абстрагирование

•Управление требованиями

•Управление версиями•Отслеживание ошибок•Управление модификациями

Изменяемость

•Обобщенные решения и их специализации

•Шаблоны и настраиваемые типы

•Библиотеки компонентов•Сервис-ориентированнаяархитектура

Общность

•Прототипирование•24/7•Эволюционный дизайн•Итерационная разработка

•Унифицированный процесс

Инкрементность

Page 31: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Пример: проектирование

компилятора• Задача компиляции

• Модульная структура компилятора

▫ Лексический анализ

▫ Синтаксический и семантический анализ

▫ Кодогенерирующий компонент

• Как это пример иллюстрирует применение

принципов программной инженерии?

Page 32: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

•Корректность –критический фактор

•Теория компиляции, грамматики, языки, теория автоматов и др.

Строгость и формальность

•Собственные компоненты компилятора

•Интерфейс пользователя•Средства профилирования и отладки

Декомпозиция задач

•Лексический анализ•Синтаксический разбор•Генерация кода•Пользовательские сервисы, средства поддержки проектирования и др.

Модульность

•Абстрактный синтаксис•Абстрактные вычисления и виртуальные машины

•Языки программирования

Абстрагирование

•Изменение архитектур процессоров

•Изменение номенклатуры устройств ввода-вывода

•Изменение стандартов языка

Изменяемость

•Промежуточный код для межплатформенной совместимости

Общность

•Версии•Оптимизация•Изменения библиотек

Инкрементность

Page 33: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование
Page 34: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование
Page 35: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Сложность моделирования

• Моделирование как сужение проблемы

• Фазы моделирования▫ Модель

предметной области

▫ Модель прецедентов

▫ Модель проектирования

Page 36: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Объектно-ориентированный

подход к разработке ПО

• Анализ▫ Создание ОО

модели предметной области

• Проектирование▫ Разработка ОО

модели системы ПО (системной архитектуры) с учетом системных требований

• Программирование▫ Реализация на

языке (языках) программирования

Page 37: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и UML

• Unified Modeling

Language▫ Визуальный язык для

определения,

конструирования и

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

артефактов систем

▫ ООАиП и UML

Нотация

Методология

Средства

Page 38: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и шаблоны

проектирования

• Шаблон проектирования (pattern)▫ Типичное решение

проблемы в определенном контексте

• Описание паттерна▫ Имя▫ Проблема▫ Решение▫ Результаты

Page 39: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и модели разработки

программного обеспечения

• Каскадная модель (Waterfall lifecycle)▫ Определение требований

▫ Проектирование

▫ Реализация (кодирование)

▫ Интеграция

▫ Тестирование и отладка

▫ Инсталляция

▫ Поддержка

• Недостатки▫ Предположение о

стабильности спецификаций-идеализация

▫ Изменение требований очень дорого стоит

Page 40: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование
Page 41: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

OOA&D and Design Process

Models

• Эволюционный дизайн▫ Спецификация,

проектирование и тестирование – в пределах одной итерации

▫ Риски Плохая

документация Плохая структура Множественность

технологий => несовместимость версий

Specification

Draft requirements

Development

Testing and Evaluation

Prototype

Versions

Release

Page 42: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и модели разработки

программного обеспечения

• Спиральная модель▫ Эволюционная

разработка

▫ Итерация Определение целей

Оценка и разрешение рисков

Разработка и тестирование

Планирование

▫ Совместима с другими моделями

Page 43: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Closer view... What is strange?

Page 44: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

(*) «Версия испр. и дополн.»

Page 45: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

OOA&D and Design Process Models

• V-Model

▫ Сфокусирована на управлении процессом

проектирования

▫ Сфокусирована на управлении требованиями и

спецификациями

▫ Улучшенная каскадная модель

Page 46: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование
Page 47: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и модели разработки

программного обеспечения

• Итеративная разработка▫ Основные черты

Раннее проектирование и тестирование частей системы в многократно повторяемых циклах

Прояснение требований в ходе разработки- обычное явление

Итеративная разработка допускает изменения

▫ Используйте итеративную разработку только в тех проектах, которые должны быть успешно завершены (Мартин Фаулер)

Page 48: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

ООАиП и модели разработки

программного обеспечения

• Unified Process (UP)▫ Унифицированный

процесс – один из самых популярных итеративных методов разработки

▫ RUP

• Важные принципы▫ Оценка рисков на ранних

итерациях▫ Управление

требованиями▫ Применение

прецедентов▫ Раннее и частое

тестирование▫ UML

Page 49: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Другие модели проектирования ПО

RU EN

• Каскадная модель

• Спиральная модель

• Итеративная разработка

▫ Rational Unified Process

• Гибкая методология

▫ SCRUM

▫ Экстремальное

программирование

• Быстрая разработка

• Microsoft Solutions Framework

• Waterfall

• Spiral Model

• Iterative Development

▫ RUP

• Agile Development

▫ SCRUM = Agile + Discipline

▫ XP = Agile + Test first

• RAD

• MSF

Page 50: Software Engineering I - spbstu.rukspt.icc.spbstu.ru/media/files/people/pyshkin/... · Объектно-ориентированный анализ и проектирование

Software Engineering IОбъектно-ориентированный анализ и проектирование

Раздел 1. Введение

Q & A