Проектирование и создание программных средств приобретает черты индустриального производства. Это объясняется с одной стороны классовой потребностью в программных средствах при условии достаточно высокой стоимости этих средств, а с другой стороны необходимостью отчуждения программного продукта от непосредственного разработчика и потребностью в простоте последующих модификаций программ у потребителя. В настоящее время затраты на разработку программных средств примерно в 10 раз превышают затраты на вычислительное оборудование, а затраты на модификацию программ в процессе эксплуатации составляют приблизительно ¾ от стоимости всех затрат на создание и последующее подержание программных средств в рабочем состоянии. Такое положение предъявляет ряд специальных требований к методам проектирования. Создание и оформление программ, целью которых является обеспечение значительного сокращения трудовых стоимостных затрат на получение готовых программных средств и также их последующее сопровождение.
Существует несколько методов проектирования программ:
нисходящие TOPDOWN – метод или проектирование сверху вниз, иерархическое проектирование
структурное и модульное программирование.
Основная идея нисходящего заключается в том, что будущая программа разбивается на более мелкие элементы, которые в свою очередь могут быть разбиты на более простые и так до тех пор, пока они не будут доведены до примитивов или элементарных операций, которые могут быть реализованы на ЭВМ. Этот метод является неизменным при разработке сложных по характеру и больших по объёму программ, когда к их разработке необходимо привлекать большое количество программистов, работающих параллельно. Он позволяет концентрировать внимание разработчиков на более ответственных частях программы, а также облегчает возможность постоянного контроля за его работоспособностью по мере разработки, отладки и объединения, отдельно составленных программ за счёт организации непрерывности этого процесса в течение всей разработке. Для устранения разработки программного комплекса вместо некоторых программ нижнего уровня могут использоваться специальные программы заглушки. Программы заглушки требуются только на ранних стадиях разработки для того, чтобы не сдерживать общий ход создания программного комплекса. Благодаря их использованию обеспечивается возможность имитирования на ЭВМ работы реально создаваемой программы, то есть осуществлять проверку работоспособности программ верхнего уровня до того, как будут разработаны и отлажены все составляющие его программы нижн6его уровня.
Модуль – это последовательность логически связанных фрагментов, оформленных как отдельная часть программы. Понятие модульного программирования нельзя сводить только к понятию сложных программных комплексов в виде набора отдельных функциональных блоков. Программные модули должны обладать следующими свойствами:
на модуль можно ссылаться по имени (в том числе и из других модулей)
по завершении работы модуль должен передавать управление тому модулю, который его вызывал
модуль должен иметь 1 вход и 1 выход, небольшой размер.
При разработке сложных программ, как правило, в них выделяют головной и подчинённый ему модули, обеспечивающие управление, функциональную обработку и сервисное обслуживание.
Рис. Структурная форма организации сложных программных комплексов.
А – управляющие модули
1 – резидентный головной модуль
– транзитный модуль
В – модули, реализующие основное назначение пакета
2 – функциональные модули
С – вспомогательные – обслуживающие модули
3 – транслятор с входного языка
4 – модуль сбора и обработки статистики
5 – модуль обработки ошибочных ситуаций
6 – модуль экспорта, импорта информации
7 – модуль обучения и подсказки
Модульный принцип разработки программ обладает следующими преимуществами:
Большую программу могут разрабатывать вместе несколько исполнителей, что позволяет сокращать сроки разработки.
Позволяет создавать (многократно использовать в дальнейшем) библиотеки наиболее употребительных программ.
Упрощается процедура загрузки больших программ в оперативную память, когда требуется её сегментации.
Возникает много естественных контрольных точек для наблюдения за осуществлением хода разработки программ.
Обеспечивается более эффективное тестирование программ. Проще осуществляется тестирование, проектирование и последовательная отладка программ.
Преимущества наиболее наглядно проявляются на этапе сопровождения и модификации программных продуктов, позволяя значительно сократить затраты сил и средств на реализацию этого этапа.
Недостатки могут привести к увеличению времени компиляции при загрузке программ, к увеличению требуемой памяти и времени исполнения программ.
Актуальное для начального периода развития ЭВМ проблема разработки программ, которые занимают минимум памяти и выполняются за кратчайшее время с резким падением стоимости ЭВМ, возрастанием их быстродействия и объёмов памяти сменилось необходимостью разработки и применения новых индустриальных методов разработки программ.
Всё это нашло отражение в разработке методов структурного программирования. Одной из целей структурного программирования было значительно облегчить процесс разработки и отладки программ модулей, а главное процесс их понимания для сопровождения и модификации. Последнее особенно важно в условиях работы с программами других программистов, так как обеспечивают возможность отчуждения программ. Было доказано, что оператор безусловного перехода goto может быть исключён из языков программирования, а любой алгоритм (программа решения любой задачи) можно составить, используя только 3 основных алгоритма структуры:
Линейную;
Циклическую;
Ветвлящуюся.
Исключение оператора безусловного перехода даёт возможность читать программы сверху вниз без перерывов, возникающих из-за передачи управления. Благодаря этому легко можно определять условия, необходимые для модификации того или иного блока программы.
В настоящее время в структурном программировании допускается использование оператора безусловного перехода (при общем требовании их минимизации использования) но при обязательном условии, чтобы передача управления осуществлялась только вниз по программе. Другим важным фактором, облегчающим понимание программ, является реализация принципа их самодокументирования, представляющегося в форме включения комментария в исходные тексты программ. Дальнейшим развитием принципа самодокументирования явилась идея обучения пользователя работе с программным пользователями, путём включения в них специальных программных модулей, реализующих на иерархической основе описание их функциональных возможностей и правил использования на отдельных шагах исполнения алгоритма.