Раздувание программного обеспечения

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Функция для галочки»)
Перейти к: навигация, поиск

Раздува́ние програ́ммного обеспе́чения (англ. software bloat, bloatware) — тенденция новых программ быть больше по объёму и требовать больше системных ресурсов по сравнению со старыми.

Никлаус Вирт в 1996 г. написал статью «Долой „жирные программы“», подняв проблему программ, для которых рост требований к ресурсам превышает рост их функциональности и производительности[1]. Термин «жирные программы» (fatware) позаимствован из статьи Э. Перраторе 1993 года[2].

Содержание

[править] Причины

Юмористический закон

Каждая программа расширяется, пока она не сможет читать почту. Программы, которые не могут читать почту, заменяются теми, которые могут.

Закон экстенсивного программирования Джейми Завинского[3]
  • Основной причиной этого является добавление в программы всё новых функций и возможностей, в том числе и не являющихся абсолютно необходимыми для работы.
    • Некоторые из подобных функций фактически стали требованиями. Например, графический интерфейс требует существенно бо́льших ресурсов, чем текстовый, однако пользователи уже привыкли работать только с графическим интерфейсом (даже если им фактически и не требуется работать с изображениями).
  • Всё чаще используются внешние библиотеки, в которых универсальность оборачивается большим размером. Например: в Delphi версий 3—7 одно подключение модуля Forms автоматически прибавляет к размеру EXE-файла 200 килобайт, в последних версиях эта цифра ещё больше.
  • Кроссплатформенное ПО либо имитирует внешний вид стандартных оконных элементов ОС, либо добавляет промежуточный слой абстракции, что также расходует память.
  • В то же время программисты стали уделять меньше внимания оптимизации программ, так как она становится всё менее окупаемой.

[править] Пример 1: системные требования Microsoft Windows

Сравнение минимальных конфигураций компьютера для разных версий Microsoft Windows (по данным Microsoft):

Версия ОС Частота процессора Оперативная память Место на диске
Windows 95[4] 25 МГц 8 Мб ~50 Мб
Windows 98[5] 66 МГц 24 Мб 140—255 Мб
Windows ME[6] 150 МГц 32 Мб 320 Мб
Windows 2000 Server[7] 133 МГц 64 Мб 1 Гб
Windows XP (2001) [8] 300 МГц 128 Мб 1,5 Гб
Windows Vista (2007) [9] 800 МГц 512 Мб 15 Гб
Windows 7 (2009) [10] 1 ГГц 1 Гб 16 Гб

[править] Пример 2: вывод списка файлов

Во времена MS-DOS файловые менеджеры (такие как NC или VC) осуществляли вывод списка файлов практически мгновенно. В современных системах, несмотря на многократно возросшую мощь компьютеров, вывод списка файлов занимает довольно длительное время — это связано главным образом со сложной системой иконок файлов, которые во многих случаях генерируются в зависимости от содержания файла. Таким образом, если раньше программе требовалось только получить список файлов и отсортировать его, то теперь требуется для каждого файла либо заглянуть в реестр (чтобы узнать, какая иконка соответствует данному расширению имени), либо прочитать этот файл, чтобы сгенерировать подходящую иконку. Исключением из этого являются файловые менеджеры FAR (консольное приложение, не отображает иконок) и Total Commander (опционально можно использовать фиксированный внутренний набор иконок в зависимости от расширения файла либо вообще не отображать иконки)

[править] Отношение к раздуванию ПО

Пользователи, как правило, относятся к раздутому ПО отрицательно. По мнению Джоэла Спольски, зря[11] по следующим причинам:

  • С прогрессом микроэлектроники аппаратное обеспечение, на котором новая версия способна работать, часто оказывается даже дешевле. Например, Excel 1.0 потреблял 36 долл. дискового пространства по ценам 1993 года, Excel 2000 — 1,03 долл. по ценам 2000 года.
  • Оптимизация экономически оправдана только в ключевых точках программы. Вовремя вышедшая программа важнее хорошо оптимизированной (в крайнем случае можно выпустить патч).
  • Хотя типичный пользователь использует 20 % функций, у разных пользователей эти 20 % разные. Поэтому, если написать облегчённую программу, в которой реализованы только 20 % функций, есть риск, что она нужна будет только разработчику и больше никому.

Кроме того, как заметил Реймонд Чен, пользователь часто не замечает усовершенствованные «внутренности» ПО. Например, калькулятор Windows часто ругали за потерю точности. В какой-то момент стандартную библиотеку работы с числами с плавающей запятой в формате IEEE заменили на библиотеку с поддержкой чисел произвольной точности, но это мало кто заметил.[12]

[править] Альтернативы раздутому ПО

  • Модульный принцип — к основной программе подключается дополнительная функциональность в виде плагинов. Это позволит исключить из основной поставки редко используемую функциональность.
  • Написание ПО по хорошо проработанному техническому заданию, без «функций для галочки».
  • Открытое ПО может скрывать редкоиспользуемые функции с помощью директив препроцессора (см.: Условная компиляция). Правда, для этого придётся перекомпилировать приложение.
  • Даунгрейд — использование старых версий ПО, которые требуют меньше ресурсов, не перегружены спецэффектами и ненужным большинству пользователей функционалом.

[править] Сходные явления

[править] Функции для галочки

С раздуванием программного обеспечения связан такой феномен, как «функции для галочки». Этим термином называют функции, наспех сделанные исключительно для того, чтобы указать в рекламном проспекте, что эта функция есть.

[править] Раздувание кода

Программный код, который пишется несколькими людьми (или одним в течение длительного времени) часто подвержен раздуванию. Признаками этого являются:

  • Спагетти-код.
  • Неиспользуемые функции.
  • Повторное вычисление одного и того же.
  • Повторное написание одной и той же функциональности.

Причинами могут быть:

  • Недостаточное взаимодействие между программистами, плохая координация действий группы.
  • Непрофессиональный программист.
  • Неразбериха в начале проекта, смена технического задания.

Против раздувания кода помогает серьёзный рефакторинг — но затраты на него могут быть настолько велики, что приходится держать «взрывоопасный» код «до последнего».

[править] Фичакрип, или «раздувание функциональности»

К концу разработки выясняется, что для сдачи законченного продукта требуется реализовать всё больше и больше функций, «и все нужны».[13]

[править] Примечания

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках