Методология программирования


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

В частном случае, когда методология применяется на стадии программирования (конструирования), её обычно называют парадигмой программирования[2].

Можно проследить три пути возникновения методологий. Во-первых, они могут являться выражением практического опыта. Во-вторых, методологии могут происходить от одной из четырёх моделей алгоритма: абстрактная машина Тьюринга (императивное программирование), рекурсивные функции Гильберта и Аккермана (структурное программирование), лямбда-исчисление Чёрча (функциональное программирование), нормальные алгорифмы Маркова (логическое программирование)[3][4]. В-третьих, методологии можно объяснить через отображение одной из трёх структур языка моделирования на структуру языка программирования[5]. Составными частями могут быть структура данных, структура управления и логика. Каждое из девяти отображений определяет либо методологию, либо достаточно серьёзный метод программирования. Например, отображение логика-логика лежит в основе логического программирования[4].

При подходе к методологии, как имеющей ядро (англ. core), соответствующее способу описания алгоритма, и дополнительные особенности, можно выделить следующие пять основных ядер методологий[6]:

Можно заметить, что эти методологии находятся на шкале от навигационных (пошаговое управление исполнением) до спецификационных (определение требований к результату)[6].

Специфика (топологическая специфика) — способ выбора методов для уточнения ядра методологии. Критерием качества той или иной топологии может являться общие затраты на разработку ПО. В свою очередь, затраты на разработку зависят среди прочего от ключевых языковых абстракций: абстракции данных, управления и модульности. Например, в императивной методологии можно придерживаться методов структурного программирования, что даёт более выгодную топологию с точки зрения языковых абстракций. Результатом является методология структурного программирования[7].