ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.11.2019
Просмотров: 9452
Скачиваний: 184
ПРЕДИСЛОВИЕ
До
последнего
времени
элементы
технологии
разработки
программного
обеспечения
студенты
изучали
в
таких
курсах
,
как
«
Алгоритмические
языки
и
программирование
»
и
«
Системное
программирование
»,
параллельно
с
основным
материалом
,
что
не
позволяло
сконцентрироваться
на
указанных
вопросах
.
Однако
сравнительно
недавно
в
учебных
планах
специальностей
,
связанных
с
информатикой
,
появился
курс
«
Технология
программирования
»,
полностью
посвященный
этой
теме
.
В
предлагаемом
учебнике
сделана
попытка
обобщения
и
методического
осмысления
опыта
,
накопленного
специалистами
в
области
разработки
программного
обеспечения
на
протяжении
всей
истории
существования
.
Приведенные
сведения
могут
быть
полезны
при
выполнении
учебных
проектов
и
небольших
программных
продуктов
.
В
создании
данного
учебника
в
той
или
иной
степени
участвовало
много
заинтересованных
лиц
.
Хочется
от
души
поблагодарить
:
редактора
издательства
Овчеренко
Н
.
Е
.,
поддержавшую
идею
написания
данной
книги
;
заведующих
кафедрами
«
Компьютерные
системы
и
сети
»
Сюзева
В
.
В
.
и
«
Программирования
и
информационные
технологии
»
Трусова
Б
.
Г
. -
за
всестороннее
содействие
;
моего
мужа
-
профессора
кафедры
«
Компьютерные
системы
и
сети
»
Овчинникова
В
.
А
.
-
за
помощь
и
поддержку
;
преподавателей
университета
:
Борисова
С
.
В
.,
Курова
А
.
В
. -
за
предоставленную
литературу
изданий
прошлых
лет
;
Романову
Т
.
Н
.,
Пугачева
Е
.
К
.,
Ничушкину
Т
.
Н
.,
Волосатову
Т
.
М
.
и
Балдина
А
.
В
. -
за
материалы
и
советы
по
содержанию
учебника
.
Автор
также
глубоко
признательна
рецензентам
:
коллективу
кафедры
«
Компьютерные
системы
и
технологии
»
МИФИ
во
главе
с
д
-
ром
техн
.
наук
,
профессором
Забродиным
Л
.
Д
.
и
коллективу
кафедры
«
ЭВМ
,
комплексы
и
сети
»
МАИ
во
главе
с
д
-
ром
техн
.
наук
,
профессором
Бреховым
О
.
М
.,
чьи
ценные
замечания
позволили
улучшить
качество
книги
.

ВВЕДЕНИЕ
Создание
программной
системы
-
весьма
трудоемкая
задача
,
особенно
в
наше
время
,
когда
обычный
объем
программного
обеспечения
превышает
сотни
тысяч
операторов
.
Будущий
специалист
в
области
разработки
программного
обеспечения
должен
иметь
представление
о
методах
анализа
,
проектирования
,
реализации
и
тестирования
программных
систем
,
а
также
ориентироваться
в
существующих
подходах
и
технологиях
.
Изложение
материала
учебника
строится
в
соответствии
с
основными
этапами
разработки
программного
обеспечения
.
Исключением
являются
первые
главы
,
в
которых
рассмотрены
общие
вопросы
технологии
программирования
.
В
первой
главе
проанализирована
история
развития
технологии
программирования
,
показано
,
что
в
основе
разработки
программного
обеспечения
лежит
блочно
-
иерархический
подход
,
рассмотрены
особенности
применения
этого
подхода
к
разработке
программных
продуктов
.
Вторая
глава
содержит
описание
приемов
обеспечения
качества
программного
обеспечения
:
основных
положений
структурного
,
модульного
и
защитного
программирования
.
В
ней
также
приведены
некоторые
рекомендации
,
например
,
по
стилю
оформления
программ
.
В
третьей
главе
рассматриваются
проблемы
,
связанные
с
постановкой
задачи
:
от
классификации
программных
продуктов
до
разработки
технического
задания
и
принятия
основных
решений
начального
этапа
проектирования
,
например
,
выбора
подхода
,
среды
и
языка
программирования
.
Четвертая
и
пятая
главы
посвящены
особенностям
разработки
программного
обеспечения
при
структурном
подходе
;
четвертая
-
анализу
различных
моделей
разрабатываемого
программного
обеспечения
,
используемых
на
этапе
уточнения
спецификаций
,
а
пятая
-
методикам
проектирова
-
ния
.
Шестая
и
седьмая
главы
содержат
аналогичный
материал
для
объектного
подхода
.
В
качестве
основного
языка
описания
моделей
анализа
и
проектирования
при
объектном
подходе
используется
UML,
как
мощное
и
практически
стандартное
средство
описания
объектных
разработок
.
В
восьмой
главе
подробно
рассмотрены
проблемы
проектирования
пользовательского
интерфейса
и
предлагаются
соответствующие
модели
.
Девятая
глава
посвящена
тестированию
программных
продуктов
как
по
частям
,
так
и
в
целом
,
десятая
-
методам
,
средствам
и
методикам
отладки
разрабатываемого
программного
обеспечения
.
В
одиннадцатой
главе
приведены
сведения
и
рекомендации
по
разработке
программной
документации
.
Материал
сопровождается
большим
количеством
сравнительно
простых
примеров
,
причем
по
возможности
использованы
три
примера
разработки
,
для
которых
рассмотрены
различные
аспекты
проектирования
.
Курс
обучения
целесообразно
завершать
курсовым
проектом
или
курсовой
работой
,
целью
которых
должно
быть
создание
небольшого
,
но
завершенного
программного
продукта
(
в
отличие
от
небольших
и
,
как
правило
,
недокументированных
программ
,
которые
студенты
пишут
на
лабораторных
работах
при
изучении
основ
программирования
и
/
или
конкретных
языков
).
Проект
должен
начинаться
с
составления
и
утверждения
технического
задания
и
сопровождаться
подготовкой
необходимой
программной
документации
.

1.
ТЕХНОЛОГИЯ
ПРОГРАММИРОВАНИЯ
.
ОСНОВНЫЕ
ПОНЯТИЯ
И
ПОДХОДЫ
Программирование
—
сравнительно
молодая
и
быстро
развивающаяся
отрасль
науки
и
техники
.
Опыт
ведения
реальных
разработок
и
совершенствования
имеющихся
программных
и
технических
средств
постоянно
переосмысливается
,
в
результате
чего
появляются
новые
методы
,
методологии
и
технологии
,
которые
,
в
свою
очередь
,
служат
основой
более
современных
средств
разработки
программного
обеспечения
.
Исследовать
процессы
создания
новых
технологий
и
определять
их
основные
тенденции
целесообразно
,
сопоставляя
эти
технологии
с
уровнем
развития
программирования
и
особенностями
имеющихся
в
распоряжении
программистов
программных
и
аппаратных
средств
.
1.1.
Технология
программирования
и
основные
этапы
ее
развития
Технологией
программирования
называют
совокупность
методов
и
средств
,
используемых
в
процессе
разработки
программного
обеспечения
.
Как
любая
другая
технология
,
технология
программирования
представляет
собой
набор
технологических
инструкций
,
включающих
:
•
указание
последовательности
выполнения
технологических
операций
;
•
перечисление
условий
,
при
которых
выполняется
та
или
иная
операция
;
•
описания
самих
операций
,
где
для
каждой
операции
определены
исходные
данные
,
результаты
,
а
также
инструкции
,
нормативы
,
стандарты
,
критерии
и
методы
оценки
и
т
.
п
. (
рис
.
1.1).
Кроме
набора
операций
и
их
последовательности
,
технология
также
определяет
способ
описания
проектируемой
системы
,
точнее
модели
,
используемой
на
конкретном
этапе
разработки
.
Различают
технологии
,
используемые
на
конкретных
этапах
разработки
или
для
решения
отдельных
задач
этих
этапов
,
и
технологии
,
охватывающие
несколько
этапов
или
весь
процесс
разработки
.
В
основе
первых
,
как
правило
,
лежит
ограниченно
применимый
метод
,
позволяющий
решить
конкретную
задачу
.
В
основе
вторых
обычно
лежит
базовый
метод
или
подход
,
Рис
. 1.1.
Структура
описания
технологической
операции
определяющий
совокупность
методов
,
используемых
на
разных
этапах
разработки
,
или
методологию
.
Чтобы
разобраться
в
существующих
технологиях
программирования
и
определить
основные
тенденции
их
развития
,
целесообразно
рассматривать
эти
технологии
в
историческом
контексте
,
выделяя
основные
этапы
развития
программирования
,
как
науки
.
Первый
этап
- «
стихийное
»
программирование
.
Этот
этап
охватывает
период
от
момента
Исходные
данные
в
стандартном
представлении
(
документы
,
рабочие
материалы
,
результаты
предыдущей
операции
)
Результаты
в
стандартном
представлении
Методические
материалы
,
инструкции
,
нормативы
и
стандарты
,
критерии
оценки
результатов
Исполнители
,
программные
и
технические
средства

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

Слабым
местом
такой
архитектуры
было
то
,
что
при
увеличении
количества
подпрограмм
возрастала
вероятность
искажения
части
глобальных
данных
какой
-
либо
подпрограммой
.
Например
,
подпрограмма
поиска
корней
уравнения
на
заданном
интервале
по
методу
деления
отрезка
пополам
меняет
величину
интервала
.
Если
при
выходе
из
подпрограммы
не
предусмотреть
восстановления
первоначального
интервала
,
то
в
глобальной
области
окажется
неверное
значение
интервала
.
Чтобы
сократить
количество
таких
ошибок
,
было
предложено
в
подпрограммах
размещать
локальные
данные
(
рис
. 1.4).
Сложность
разрабатываемого
программного
обеспечения
при
использовании
подпрограмм
с
локальными
данными
по
-
прежнему
ограничивалась
возможностью
программиста
отслеживать
процессы
обработки
данных
,
но
уже
на
новом
уровне
.
Однако
появление
средств
поддержки
подпрограмм
позволило
осуществлять
разработку
программного
обеспечения
нескольким
программистам
параллельно
.
В
начале
60-
х
годов
XX
в
.
разразился
«
кризис
программирования
».
Он
выражался
в
том
,
что
фирмы
,
взявшиеся
за
разработку
сложного
программного
обеспечения
,
такого
,
как
операционные
системы
,
срывали
все
сроки
завершения
проектов
[8].
Проект
устаревал
раньше
,
чем
был
готов
к
внедрению
,
увеличивалась
его
стоимость
,
и
в
результате
многие
проекты
так
никогда
и
не
были
завершены
.
Объективно
все
это
было
вызвано
несовершенством
технологии
программирования
.
Прежде
всего
стихийно
использовалась
разработка
«
снизу
-
вверх
» -
подход
,
при
котором
вначале
проектировали
и
реализовывали
сравнительно
простые
подпрограммы
,
из
которых
затем
пытались
построить
сложную
программу
.
В
отсутствии
четких
моделей
описания
подпрограмм
и
методов
их
проектирования
создание
каждой
подпрограммы
превращалось
в
непростую
задачу
,
интерфейсы
подпрограмм
получались
сложными
,
и
при
сборке
программного
продукта
выявлялось
большое
количество
ошибок
согласования
.
Исправление
таких
ошибок
,
как
правило
,
требовало
серьезного
изменения
уже
разработанных
подпрограмм
,
что
еще
более
осложняло
ситу
-
ацию
,
так
как
при
этом
в
программу
часто
вносились
новые
ошибки
,
которые
также
необходимо
было
исправлять
...
В
конечном
итоге
процесс
тестирования
и
отладки
программ
занимал
более
80
%
времени
разработки
,
если
вообще
когда
-
нибудь
заканчивался
.
На
повестке
дня
самым
серьезным
образом
стоял
вопрос
разработки
технологии
создания
сложных
программных
про
-
дуктов
,
снижающей
вероятность
ошибок
проектирования
.
Анализ
причин
возникновения
большинства
ошибок
позволил
сформулировать
новый
подход
к
программированию
,
который
был
назван
«
структурным
» [19, 23].
Второй
этап
-
структурный
подход
к
программированию
(60-70-
е
годы
XX
в
.).
Структурный
подход
к
программированию
представляет
собой
совокупность
рекомендуемых