Conceito: Arquitetura de Software
A arquitetura de software representa a estrutura ou as estruturas do sistema, o que consiste em componentes de software, propriedades externamente visíveis dos componentes e os relacionamentos entre eles.
Relacionamentos
Descrição Principal

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.

Estilo Arquitetural

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.