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

2836

.pdf
Скачиваний:
1
Добавлен:
21.11.2023
Размер:
302.42 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Нижегородский государственный архитектурно-строительный университет»

Папкова М.Д.

ПРОГРАММНАЯ ИНЖЕНЕРИЯ

Учебно-методическое пособие по подготовке к лекционным и практическим занятиям

(включая рекомендации по организации самостоятельной работы)

для обучающихся по дисциплине «Программная инженерия»

по направлению подготовки 09.03.04 Программная инженерия профиль Разработка программно-информационных систем

Нижний Новгород

2018

УДК 004.046

Папкова М.Д. / Программная инженерия[Электронный ресурс]: учеб.-метод. пос. / М.Д. Папкова; Нижегор. гос. архитектур. - строит. ун-т – Н. Новгород: ННГАСУ, 2018. – 26 с.– 1 электрон.

опт. диск (CD-RW).

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

Учебно-методическое пособие предназначено для обучающихся в ННГАСУ по дисциплине «Программная инженерия» по направлению подготовки 09.03.04 Программная инженерия Профиль Разработка программно-информационных систем.

Учебно-методическое пособие ориентировано на обучение в соответствии с календарным учебным графиком и учебным планом по основной профессиональной образовательной программе направления09.03.04 Программная инженерия Профиль Разработка программноинформационных систем, утверждённым решением учёного совета ННГАСУ от 02.03.2018 г. (протокол № 3).

©

М.Д. Папкова, 2018

©

ННГАСУ, 2018

2

Оглавление

 

1. Общие положения..........................................................................................................................

4

1.1. Цели изучения дисциплины и результаты обучения .......................................................

4

1.2

Содержание дисциплины........................................................................................................

5

2. Методические указания по подготовке к лекциям......................................................................

7

2.1

Общие рекомендации по работе на лекциях.........................................................................

7

2.2

Общие рекомендации при работе с конспектом лекций .....................................................

7

2.3

Общие рекомендации по изучению материала лекций .......................................................

7

2.4

Контрольные вопросы...........................................................................................................

19

3. Методические указания по подготовке к практическим занятиям .........................................

21

3.1

Общие рекомендации по подготовке к практическим занятиям......................................

21

3.2

Примеры задач для практических занятий .........................................................................

21

4. Методические указания по организации самостоятельной работы........................................

22

4.1

Общие рекомендации для самостоятельной работы..........................................................

22

4.2

Темы для самостоятельного изучения.................................................................................

24

4.3

Учебно-методическое обеспечение самостоятельной работы..........................................

24

4.4

Задания для самостоятельной работы .................................................................................

24

3

1.Общие положения

1.1.Цели изучения дисциплины и результаты обучения

Основными целями освоения учебной дисциплины «Программная инженерия» являются: представить программную инженерию в виде целостного изложения, концентрируясь на

концепции процесса, различных методологиях разработки ПО (CMMI, MSF, Scrum), отдельных видах деятельности процесса - разработке архитектуры, конфигурационном управлении, работе с требованиями, тестировании;

формирование у студентов понимания необходимости применения данных принципов программной инженерии.

В процессе освоения дисциплины студент должен Знать:

основные законодательные и правовые акты в различных сферах, использующих ИТ и ПО основы информатики и программирования в аспекте жизненного цикла программного про-

дукта; основные методы и инструменты разработки программного обеспечения;

особенности использования операционных систем, сетевых технологий, средства разработки программного интерфейса, языки и методы формальных спецификаций, системы управления базами данных;

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

способы формирования критериев принятия проектных решений для их обоснования и методы постановки и реализации экспериментов для проверки корректности и эффективности решений;

особенности подготовки презентаций, стандарты оформления научно-технических отчетов по результатам выполненной работы, требования к оформлению статей и докладов на научнотехнических конференциях.

Уметь:

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

применять основы информатики и программирования на всех этапах жизненного цикла программного продукта;

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

го интерфейса, применять языки и методы формальных спецификаций, использовать системы управления базами данных;

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

обосновывать принимаемые решений и ставить эксперименты по проверке их корректности и эффективности;

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

4

ций.

Владеть:

методами и способами применения законодательных и правовых актов в различных сферах жизнедеятельности;

инструментами и методами, используемыми на всех этапах жизненного цикла программного продукта;

технологией и методикой применения методов и инструментов разработки программного обеспечения;

навыками использования операционных систем, сетевых технологий, средств разработки программного интерфейса, особенностями применения языков и методов формальных спецификаций, систем управления базами данных;

практическими методами применения концепции качества программного обеспечения, способами измерения значений атрибутов качества, подходами использования персонала, методов, процессов, инструментов и технологий в обеспечении качества;

методами выбора критериев для обоснования принимаемых проектных решений и методиками постановки экспериментов для проверки их эффективности;

искусством разработки презентаций, практиками применения стандартов для оформления научно-технических отчетов, статей и докладов.

Необходимость в программной инженерии как в специальной области знаний была осознана мировым сообществом в конце 60-х годов прошлого века, более чем на 20 лет позже рождения самого программирования, если считать таковым знаменитый отчет фон Неймана "FirstDraftofaReportonthe EDVAC", обнародованный им в 1945 году. Рождением программной инженерии является 1968 год – конференцияNATOSoftwareEngineering, г. Гармиш (ФРГ), которая целиком была посвящена рассмотрению этих вопросов. В сферу программной инженерии попадают все вопросы и темы, связанные с организацией и улучшением процесса разработкиПО, управлением коллективом разработчиков, разработкой и внедрением программных средств поддержки жизненногоцикларазработкиПО.Программная инженерияиспользует достижения информатики, тесно связана с системотехникой, часто предваряется бизнес-реинжинирингом

1.2 Содержание дисциплины

Материал дисциплины сгруппирован по следующим разделам:

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

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

2. Программное обеспечение (ПО).

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

зователями, которые могут быть значительно удалены друг от друга в физическом пространстве. Таким образом, вычислительная среда (персональные компьютеры, сервера и т.д.), в которой ПО

5

функционирует, оказывается распределенной.

3. Управление программным проектом.

Управление командой проекта, рисками, конфигурациями. Планирование проекта. Автоматизированные системы управления проектами. Современные принципы управления созданием ПО.

4. Оценка при планировании программного проекта Оценка предварительной стоимости проекта, ресурсов. Документирование требований. Со-

вершенствование экономики разработки ПО.

5.Разработка и анализ требований.

Терминология, типы спецификации требований, классификация требований. Методологии и стандарты, регламентирующие работу с требованиями. Высокая цена ошибок требований. Пять этапов анализа проблемы.

6. Управление требованиями Планирование управления требованиями. Организация информации о требованиях. Статиче-

ские и динамические требования. Документ-концепция. Управление масштабом. Управление изменениями требований.

7. Архитектура ПО Проектирование ПО Структурирование программной системы. Выбор архитектуры. Архитектура с точки зрения

управления. Архитектура с технической точки зрения. Архитектурные паттерны. Методы и модели проектирования. Выбор архитектуры.

8. Основы объектно-ориентированной разработки систем.

Моделирование бизнес-процесса с использованием концепций UML. Фазы разработки. Основные сведения о языке UML. Диаграммы UML.

9. Унифицированный процесс (UP) – объектно-ориентированный процесс разработки. Технологические процессы. Визуальное моделирование как мощная технологическая под-

держка основы создания ПО. От моделей бизнес-процесса к модели системы.

10. Тестирование ПО.

Документирование системных требований. Проверяемые требования. Организация процесса тестирования программного обеспечения. Примеры тестирования.

11. Обеспечение качества ПО.

Цели обеспечения качества программного обеспечения. Контроль качества. Показатели качества для модели прецедентов.Акторы прецедента.Верификация и валидация программного обеспечения. Использование трассировки для поддержки верификации.

12. Технико-экономическое обоснование проектов программных средств.

Экономика ПО. Практическая оценка стоимости ПО.Модели оценки стоимости ПО. Оценка трудоемкости разработки программного продукта. Модели стоимости следующего поколения.

6

2. Методические указания по подготовке к лекциям

2.1 Общие рекомендации по работе на лекциях

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

Назначение лекции состоит в том, чтобы доходчиво изложить основные положения изучаемой дисциплины, ориентировать на наиболее важные вопросы учебной дисциплины и оказать помощь в овладении необходимых знаний и применения их на практике.

Личное общение на лекции преподавателя со студентами предоставляет большие возможности для реализации образовательных и воспитательных целей.

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

2.2Общие рекомендации при работе с конспектом лекций

Входе лекционных занятий необходимо вести конспектирование учебного материала. Конспект помогает внимательно слушать, лучше запоминать в процессе осмысленного записывания, обеспечивает наличие опорных материалов при подготовке к семинару, зачету, экзамену.

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

В случае неясности по тем или иным вопросам необходимо задавать преподавателю уточняющие вопросы. Следует ясно понимать, что отсутствие вопросов без обсуждения означает в большинстве случаев неусвоенность материала дисциплины.

2.3 Общие рекомендации по изучению материала лекций

Раздел 1: «Введение в программную инженерию» –0,5 лекции.

Цель: показать эволюцию подходов к разработке информационных систем и технологий и дать основы понимания появления и изменения в терминологии предметной области.

Содержание:

История и основные понятия программной инженерии. Информатика (computerscience) – это свод теоретических наук, основанных на математике и посвященных формальным основам вычислимости. Сюда относят математическую логику, теорию грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном тестировании и т.д. Трудно строго отделить программную инженерию от информатики, но в це-

7

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

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

Бизнес-реинжиниринг(businessreengineering) – в широком смысле обозначает модернизацию бизнеса в определенной компании, внедрение новых практик, поддерживаемых соответствующими новыми информационными системами. При этом акцент может быть как на внутреннем переустройстве компании, так и на разработке нового клиентского сервиса (как правило, эти вопросы взаимосвязаны). Бизнес-реинжиниринг часто предваряет разработку и внедрение информационных систем на предприятии, так как требуется сначала навести определенный порядок в делопроизводстве, а лишь потом закрепить его информационной системой.

Раздел 2: «Программное обеспечение (ПО)»- 0,5лекции.

Цель: дать основные понятия управления разработкой ПО в контексте эволюции принципов программной инженерии.

Содержание:

Понятие процесса разработки ПО. Универсальный процесс. Текущий процесс. Конкретный процесс. Стандартный процесс. Совершенствование процесса. Pull/Push стратегии. Классические модели процесса: водопадная модель, спиральная модель. Фазы и виды деятельности. Центральным объектом изученияпрограммной инженерииявляетсяпроцесссозданияПО– множество различных видов деятельности, методов, методик и шагов, используемых для разработки иэволюцииПОи связанных с ним продуктов (проектных планов, документации, программного кода, тестов, пользовательской документации и пр.). Однако на сегодняшний день не существуетуниверсального процессаразработкиПО– набора методик, правил и предписаний, подходящих дляПОлюбого вида, для любых компаний, для команд любой национальности. Каждый текущий процессразработки, осуществляемый некоторой командой в рамкахопределенного проекта, имеет большое количество особенностей и индивидуальностей. Однако целесообразно перед началом проекта спланировать процесс работы, определив роли и обязанности в команде,рабочие продукты(промежуточные и финальные), порядок участия в их разработке членов команды и т.д. Будем называть это предварительное описание конкретным процессом, отличая его от планаработ, проектных спецификаций и пр. Например, в VSTS существуют заготовки для конкретных процессов на базе CMMI, Scrum и др.

Раздел 3: «Управление программным проектом». –1 лекция.

Цель:постановка и решение практических задач управления проектами создания ПО с применением современного инструментария для моделирования на профессиональном уровне.

Содержание:

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

8

информацию, правила использования, документацию и инсталляционные пакеты средств разработки, используемых в проектах компании (систем версионного контроля, средств контроля ошибок, средств программирования – различных СУБДи т.д.);

описание практик разработки – проектного менеджмента, правил работы с заказчиком и т.д.;

шаблоны проектных документов – технических заданий, проектных спецификаций, планов тестирования и т.д. и пр.

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

Происходит быстрая смена технологий разработки ПО, требуются изучение и внедрение новых средcтв разработки.

Наблюдается быстрый рост компаний и их выход на новые рынки, что требует новой организации работ.

Имеет место высокая конкуренция, которая требует поиска более эффективных, более экономичных способов разработки.

Что и каким образом можно улучшать.

Переход на новые средства разработки,языки программированияи т.д.

Улучшениеотдельных управленческих и инженерных практик – тестирования,управления требованиямии пр.

Полная, комплексная перестройка всех процессов в проекте, департаменте, компании (в соответствии, например, сCMMI).

Сертификация компании (CMM/CMMI,ISO 9000и пр.).

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

Это определение заключает в себя:

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

Современное ПО предназначено, как правило, для одновременной работы со многими пользователями, которые могут быть значительно удалены друг от друга в физическом пространстве. Таким образом, вычислительная среда (персональные компьютеры, сервера и т.д.), в которой ПО функционирует, оказывается распределенной.

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

ПО развивается во времени – исправляются ошибки, добавляются новые функции, выпускаются новые версии, меняется его аппаратная база.

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

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

9

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

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

-Изменяемость – ПО легко изменить и, как следствие, требования к нему постоянно меняются в процессе разработки. Это создает много дополнительных трудностей при его разработке и эволюции.

-Нематериальность – ПО невозможно увидеть, оно виртуально. Поэтому, например, трудно воспользоваться технологиями, основанными на предварительном создании чертежей, успешно используемыми в других промышленных областях (например, в строительстве, машиностроении). Там на чертежах в схематичном виде воспроизводятся геометрические формы создаваемых объектов. Когда объект создан, эти формы можно увидеть.

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

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

(processmodel).

Модель является хорошей абстракцией различных методов разработки ПО, позволяя лаконично, сжато и информативно их представить. Однако, сама идея модели процесса является одной из самых ранних в программной инженерии, когда считалось, что удачная модель – самое главное, что способствует успеху разработки. Позднее пришло осознание, что существует множество других аспектов (принципы управления и разработки, структуру команды и т.д.), которые должны быть определены согласовано друг с другом. И стали развиваться интегральные методологии разработки. Тем не менее существует несколько классических моделей процесса, которые полезны на практике.

Фаза (phase) – это определенный этап процесса, имеющий начало, конец и выходной результат. Например, фаза проверки осуществимости проекта, сдачи проекта и т.д. Фазы следуют друг за другом в линейном порядке, характеризуются предоставлением отчетности заказчику и, часто, выплатой денег за выполненную часть работы. Вид деятельности (activity) – это определенный тип работы, выполняемый в процессе разработкиПО. Разные виды деятельности часто требуют разные профессиональные навыки и выполняются разными специалистами. Например,управление проектом выполняетсяменеджером проекта, кодирование – программистом, тестирование – тестировщиком. Есть виды деятельности, которые могут выполняться одними и теми же специалистами – например, кодирование и проектирование (особенно в небольшом проекте) часто выполняют одни и те же люди. Водопадная модель была предложена в 1970 году Винстоном Ройсом. Фактически, впервые в процессе разработки ПО были выделены различные шаги разработки и поколеблены примитивные представления о разработке ПО в виде анализа системы и еекодирования.

Были определены следующие шаги: разработкасистемных требований, разработка требований кПО,анализ, проектирование,кодирование, тестирование, использование

в рамках этой модели было введено прототипирование, то есть предлагалось разрабатывать систему дважды, чтобы уменьшить риски разработки. Первая версия – прототип – позволяет увидеть основные риски и обосновано принять главные архитектурные решения. На создание прототипа отводилось до одной трети времени всей разработки. Недостатками водопадной модели являются:

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]