- •Введение
- •Практическая работа №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. Трассирование требований
- •Вопросы для рассмотрения.
- •Рекомендуемая литература по теме
2.1. Циклический характер разработки
Давно замечено, что программа за время жизни претерпевает многочисленные изменения своей формы, зависящие от состояния процесса разработки программы.
Жизненный цикл программы - это совокупность и последовательность изменений формы программы за все время ее существования.
5
Чего, к сожалению, не случается с
программистами.
Замечание: Программа является преимущественно идеальным (а не материальным) объектом, поэтому в жизненный цикл включаются и те "эмбриональные" формы, в которых программа существует во время разработки. С другой стороны, материально существующие на магнитных носителях программы для больших машин не используются и не сопровождаются, а потому их жизненный цикл считается завершенным. Таким образом, программа жива, пока она жива в голове у програмиста и\или пользователя.
На приведенной схеме используются два вида графических обозначений: фигуры символизируют состояния, в которых находится программа, а стрелки - переход из одного состояния в другое. Оба типа элементов нагружены дополнительной информацией: текст внутри фигур обозначает деятельность, проводимую в данном состоянии, а текст над стрелкой - условие или событие, управляющее данным переходом.
Переплетение циклов может быть довольно запутанным, особенно для долго живущих программ. Для упорядочения циклической структуры используется понятие выпуска (release).
Выпуск - характерная точка в жизни программы, отмечающая прохождение одного полного цикла.
Как правило, термином «выпуск» обозначают не только событие (момент в истории жизни программы), но и отчуждаемый артефакт, конкретную форму программы, появление которой отмечает данное событие.
Эта идея четко выделена в дисциплине проектирования Microsoft Solution Framework (MSF), представленной на рис. 3. В результате появляется характерная спиральная структура с периодическими выпусками очередных версий программы.
Замечание: В материалах MSF используется более сложная схема из нескольких вложенных спиралей, по одной для каждой формы существования программы, которая более точно и детально отражает существо методологии программирования MSF. Для понимания основной идеи достаточно приведенной упрощенной схемы.
Следует отметить три существенных момента этой схемы:
подразумевается одна долго живущая программа,
жизненный цикл имеет видимое начало,
жизненный цикл потенциально бесконечен.
Программные продукты корпорации Microsoft, например, обладают именно этими свойствами. Проекты же, которые проводит типичная отечественная программирующая организация в настоящее время, обладают другими характеристиками:
Типичная программирующая организация проводит параллельно относительно много проектов, каждый программист участвует в нескольких проектах одновременно в режиме разделения времени с мелким квантованием (недели, дни или даже часы).
Круг заказчиков имеет тенденцию к стабилизации в смысле выделения постоянных партнеров, для которых периодически выполняются новые проекты, опирающиеся на результаты прежних, таким образом, многие проекты начинаются не с нуля.
Каждый отдельный проект конечен и, как правило, предусматривает один6 выпуск и краткосрочное сопровождение. Если программный продукт подлежит значительной модификации, то это оформляется отдельным договором, а значит, является независимым проектом.
Чтобы учесть эти особенности, заметим следующее:
1. В жизненном цикле программа взаимодействует с двумя категориями действующих лиц: заказчиком (пользователем) и (абстрактным) программистом, причем последний может быть представлен как программно (software), так и умственно (brainware).
Программ много, они взаимно влияют друг на друга на разных фазах своих циклов через совместно используемых программистов и заказчиков.
Оба действующих лица (заказчик и программист) имеют двунаправленные связи с программой: заказчик воздействует на программу формулировкой требований при постановке задачи на фазе анализа, а программа воздействует на заказчика своим выпуском после фазы стабилизации; программа воздействует на программиста тем, что после фазы реализации разработанный код (а также другие материалы, например, модели) сохраняется в голове у программиста и/или в репозитории, воздействие программиста на программу очевидно — программист творец программы.
Учет этих наблюдений приводит к модели жизненного цикла множества программ, представленных на рисунке 4.
6
В большинстве проектов по разработке
приложений для автоматизации бизнеса
предусматривается передача заказчику
двух версий: прототипа на фазе опытной
эксплуатации и окончательной версии
на фазе внедрения. С точки зрения
организации процесса эти версии
необходимо различать, но с точки зрения
жизненного цикла программы это один
выпуск, потому что реализует один
набор функций, отраженный в спецификациях.
Замечание: Программа может воздействовать через заказчиков и программистов не только на другие программы, но и на самое себя. Хотя на схеме направление стрелок через программиста противоположно направлению смены фаз, а направление стрелок через заказчика проходит через веху выпуска, но, поскольку модель процесса может состоять из нескольких витков, программа может воздействовать на свою более раннюю фазу на более позднем витке! В следующих разделах этой темы мы кратко охарактеризуем основные понятия, как использованные нами в предыдущих схемах, так и применяемые в различных известных моделях жизненного цикла, с целью уточнить используемую терминологию.