Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Д.В. Кознов
Введение в программную инженерию
Учебное пособие
5-е издание (электронное),
Интернет-Университет
Информационных Технологий
www.intuit.ru
Ай Пи Ар Медиа
Москва
2025
Д.В. Кознов
Введение в программную инженерию
2
УДК 004 ББК 32.97
Кознов, Д.В.
Введение в программную инженерию : учебное пособие / Д.В. Кознов. — 5-е изд. (эл.), переработанное и дополненное — Москва : Национальный Открытый Университет «ИНТУИТ»: Ай Пи Ар Медиа, 2025. — 149 с. — Текст : электронный.
ISBN 978-5-4497-2385-7
Цель данного учебного пособия — представить программную инженерию в виде целостного изложения, концентрируясь на концепции процесса, различных методологиях разработки ПО (CMMI, MSF, Scrum), отдельных видах деятельности процесса — разработке архитектуры, конфигурационном управлении, работе с требованиями, тестировании. В стороне умышленно оставлены вопросы, собственно, программирования, поскольку в рамках общего курса их невозможно эффективно рассмотреть. В качестве программных средств, поддерживающих целостный процесс разработки ПО, рассматривается технология компании Microsoft — Visual Studio Team System (VSTS) с акцентом на Team Foundation Server (TFS).
Показывается, как изложенный выше теоретический материал можно реализовать на практике, с поддержкой программных средств разработки. Представлено также описание практикума по MS VSTS, организованного на принципах Scrum.З
Задача практикумов и семинаров, прилагаемых к данному учебному пособию, — «прокрутить» лекционный материал через «сито» обсуждений, докладов и упражнений, основанных на картах памяти для лучшего усвоения. Серия таких экспериментов уже была проведена ранее и на их основе была создана методика по активизации collaborative learning процессов и повышении активности студентов в изучении лекционного материала.
Учебное пособие предназначено для студентов, обучающихся по направлениям подготовки, связанным с информатикой и информационными технологиями, а также для всех, кто интересуется программированием.
Учебное электронное издание
Технический редактор Е.А. Семенова
Обложка С.С. Сизиумова, Я.А. Кирсанов
Подписано к использованию 05.10.2025.
© ООО «ИНТУИТ.РУ», 2009–2025 © ГКознов Д.В., 2009–2025 © Оформление электронного издания.
ООО Компания «Ай Пи Ар Медиа», 2025
Д.В. Кознов
Введение в программную инженерию
3
Оглавление
Лекция 1. О предмете изучения ......................................................... 5
Программная инженерия .................................................................... 5
Программное обеспечение .................................................................. 9
Лекция 2. Процесс разработки программного обеспечения .......... 13
Процесс ............................................................................................... 13
Совершенствование процесса ......................................................... 16
Pull/Push стратегии внедрения инноваций ...................................... 18
Модель процесса ................................................................................ 20
Водопадная модель ............................................................................ 23
Спиральная модель ............................................................................ 26
Итеративно-инкрементальная модель ............................................. 28
Литература .......................................................................................... 34
Лекция 3. Рабочий продукт, дисциплина обязательств, проект ... 36
Рабочий продукт ................................................................................ 36
Дисциплина обязательств ................................................................. 39
Проект ................................................................................................. 41
Литература .......................................................................................... 44
Лекция 4. Архитектура ПО ............................................................... 46
Определение архитектуры ................................................................. 46
Множественность точек зрения ........................................................ 48
Язык UML ........................................................................................... 52
Литература .......................................................................................... 59
Лекция 5. Управление требованиями .............................................. 60
Проблема ............................................................................................ 60
Виды и свойства требований ............................................................ 62
Варианты формализации требований .............................................. 64
Цикл работы с требованиями ........................................................... 67
Литература .......................................................................................... 67
Лекция 6. Конфигурационное управление ...................................... 68
Проблема ............................................................................................ 68
Единицы конфигурационного управления ..................................... 70
Управление версиями ........................................................................ 72
Управление сборками ........................................................................ 73
Понятие baseline ................................................................................. 75
Литература .......................................................................................... 77
Лекция 7. Управление качеством и тестирование .......................... 78
Управление качеством ...................................................................... 78
Тестирование ...................................................................................... 83
Работа с ошибками ............................................................................ 89
Д.В. Кознов
Введение в программную инженерию
4
Литература .......................................................................................... 92
Лекция 8. Диаграммные техники в работе со знаниями ................ 93
Метод случаи использования ........................................................... 93
Итеративный цикл автор/рецензент................................................. 99
И-карты ............................................................................................. 104
Литература ........................................................................................ 108
Лекция 9. Методология MSF .......................................................... 110
История ............................................................................................. 110
Основные принципы MSF .............................................................. 111
Модель команды .............................................................................. 113
Прочие особенности MSF ............................................................... 117
Литература ........................................................................................ 120
Лекция 10. CMMI ............................................................................. 121
Что такое CMMI? ............................................................................. 121
Уровни зрелости процессов по CMMI ............................................ 122
Области усовершенствования процесса ......................................... 123
Литература ........................................................................................ 124
Лекция 11. «Гибкие» (agile) методы разработки .......................... 126
Общее ................................................................................................ 126
Extreme Programming ....................................................................... 126
Scrum ................................................................................................. 128
Литература ........................................................................................ 132
Лекция 12. Обзор технологии Microsoft Visual Studio Team System
(MS VSTS) .................................................................................................... 133
Обзор ................................................................................................. 133
Состав продукта ............................................................................... 135
Определение, свойства, жизненный цикл элемента работы ......... 141
Поддержка шаблонов процесса ....................................................... 146
Д.В. Кознов
Введение в программную инженерию
5
Лекция 1. О предмете изучения
Понятие программной инженерии. Определения информатики, системотехники и бизнес-реинжиниринга. Программное обеспечение: определение, свойства, отличия от программы.
Программная инженерия
Зададимся следующим вопросом: чем программирование отличается от
программой инженерии? Кажется, что результатом и того и другого
является некоторая программа для ЭВМ.
Однако программирование порождает только программы, а также
может происходить во многих различных контекстах: можно
программировать для удовольствия, а также для того, чтобы научиться
(например, на уроках, на семинарах в университете, а можно программировать в рамках научных проектов.
Постараемся определить кратко, но точно, то такое промышленное программирование (забегая вперёд отметим, что его то мы и будем называть программной инженерией).
Определение. Промышленное программирование является видом
человеческой деятельности, нацеленным на разработку программного обеспечения, осуществляемую в интересах определённого заказчика, удовлетворяя его требованиям, предоставляя результаты в рамках оговоренных сроков, определенного качества, за деньги, коллективно (в
команде).
Особо отметим, что команде (и вам заодно, если вы её член)
необходимо предельно точно понимать, что нужно заказчику,
выполнить работу в определенные сроки (а не когда вы соберетесь, захотите и т.д.), а результат должен быть нужного качества — того, которое удовлетворит заказчика и за которое он заплатит (а не тот, который вам кажется хорошим, правильным).
Чтобы удовлетворить всем этим требованиям, процесс программирование «обрастает» различными дополнительными видами деятельности: разработкой требований, проектированием, планированием, тестированием, конфигурационным управлением,
Д.В. Кознов
Введение в программную инженерию
6
проектным менеджментом, созданием различной документации (проектной, пользовательской и пр.). Соответственно, кроме программы, в качестве результата выдаётся документация, тесты,
обучение пользователей и т.д.
Требуются также специальные усилия по организации процесса разработки. В общем виде это итеративно-инкрементальная модель,
когда требуемая функциональность создается порциями, которые менеджеры и заказчик могут оценить, и тем самым есть возможность
управления ходом разработки. Однако эта общая модель имеет множество модификаций и вариантов.
Разработку системы также необходимо выполнять с учетом удобств её
дальнейшего сопровождения, повторного использования и интеграции с другими системами. Это значит, что система разбивается на компоненты, имеющие необходимые характеристики по
быстродействию, для этих компонент тщательно прорабатываются
интерфейсы. Сама же система документируется на многих уровнях,
создаются правила оформления программного кода — то есть оставляются многочисленные «семантические следы», помогающие создать, сохранить и поддерживать единую, стройную архитектуру, универсальный стиль и порядок…
Все эти и другие дополнительные виды деятельности, выполняемые в процессе промышленного программирования и необходимые для успешного выполнения заказов и будем называть программной инженерией (software engineering)
1
. Получается, что так мы обозначаем,
во-первых, некоторую практическую деятельность, а во-вторых, специальную область знания, ну и, в-третьих, некоторую научную дисциплину.
Область знания отличается от научной дисциплины: первая включает в
себя создание отраслевых стандартов, проведение индустриальных
тематических конференций (по C++, Java-технологиям и пр.),
организацию курсов и тренингов, а также выпуск книг и учебных
курсов; в целом здесь идёт речь об распространении успешного опыта.
Научная дисциплина подразумевает исследования по новым, пограничным направлениям, проведение конференций и написание статей (эти конференции сильно отличаются от предыдущих, индустриальных) и в целом организацию сообщества исследователей.
Д.В. Кознов
Введение в программную инженерию
7
Роднит область знаний и научные исследования то, что они способствую появлению новых методов, а также кристаллизуют понятия, тенденции, проблемы и решения проблем. Кроме того, часто
одно переходит в другое и обратно.
В результате развития области знания и научной дисциплины по
программной инженерии появляются и кристаллизуются различные методы и практики разработки ПО (best practices) – для тестирования, проектирования, работы над требованиями, а также архитектурные методы и шаблоны и пр. Кроме этого, создаются и используются
стандарты и методологии, касающиеся всего процесса в целом
(например, MSF, RUP, CMMI, Scrum), или посвященные отдельным аспектам разработки – например, безопасности, тестированию. Разработанные и представленные сообществу, эти методы, практики,
стандарты и методологии составляют программную инженерию как в
область знания.
Необходимость в программной инженерии как в специальной области
знаний была осознана мировым сообществом в конце 60-х годов
прошлого века, более чем на 20 лет позже рождения самого программирования, если считать таковым знаменитый отчет фон Неймана "First Draft of a Report on the EDVAC", обнародованный им в
1945 году. Рождением программной инженерии является 1968 год – конференция NATO Software Engineering, г. Гармиш (ФРГ), которая
целиком была посвящена рассмотрению этих вопросов. В сферу программной инженерии попадают все вопросы и темы, связанные с организацией и улучшением процесса разработки ПО, управлением коллективом разработчиков, разработкой и внедрением программных средств поддержки жизненного цикла разработки ПО. Программная инженерия использует достижения информатики, тесно связана с
системотехникой, часто предваряется бизнес-реинжинирингом. Немного подробнее об этом контексте программной инженерии.
Определение. Информатика (computer science) это свод
теоретических наук, основанных на математике и посвященных
формальным основам вычислимости: математическая логика, теория
грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном
тестировании и т.д.
Д.В. Кознов
Введение в программную инженерию
8
Трудно строго отделить программную инженерию от информатики, но в целом направленность этих дисциплин различна. Программная инженерия нацелена на решение проблем производства, информатика
— на разработку формальных, математизированных подходов к программированию и созданию различных тематических алгоритмов.
Определение. Системотехника (system engineering) объединяет
различные инженерные дисциплины по разработке всевозможных
искусственных систем, например, энергоустановок, телекоммуникационных систем, встроенных систем реального времени.
Очень часто ПО оказывается частью таких систем, выполняя задачу управления соответствующего оборудования. Такие системы называются программно-аппаратными, и участвуя в их создании, программисты вынуждены глубоко разбираться в особенностях
соответствующей аппаратуры.
Определение. Бизнес-реинжиниринг (business reengineering) в широком смысле обозначает модернизацию бизнеса в определенной компании, включая перестройку процессов (так называемых бизнес-процессов — закупок, управления производством и т.д.), внедрение новых практик,
поддерживаемых соответствующими, новыми информационными
системами.
При этом акцент может быть как на внутреннем переустройстве компании так и на разработке нового клиентского сервиса (как правило,
эти вопросы взаимосвязаны). Бизнес-реинжиниринг часто предваряет
разработку и внедрение информационных систем на предприятии, так как требуется сначала навести определенный порядок в делопроизводстве, а лишь потом закрепить его информационной
системой.
Связь программной инженерии (как области практической
деятельности) с информатикой, системотехникой и бизнес­реинжинирингом показана на рис. 1.1.
Д.В. Кознов
Введение в программную инженерию
9
Программная
инженерия
Системотехика
Программная
инженерия
Бизнес-
реинжиниринг
Часто
предваряется
Тесно
связана
Использует
Рис. 1.1. Связь программной инженерии с информатикой, системотехникой и бизнес-реинжинирингом
Программное обеспечение
Определение. Будем понимать под программным обеспечением (ПО)
множество развивающихся во времени логических предписаний, с помощью которых некоторый коллектив людей управляет и использует многопроцессорную и распределенную систему вычислительных
устройств.
Это определение, данное Харальдом Милсом, известным специалистом
в области программной инженерии из компании IBM, включает в себя следующее.
1. Логические предписания — это не только сами программы, но и
различная документация (например, по эксплуатации программ) и
шире — определенная система отношений между людьми, использующими эти программы в рамках некоторого процесса деятельности.
2. Современное ПО предназначено, как правило, для одновременной
работы с многими пользователями, которые могут быть
значительно удалены друг от друга в физическом пространстве.
Таким образом, вычислительная, в которой ПО функционирует,
оказывается распределенной.
3. Задачи, решаемые современным ПО, часто требуют различных
вычислительных ресурсов в силу различной специализации этих
задач, из-за большого объема выполняемой работы, а также из
соображений безопасности. Например, появляется сервер базы данных, сервер приложений и пр. Таким образом,
Информатика
Д.В. Кознов
Введение в программную инженерию
10
вычислительная среда, в которой ПО функционирует, оказывается многопроцессорной.
4. ПО развивается во времени исправляются ошибки,
добавляются новые функции, выпускаются новые версии,
меняется его аппаратная база.
Отметим, что программное обеспечение существенно отличается от
программ. Как писал Ф. Брукс, «программа отличается от ПО с той же
функциональности по трудозатратам более чем в 3 раза». Рассмотрим
детальнее другие отличия.
ПО, как правило, создается группой людей (командой), программа
— чаще всего одним человеком.
ПО создаётся за деньги, программа — по другим причинам (из
интереса, желания попробовать и т.д.).
ПО имеет существенно большее количество пользователей, более
высокую интенсивность использования.
При одинаковой функциональности архитектура ПО и программы
могут значительно отличаться — в силу разных требований по быстродействию, надёжности, из-за числа пользователей и многого другого.
Программа и ПО, как правило, сильно отличаются по качеству, а
также по полноте реализации.
ПО, в отличие от программы, часто должно следовать стандартам
и соглашениям (проекта, компании), программа же создаётся
автором в свободном ключе, и он мало в чём себя стесняет.
У ПО, как правило, имеется значительные интеграционные
требования, например, с ИТ-ландшафтом компании, где оно будет работать.
Программное обеспечение может иметь существенные
требования/ограничения по процессу разработки, в то время как программы создаются вне всяких ограничений.
Программное обеспечение может иметь различные
нефункциональные требования по наличию тестов, документации и т.д.; для программы подобных требования
значительно меньше, например, ей обычно требуется минимальное количество тестов, а документация, как правило, и
вовсе не создаётся.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]