Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов.  
## Структурная схема
**Структурной** называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения.  
Структурные схемы пакетов программ не информативны, поскольку организация программ в пакеты не предусматривает передачи управления между ними. Поэтому структурные схемы разрабатывают для каждой программы пакета, а список программ пакета определяют, анализируя функции, указанные в техническом задании.  
Самый простой вид программного обеспечения - программа, которая в качестве структурных компонентов может включать только подпрограммы и библиотеки ресурсов. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации.  
Структурными компонентами программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.  
Структурная схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе:  
![Структурная схема программного обеспечения](../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)  
Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от качества их описания зависит количество самых дорогостоящих ошибок. К самым дорогим относятся ошибки, обнаруживаемые при комплексном тестировании, так как для их устранения могут потребоваться серьезные изменения уже отлаженных текстов.