Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

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

Покупка
Основная коллекция
Артикул: 682644.02.01
К покупке доступен более свежий выпуск Перейти
В учебном пособии рассматриваются основные понятия и определения, классификация программного обеспечения, этапы создания программного продукта в рамках жизненного цикла, освещается современное состояние технологий разработки программных продуктов. Изложены существующие подходы к оценке качества процессов создания программного обеспечения, произведены анализ требований и определение спецификаций программного обеспечения. Большое внимание уделено вопросам проектирования программного обеспечения, его надежности, коллективной разработки с помощью современных систем контроля версий. Теоретический материал сопровождается практикумом в виде лабораторных работ по изложенной тематике. Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения. Для студентов и преподавателей высших учебных заведений технического профиля, а также для специалистов любой предметной области, проявивших интерес к современному состоянию методов и средств программирования.
33
77
150
Конструирование программного обеспечения : учебное пособие / под ред. Л.Г. Гагариной. — Москва : ИНФРА-М, 2023. — 319 с. — (Высшее образование). — DOI 10.12737/1893880. - ISBN 978-5-16-017861-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/2125541 (дата обращения: 21.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
КОНСТРУИРОВАНИЕ 
ПРОГРАММНОГО 
ОБЕСПЕЧЕНИЯ

Под редакцией Л.Г. Гагариной

Москва
ИНФРА-М
2023

УЧЕБНОЕ ПОСОБИЕ

УДК 004.4(075.8)
ББК 32.972я73
 
Г12

Р е ц е н з е н т ы:
Батура В.П., кандидат технических наук, доцент Национального 
исследовательского университета «Московский институт электронной техники»;
Кононова А.И., доктор физико-математических наук, доцент Национального исследовательского университета «Московский институт электронной техники»

ISBN 978-5-16-017861-5 (print)
ISBN 978-5-16-110871-0 (online)

© Гагарина Л.Г., Кокорева Е.В., 
Сидорова-Виснадул Б.Д., 2015
© Коллектив авторов, с изменениями, 2023

Гагарина Л.Г.
Г12 
 
Конструирование программного обеспечения : учебное пособие / 
под ред. Л.Г. Гагариной. — Москва : ИНФРА-М, 2023. — 319 с. — (Высшее образование). — DOI 10.12737/1893880.
ISBN 978-5-16-017861-5 (print)
ISBN 978-5-16-110871-0 (online)
В учебном пособии рассматриваются основные понятия и определения, 
классификация программного обеспечения, этапы создания программного 
продукта в рамках жизненного цикла, освещается современное состояние 
технологий разработки программных продуктов. Изложены существующие подходы к оценке качества процессов создания программного обеспечения, произведены анализ требований и определение спецификаций 
программного обеспечения. Большое внимание уделено вопросам проектирования программного обеспечения, его надежности, коллективной разработки с помощью современных систем контроля версий. Теоретический 
материал сопровождается практикумом в виде лабораторных работ по изложенной тематике.
Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения.
Для студентов и преподавателей высших учебных заведений технического профиля, а также для специалистов любой предметной области, 
проявивших интерес к современному состоянию методов и средств программирования.

УДК 004.4(075.8)
ББК 32.972я73

Авторский коллектив

Гагарина Лариса Геннадьевна — доктор технических наук, про
фессор, директор Института системной и программной инженерии 
и информационных технологий Нацио нального исследовательского университета «Московский институт электронной техники» 
(введение).

Гаращенко Антон Витальевич — кандидат технических наук, 

доцент Института системной и программной инженерии и информационных технологий Нацио нального исследовательского 
университета «Московский институт электронной техники», руководитель направления центрального аппарата ПАО «Сбербанк» 
(глава 2, 4, 5, 8, 9, лабораторный практикум).

Акимова Елена Николаевна — доктор физико-математических 

наук, доцент по специальности «Вычислительная математика», 
ведущий научный сотрудник Института математики и механики 
имени Н.Н. Красовского Уральского отделения Российской академии наук, профессор Уральского федерального университета 
имени первого Президента России Б.Н. Ельцина (глава 7; приложения).

Капитанов Андрей Иванович — кандидат технических наук, 

 доцент Института системной и программной инженерии и информационных технологий Нацио нального исследовательского университета «Московский институт электронной техники» (глава 6).

Капитанова Илона Ильдусовна — старший преподаватель Ин
ститута системной и программной инженерии и информационных 
технологий Нацио нального исследовательского университета 
«Московский институт электронной техники» (глава 1).

Тихонов Мартин Робертович — кандидат технических наук, до
цент Института системной и программной инженерии и информационных технологий Нацио нального исследовательского университета «Московский институт электронной техники» (глава 3).

Введение

В настоящее время в условиях развивающегося информационного общества с учетом всеобщего применения и распространения 
компьютерных и телекоммуникационных технологий и систем, 
а также в связи с реализацией объявленной ранее Президентом 
Российской Федерации программы на создание в стране единого 
образовательного и информационного пространства, появление 
учебного пособия, освещающего непосредственно теоретические 
и практические вопросы разработки программного обеспечения, 
более чем актуально.
Кроме того, поскольку информатизация общества невозможна 
без хорошо развитой коммуникационной инфраструктуры, наибольший спрос ожидает научно-техническую литературу прикладного характера. К ней и относится представленная книга. К тому же 
системное изложение материала, богатый иллюстративный материал и масса примеров, несомненно, придают изданию особую ценность.
Согласно Концепции информатизации сферы образования 
Российской Федерации и положениям Федеральной целевой 
программы «Электронная Россия» одной из особенностей перспективной системы образования в нашей стране является опережающее образование, в рамках которого изучаются последние достижения в области информатизации, ее средства, методы, а также 
перспективы дальнейшего развития и практического использования. Анализ содержания представленного пособия позволяет 
утверждать, что его следует рассматривать не только как важное 
средство информационной поддержки учебного процесса, как эффективный педагогический инструмент, но и как необходимый инструментарий опережающего образования.
В представленном учебном пособии достаточно полно изложены 
понятия жизненного цикла программного обеспечения, процесс его 
производства: методы, технология и инструментальные средства, 
тестирование, отладка и сопровождение программ.
Основное отличие данного пособия от аналогичных изданий 
заключается в освещении основных дидактических единиц дисциплины «Конструирование программного обеспечения» с учетом 
пропедевтической подготовки потенциального читателя — студента 
высшего учебного заведения. Именно поэтому только на базе основных понятий и определений в области разработки программных 

средств возможно освещение проблем документирования, проектирования программного обеспечения; освещение технологического цикла разработки программных систем. Весьма интересными 
и свое временными для будущих специалистов современного глобального общества являются разделы об организации коллективной 
работы по созданию программ и организации процесса разработки 
с применением инструментальных средств поддержки.
Материал пособия прошел апробацию в Московском институте 
электронной техники и используется в учебном процессе различных направлений подготовки.
Дисциплина «Конструирование программного обеспечения» 
участвует в формировании общепрофессио нальной компетенции 
ОПК-6 — способность разрабатывать алгоритмы и программы, 
пригодные для практического использования, применять основы 
информатики и программирования к проектированию, конструированию и тестированию программных продуктов.
В результате освоения дисциплины студент должен:
знать
 
• основы объектно-ориентированного подхода к разработке унифицированного процесса и современных технологий разработки 
программного обеспечения;
 
• унифицированный процесс и современные технологии разработки программного обеспечения;
уметь
 
• применять современные технологии и инструмен ты для реализации различных процессов (унифицированного, экстремального программирования, Scrum-процесса) конструирования 
программного обеспечения;
 
• демонстрировать опыт разработки и тестирования программного 
обеспечения для решения профессио нальных задач;
владеть
 
• опытом разработки и тестирования программного обеспечения 
для решения практических задач.

Глава 1. 

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

1.1. ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ
 В ИСТОРИЧЕСКОМ АСПЕКТЕ

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

 

Программа

Данные

Рис. 1.1. Структура первых программ

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

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

 

Основная программа

Данные

1
2
n

Подпрограммы

. . .

Рис. 1.2. Архитектура программы с глобальной областью данных

Слабым местом такой архитектуры было то, что при увеличении 
количества подпрограмм возрастала вероятность искажения части 
глобальных данных какой-либо подпрограммой. Например, подпрограмма поиска корней уравнения на заданном интервале по методу деления отрезка пополам меняет величину интервала. Если 
при выходе из подпрограммы не предусмотреть восстановления 
первоначального интервала, то в глобальной области окажется 
неверное значение интервала. Чтобы сократить количество таких 
ошибок, было предложено в подпрограммах размещать локальные 
данные (рис. 1.3).
Сложность разрабатываемого программного обеспечения 
при использовании подпрограмм с локальными данными попрежнему ограничивалась возможностью программиста отслежи
вать процессы обработки данных, но уже на новом уровне. Однако 
появление средств поддержки подпрограмм позволило осуществлять разработку программного обеспечения нескольким программистам параллельно.

 

Основная программа

Глобальные данные

1
2
n

Подпрограммы с локальными данными

. . .

Данные
Данные
Данные

Рис. 1.3. Архитектура программы, использующей подпрограммы 
с локальными данными

В начале 1960-х гг. разразился «кризис программирования». Он 
выражался в том, что фирмы, взявшиеся за разработку сложного 
программного обеспечения, такого как операционные системы, 
срывали все сроки завершения проектов [9]. Проект устаревал 
раньше, чем был готов к внедрению, увеличивалась его стоимость, 
и в результате многие проекты так никогда и не были завершены.
Объективно все это было вызвано несовершенством технологии 
программирования. Прежде всего, стихийно использовалась разработка «снизу-вверх» — подход, при котором вначале проектировали 
и реализовывали сравнительно простые подпрограммы, из которых 
затем пытались построить сложную программу. При отсутствии 
четких моделей описания подпрограмм и методов их проектирования создание каждой подпрограммы превращалось в непростую задачу, интерфейсы подпрограмм получались сложными, и при сборке 
программного продукта выявлялось большое количество ошибок 
согласования. Исправление таких ошибок, как правило, требовало 
серьезного изменения уже разработанных подпрограмм, что еще 
больше осложняло ситуацию, так как при этом в программу часто 

вносились новые ошибки, которые также необходимо было исправлять. В конечном счете процесс тестирования и отладки программ 
занимал более 80% времени разработки, если вообще когда-нибудь 
заканчивался. На повестке дня самым серьезным образом стоял 
вопрос разработки технологии создания сложных программных продуктов, снижающей вероятность ошибок проектирования.
Анализ причин возникновения большинства ошибок позволил 
сформулировать новый подход к программированию, который был 
назван «структурным» [64, 68].
Второй этап — структурный подход к программированию 
(1960–1970-е гг.). Структурный подход к программированию 
представляет собой совокупность рекомендуемых технологических 
приемов, охватывающих выполнение всех этапов разработки программного обеспечения. В основе структурного подхода лежит 
декомпозиция (деление на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40–50 операторов) подпрограмм. С появлением других принципов декомпозиции (объектного, логического и т.д.) данный способ получил 
название процедурной декомпозиции.
В отличие от используемого ранее процедурного подхода к декомпозиции структурный подход требовал представления задачи 
в виде иерархии подзадач простейшей структуры. Проектирование, 
таким образом, осуществлялось «сверху вниз» и подразумевало 
реализацию общей идеи, обеспечивая проработку интерфейсов подпрограмм. Одновременно вводились ограничения на конструкции 
алгоритмов, рекомендовались формальные модели их описания, 
а также специальный метод проектирования алгоритмов — метод 
пошаговой детализации.
Поддержка принципов структурного программирования была 
заложена в основу так называемых процедурных языков программирования. Как правило, они включали основные «структурные» 
операторы передачи управления, поддерживали вложение подпрограммм, локализацию и ограничение области «видимости» данных. 
Среди наиболее известных языков этой группы стоит назвать PL/1, 
ALGOL-68, Pascal, С.
Одновременно со структурным программированием появилось 
огромное количество языков, базирующихся на других концепциях, но большинство из них не выдержало конкуренции. Какието языки были просто забыты, идеи других были впоследствии использованы в следующих версиях развиваемых языков.
Дальнейший рост сложности и размеров разрабатываемого 
программного обеспечения потребовал развития структуриро
вания данных. Как следствие этого, в языках появляется возможность определения пользовательских типов данных. Одновременно 
усилилось стремление разграничить доступ к глобальным данным 
программы, чтобы уменьшить количество ошибок, возникающих 
при работе с глобальными данными. В результате появилась и начала развиваться технология модульного программирования.
Модульное программирование предполагает выделение групп 
подпрограмм, использующих одни и те же глобальные данные 
в отдельно компилируемые модули (библиотеки подпрограмм), например модуль графических ресурсов, модуль подпрограмм вывода 
на принтер (рис. 1.4). Связи между модулями при использовании 
этой технологии осуществляются через специальный интерфейс, 
в то время как доступ к реализации модуля (телам подпрограмм 
и некоторым «внутренним» переменным) запрещен. Эту технологию поддерживают современные версии языков Pascal и С (C++), 
языки Ада и Modula, Perl, Python, Ruby.

 
Основная программа

Глобальные данные

Модуль 1

Данные

1

Данные

n1

Данные
. . .

Подпрограммы с локальными 
данными

Модуль k

Данные

1

Данные

nk

Данные
. . .

Подпрограммы с локальными 
данными

. . .

Модули с локальными данными и подпрограммами

Рис. 1.4. Архитектура программы, состоящей из модулей

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

К покупке доступен более свежий выпуск Перейти