Разработка сложных программных изделий


Нисходящее и восходящее программирование


Нисходящее программирование —

систематический метод проек­тирования, кодирования и тестирования программ в виде последо­вательности шагов. Метод основан на идее пошаговой детализации и позволяет создать иерархически организованную модульную про­грамму, модуль верхнего уровня которой соответствует общей функции программы, а модули следующего уровня представляют ее подфункции.

Традиционно программа разрабатывается в виде последователь­ности шагов: сначала программа проектируется, затем она кодиру­ется и, наконец, тестируется. В случае нисходящего программиро­вания сначала проектируется, кодируется и тестируется один мо­дуль, затем другой и т.д., пока все модули не будут завершены. Программа растет постепенно по мере подключения к ней новых модулей.

Нисходящая разработка программы начинается после создания общей логической структуры программы. Прежде всего проектируется модуль самого верхнего уровня. Модули следующего уровня рассматриваются как фиктивные и заменяются так называемыми "заглушками" — пустыми модулями, содержащими только точки входа и выхода. Такие модули при вызове просто возвращают уп­равление вызывающему модулю. В дальнейшем они заменяются ре­альными модулями, разработанными на следующих шагах детали­зации.

Метод восходящего программирования

использует противопо­ложную стратегию. Программа образуется путем объединения про­стых программных компонент для создания компонент более высо­кого уровня.

Однако первым шагом разработки, как и в предыдущем подхо­де, является создание общей структурной схемы программы, вклю­чая функциональные компоненты и структуры данных. После этого используется пошаговый процесс разработки и объединения компо­нент, начиная с компонент самого нижнего уровня. При объедине­нии и совместном тестировании модулей нижнего уровня возникает необходимость в вызывающем модуле более высокого уровня, ко­торый в данный момент еще не существует. Для имитации его функций создается тестовый драйвер — скелетная модель модуля, который будет создан на следующем шаге. Драйвер рассматривает­ся как управляющая программа, вызывающая другие модули и передающая им управления.

Оба метода упорядочивают процесс программирования. На практике, однако, более эффективным считается комбинированный подход. Так, общие модули, которые будут вызываться более чем одной компонентой более высокого уровня, целесообразно разраба­тывать, используя восходящее программирование, а для остальной части программы использовать нисходящий принцип. Восходящий подход позволяет работать параллельно над разными модулями программы, а нисходящий упрощает интегрирование модулей в единую программу.



Содержание раздела