Conceito: Arquitetura de Software
A arquitetura de software representa a estrutura ou as estruturas do sistema, 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."

Todavia, 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". 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 analistas de negócios no processo de desenvolvimento: usuários, designers, gerentes, engenheiros de sistema, mantenedores, 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. Estas escolhas de design devem estar relacionadas aos Requisitos funcionais e não-funcionais 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

Os padrões arquiteturais podem ser agrupados 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 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

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.