
- •Введение
- •Практическая работа №1. Тема: технология программирования. Основные понятия и подходы.
- •1.1. Назначение технологии программирования
- •1.2. История развития технологии программирования
- •1.2.1. Дореволюционный период
- •1.2.2. «Революция в программировании»
- •1.2.3. Послереволюционный период
- •1.3. Типы программных проектов
- •1.4. Составные части технологии программирования
- •1.5. Проект, продукт, процесс и персонал
- •Вопросы для рассмотрения.
- •Рекомендуемая литература по теме.
- •Практическая работа №2. Тема: приемы обеспечения технологичности программных продуктов.
- •2.1. Циклический характер разработки
- •2.2. Основные понятия технологии программирования
- •2.2.1. Процессы и модели
- •2.2.2. Фазы и витки
- •2.2.3. Вехи и артефакты
- •2.2.4. Заинтересованные лица и работники
- •2.3. Выявление и анализ требований
- •2.3.1. Требования к программному обеспечению
- •2.3.2. Схема разработки требований
- •2.3.3. Управление требованиями
- •2.4. Архитектурное и детальное проектирование
- •2.4.1. Архитектурное проектирование
- •2.4.2. Детальное проектирование
- •2.5. Реализация и кодирование
- •2.6. Тестирование и верификация
- •2.6.1. Процесс контроля качества
- •2.6.2. Методы «белого ящика» и «черного ящика»
- •2.6.3. Инспектирование и обзоры
- •2.6.4. Цели тестирования
- •2.6.5. Верификация, валидация и системное тестирование
- •2.7. Сопровождение и продолжающаяся разработка
- •Вопросы для рассмотрения.
- •Рекомендуемая литература по теме.
- •Практическая работа №3. Тема: определение требований к программному обеспечению и исходных данных для его проектирования. Модели процесса разработки.
- •3.1. Водопадные и конвейерные модели
- •3.2. Спиральные и инкрементные модели
- •3.4. Конструирование модели процесса
- •3.4.1. Выявление требований к процессу
- •3.4.2. Используемые фазы, вехи и артефакты
- •3.4.2.1. Фаза «Анализ»
- •3.4.2.2. Фаза «Проектирование»
- •3.4.2.3. Фаза «Реализация»
- •3.4.2.4. Фаза «Стабилизация»
- •3.4.2.5. Фаза «Внедрение»
- •3.4.3. Выбор архитектуры процесса.
- •3.4.3.1. Типы проектов
- •3.4.3.2. Модель процесса сверх легкого проекта
- •3.4.3.3. Модель процесса легкого проекта
- •3.4.3.4. Модель процесса тяжелого проекта
- •3.4.3.5. Модель процесса сверх тяжелого проекта
- •3.4.3.6. Занятость исполнителей
- •3.4.4. Порядок проведения типового проекта
- •3.4.4.1. Этап 1. Подготовка к проекту
- •3.4.4.2. Сбор и анализ предварительной информации
- •3.4.4.3. Формирование бригады проекта
- •3.4.4.4. Подготовка исходных документов
- •3.4.4.5. Этап 2. Работа над проектом
- •3.4.4.6. Процедура выполнения фазы проекта
- •3.4.4.7. Подготовка результирующих материалов вех
- •3.4.4.8. Этап 3. Завершение проекта
- •3.4.4.9. Архивирование результатов работы
- •3.4.4.10. Подведение итогов проекта
- •3.4.5. Документированные процедуры
- •3.4.5.3. Проверка качества материалов
- •3.4.6. Выводы
- •Вопросы для рассмотрения.
- •Рекомендуемая литература по теме
- •Практическая работа №4. Тема: анализ требований и определение спецификаций программного обеспечения при структурном подходе.
- •4.1. Спецификации программного обеспечения при структурном подходе
- •4.2. Определение понятий и видов требований
- •Виды требований
- •4.1.2. Анализ и сбор требований
- •4.1.3. Инженерия требований по
- •4.2. Трассирование требований
- •Вопросы для рассмотрения.
- •Рекомендуемая литература по теме
1.2.3. Послереволюционный период
Революция была успешной - в исторически кратчайшие сроки технология программирования оформилась как инженерная дисциплина, и некоторые ее положения повсеместно были внедрены в практику. Результаты проявились незамедлительно - средняя производительность труда в программировании увеличилась в несколько раз. Повысилась и надежность, за счет развития практики систематического тестирования. Кризис разрешился. Развитее технологии программирования продолжалось, но уже не революционным, а эволюционным путем. Взятые за основу, идеи 60-х годов развивались и совершенствовались. Структурное программирование переросло в объектно-ориентированное, на смену водопадным моделям процесса пришли итерационные, метод хирургической бригады дал начало целому спектру моделей команды разработчиков. Но эти подходы не были революционно новыми, они улучшали и совершенствовали уже известное 4.
Однако время не стоит на месте. Аппаратное обеспечение стремительно прогрессирует. Сфера применения компьютеров расширяется все больше. Уже сейчас без них нигде нельзя обойтись, компьютеры применяются повсеместно. Пока еще слово «компьютер» ассоциируется у среднего жителя нашей планеты с образом персонального компьютера, с экраном и клавиатурой, а программирование ассоциируется с программированием на персональном компьютере и для персонального компьютера. Но это только пока. В самое ближайшее время компьютеры из устройств, которые используются очень часто и во многих местах, превратятся в устройства, которые используются везде и всегда. Речь идет о том, что сейчас называется встроенными системами. Персональные компьютеры выпускаются миллионами штук в год. Встроенные системы выпускаются миллиардами штук в год, а будут выпускаться многими миллиардами! И все эти устройства требуют для своей работы программного обеспечения. Не следует думать, что программировать эти устройства легко. Напротив. Уже сегодня возможности компьютера, скрытого в вашем мобильном телефоне, превосходят возможности того компьютера, которым пользовался Дейкстра, когда писал свое знаменитое письмо. Вполне вероятно, что консервативного усовершенствования старых идей, которого пока хватало для организации программирования персональных компьютеров, уже не хватит для организации программирования необозримого парка встроенных систем. Тогда технологию программирования ждут новые, действительно революционные изменения. Необходимо быть готовым к этому. Подчеркнем, что предлагаемая классификация - не более чем мнемоническая схема для удобства запоминания и анализа. Она не раскрывает причин изменений в технологии программирования.
4
Из всего спектра технологий
программирования, появившихся за
последнее время, только для
аспекто-ориентированного программирования
трудно указать предтечу в пионерских
работах конца 60-х начала 70-х годов. Все
остальные «новинки» последних лет -
прямые аналоги либо хорошо забытых,
либо малоизвестных работ прошлых лет.
1.3. Типы программных проектов
Множество программ неоднородно - спектр реальных и возможных программных систем очень широк. Программы можно классифицировать по множеству различных факторов. Например:
тип программно-аппаратной платформы, на которой выполняется программа: встроенная систем, настольное приложение, сетевой сервис;
размер программы (измеренный в байтах, командах, операторах, строчках кода или иных единицах);
число пользователей: однопользовательская программа «для себя», внутренняя программа организации, программный продукт общего пользования;
регулярность использования: разовая программа, регулярно используемая программа, постоянно работающая программа;
источник разработки: заказная разработка, инициативная разработка, конкурсная разработка;
предметная область: критически важная программа специального применения, приложение для автоматизации бизнес-процессов, демонстрационный прототип.
Этот список можно продолжать и продолжать, причем как в длину, указывая новые факторы, так и в ширину, указывая новые значения факторов. Огласить «весь список» очень трудно.
Важно, что при проведении проектов по разработке программ разных типов целесообразно использовать различные технологии. Программу управления ракетой разрабатывают не так, как информационную систему отдела кадров. Очень часто апологеты конкретных технологий, особенно новых, еще не зарекомендовавших себя широко, смело утверждают, что их технология «лучшая в мире». Очень может быть, что новая рекламируемая технология действительно сейчас лучшая для того типа программных проектов, для которого она была придумана. Но совершенно невероятно, чтобы она оказалась действительно лучшей для всех типов программных проектов, везде и на все времена. При описании технологий программирования необходимо указывать типы программных проектов, для которых данная технология применима - то есть область применимости.