stringtranslate.com

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

Кредитные карты — одна из многих повседневных технологий, зависящих от программного обеспечения. [1]

Программное обеспечение состоит из компьютерных программ , которые инструктируют работу компьютера . [2]

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

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

Определение

Программное обеспечение можно определить более узко, как инструкции, выполняемые компьютерным оборудованием , или в более широком смысле, включая другие концепции, инструменты и методы, необходимые для создания исполняемой системы на компьютерном оборудовании , например проектную документацию, спецификации и наборы средств тестирования. [3] [4] Отдельная программа или файл исходного кода состоит из однозначных инструкций и алгоритмов . Программы комбинируются друг с другом и с внешним вводом, чтобы обеспечить возможность выполнения сложной задачи. [5] [4] Такие инструменты, как компиляторы , ассемблеры , блок-схемы , средства проектирования, симуляторы и архитектурные диаграммы , некоторые из которых также являются программными, необходимы для проектирования и реализации большинства вычислительных систем. [4] Хотя программное обеспечение неосязаемо , [6] [7] программное обеспечение создает инструкции для компьютерного оборудования для получения видимых и осязаемых эффектов. [8]

История

07R01 — интегральная схема компании Motorola . Интегральные схемы были важным изобретением, позволившим создавать программное обеспечение. [9]

Для создания программного обеспечения было необходимо множество более ранних изобретений, включая математику — особенно двоичную и десятичную системы счисления, а также ноль — алфавиты , письмо , механические калькуляторы , [10] булеву алгебру , транзисторы , интегральные схемы и пластмассы . [11] Программное обеспечение не могло существовать без цифровых компьютеров , так как оно создавалось специально для этих устройств и было необходимо для реализации их полезности. [12]

Первые программируемые компьютеры, появившиеся в конце 1940-х годов [13] , программировались на машинном языке (простые инструкции, которые мог непосредственно выполнять процессор). Машинный язык было трудно отлаживать, и его нельзя было переносить между различными компьютерными системами. [14] Первоначально аппаратные ресурсы были скудными и дорогими, а человеческие ресурсы были дешевле. [15] Поскольку программы становились все более сложными, производительность программистов стала узким местом. Это привело к появлению языков программирования высокого уровня в середине 1950-х годов. Эти языки абстрагировали детали аппаратного обеспечения и вместо этого были разработаны для выражения алгоритмов, которые людям было бы легче понять. [16] [17] Поскольку инструкции отличаются от базового компьютерного оборудования , программное обеспечение появилось сравнительно недавно, начиная с таких ранних языков программирования высокого уровня , как Fortran , Lisp и COBOL . [17] Первое использование слова «программное обеспечение» приписывают математику Джону Уайлдеру Тьюки в 1958 году. [4] Поскольку это первое определение программного обеспечения было отрицательным (элементы компьютера, которые не были «лампами, транзисторами, проводами, лентами и т.п. »), это оставило открытым широкое понимание концепции программного обеспечения, как утверждает историк вычислительной техники Натан Энсменгер. Для историков программное обеспечение — это социотехническая система , что означает «систему, в которой машины, люди и процессы неразрывно связаны и взаимозависимы», по словам Энсменгера. [18] Историк вычислительной техники Томас Хей настаивает на идее распространения и утверждает, что «программное обеспечение всегда включает в себя упаковку разрозненных элементов, таких как компьютерный код, методы, алгоритмы, неявные знания и права интеллектуальной собственности, в артефакт, пригодный для распространения». [19]

Первое программное обеспечение было тесно связано с базовым оборудованием и, следовательно, не было переносимо на другие системы. По мере развития новое программное обеспечение может создаваться и работать на самых разных платформах. Большая часть увеличения переносимости может быть связана со стандартизацией аспектов системы более низкого уровня, таких как сети , операционные системы и базы данных . Поскольку операционных систем относительно немного, TCP и IP используются практически во всех сетях, а SQL используется для многих запросов к базе данных, прикладное программное обеспечение может легче работать на широком спектре оборудования. [20] Увеличение количества уровней абстракции в системе является сопутствующим развитием: как в языках программирования, где оно обеспечивает лучшую структуру и повышенную модульность , а также обеспечивает виртуализацию системных ресурсов. В результате повышения стабильности и абстракции программное обеспечение становится все более сложным и может решать больше задач. [21] И промышленность, и научные круги оказали сильное влияние на разработку различных аспектов программного обеспечения. [22]

Типы

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

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

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

Программное обеспечение также можно классифицировать по способу его развертывания . Традиционные приложения приобретаются с бессрочной лицензией на определенную версию программного обеспечения, загружаются и запускаются на оборудовании, принадлежащем покупателю. [31] Развитие Интернета и облачных вычислений привело к появлению новой модели « программное обеспечение как услуга» (SaaS), [32] в которой провайдер размещает программное обеспечение (обычно построенное на базе арендованной инфраструктуры или платформ ) [33] и предоставляет использование программного обеспечения клиентам, часто в обмен на абонентскую плату . [31] К 2023 году продукты SaaS, которые обычно предоставляются через веб-приложения , стали основным методом доставки приложений компаниями. [34]

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

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

Компании-разработчики программного обеспечения стремятся предоставлять высококачественный продукт вовремя и в рамках бюджета. Проблема заключается в том, что оценка усилий по разработке программного обеспечения часто бывает неточной. [35] Разработка программного обеспечения начинается с задумки проекта, оценки его осуществимости, анализа бизнес-требований и разработки проекта программного обеспечения . [36] [37] Большинство программных проектов ускоряют свою разработку за счет повторного использования или включения существующего программного обеспечения, либо в форме готового коммерческого программного обеспечения (COTS), либо в виде программного обеспечения с открытым исходным кодом . [38] [39] Обеспечение качества программного обеспечения обычно представляет собой комбинацию ручной проверки кода другими инженерами [40] и автоматического тестирования программного обеспечения . Из-за нехватки времени тестирование не может охватить все аспекты предполагаемой функциональности программного обеспечения, поэтому разработчики часто сосредотачиваются на наиболее важных функциях. [41] Формальные методы используются в некоторых критически важных для безопасности системах для доказательства правильности кода, [42] в то время как пользовательское приемочное тестирование помогает гарантировать, что продукт соответствует ожиданиям клиентов. [43] Существует множество методологий разработки программного обеспечения , которые варьируются от выполнения всех этапов до параллельных и итеративных моделей. [44] Разработка программного обеспечения определяется требованиями потенциальных пользователей, в отличие от обслуживания, которое определяется такими событиями, как запрос на изменение. [45]

Часто программное обеспечение выпускается в незавершенном виде, когда у команды разработчиков заканчивается время или финансирование. [46] Несмотря на тестирование и контроль качества , практически все программное обеспечение содержит ошибки , из-за которых система не работает должным образом. Пост-релизное обслуживание программного обеспечения необходимо для устранения этих ошибок при их обнаружении и обеспечения работоспособности программного обеспечения по мере изменения среды с течением времени. [47] Новые функции часто добавляются после выпуска. Со временем уровень обслуживания становится все более ограниченным, а затем полностью прекращается, когда продукт снимается с рынка. [48] ​​По мере старения программного обеспечения оно становится известным как устаревшее программное обеспечение и может использоваться десятилетиями, даже если не осталось никого, кто знает, как его исправить. [6] По оценкам, в течение срока службы продукта обслуживание программного обеспечения будет составлять 75 или более процентов от общей стоимости разработки. [49] [50]

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

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

Качество программного обеспечения определяется как соответствие заявленным требованиям, а также ожиданиям клиентов. [53] Качество — это всеобъемлющий термин, который может относиться к правильному и эффективному поведению кода, его возможности повторного использования и переносимости или простоте модификации. [54] Обычно более рентабельно обеспечить качество продукта с самого начала, чем пытаться добавить его позже в процессе разработки. [55] Более качественный код снизит затраты в течение всего срока службы как для поставщиков, так и для клиентов, поскольку он более надежен и его легче поддерживать . [56] [57] Сбои программного обеспечения в критически важных для безопасности системах могут быть очень серьезными, вплоть до летального исхода. [56] По некоторым оценкам, стоимость программного обеспечения низкого качества может достигать 20–40 процентов продаж. [58] Несмотря на цель разработчиков создать продукт, который работает полностью так, как задумано, практически все программное обеспечение содержит ошибки. [59]

Развитие Интернета также значительно увеличило потребность в компьютерной безопасности , поскольку оно позволило злоумышленникам удаленно проводить кибератаки . [60] [61] Если ошибка создает угрозу безопасности, ее называют уязвимостью . [62] [63] Программные исправления часто выпускаются для исправления выявленных уязвимостей, но те, которые остаются неизвестными ( нулевые дни ), а также те, которые не были исправлены, по-прежнему подлежат эксплуатации. [64] Уязвимости различаются по возможности использования злоумышленниками , [62] и фактический риск зависит от характера уязвимости, а также ценности окружающей системы. [65] Хотя некоторые уязвимости могут использоваться только для атак типа «отказ в обслуживании» , которые ставят под угрозу доступность системы, другие позволяют злоумышленнику внедрить и запустить свой собственный код (называемый вредоносным ПО ), без ведома пользователя. [62] Чтобы предотвратить кибератаки, все программное обеспечение в системе должно быть спроектировано так, чтобы противостоять внешним атакам и восстанавливаться после них. [61] Несмотря на усилия по обеспечению безопасности, значительная часть компьютеров заражена вредоносным ПО. [66]

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

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

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

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

Компиляция, интерпретация и исполнение

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

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

Обязанность

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

Лицензии

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

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

Патенты

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

Влияние

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

Инженер Кэйперс Джонс пишет, что «компьютеры и программное обеспечение вносят глубокие изменения во все аспекты человеческой жизни: образование, работу, войну, развлечения, медицину, право и все остальное». [85] Оно стало повсеместным в повседневной жизни в развитых странах . [86] Во многих случаях программное обеспечение расширяет функциональность существующих технологий, таких как бытовая техника и лифты . [1] Программное обеспечение также породило совершенно новые технологии, такие как Интернет , видеоигры , мобильные телефоны и GPS . [1] [87] Благодаря Интернету появились новые методы общения, включая электронную почту , форумы , блоги , микроблоги , вики и социальные сети . [88] Огромные объемы знаний, превосходящие любую бумажную библиотеку, теперь доступны с помощью быстрого поиска в Интернете . [87] Большинство творческих профессионалов переключились на программные инструменты, такие как компьютерное проектирование , 3D-моделирование , редактирование цифровых изображений и компьютерная анимация . [84] Почти каждое сложное устройство управляется программным обеспечением. [87]

Рекомендации

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

Источники