Наращивание возможностей — это чрезмерное постоянное расширение или добавление новых возможностей в продукт, [1] особенно в компьютерном программном обеспечении , видеоиграх (где это не следует путать с наращиванием возможностей ) и бытовой и деловой электронике . Эти дополнительные возможности выходят за рамки базовой функции продукта и могут привести к раздуванию программного обеспечения и чрезмерному усложнению, а не к простоте дизайна.
Определение того, что считается «расползанием функций», различается среди конечных пользователей , и то, что воспринимается так некоторыми пользователями, может считаться практической функциональностью другими. [2] Расползание функций является одним из наиболее распространенных источников превышения затрат и графика. [3] [ необходима проверка ] Таким образом, оно ставит под угрозу и может даже погубить продукты и проекты.
Наплыв функций может возникнуть из-за желания предоставить потребителю более полезный или желаемый продукт с целью увеличения продаж или распространения. Как только продукт выполняет все, для чего он предназначен, производитель может добавить функции, которые некоторые пользователи могут посчитать ненужными (иногда за счет эффективности) или продолжить использовать оригинальную версию (за счет предполагаемого отсутствия улучшения).
Расползание функций может также возникнуть в результате компромисса со стороны комитета, реализующего несколько различных точек зрения или вариантов использования в одном и том же продукте, даже по конъюнктурным причинам. [4] По мере добавления новых функций для поддержки каждого подхода функции перекрестного преобразования между несколькими парадигмами могут еще больше усложнить общие функции.
Существует несколько методов контроля за расползанием объектов, в том числе: строгие ограничения для допустимых объектов, множественные вариации и отсечение лишних объектов.
Более позднего разрастания функций можно избежать, основывая начальный дизайн на прочных основах программного обеспечения, таких как логическое разделение функциональности и доступа к данным, например, используя подменю, которые опционально доступны опытным пользователям , желающим получить больше функциональности и более подробную информацию. Его можно активно контролировать с помощью строгого управления изменениями и откладывания изменений на более поздние этапы поставки проекта. [5]
Другим методом контроля за расползанием функций является поддержание нескольких вариаций продуктов, где функции ограничены и сокращены в более базовых вариациях, например, редакциях Microsoft Windows . Для пользовательских интерфейсов программного обеспечения могут использоваться режимы просмотра или режимы работы (например, базовый режим или экспертный режим), между которыми пользователи могут выбирать в соответствии со своими собственными потребностями.
Как во многих графических пользовательских интерфейсах , так и в интерфейсах командной строки пользователи могут вручную выбирать более высокую степень детализации. В последнем случае во многих программах командной строки добавление параметра -v
или --verbose
вручную показывает более подробную информацию, которая может быть менее релевантной для минимальных пользователей, но полезной для опытных пользователей или для целей отладки и устранения неполадок.
Поскольку постоянно растущее, постоянно расширяющееся добавление новых функций может превысить доступные ресурсы, минимальная базовая версия продукта может поддерживаться отдельно, чтобы обеспечить работу в меньших операционных средах. Используя «правило 80/20», более базовые вариации продукта могут удовлетворить потребности большинства (например, ~80%) пользователей, поэтому они не будут подвергаться сложности (или дополнительным расходам) функций, запрашиваемых продвинутыми 20% пользователей. Дополнительные функции по-прежнему доступны, но являются необязательными и готовыми к использованию для тех, кто их запрашивает, но они не были внедрены в базовые версии продуктов.
Другим решением проблемы нагромождения функций является модульность . Опытные пользователи, которым требуется больше функциональности, могут модернизировать необходимые функции, загружая программные модули, подключаемые модули , дополнения (также известные как надстройки) и пользовательские темы в соответствии со своими личными требованиями.
В какой-то момент стоимость поддержки определенного подмножества функций может стать непомерной, и можно будет использовать сокращение. Новая версия продукта может исключить дополнительные функции, или, возможно, будет использоваться переходный период, когда старые функции будут устарели перед окончательным удалением из системы. Если существует несколько вариаций продуктов, то некоторые из них могут быть постепенно выведены из эксплуатации. Одним из основных примеров является Samsung Galaxy S6 , выпущенный в марте 2015 года, в котором были сокращены значительно многие функции программного обеспечения/меню, а также некоторые аппаратные функции. «Более функциональная» его вариация не была выпущена. [ необходима цитата ]
Иногда неконтролируемое расширение возможностей может привести к продуктам, которые выходят за рамки того, что изначально планировалось; это известно как расширение возможностей . Распространенным последствием расширения возможностей является задержка или отмена продукта, который может стать дороже, чем изначально планировалось. [ необходима цитата ]
Часто достаточно полнофункциональный программный проект или проект с умеренным количеством дополнительных функций может выживать и даже процветать на протяжении многих итераций, но его последующий релиз может претерпеть существенные задержки, как только будет принято решение о переписывании всей кодовой базы в дополнение к внедрению новых технологий. Например, Windows Vista от Microsoft планировалась как второстепенный релиз между Windows XP и его преемником под кодовым названием Windows "Blackcomb" (выпущенным как Windows 7), но после адаптации все большего количества функций из Blackcomb (многие из которых в конечном итоге были отменены), Vista оказалась основным релизом, разработка которого заняла пять лет.
Похожая судьба постигла Netscape 6 , который изначально должен был стать Netscape 5 . Решение Netscape Communications в 1998 году открыть исходный код своего браузера Netscape Navigator и интернет-пакета Communicator (оба под кодовым названием Mozilla) вскоре сделало очевидным, что базовый код слишком сложен и требует полной переписывания Mozilla, что способствовало созданию фреймворка приложений Mozilla . Это вызвало значительные задержки, Netscape 5 был пропущен, и компания была куплена AOL. Последующий выпуск Netscape 6.00 в 2000 году был широко раскритикован как код альфа-уровня, и проект достиг стабильности к Netscape 6.1 в 2001 году, через три года после решения переработать интернет-пакет. К тому времени браузер Internet Explorer от Microsoft давно затмил Netscape по доле использования, которая сократилась до однозначных чисел.
Даже после достижения стабильности и получения некоторых необходимых новых функций, открытый исходный код Mozilla Application Suite (тогда называвшийся просто Mozilla), на основе которого AOL построила Netscape, считался « раздутым ». Всего год спустя группа разработчиков Mozilla решила отделить компонент браузера, который в конечном итоге стал Firefox .
Проект Broken Age от Double Fine Adventures на Kickstarter — еще один пример задержки проекта из-за наплыва новых функций. Первоначально предполагалось, что дата релиза — октябрь 2012 года, но первая половина игры была выпущена в январе 2014 года, а вторая — в конце апреля 2015 года, и для ее завершения потребовалось два отдельных раунда финансирования. [6]
Расползание функций в сочетании с короткими сроками часто приводит к «хакерскому решению» . Желаемое изменение может быть достаточно большим, чтобы оправдать переделку существующей основы проекта, но давление сроков вместо этого заставляет разработчиков спешить и выпускать менее отточенный продукт. Спунеризм « feeping creaturism» был придуман, чтобы подчеркнуть неприязнь разработчиков к этой ситуации, [7] олицетворяя продукт, расползшийся по области действия, как «уродливое существо хаков ... бродящее в темноте», [8] и предвестник еще большего хакерства в будущем. [9] («Feeping» — жаргонный синоним «beeping».) [10]