stringtranslate.com

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

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

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

Расширяемая конструкция

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

Важность

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

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

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

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

Белый ящик

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

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

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

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

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

Черный ящик

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

Серый ящик

Расширяемость серого ящика — это компромисс между подходом чистого белого ящика и чистого черного ящика, который не полагается полностью на раскрытие исходного кода. Программистам может быть предоставлен интерфейс специализации системы, в котором перечислены все доступные абстракции для уточнения и спецификации того, как должны разрабатываться расширения. [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. ^ Рауз, Маргарет. «Расширяемый». SearchSAO. Np, март 2007 г. Веб. 27 апреля 2014 г. <http://searchsoa.techtarget.com/definition/extensible Архивировано 06.12.2016 на Wayback Machine >.
  3. ^ Келли, Аллан. «Философия расширяемого программного обеспечения». ACCU-Professionalism in Programming (2002): Web. 27 апреля 2014 г. <http://accu.org/index.php/journals/391>.
  4. ^ Зенгер, Маттиас. «1.2 Характеристики механизмов расширяемости». Абстракции языка программирования для расширяемых компонентов программного обеспечения. Лозанна: Швейцарский федеральный технологический институт, 2004. N. pag. Web. 26 апреля 2014 г. <http://zenger.org/papers/thesis.pdf>.
  5. ^ Мартин Риттер и Бо Норрегаард Йоргенсен. «Независимо расширяемые контексты». Опубликовано в журнале «Архитектура программного обеспечения: 4-я Европейская конференция, ECSA 2010, Копенгаген, Дания, 23–26 августа 2010 г., материалы». 2010. с. 327.
  6. ^ Зенгер, Маттиас. "1.3 Классификация механизмов расширяемости". Абстракции языка программирования для расширяемых компонентов программного обеспечения. Лозанна: Швейцарский федеральный технологический институт, 2004. N. pag. Web. 26 апреля 2014 г.
  7. ^ Зенгер, Маттиас. "1.1.1 Повторное использование". Абстракции языка программирования для расширяемых компонентов программного обеспечения. Лозанна: Швейцарский федеральный технологический институт, 2004. N. pag. Web. 26 апреля 2014 г.
  8. ^ Гэри Макгроу. «Безопасность программного обеспечения: создание безопасности». 2006. стр. 9.
  9. ^ Лен Басс, Пол Клементс, Рик Казман. «Архитектура программного обеспечения на практике». 2003. С. 339.

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

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