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