Extensibilidade - Extensibility

A extensibilidade é um princípio de engenharia de software e projeto de sistemas que prevê crescimento futuro. A extensibilidade é uma medida da capacidade de estender um sistema e do nível de esforço necessário para implementar a extensão. As extensões podem ser adicionadas a novas funcionalidades ou modificadas em funcionalidades existentes. O princípio fornece melhorias sem prejudicar as funções existentes do sistema.

Um sistema extensível é aquele cuja estrutura interna e fluxo de dados são minimamente ou não afetados por funcionalidades novas ou modificadas, por exemplo, recompilar ou alterar o código-fonte original pode ser desnecessário ao alterar o comportamento de um sistema, seja pelo criador ou por outros programadores. Como os sistemas de software têm vida longa e serão modificados para novos recursos e funcionalidades adicionais exigidas pelos usuários, a extensibilidade permite que os desenvolvedores expandam ou adicionem recursos do software e facilita a reutilização sistemática. Algumas de suas abordagens incluem facilidades para permitir que as próprias rotinas de programa dos usuários sejam inseridas e as habilidades para definir novos tipos de dados, bem como para definir novas tags de marcação de formatação.

Design extensível

O projeto extensível em engenharia de software é aceitar que nem tudo pode ser projetado com antecedência. Em vez disso, é fornecida uma estrutura de software leve que permite alterações. Pequenos comandos são feitos para evitar a perda do elemento de extensibilidade, seguindo o princípio de separar os elementos de trabalho em unidades compreensíveis, a fim de evitar problemas tradicionais de desenvolvimento de software , incluindo baixa coesão e alto acoplamento e permitir o desenvolvimento contínuo. Abraçar a mudança é essencial para o design extensível, no qual as adições serão contínuas. Cada pedaço do sistema poderá ser trabalhado com quaisquer mudanças, e a ideia de mudança por meio da adição é o centro de todo o projeto do sistema. O design extensível oferece suporte à redefinição de prioridades e permite que a funcionalidade seja implementada em pequenas etapas mediante solicitação, que são os princípios defendidos pelas metodologias ágeis e desenvolvimento iterativo. A extensibilidade impõe dependências menos e mais limpas durante o desenvolvimento, bem como acoplamento reduzido e abstrações mais coesas, além de interfaces bem definidas.

Importância

A inconstância está na base de todo software por causa dos fenômenos humanos, já que o software é uma “entidade em evolução” que é desenvolvida e mantida por seres humanos, produzindo mudanças contínuas no sistema na especificação e implementação do software. Os componentes de um software são freqüentemente desenvolvidos e implantados por partes não relacionadas de forma independente. Os componentes de software adaptáveis ​​são necessários, uma vez que os componentes de fornecedores externos provavelmente não se encaixam em um cenário de implantação específico fora do rack, levando em consideração outros usuários além do fabricante. Muitos sistemas de software e linhas de produtos de software são derivados de um sistema básico, que compartilha uma arquitetura de software comum ou, às vezes, grandes partes da funcionalidade e implementação, mas são possivelmente equipados com diferentes componentes que requerem um sistema básico extensível.

Construir sistemas de software que sejam extensíveis de forma independente é um desafio importante. Um sistema extensível de forma independente não apenas permite que duas pessoas desenvolvam extensões de forma independente para o sistema, mas também permite que as duas extensões sejam combinadas sem uma verificação de integridade global.

Classificação dos mecanismos de extensibilidade

Existem três formas diferentes de extensibilidade de software: extensibilidade de caixa branca, extensibilidade de caixa cinza e extensibilidade de caixa preta, que são baseadas em quais artefatos e na maneira como são alterados.

Caixa branca

Sob esta forma de extensibilidade, um sistema de software pode ser estendido modificando o código-fonte , e é a forma mais flexível e menos restritiva. Existem duas subformas de extensibilidade, extensibilidade de caixa aberta e extensibilidade de caixa de vidro, dependendo de como as alterações são aplicadas.

Caixa aberta

As alterações são realizadas de forma invasiva em sistemas extensíveis de caixa aberta; ou seja, o código-fonte original está sendo invadido diretamente. Requer o código-fonte disponível e a licença de código-fonte permitida para modificações. A extensibilidade de caixa aberta é mais relevante para correção de bugs, refatoração de código interno ou produção da próxima versão de um produto de software.

Caixa de vidro

A extensibilidade de caixa de vidro (também chamada de frameworks orientados à arquitetura) permite que um sistema de software seja estendido com o código-fonte disponível, mas pode não permitir que o código seja modificado. As extensões devem ser separadas do sistema original de forma que o sistema original não seja afetado. Um exemplo dessa forma de extensibilidade são os frameworks de aplicativos orientados a objetos que alcançam extensibilidade normalmente usando herança e vinculação dinâmica.

Caixa preta

Na extensibilidade caixa preta (também chamada de estruturas orientadas a dados), nenhum detalhe sobre a implementação de um sistema é usado para implementar implementações ou extensões; apenas especificações de interface são fornecidas. Esse tipo de abordagem é mais limitado do que as várias abordagens de caixa branca. As extensões de caixa preta são normalmente obtidas por meio de aplicativos de configuração do sistema ou do uso de linguagens de script específicas do aplicativo, definindo interfaces de componentes.

Gray-Box

A extensibilidade de caixa cinza é um meio-termo entre uma abordagem de caixa branca pura e uma caixa preta pura, que não depende totalmente da exposição do código-fonte. Os programadores podem receber a interface de especialização do sistema, que lista todas as abstrações disponíveis para refinamento e especificações sobre como as extensões devem ser desenvolvidas.

Extensibilidade vs. capacidade de reutilização

Extensibilidade e reusabilidade têm muitas propriedades enfatizadas em comum, incluindo baixo acoplamento, modularidade e capacidade de elementos de alto risco para construir para muitos sistemas de software diferentes, que é motivada pela observação de sistemas de software que geralmente compartilham elementos comuns. A reutilização juntamente com a extensibilidade permitem que uma tecnologia seja transferida para outro projeto com menos tempo de desenvolvimento e manutenção, além de maior confiabilidade e consistência.

Segurança

Os sistemas operacionais modernos oferecem suporte à extensibilidade por meio de drivers de dispositivo e módulos de kernel carregáveis . Muitos aplicativos modernos suportam extensibilidade por meio de plug-ins , linguagens de extensão , miniaplicativos , etc. A tendência de aumentar a extensibilidade afeta negativamente a segurança do software.

CGI é um dos principais meios pelos quais os servidores da web fornecem extensibilidade. Algumas pessoas veem os scripts CGI como "uma enorme falha de segurança".

Veja também

Referências

links externos

A definição de extensibilidade do dicionário no Wikcionário