Найбільшого поширення набули три способи проектування алгоритмів і програм - висхідний, спадний, зустрічний.
Висхідний (від низу до верху) проектування використовує ідею виділення досить великих подалгорітма і модулів, кожен з яких реалізує певні функції.
Вибір модулів визначається різними міркуваннями: функціональної закінченістю, розмірами, однорідністю структур даних і ін. Для виділених модулів складаються специфікації, визначається зв'язок по входу і виходу. Далі кожен модуль алгоритму автономно розробляється і перевіряється. Після розробки модулів з урахуванням зв'язків по входу і виходу здійснюється об'єднання в підсистеми, які піддаються контролю. Випробувані підсистеми об'єднуються в програмну систему, яка піддається комплексній перевірці.
Отже, висхідний проектування починається з рівня базових понять і розвивається шляхом формування на їх основі абстрактних понять і, нарешті, призводить до таких понять, в термінах яких виражається рішення всієї задачі.
Основними недоліками висхідного способу проектування є:
- складність процесу об'єднання окремих модулів в алгоритм;
- труднощі виправлення помилок, допущених на ранніх стадіях розробки;
- складність контролю розробки та прогнозу завершення.
Спадний (зверху вниз) проектування починається з постановки задачі, яку потрібно вирішити, і розвивається далі шляхом розбиття її на підзадачі. В кінцевому рахунку, це призводить до таких підзадач, вирішення яких легко висловити в термінах базових конструкцій. Процес проектування включає в себе наступні дії:
- проводиться декомпозиція загальної задачі на точно визначені підзадачі;
- доводиться, що якщо кожна подзадача вирішена коректно і отримані рішення взаємопов'язані, то первинне завдання буде вирішена коректно.
Процес декомпозиції повторюється для подзадач, і доводиться коректність для виконаного розбиття. Цей процес повторюється до отримання подзадач настільки простих, що рішення виражається базовими конструкціями.
Такий спосіб проектування алгоритмів і програм у вигляді ієрархічної структури дозволяє вирішувати громіздкі і складні завдання. При низхідній розробці з'являється можливість перевірки алгоритму або перевірки і налагодження програми з самого початку розробки і тим самим створюється ситуація виявлення помилок на ранніх стадіях проектування програм.
Так як модулі програм розробляються зверху вниз, то замість модулів нижнього рівня використовуються програмні заглушки. Вони потрібні тільки для того, щоб дозволити модулю верхнього рівня перевірити взаємодію з модулем нижнього рівня. Програмна заглушка містить вхідні та вихідні оператори і видає повідомлення про своє виконання.
При розробці програми з використанням спадного проектування не потрібно проведення комплексної налагодження, яка займає при інших методах розробки 25-40% від загального часу розробки програми. При цьому розробка всієї програми просувається швидше, ніж розробка компонентів нижніх рівнів. Може з'ясуватися, що окремі компоненти не виконують покладені на них функції (наприклад, забезпечення необхідної точності і часу обчислення).
Реальна стратегія розробки алгоритмів і програм майже завжди є розумне поєднання спадного і висхідного способів проектування (зустрічне проектування).