- •Разработка сложных программных изделий
- •Раздел 1.Структурные методологии разработки программного обеспечения Глава 1.Структурные методы в программотехнике
- •1.1.Эволюция структурных методов
- •1.2.Основные идеи и принципы структурной методологии
- •1.3.Принципы программотехники
- •1.4.Принципы информационной инженерии
- •1.5.Автоматизация проектирования
- •Глава 2.Структурные методы анализа и проектирования
- •2.1.Структурный системный анализ
- •2.2.Нисходящее проектирование
- •2.3.Структурное проектирование, управляемое потоками данных
- •2.4.Методы проектирования, управляемые структурами данных
- •Глава 3.Структурные методы программирования
- •3.1.Особенности структурных программ
- •3.2.Цели структурного программирования
- •3.3.Программирование с использованием пошаговой детализации
- •3.4.Нисходящее и восходящее программирование
- •Глава 4.Модульное программирование
- •4.1.Основные понятия и определения
- •4.2.Программные модули и схема модуляризации
- •4.3.Оценка качества модульной программы
- •Глава 5.Модели разработки программных изделий
- •5.1.Модель жизненного цикла программного изделия
- •5.2.Модель "возрастающей выдачи"
- •5.3.Модель с использованием прототипа
- •5.4.Спиральная модель
- •Раздел 2.Фазы жизненного цикла программного изделия Глава 6.Определение требований пользователя и требований к программному изделию
- •6.1.Требования пользователя
- •6.2. Требования к программному изделию
- •6.3. Разработка логической модели программного изделия
- •6.4. Классификация требований к программному изделию
- •6.5. Атрибуты требований к программному изделию
- •6.6. Документ Требования к программному изделию
- •6.7 Техническое задание на разработку программного изделия
- •Глава 7.Архитектурное проектирование программного изделия
- •7.1.Общее содержание работ фазы
- •7.2.Виды деятельности
- •7.3.Критерии качества архитектурного проекта
- •Глава 8.Детальное проектирование и изготовление программного изделия
- •8.1.Основные виды деятельности
- •8.2.Кодирование модулей
- •8.3.Тестирование программного изделия
- •8.4.Документирование работ по проектированию программного изделия
- •Глава 9.Отладка программ
- •9.1.Трудности отладки
- •9.2.Средства и методы отладки
- •9.3.Категории ошибок в программном обеспечении
- •9.4.Рекомендации по отладке
- •Глава 10.Эксплуатация и сопровождение программного изделия
- •10.1.Передача программного изделия в эксплуатацию
- •10.2.План испытаний
- •10.3.Работы по эксплуатации и сопровождению программного изделия
- •10.4.Задачи службы сопровождения программного изделия
- •Раздел 3.Управление разработкой программного изделия Глава 11.Управление жизненным циклом программного изделия
- •11.1.Виды деятельности, связанные с управлением жизненным циклом программного изделия
- •11.2.Измерения в программотехнике
- •11.3.Управление проектированием программного изделия
- •11.4.Методы получения оценок для проекта программного изделия
- •11.4.1. Методы функциональной декомпозиции
- •11.4.2. Эмпирические оценочные модели
- •11.5.Управление рисками
- •11.6.Планирование разработки программного изделия
- •Глава 12.Управление качеством программного изделия
- •12.1.Качество программного изделия
- •12.2.Обеспечение качества программного изделия
- •12.3.Измерение качества программного изделия
- •12.4.Управление конфигурацией программного изделия
- •Литература
2.2.Нисходящее проектирование
Нисходящее проектирование — неформальная стратегия при разбиении крупной проблемы на подпроблемы меньшего размера. Это пошаговый процесс, начинающийся с общей функции системы, которая разделяется на подфункции; процесс повторяется до тех пор, пока все подфункции не станут достаточно простыми, чтобы их можно было представить на языке программирования.
Нисходящее проектирование применимо к проектированию систем, программ, отдельного модуля, а также к проектированию структур данных. Как и другие структурные методы, нисходящее проектирование имеет целью:
• систематизировать процесс проектирования;
• создать модульный проект программы;
• дать структуру для эффективного решения проблемы. Процесс пошаговой детализации — это процесс принятия наилучшего решения на каждом шаге проектирования, основой чему служит опыт и интуиция проектировщика. Хотя метод не предлагает строгих правил для выбора решения, однако можно указать следующие общие руководства:
• принимать те решения, которые при разделении проблемы на части обеспечивают наибольшую логическую связность внутри каждой части (подпроблемы);
• при принятии решения обязательно рассматривать альтернативные проекты;
• на каждом шаге принимать как можно меньше решений;
• в первую очередь пытаться выполнять простейшие решения. Для успешного применения метода каждый проектировщик должен следовать следующим основополагающим принципам:
1. Для каждого модуля (на любом уровне иерархии) должны быть определены: функция, его входы и выходы.
2. Функция каждого модуля должна расшифровываться не более, чем на одном листе инструкции (или на экране дисплея). Описание функции модуля верхнего уровня, т.е. всего проекта, не может превышать десяти строк кода или вызовов модулей следующего уровня.
3. Для описания интерфейсов между модулями данным необходимо уделять такое же внимание, как и процедурам обработки.
Проект программного изделия, полученный в результате нисходящего проектирования, документируется обычно в графической форме, построенной с использованием структурных средств (структурных схем, схем действий и т.п.). Схема сопровождается описанием модулей в повествовательной форме на естественном языке или на псевдокоде.
2.3.Структурное проектирование, управляемое потоками данных
Структурное проектирование состоит в детализации метода нисходящего проектирования. Сохраняя все принципы предыдущего метода, структурное проектирование добавляет ряд руководящих указаний для систематизации процесса проектирования и для оценки качества проекта.
Процесс декомпозиции в структурном проектировании основан на потоках данных в системе. Результатом проектирования также является структурная схема, содержащая иерархически расположенные процедурные компоненты программы (системы) и данные, соединяющие эти компоненты.
Процесс проектирования может быть представлен в виде последовательности следующих четырех шагов.
Шаг 1. Представление схемы потоков данных.
Основой для определения состава программных компонент служит СПД, которая показывает перемещение данных в системе и их преобразование в процедурных блоках. СПД дает первое представление о проектируемой системе.
Шаг 2. Изображение структурной схемы проекта.
Путем преобразования СПД проектировщик создает проект системы в виде иерархии программных компонент. В качестве руководства по преобразованию СПД используются две стратегии:
• анализ преобразований;
• анализ транзакций.
На первом этапе анализа преобразований происходит разделение СПД на три типа составных частей: вход, логическая обработка, выход. Входная часть, включающая процессы преобразования данных из физической (внешней) формы представления в логическую, называется ветвью ввода. Выходная часть, преобразующая данные из логической (внутренней) формы в физическое представление — в строку документа или экрана — называется ветвью вывода. В СПД в общем случае может быть несколько ветвей ввода и вывода. Логическая обработка, наиболее удаленная от входов и выходов, называется центром преобразования. СПД может содержать несколько центров преобразования.
Второй этап — построение схемы программы, в которой для каждой ветви потока и для каждого центра преобразования создается одна функциональная компонента. Это первый уровень детализации.
На следующих этапах структурная схема еще более детализируется путем добавления подфункций для каждой функциональной компоненты.
Альтернативной стратегией построения схемы структурного проекта выступает анализ транзакций, который оказывается полезным при проектировании систем обработки транзакций. Транзакция — элемент или совокупность входных данных, вызывающая определенную реакцию системы, каждая транзакция содержит признак типа транзакции.
Процесс проектирования здесь состоит из четырех шагов:
• идентификация источников транзакций;
• установление центра транзакций в СПД;
• идентификация модулей обработки транзакций в СПД и создание высокоуровневой структурной схемы программы;
• детализация модулей обработки транзакций и построение детальной схемы проекта.
В результате в схеме на верхнем уровне находится блок "центр транзакций", а на следующем уровне — блоки, соответствующие обработке транзакции каждого типа.
При проектировании сложных программных систем может оказаться целесообразным использовать комбинацию обеих стратегий.
Шаг 3. Оценка проекта.
В связи с тем, что в результате проектирования может быть получено несколько вариантов проекта, возникает необходимость их сравнения. Для оценки качества проекта на практике широко используются два показателя: сцепление между модулями и связность каждого модуля. Эти оценки подробно рассмотрены в гл. 4, а здесь следует лишь отметить, что высокое качество проекта означает слабое сцепление между модулями и сильную связность каждого из них.
Шаг 4. Подготовка проекта для реализации.
Последний шаг структурного проектирования называют пакетированием проекта. Он представляет собой процесс преобразования логического проекта программы в физически реализуемые блоки. Его цель — определить компоненты физической системы, каждая из которых выполняется под управлением операционной системы как отдельный загрузочный модуль.
Несмотря на то, что структурное проектирование вводит ряд дополнительных формальных процедур в построение схемы проекта и использует критерии для оценки качества проекта, оно, как и нисходящее проектирование, не дает строгих правил для проведения функциональной декомпозиции. Серьезный пробел этого метода — отсутствие проектирования данных, и особенно заметным он становится, когда используется технология баз данных, что ограничивает применение метода разработкой простых программ с файловой средой.