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

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

Покупка
Основная коллекция
Артикул: 086270.14.01
К покупке доступен более свежий выпуск Перейти
Рассматриваются основные понятия и определения, классификация программного обеспечения, этапы создания программного продукта в рамках жизненного цикла, освещается современное состояние технологий разработки программных продуктов. Изложены существующие подходы к оценке качества процессов создания программного обеспечения, произведены анализ требований и определение спецификаций программного обеспечения. Большое внимание уделено вопросам проектирования ПО, его надежности, коллективной разработки с помощью современных систем контроля версий. Теоретический материал сопровождается практикумом в виде лабораторных работ по изложенной тематике. Предназначено для студентов и преподавателей высших учебных заведений технического профиля, а также для специалистов любой предметной области, проявивших интерес к современному состоянию методов и средств программирования.
33
79
158
0
Гагарина, Л. Г. Технология разработки программного обеспечения : учебное пособие / Л.Г. Гагарина, Е.В. Кокорева, Б.Д. Сидорова-Виснадул ; под ред. Л.Г. Гагариной. — Москва : ФОРУМ : ИНФРА-М, 2022. — 400 с. — (Высшее образование: Бакалавриат). - ISBN 978-5-8199-0707-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/1699927 (дата обращения: 28.03.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.

ВЫСШЕЕ ОБРАЗОВАНИЕ - БАКАЛАВРИАТ серия основана в 1 996 г.



Л.Г. Гагарина, Е.В. Кокорева, Б.Д. Сидорова-Виснадул


ТЕХНОЛОГИЯ
РАЗРАБОТКИ
ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ

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

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

Допущено Учебно-методическим объединением вузов по университетскому политехническому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлениям подготовки 09.04.01 и 09.03.03 «Информатика и вычислительная техника»



Электронно-

        znanium.com

Москва
ИД «ФОРУМ» — ИНФРА-М 2022
УДК 004(075.8)
ББК 32.973-018я73
      Г12



      Рецензенты:
         Т.Н. Романова, кандидат физико-математических наук, доцент кафедры «Программное обеспечение ЭВМ и информационные технологии» Московского государственного технического университета им. Н.Э. Баумана;
         О.И. Лисов, доктор технических наук, профессор Института искусств и информационных технологий

      Гагарина Л.Г.
Г12 Технология разработки программного обеспечения : учебное пособие / Л.Г. Гагарина, Е.В. Кокорева, Б.Д. Сидорова-Виснадул ; под ред. Л.Г. Гагариной. — Москва : ИД «ФОРУМ» : ИНФРА-М, 2022. — 400 с. — (Высшее образование: Бакалавриат).

         ISBN 978-5-8199-0707-8 (ИД «ФОРУМ»)
         ISBN 978-5-16-013286-0 (ИНФРА-М, print)
         ISBN 978-5-16-104071-3 (ИНФРА-М, online)

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

УДК 004(075.8)
ББК 32.973-018я73







ISBN 978-5-8199-0707-8 (ИД «ФОРУМ»)
ISBN 978-5-16-013286-0 (ИНФРА-М, print)
ISBN 978-5-16-104071-3 (ИНФРА-М, online)

© Гагарина Л.Г., Кокорева Е.В., Сидорова-Виснадул Б.Д., 2015
© ИД «ФОРУМ», 2015
                Введение








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


процесс его производства: методы, технология и инструментальные средства, тестирование, отладка и сопровождение программ.
    Основное отличие данного пособия от аналогичных изданий заключается в освещении основных дидактических единиц дисциплины «Технология разработки программного обеспечения» с учетом пропедевтической подготовки потенциального читателя — студента высшего учебного заведения. Именно поэтому только на базе основных понятий и определений в области разработки программных средств возможно освещение проблем документирования, проектирования программного обеспечения; рассмотрение вопросов технологического цикла разработки программных систем. Весьма интересными и своевременными для будущих специалистов современного глобального общества являются разделы об организации коллективной работы по созданию программ и организации процесса разработки с применением инструментальных средств поддержки.
    Материал пособия прошел апробацию в Московском институте электронной техники и используется в учебном процессе различных факультетов.
Глава 1




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










        1.1. Технология программирования в историческом аспекте


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


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

   Появление ассемблеров позволило вместо двоичных или 16-ричных кодов использовать символические имена данных и
Глава 1. Программное обеспечение

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


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

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

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

7

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

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

процесс тестирования и отладки программ занимал более 80 % времени разработки, если вообще когда-нибудь заканчивался. На повестке дня самым серьезным образом стоял вопрос разработки технологии создания сложных программных продуктов, снижающей вероятность ошибок проектирования.
   Анализ причин возникновения большинства ошибок позволил сформулировать новый подход к программированию, который был назван «структурным» [19, 23].
   Второй этап — структурный подход к программированию (60-70-е годы XX в.). Структурный подход к программированию представляет собой совокупность рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки программного обеспечения. В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40—50 операторов) подпрограмм. С появлением других принципов декомпозиции (объектного, логического и т. д.) данный способ получил название процедурной декомпозиции.
   В отличие от используемого ранее процедурного подхода к декомпозиции, структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры. Проектирование, таким образом, осуществлялось «сверху—вниз» и подразумевало реализацию общей идеи, обеспечивая проработку интерфейсов подпрограмм. Одновременно вводились ограничения на конструкции алгоритмов, рекомендовались формальные модели их описания, а также специальный метод проектирования алгоритмов — метод пошаговой детализации.
   Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования. Как правило, они включали основные «структурные» операторы передачи управления, поддерживали вложение подпрограмм, локализацию и ограничение области «видимости» данных. Среди наиболее известных языков этой группы стоит назвать PL/1, ALGOL-68, Pascal, С.
   Одновременно со структурным программированием появилось огромное количество языков, базирующихся на других концепциях, но большинство из них не выдержало конкуренции. Какие-то языки были просто забыты, идеи других были в дальнейшем использованы в следующих версиях развиваемых языков.
   Дальнейший рост сложности и размеров разрабатываемого программного обеспечения потребовал развития структурирова
1.1. Технология программирования в историческом аспекте

9

ния данных. Как следствие этого в языках появляется возможность определения пользовательских типов данных. Одновременно усилилось стремление разграничить доступ к глобальным данным программы, чтобы уменьшить количество ошибок, возникающих при работе с глобальными данными. В результате появилась и начала развиваться технология модульного программирования.
    Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули (библиотеки подпрограмм), например модуль графических ресурсов, модуль подпрограмм вывода на принтер (рис. 1.4). Связи между модулями при использовании данной технологии осуществляются через специальный интерфейс, в то время как доступ к реализации модуля (телам подпрограмм и некоторым «внутренним» переменным) запрещен. Эту технологию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.


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

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

специально оговоренные межмодульные интерфейсы. Кроме того, модули в дальнейшем без изменений можно было использовать в других разработках, что повысило производительность труда программистов.
    Практика показала, что структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 операторов [10]. Узким местом модульного программирования является то, что ошибка в интерфейсе при вызове подпрограммы выявляется только при выполнении программы (из-за раздельной компиляции модулей обнаружить эти ошибки раньше невозможно). При увеличении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдельных частей программы становится практически невозможно. Для разработки программного обеспечения большого объема было предложено использовать объектный подход.
    Третий этап — объектный подход к программированию (с середины 80-х до конца 90-х годов XX в.). Объектно-ориентированное программирование определяется как технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств [10, 24, 29]. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений (рис. 1.5).
    Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах XX в. Естественный для языков моделирования способ представления программы получил развитие в другом специализированном языке моделирования — языке Smalltalk (70-е годы XX в.), а затем был использован в новых версиях универсальных языков программирования, таких как Pascal, C++, Modula, Java.
    Основным достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (объектов) програм-
К покупке доступен более свежий выпуск Перейти