Проектирование

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

- реализуемые функции;

- размеры;

- время выполнения и др.

В целом соотношения «требования — спецификация — проектирование» можно проиллюстрировать следующей схемой (рис. 2.3).

Рис. 2.3 — Схема проектирования программных систем

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

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

И наконец, пользователь может сравнить планируемую функцию программы с реализованной функцией. Эти функции очень редко совпадают полностью. Таким образом, сопровождение замыкает цикл проектирования и позволяет изменить системные требования, спецификации, проекты программ и т.п.

В процессе проектирования системы, по мере выполнения спецификаций на определенные подмодули, последние представляются в виде древовидной схемы, показывающей вхождение элементов системы (рис. 2.4).

Рис. 2.4 — Структурная схема компилятора

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