Introdução
A arquitetura de software é um conceito fácil de compreender e que a maioria dos engenheiros conhece intuitivamente, especialmente os que têm pouca experiência, mas é difícil de definir com precisão. Em particular, é difícil traçar uma linha reta entre o design e a arquitetura - a arquitetura é um aspecto do design que se concentra em algumas características específicas.
Em Uma Introdução à Arquitetura de Software, David Garlan e Mary Shaw sugerem que a arquitetura de software é um nível de design preocupado com a seguinte questão: "Além dos algoritmos e das estruturas de dados de computação; o design e a especificação da estrutura total do sistema emergem como um novo tipo de problema". As questões estruturais incluem a organização básica e a estrutura global de controle; os protocolos para comunicação, a sincronização e o acesso aos dados; a atribuição das funcionalidades aos elementos de design; a distribuição física; a composição de elementos de design; a característica escalar e o desempenho; e a seleção entre as alternativas de design." [GAR93]
Mas existe mais na arquitetura do que apenas a estrutura; o "IEEE Working Group on Architecture" define-a como "o conceito de mais alto nível de um sistema em seu ambiente" [IEP1471]. Abrange também o "adaptar-se" à integridade do sistema, com restrições econômicas, com interesses estéticos, e com estilo. Não é limitada a um foco interno, mas leva em consideração o sistema como um todo em seu ambiente de usuário e em seu ambiente de desenvolvimento - como um foco externo.
Neste processo, a arquitetura de um sistema de software (em um dado ponto) é a organização ou a estrutura dos componentes significativos do sistema que interagem através das interfaces, com os componentes compostos de componentes sucessivamente menores e de interfaces.
Descrição da Arquitetura
Para falar e raciocinar sobre a arquitetura de software, você deve primeiramente definir uma representação arquitetural, uma forma de descrever aspectos importantes de uma arquitetura. Esta descrição é capturada no Artifact: Caderno de Arquitetura.
Visões Arquiteturais
A arquitetura de software pode ser representada em visões arquiteturais múltiplas. Cada visão arquitetural representa um determinado conjunto de interesses específico aos Stakeholders no processo de desenvolvimento: usuários, designers, gerentes, engenheiros de sistema, mantedores, etc.
As visões capturam as principais decisões estruturais de design pela demonstração de como a arquitetura de software está estruturada em componentes, e como os componentes são conectados para produzir formas úteis [DEW92]. Estas escolhas de design devem estar relacionadas aos Requisitos funcionais e suplementares e a outras restrições. Mas estas escolhas, por sua vez, adicionam mais restrições aos requisitos e as futuras decisões de design em um menor nível.
Foco Arquitetural
Embora as visões acima possam representar todo o design de um sistema, a arquitetura só se preocupa com alguns aspectos específicos:
-
A estrutura do modelo: os padrões organizacionais, por exemplo, a Divisão em Camadas
-
Os elementos essenciais: casos de uso críticos, principais classes, mecanismos comuns, etc, ao contrário de todos os elementos presentes no modelo.
-
Alguns cenários principais que mostram os principais fluxos de controle de todo o sistema.
-
Os serviços para capturar a capacidade de divisão em módulos, características opcionais e aspectos de produtos de linha.
Essencialmente, as visões arquiteturais são abstrações (ou simplificações) de todo o design, nas quais as características importantes estão mais visíveis deixando os detalhes de lado. Estas características são importantes quando se raciocina sobre:
- Evolução do sistema: indo para o ciclo de desenvolvimento seguinte.
- Reuso da arquitetura, ou partes dela, no contexto de uma linha de produto.
- Avaliação da qualidade suplementar tal como desempenho, disponibilidade, portabilidade e segurança.
- Atribuição do trabalho de desenvolvimento às equipes ou aos sub-contratados.
- Decisões a respeito da inclusão de componentes prontos.
- Inserção em um sistema maior.
Padrões Arquiteturais
Os padrões Arquiteturais são formas pré-prontas para resolver problemas Arquiteturais conhecidos. Uma estrutura arquitetural ou uma infra-estrutura Arquitetural (middleware) é um conjunto de componentes com os quais você pode construir um determinado tipo de arquitetura. Muitas das principais dificuldades arquiteturais devem ser resolvidas na estrutura ou na infra-estrutura, geralmente direcionada a um domínio específico: comando e controle, MIS, sistema de controle, etc.
Exemplos de padrões Arquiteturais
[BUS96] agrupa os padrões arquiteturais de acordo com as características dos sistemas nos quais eles são mais aplicáveis, com uma categoria que trata das questões estruturais mais gerais. A tabela a seguir mostra as categorias apresentadas em [BUS96] e os padrões que elas contêm.
Categoria |
Padrão |
Estrutura |
Camadas |
Pipes e Filtros |
Quadro-negro |
Sistemas Distribuídos |
Agente |
Sistemas Interativos |
Modelo-Visão-Controle |
Apresentação-Abstração-Controle |
Sistemas Adaptáveis |
Reflexão |
Microkernel
|
Consulte [BUS96] para uma descrição completa destes padrões.
Uma arquitetura de software, ou simplesmente uma visão arquitetural, pode ter um atributo chamado Estilo Arquitetural, que reduz o conjunto de possíveis formas de escolha, e impõem um determinado grau de uniformidade à arquitetura. O estilo pode ser definido por um conjunto de padrões, ou pela escolha de componentes específicos ou de conectores como os blocos de construção básicos. |