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

Программное обеспечение состоит из компьютерных программ которые инструктируют работу компьютера , . [2]
Опираясь на предыдущие инновации в математике и технологиях, было создано программное обеспечение для программируемых цифровых компьютеров , появившихся в конце 1940-х годов и необходимых для реализации их полезности. Первое программное обеспечение было тесно связано с базовым компьютерным оборудованием , но со временем нижние уровни системы стали более стандартизированными, а программное обеспечение стало все более переносимым между различными системами и абстрагировалось от базового машинного кода . Операционные системы управляют аппаратными ресурсами и являются посредниками между различными приложениями , выполняющими задачи пользователя. Языки программирования — это формат, в котором пишется программное обеспечение, и они должны быть удобочитаемыми для человека и способными преобразовываться в однозначные инструкции для компьютерного оборудования. Компиляторы или интерпретаторы необходимы для связывания программы с другим кодом, на который она опирается, и преобразования программного обеспечения в машинный код , который может выполняться на оборудовании. Программы комбинируются друг с другом и с внешним вводом, чтобы обеспечить возможность выполнения сложной задачи.
разработки программного обеспечения Центральной задачей является программирование и поддержка проекта исходного кода , но этот термин также охватывает концепцию проекта, оценку его осуществимости, анализ бизнес-требований, проектирование и выпуск программного обеспечения . Обеспечение качества программного обеспечения , включая кода проверку и тестирование , является важной частью процесса, поскольку предоставление качественного кода снижает стоимость сбоев надежности , кибератак, вызванных уязвимостями системы безопасности , и затраты на обслуживание . На обслуживание обычно уходит 75 процентов или более инженерного бюджета на протяжении всего срока службы программного обеспечения. Исходный код защищен законом об авторском праве , который наделяет владельца исключительным правом копировать код. Программное обеспечение стало повсеместным в повседневной жизни в развитых странах . Во многих случаях программное обеспечение расширяет функциональность уже существующих технологий, но оно также позволяет создавать совершенно новые технологии, такие как Интернет , видеоигры , социальные сети , мобильные телефоны и GPS .
Определение
Программное обеспечение можно определить более узко, как инструкции, выполняемые компьютерным оборудованием , или в более широком смысле, включая другие концепции, инструменты и методы, необходимые для создания исполняемой системы на компьютерном оборудовании , например проектную документацию, спецификации и наборы средств тестирования. [3] [4] Отдельная программа или файл исходного кода состоит из однозначных инструкций и алгоритмов . Программы комбинируются друг с другом и с внешним вводом, чтобы обеспечить возможность выполнения сложной задачи. [5] [4] Такие инструменты, как компиляторы , ассемблеры , блок-схемы , инструменты проектирования, симуляторы и архитектурные диаграммы (некоторые из которых также являются программными средствами), необходимы для проектирования и реализации большинства вычислительных систем. [4] Хотя программное обеспечение нематериально , [6] [7] программное обеспечение дает инструкции компьютерному оборудованию для получения видимых и осязаемых эффектов. [8]
История

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

Существует два основных типа программного обеспечения:
- Операционные системы — это « уровень программного обеспечения , который управляет ресурсами компьютера для его пользователей и их приложений ». [23] Существует три основные цели, которые выполняет операционная система: [24]
- Распределение ресурсов между различными приложениями, принятие решения о том, когда они получат центрального процессора время или пространство (ЦП) в памяти . [24]
- Предоставление интерфейса, который абстрагирует детали доступа к деталям оборудования (например, физической памяти), чтобы упростить работу программистам. [24] [25]
- Предлагает общие услуги, такие как интерфейс для доступа к сетевым и дисковым устройствам. Это позволяет запускать приложение на другом оборудовании без необходимости его переписывания. [26]
- Прикладное программное обеспечение работает поверх операционной системы и использует ресурсы компьютера для выполнения задачи. [27] Существует множество различных типов прикладного программного обеспечения, поскольку диапазон задач, которые можно выполнять с помощью современных компьютеров, очень велик. [28] Приложения составляют большую часть программного обеспечения [29] и им требуется среда, предоставляемая операционной системой, а часто и другими приложениями. для функционирования [30]

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

Компании-разработчики программного обеспечения стремятся предоставлять высококачественный продукт вовремя и в рамках бюджета. Проблема заключается в том, что оценка усилий по разработке программного обеспечения часто бывает неточной. [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]
Кодирование и исполнение
Языки программирования

Языки программирования — это формат, в котором пишется программное обеспечение. С 1950-х годов были изобретены тысячи различных языков программирования; некоторые из них использовались десятилетиями, а другие вышли из употребления. [67] Некоторые определения классифицируют машинный код (точные инструкции, непосредственно реализуемые аппаратным обеспечением) и язык ассемблера (более удобочитаемую альтернативу машинному коду, операторы которого могут быть однозначно преобразованы в машинный код) как языки программирования. [68] Программы, написанные на языках программирования высокого уровня, используемых для создания программного обеспечения, имеют несколько общих характеристик: для их написания не требуется знание машинного кода, их можно портировать на другие компьютерные системы, они более кратки и удобочитаемы, чем машины. код. [69] Они должны быть читабельными для человека и преобразовываться в однозначные инструкции для компьютерного оборудования. [70]
Компиляция, интерпретация и исполнение
Изобретение языков программирования высокого уровня произошло одновременно с появлением компиляторов , которые должны были автоматически переводить их в машинный код. [71] Большинство программ не содержат всех ресурсов, необходимых для их запуска, и полагаются на внешние библиотеки . Частью функции компилятора является связывание этих файлов таким образом, чтобы программа могла выполняться аппаратным обеспечением. После компиляции программу можно сохранить в виде объектного файла , а загрузчик (часть операционной системы) может взять этот сохраненный файл и выполнить его как процесс на аппаратном обеспечении компьютера. [72] Некоторые языки программирования используют интерпретатор вместо компилятора. Интерпретатор преобразует программу в машинный код во время выполнения , что делает их в 10–100 раз медленнее, чем скомпилированные языки программирования. [73] [74]
Юридические вопросы
Обязанность
Программное обеспечение часто выпускается с осознанием того, что оно неполное или содержит ошибки. Покупатели сознательно покупают его в таком состоянии, что привело к установлению правового режима, при котором ответственность за программные продукты значительно урезана по сравнению с другими продуктами. [75]
Лицензии

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

Инженер Кэйперс Джонс пишет, что «компьютеры и программное обеспечение вносят глубокие изменения во все аспекты человеческой жизни: образование, работу, войну, развлечения, медицину, право и все остальное». [85] Оно стало повсеместным в повседневной жизни в развитых странах . [86] Во многих случаях программное обеспечение расширяет функциональность существующих технологий, таких как бытовая техника и лифты . [1] Программное обеспечение также породило совершенно новые технологии, такие как Интернет , видеоигры , мобильные телефоны и GPS . [1] [87] новые методы общения, включая электронную почту , форумы , блоги , микроблоги , вики и социальные сети . Благодаря Интернету появились [88] Огромные объемы знаний, превосходящие любую бумажную библиотеку, теперь доступны с помощью быстрого поиска в Интернете . [87] Большинство творческих профессионалов перешли на программные инструменты, такие как компьютерное проектирование , 3D-моделирование , редактирование цифровых изображений и компьютерная анимация . [84] Практически каждое сложное устройство управляется программным обеспечением. [87]
Ссылки
- ^ Jump up to: а б с Китчин и Додж 2011 , с. 5.
- ^ Лестница, Ральф М. (2003). Принципы информационных систем, шестое издание . Томсон. п. 16. ISBN 0-619-06489-7 .
Программное обеспечение состоит из компьютерных программ, которые управляют работой компьютера.
- ^ Остервейл 2013 , с. 61.
- ^ Jump up to: а б с д Трейси 2021 , с. 2.
- ^ Китчин и Додж 2011 , стр. 3, 24.
- ^ Jump up to: а б Трейси 2021 , с. 3.
- ^ Китчин и Додж 2011 , с. 24.
- ^ Китчин и Додж 2011 , стр. 3–4.
- ^ Джонс 2014 , стр. 19, 22.
- ^ Джонс 2014 , стр. 9, 21.
- ^ Jump up to: а б Джонс 2014 , с. 19.
- ^ Джонс 2014 , с. 22.
- ^ Габбриелли и Мартини 2023 , с. 519.
- ^ Габбриелли и Мартини 2023 , стр. 520–521.
- ^ Габбриелли и Мартини 2023 , с. 522.
- ^ Габбриелли и Мартини 2023 , с. 521.
- ^ Jump up to: а б Трейси 2021 , с. 1.
- ^ Энсменгер, Натан (2010). Компьютерщики берут верх: компьютеры, программисты и политика технических знаний . История вычислений. Кембридж, Массачусетс: MIT Press. ISBN 978-0-262-05093-7 . OCLC 496282165 .
- ^ Хоке, Александр; Вибер, Фредерик; Грамельсбергер, Габриэле; Хинсен, Конрад; Дисманн, Маркус; Паскини Сантос, Фернандо; Ландстрем, Катарина; Питерс, Бенджамин; Каспрович, Давид; Боррелли, Арианна; Рот, Филипп; Ли, Кларисса Ай Линг; Олтяну, Алин; Бёшен, Стефан (1 июля 2024 г.). «Программное обеспечение в науке распространено повсеместно, но его игнорируют» . Природа вычислительной науки . дои : 10.1038/s43588-024-00651-2 . ISSN 2662-8457 .
- ^ Трейси 2021 , с. 249.
- ^ Трейси 2021 , с. 250.
- ^ Трейси 2021 , стр. 250–251.
- ^ Андерсон и Далин 2014 , стр. 6.
- ^ Jump up to: а б с Андерсон и Далин 2014 , стр. 7.
- ^ Таненбаум и Бос 2023 , с. 5.
- ^ Андерсон и Далин 2014 , стр. 7, 9, 13.
- ^ Андерсон и Далин 2014 , стр. 6–7.
- ^ Джонс 2014 , с. 121.
- ^ Трейси 2021 , с. 66.
- ^ Трейси 2021 , с. 72.
- ^ Jump up to: а б О'Риган 2022 , с. 386.
- ^ Кэмпбелл-Келли и Гарсия-Шварц, 2015 , стр. 156–157.
- ^ Розати и Линн 2020 , с. 23.
- ^ Ватт 2023 , стр. 4.
- ^ О'Риган 2022 , с. 7.
- ^ О'Риган 2022 , с. 5.
- ^ Jump up to: а б Дули 2017 , с. 1.
- ^ О'Риган, 2022 , стр. 18, 110–111.
- ^ Трейси 2021 , стр. 43, 76.
- ^ О'Риган, 2022 , стр. 117–118.
- ^ О'Риган 2022 , с. 54.
- ^ О'Риган 2022 , с. 267.
- ^ О'Риган 2022 , с. 20.
- ^ О'Риган 2022 , с. 9.
- ^ Трипатия и Найк 2014 , с. 26.
- ^ Райфер 2012 , с. 22.
- ^ Трипатия и Найк 2014 , стр. 4, 27.
- ^ Трипатия и Найк 2014 , с. 89.
- ^ Варга 2018 , с. 6.
- ^ Ульзиит и др. 2015 , с. 764.
- ^ Такер, Морелли и де Сильва 2011 , стр. 7.
- ^ Стулл 2018 , стр. 24–25.
- ^ Галин 2018 , с. 3.
- ^ Галин 2018 , с. 26.
- ^ О'Риган, 2022 , стр. 68, 117.
- ^ Jump up to: а б О'Риган, 2022 , стр. 3, 268.
- ^ Варга 2018 , с. 12.
- ^ О'Риган 2022 , с. 119.
- ^ Аблон и Богарт 2017 , с. 1.
- ^ Кэмпбелл-Келли и Гарсия-Шварц 2015 , стр. 164.
- ^ Jump up to: а б О'Риган 2022 , с. 266.
- ^ Jump up to: а б с Аблон и Богарт 2017 , с. 2.
- ^ Дасвани и Эльбаяди 2021 , с. 25.
- ^ Дасвани и Эльбаяди 2021 , стр. 26–27.
- ^ Хабер и Хибберт 2018 , стр. 5–6.
- ^ Китчин и Додж 2011 , с. 37.
- ^ Трейси 2021 , с. 117.
- ^ Трейси 2021 , стр. 118–120.
- ^ Трейси 2021 , стр. 118–119.
- ^ Китчин и Додж 2011 , с. 26.
- ^ Трейси 2021 , с. 121.
- ^ Трейси 2021 , стр. 122–123.
- ^ О'Риган 2022 , с. 375.
- ^ Sebesta 2012 , p. 28.
- ^ Китчин и Додж 2011 , стр. 36–37.
- ^ О'Риган, 2022 , стр. 394–396.
- ^ Jump up to: а б О'Риган 2022 , с. 403.
- ^ О'Риган, 2022 , стр. 394, 404.
- ^ Лангер 2016 , стр. 44–45.
- ^ О'Риган 2022 , с. 395.
- ^ Херардо Кон Диас, «Текст в машине: американский закон об авторском праве и многообразие программ, 1974–1978», Technology and Culture 57 (октябрь 2016 г.), 753–79.
- ^ О'Риган 2022 , с. 398.
- ^ О'Риган 2022 , с. 399.
- ^ Jump up to: а б Манович 2013 , с. 333.
- ^ Джонс 2014 , с. 32.
- ^ Китчин и Додж 2011 , с. iv.
- ^ Jump up to: а б с Джонс 2014 , с. xxviii.
- ^ Манович 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 .