Раздувание программного обеспечения
Раздува́ние програ́ммного обеспе́чения (англ. software bloat, bloatware) — тенденция новых программ быть больше по объёму и требовать больше системных ресурсов по сравнению со старыми.
Никлаус Вирт в 1996 г. написал статью «Долой „жирные программы“», подняв проблему программ, для которых рост требований к ресурсам превышает рост их функциональности и производительности[1]. Термин «жирные программы» (fatware) позаимствован из статьи Э. Перраторе 1993 года[2].
Содержание |
[править] Причины
- Основной причиной этого является добавление в программы всё новых функций и возможностей, в том числе и не являющихся абсолютно необходимыми для работы.
- Некоторые из подобных функций фактически стали требованиями. Например, графический интерфейс требует существенно бо́льших ресурсов, чем текстовый, однако пользователи уже привыкли работать только с графическим интерфейсом (даже если им фактически и не требуется работать с изображениями).
- Всё чаще используются внешние библиотеки, в которых универсальность оборачивается большим размером. Например: в 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]
[править] Примечания
- ↑ Никлаус Вирт. Долой «жирные» программы
- ↑ E. Perratore et al., “Fighting Fatware,” Byte, Vol. 18 No. 4 Apr. 1993, pp. 98-108.
- ↑ Один из авторов Netscape Navigator. См.: Jargon File.
- ↑ Microsoft KB: Windows 95 Installation Requirements. Microsoft (23 апреля 2007).
- ↑ Требования к аппаратному обеспечению для установки Windows 98. Microsoft (30 декабря 2004).
- ↑ Минимальные аппаратные требования для установки Microsoft Windows Millennium Edition. Microsoft (3 октября 2004).
- ↑ System requirements for Microsoft Windows 2000 operating systems. Microsoft (13 ноября 2007).
- ↑ Системные требования для операционных систем Windows ХР. Microsoft (25 января 2006).
- ↑ Системные требования для Windows Vista. Microsoft (28 мая 2007).
- ↑ Системные требования для седьмой винды 7.
- ↑ Strategy Letter IV: Bloatware and the 80/20 Myth
- ↑ When you change the insides, nobody notices (англ.). MSDN Blogs (25 мая 2004). Проверено 16 декабря 2008.
- ↑ Featurecreep на GameDev.ru