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

Программная инженерия. Учебное пособие для магистрантов направления подготовки 09.04.02 – Информационные системы и технологии

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Министерство сельского хозяйства Российской Федерации ФГБОУ ВО «Ставропольский государственный

аграрный университет»

Кафедра информационных систем

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

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

09.04.02 – Информационные системы и технологии

Ставрополь

2020

1

ББК 33.976 УДК 681.36

Ш 952

Рецензенты:

В. Ф. Минаков – доктор технических наук, профессор кафедры информатики Санкт-Петербургского государственного экономического университета,

г. Санкт-Петербург

В. И. Лебедев – доктор экономических наук, профессор кафедры информатики Северо-Кавказского федерального университета,

г. Ставрополь

Шуваев А. В.

Ш 952 Программная инженерия: учебное пособие для магистрантов направления подготовки 09.04.02 – Информационные системы и технологии / СтГАУ. – Ставрополь: ООО «Ветеран», 2020. – 84 с.

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

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

Одобрено и рекомендовано к публикации учебно-методической комиссией экономического факультета

(протокол № 1 от 28 августа 2020 г.)

© А. В. Шуваев, 2020 © СтГАУ, 2020

2

Содержание

 

Введение………………………………………………………………..

4

РАЗДЕЛ 1 - ПРОГРАММНАЯ ИНЖЕНЕРИЯ: ОСНОВНЫЕ

 

ПРОБЛЕМЫ И ТЕНДЕНЦИИ РАЗВИТИЯ…………………………...…

5

1.1. Системная и программная инженерия в структуре

 

информатизации………………………………………………………..…. 5

1.2. Жизненный цикл информационной системы в архитектуре

 

программной инженерии…………………………………………………..

 

 

16

1.3. Стейкхолдеры в среде программной инженерии………………...

21

РАЗДЕЛ 2 – МЕТОДЫ И ТЕХНОЛОГИИ ПРОГРАММНОЙ

 

ИНЖЕНЕРИИ………………………………………………………………

26

2.1. Управление проектированием программного обеспечения

 

как важный компонент программной инженерии ……………………….

26

2.2. Инструменты для измерения характеристик качества

 

программного продукта……………………………………………………

38

РАЗДЕЛ 3 - ПРОЦЕДУРЫ И МЕХАНИЗМЫ ОЦЕНКИ

 

КАЧЕСТВА ИНФОРМАЦИОННОГО ПРОЕКТА………………………

46

3.1. Метрики сложности и надежности кода программного

 

обеспечения………………………………………………………………...

46

3.2. Методология проектирования

 

информационных систем в аспекте программной инженерии…………

52

3.3. Информационные технологии и алгоритмы ревьюирования

 

программных продуктов…………………………………………………...

62

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

79

Список литературы……………………………………………………..

83

3

Введение

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

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

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

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

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

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

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

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

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

4

РАЗДЕЛ 1. ПРОГРАММНАЯ ИНЖЕНЕРИЯ: ОСНОВНЫЕ ПРОБЛЕМЫ И ТЕНДЕНЦИИ РАЗВИТИЯ

1.1. Системная и программная инженерия в структуре информатизации

Программная инженерия как дисциплина и наука

Программная инженерия (англ. software engineering) – приложение систематического, дисциплинированного, измеримого подхода к разработке, функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению (ISO/IEC/IEEE 24765:2017)

Термин «программная инженерия» появился впервые в 1968 году на конференции НАТО и предназначался для стимулирования поиска решений происходившего в то время «кризиса программного обеспечения». С тех пор это переросло в профессию программного инженера (англ. software engineer) и область исследований, посвящённых созданию программного обеспечения, более качественного, доступного, лучше поддерживаемого и быстрее разрабатываемого.

Money Magazine и Salary.com оценили профессию разработчика программного обеспечения как лучшую работу в Америке в 2006 году.

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

История: когда первые современные цифровые компьютеры появились в начале 1940-х годов, наборы исполняемых команд уже были встроены в машину. Специалисты быстро поняли, что этот подход не слишком удобен. Так появилась «архитектура хранимых программ» или архитектура фон Неймана. Таким образом, деление на «аппаратное» и «программное обеспечение» началось с абстракции, используемой чтобы решить проблему сложности вычислений.

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

тью «Go To Statement Considered Harmful» в 1968 году, а Дэвид Парнас ввёл клю-

чевое понятие модульности и скрытия информации в 1972 году, чтобы помочь программистам справляться со всё более и более сложными программными системами. Системное программное обеспечение для управления аппаратным, названное «операционная система», было представлено компанией Unix в 1969 году. В 1967 году язык Симула ввёл понятие объектно-ориентированной парадигмы программирования.

Эти достижения в области программного обеспечения были встречены большим прорывом в компьютерной технике. В середине 1970-х годов был представлен микрокомпьютер, что позволило любителям получить собственный компьютер и писать свои программы для него. Это, в свою очередь привело к появлению персональных компьютеров (ПК) и Microsoft Windows. Также в середине 1980-х появляются такие понятия как жизненный цикл программного

5

обеспечения в качестве некоторого консенсуса для централизованной разработки программного обеспечения. Конец 1970-х и начало 1980-х годов ознаменовались появлением нескольких новых симула-подобных объектно-ориентиро- ванных языков программирования, в том числе Smalltalk, Objective-C и C++.

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

Профессия.

Правовые требования к лицензированию и сертификации профессиональных программных инженеров отличаются во всём мире. В Великобритании, Британское общество вычислительной техники (англ. British Computer Society) выдаёт лицензии инженерам программного обеспечения и члены общества могут также стать «сертифицированными инженерами» (C.Eng), а в некоторых районах Канады, например, Альберта, Онтарио и Квебек, инженеры по программному обеспечению могут также быть «профессиональными инженерами» (P. Eng) или, далее, «магистрами информационных систем» (ISP), однако, нет никаких правовых требований для данных специализаций.

Работа.

В 2004 году американское Бюро статистики труда, насчитало 760 840 инженеров по программному обеспечению, работающих в США. В тот же период времени было около 1,4 млн практиков, занятых в США в других смешанных инженерных специальностях. Благодаря относительной новизне, как формальная область изучения, программная инженерия часто преподаётся как часть учебной программы компьютерных наук, и многие программные инженеры имеют неплохие познания в информатике.

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

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

Большинство программных инженеров и программистов работает 40 часов в неделю, а около 15 процентов программных инженеров и 11 процентов программистов работали более 50 часов в неделю в 2008 году. Травмы в этих профессиях встречаются редко. Однако, как и в других профессиях, где надо проводить много времени перед компьютером, люди этих специальностей более подвержены к усталости глаз, болям в спине, а также болезням рук и запястий, таких как синдром запястного канала.

Сертификация.

6

Институт программной инженерии предлагает сертификацию по конкретным специальностям, таким как: безопасность, оптимизация процессов, а также архитектура программного обеспечения. Apple, IBM, Microsoft и другие компании финансируют собственные экзамены для сертификации. Многие IT-программы сертификации ориентированы на конкретные технологии, и управляются поставщиками этих технологий. Эти программы сертификации разработаны с учётом места, на которое будут наниматься люди, использующие эти технологии.

Расширение сертификации «Общие навыки разработки программного обеспечения» доступны через различные профессиональные сообщества. В 2006 году IEEE сертифицировала более 575 специалистов в области программного обеспечения, как «Certified Software Development Professional»(CSDP). В 2008

году они добавили сертификат начального уровня известный как «Certified Software Development Associate» (CSDA). У ACM была профессиональная про-

грамма сертификации в начале 1980-х, которая была прекращена из-за отсутствия интереса. В ACM также рассматривали возможность сертификации профессиональных программных инженеров в конце 1990-х годов, но в итоге решили, что такая сертификация не подходит для профессиональной производственной практики разработки программного обеспечения.

Британское общество вычислительной техники разработало юридически признанную профессиональную сертификацию, называемую «Chartered IT Professional» (CITP), и доступную только для полных членов (MBCS). Программные инженеры имеют право на членство в Институте инженерии и техноло-

гии (англ. Institution of Engineering and Technology) и могут соответственно по-

лучить статус дипломированного инженера. В Канаде, организация Canadian Information Processing Society также разработала юридически признанную профессиональную сертификацию, названную «Information Systems Professional» (ISP). В Онтарио, Канада, Программные инженеры, которые заканчивают канад-

ский Engineering Accreditation Board (CEAB), успешно сдавшие Professional Practice Examination (PPE) и, имеющие по крайней мере 48 месяцев опыта работы программным инженером, имеют право получить лицензию через PEO («Профессиональные инженеры Онтарио») и могут стать Профессиональными инже-

нерами (P.Eng).

Образование.

Знания в области программирования являются необходимым условием для того, чтобы стать программным инженером. В 2004 году IEEE Computer Society выпустил SWEBOK, который был опубликован в качестве стандарта ISO / IEC 19759:2004, описывающего объём знаний, который по их мнению, должен получить дипломированный программный инженер с четырёхлетним опытом. Многие люди входят в эту профессию, получив высшее образование или отучившись в профессионально-техническом училище. Стандартный учебный план для международной степени бакалавра программной инженерии был определён CCSE[en], и обновлён в 2004 году. Ряд университетов имеют программы обучения программных инженеров. С 2010 года насчитывалось 244 очных программы, 70 ин- тернет-курсов, 230 программ для специалистов, 41 программа для учёных в этой

7

области, а также 69 программ для сертификатов в Соединённых Штатах. В российских вузах есть отдельное направление подготовки 09.03.04 «Программная инженерия».

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

Сравнение с другими дисциплинами

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

Системная инженерия и основные ИТ-стандарты

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

Основные стандарты представлены на английском языке:

ISO/IEC 15288:2015 Systems and software engineering – System life cycle pro-

cesses

ISO/IEC TR 19760:2003 Systems engineering – A guide for the application of ISO/IEC 15288 (System life cycle processes)

ISO/IEC 26702 (IEEE Std 1220:2005) Systems engineering – Application and management of the systems engineering process

ISO/IEC TR 24748-1:2010 Systems and software engineering – Life cycle management — Guide for life cycle management

ISO/IEC 25010:2011 Systems and Software Engineering – Systems and Software Engineering Quality Requirements and Evaluation

ISO/IEC/IEEE 24765:2010 Systems and software engineering – Vocabulary

ISO/IEC/IEEE 29148 Systems and software engineering – Life cycle processes

Requirements engineering

ISO/IEC/IEEE 42010:2011 Systems and software engineering – Architecture description

ISO 15926 Industrial automation systems and integration – Integration of lifecycle data for process plants including oil and gas production facilities

ISO/IEC 29110:2011 Systems Engineering Standards for Very Small Entities

Основные стандарты на русском языке:

ГОСТ Р 57193-2016 Системная и программная инженерия. Процессы жиз-

ненного цикла систем (на основе ISO/IEC/IEEE 15288:2015 Systems and software engineering – System life cycle processes)

8

ГОСТ Р ИСО/МЭК 12207-2010 Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств

(см. ISO/IEC 12207:2008)

ГОСТ Р 57193-2016. Национальный стандарт Российской Федерации. Системная и программная инженерия. Процессы жизненного цикла систем (утв. и введен в действие Приказом Росстандарта от 31.10.2016 N 1538-ст)

ГОСТ Р ИСО/МЭК ТО 16326-2002. Программная инженерия. Руководство по применению ГОСТ Р ИСО/МЭК 12207 при управлении проектом (см. ISO/IEC

16326)

ГОСТ Р ИСО 15926-1-2008 Промышленные автоматизированные системы

иинтеграция. Интеграция данных жизненного цикла для перерабатывающих предприятий, включая нефтяные и газовые производственные предприятия (см.

ISO 15926-1:2004)

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

В 1961 г. в СССР вышел перевод первой в мире книги по системной инжене-

рии Г. Х. Гуда и Р. Э. Макола (Goode, Harry H., Robert E. Machol. System Engineering: An Introduction to the Design of Large-scale Systems, 1957). Авторы рас-

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

Редакции издательства «Советское радио» (в последующем «Радио и связь») не понравился буквальный перевод «системная инженерия» или «инженерия систем», и был изобретён термин «системотехника» (по одним источникам автором слова был профессор Московского энергетического института Ф. Е. Темников, по другим – редактор русского перевода Г. Н. Поваров). Термин «системотехника» подразумевал системотехнологию.

Первая в СССР кафедра системотехники была организована в Московском энергетическом институте (МЭИ) в 1969 году. Постепенно подобные кафедры возникли во многих технических вузах страны, и к середине 80-х годов их стало более тридцати.

Поскольку в термине в явном виде звучала «техника», термин «системотехника» довольно быстро стал использоваться в основном в приложениях системных методов только к техническим направлениям и быстро стал утрачивать первоначальный смысл междисциплинарного подхода и прикладной теории (технологии) систем, превратившись со временем в узкое понятие из области АСУ (автоматизированных систем управления).

Советские инженеры-системотехники в своей основе не стали специалистами, готовыми создавать системы, конкурентоспособные на глобальном рынке, специалистами, умеющими организовать и определить содержание

9

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

Архитектурное построение системы программного обеспечения

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

Понятие архитектуры в значительной мере субъективно и имеет множество противоречивых толкований; в лучшем случае оно отображает общую точку зрения команды разработчиков на результаты проектирования системы. Существует большое количество определений архитектуры. Коллекция определений, относящихся, в основном, к архитектуре программного обеспечения, собрана на сайте Института программной инженерии Университета Карнеги – Меллона.

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

История возникновения понятия

По мере роста сложности решаемых задач возникла необходимость структурирования систем. Однако практики нашли термин «структура» недостаточным для описания всех аспектов системы.

Термин «архитектура» в системной инженерии ввел профессор университета Южной Калифорнии Эберхард Рехтин (англ. Eberhardt Rechtin) в начале 90-х годов XX-го века. Он считал, что по мере усложнения систем их «высокоуровневого проектирования» (или «концептуального проектирования»), как оно понималось в те годы, было недостаточно, чтобы приводить инженеров и проектировщиков к созданию точных и эффективных проектов. Он изучил архитектурные принципы в строительстве, чтобы понять, как создаются и разрабатываются сложные системы (например, здания).

А.Рехтин поясняет термин архитектура системы следующим образом: Суть создания архитектуры – структурирование. Структурирование может

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

10

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