Программное обеспечение
Программное обеспечение состоит из компьютерных программ которые инструктируют работу компьютера , . [ 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 .