Программное обеспечение
Програ́ммное обеспе́чение[1][2][3] (допустимо также произношение обеспече́ние[3][4][5][6]) (ПО) — программа или множество программ, используемых для управления компьютером (ISO/IEC 26514:2008)[7].
Имеются и другие определения из международных и российских стандартов:
- совокупность программ системы обработки информации и программных документов[8], необходимых для эксплуатации этих программ (ГОСТ 19781-90[9]);
- все или часть программ, процедур, правил и соответствующей документации системы обработки информации (ISO/IEC 2382-1:1993)[10][11];
- компьютерные программы, процедуры и, возможно, соответствующая документация и данные, относящиеся к функционированию компьютерной системы (IEEE Std 829—2008)[12].
Программное обеспечение является одним из видов обеспечения вычислительной системы, наряду с техническим (аппаратным), математическим, информационным, лингвистическим, организационным, методическим и правовым обеспечением[13].
Академические области, изучающие программное обеспечение, — это информатика и программная инженерия.
В компьютерном сленге часто используется слово «софт», произошедшее от английского слова «software», которое в этом смысле впервые применил в статье журнала American Mathematical Monthly математик из Принстонского университета Джон Тьюки в 1958 году[14].
История
Первую программу написала Ада Лавлейс для разностной машины Чарльза Бэббиджа, однако поскольку эта машина так и не была достроена, разработки леди Лавлейс остались чисто теоретическими[15].
Первая теория, касающаяся программного обеспечения, была предложена английским математиком Аланом Тьюрингом в 1936 году в эссе «On computable numbers with an application to the Entscheidungsproblem» («О вычислимых числах с приложением к проблеме разрешения»)[16][17][18]. Он создал так называемую машину Тьюринга, математическую модель абстрактной машины, способной выполнять последовательности рудиментарных операций, которые переводят машину из одного фиксированного состояния в другое. Главная идея заключалась в математическом доказательстве факта, что любое наперёд заданное состояние системы может быть всегда достигнуто последовательным выполнением конечного набора элементарных команд (программы) из фиксированного набора команд.
Первые электронно-вычислительные машины 1940—1950-х годов перепрограммировались путём переключения тумблеров и переподключения кабелей, что требовало глубокого понимания их внутреннего устройства. К таким машинам, в частности, относился ENIAC (который, впрочем, впоследствии модифицировали, чтобы он мог, по крайней мере частично, программироваться с помощью перфокарт)[19].
Важным шагом в сторону современных компьютеров был переход к архитектуре Джона фон Неймана, впервые воплощённой в Великобритании, в разработанном под руководством Дж. Р. Уомерзли и при участии Алана Тьюринга компьютере, известном как Марк I. Первая программа, хранимая в памяти компьютера, была запущена на нём 21 июня 1941 года. Для облегчения программирования этой машины Тьюринг придумал систему сокращённого кодирования, в которой для представления двоичного машинного кода использовалась последовательность телетайпных символов, выводимых на перфоленту[20].
Один из сотрудников Тьюринга, Джон Мочли, став позднее (вместе с Джоном Преспером Эккертом) руководителем и основателем компании Eckert–Mauchly Computer Corporation, разработавшей такие ЭВМ, как BINAC и UNIVAC, поручил своим сотрудникам создать транслятор алгебраических формул. Хотя эта амбициозная цель в 1940-х годах и не была достигнута, под руководством Мочли был разработан так называемый «Краткий код», в котором операции и переменные кодировались двухсимвольными сочетаниями. Краткий код был реализован с помощью интерпретатора[21]. Грейс Хоппер, работая с начала 1950-х годов над набором математических подпрограмм для UNIVAC I, изобрела программу-компоновщик «A-0», которая по заданному идентификатору осуществляла выборку нужной подпрограммы из библиотеки, хранящейся на магнитной ленте, и записывала её в отведённое место оперативной памяти[22].
В 1950-е годы появились первые высокоуровневые языки программирования, Джон Бэкус разработал FORTRAN, а Грейс Хоппер — COBOL. Подобные разработки значительно упростили написание прикладного программного обеспечения, которое писала тогда каждая фирма, приобретающая вычислительную машину[23].
В начале 1950-х годов понятие программного обеспечения ещё не сложилось. Так не говорилось о нём ничего в вышедшей в январе 1952 года в журнале Fortune статье «Office Robots», описывавшем компьютеры Univac. Хотя в статье уже рассказывается о компьютере как об универсальном устройстве, процесс программирования в этой статье был анахронически описан как «переключение тумблеров»[24]. Однако к середине 50-х годов уже вполне сложилась разработка программного обеспечения на заказ[25], хотя сам термин «программное обеспечение» ещё не использовался, тогда говорили просто о «программировании на заказ» или «программистском обслуживании»[26]. Первой программной фирмой стала компания System Development Corporation, созданная в 1956 году на базе принадлежащей правительству США фирме RAND Corporation[27]. На этом этапе заказчиками программного обеспечения (уникального и не тиражируемого) были крупные корпорации и государственные структуры, и стоимость в один миллион долларов за программу не была чем-то необычным[28].
Сам термин «программное обеспечение» вошёл в широкий обиход с начала 1960-х годов, когда стало актуальным разграничение команд, управляющих компьютером, и его физических компонентов — аппаратного обеспечения[29]. Тогда же и началось становление индустрии программного обеспечения, как самостоятельной отрасли. Первой компанией по разработке ПО стала основанная в 1959 году Роем Наттом и Флетчером Джоунсом Computer Sciences Corporation с начальным капиталом в 100 долларов. Первыми клиентами CSC и появившихся вслед за нею софтверных компаний были сверхкрупные корпорации и государственные организации, вроде НАСА[30], и фирма продолжала работать на рынке заказного ПО, как и другие первые программистские частные стартапы, такие как Computer Usage Company?! (CUC)[27].
Первыми самостоятельно выпущенными программными продуктами, не поставляемыми в комплекте с компьютерным оборудованием, были выпущенный фирмой Applied Data Research в 1965 году генератор компьютерной документации AUTOFLOW, автоматически рисующий блок-схемы, и транслятор языка программирования MARK-IV, разработанный в 1960—1967 годах в Informatics, Inc.[26][31] Становление рынка корпоративного программного обеспечения тесно связано с появлением семейства компьютеров IBM System/360. Достаточно массовые, относительно недорогие вычислительные машины, совместимые друг с другом на уровне программного кода, открыли дорогу тиражируемому программному обеспечению[32].
Постепенно круг заказчиков программного обеспечения расширялся, что стимулировало разработку новых видов программного обеспечения. Так появились первые фирмы, специализирующиеся на разработке систем автоматизированного проектирования[30].
В ноябре 1966 года журнал Business Week впервые обратился к теме индустрии программного обеспечения. Статья называлась «Software Gap — A Growing Crisis for Computers» и рассказывала как о перспективности этого бизнеса, так и о кризисе, связанном с нехваткой программистов[24]. Типичные программные продукты того времени служили для автоматизации общих для бизнеса задач, таких, как начисление заработной платы или автоматизации бизнес-процессов таких предприятий среднего бизнеса, как производственное предприятие или коммерческий банк. Стоимость такого ПО, как правило, была между пятью и ста тысячами долларов[26].
Появление в 1970-х годах первых персональных компьютеров (таких, как Альтаир 8800) создало предпосылки и для зарождения массового рынка программного обеспечения. Изначально программы для персональных компьютеров распространялись в «коробочной» форме через торговые центры или по почте и имели цену 100—500 долларов США[26].
Знаковыми для зарождающего массового рынка программного обеспечения стали такие продукты, как электронная таблица VisiCalc, идея которой пришла Дэниелу Бриклину, когда тот, будучи выпускником MIT и инженером-программистом в DEC, посещал курсы в Гарвардской школе бизнеса и хотел облегчить себе утомительные финансовые расчёты[33], и текстовый процессор WordStar, разработку которого начал Сеймур Рубинштейн, тщательно изучив потребности рынка[34]. О VisiCalc впервые заговорили, как о killer application, то есть компьютерном приложении, которое самим фактом своего существования доказывает нужность (и, зачастую, необходимость покупки) платформы, для которой реализована такая программа. Для VisiCalc и WordStar такой платформой стали персональные компьютеры, которые благодаря ним из богатой игрушки для гиков стали рабочим инструментом. С них началась микрокомпьютерная революция, а у этих программ появились конкуренты: электронные таблицы SuperCalc, Lotus 1-2-3, система управления базами данных dBase II, текстовый процессор WordPerfect и др.[35] Текстовые процессоры, электронные таблицы, системы управления базами данных, а также графические редакторы вскоре стали основными продуктами рынка программного обеспечения для персональных компьютеров[36].
Массовое тиражирование позволило снизить к середине 1990 годов стоимость программного обеспечения для персональных компьютеров до ста — пятисот долларов[26], при этом бизнес производителей ПО приобрёл определённое сходство с бизнесом звукозаписывающих компаний[35].
Классификация ПО
Подходы к классификации ПО достаточно подробно формализованы в международном стандарте ISO/IEC 12182[37]. В частности, первая версия стандарта предусматривала 16 критериев классификации программных средств:
- по режиму эксплуатации;
- по масштабу;
- по стабильности;
- по функции;
- по требованию защиты;
- по требованию надёжности;
- по требуемым рабочим характеристикам;
- по исходному языку;
- по прикладной области;
- по вычислительной системе и среде;
- по классу пользователя;
- по требованию к вычислительным ресурсам;
- по критичности;
- по готовности;
- по представлению данных;
- по использованию программных данных.
Примерами классов функции ПС являются:
- обработка деловых сообщений;
- компиляция;
- научные вычисления;
- обработка текстов;
- медицинские системы;
- системы управления.
Примерами классов прикладной области являются:
- наука;
- бытовые устройства;
- оборудование;
- аппаратура управления процессом;
- предпринимательство;
- система организации сети.
Примерами классов масштаба ПС являются:
- малый;
- средний;
- большой.
Примерами классов критичности являются:
- национальная безопасность;
- человеческая жизнь;
- социальный хаос или паника;
- организационная безопасность;
- частная собственность;
- секретность.
Примерами классов пользователя являются:
- начинающий;
- средний;
- специалист (эксперт);
- обычный;
- случайный;
- другая система программного обеспечения;
- технические средства.
Примерами классов стабильности являются:
- постоянное внесение изменений;
- дискретное внесение изменений;
- маловероятное внесение изменений.
По степени переносимости программы делят на
- платформозависимые;
- кроссплатформенные.
По способу распространения и использования программы делят на
По назначению программы делят на:
По видам программы делят[38] на:
- компонент — программа, рассматриваемая как единое целое, выполняющая законченную функцию и применяемая самостоятельно или в составе комплекса;
- комплекс — программа, состоящая из двух или более компонентов и (или) комплексов, выполняющих взаимосвязанные функции, и применяемая самостоятельно или в составе другого комплекса.
- Классификация программного обеспечения по сектору индустрии
Классификация программного обеспечения по сектору индустрии включает несколько подходов. В целом, программное обеспечение делят на заказное, то есть создаваемое для конкретного заказчика, и продуктовое, то есть создаваемое для продажи на рынке. В свою очередь, по типам потребителя ПО делят на Business-to-Business (B2B), то есть для предприятий и организаций, и Business-to-Consumer (B2C), то есть для частных лиц[39].
Одним из вариантов классификации по сектору индустрии является деление на ПО для корпоративного заказчика (англ. enterprise software vendors), ПО для массового потребителя (англ. mass-market software vendors) и ИТ-сервисы[40].
Другой подход состоит в делении индустрии ПО на три сектора: бизнес-продукты общего назначения (англ. Business Function Software), специализированные бизнес-продукты (англ. Industrial Business Software) и продукты для частной жизни (англ. Consumer Software). Бизнес-продукты общего назначения предназначены для поддержки функционирования предприятий и организаций и включают бухгалтерские системы, финансовые системы, системы кадрового учёта и т. п. Специализированные бизнес-продукты ориентированы на задачи конкретного типа бизнеса: геоинформационные системы, медицинские системы, логистические системы и т. п. Продукты для частной жизни включают антивирусное ПО и системы для информационной безопасности, различные полезные утилиты, образовательное ПО, мультимедийное ПО и т. п.[39]
Комплекс программ, которые обеспечивают управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода-вывода, сетевое оборудование, выступая как «межслойный интерфейс», с одной стороны которого аппаратура, а с другой — приложения пользователя. В отличие от прикладного программного обеспечения, системное не решает конкретные практические задачи, а лишь обеспечивает работу других программ, предоставляя им сервисные функции, абстрагирующие детали аппаратной и микропрограммной реализации вычислительной системы, управляет аппаратными ресурсами вычислительной системы. Отнесение того или иного программного обеспечения к системному условно, и зависит от соглашений, используемых в конкретном контексте. Как правило, к системному программному обеспечению относятся операционные системы, утилиты, системы управления базами данных, широкий класс связующего программного обеспечения.
Прикладное программное обеспечение — программа, предназначенная для выполнения определённых пользовательских задач и рассчитанная на непосредственное взаимодействие с пользователем.
Разработка
- Protocol-Oriented Programming — парадигма разработки программного обеспечения, в которой поведение типов описывается через протоколы (интерфейсы), а не через иерархии наследования классов.
Лицензия
Пользователь получает программное обеспечение вместе с лицензией, которая предоставляет ему право использовать программный продукт при условии выполнения положений о лицензировании. Как правило, эти условия ограничивают возможности пользователя передавать программный продукт другим пользователям, изменять код.
Часть программного обеспечения поставляется со свободной лицензией. Такие лицензии позволяют распространять программное обеспечение, а также модифицировать его.
Часть программного обеспечения распространяется как бесплатное. Существует также условно бесплатное программное обеспечение. В этом случае обычно пользователь бесплатно получает демонстрационную версию программного продукта с несколько ограниченными возможностями на определённый испытательный период, а после его окончания обязан или приобрести продукт, или деинсталлировать его.
См. также
- SHIFT Inc.
- MySocialCloud
- Akka.io
- Kaseya
- Cleo Communications
- Защита от массового присваивания
- Понимание программного обеспечения
- Программно-аппаратный комплекс
- Патенты и программное обеспечение
- Лицензия на программное обеспечение
- Компьютерный язык
- По области применения:
- Программная инженерия
- Раздутое программное обеспечение
- Software Asset Management
- Munin — свободное программное обеспечение для мониторинга состояния компьютеров в компьютерных сетях с визуализацией статистики и процесса работы.
- Взаимоотношения с разработчиками
- Система рассуждения
- Алгоритмическая культура
- Разработка программного обеспечения с использованием ИИ
- Программное обеспечение виртуализации с поддержкой ИИ
- Гарантирование информационной безопасности
- Безопасное программирование
- Accela
- Программное обеспечение для управления сетью
- Конфигуратор
- TeamQuest Corporation
- Архитектурная модель программного обеспечения
- AiScaler
- Хрупкость программного обеспечения
- Sysload Software
- Indeni
- OmNovia Technologies
- Визуализация программного обеспечения
- Alaris, Inc.
- Jamf Holding Corporation
- OCR Systems
- Система распространения программного обеспечения M23
- Геномный анализ сложных признаков
Примечания
Литература
- Батоврин В. К. Толковый словарь по системной и программной инженерии. — М.: ДМК Пресс, 2012. — С. 280. — ISBN 978-5-94074-818-2.
- Брукс Ф. Мифический человеко-месяц или как создаются программные системы / Фредерик Брукс; [Пер. С. Маккавеева]. — 2-е. — СПб.: Символ-Плюс, 2000. — 298 с. — (Профессионально).
- ДеМарко Т. Deadline. Роман об управлении проектами. — М.: Манн, Иванов и Фербер. — 2013. — 352 с. ISBN 978-5-91657-284-1.
- ДеМарко Т., Листер Т. Человеческий фактор. Успешные проекты и команды. — М.: Символ-Плюс. — 2014. — 288 с. ISBN 978-5-93286-217-9.
- Журавлева, Е. Ю. Эпистемологические перспективы развития софтверизации современной научно-исследовательской деятельности / Е. Ю. Журавлева // Вестник Томского государственного университета. Философия. Социология. Политология. — 2025. — № 83. — С. 15-22.
- Йордан Э. Путь камикадзе. Как разработчику программного обеспечения выжить в безнадёжном проекте. — М.: Лори, 2012. — 290 с. ISBN 978-5-85582-227-3.
- Коберн, А. Быстрая разработка программного обеспечения / Алистер Коберн ; [Пер. В. Стрельцов]. — [Москва] : Лори, [2002] (ООО Тип. ИПО профсоюзов Профиздат). — 314 с. : ил., табл.; 24 см. — (Серия "Быстрая разработка программного обеспечения").
- Проскуряков, А. В. Качество и тестирование программного обеспечения. Метрология программного обеспечения / А. В. Проскуряков. — Ростов-на-Дону - Таганрог : Южный федеральный университет, 2022. — 197 с.
- Соммервилл И. Инженерия программного обеспечения. — Издательство Вильямс, 2002. — 624 с. ISBN 5-8459-0330-0.
- Чукич, И. Функциональное программирование на языке С++ : как сделать свои программы изящными с помощью технологии функционального программирования / Иван Чукич ; перевод с английского В. Ю. Винника, А. Н. Киселева. — Москва : ДМК Пресс, 2020. — 359 с. : цв. ил.; 24 см. — (Функциональное программирование).
- Time-Life Books. Язык компьютера = Computer Languages. — М.: Мир, 1989. — Т. 2. — 240 с. — (Understanding Computers). — 100 000 экз. — ISBN 5-03-001148-X.
- Martin Campbell-Kelly. From Airline Reservations to Sonic the Hedgehog: A History of the Software Industry. — MIT Press, 2003. — 372 с. — (History of Computing). — ISBN 978-1422391761.
Ссылки
- ГОСТ Р ИСО/МЭК 12207-2010. Информационная технология. Системная и программная инженерия. процессы жизненного цикла программных средств. Cтандарты и регламенты. Федеральное агентство по техническому регулированию и метрологии (2025).



