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

Страница полузащищенная
Из Википедии, бесплатной энциклопедии

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

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

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

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

Определение

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

История

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

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

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

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

Типы

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

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

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

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

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

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

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

Зачастую программное обеспечение выпускается в незавершенном состоянии, когда у команды разработчиков заканчивается время или финансирование. [43] Несмотря на тестирование и контроль качества , практически все программное обеспечение содержит ошибки , из-за которых система не работает должным образом. Пост-релизное обслуживание программного обеспечения необходимо для исправления этих ошибок при их обнаружении и поддержания работоспособности программного обеспечения по мере изменения среды с течением времени. [44] Новые функции часто добавляются после выпуска. Со временем уровень обслуживания становится все более ограниченным, а затем полностью прекращается, когда продукт снимается с рынка. [45] По мере старения программного обеспечения оно становится известным как устаревшее программное обеспечение и может использоваться десятилетиями, даже если не осталось никого, кто знает, как его исправить. [5] По оценкам, в течение всего срока службы продукта обслуживание программного обеспечения будет составлять 75 или более процентов от общей стоимости разработки. [46] [47]

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

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

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

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

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

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

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

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

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

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

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

Обязанность

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

Лицензии

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

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

Патенты

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

Влияние

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

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

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

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

Источники

  • Аблон, Лилиан; Богарт, Энди (2017). Нулевые дни, тысячи ночей: жизнь и времена уязвимостей нулевого дня и их использования (PDF) . Корпорация Рэнд. ISBN  978-0-8330-9761-3 .
  • Андерсон, Томас ; Далин, Майкл (2014). Операционные системы: принципы и практика (2-е изд.). Рекурсивные книги. ISBN  978-0-9856735-2-9 .
  • Кэмпбелл-Келли, Мартин; Гарсия-Шварц, Дэниел Д. (2015). От мэйнфреймов к смартфонам: история международной компьютерной индустрии . Издательство Гарвардского университета. ISBN  978-0-674-28655-9 .
  • Дасвани, Нил ; Эльбаяди, Муди (2021). Большие нарушения: уроки кибербезопасности для всех . Апресс. ISBN  978-1-4842-6654-0 .
  • Дули, Джон Ф. (2017). Разработка программного обеспечения, проектирование и кодирование: с шаблонами, отладкой, модульным тестированием и рефакторингом . Апресс. ISBN  978-1-4842-3153-1 .
  • Габбриелли, Маурицио; Мартини, Симона (2023). Языки программирования: принципы и парадигмы (2-е изд.). Спрингер. ISBN  978-3-031-34144-1 .
  • Галин, Дэниел (2018). Качество программного обеспечения: концепции и практика . Джон Уайли и сыновья. ISBN  978-1-119-13449-7 .
  • Хабер, Мори Дж.; Хибберт, Брэд (2018). Векторы атак на активы: построение эффективных стратегий управления уязвимостями для защиты организаций . Апресс. ISBN  978-1-4842-3627-7 .
  • Джонс, Каперс (2014). Техническая и социальная история разработки программного обеспечения . Пирсон Образование. ISBN  978-0-321-90342-6 .
  • Китчин, Роб; Додж, Мартин (2011). Код/пространство: Программное обеспечение и повседневная жизнь . МТИ Пресс. ISBN  978-0-262-04248-2 .
  • Лангер, Артур М. (2016). Руководство по разработке программного обеспечения: проектирование и управление жизненным циклом . Спрингер. ISBN  978-1-4471-6799-0 .
  • Манович, Лев (2013). Программное обеспечение берет на себя командование . Академик Блумсбери. ISBN  978-1-62356-745-3 .
  • О'Риган, Джерард (2022). Краткое руководство по разработке программного обеспечения: от основ к методам применения . Спрингер Природа. ISBN  978-3-031-07816-3 .
  • Остервейл, Леон Дж. (2013). «Что такое программное обеспечение? Роль эмпирических методов в ответе на вопрос». Перспективы будущего программной инженерии: очерки в честь Дитера Ромбаха . Спрингер. стр. 237–254. ISBN  978-3-642-37395-4 .
  • Рахман, Ханиф Ур; да Силва, Альберто Родригес; Альзаид, Асаад; Раза, Муштак (2024). «Систематический обзор литературы по решениям о переносе обслуживания программного обеспечения». Информационные и программные технологии . 172 : 107475. doi : 10.1016/j.infsof.2024.107475 .
  • Райфер, Дональд Дж. (2012). Рецепты успешного обслуживания программного обеспечения . ЦРК Пресс. ISBN  978-1-4398-5167-8 .
  • Розати, Пьеранджело; Линн, Тео (2020). «Оценка бизнес-ценности миграции инфраструктуры в облако». Измерение бизнес-ценности облачных вычислений . Международное издательство Спрингер. стр. 19–37. ISBN  978-3-030-43198-3 .
  • Себеста, Роберт В. (2012). Концепции языков программирования (10-е изд.). Аддисон-Уэсли. ISBN  978-0-13-139531-2 .
  • Столл, Эдвард (2018). Основы UX для не-UX-профессионалов: принципы пользовательского опыта для менеджеров, писателей, дизайнеров и разработчиков . Апресс. ISBN  978-1-4842-3811-0 .
  • Таненбаум, Эндрю С .; Бос, Герберт (2023). Современные операционные системы, глобальное издание . Пирсон Высшее Эд. ISBN  978-1-292-72789-9 .
  • Трейси, Ким В. (2021). Программное обеспечение: техническая история . Издательство Морган и Клейпул. ISBN  978-1-4503-8724-8 .
  • Трипати, Приядарши; Наик, Кширасагар (2014). Эволюция и сопровождение программного обеспечения: подход практикующего специалиста . Джон Уайли и сыновья. ISBN  978-0-470-60341-3 .
  • Такер, Аллен; Морелли, Ральф; де Сильва, Чаминдра (2011). Разработка программного обеспечения: подход с открытым исходным кодом . ЦРК Пресс. ISBN  978-1-4398-8460-7 .
  • Улзиит, Баярбуян; Варрайх, Зишан Ахтар; Генсель, Сигдем; Петерсен, Кай (2015). «Концептуальная основа проблем и решений для управления глобальным обслуживанием программного обеспечения». Журнал программного обеспечения: эволюция и процесс . 27 (10): 763–792. дои : 10.1002/смр.1720 .
  • Ватт, Энди (2023). Создание современных приложений SaaS с использованием C# и . NET: создание, развертывание и обслуживание профессиональных приложений SaaS . Пакет. ISBN  978-1-80461-087-9 .
  • Варга, Эрвин (2018). Разгадка сопровождения и эволюции программного обеспечения: нестандартное мышление . Спрингер. ISBN  978-3-319-71303-8 .