19 September 2018, Wednesday
Редактор перевода
Александр Чарыков
Статьи Wikiyours - это англоязычные статьи, переведённые на русский язык. Любой, кто владеет английским языком может стать обладателем своей собственной статьи и заработать деньги на её переводе. Соединим приятное с полезным!
Для перевода выберите статью.
Для перевода статьи
выберите категорию
Предложить изменения

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

Содержание
  1. Что такое программное обеспечение?
  2. Язык программирования
  3. История создания программного обеспечения 
  4. Типы программного обеспечения
  5. Что включает в себя установка программного обеспечения
  6. Выполнение установки программного обеспечения
  7. Качество программного обеспечения 
  8. Патенты на программное обеспечение
  9. Разработка и внедрение программного обеспечения
  10. Крупнейшие производители программного обеспечения

Что такое программное обеспечение?

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

Термин "программное обеспечение" (ПО) впервые был предложен Аланом Тьюрингом и использован в этом смысле Джоном У. Тьюки в 1957 году. В области компьютерных наук и разработки программного обеспечения компьютерное программное обеспечение - это вся информация, обрабатываемая компьютерными системами, программы и данные.

Что включает в себя понятие программное обеспечение

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

На самом низком уровне исполняемый код состоит из инструкций языка компьютера, специфичных для конкретного процессора - обычно центрального процессора (CPU). Язык компьютера состоит из групп двоичных значений, обозначающих инструкции процессора, которые переводят состояние компьютера из предыдущего состояния.  Например, инструкция может изменить значение, хранящееся в определенном месте хранения на компьютере - эффект, который не наблюдается непосредственно пользователем. Инструкция может также (косвенно) заставить появляться чему-нибудь на экране компьютерной системы—изменение состояния, которое должно быть видимым для пользователя. Процессор выполняет инструкции в том порядке, в каком они поступают, если только он не получил указание "перейти" к другой инструкции, или совершить прерывание.

Язык программирования

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

История создания программного обеспечения 

Порядок действий (алгоритм), который считается первой программой, был написан Адой Лавлейс в 19 веке, для проекта аналитической машины. Однако ни аналитическая машина, ни какое-либо программное обеспечение для неё никогда не были созданы.

Первая теория о программном обеспечении до создания компьютеров такими, какими мы их знаем сегодня, была предложена Аланом Тьюрингом в 1935 году в его работе "Computable numbers with an application to the Entscheidungsproblem (Decision problem)" (О вычислимых числах в приложении к проблеме разрешения).

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

Однако до 1946 года программного обеспечения, каким мы его теперь понимаем, — в виде программ, хранящиеся в программной памяти  цифровых компьютеров - еще не существовало. Вместо этого узлы первых электронных вычислительных устройств пересоединялись с целью "перепрограмирования" их.

Типы программного обеспечения

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

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

Исходя из поставленной цели, программное обеспечение можно разделить на:

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

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

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

  • Драйверы устройств управляют или контролируют определенный тип устройств, подключенных к компьютеру. Каждому устройству требуется, по крайней мере, один соответствующий драйвер. Поскольку на компьютере обычно установлено, как минимум, одно входное устройство и, по крайней мере, одно выходное устройство, компьютеру требуется несколько драйверов устройств.

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

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

Что включает в себя установка программного обеспечения

  • К настольным приложениям относятся такие приложения, как веб-браузеры и Microsoft Office, а также приложения для смартфонов и планшетов (так называемые "apps"). Произошел прорыв в некоторых областях производства программного обеспечения, в результате которого случилось в некоторой степени объединение настольных приложений с мобильными приложениями. Windows 8, а затем Ubuntu Touch, попытались представить единый стиль пользовательского интерфейса приложений для использования на настольных компьютерах, ноутбуках и мобильных телефонах.

  • Сценарии JavaScript-это программные компоненты, традиционно встроенные в веб-страницы, которые запускаются непосредственно внутри веб-браузера при загрузке веб-страницы без использования плагина веб-браузера. Программное обеспечение, написанное на других языках программирования, также может быть запущено в веб-браузере, если программное обеспечение переведено на JavaScript или установлен плагин веб-браузера, поддерживающий этот язык; наиболее распространенным примером последнего являются скрипты ActionScript, поддерживаемые плагином Adobe Flash.

Программное обеспечение сервера включает в себя:

  • Веб-приложений, которые обычно выполняются на веб-сервере и выводят динамически генерируемые веб-страницы в веб-браузерах, используя напр., PHP, Java, ASP.NET или даже JavaScript, который выполняется на стороне сервера. В настоящее время они обычно содержат некоторый код на  JavaScript для запуска в веб-браузере, и, в таком случае они, как правило, работают частично на стороне сервера, частично - на стороне клиентского веб-браузера.

  • Плагины и расширения -  это программное обеспечение, которое расширяет или изменяет функциональные возможности другой части программного обеспечения. Их использование требуется в программном обеспечении, чтобы последнее  могло функционировать;

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

  • Микрокод - это особый, относительно незаметный тип встроенного программного обеспечения, который даёт микроинструкции процессору, как выполнять машинный код, так что это на самом деле ещё более низкий уровень, чем машинный код. Микрокод, как правило, является собственностью производителя процессоров, а также производителем поставляются пользователю любые необходимые коррекционные обновления микрокодового программного обеспечения (что гораздо дешевле, чем отправка на замену аппаратного процессора). Таким образом, обычному программисту вряд ли когда придётся иметь дело с микрокодом.

Инструменты программирования

Инструменты разработки программ также являются программным обеспечением в виде программ или приложений, с помощью которых разработчики ПО (также называемые программистами, кодерами, хакерами или инженерами-программистами) создают, отлаживают, обслуживают (другими словами, улучшают или исправляют), или иным образом поддерживают программное обеспечение. Программное обеспечение написано на одном или нескольких языках программирования. Существует много языков программирования, и каждый из них имеет по крайней мере одно воплощение, которое состоит из его собственного набора инструментов программирования. Эти инструменты могут быть относительно самостоятельными программами, такими как компиляторы, отладчики, интерпретаторы, компоновщики  и текстовые редакторы, которые могут быть объединены для выполнения задачи; или же они могут сформировать интегрированную среду разработки (IDE), которая сочетает в себе большую часть или всю функциональность таких автономных инструментов. IDE могут осуществлять свою работу, либо путем вызова соответствующих отдельных инструментов, или путем повторной обновленной реализацией их функциональных возможностей. IDE может облегчить выполнение определенных задач, таких как поиск в файлах в конкретном проекте. Многие реализации языка программирования предоставляют возможность использования как отдельных инструментов, так и IDE.

Актуальность темы программного обеспечения

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

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

  • Прикладное программное обеспечение: прикладное программное обеспечение или приложения являются тем, о чем большинство людей думают, когда они думают о программном обеспечении. Типичные примеры включают в себя офисные пакеты и видеоигры. Прикладное программное обеспечение часто приобретается отдельно от компьютерного оборудования. Иногда приложения поставляются с компьютером, но это не меняет того факта, что они выполняются как самостоятельные  приложения. Приложения, как правило, являются независимыми от операционной системы программами , хотя они часто адаптированы для конкретных платформ.Большинство потребителей принимают компиляторы, базы данных, и другое "системное программное обеспечение" за приложения.

  • Написанное пользователем программное обеспечение: разработки конечных пользователей адаптируют системы для удовлетворения конкретных потребностей пользователей. Пользовательское программное обеспечение включают в себя шаблоны электронных таблиц и шаблоны обработки текста. Даже почтовые фильтры являются своего рода пользовательским программным обеспечением. Пользователи создают это ПО сами и часто упускать из виду важность этого процесса. В зависимости от того, насколько грамотно написанное пользователем программное обеспечение интегрировано в начальные пакеты приложений, многие пользователи могут не замечать различия между исходными пакетами и тем, что в них было добавлено коллегами.

Выполнение установки программного обеспечения

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

Перемещение данных обычно происходит из одного места в памяти в другое. Иногда речь идет о перемещении данных между памятью и регистрами, которые обеспечивают высокоскоростной доступ к данным в ЦП (центральном процессоре). Перемещение данных, особенно больших объемов, может быть затратным. Поэтому этого иногда можно избежать, используя вместо самих данных "указатели" на данные. Вычисления состоят из простых операций, таких как увеличение значения переменной. Более сложные вычисления могут объединять в себе множество операций и элементов данных.

Качество программного обеспечения 

Качество программного обеспечения играет важную роль, особенно в коммерческом и системном программном обеспечении, таком как Microsoft Office, Microsoft Windows и Linux. Если программа неисправна (глючит или имеет баги), она может удалить наработки пользователя, привести к неисправности компьютера и сделать другие неожиданные вещи. Недостатки и ошибки, называемые "багами", часто обнаруживаются во время альфа и бета-тестирования. Программное обеспечение также часто бывает подвержено тому, что известно под названием устаревание программного обеспечения, постепенное ухудшение производительности в результате сочетания допущенных ошибок.

Немало ошибок обнаруживается и устраняется (отлаживается) с помощью тестирования программного обеспечения. Однако тестирование программного обеспечения редко, а точнее, никогда не устраняет все ошибки. Некоторые программисты говорят, что "В каждой программе есть по крайней мере одна ошибка" (Закон Любарского). В каскадном методе разработки программного обеспечения, как правило, привлекаются отдельные команды тестировщиков, но в более современных методах, под обобщенным названием методы гибкой разработки программного обеспечения, разработчики регулярно предоставляют возможность протестировать демонстрационные версии программного обеспечения самим пользователям / клиентам, чтобы получать сведения о недоработках ПО через обратную связь. Программное обеспечение может быть протестировано с помощью модульного тестирования, регрессионного тестирования и других методов, которые выполняются вручную или чаще всего автоматически, так как объем тестируемого кода может быть довольно большим. Например, NASA применяет весьма тщательные процедуры тестирования программного обеспечения для многих операционных систем и систем связи. Многие операции NASA взаимодействуют и идентифицируют друг друга с помощью командных программ. Это позволяет многим сотрудникам NASA комплексно проверять и оценивать функциональные системы. Программы, содержащие командное программное обеспечение, позволяют облегчать совместную работу аппаратного обеспечения и системных операций.

Лицензия на программное обеспечение 

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

Проприетарное программное обеспечение можно разделить на два типа:

  • Бесплатные программы, сюда относится категория "бесплатная пробная версия" программного обеспечения или "freemium" версия (в прошлом термин "условно-бесплатное ПО" часто использовался для бесплатных пробных и "freemium" версий программного обеспечения). Как следует из названия, бесплатное программное обеспечение может быть использовано бесплатно, хотя в случае бесплатных пробных или "freemium" версий программного обеспечения, это иногда справедливо только в течение ограниченного периода времени или для версий с ограниченной функциональностью.

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

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

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

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

Патенты на программное обеспечение являются спорными в индустрии программного обеспечения, многие люди придерживаются различных взглядов на них. Один из источников разногласий заключается в том, что вышеупомянутый раздел между первоначальными идеями и патентами, как представляется, не соблюдается на практике патентными юристами—например, патентом на аспектно-ориентированное программирование (АОП), который предъявляет права на любой инструмент программирования, реализующий идею АОП, каким бы образом он не был  реализован. Еще одним источником разногласий является влияние на инновации, при этом многие выдающиеся эксперты и компании утверждают, что программное обеспечение является столь быстро развивающейся областью, что патенты на программное обеспечение просто создают огромные дополнительные судебные издержки и риски и фактически тормозят инновации. В случае обсуждения патентов на программное обеспечение за пределами Соединенных Штатов был сделан аргумент о том, что крупные американские корпорации и патентные юристы, вероятно, будут основными бенефициарами разрешения или продолжения разрешать патенты на программное обеспечение.

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

Разработка и внедрение программного обеспечения зависят от сложности программного обеспечения. Например, на дизайн и разработку  Microsoft Word потребовалось гораздо больше времени, чем на дизайн и разработку Microsoft Notepad, поскольку последний имеет гораздо меньшую базовую функциональность.

Программное обеспечение, как правило, разрабатывается и создается (как говорится, кодируется / записывается / программируется) в интегрированных средах разработки (IDE), таких как Eclipse, IntelliJ и Microsoft Visual Studio, что позволяет упростить процесс написания и компиляции программного обеспечения (если возможно). Как уже отмечалось в другом разделе, программное обеспечение обычно создается поверх существующего программного обеспечения, которое предоставляет свой  интерфейс прикладного программирования (API), как это делают GTK +, JavaBeans или Swing. Библиотеки (API) можно классифицировать по их назначению. Например, Spring Framework используется для реализации корпоративных приложений, библиотеки форм для Windows используется для разработки графического пользовательского интерфейса (GUI) приложений, Microsoft Word и Windows Communication Foundation использу.тся для разработки веб-сервисов. Когда программа разработана, она опирается на API. Например, если пользователь разрабатывает приложения для настольной системы Microsoft Windows, он или она могут использовать библиотеку .NET Windows Forms для разработки настольных приложений и вызывать её API-интерфейсы, такие как Form1.Close () и Form1.Show (), чтобы закрывать или открывать приложение, и писать дополнительные операции , которые необходимо программе выполнить. Без этих API-интерфейсов, программист должен написать эти API самостоятельно. Такие компании, как Oracle и Microsoft предоставляют свои собственные API, так что многие приложения, написанные с использованием их программных библиотек, как правило, содержат в себе многочисленные  API.

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

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

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

Крупнейшие производители программного обеспечения

Большое разнообразие компаний-разработчиков программного обеспечения и программистов во всем мире образуют софтверную индустрию (отрасль производства программного обеспечения). Софтверная индустрия может быть достаточно прибыльной отраслью: Билл Гейтс, основатель Microsoft, стал самым богатым человеком в мире в 2009 году, во многом благодаря его собственности на значительное количество акций Microsoft, - компании, создавшей  программных продуктов Microsoft Windows и Microsoft Office.

Некоммерческие софтверные организации: Free Software Foundation (Фонд свободного программного обеспечения), проект GNU (проект по разработке свободного программного обеспечения (СПО)) и Mozilla Foundation. Организации стандарта программного обеспечения, такие как W3C (Консорциум Всемирной паутины), IETF (Инженерный совет Интернета) разрабатывают рекомендованные стандарты программного обеспечения, таких как XML, HTTP и HTML, так, что программное обеспечение может взаимодействовать через эти стандарты.

Другие известные крупные компании по разработке программного обеспечения: Oracle, Novell, SAP, Symantec, Adobe Systems и Corel, а небольшие компании часто предоставляют инновации.