Введение в инженерию программного обеспечения
Содержание
И так, начнем!
Развитие методов обеспечения качества программ
Определение программной инженерии
Цель инженерии ПО
Жизненный цикл программного обеспечения
ЖЦПО: Этап определения требований
ЖЦПО: Проектирование
ЖЦПО: Конструирование (Кодирование)
ЖЦПО: Тестирование
ЖЦПО: Эксплуатация и поддержка
Модели ЖЦ ПО
Каскадная (водопадная, waterflow) модель
Итеративная и инкрементальная модель
Итеративная и инкрементальная модель
Итеративная и инкрементальная модель
Спиральная модель
Методологии разработки ПО
Rational Unified Process (RUP)
Rational Unified Process (RUP)
Microsoft Solutions Framework (MSF)
Test-driven development (TDD)
Agile
XP
Feature driven development (FDD)
Scrum
Lean Software Development
Итоги
Рекомендуемая литература
Вопросы
Спасибо за внимание!

Инженерия программного обеспечения. Введение (модуль 1)

1. Введение в инженерию программного обеспечения

Модуль 1: Обзор

2. Содержание

• Определение программной инженерии, ее место в
инженерной деятельности при создании компьютерных
систем.
• Жизненный цикл программных средств.
• Модели ЖЦПО.
• Методологии разработки ПО.
2

3. И так, начнем!

Как Вы пишете свои
программы?
И что из этого получается?
Как быстро программа начинает
работать «правильно»?
3

4. Развитие методов обеспечения качества программ

Тестирование
как этап ЖЦ
ПО
Инженерия ПО:
системный
подход
Доказательство
правильности
программ
4

5. Определение программной инженерии

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

6. Цель инженерии ПО

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

7. Жизненный цикл программного обеспечения

Жизненный цикл ПО (ЖЦПО) - весь период его разработки и
эксплуатации (использования), начиная от момента возникновения
замысла ПО и кончая прекращением всех видов его использования.
Методы контроля
требований и технической
документации
Планирование
разработки
Методы верификации
программ
Определение
Проектирование Конструирование Тестирование Эксплуатация
требований
программы
программы
программы
программы
к программе
Методы контроля и анализа кода
программы и его сложности
7

8. ЖЦПО: Этап определения требований

Под требованиями к программе понимают свойства, которыми
должна обладать эта программа для адекватного выполнения
предписанных ей функций.
Выход этапа:
набор требований.
8

9. ЖЦПО: Проектирование

Процесс определения архитектуры, компонентов, интерфейсов и
других характеристик системы или ее компонентов называется
проектированием.
Проектирование
Архитектурный
(высокоуровневый)
дизайн
Детализированный
дизайн
Выход этапа:
набор спецификаций.9

10. ЖЦПО: Конструирование (Кодирование)

На этапе конструирования (кодирования) ПО создается рабочий
программный продукт посредством комбинации кодирования,
верификации (проверки), отладки, модульного и интеграционного
тестирования.
Выход этапа:
программный код.
10

11. ЖЦПО: Тестирование

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

12. ЖЦПО: Эксплуатация и поддержка

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

13. Модели ЖЦ ПО

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

14. Каскадная (водопадная, waterflow) модель

Последовательное и однократное выполнение однажды и целиком
определенных требований.
Планирование
План
Формирование
Спецификация
требований
Анализ и
проектирование
Дизайн
Конструирование
+
Проста и понятна заказчикам
-
Код
Интеграция и
тестирование
Позволяет достаточно точно Высокая стоимость внесения
планировать сроки и затраты изменений
Проста и удобна в
применении
Позднее обнаружение
проблем
Каждую стадию могут
выполнять независимые
команды
Запаздывание с получением
результата
Продукт
Поддержка и
эксплуатация
14

15. Итеративная и инкрементальная модель

Итеративная модель
предполагает разбиение
жизненного цикла проекта на
последовательность итераций,
каждая из которых напоминает
“мини-проект”, включая все
фазы жизненного цикла в
применении к созданию
меньших фрагментов
функциональности, по
сравнению с проектом, в целом.
+
-
Можно очень рано начать
тестирование
пользователями
целостное понимание возможностей и ограничений
проекта очень долгое время отсутствует
Поэтапное уточнение
требований
при итерациях приходится отбрасывать часть
сделанной ранее работы
Более точное планирование
ресурсов
добросовестность специалистов при выполнении
15
работ снижается

16. Итеративная и инкрементальная модель

16

17. Итеративная и инкрементальная модель

17

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

Спиральная модель – это
разновидность итерационной
модели, в которой специальное
внимание уделяется анализам
рисков, влияющих на
организацию ЖЦ, и
контрольным точкам.
+
-
Более тщательное проектирование
Сложность анализа и оценки рисков
Поэтапное уточнение требований
Сложность поддержания версий продукта
Участие заказчика в выполнении
проекта
Сложность оценки точки перехода на
следующий цикл
Возможность разработки сложного
проекта «по частям»
Бесконечность модели
18

19. Методологии разработки ПО

Методология задает комплекс работ, их детальное содержание,
ролевую ответственность специалистов, а также рекомендует
практики.
Методологии
разработки ПО
Rational Unified
Process (RUP)
Microsoft Solutions
Framework (MSF)
Test-driven
development (TDD)
Гибкие методологии
разработки ПО (Agile)
XP
Feature driven
development (FDD)
Scrum
Lean
19

20. Rational Unified Process (RUP)

В основе RUP лежат следующие принципы:
• Ранняя идентификация и непрерывное (до окончания проекта)
устранение основных рисков.
• Концентрация на выполнении требований заказчиков к
исполняемой программе (анализ и построение модели прецедентов
(вариантов использования)).
• Ожидание изменений в требованиях, проектных решениях и
реализации в процессе разработки.
• Компонентная архитектура, реализуемая и тестируемая на ранних
стадиях проекта.
• Постоянное обеспечение качества на всех этапах разработки
проекта (продукта).
• Работа над проектом в сплочённой команде, ключевая роль в
которой принадлежит архитекторам
20

21. Rational Unified Process (RUP)

21

22. Microsoft Solutions Framework (MSF)

MSF опирается на практический опыт Microsoft и описывает
управление людьми и рабочими процессами в процессе
разработки решения. MSF представляет собой согласованный набор
концепций, моделей и правил.
Основные принципы MSF:
Распределение ответственности при фиксации отчетности
Наделение членов команды полномочиями
Концентрация на бизнес-приоритетах
Единое видение проекта
Гибкость — готовность к переменам
Поощрение свободного общения
22

23. Test-driven development (TDD)

Разработка через тестирование — техника разработки
программного обеспечения, которая основывается на повторении
очень коротких циклов разработки: сначала пишется тест,
покрывающий желаемое изменение, затем пишется код, который
позволит пройти тест, и под конец проводится рефакторинг нового
кода к соответствующим стандартам.
Преимущества:
Более быстрая разработка в целом
Недостатки:
Не для всех задач применима
Сложность ментального привыкания
Высокие накладные расходы
23

24. Agile

Гибкая методология разработки — серия подходов к разработке
программного обеспечения, ориентированных на использование
итеративной разработки и динамического формирования
требований, и обеспечение их реализации в результате постоянного
взаимодействия внутри самоорганизующихся рабочих групп,
состоящих из специалистов различного профиля.
Agile-методы делают упор на непосредственное общение лицом к
лицу.
Основной метрикой agile-методов является рабочий продукт.
Отдавая предпочтение непосредственному общению, agile-методы
уменьшают объём письменной документации, по сравнению с другими
методами. Это привело к критике этих методов, как
недисциплинированных.
24

25. XP

Экстремальное программирование:
Короткий цикл обратной связи (Fine scale feedback)
Разработка через тестирование (Test driven development)
Игра в планирование (Planning game)
Заказчик всегда рядом (Whole team, Onsite customer)
Парное программирование (Pair programming)
Непрерывный, а не пакетный процесс
Непрерывная интеграция (Continuous Integration)
Рефакторинг (Design Improvement, Refactor)
Частые небольшие релизы (Small Releases)
Понимание, разделяемое всеми
Простота (Simple design)
Метафора системы (System metaphor)
Коллективное владение кодом (Collective code ownership) или выбранными
шаблонами проектирования (Collective patterns ownership)
Стандарт кодирования (Coding standard or Coding conventions)
Социальная защищенность программиста
40-часовая рабочая неделя (Sustainable pace, Forty hour week)
25

26. Feature driven development (FDD)

Feature Driven Development — функционально-ориентированная
разработка.
FDD включает пять процессов, последние два из которых
повторяются для каждой функции:
• Элемент нумерованного списка
• Разработка общей модели
• Составление списка необходимых функций системы
• Планирование работы над каждой функцией
• Проектирование функции
• Конструирование функции
26

27. Scrum

Scrum — методология управления разработкой информационных
систем для гибкой разработки программного обеспечения.
Scrum чётко делает акцент на качественном контроле процесса
разработки.
Кроме управления проектами по разработке ПО Scrum может также
использоваться в работе команд обслуживания программного
обеспечения (software maintenance teams), или как подход
управления разработкой и сопровождением программ: Scrum of
Scrums
27

28. Lean Software Development

Бережливая разработка программного обеспечения —
методология разработки программного обеспечения, использующая
методы концепции бережливого производства.
Принципы
• Исключение затрат (излишняя функциональность; ожидание в процессе
разработки; нечёткие требования; бюрократизация; медленное внутреннее
сообщение).
• Акцент на обучении. Короткие циклы разработки, раннее тестирование,
частая обратная связь с заказчиком.
• Предельно отсроченное принятие решений. Предельно быстрая доставка
заказчику. Короткие итерации.
• Мотивация команды. Нельзя рассматривать людей исключительно как
ресурс. Людям нужно нечто большее, чем просто список заданий.
• Интегрирование. Передать целостную информацию заказчику. Стремиться
к целостной архитектуре. Рефакторинг.
• Целостное видение. Стандартизация, установление отношений между
разработчиками. Разделение разработчиками принципов бережливости.
«Мыслить широко, действовать мало, промахиваться быстро; учиться
28
стремительно».

29. Итоги

Формирование
требований
Проектирование
реализации
требований
Кодирование
требований
Требование 1
проектирование
реализации
требования 1
Кодирование
требования 1
Тестирование
требования 1
Требование 2
проектирование
реализации
требования 2
Кодирование
требования 2
Тестирование
требования 2
Требование N
проектирование
реализации
требования N
Кодирование
требования N
Тестирование
требования N
Тестирование
требований
29

30. Рекомендуемая литература

• «Инженерия программного обеспечения», Соммервилл И.
• Основы Программной Инженерии (по SWEBOK)
http://swebok.sorlik.ru/
30

31. Вопросы

31

32. Спасибо за внимание!

Спасибо за внимание!
32
English     Русский Правила