birmaga.ru
добавить свой файл

1 2 ... 11 12
ГЛАВА 3. Технологии программирования


  • 3.1. Введение в технологии программирования

    • 3.1.1. Основные понятия и определения

    • 3.1.2. История и эволюция

    • 3.1.3. Классификации

      • 3.1.3.1. Классификация технологических подходов

      • 3.1.3.2. Классификация технологических процессов

      • 3.1.3.3. Классификация технологических стадий

    • 3.1.4. Проблемы и перспективы развития

    • 3.1.5. Рекомендации по литературе

  • 3.2. Классические технологические процессы

    • 3.2.1. Возникновение и исследование идеи

      • 3.2.1.1. Возникновение идеи решения проблемы

      • 3.2.1.2. Постановка задачи

      • 3.2.1.3. Принятие решения о начале работы над проектом

    • 3.2.2. Управление

      • 3.2.2.1. Управление проектом

      • 3.2.2.2. Эволюция менеджмента

      • 3.2.2.3. Методы управления проектами

      • 3.2.2.4. Современные подходы к управлению проектом

    • 3.2.3. Анализ требований и проектирование

      • 3.2.3.1. Введение в анализ требований и проектирование

      • 3.2.3.2. Отступление "о спецификациях"

      • 3.2.3.3. Отступление "об архитектуре"

      • 3.2.3.4. Отступление "о классификации всего сущего"

      • 3.2.3.5. Проектирование архитектуры (проектирование "в большом")

      • 3.2.3.6. Проектирование модулей (проектирование "в малом")
      • 3.2.3.7. Методы анализа и построения спецификаций


      • 3.2.3.8. Подходы к ведению анализа и проектирования

    • 3.2.4. Программирование (реализация)

      • 3.2.4.1. Стиль программирования

      • 3.2.4.2. Защитное программирование

      • 3.2.4.3. Выбор языка программирования

    • 3.2.5. Тестирование и отладка

      • 3.2.5.1. Введение в тестирование и отладку

      • 3.2.5.2. Тестирование программных продуктов

      • 3.2.5.3. Отладка программных продуктов

    • 3.2.6. Ввод программы в действие

    • 3.2.7. Эксплуатация и сопровождение

    • 3.2.8. Завершение эксплуатации

  • 3.3. Стандартные технологические процессы

    • 3.3.1. Основные процессы

      • 3.3.1.1. Приобретение

      • 3.3.1.2. Поставка

      • 3.3.1.3. Разработка

      • 3.3.1.4. Эксплуатация

      • 3.3.1.5. Сопровождение

    • 3.3.2. Вспомогательные процессы

      • 3.3.2.1. Документирование

      • 3.3.2.2. Управление конфигурацией

      • 3.3.2.3. Обеспечение качества

      • 3.3.2.4. Верификация

      • 3.3.2.5. Аттестация

      • 3.3.2.6. Совместная оценка

      • 3.3.2.7. Аудит

      • 3.3.2.8. Разрешение проблем

    • 3.3.3. Организационные процессы

      • 3.3.3.1. Управление

      • 3.3.3.2. Создание инфраструктуры
      • 3.3.3.3. Усовершенствование


      • 3.3.3.4. Обучение

    • 3.3.4. Взаимосвязь между процессами

  • 3.4. Основные стадии технологических подходов

    • 3.4.1. Фазы как крупные временные рамки

    • 3.4.2. Стадии как отражение классических процессов

    • 3.4.3. Вариант подробного разбиения на стадии

    • 3.4.4. Контрольные точки

  • 3.5. Основные технологические подходы

    • 3.5.1. Ранние технологические подходы

      • 3.5.1.1. Подход "кодирование и исправление"

    • 3.5.2. Каскадные технологические подходы

      • 3.5.2.1. Каскадный подход

      • 3.5.2.2. Каскадно-возвратный подход

      • 3.5.2.3. Каскадно-итерационный подход

      • 3.5.2.4. Каскадный подход с перекрывающимися процессами

      • 3.5.2.5. Каскадный подход с подпроцессами

      • 3.5.2.6. Спиральная модель

    • 3.5.3. Каркасные технологические подходы

      • 3.5.3.1. Рациональный унифицированный процесс

    • 3.5.4. Генетические технологические подходы

      • 3.5.4.1. Синтезирующее программирование

      • 3.5.4.2. Сборочное (расширяемое) программирование

      • 3.5.4.3. Конкретизирующее программирование

    • 3.5.5. Подходы на основе формальных преобразований

      • 3.5.5.1. Технология стерильного цеха

      • 3.5.5.2. Формальные генетические подходы
    • 3.5.6. Группа ранних подходов быстрой разработки


      • 3.5.6.1. Эволюционное прототипирование

      • 3.5.6.2. Итеративная разработка

      • 3.5.6.3. Постадийная разработка

    • 3.5.7. Адаптивные технологические подходы

      • 3.5.7.1. Экстремальное программирование

      • 3.5.7.2. Адаптивная разработка

    • 3.5.8. Подходы исследовательского программирования

      • 3.5.8.1. Компьютерный дарвинизм

  • 3.6. Технологии коллективной разработки

    • 3.6.1. Авторская разработка

    • 3.6.2. Коллективная разработка

      • 3.6.2.1. Технические командные роли

      • 3.6.2.2. Психологические командные роли

      • 3.6.2.3. Типы совместной деятельности

    • 3.6.3. Общинная модель разработки

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

    • 3.7.1. Подходы к качеству программного обеспечения

    • 3.7.2. Характеристики качества программного обеспечения

    • 3.7.3. Оценка качества процесса разработки

      • 3.7.3.1. Модель зрелости процесса разработки программного обеспечения

      • 3.7.3.2. Определение возможностей и улучшение процесса создания программного обеспечения

    • 3.7.4. "Достаточно хорошее" программное обеспечение

    • 3.7.5. Стандартизация информационных технологий

ЛИТЕРАТУРА

ГЛАВА 3. Технологии программирования

Прочитав эту главу, вы получите ответы на следующие вопросы:
  • Что такое жизненный цикл программ? Каковы основные технологические подходы к ведению цикла?


  • Что такое классические и стандартные технологические процессы?

  • Как формируются технологические стадии и в чем заключается порядок их прохождения?

  • Что представляют собой технологии коллективной разработки программ?

  • Как добиться создания качественного программного обеспечения?

3.1. Введение в технологии программирования

3.1.1. Основные понятия и определения

Жизненный цикл программы - это весь период ее разработки и эксплуатации, начиная с момента возникновения замысла и заканчивая прекращением всех видов ее использования.

Технология программирования изучает технологические процессы и порядок их прохождения - стадии (с использованием знаний, методов и средств). Знания, методы и средства могут использоваться в разных процессах и, следовательно, технологиях.

Технологии удобно характеризовать в двух измерениях - вертикальном (представляющем процессы) и горизонтальном (представляющем стадии).

Процесс - совокупность взаимосвязанных действий, преобразующих некоторые входные данные в выходные. Процессы состоят из набора действий, а каждое действие из набора задач. Вертикальное измерение отражает статические аспекты процессов и оперирует такими понятиями, как рабочие процессы, действия, задачи, результаты деятельности и исполнители.

Стадия - часть действий по созданию программного обеспечения, ограниченная некоторыми временными рамками и заканчивающаяся выпуском конкретного продукта, определяемого заданными для данной стадии требованиями. Стадии состоят из этапов, которые обычно имеют итерационный характер. Иногда стадии объединяют в более крупные временные рамки, называемые фазами. Итак, горизонтальное измерение представляет время, отражает динамические аспекты процессов и оперирует такими понятиями, как фазы, стадии, этапы, итерации и контрольные точки.

Технологический подход определяется спецификой комбинации стадий и процессов, ориентированной на разные классы программного обеспечения и на особенности коллектива разработчиков.


Простейшее представление жизненного цикла программы представлено на рис. 3.1.



Фактически, в данном случае на каждой стадии выполняется единственный процесс. Конечно, при разработке и создании больших программ такая схема недостаточно корректна (да и просто нереалистична). Однако мы можем взять ее за основу для многих других технологических подходов к ведению жизненного цикла.

3.1.2. История и эволюция

История учит тому, что из истории мы ничему не учимся.
Б. Шоу


В истории технологии программирования можно выделить три этапа.


  • Осмысление опыта разработки больших систем. Понимание того, что важно не только на каком языке программирования разрабатывается программа, но и как это делается. Проведение первых международных и национальных конференций (конец 60-х - 70-е годы XX века).

    • 1968 г. - НАТО проводит первую конференцию по инженерии программирования (Software Engineering).

    • 1975 г. - 1-я международная конференция IEEE.

    • 1979 г. - 1-я Всесоюзная конференция по технологии программирования.

  • Разработка новых технологических подходов (начало 70-х годов XX века - настоящее время).

    • 1973 г. - Дагласом Россом (Douglas Ross) разработана технология проектирования сложных систем SADT (Structured Analysis and Design Technique). Стандартизована под названием IDEF (Integrated DEFinition).

    • 1985 г. - Харланом Миллзом (Harlan Mills) сформулированы основные идеи технологии стерильного цеха.

    • 1995 г. - в октябре появилась первая пробная версия Унифицированного метода. Этот проект с 1996 года известен как UML (Unified Modeling Language). С точки зрения технологических подходов особый интерес представляет рациональный унифицированный процесс.

  • Принятие стандартов на состав процессов жизненного цикла программного обеспечения (середина 80-х годов XX века - настоящее время). Попытки решить проблему качества программных продуктов.


    • 1985 г. - впервые утвержден стандарт жизненного цикла для проектирования программных систем (для систем военного назначения по заказам Министерства обороны США).

    • 1994 г. - в Великобритании создан международны й консорциум, разрабатывающий на постоянной основе проекты стандартов и технологии быстрого создания приложений DSDM (Dynamic Systems Development Method).

    • 1995 г. - принят международный стандарт ISO 12207:1995 "Information Technology - Software Life Cycle Processes", регламентирующий состав процессов жизненного цикла программного обеспечения.

3.1.3. Классификации

3.1.3.1. Классификация технологических подходов

Выделим основные группы технологических подходов и укажем подходы для каждой из них.

Подходы со слабой формализацией

Эти подходы не используют явных технологий и их можно применять только для очень маленьких проектов, как правило, завершающихся созданием демонстрационного прототипа. К подходам со слабой формализацией относятся так называемые ранние технологические подходы, например подход "кодирование и исправление" (см. разд. 3.5.1.1).

Строгие (классические, жесткие, предсказуемые) подходы

Данную группу подходов рекомендуется применять для средних, крупномасштабных и гигантских проектов с фиксированным объемом работ. Одно из основных требований к таким проектам - предсказуемость. В эту группу входят подходы, перечисленные ниже.

  • Каскадные технологические подходы.

    • Классический каскадный подход (см. разд. 3.5.2.1).

    • Каскадно-возвратный подход (см. разд. 3.5.2.2).
    • Каскадно-итерационный подход (см. разд. 3.5.2.3).


    • Каскадный подход с перекрывающимися процессами (см. разд. 3.5.2.4).

    • Каскадный подход с подпроцессами (см. разд. 3.5.2.5).

    • Спиральная модель (см. разд. 3.5.2.6).

  • Каркасные подходы.

    • Рациональный унифицированный процесс (см. разд. 3.5.3.1).

  • Генетические подходы.

    • Синтезирующее программирование (см. разд. 3.5.4.1).

    • Сборочное (расширяемое) программирование (см. разд. 3.5.4.2).

    • Конкретизирующее программирование (см. разд. 3.5.4.3).

  • Подходы на основе формальных преобразований.

    • Технология стерильного цеха (см. разд. 3.5.5.1).

    • Формальные генетические подходы (см. разд. 3.5.5.2).

Гибкие (адаптивные, легкие) подходы

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

  • Ранние технологические подходы быстрой разработки.

    • Эволюционное прототипирование (см. разд. 3.5.6.1).

    • Итеративная разработка (см. разд. 3.5.6.2).

    • Постадийная разработка (см. разд. 3.5.6.3).

  • Адаптивные подходы.

    • Экстремальное программирование (см. разд. 3.5.7.1).

    • Адаптивная разработка (см. разд. 3.5.7.2).

  • Подходы исследовательского программирования.

    • Компьютерный дарвинизм (см. разд. 3.5.8.1).

3.1.3.2. Классификация технологических процессов

Мы будем рассматривать два набора (множества) технологических процессов. Первый набор - классический, включающий основные процессы, сложившиеся исторически в результате практического опыта разработки программного обеспечения. Второй набор - стандартный, т. е. основанный на стандарте ISO 12207:1995. Процессы классического набора фактически являются подмножеством стандартного, выступая там как процессы или действия процессов.


В классическом наборе выделим девять технологических процессов.


  • Возникновение и исследование идеи (см. разд. 3.2.1).

  • Управление (см. разд. 3.2.2).

  • Анализ требований (см. разд. 3.2.3).

  • Проектирование (см. разд. 3.2.3).

  • Программирование (см. разд. 3.2.4).

  • Тестирование и отладка (см. разд. 3.2.5).

  • Ввод в действие (см. разд. 3.2.6).

  • Эксплуатация и сопровождение (см. разд. 3.2.7).

  • Завершение эксплуатации (см. разд. 3.2.8).

Процессы жизненного цикла, определяемые международным стандартом

ISO 12207 [ISO/IEC 12207:1995], делятся натри группы.

  • Основные процессы.

    • Приобретение (см. разд. 3.3.1.1).

    • Поставка, (см. разд. 3.3.1.2).

    • Разработка (см. разд. 3.3.1.3).

    • Эксплуатация (см. разд. 3.3.1.4).

    • Сопровождение (см. разд. 3.3.1.5).

  • Вспомогательные процессы.

    • Документирование (см. разд. 3.3.2.1).

    • Управление конфигурацией (см. разд. 3.3.2.2).

    • Обеспечение качества (см. разд. 3.3.2.3).

    • Верификация (см. разд. 3.3.2.4).

    • Аттестация (см. разд. 3.3.2.5).

    • Совместная оценка (см. разд. 3.3.2.6).

    • Аудит (см. разд. 3.3.2.7).

    • Разрешение проблем (см. разд. 3.3.2.8).

  • Организационные процессы.

    • Управление (см. разд. 3.3.3.1).

    • Создание инфраструктуры (см. разд. 3.3.3.2).

    • Усовершенствование (см. разд. 3.3.3.3).

    • Обучение (см. разд. 3.3.3.4).

3.1.3.3. Классификация технологических стадий

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




3.1.4. Проблемы и перспективы развития

Кто хочет обрести счастье или мудрость, тот должен искать перемен.
Конфуций


В настоящее время развитие и совершенствование технологических подходов ведется по двум направлениям, которые достаточно сильно отличаются друг от друга своими задачами.


  • Максимизация качества. Задачи, решаемые на этом направлении - надежность, четкость и формализация - ориентированы на военные разработки и системы реального времени. Данное направление поддерживается строгими технологическими подходами, обеспечивающими предсказуемость. Проблеме качества будет посвящен разд. 3.7.

  • Максимизация скорости разработки. Это направление в большей степени обращено к искусству, импровизации и поиску. Гибкие и адаптивные технологические подходы поддерживают именно этот путь. Особенность разработки определяется появлением новых классов систем. За последние несколько десятков лет такими классами были, например, системы "клиент-сервер", распределенные системы, интерактивные системы, системы Интернет-приложений. С точки зрения технологий, задача разработки Интернет-приложений является очень специфичной. Базироваться на классических технологических подходах ей не позволяют следующие особенности:

  • задача, как правило, не будет четко определена и специфицирована;

  • заказчики не смогут точно сформулировать свои требования;

  • как только система будет завершена, она устареет;

  • система должна правильно взаимодействовать с независимо разработанными программами.

Еще одно важное перспективное направление, связанное с технологией программирования - исследование человеческих и социальных факторов в информатике и программировании.

Предполагается, что в ближайшее время основные усилия в исследовании разработки программного обеспечения будут направлены на процесс проектирования. Это объясняется тем, что в больших проектах основной объем работ приходится на проектирование, которое должны выполнять талантливые творческие специалисты.


3.1.5. Рекомендации по литературе

Книги банальны. Гениальна только жизнь.
Томас Карлейль


По технологии программирования издано очень большое количество книг. Особого внимания заслуживают пять.


  • "Мифический человеко-месяц, или как создаются программные системы" [Брукс 1999]. Считается, что без прочтения этой книги не может состояться ни один крупный руководитель программного проекта. Первое издание книги вышло в 1975 году. Спустя 20 лет Фредерик Брукс выполнил ревизию своих старых идей и добавил новые.

  • "Программное обеспечение и его разработка" [Фоке 1985]. Автор излагает общие проблемы создания программного обеспечения, его сопровождения и использования с обилием конкретного материала.

  • "Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте" [Йордон 2000]. Книга написана профессионалом, понимающим все современные проблемы и сложности в создании программного продукта.

  • "Объектно-ориентированный анализ и проектирование с примерами приложений на C++" [Буч 1998]. Прекрасное практическое руководство по созданию объектно-ориентированных систем. Считается, что благодаря этой работе объектно-ориентированное проектирование и система обозначений были взяты тысячами программистами для применения в реальных разработках в различных предметных областях.

  • "Проектирование программного обеспечения экономических информационных систем" [Вендров 2000]. Особенность этой книги в изложении международных и отечественных стандартов на процессы жизненного цикла программного обеспечения. Достаточно подробно описан ряд промышленных технологий.



следующая страница >>