Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов. ## Структурная схема **Структурной** называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения. Структурные схемы пакетов программ не информативны, поскольку организация программ в пакеты не предусматривает передачи управления между ними. Поэтому структурные схемы разрабатывают для каждой программы пакета, а список программ пакета определяют, анализируя функции, указанные в техническом задании. Самый простой вид программного обеспечения - программа, которая в качестве структурных компонентов может включать только подпрограммы и библиотеки ресурсов. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации. Структурными компонентами программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п. Структурная схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе: ![Структурная схема программного обеспечения](../Pictures/17_01.%20Структурная%20схема%20программного%20комплекса.png) Структурная схема программной системы, как правило, показывает наличие подсистем или других структурных компонентов. В отличие от программного комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и, возможно, с основной программой. Структурная же схема программной системы этого обычно не показывает: ![Структурная схема программной системы](../Pictures/17_02.%20Структурная%20схема%20программной%20системы.png) Более полное представление о проектируемом программном обеспечении с точки зрения взаимодействия его компонентов между собой и с внешней средой дает функциональная схема. ## Функциональная схема **Функциональная схема** или **схема данных** (ГОСТ 19.701-90) - схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения функциональных схем используют специальные обозначения, установленные стандартом. Основные обозначения схем данных по ГОСТ 19.701-90 приведены в таблице: | Название блока | Обозначение | Назначение блока | | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Запоминаемые данные | ![Запоминаемые данные](../Pictures/17_03.%20Запоминаемые%20данные.png) | Для обозначения таблиц и других структур данных, которые должны быть сохранены без уточнения типа устройства | | Оперативное запоминающее устройство | ![Оперативное запоминающее устройство](../Pictures/17_04.%20Оперативное%20запоминающее%20устройство.png) | Для обозначения таблиц и других структур данных, хранящихся в оперативной памяти | | Запоминающее устройство с последовательной выборкой | ![Запоминающее устройство с последовательной выборкой](../Pictures/17_05.%20Запоминающее%20устройство%20с%20последовательной%20выборкой.png) | Для обозначения таблиц и других структур данных, хранящихся на устройствах с последовательной выборкой (магнитной ленте и т. п.) | | Запоминающее устройство с прямым доступом | ![Запоминающее устройство с прямым доступом](../Pictures/17_06.%20Запоминающее%20устройство%20с%20прямым%20доступом.png) | Для обозначения таблиц и других структур данных, хранящихся на устройствах с прямым доступом (дисках) | | Документ | ![Документ](../Pictures/17_07.%20Документ.png) | Для обозначения таблиц и других структур данных, выводимых на печатающее устройство | | Ручной ввод | ![Ручной ввод](../Pictures/17_08.%20Ручной%20ввод.png) | Для обозначения ручного ввода данных с клавиатуры | | Карта | ![Карта](../Pictures/17_09.%20Карта.png) | Для обозначения данных на магнитных или перфорированных картах | | Дисплей | ![Дисплей](../Pictures/17_10.%20Дисплей.png) | Для обозначения данных, выводимых на дисплей компьютера | Функциональные схемы, более информативны, чем структурные. На рисунках для сравнения приведены функциональные схемы программных комплексов и систем: ![Функциональная схема комплекса программ](../Pictures/17_11.%20Функциональная%20схема%20комплекса%20программ.png) ![Функциональная схема программной системы](../Pictures/17_12.%20Функциональная%20схема%20программной%20системы.png) Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от качества их описания зависит количество самых дорогостоящих ошибок. К самым дорогим относятся ошибки, обнаруживаемые при комплексном тестировании, так как для их устранения могут потребоваться серьезные изменения уже отлаженных текстов.