https://bigenc.ru/mathematics/text/3178905Цитата:
Автор: В. В. Кулямин
ПРОГРАММИ́РОВАНИЕ, процесс создания компьютерных программ или программного обеспечения, а также дисциплина, изучающая методы и приёмы создания и развития компьютерных программ (более точное назв. дисциплины – инженерия программного обеспечения или программная инженерия).
П. включает:
анализ предметной области – выделение требований к программе и точную постановку решаемых задач;
проектирование программы – выделение компонентов или модулей на основе отд. решаемых задач, определение способов взаимодействий между ними, определение алгоритмов работы и структур данных, используемых каждым модулем;
кодирование – написание отд. модулей на определённых языках программирования;
выявление дефектов и ошибок при помощи тестирования (проверка программы на наборе заранее выбранных сценариев, позволяющем оценить её корректность) и др. методов верификации, а также отладку программы;
развёртывание – размещение программы в её рабочем окружении, настройка и подготовка её к работе, обучение пользователей работе с программой;
сопровождение – поддержка работоспособности, настройка под изменяющееся окружение, выявление дефектов и новых задач, внесение исправлений и изменений.
Сопровождение играет особую роль, поскольку мн. программы используются в течение десятилетий и должны изменяться в соответствии с изменением решаемых задач или их масштабов, появлением новых устройств или необходимости во взаимодействии с др. программами.
В рамках сопровождения много раз проводится перепроектирование, кодирование и тестирование, а также добавление новых компонентов, поэтому бо́льшая часть затрат на разработку программы падает на него.
Дополнит. сложности для сопровождения и развития программ возникают из-за размеров и сложности совр. программных систем, достигающих десятков млн. строк кода, на разл. языках программирования.
Такие масштабы программных систем стали возможны за счёт использования подпрограмм и компонентов, позволяющих создавать иерархич. системы из большого количества небольших программ.
Перечисленные виды деятельности при П. обычно выполняются не в жёстко заданной последовательности, а по мере необходимости; напр., исправление ошибки, обнаруженной при тестировании, может потребовать дополнит. анализа требований, уточнения задач и выбора др. алгоритма работы содержащего ошибку модуля.
Процессы разработки программного обеспечения, предписывающие определённые правила создания программ, с целью упрощения планирования работ могут налагать разл. ограничения на возможные последовательности выполнения таких действий.
В зависимости от поставленных целей, размерности задачи, методов решения различают параллельное программирование, распределённое программирование и др.
Слово «П.» используется также в некоторых устоявшихся словосочетаниях, напр. динамическое программирование, линейное программирование, математическое программирование, где оно обычно является синонимом слова «планирование».
Языки программирования поддерживают разл. стили П. (парадигмы программирования). В искусство П. входит выбор языка программирования, наиболее полно подходящего для решения поставленной задачи.
Большинство методов и технич. приёмов П. не универсальны, применимы лишь для специфич. видов программ (прикладные, системные, встроенные).
Однако можно выделить как базовые следующие три принципа П.:
модульность – существенно разл. задачи должны решаться разными программными компонентами, взаимодействующими друг с другом через чётко определённые интерфейсы, и не зависеть от внутр. алгоритмов и структур данных друг друга (см. в ст. Модульное программирование);
использование абстракций – решение любой задачи необходимо оформлять в терминах набора сущностей, достаточных для описания всех существенных элементов задачи и не содержащих лишней, несущественной информации;
многократное использование кода – каждый отд. элемент знания о задаче или её решения должен быть описан однократно, следует избегать дублирования информации и описаний одних и тех же знаний и/или решений в нескольких разл. местах в коде программы, поскольку при изменении требований исправлять такую программу гораздо сложнее.
Первым программистом, написавшим в 1843 программу (вычисление чисел Бернулли) для вычислит. устройства (аналитической машины Ч. Бэббиджа), считается гр. А. Лавлейс.
П. на первых компьютерах осуществлялось путём установки переключателей в нужные положения; программ как таковых ещё не существовало.
Первая ЭВМ с хранимой в памяти программой (реализация т. н. принципов фон Неймана) – EDSAC (1949, см. в ст. Вычислительная машина).
Развитие П. (в нач. 1950-х гг.) связано с переходом от написания программ на языках машинных инструкций к более удобным для восприятия человека языком ассемблер, а затем – к языкам высокого уровня, независимым от архитектуры компьютера, первыми из которых были фортран (fortran, 1954–57) и лисп (LISP, 1958, от LISt Processing language – язык обработки списков).
Некоторые идеи, реализованные в таких языках, сформулированы А. А. Ляпуновым в его операторном методе программирования (1953).
Как дисциплина П. изучает принципы построения и функционирования программ, используя методы и технич. приёмы, а также способы организации как крупных программных систем (выбор архитектуры, выделение компонентов и организация эффективного взаимодействия между ними), так и небольших элементов программ (выбор алгоритмов работы, организация кода отд. компонента, использование особенностей языков программирования).
В англоязычной лит-ре вместо термина «П.» используется «software engineering» – «программная инженерия» (введён в 1968 Ф. Л. Бауэром, США). В СССР в 1970-х гг. А. П. Ершовым термин переводился как «технология программирования».
Важными вехами в развитии дисциплины стали выделение понятий программного модуля и его интерфейса канад. инж. Д. Парнасом в 1972, чёткое определение в нач. 1990-х гг. понятия архитектуры программного обеспечения и постепенно расширяющееся применение анализа программ.