Программное обеспечение

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Пользователь Прикладное программное обеспечение Операционная система Аппаратное обеспечение
Взаимодействие между пользователем, прикладным ПО, операционной системой и аппаратным обеспечением.

Програ́ммное обеспе́чение[1][2][3] (допустимо также произношениe обеспече́ние[3][4][5]) (ПО) — все или часть программ, процедур, правил и соответствующей документации системы обработки информации (ISO/IEC 2382-1:1993)[6][7].

Другие определения из международных и российских стандартов:

  • Компьютерные программы, процедуры и, возможно, соответствующая документация и данные, относящиеся к функционированию компьютерной системы (IEEE Std 829—2008)[8].
  • Программа или множество программ, используемых для управления компьютером (IEEE Std 829—2008)[9].
  • Совокупность программ системы обработки информации и программных документов[10], необходимых для эксплуатации этих программ (ГОСТ 19781-90)[11].

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

Программное обеспечение — это то, что делает компьютеры универсальными, позволяя использовать типовую вычислительную машину для решения самых разнообразных задач[13].

Академические области, изучающие программное обеспечение, — это информатика и программная инженерия.

В компьютерном сленге часто используется слово софт от английского слова software, которое в этом смысле впервые применил в статье в American Mathematical Monthly математик из Принстонского университета Джон Тьюки (англ. John W. Tukey) в 1958 году[14].

История[править | править вики-текст]

Индустрия программного обеспечения делится на три основных сектора: разработка программного обеспечения на заказ, программное обеспечение для корпоративного потребителя и программное обеспечение для массового потребителя. Они появлялись друг за другом с интервалом примерно в десятилетие[15].

Предыстория. Зарождение программирования[править | править вики-текст]

Первую программу написала Ада Лавлейс для разностной машины Чарльза Бэббиджа, однако поскольку эта машина так и не была достроена, разработки леди Лавлейс остались чисто теоретическими[16].

Первая теория, касающаяся программного обеспечения, была предложена английским математиком Аланом Тьюрингом в 1936 году в эссе «On computable numbers with an application to the Entscheidungsproblem» («О вычислимых числах с приложением к проблеме разрешения»)[17][18][19]. Он создал так называемую машину Тьюринга, математическую модель абстрактной машины, способной выполнять последовательности рудиментарных операций, которые переводят машину из одного фиксированного состояния в другое. Главная идея заключалась в математическом доказательстве факта, что любое наперёд заданное состояние системы может быть всегда достигнуто последовательным выполнением конечного набора элементарных команд (программы) из фиксированного набора команд.

Первые электронно-вычислительные машины 1940—1950-х годов перепрограммировались путём переключения тумблеров и переподключения кабелей, что требовало глубокого понимания их внутреннего устройства, к таким машинам, в частности, относился ENIAC (который, впрочем, впоследствии модифицировали чтобы он мог, по крайней мере частично, программироваться с помощью перфокарт)[20].

Важным шагом в сторону современных компьютеров был переход к архитектуре Джона фон Неймана, впервые реализованной в Великобритании, в разработанной под руководством Дж. Р. Уомерзли и при участии Алана Тьюринга компьютере, известном как Манчестерский Марк I. Первая программа, хранимая в памяти компьютера, была запущена на нём 21 июня 1941 года. Для облегчения программирования этой машины Тьюринг придумал систему сокращённого кодирования, в которой для представления двоичного машинного кода использовалась последовательность телетайпных символов, выводимых на перфоленту[21].

Один из сотрудников Тьюринга, Джон Мочли, став позднее (вместе с Джоном Преспером Экертом[en]) руководителем и основателем компании, разработавшей такие ЭВМ BINAC и UNIVAC, поручил своим сотрудникам создать транслятор алгебраических формул. Хотя эта амбициозная цель в 1940-х годах и не была достигнута, под руководством Мочли был разработан так называемый «Краткий код», в котором операции и переменные кодировались двухсимвольными сочетаниями. Краткий код был реализован с помощью интерпретатора[22]. Грейс Хоппер, работая с начала 1950-х годов над набором математических подпрограмм для UNIVAC I, изобрела программу-компоновщик «A-0[en]», которая по заданному идентификатору осуществляла выборку нужной подпрограммы из библиотеки, хранящейся на магнитной ленте, и записывала её в отведённое место оперативной памяти Унивака[23].

В 50-е годы появляются первые высокоуровневые языки программирования, Джон Бэкус разрабатывает FORTRAN, а Грейс Хоппер — COBOL.

Подобные разработки значительно упростили написание прикладного программного обеспечения, которое писала тогда каждая фирма, приобретающая вычислительную машину[24].

В начале 1950-х понятие программного обеспечения ещё не сложилось. Так не говорилось о нём ничего в вышедшей в январе 1952 в журнале Fortune статье «Office Robots», описывавшем компьютеры Univac. Хотя в статье уже рассказывается о компьютере, как универсальном устройстве, процесс программирования в этой статье был анахронически описан как «переключение тумблеров» (англ. flipping a few switches)[25]. Однако к середине 50-х годов уже вполне сложилась разработка программного обеспечения на заказ (англ. software contracting)[15], хотя сам термин программное обеспечение ещё не использовался, тогда говорили просто о программировании на заказ (англ. custom programming) или программистском обслуживании (англ. programming services)[26]. Первой программной фирмой стала созданная на базе принадлежащей правительству США RAND Corporation в 1956 году компании Systems Development Corporation[en] (SDC)[27]. На этом этапе заказчиками программного обеспечения (уникального и нетиражируемого) были крупные корпорации и государственные структуры и стоимость в один миллион долларов за программу не была чем-то необычным[28].

Ранняя история. Корпоративное ПО[править | править вики-текст]

Собственно сам термин «программное обеспечение» (англ. software) вошёл в широкий обиход с начала 1960-х годов, когда стало актуальным разграничение команд, управляющих компьютером и его физических компонентов — аппаратного обеспечения (англ. hardware)[29]. Тогда же и началось становление индустрии программного обеспечения, как самостоятельной отрасли. Первой компанией по разработке ПО стала основанная в 1959 году Роем Наттом[en] и Флетчером Джоунсом[en] Computer Science Corporation[en] с начальным капиталом в 100 долларов. Первыми клиентами CSC и появившихся вслед за нею софтверных компаний были сверхкрупные корпорации и государственные организации, вроде NASA[30], и фирма продолжала работать на рынке заказного ПО, как и другие первые программистские частные стартапы, такие как Computer Usage Company[en] (CUC)[27].

Первыми самостоятельно выпущенными программными продуктами, не поставляемыми в комплекте с компьютерным оборудованием, были выпущенная фирмой Applied Data Research[en] в 1965 году генератор компьютерной документации AUTOFLOW, автоматически рисующая блок-схемы, и транслятор языка программирования MARK-IV[en], разработанный в 1960—1967 гг. в Informatics, Inc.[26] Становление рынка корпоративного программного обеспечения тесно связано с появлением семейства компьютеров IBM System/360. Достаточно массовые, относительно недорогие вычислительные машины, совместимые друг с другом на уровне программного кода, открыли дорогу тиражируемому программному обеспечению[31].

Постепенно круг заказчиков программного обеспечения расширялся, что стимулировало разработку новых видов программного обеспечения. Так появились первые фирмы, специализирующиеся на разработке систем автоматизированного проектирования[30].

В ноябре 1966 года журнал Business Week впервые обратился к теме индустрии программного обеспечения. Статья называлась «Software Gap — A Growing Crisis for Computers», и рассказывала как о перспективности этого бизнеса, так и о кризисе, связанном с нехваткой программистов[25]. Типичные программные продукты того времени служили для автоматизации общих для бизнеса задач, таких, как начисление заработной платы, или автоматизации бизнес-процессов таких предприятий среднего бизнеса, как производственное предприятие или коммерческий банк. Стоимость такого ПО, как правило, была между пятью и ста тысячами долларов[26].

Персональные компьютеры и программное обеспечение для массового потребителя[править | править вики-текст]

Появление в 1970-х годах первых персональных компьютеров (таких, как Альтаир 8800) создало предпосылки и для зарождения массового рынка программного обеспечения. Изначально программы для персональных компьютеров распространялись в «коробочной» форме через торговые центры или по почте и имели цену 100—500 долларов США[26].

Знаковыми для зарождающего массового рынка программного обеспечения стали такие продукты, как электронная таблица VisiCalc, идея которой пришла Дэниелу Бриклину, когда тот, будучи выпускником MTI и инженером-программистом в DEC посещал курсы в Гарвардской школе бизнеса, он хотел облегчить себе утомительные финансовые расчёты[32], и текстовый процессор WordStar[en], разработку которого начал Cеймур Рубинштейн[en], тщательно изучив потребности рынка[33]. О VisiCalc впервые заговорили, как о killer application[en], то есть компьютерном приложении, которое самим фактом своего существования, доказывает нужность (и, зачастую, необходимость покупки) платформы, для которой реализована такая программа. Для VisiCalc и WordStar такой платформой стали персональные компьютеры, которые благодаря ним из богатой игрушки для гиков стали рабочим инструментом. С них началась микрокомпьютерная революция, а у этих программ появились конкуренты: электронные таблицы SuperCalc, Lotus 1-2-3, система управления базами данных dBase II, текстовый процессор WordPerfect и др.[34]. Текстовые процессоры, электронные таблицы, системы управления базами данных а так же графические редакторы вскоре становятся основными продуктами рынка программного обеспечения для персональных компьютеров[35].

Массовое тиражирование позволило снизить к середине 1990 годов стоимость программного обеспечения для персональных компьютеров до ста — пятисот долларов[26], при этом бизнес производителей ПО приобрёл определённое сходство с бизнесом звукозаписывающих компаний

[34].

Классификация ПО[править | править вики-текст]

По степени тиражируемости всё программное обеспечение делится на три категории: программное обеспечение, разрабатываемое на заказ, программное обеспечение для крупных корпораций и организаций и программное обеспечение для массового потребителя[15].

По степени переносимости программы делят на

По способу распространения и использования программы делят на

По назначению программы делят на:

По видам программы делят на[36]:

  • компонент: программа, рассматриваемая как единое целое, выполняющая законченную функцию и применяемая самостоятельно или в составе комплекса;
  • комплекс: программа, состоящая из двух или более компонентов и (или) комплексов, выполняющих взаимосвязанные функции, и применяемая самостоятельно или в составе другого комплекса.

Системное программное обеспечение[править | править вики-текст]

Комплекс программ, которые обеспечивают управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода-вывода, сетевое оборудование, выступая как «межслойный интерфейс», с одной стороны которого аппаратура, а с другой — приложения пользователя. В отличие от прикладного программного обеспечения, системное не решает конкретные практические задачи, а лишь обеспечивает работу других программ, предоставляя им сервисные функции, абстрагирующие детали аппаратной и микропрограммной реализации вычислительной системы, управляет аппаратными ресурсами вычислительной системы. Отнесение того или иного программного обеспечения к системному условно, и зависит от соглашений, используемых в конкретном контексте. Как правило, к системному программному обеспечению относятся операционные системы, утилиты[⇨], системы управления базами данных, широкий класс связующего программного обеспечения.

Встроенные программы[править | править вики-текст]

Встроенные программы (firmware, «прошивки») — это программы, хранящиеся в постоянной (энергонезависимой) памяти цифрового электронного устройства и автоматически вызываемые при его включении[37]. В ряде случаев (например, BIOS IBM-PC совместимых компьютеров) встроенные программы являются по сути частью операционной системы, хранящейся в постоянной памяти. В достаточно простых устройствах вся операционная система может быть встроенной. Многие периферийные устройства современных компьютеров имеют собственные прошивки, осуществляющие управление этими устройствами и упрощающие взаимодействие с ними. Многие устройства допускают замену встроенного программного обеспечения («перепрошивку»). Обычно встроенное программное обеспечение разрабатывается или заказывается производителями устройства и поставляется вместе с устройством, однако пользователи по тем или иным причинам иногда меняют фирменное встроенное программное обеспечение на прошивку, разработанную для устройства сторонними производителями, хотя такие действия (установка неавторизованной прошивки) могут аннулировать гарантийные обязательства фирмы-производителя устройства перед пользователем.

Утилиты[править | править вики-текст]

Вспомогательные компьютерные программы в составе общего программного обеспечения для выполнения специализированных типовых задач, связанных с работой оборудования и операционной системы. Утилиты предоставляют доступ к возможностям (параметрам, настройкам, установкам), недоступным без их применения, либо делают процесс изменения некоторых параметров проще (автоматизируют его). Утилиты могут входить в состав операционных систем, идти в комплекте со специализированным оборудованием или распространяться отдельно.

Прикладное программное обеспечение[править | править вики-текст]

Прикладное программное обеспечение — программа, предназначенная для выполнения определенных пользовательских задач и рассчитанная на непосредственное взаимодействие с пользователем.

Инструментальное программное обеспечение[править | править вики-текст]

Программное обеспечение, предназначенное для использования в ходе разработки и сопровождения программ, в отличие от прикладного и системного программного обеспечения. Строго говоря, определение последнего включает в себя определение инструментального, поэтому инструментальное можно считать обособленным подклассом прикладного ПО.

Примеры средств разработки программного обеспечения:

Лицензия[править | править вики-текст]

Пользователь получает программное обеспечение вместе с лицензией, которая предоставляет ему право использовать программный продукт при условии выполнения положений о лицензировании. Как правило, эти условия ограничивают возможности пользователя передавать программный продукт другим пользователям, изменять код.

Часть программного обеспечения поставляется со свободной лицензией. Такие лицензии позволяют распространять программное обеспечение, а также модифицировать его.

Часть программного обеспечения распространяется как бесплатное. Существует также условно бесплатное программное обеспечение. В этом случае обычно пользователь бесплатно получает демонстрационную версию программного продукта с несколько ограниченными возможностями на определенный испытательный период, а после его окончания обязан или приобрести продукт, или деинсталлировать его.

См. также[править | править вики-текст]

Логотип «Викиновостей»
В Викиновостях есть события по этой теме:
Программное обеспечение

Примечания[править | править вики-текст]

  1. Ожегов С. И. Словарь русского языка. — М.: Русский язык, 1986. — С. 364.
  2. Акцентологический словарь
  3. 1 2 Словари русского языка — Проверка слова «обеспечение» Грамота.ру
  4. Издание орфографического словаря Ожегова 2007 года приводит единственный вариант — обеспече́ние. // Орфографический словарь русского языка / Под редакцией С. И. Ожегова. Локид-Пресс, 2007. 912 с. ISBN 5-320-00396-X.
  5. Издание словаря Розенталя 2006 и 2007 года тоже приводит единственный вариант — обеспече́ние // Д. Э. Розенталь. Русский язык. Справочник-практикум. Оникс, Мир и образование, 2007. ISBN 5-488-00712-1, 5-94666-332-1, 978-5-488-01360-5.
  6. Батоврин В. К., 2012.
  7. Система обработки информации — одна или большее число компьютерных систем и устройств, таких как офисное и коммуникационное оборудование, которые выполняют обработку информации //Стандарт ISO/IEC 2382-1
  8. IEEE Std 829—2008 IEEE Standard for Software and System Test Documentation
  9. ISO/IEC 26514 Systems and Software Engineering — Requirements for designers and developers of user documentation
  10. Согласно ГОСТ 19.101-77 К программным относят документы, содержащие сведения, необходимые для разработки, изготовления, сопровождения и эксплуатации программ.
  11. Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.
  12. Липаев В. В. Проектирование программных средств. Учебное пособие — М.: Высшая школа. 302 с. ISBN 5-06-001570-X
  13. Computer Languages, 1989, Возможности программного управления, с. 21.
  14. John Tukey, 85, Statistician; Coined the Word 'Software', Obituaries, New York Times (July 28, 2000).
  15. 1 2 3 Campbell-Kelly, 2003, 1. The Software Industry § Periodization, Sectorization, and Capabilities, p. 3.
  16. Computer Languages, 1989, 1. Невидимый конструктор § Предвестники компьютерной эры, с. 11.
  17. Turing A. M. On computable numbers with an application to the Entscheidungsproblem // Proc. London Maths. Soc. (Series 2). — 1936. — Vol. 42. — P. 230—265. — DOI:10.1112/plms/s2-42.1.230.
  18. Turing, A. M. (1938). «On Computable Numbers, with an Application to the Entscheidungsproblem. A Correction». Proc. London Maths. Soc. (Series 2) 43: 544—546. DOI:10.1112/plms/s2-43.6.544.
  19. Hally Mike. Electronic brains/Stories from the dawn of the computer age. — London: British Broadcasting Corporation and Granta Books, 2005. — P. 79. — ISBN 1-86207-663-4.
  20. Computer Languages, 1989, 1. Невидимый конструктор, с. 10-11.
  21. Computer Languages, 1989, 1. Невидимый конструктор, с. 14-16.
  22. Computer Languages, 1989, 1. Невидимый конструктор § Создание кодов, понятных человеку, с. 16.
  23. Computer Languages, 1989, 1. Невидимый конструктор § Шаг на благо программирования, с. 18-20.
  24. Computer Languages, 1989, 1. Невидимый конструктор § Шаг на благо программирования, с. 20.
  25. 1 2 Campbell-Kelly, 2003, 1. The Software Industry, p. 1.
  26. 1 2 3 4 5 Campbell-Kelly, 2003, 1. The Software Industry § Periodization, Sectorization, and Capabilities, p. 4.
  27. 1 2 Campbell-Kelly, 2003, 1. The Software Industry § Software Contractors, p. 5.
  28. Campbell-Kelly, 2003, 1. The Software Industry § Periodization, Sectorization, and Capabilities, p. 3-4.
  29. Computer Languages, 1989, 1. Невидимый конструктор, с. 10.
  30. 1 2 Computer Languages, 1989, 3. Расцвет программного обеспечения § Производство программного обеспечения становится самостоятельной отраслью, с. 61.
  31. Campbell-Kelly, 2003, 1. The Software Industry § Corporate Software Products, p. 6.
  32. Computer language, 1989, 3. Расцвет программного обеспечения § Первые промышленные стандарты, с. 68-69.
  33. Computer language, 1989, 3. Расцвет программного обеспечения § Первые промышленные стандарты, с. 68.
  34. 1 2 Campbell-Kelly, 2003, 1. The Software Industry § Mass-Market Software Products, p. 7.
  35. Computer language, 1989, 3. Расцвет программного обеспечения § Четыре «рабочие лошадки», с. 75-84.
  36. ГОСТ 19.101-77
  37. Г. Бетс, Б. Брайндли, С. Уильямс и др. Встроенное программное обеспечение // Бизнес. Толковый словарь / Общая редакция: д.э.н. Осадчая И.М.. — М. : Весь Мир", 1998.

Литература[править | править вики-текст]

  • ГОСТ Р ИСО/МЭК 12207-2010 Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств.
  • Батоврин В. К. Толковый словарь по системной и программной инженерии. — М.: ДМК Пресс, 2012. — С. 280. — ISBN 978-5-94074-818-2.
  • Брукс Ф. Мифический человеко-месяц или как создаются программные системы. — СПб.: Символ-Плюс, 1999.
  • ДеМарко Т. Deadline. Роман об управлении проектами. — М.: Манн, Иванов и Фербер. — 2013. — 352 с. ISBN 978-5-91657-284-1
  • ДеМарко Т., Листер Т. Человеческий фактор. Успешные проекты и команды. — М.: Символ-Плюс. — 2014. — 288 с. ISBN 978-5-93286-217-9
  • Йордан Э. Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте. — М.: Лори, 2012. — 290 с. ISBN 978-5-85582-227-3
  • Соммервилл И.. Инженерия программного обеспечения. — Издательство Вильямс, 2002. — 624 с. ISBN 5-8459-0330-0
  • 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.