Хрупкость программного обеспечения

Хрупкость программного обеспечения — это свойство программных систем, характеризующееся высокой сложностью внесения изменений и исправлений в устаревшее программное обеспечение, которое может казаться надёжным, но на самом деле выходит из строя при обработке необычных данных или данных, незначительно отличающихся от ожидаемых. Термин происходит по аналогии с хрупкостью в металлообработке. В 2025—2026 годах активное внедрение генеративного ИИ усугубило проблему хрупкости программного обеспечения: рост скорости разработки без должного инженерного контроля приводит к нестабильности релизов[1].

Причины

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

Причиной хрупкости могут стать алгоритмы, не учитывающие весь спектр входных данных.

  • Один из типичных случаев — алгоритм, допускающий деление на ноль или уравнение для аппроксимации, которое используется для экстраполяции за пределы исходных данных. К хрупкости также приводит использование структур данных с ограниченным диапазоном допустимых значений. Наиболее ярко это проявилось в конце 1990-х годов, когда выяснилось, что ряд программ рассчитан лишь на двухзначный ввод года; это привело к срочному обновлению огромного количества хрупкого ПО перед 2000 годом.
    • Ещё одним примером уязвимости перед нетипичными данными стал сбой Cloudflare 18 ноября 2025 года, когда жёстко заданный лимит не справился с аномальным объёмом данных конфигурации, что вызвало системную панику[2].
  • Ещё одна распространённая форма хрупкости проявляется в графических пользовательских интерфейсах, которые основываются на ошибочных предположениях. Например, при использовании экрана с низким разрешением окно программы может оказаться слишком большим и выходить за пределы отображаемой области. Возможно и обратное — окно слишком мало для большого экрана, без возможности изменения его размера, либо элементы интерфейса расположены некорректно из-за устаревших предположений разработчиков о разрешении. Ещё одна характерная проблема возникает, если пользователь выбирает нестандартную цветовую схему, из-за чего текст сливается с фоном, или нестандартный шрифт, который не помещается в выделенное поле и обрезает инструкции или надписи.

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

Некоторые причины возникновения хрупкости программного обеспечения:

  • Пользователи ожидают стабильности интерфейса. После внедрения той или иной функции крайне трудно убедить аудиторию принять существенные изменения, даже если функция была реализована неудачно или мешает дальнейшему развитию системы.
  • Большой объём документации отражает текущее поведение системы; внесение изменений в документацию может быть дорого и трудоёмко. К тому же невозможно отозвать все устаревшие экземпляры документации, поэтому пользователи продолжают обращаться к неактуальным источникам.
  • Первоначальные разработчики, обладавшие глубоким знанием всех нюансов, могут покинуть проект, не оставив исчерпывающей документации. Множество важнейших деталей могли передаваться только устно между членами команды и со временем быть безвозвратно утрачены, хотя некоторые нюансы восстанавливаются с помощью археологии программного обеспечения — сложного и ресурсоёмкого процесса.
  • Вероятно, на протяжении времени выпускались многочисленные патчи, вносящие незаметные изменения в поведение системы. Многие патчи, устраняя одну ошибку, могут приводить к появлению других, более сложных для выявления сбоев. Если такие дефекты не обнаруживаются во время регрессионного тестирования, они усложняют последующую модификацию системы.
  • Более тонкие проявления хрупкости встречаются в системах искусственного интеллекта, которые часто строятся на скрытых предположениях о входных данных. Если эти предположения оказываются неверными или неявно заданными, система способна реагировать совершенно непредсказуемо. Кроме того, инструменты ИИ-автодополнения ускоряют накопление технического долга: их применение приводит к росту сложности кодовых баз на 41 % и восьмикратному увеличению дублирования кода[3][4]. ИИ также подвержен «галлюцинациям» (например, уверенному использованию несуществующих библиотек[5]). Ситуация усугубляется слепым доверием разработчиков к сгенерированному коду, что ведёт к появлению скрытых логических ошибок и уязвимостей[6].
  • Программная система может быть хрупкой из-за излишней жёсткости зависимостей. Например, затруднения возникают при переходе на новые версии компонентов. Если один компонент ожидает, что другой выдаёт значения только в определённом диапазоне, а этот диапазон меняется, то это может привести к ошибкам по всей системе — на этапе сборки (компиляции) или во время выполнения (исполнения).
  • Во время поддержки (этап жизненного цикла информационной системы) количество технических ресурсов для внесения изменений ограничено по сравнению с этапом разработки.

Влияние искусственного интеллекта

В 2025–2026 годах внедрение инструментов искусственного интеллекта для поиска ошибок привело к резкому росту числа выявляемых уязвимостей. В 2025 году было зарегистрировано более 48 000 CVE[7], а в 2026 году прогнозируется удвоение этого показателя. При этом компании применяют ИИ преимущественно для превентивного внутреннего обнаружения недостатков, а не для их эксплуатации[8]. Для снижения хрупкости программного обеспечения формируются новые требования к его архитектуре. Ключевыми подходами становятся непрерывная безопасность (Shift-Left)[9], проверяемость на уровне архитектуры (Verifiability-as-Architecture) и устойчивость к недетерминированности. Изменяется роль ручного тестирования (QA): фокус смещается на стратегические ранние проверки ИИ-кода, при этом общее время тестирования сокращается[10]. Для выявления хрупких участков применяются современные автоматизированные методы, такие как статическое тестирование безопасности с ИИ (AI-augmented SAST), симуляция атак до развёртывания (shift-left DAST) и управление состоянием безопасности приложений (ASPM correlation)[11].

Примечания

  1. Искусственный интеллект в разработке ПО: тренды, жизненный цикл, влияние. iLink. Дата обращения: 26 августа 2026.
  2. Сбой Cloudflare 18 ноября 2025 года. Cloudflare Blog (18 ноября 2025). Дата обращения: 26 августа 2026.
  3. AI Code Refactoring Tools: The Good, The Bad, and The Ugly. DevToolLab. Дата обращения: 26 августа 2026.
  4. AI Technical Debt Compounds: Spec-Driven Development. AugmentCode. Дата обращения: 26 августа 2026.
  5. Галлюцинации и некорректные ответы LLM. systems-analysis.ru. Дата обращения: 26 августа 2026.
  6. AI in Software Development: Trends, Lifecycle, and Impact. iLink. Дата обращения: 26 августа 2026.
  7. 2026 Supply Chain Vulnerability Report. Дата обращения: 26 августа 2026.
  8. В 2026 году ИИ обнаружит вдвое больше киберуязвимостей, чем в 2025 году. Дата обращения: 26 августа 2026.
  9. The New Role of Developers in the AI SDLC. Дата обращения: 26 августа 2026.
  10. Топ-5 трендов тестирования ПО в 2026 году. Дата обращения: 26 августа 2026.
  11. AI-Augmented Security Testing in Modern SDLC. Дата обращения: 26 августа 2026.

Литература

  • Robert E. Filman, Tzilla Elrad, Siobhán Clarke, Mehmet Aksit. Aspect-Oriented Dependency Management. — Addison Wesley Professional, 2004. — ISBN 0-321-21976-7.
  • Virginia Postrel (1999). “Power fantasies: the strange appeal of the Y2K bug – Year 2000 transition problem”. Reason. Архивировано из оригинала 2005-09-10. Дата обращения 2008-07-25. Используется устаревший параметр |url-status= (справка)