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