Нисходящее программирование предполагает создание программы «сверху вниз»: сначала разрабатывается основная программа, затем определяются основные структуры данных и правила их обработки. 1
Преимущества:
- Разработка становится эффективнее. 3 Разработчик сначала определяет общие параметры проекта, затем детализирует их, а затем реализует весь функционал. 3
- Улучшается документация. 3 Если разработчик начинает с общих параметров, это обеспечивает более чёткое и последовательное описание проекта. 3
- Упрощается тестирование. 3 Когда каждая функция программы разрабатывается отдельно, тестировать её можно тоже отдельно, что гораздо проще. 3
- Улучшается модульность и повторное использование кода. 3 При отдельной разработке каждой функции, разработчикам проще использовать модули и применять повторное использование кода в разных частях проекта, что ускоряет процесс разработки. 3
Недостатки:
- Снижается гибкость. 3 Поскольку проект детально планируется, у разработчика не остаётся поля для манёвра, что чревато утратой гибкости, отсутствием поля для креативности и внедрения новых технологий в конечном продукте. 3
- Увеличивается сложность дизайна. 3 При дизайне сверху вниз могут возникнуть сложности с дизайном каждой отдельной функции, что чревато замедлением и удорожанием создания ПО. 3
- Увеличивается риск пропуска мелких деталей. 3 При программировании сверху вниз до самых мелких деталей часто не доходят руки, а это может пагубно отразиться на финальном продукте. 3
Восходящее программирование («снизу вверх») предполагает создание и отладку самых элементарных подпрограмм, затем отдельных блоков задачи до тех пор, пока не реализуется вся задача. 1
Преимущества:
- Уменьшается общий объём работы за счёт ранее созданных участков кода. 1
- Снижаются требования к аппаратным ресурсам. 1
- Уменьшается вероятность возникновения ошибок, так как только на поздних этапах проекта работает с большим объёмом кода. 1
Недостатки:
- Уже реализованные, отлаженные и протестированные модули иногда приходится разрабатывать заново, так как головной модуль разрабатывается на завершающем этапе. 1
- Использование готовых частей кода может привести к менее эффективной структуре решения в целом. 1
- При применении такого подхода в чистом виде возникает опасность потерять общую логику разработки. 1