stringtranslate.com

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

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

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

Расширяемый дизайн

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

Важность

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

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

Классификация механизмов расширяемости

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

Белая коробка

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

Открытая коробка

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

Стеклянный ящик

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

Черный ящик

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

Серый ящик

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

Расширяемость против возможности повторного использования

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

Безопасность

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

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

Смотрите также

Рекомендации

  1. ^ Йоханссон, Никлас и Антон Лёфгрен. Проектирование для расширяемости: практическое исследование максимизации расширяемости с помощью принципов проектирования. Np: np, nd Факультет прикладных информационных технологий Гетеборгского университета, 29 мая 2009 г. Интернет. 26 апреля 2014 г. <https://gupea.ub.gu.se/bitstream/2077/20561/1/gupea_2077_20561_1.pdf>.
  2. ^ Роуз, Маргарет. «Расширяемый». Поиск САО. Np, март 2007 г. Интернет. 27 апреля 2014 г. <http://searchsoa.techtarget.com/definition/extensible. Архивировано 6 декабря 2016 г. на Wayback Machine >.
  3. ^ Келли, Аллан. «Философия расширяемого программного обеспечения». ACCU-Профессионализм в программировании (2002): Интернет. 27 апреля 2014 г. <http://accu.org/index.php/journals/391>.
  4. ^ Зенгер, Матиас. «1.2 Характеристики механизмов расширяемости». Абстракции языка программирования для расширяемых программных компонентов. Лозанна: Швейцарский федеральный технологический институт, 2004. Н. стр. Веб. 26 апреля 2014 г. <http://zenger.org/papers/thesis.pdf>.
  5. ^ Мартин Риттер и Бо Норрегаард Йоргенсен. «Независимо расширяемые контексты». Опубликовано в журнале «Архитектура программного обеспечения: 4-я Европейская конференция ECSA 2010, Копенгаген, Дания, 23–26 августа 2010 г., материалы». 2010. с. 327.
  6. ^ Зенгер, Матиас. «1.3 Классификация механизмов расширяемости». Абстракции языка программирования для расширяемых программных компонентов. Лозанна: Швейцарский федеральный технологический институт, 2004. Н. стр. Веб. 26 апреля 2014 г.
  7. ^ Зенгер, Матиас. «1.1.1 Многократное использование». Абстракции языка программирования для расширяемых программных компонентов. Лозанна: Швейцарский федеральный технологический институт, 2004. Н. стр. Веб. 26 апреля 2014 г.
  8. ^ Гэри МакГроу. «Безопасность программного обеспечения: построение безопасности». 2006.p. 9.
  9. ^ Лен Басс, Пол Клементс, Рик Казман. «Архитектура программного обеспечения на практике». 2003. с. 339.

Внешние ссылки

Словарное определение расширяемости в Викисловаре