Под проектированием программы будем понимать процесс преобразования постановки задачи, план алгоритмического или вычислительного решения с учетом реальных возможностей вычислительных машин и методов программирования.
Проектирование сверху вниз (нисходящее проектирование) начинается с наиболее абстрактного описания функций системы. По этому общему описанию верхнего уровня создаются более детальные описания. Процесс детализации продолжается до получения проекта, пригодного для программирования. Такой подход дает обозримое описание задачи на каждой стадии, а также представление взаимосвязи всех составных частей проекта и позволяет своевременно замечать возникающие проблемы и не переходить к последующей детализации до тех пор, пока полностью не завершится предыдущий уровень.
Результирующий проект имеет структуру дерева. Каждый уровень представляет собой законченное описание системы с конкретной степенью детализации.
Каждый пока еще не запрограммированный модуль заменяется при сборке программы заглушкой, которая удовлетворяет правилам интерфейса с головной программой, но не функций модуля, или выполняет их частично. На каждой стадии процесса реализации уже созданная программа должна правильно функционировать по отношению к более низкому уровню.
Поскольку каждая новая часть программы тестируется по мере включения в целое, то полностью реализованная программа является уже оттестированной. Такой способ объединения позволяет иметь работающую программу, выявлять и устранять ошибки на ранних стадиях программирования.