Предисловие. Введение в программную инженерию: Конспект лекций / фгбоувпо «ивановский государственный энергетический университет имени В. И

Иваново 2014

УДК 004.41

ББК

Введение в программную инженерию: Конспект лекций / ФГБОУВПО «Ивановский государственный энергетический университет имени В.И. Ленина». – Иваново, 2014. – с. IBSN

В учебном пособии рассматриваются процессы и методы промышленной разработки программного обеспечения. Материал пособия подобран с учетом требований документов Guide to the Software Engineering Body of Knowledge (SWEBOK), IEEE 2004 Version – Свод знаний по программной инженерии и Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering – Учебный План для Преподавания Программной Инженерии в ВУЗах. Основное внимание уделяется рассмотрению жизненных циклов программного обеспечения, описанию проблем и видов деятельности при выполнении фаз жизненного цикла и наиболее распространенных методологий разработки программных продуктов.

Рекомендуется для студентов младших курсов вузов, обучающихся по направлению «Программная инженерия», а также для широкого круга специалистов, работающих в области разработки программного обеспечения.

Ил.. Библиогр.: назв.

Печатается по решению редакционно-издательского совета
ГОУ ВПО «Ивановский государственный энергетический университет имени В.И. Ленина».

Рецензенты:

кафедра программного обеспечения компьютерных систем
ФГБОУВПО «Ивановский государственный энергетический университет имени В.И. Ленина»;

доктор технических наук, профессор.

IBSN 2014

Оглавление

Предисловие.. 5

Введение.. 6

1. Предмет программной инженерии.. 9

1.1. Определение и свойства программного обеспечения. 9

1.2. Проблемы разработки программного обеспечения. 10

1.3. Процессы производства программного обеспечения. 11

1.4. Понятие программного проекта. 12

1.5. Стандартизация в области производства ПО.. 15

1.6. Определение программной инженерии и ее место в системе информационных технологий.. 17

2. Жизненный цикл программных продуктов 20

2.1. Понятие жизненного цикла. 20

2.2. Процессы жизненного цикла программного обеспечения. 21

2.3. Модели жизненного цикла. 23

3. Виды деятельности в программной инженерии 31

3.1. Управление требованиями.. 31

3.1.1. Проблема. 31

3.1.2. Цикл работы с требованиями. 32

3.1.3. Виды и свойства требований. 32

3.1.4. Варианты формализации требований. 33

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

3.2.1. Понятие. 35

3.2.2. Принципы.. 35

3.2.3. Шаблоны.. 36

3.2.4. Моделирование ПО.. 36

3.2.5. Методологии. 37

3.2.6. Оценка качества. 37

3.3. Конструирование программного обеспечения. 38

3.3.1. Определение. 38

3.3.2. Связь с другими процессами. 38

3.3.3. Принципы.. 38

3.3.4. Модели и методы.. 40

3.3.5. Языки конструирования. 40

3.4. Конфигурационное управление. 40

3.4.1. Проблемы управления активами программного проекта. 40

3.4.2. Единицы конфигурационного управления. 42

3.4.3. Управление версиями. 43

3.4.4. Управление сборками. 43

3.4.5. Понятие baseline. 44

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

3.5.1. Основные определения. 44

3.5.2. Уровни тестирования (Test Levels) 45

3.5.3. Виды тестирования. 45

3.5.4. Метрики. 46

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

4. Методология объектно-ориентированного анализа и проектирования 49

4.1. Основные понятия. 49

4.1.1. Объекты и классы.. 49

4.1.2. Принципы ООП.. 50

4.1.3. Разработка объектно-ориентированных программ.. 50

4.2. Язык UML.. 52

4.2.1. Что дает UML. 52

4.2.2. Структура языка UML. 54

4.2.3. UML диаграммы.. 58

4.2.4. Программы поддержки языка UML. 60

4.3. Вопросы для самоконтроля. 61

5. Технологии разработки программного обеспечения 62

5.1. Тяжеловесные и облегченные технологии.. 62

5.2. Технология RUP.. 63

5.3. Гибкие технологии.. 66

5.3.1. SCRUM.. 66

5.4. Технология MSF.. 67

5.4.1. Управление рисками в MSF for Agile Software Development 69

5.4.2. Основные сведения о рисках. 69

5.4.3. Планирование управления рисками. 70

5.4.4. Процесс управления рисками. 71

5.4.5. Управление рисками как составная часть жизненного цикла проекта. 72

5.4.6. Учебный пример. Выделение рисков. 72

5.5. Модель процессов MSF for Agile Software Development. 73

5.5.1. Принципы модели процессов. 74

5.5.2. Управление компромиссами. 75

5.5.3. Схема процесса разработки. 76

5.6. MSF for Agile Software Development. 77

5.6.1. Подготовка проекта. 79

5.6.2. Планирование проекта. 79

5.6.3. Планирование спринта. 82

5.6.4. Выполнение спринта. 84

5.6.5. Отслеживание проекта. 87

5.7. CMMI. 89

Зачем использовать эту модель?. 89

5.7.1. Каково назначение модели CMMI?. 90

5.7.2. Как лучше использовать модель CMMI?. 90

5.7.3. Элементы модели CMMI 92

Заключение.. 95

Литература.. 96

Предисловие

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

Курс разработан в Ивановском государственном энергетическом университете с учетом структуры общей образовательной программы по направлению 231000 "Программная инженерия", реализуемой на кафедре программного обеспечения компьютерных систем. При разработке курса автором не ставилась задача строго следовать принципам таких основополагающих документов, как Guide to the Software Engineering Body of Knowledge (SWEBOK) [1], и в равной мере охватить все аспекты, входящие в состав программной инженерии. Более того, учитывая важность получения студентами практических навыков проектирования и конструирования программного обеспечения начиная с первых курсов обучения, в данном курсе сделан некоторый уклон в сторону освоения методологии объектно-ориентированного анализа и проектирования. Это обусловлено важностью понимания объектной парадигмы при обучении программированию и определенной сложностью ее освоения в рамках ограниченных по времени дисциплин по конкретным языкам программирования.

Для изложения объектно-ориентированного подхода к разработке программного обеспечения в данном курсе используется язык UML. При этом не ставится цель дать полное описание этого языка и всех его возможностей. В курсе лишь изучаются базовые принципы его использования и применяются основные конструкции UML - диаграмм.

Курс включает практикум, в котором студенты закрепляют полученный материал, выполняя индивидуальные творческие задания. Эти задания направлены на получение практических навыков планирования, анализа требований и проектирования простейшего программного продукта - однопользовательского консольного приложения Windows. В процессе этой работы студенты оформляют проектные документы и модели, которые обсуждаются на семинарских занятиях. Основная цель практикума - научиться формировать требования к разработке программы и проектировать программные классы. Эти навыки в дальнейшем применяются в курсе объектно-ориентированного программирования.

В качестве инструментов, поддерживающих методологии разработки, и промышленно реализованных технологий в курсе используются методические материалы и программные средства компании Microsoft, представленные в среде разработки Microsoft Visual Studio.

Введение

Производство программного обеспечения (ПО) сегодня является одной из крупнейших отраслей мировой экономики, в которой заняты миллионы специалистов (программистов, менеджеров, аналитиков и т. п.). Еще большее количество людей используют ПО в своей работе и их благополучие напрямую зависит от программирования. Компании - производители ПО играют важную роль в современном обществе. Такие фирмы, как Microsoft или Google, реально влияют на развитие всей современной цивилизации. Все эти факторы свидетельствуют, что роль программных средств в современном мире огромна и по-видимому в дальнейшем она будет только возрастать.

Отрасль производства ПО зародилась около полувека назад. Началом современного программирования (если не считать компьютерами различные механические устройства счета) обычно указывают знаменитый отчет фон Неймана «First draft of a report on the EDVAC», обнародованный им в 1945 году. Необходимость в программной инженерии как в специальной области знаний были осознаны мировым сообществом более чем на 20 лет позже, в конце 60-х годов прошлого века. Датой рождения программной инженерии считается 1968 год – конференция NATO с одноименным названием Software Engineering в городе Гармиш (ФРГ), которая целиком была посвящена рассмотрению вопросов этой области деятельности.

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

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

Одной из основных причин возникновения и развития программной инженерии стал кризис программирования, начало которого было отмечено в США в начале 70-х годов прошлого века. Этот кризис продолжался несколько десятилетий. Он проявлялся в том, что большие проекты по разработке ПО стали выполняться с отставанием от графика или с превышением сметы расходов. При этом разработанный продукт не обладал требуемыми функциональными возможностями и имел низкую производительность, а его качество не устраивало потребителей. Аналитические исследования и обзоры, выполняемые в то время, показывали удручающие результаты. Так, например, в 1995 г. компания Standish Group проанализировала работу 364 американских корпораций и итоги выполнения ими более 23 тыс. проектов, связанных с разработкой ПО. В результате анализа были получены выводы, согласно которым только 16% проектов завершились в срок, не превысили запланированный бюджет и реализовали все требуемые функции и возможности. Около 53% проектов завершились с опозданием, а расходы превысили запланированный бюджет. При этом требуемые функции не были реализованы в полном объеме. 31% проектов были прекращены до завершения. Наблюдения последующих нескольких лет показывали близкое к этому соотношение результатов завершения проектов. В числе причин возможных неудач указывались: нечеткая и неполная формулировка требований к ПО, недостаточное вовлечение пользователей в работу над проектом, отсутствие необходимых ресурсов, неудовлетворительное планирование, частое изменение требований в процессе разработки, новизна используемых технологий, отсутствие грамотного управления проектом, недостаточная поддержка проектов со стороны высшего руководства и другие.

Потребность контролировать процесс разработки ПО, прогнозировать и гарантировать стоимость разработки, сроки и качество результатов привела к необходимости перехода от кустарных к индустриальным способам создания ПО и появлению совокупности инженерных методов и средств создания ПО, объединенных общим названием "программная инженерия".

Впервые термин "программная инженерия" (software engineering) был использован как тема уже упоминавшейся конференции, проводившейся под эгидой NATO в 1968 г. Спустя семь лет, в 1975 г., в Вашингтоне была проведена первая международная конференция, посвященная программной инженерии. Тогда же появилось первое издание, посвященное программной инженерии, — журнал IEEE Transactions on Software Engineering.

В процессе становления и развития программной инженерии обычно выделяют два этапа: 70-е и 80-е гг. — систематизация и стандартизация процессов создания ПО (на основе структурного подхода) и 90-е гг. — начало перехода к сборочному, индустриальному способу создания ПО (на основе объектно-ориентированного подхода).

Современная программная инженерия является сформированной и довольно установившейся научно-технической дисциплиной, которая хорошо структурирована, имеет вполне конкретное содержание. Две наиболее авторитетные в мире ассоциации в области компьютерных технологий: Computer Society of the Institute for Electrical and Electronic Engineers (https://www.ieee.org) или просто IEEE и ACM – Association of Computer Machinery (https://www.acm.org) в 2004 году сформулировали два ключевых описания того, что сегодня составляет предмет программной инженерии:

1. Guide to the Software Engineering Body of Knowledge (SWEBOK), IEEE 2004 Version - Руководство к Своду Знаний по Программной Инженерии, в дальнейшем просто “SWEBOK” [1];

2. Software Engineering 2004. Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering – Учебный План для Преподавания Программной Инженерии в ВУЗах [2].

Первый документ описывает 10 сфер деятельности, которые составляют предмет программной инженерии:

  • Software requirements – программные требования;
  • Software design – проектирование ПО;
  • Software construction – конструирование ПО;
  • Software testing - тестирование ПО;
  • Software maintenance – эксплуатация (поддержка) ПО;
  • Software configuration management – конфигурационное управление;
  • Software engineering management – управление в программной инженерии;
  • Software engineering process – процессы программной инженерии;
  • Software engineering tools and methods – инструменты и методы разработки ПО;
  • Software quality – качество ПО.

Второй документ излагает содержание университетского образования по данной дисциплине.

Дисциплина "программная инженерия" интернациональна, как и вся индустрия информационных технологий. В настоящее время весь мир использует единые стандарты, технические средства, методы и среды разработки ПО, единую программу образования. С 2010 года с внедрением в России образовательных стандартов высшего профессионального образования четверного поколения направление "программная инженерия" введено в перечень направлений бакалавриатской и магистерской подготовки в России. Содержание образовательного стандарта пот этому направлению соответствует казанным документам. Это дает основание утверждать, что данное образование по крайней мере по содержанию соответствует международным требованиям в области подготовки кадров по разработке программного обеспечения.

В настоящее время готовится к выпуску новая редакция SWEBOK. Ее содержание расширено и включает 15 глав:

Глава 1: Требования к ПО

Глава 2: Проектирование ПО

Глава 3: Конструирование ПО

Глава 4: Тестирование ПО

Глава 5: Сопровождение ПО

Глава 6: Управление конфигурацией ПО

Глава 7: Управление разработкой ПО

Глава 8: Процесс разработки ПО

Глава 9: Модели и методы программной инженерии

Глава 10: Обеспечение качества

Глава 11: Профессиональные практики разработки ПО

Глава 12: Экономика разработки ПО

Глава 13: Вычислительные основы

Глава 14: Математические основы

Глава 15: Инженерные основы


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: