Открыть сервис

Кризис программного обеспечения

Кризис программного обеспечения — это термин, используемый для описания периода в истории разработки программного обеспечения (конец 1960-х — 1980-е годы), а также для обозначения хронических проблем в индустрии, связанных с несоответствием между растущей сложностью создаваемых программных систем и возможностями существующих методов и инструментов их разработки. Кризис проявлялся в систематическом превышении сроков и бюджетов проектов, низком качестве и ненадёжности конечного продукта, а также в трудностях его сопровождения и модификации.

История возникновения и осознания проблемы

Предпосылки

В 1950-е — начале 1960-х годов программирование было уделом узкого круга специалистов, а программы имели сравнительно небольшой объём и решали ограниченный круг задач. Разработка велась «кустарными» методами, часто одним человеком, без формального проектирования и документирования. По мере распространения компьютеров в бизнесе, науке и государственном управлении в середине 1960-х годов возникла потребность в создании крупных, сложных программных комплексов (операционные системы, системы управления базами данных, системы управления предприятиями).

Конференция в Гармиш-Партенкирхене (1968)

Ключевым моментом в осознании кризиса стала конференция НАТО по программной инженерии, проведённая в 1968 году в Гармиш-Партенкирхене (ФРГ). На ней впервые был публично употреблён термин «кризис программного обеспечения» (software crisis). Участники конференции, среди которых были ведущие специалисты из США и Европы, констатировали, что традиционные методы разработки, заимствованные из индивидуального программирования, не работают при создании крупных систем. Проекты регулярно проваливались: срывались сроки, превышались бюджеты, а полученные программы содержали большое количество ошибок и были крайне сложны в обслуживании.

Основные проявления кризиса

Кризис программного обеспечения проявлялся в следующих систематических проблемах:

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

Причины кризиса

Технологические и методологические причины

  1. Отсутствие инженерного подхода. Разработка программного обеспечения долгое время воспринималась как искусство или ремесло, а не как инженерная дисциплина. Не применялись формальные методы проектирования, тестирования и управления проектами.
  2. Сложность управления. С ростом размера команды и объёма кода резко возрастало количество связей между компонентами, что делало управление проектом и координацию работы разработчиков крайне сложной задачей. Закон Брукса (Fred Brooks, «Мифический человеко-месяц», 1975) гласит: «Добавление рабочей силы к запаздывающему проекту делает его ещё более запаздывающим».
  3. Неадекватные языки и инструменты. Ранние языки программирования (ассемблеры, Фортран, Кобол) были ориентированы на решение вычислительных или бизнес-задач, но не предоставляли средств для структурирования больших программ, управления памятью, обработки ошибок и модульного тестирования. Отладка была трудоёмким процессом, часто с использованием перфокарт и распечаток.
  4. Недостаток формальных методов. Отсутствие математически строгих методов спецификации, верификации и доказательства корректности программ приводило к тому, что ошибки обнаруживались только на этапе тестирования или эксплуатации.
  5. Проблемы коммуникации. Сложность передачи знаний между заказчиком, аналитиком, проектировщиком и программистом приводила к искажению требований и недопониманию.

Организационные и человеческие причины

  • «Серебряной пули» нет. Фред Брукс в своей знаменитой статье 1986 года утверждал, что не существует единого технологического прорыва, который мог бы кардинально повысить производительность и качество разработки ПО, как это произошло в других инженерных дисциплинах (например, появление транзистора в электронике).
  • Неверные оценки. Программисты систематически недооценивали сложность задач, особенно на ранних этапах, когда требования были неясны.
  • Отсутствие повторного использования кода. Каждый проект часто начинался «с нуля», что приводило к дублированию усилий и накоплению ошибок.

Реакция на кризис: возникновение программной инженерии

Осознание кризиса привело к формированию новой дисциплины — программной инженерии (software engineering), которая ставила своей целью внедрение инженерных принципов в процесс разработки ПО. Ключевые направления преодоления кризиса включали:

Структурное программирование

В 1970-х годах получила распространение парадигма структурного программирования, предложенная Эдсгером Дейкстрой и другими. Она предполагала отказ от оператора безусловного перехода (GOTO) и использование только трёх базовых управляющих конструкций (следование, ветвление, цикл). Это делало код более читаемым, предсказуемым и легче поддающимся верификации.

Методологии проектирования

Были разработаны формальные методологии, такие как:

Инструментальные средства

  • Компиляторы и интерпретаторы стали более мощными, появились языки высокого уровня, поддерживающие структурное программирование (Pascal, C, Ada).
  • Системы управления версиями (SCCS, RCS, CVS) позволили отслеживать изменения в коде и координировать работу нескольких разработчиков.
  • Среды разработки (IDE) начали объединять редактор, компилятор и отладчик в единую среду.

Модели жизненного цикла

  • Каскадная модель (Waterfall). Предложенная Уинстоном Ройсом в 1970 году, она предполагала последовательное выполнение этапов: анализ требований, проектирование, реализация, тестирование, сопровождение. Эта модель, хотя и подвергалась критике за жёсткость, стала первым формальным описанием процесса разработки.
  • Спиральная модель (Барри Боэм, 1988). Ввела итеративный подход с анализом рисков на каждом витке спирали, что позволяло снижать неопределённость и корректировать требования.

Современное состояние и критика термина

Хотя термин «кризис программного обеспечения» возник в 1960-х годах, многие проблемы, характерные для того периода, сохраняются и в XXI веке. Проекты по-прежнему запаздывают, выходят за рамки бюджета, а программное обеспечение содержит ошибки. Однако масштаб и характер проблем изменились.

Аргументы против использования термина

Некоторые специалисты (например, Джеймс Бах) считают, что термин «кризис» устарел и не отражает реального положения дел. Они указывают на то, что:

  • Индустрия программного обеспечения стала огромной и успешной, создавая продукты, которые работают в критически важных системах (авиация, медицина, финансы).
  • Разработаны и широко применяются эффективные методологии (Agile, Scrum, DevOps), которые позволяют управлять сложностью и быстро адаптироваться к изменениям.
  • Качество многих программных продуктов (например, операционных систем, браузеров, игр) находится на высоком уровне.

Современные вызовы

Вместо единого «кризиса» сегодня говорят о ряде хронических проблем и вызовов:

  • Сложность интеграции. Современные системы состоят из множества взаимодействующих компонентов, часто от разных производителей, что создаёт проблемы совместимости и безопасности.
  • Безопасность и уязвимости. Растущее количество кибератак и уязвимостей в программном обеспечении является серьёзной проблемой.
  • Управление требованиями. В условиях быстрого изменения рынка и технологий требования к ПО постоянно меняются, что требует гибких подходов.
  • Дефицит квалифицированных кадров. Несмотря на рост числа программистов, спрос на высококвалифицированных специалистов, способных работать со сложными системами, остаётся высоким.
  • Наследие (Legacy). Огромное количество работающего ПО написано на устаревших языках и платформах, его сопровождение и модернизация требуют значительных затрат.

Таким образом, «кризис программного обеспечения» — это исторический термин, обозначивший переломный момент в развитии индустрии, который привёл к формированию программной инженерии как научной и инженерной дисциплины. Хотя острые проявления кризиса 1960-х годов были в значительной степени преодолены, фундаментальные проблемы сложности, качества и управления проектами остаются актуальными и сегодня.

Источники

  • Брукс Ф. «Мифический человеко-месяц, или Как создаются программные системы». — СПб.: Символ-Плюс, 1999.
  • Дейкстра Э. «Дисциплина программирования». — М.: Мир, 1978.
  • Боэм Б. «Спиральная модель разработки и усовершенствования программного обеспечения» (1988).
  • Ройс У. «Управление разработкой крупных программных систем» (1970).
  • Материалы конференции НАТО по программной инженерии, Гармиш-Партенкирхен, 1968.
  • Бах Дж. «Кризис программного обеспечения: миф и реальность» (1999).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →