stringtranslate.com

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

Программное обеспечение, написанное на языке JavaScript

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

История программного обеспечения тесно связана с развитием цифровых компьютеров в середине 20-го века. Ранние программы были написаны на машинном языке, специфичном для аппаратного обеспечения. Введение языков программирования высокого уровня в 1958 году позволило использовать больше инструкций, понятных человеку, что сделало разработку программного обеспечения более простой и переносимой между различными архитектурами компьютеров . Программное обеспечение на языке программирования запускается через компилятор или интерпретатор для выполнения на оборудовании архитектуры. Со временем программное обеспечение стало сложным из-за развития сетей , операционных систем и баз данных .

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

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

Рост облачных вычислений привел к появлению новой модели поставки программного обеспечения — Software as a Service (SaaS). В SaaS приложения размещаются у провайдера и доступны через Интернет .

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

История

Интегральная схема является важнейшим изобретением для создания современных программных систем. [2]

Первое использование слова «программное обеспечение» приписывают математику Джону Уайлдеру Тьюки в 1958 году. [3] Первые программируемые компьютеры, которые появились в конце 1940-х годов, [4] были запрограммированы на машинном языке . Машинный язык сложен для отладки и непереносим на другие компьютеры. [5] Первоначально аппаратные ресурсы были дороже человеческих ресурсов . [6] По мере того, как программы становились сложными, производительность программистов стала узким местом. Введение языков программирования высокого уровня в 1958 году скрыло детали оборудования и выразило базовые алгоритмы в коде. [7] [8] Ранние языки включают Fortran , Lisp и COBOL . [8]

Типы

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

Существует два основных типа программного обеспечения:

Сравнение локального оборудования и программного обеспечения, инфраструктуры как услуги (IaaS), платформы как услуги (PaaS) и программного обеспечения как услуги (SaaS)

Программное обеспечение также можно классифицировать по способу его развертывания . Традиционные приложения приобретаются с бессрочной лицензией на определенную версию программного обеспечения, загружаются и запускаются на оборудовании, принадлежащем покупателю. [17] Развитие Интернета и облачных вычислений позволило создать новую модель — программное обеспечение как услуга (SaaS), [18] в которой поставщик размещает программное обеспечение (обычно построенное поверх арендованной инфраструктуры или платформ ) [19] и предоставляет использование программного обеспечения клиентам, часто в обмен на абонентскую плату . [17] К 2023 году продукты SaaS, которые обычно поставляются через веб-приложение , стали основным методом, с помощью которого компании доставляют приложения. [20]

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

Диаграмма традиционного жизненного цикла разработки программного обеспечения с 1988 года. Цифры представляют типичную стоимость каждой фазы.

Компании-разработчики программного обеспечения стремятся поставлять высококачественный продукт в срок и в рамках бюджета. Проблема заключается в том, что оценка усилий по разработке программного обеспечения часто бывает неточной. [21] Разработка программного обеспечения начинается с замысла проекта, оценки его осуществимости, анализа бизнес-требований и создания программного обеспечения . [22] [23] Большинство программных проектов ускоряют свою разработку за счет повторного использования или включения существующего программного обеспечения, либо в форме коммерческого готового программного обеспечения (COTS), либо программного обеспечения с открытым исходным кодом . [24] [25] Обеспечение качества программного обеспечения, как правило, представляет собой комбинацию ручного просмотра кода другими инженерами [26] и автоматизированного тестирования программного обеспечения . Из-за ограничений по времени тестирование не может охватить все аспекты предполагаемой функциональности программного обеспечения, поэтому разработчики часто сосредотачиваются на наиболее важной функциональности. [27] Формальные методы используются в некоторых критически важных для безопасности системах для подтверждения правильности кода, [28] в то время как тестирование пользовательского приема помогает гарантировать, что продукт соответствует ожиданиям клиентов. [29] Существует множество методологий разработки программного обеспечения , которые варьируются от выполнения всех шагов по порядку до параллельных и итеративных моделей. [30] Разработка программного обеспечения обусловлена ​​требованиями, полученными от потенциальных пользователей, в отличие от обслуживания, которое обусловлено такими событиями, как запрос на изменение. [31]

Часто программное обеспечение выпускается в незавершенном состоянии, когда у команды разработчиков заканчивается время или финансирование. [32] Несмотря на тестирование и обеспечение качества , практически все программное обеспечение содержит ошибки , из-за которых система не работает так, как задумано. Техническое обслуживание программного обеспечения после выпуска необходимо для устранения этих ошибок, когда они обнаруживаются, и для поддержания работоспособности программного обеспечения, поскольку окружающая среда со временем меняется. [33] Новые функции часто добавляются после выпуска. Со временем уровень технического обслуживания становится все более ограниченным, прежде чем полностью прекратиться, когда продукт изымается с рынка. [34] По мере старения программного обеспечения оно становится известным как устаревшее программное обеспечение и может оставаться в использовании в течение десятилетий, даже если не осталось никого, кто знает, как его исправить. [35] В течение срока службы продукта техническое обслуживание программного обеспечения, по оценкам, составляет 75 процентов или более от общей стоимости разработки. [36] [37]

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

Качество и безопасность

Качество программного обеспечения определяется как соответствие заявленным требованиям, а также ожиданиям клиентов. [40] Качество — это всеобъемлющий термин, который может относиться к правильному и эффективному поведению кода, его возможности повторного использования и переносимости или простоте модификации. [41] Обычно более экономически выгодно встраивать качество в продукт с самого начала, а не пытаться добавить его позже в процессе разработки. [42] Более качественный код снизит стоимость жизненного цикла как для поставщиков, так и для клиентов, поскольку он более надежен и прост в обслуживании . [43] [44] Сбои программного обеспечения в критически важных для безопасности системах могут быть очень серьезными, включая смерть. [43] По некоторым оценкам, стоимость некачественного программного обеспечения может достигать 20–40 процентов от продаж. [45] Несмотря на цель разработчиков поставлять продукт, который работает полностью так, как задумано, практически все программное обеспечение содержит ошибки. [46]

Развитие Интернета также значительно увеличило потребность в компьютерной безопасности , поскольку это позволило злоумышленникам проводить кибератаки удаленно. [47] [48] Если ошибка создает риск безопасности, она называется уязвимостью . [49] [50] Для исправления выявленных уязвимостей часто выпускаются исправления программного обеспечения , но те, которые остаются неизвестными ( нулевые дни ), а также те, которые не были исправлены, по-прежнему подлежат эксплуатации. [51] Уязвимости различаются по своей способности использоваться злоумышленниками , [49] и фактический риск зависит от характера уязвимости, а также от ценности окружающей системы. [52] Хотя некоторые уязвимости могут использоваться только для атак типа «отказ в обслуживании» , которые ставят под угрозу доступность системы, другие позволяют злоумышленнику внедрять и запускать собственный код (так называемое вредоносное ПО ) без ведома пользователя. [49] Чтобы предотвратить кибератаки, все программное обеспечение в системе должно быть разработано так, чтобы выдерживать внешние атаки и восстанавливаться после них. [48] ​​Несмотря на усилия по обеспечению безопасности, значительная часть компьютеров заражена вредоносным ПО. [53]

Кодирование и выполнение

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

Исходный код компьютерной программы на языке C. Серые линии — это комментарии , которые объясняют программу людям. При компиляции и запуске она выдаст вывод « Hello, world! ».

Языки программирования — это формат, в котором пишется программное обеспечение. С 1950-х годов были изобретены тысячи различных языков программирования; некоторые из них использовались десятилетиями, в то время как другие вышли из употребления. [54] Некоторые определения классифицируют машинный код — точные инструкции, непосредственно реализуемые аппаратным обеспечением — и язык ассемблера — более понятную человеку альтернативу машинному коду, операторы которой могут быть переведены один в один в машинный код — как языки программирования. [55] Программы, написанные на языках программирования высокого уровня, используемых для создания программного обеспечения, имеют несколько основных характеристик: для их написания не требуется знание машинного кода, их можно переносить на другие компьютерные системы, и они более лаконичны и понятны человеку, чем машинный код. [56] Они должны быть как понятными человеку, так и способными быть переведенными в однозначные инструкции для компьютерного оборудования. [57]

Составление, интерпретация и исполнение

Изобретение языков программирования высокого уровня произошло одновременно с компиляторами, необходимыми для их автоматического перевода в машинный код. [58] Большинство программ не содержат всех ресурсов, необходимых для их запуска, и полагаются на внешние библиотеки . Часть функции компилятора заключается в связывании этих файлов таким образом, чтобы программа могла быть выполнена оборудованием. После компиляции программа может быть сохранена как объектный файл , а загрузчик (часть операционной системы) может взять этот сохраненный файл и выполнить его как процесс на оборудовании компьютера. [59] Некоторые языки программирования используют интерпретатор вместо компилятора. Интерпретатор преобразует программу в машинный код во время выполнения , что делает их в 10–100 раз медленнее, чем компилируемые языки программирования. [60] [61]

Правовые вопросы

Обязанность

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

Лицензии

Blenderбесплатная программа

Исходный код защищен законом об авторском праве , который наделяет владельца исключительным правом копировать код. Базовые идеи или алгоритмы не защищены законом об авторском праве, но часто рассматриваются как коммерческая тайна и скрываются такими методами, как соглашения о неразглашении . [63] Авторское право на программное обеспечение было признано с середины 1970-х годов и принадлежит компании, которая производит программное обеспечение, а не сотрудникам или подрядчикам , которые его написали. [64] Использование большей части программного обеспечения регулируется соглашением ( лицензией на программное обеспечение ) между владельцем авторских прав и пользователем. Проприетарное программное обеспечение обычно продается по ограничительной лицензии, которая ограничивает копирование и повторное использование (часто реализуется с помощью таких инструментов, как управление цифровыми правами (DRM)). [65] Лицензии с открытым исходным кодом , напротив, разрешают свободное использование и распространение программного обеспечения с небольшим количеством условий. [64] Большинство лицензий с открытым исходным кодом, используемых для программного обеспечения, требуют, чтобы модификации были выпущены по той же лицензии, что может создать сложности при повторном использовании программного обеспечения с открытым исходным кодом в проприетарных проектах. [66]

Патенты

Патенты предоставляют изобретателю исключительную, ограниченную по времени лицензию на новый продукт или процесс. [67] Идеи о том, чего может достичь программное обеспечение, не защищены законом, а конкретные реализации вместо этого защищены законом об авторском праве . В некоторых странах требование, чтобы заявленное изобретение оказывало влияние на физический мир, также может быть частью требований для того, чтобы патент на программное обеспечение считался действительным. [68] Патенты на программное обеспечение исторически были спорными . До дела 1998 года State Street Bank & Trust Co. против Signature Financial Group, Inc. патенты на программное обеспечение, как правило, не признавались в Соединенных Штатах. В том случае Верховный суд постановил, что бизнес-процессы могут быть запатентованы. [69] Патентные заявки сложны и дорогостоящи, а судебные иски, связанные с патентами, могут привести к увеличению стоимости продуктов. [70] В отличие от авторских прав, патенты, как правило, применяются только в той юрисдикции, где они были выданы. [71]

Влияние

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

Инженер Кейперс Джонс пишет, что «компьютеры и программное обеспечение вносят глубокие изменения во все аспекты человеческой жизни: образование, работу, войну, развлечения, медицину, юриспруденцию и все остальное». [73] Оно стало повсеместным в повседневной жизни в развитых странах . [74] Во многих случаях программное обеспечение дополняет функциональность существующих технологий, таких как бытовая техника и лифты . [75] Программное обеспечение также породило совершенно новые технологии, такие как Интернет , видеоигры , мобильные телефоны и GPS . [75] [76] Новые методы общения, включая электронную почту , форумы , блоги , микроблоги , вики и социальные сети , стали возможны благодаря Интернету. [77] Огромные объемы знаний, превосходящие любую бумажную библиотеку, теперь доступны с помощью быстрого поиска в Интернете . [76] Большинство творческих профессионалов перешли на программные инструменты, такие как автоматизированное проектирование , 3D-моделирование , цифровое редактирование изображений и компьютерная анимация . [72] Почти каждое сложное устройство управляется программным обеспечением. [76]

Ссылки

  1. ^ Stair, Ralph M. (2003). Принципы информационных систем, шестое издание . Томсон. стр. 16. ISBN 0-619-06489-7. Программное обеспечение состоит из компьютерных программ, которые управляют работой компьютера.
  2. Джонс 2014, стр. 19, 22.
  3. ^ Трейси 2021, стр. 2.
  4. ^ Габбриелли и Мартини 2023, с. 519.
  5. ^ Габбриелли и Мартини 2023, стр. 520–521.
  6. ^ Габбриелли и Мартини 2023, с. 522.
  7. ^ Габбриелли и Мартини 2023, с. 521.
  8. ^ ab Tracy 2021, стр. 1.
  9. ^ Андерсон и Далин 2014, с. 6.
  10. ^ abc Anderson & Dahlin 2014, с. 7.
  11. ^ Таненбаум и Бос 2023, стр. 5.
  12. ^ Андерсон и Далин 2014, стр. 7, 9, 13.
  13. ^ Андерсон и Далин, 2014, стр. 6–7.
  14. ^ Джонс 2014, стр. 121.
  15. ^ Трейси 2021, стр. 66.
  16. ^ Трейси 2021, стр. 72.
  17. ^ ab O'Regan 2022, стр. 386.
  18. ^ Кэмпбелл-Келли и Гарсия-Шварц 2015, стр. 156–157.
  19. ^ Розати и Линн 2020, стр. 23.
  20. Уотт 2023, стр. 4.
  21. О'Реган 2022, стр. 7.
  22. О'Реган 2022, стр. 5.
  23. ^ ab Dooley 2017, стр. 1.
  24. ^ О'Риган 2022, стр. 18, 110–111.
  25. Трейси 2021, стр. 43, 76.
  26. ^ О'Риган 2022, стр. 117–118.
  27. О'Реган 2022, стр. 54.
  28. О'Реган 2022, стр. 267.
  29. О'Реган 2022, стр. 20.
  30. О'Реган 2022, стр. 9.
  31. ^ Трипатия и Найк 2014, с. 26.
  32. ^ Рейфер 2012, стр. 22.
  33. ^ Трипати и Найк 2014, стр. 4, 27.
  34. ^ Трипатия и Найк 2014, с. 89.
  35. ^ Трейси 2021, стр. 3.
  36. ^ Варга 2018, стр. 6.
  37. ^ Улзиит и др. 2015, стр. 764.
  38. ^ Такер, Морелли и де Сильва 2011, с. 7.
  39. ^ Сталл 2018, стр. 24–25.
  40. ^ Галин 2018, стр. 3.
  41. ^ Галин 2018, стр. 26.
  42. О'Реган 2022, стр. 68, 117.
  43. ^ ab O'Regan 2022, стр. 3, 268.
  44. ^ Варга 2018, стр. 12.
  45. О'Реган 2022, стр. 119.
  46. ^ Эблон и Богарт 2017, стр. 1.
  47. ^ Кэмпбелл-Келли и Гарсия-Шварц 2015, стр. 164.
  48. ^ ab O'Regan 2022, стр. 266.
  49. ^ abc Ablon & Bogart 2017, стр. 2.
  50. ^ Дасвани и Эльбаяди 2021, с. 25.
  51. ^ Дасвани и Эльбаяди, 2021, стр. 26–27.
  52. ^ Хабер и Хибберт 2018, стр. 5–6.
  53. ^ Китчин и Додж 2011, стр. 37.
  54. ^ Трейси 2021, стр. 117.
  55. Трейси 2021, стр. 118–120.
  56. Трейси 2021, стр. 118–119.
  57. ^ Китчин и Додж 2011, стр. 26.
  58. ^ Трейси 2021, стр. 121.
  59. Трейси 2021, стр. 122–123.
  60. О'Реган 2022, стр. 375.
  61. ^ Sebesta 2012, стр. 28.
  62. Китчин и Додж 2011, стр. 36–37.
  63. ^ О'Риган, 2022, стр. 394–396.
  64. ^ ab O'Regan 2022, стр. 403.
  65. О'Реган 2022, стр. 394, 404.
  66. ^ Лангер 2016, стр. 44–45.
  67. О'Реган 2022, стр. 395.
  68. ^ Херардо Кон Диас, «Текст в машине: американское право об авторском праве и многообразие программного обеспечения, 1974–1978», Technology and Culture 57 (октябрь 2016 г.), 753–79.
  69. ^ Джонс 2014, стр. 19.
  70. О'Реган 2022, стр. 398.
  71. О'Реган 2022, стр. 399.
  72. ^ ab Manovich 2013, стр. 333.
  73. ^ Джонс 2014, стр. 32.
  74. ^ Китчин и Додж 2011, стр. iv.
  75. ^ ab Kitchin & Dodge 2011, стр. 5.
  76. ^ abc Jones 2014, стр. xxviii.
  77. ^ Манович 2013, стр. 329.

Источники