Программное гниение
Гниль программного обеспечения ( гниение битов , гниение кода , эрозия программного обеспечения , разрушение программного обеспечения или энтропия программного обеспечения ) — это деградация, ухудшение или потеря использования или производительности программного обеспечения с течением времени.
С точки зрения пользовательского опыта программного обеспечения, оно обеспечивает эволюцию окружающей среды, включая аппаратное обеспечение. Первой причиной объективных потерь в практическом использовании программного обеспечения является потеря хост-системы как практической операционной среды.
The Jargon File , сборник хакерских знаний, определяет «битовую гниль» как шутливое объяснение деградации программы с течением времени, даже если «ничего не изменилось»; Идея, лежащая в основе этого, заключается в том, как если бы биты, составляющие программу, подверглись радиоактивному распаду. [1]
Причины
[ редактировать ]За гниение программного обеспечения ответственны несколько факторов, включая изменение среды, в которой работает программное обеспечение, ухудшение совместимости между частями самого программного обеспечения и появление ошибок в неиспользуемом или редко используемом коде.
Изменение окружающей среды
[ редактировать ]Когда в среде программы происходят изменения, особенно изменения, которые разработчик программы не предвидел, программное обеспечение больше не может работать так, как изначально предполагалось. Например, многие первые разработчики компьютерных игр использовали процессора тактовую частоту в качестве таймера в своих играх. [2] Однако новые тактовые частоты процессора были выше, поэтому скорость игрового процесса соответственно увеличивалась, что со временем делало игры менее удобными для использования.
Возможность
[ редактировать ]Происходят изменения в среде, связанные не с разработчиком программы, а с ее пользователями. Первоначально пользователь мог привести систему в рабочее состояние и обеспечить ее безупречную работу в течение определенного времени. которым сложно управлять). Но когда система перестает работать правильно или пользователи хотят получить доступ к элементам управления конфигурацией, они не могут повторить этот первоначальный шаг из-за другого контекста и недоступной информации (утерян пароль, отсутствующие инструкции или просто пользователь, интерфейс , который сначала был настроен методом проб и ошибок). Информационный архитектор Йонас Седерстрем назвал эту концепцию Onceability . [3] и определяет его как «качество технической системы, которое не позволяет пользователю восстановить систему в случае ее сбоя».
Неиспользованный код
[ редактировать ]Редко используемые части кода, такие как фильтры документов или интерфейсы, предназначенные для использования другими программами, могут содержать ошибки, которые остаются незамеченными. При изменении требований пользователя и других внешних факторов этот код может быть выполнен позже, тем самым обнажая ошибки и делая программное обеспечение менее функциональным.
Редко обновляемый код
[ редактировать ]Обычное обслуживание программного обеспечения и систем также может привести к порче программного обеспечения. В частности, когда программа содержит несколько частей , которые функционируют на расстоянии вытянутой руки друг от друга, не учитывается, как изменения в одной части, влияющие на другие, могут привести к ошибкам.
В некоторых случаях это может принимать форму библиотек, используемых программным обеспечением, которые могут быть изменены таким образом, что это отрицательно скажется на программном обеспечении. Если старую версию библиотеки, которая ранее работала с программным обеспечением, больше нельзя использовать из-за конфликтов с другим программным обеспечением или недостатков безопасности, обнаруженных в старой версии, возможно, больше не существует жизнеспособной версии необходимой библиотеки для программы. использовать.
Интернет-подключение
[ редактировать ]Современное коммерческое программное обеспечение часто подключается к онлайн-серверу для проверки лицензии и доступа к информации. Если онлайн-служба, обеспечивающая работу программного обеспечения, отключена, оно может перестать работать. [4] [5]
С конца 2010-х годов большинство веб-сайтов используют безопасные соединения HTTPS . Однако для этого требуются ключи шифрования, называемые корневыми сертификатами , у которых есть срок действия. По истечении срока действия сертификатов устройство теряет связь с большинством веб-сайтов, если ключи не обновляются постоянно. [6]
Другая проблема заключается в том, что в марте 2021 года старые стандарты шифрования TLS 1.0 и TLS 1.1 были признаны устаревшими . [7] Это означает, что операционные системы, браузеры и другое онлайн-программное обеспечение, не поддерживающее как минимум TLS 1.2, не могут подключаться к большинству веб-сайтов даже для загрузки исправлений или обновления браузера, если они доступны. Иногда это называют «TLS-апокалипсисом».
К продуктам, которые не могут подключиться к большинству веб-сайтов, относятся PowerMac, старые системы Unix и версии Microsoft Windows старше Server 2008/Windows 7 (по крайней мере, без использования стороннего браузера).Браузер Internet Explorer 8 в Server 2008/Windows 7 поддерживает TLS 1.2, но по умолчанию он отключен. [8]
Классификация
[ редактировать ]Гниль программного обеспечения обычно классифицируется как «спящая гниль» или «активная гниль».
спящая гниль
[ редактировать ]Программное обеспечение, которое в настоящее время не используется, постепенно становится непригодным для использования по мере изменения остальной части приложения. Изменения в требованиях пользователей и программной среде также способствуют ухудшению ситуации.
Активная гниль
[ редактировать ]Программное обеспечение, которое постоянно модифицируется, может со временем потерять свою целостность, если не будут последовательно применяться надлежащие процессы смягчения последствий. Однако большая часть программного обеспечения требует постоянных изменений для удовлетворения новых требований и исправления ошибок, а реинжиниринг программного обеспечения каждый раз при внесении изменений редко бывает практичным. Это создает то, что по сути является процессом развития программы, заставляя ее отклоняться от первоначального спроектированного проекта. В результате этого и меняющейся среды предположения, сделанные первоначальными разработчиками, могут оказаться недействительными, что приведет к появлению ошибок.
На практике добавление новых функций может иметь приоритет над обновлением документации ; однако без документации конкретные знания, относящиеся к частям программы, могут быть утеряны. В некоторой степени это можно смягчить, следуя лучшим современным практикам в отношении соглашений по кодированию .
Активное разложение программного обеспечения замедляется, когда коммерческая жизнь приложения подходит к концу и дальнейшая разработка прекращается. Пользователи часто учатся обходить любые оставшиеся ошибки программного обеспечения , и поведение программного обеспечения становится последовательным, поскольку ничего не меняется.
Примеры
[ редактировать ]У меня есть пример программы
[ редактировать ]Многие плодотворные программы, созданные на заре исследований ИИ , пострадали от непоправимой гнили программного обеспечения. Например, исходную программу SHRDLU (раннюю программу понимания естественного языка) нельзя запустить ни на одном современном компьютере или компьютерном симуляторе, поскольку она была разработана в те дни, когда LISP и PLANNER все еще находились на стадии разработки, и поэтому использует нестандартные макросы и библиотеки программного обеспечения, которых больше не существует.
Пример разветвленного онлайн-форума
[ редактировать ]Предположим, администратор создает форум, используя программное обеспечение для форумов с открытым исходным кодом , а затем существенно модифицирует его, добавляя новые функции и опции. Этот процесс требует значительных модификаций существующего кода и отклонения от исходной функциональности этого программного обеспечения.
Отсюда есть несколько способов, которыми гниение программного обеспечения может повлиять на систему:
- Администратор может случайно внести изменения, которые конфликтуют друг с другом или с исходным программным обеспечением, что приведет к неожиданному поведению форума или его полной поломке. Это ставит их в очень плохое положение: поскольку они так сильно отклонились от исходного кода, получить техническую поддержку и помощь в возрождении форума будет сложно.
- В исходном коде форума может быть обнаружена дыра в безопасности, требующая исправления безопасности. Однако, поскольку администратор настолько сильно изменил код, исправление может быть не применимо напрямую к его коду, что потребует от администратора фактически переписать обновление.
- Администратор, внесший изменения, может покинуть свою должность, оставив новому администратору запутанный и сильно измененный форум, на котором отсутствует полная документация. Без полного понимания изменений новому администратору сложно внести изменения без возникновения конфликтов и ошибок. Более того, документация исходной системы может больше не быть доступной или, что еще хуже, вводить в заблуждение из-за тонких различий в функциональных требованиях.
Пример вики
[ редактировать ]Предположим, веб-мастер устанавливает последнюю версию MediaWiki , программного обеспечения, на котором работают такие вики, как Arc.Ask3.Ru, а затем никогда не применяет никаких обновлений. Со временем веб-хостинг, скорее всего, обновит свои версии языка программирования (например, PHP ) и базы данных (например, MariaDB ) без консультации с веб-мастером. По прошествии достаточно долгого времени это в конечном итоге приведет к поломке сложных веб-сайтов, которые не были обновлены, поскольку последние версии PHP и MariaDB будут иметь критические изменения, поскольку они жестко устаревают определенные встроенные функции , нарушая обратную совместимость и вызывая фатальные ошибки . Другие проблемы, которые могут возникнуть при использовании необновленного программного обеспечения веб-сайта, включают уязвимости безопасности и спам .
Рефакторинг
[ редактировать ]Рефакторинг — это средство решения проблемы гниения программного обеспечения. Он описывается как процесс переписывания существующего кода для улучшения его структуры, не затрагивая его внешнее поведение. [9] Это включает в себя удаление мертвого кода и переписывание разделов, которые были сильно изменены и больше не работают эффективно. Необходимо проявлять осторожность, чтобы не изменить внешнее поведение программного обеспечения, так как это может привести к несовместимости и, таким образом, само по себе способствовать гниению программного обеспечения. Некоторые принципы проектирования, которые следует учитывать при рефакторинге, — это сохранение иерархической структуры кода и реализация абстракции для упрощения и обобщения структур кода. [10]
См. также
[ редактировать ]- Код запаха
- Ад зависимости
- Потеря генерации
- Раздувание программного обеспечения
- Хрупкость программного обеспечения
- SOLID – принципы проектирования объектно-ориентированного программирования.
Ссылки
[ редактировать ]- ^ Рэймонд, Эрик. «Немного гнили» . Файл жаргона . Проверено 3 марта 2013 г.
- ^ Салеми, Джо (28 января 1992 г.). Журнал ПК . Зифф Дэвис, Инк. с. 286.
- ^ Йонас Сёдерстрем. «Однократность: Последствие гниения технологий» .
- ^ Амадео, Рон (31 октября 2016 г.). «(Обновленная) история Android» . Арс Техника . Проверено 31 октября 2021 г.
- ^ «Adobe CS2 теперь доступен бесплатно, вроде как» . Мобильный журнал. 14 января 2013 г. Архивировано из оригинала 18 января 2013 г. Проверено 20 января 2013 г.
- ^ Пол Вагенсейл (24 декабря 2020 г.). «Апокалипсис отложен: следующей осенью эти Android-устройства больше не будут отключаться от сети» . Путеводитель Тома . Проверено 16 марта 2023 г.
- ^ «RFC ft-ietf-tls-oldversions-deprecate: прекращение поддержки TLS 1.0 и TLS 1.1» . Трекер данных IETF . 2021-03-23 . Проверено 16 марта 2023 г.
- ^ «В Windows 7 добавлена поддержка TLSv1.1 и TLSv1.2 — IEInternals — Главная страница сайта — Блоги MSDN» . Архивировано из оригинала 26 декабря 2013 г.
- ^ Фаулер, Мартин (11 октября 2007 г.). «Что такое рефакторинг» . Проверено 22 ноября 2007 г.
- ^ Сурьянараяна, Гириш, Ганеш Самартьям и Тушар Шарма. Рефакторинг для запахов проектирования программного обеспечения: Управление техническим долгом / Гириш Сурьянараяна, Ганеш Самартьям, Тушар Шарма. 1-е издание. Уолтем, Массачусетс ; Морган Кауфманн, 2015. Печать.