Расширяемость

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Расширяемость (англ. extensibility) означает возможность добавления отдельных элементов в какую-либо систему. Этот термин является одним из принцип разработки и проектирования программного обеспечения и других систем, в которых требуется учитывать их будущий рост и развитие. Расширяемость можно рассматривать как системную меру способности расширять систему и меру количества усилий, необходимых для реализации расширения. Главный аспект применения расширяемости - это предусмотреть возможность внесения изменений.

Расширяемая система (англ. extensible system) — система, чья внутренняя структура и поток данных минимально или не подвержены влиянию новых или измененных функций. Например, перекомпиляция или изменение исходного кода может оказаться ненужным, дорогим или невозможным при изменении поведения системы либо создателем, либо другими программистами.[1]

Поскольку программные системы долговечны и будут требовать внесения изменений для добавление новых функций и изменение существующих, необходимых пользователям. Расширяемость позволяет разработчикам расширять или добавлять возможности программного обеспечения и облегчает систематическое повторное использование. Некоторые из его подходов включают средства, позволяющие вставлять собственные подпрограммы или сценарии пользователей, а также возможности определять новые типы данных, а также определять новые элементы для форматирования.[2]

Расширяемый дизайн[править | править код]

Расширяемый дизайн в разработке программного обеспечения заключается в том, что не все может быть разработано заранее. Вместо этого предлагается использовать программную платформу, которая позволяет вносить изменения в будущем. Небольшие команды сделаны для того, чтобы предотвратить потерю возможности расширять систему, следуя принципу разделения на понятные модули, чтобы избежать традиционных проблем разработки программного обеспечения, включая низкую связность и высокое сопряжение, и обеспечить непрерывную разработку. Возможность внесения изменений важно для расширяемого дизайна, в котором разработка и внесение дополнений в функциональность будет постоянным. Расширяемый дизайн поддерживает частую приоритизацию и позволяет вносить изменение в функциональные возможности системы на коротких этапах разработки системы по запросу. Данными принципы руководствуются при разработке программного обеспечения в рамках методологии Agile и при итеративной разработке. Расширяемость накладывает меньшие и более чистые зависимости во время разработки, а также позволяет уменьшить сопряжение между модулями и увеличить связность абстракций, а также проектировать хорошо описанные интерфейсы.[3]

Значение[править | править код]

Непостоянство лежит в основе всего программного обеспечения из-за человеческого феномена, поскольку программное обеспечение является «развивающейся организацией», которая развивается и поддерживается людьми, что приводит к постоянным изменениям в системе в спецификации и реализации программного обеспечения. Компоненты программного обеспечения часто разрабатываются и развертываются независимыми сторонами независимо друг от друга. Необходимы адаптируемые программные компоненты, поскольку компоненты от внешних поставщиков вряд ли будут вписываться в конкретный сценарий развертывания, который не предусмотрен, принимая во внимание сторонних пользователей, кроме самого производителя. Многие программные системы и программные линейки продуктов основаны на базовой системе, которая имеет общую архитектуру программного обеспечения или иногда большие части функциональности и реализации, но, возможно, оснащена различными компонентами, для которых требуется расширяемая базовая система.[4]

Создание программных систем, которые являются независимо расширяемыми, является важной задачей. Независимо расширяемая система не только позволяет двум людям самостоятельно разрабатывать расширения для системы, но также позволяет объединять два расширения без глобальной проверки интегрируемости[5].

Классификация механизмов расширяемости[править | править код]

Существуют три различные формы расширяемости программного обеспечения: расширяемость с использованием «белого ящика», расширяемость с использованием «серого ящика» и расширяемость «черного ящика», которые основаны на том, какие артефакты и как они меняются.

Белый ящик[править | править код]

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

Открытый ящик[править | править код]

Изменения выполняются внутри в открытых расширяемых системах; то есть меняется непосредственно сам исходный код. Для этого требуется исходный, который доступен и на него есть разрешенная лицензия. Расширяемость "открытий-ящик" наиболее важна для исправления ошибок, внутреннего рефакторинга кода или для выпуска следующей версии программного продукта.

Стекляный ящик[править | править код]

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

Черный ящик[править | править код]

В расширяемости черных ящиков (когда данные основаны на платформах) подробности о внедрении системы не используются для реализации развертываний или расширений; предоставляются только спецификации интерфейса. Этот тип подхода более ограничен, чем различные подходы белого ящика. Расширения черного ящика обычно достигаются с помощью приложений конфигурации системы или использования языков сценариев приложений, определяющих интерфейсы компонентов.

Серый ящик[править | править код]

Расширяемость серого ящика - это компромисс между чистым белым ящиком и чистым подходом к черным ящикам, который не полностью зависит от воздействия исходного кода. Программистам может быть предоставлен и описан интерфейс системы, в котором перечислены все доступные абстракции для уточнения и спецификации того, как должны разрабатываться расширения.[6]

Расширяемость против повторного использования[править | править код]

Расширяемость и повторное использование имеют много общих свойств, включая низкое сопряжение, модульность и высокую степень связности. Возможность повторного использования программного обеспечения стимулируется расширяемостью и относится к способности программных компонентов - создания и использование их для многих различных программных систем, что мотивируется наблюдением за программными системами, часто использующими общие компоненты. Повторное использование вместе с расширяемостью позволяет передавать технологию в другой проект с меньшим временем разработки и обслуживания, а также с повышенной надежностью (так как оно было проверенно в другом проекте) и согласованностью.[7]

Безопасность[править | править код]

Современные операционные системы поддерживают расширяемость через драйверы устройств и загружаемые модули ядра. Многие современные приложения поддерживают расширяемость через плагины, языки расширений, апплеты и так далее. Тенденция увеличения расширяемости отрицательно сказывается на безопасности программного обеспечения.[8]

CGI является одним из основных способов предоставления веб-серверам расширяемости. Некоторые люди видят сценарии CGI как «огромную дыру в безопасности»[9].

Компьютерная техника[править | править код]

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

Элементы, составляющие компьютер, можно в общем разделить на: ввод, управление, вычисление, хранение, вывод.

При построении компьютера, как конкретной системы в целом, требования, предъявляемые к отдельным элементам в соответствии с назначением, объединяют их для создания одного компьютерного устройства. Например, что касается калькуляторов, встроенных компьютеров, портативных компьютеров, бытовых электроприборов и т.д. и т.п., нет необходимости в дальнейшем их изменять, поэтому нет необходимости конструировать таким образом, чтобы возникала потребность их в расширении.

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

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

В общем, персональные компьютеры (в том числе портативные компьютеры) в последние годы могут расширить средства ввода с помощью разъема PS/2 или USB, а также расширить возможности ввода. Например, вы можете подключить и использовать оборудование: трекбол, графический планшет, сенсорный экран, сканер, цифровая камера и д.р. В дополнение к этому, могут быть рассмотрены различные устройства ввода, например, подключение различных датчиков для приложений в научных целях, но есть случаи, когда в этом случае необходимо расширить внешний интерфейс основного корпуса компьютера.

Среди элементов компьютера часть, подлежащая управлению, является первой трудностью для присоединения, но, например, контроллер шины, который управляет внешним интерфейсом, является примером управляющего устройства. Как упоминалось выше, бывают случаи, когда требуется специальный внешний интерфейс при подключении внешних устройств ввода, устройств вывода и т.п. В этом случае тип карты расширения, которую нужно добавить может быть расширением управляющего устройства.

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

Если вы используете компьютер, вы можете хранить информацию на жестком диске и для ускорения работы с данными - обрабатывать их в оперативной памяти. Если объем обрабатываемой информации слишком большой, то у вас может закончиться как место на диске, так и оперативная память и вы либо не сможете сохранить новые данные, либо потребуется завершить работу некоторых приложений, либо обработка данных может стать чрезвычайно медленной. В таком случае, если учитывать конструкцию, учитывающую расширяемость устройства хранения, можно справиться с возникшей проблемой путем добавления или переупорядочивания жесткого диска, добавления основной памяти или тому подобного.

В случае выходного устройства это его также можно расширить, например, заменить монитор более крупным и более сложным, добавить принтер и, наконец, заменить или добавить динамики.

Для реализации этих расширений обычно принято готовить различные средства расширения для персонального компьютера. Типичным примером является шина расширения общего назначения, такая как шина PCI, ISA, C-Bus и NuBus, а внешние интерфейсы, такие как USB и IEEE 1394, являются незаменимым оборудованием для обеспечения расширяемости. Существует также интерфейс, специализированный для отдельных устройств, таких как ATA и другие интерфейсы дисководов. Можно также сказать, что обеспечение безопасности для включения карты расширения и устройства дисковода внутри самого корпуса компьютера также важно для обеспечения расширяемости.

Компьютерные сети[править | править код]

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

При этом принципиально важно, что легкость расширения системы иногда может обеспечиваться в весьма ограниченных пределах. Например, локальная сеть Ethernet, построенная на основе одного сегмента толстого коаксиального кабеля, обладает хорошей расширяемостью, в том смысле, что позволяет без труда подключать новые станции. Однако такая сеть имеет ограничение на число станций — оно не должно превышать 30-40. Хотя сеть допускает физическое подключение к сегменту и большего числа станций (до 100), при этом чаще всего резко снижается производительность сети. Наличие такого ограничения и является признаком плохой масштабируемости системы при хорошей расширяемости.[10]

См. также[править | править код]

Примечания[править | править код]

  1. Johansson, Niklas, and Anton Löfgren. Designing for Extensibility: An Action Research Study of Maximizing Extensibility by Means of Design Principles. N.p.: n.p., n.d. University of Gothenburg Department of Applied Information Technology, 29 May 2009. Web. 26 Apr. 2014. [1]
  2. Rouse, Margaret. "Extensible." SearchSAO. N.p., Mar. 2007. Web. 27 Apr. 2014. [2]
  3. Kelly, Allan. "The Philosophy of Extensible Software." ACCU-Professionalism in Programming (2002): Web. 27 Apr. 2014. [3]
  4. Zenger, Matthias. "1.2 Characteristics of Extensibility Mechanisms. "Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014. [4]
  5. Martin Rytter and Bo Nørregaard Jørgensen. "Independently Extensible Contexts". Published in "Software Architecture: 4th European Conference , ECSA 2010, Copenhagen, Denmark, August 23-26, 2010, Proceedings". 2010. p. 327.
  6. Zenger, Matthias. "1.3 Classification of Extensibility Mechanisms." Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014.
  7. Zenger, Matthias. "1.1.1 Reusability." Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014.
  8. Gary McGraw."Software Security: Building Security in".2006.p. 9.
  9. Len Bass, Paul Clements, Rick Kazman. "Software Architecture in Practice". 2003. p. 339.
  10. Основы сетей передачи данных. Лекция 13: Требования к компьютерным сетям. Расширяемость и масштабируемость.[5]