Arquitetura de Software Universidade Federal de Pernambuco Centro de Informática Recife - Brazil

Preview:

Citation preview

Arquitetura de Software

Universidade Federal de Pernambuco Centro de InformáticaRecife - Brazil

Introdução

Raízes da disciplina Dijkstra, 1968

particionamento

estruturação

não só a programação

Parnas, 1970 - 1972 estruturação

famílias de programas

– economia no desenvolvimento e na manutenção

Introdução

Raízes da disciplina

DeRemmer, 1975

programming-in-the-large : programação da estrutura

comum em sistemas distribuídos

programming-in-the-small: programação das “funções” do

sistema

uso comum (C, Pascal)

Introdução

Idéias fundamentais da Arquitetura de Software

Estrutura é o ponto chave

Reusabilidade de elementos de “grande escala”

A orientação a objetos reusa elementos de

“pequena escala”

Introdução

Motivação problemas

aumento do tamanho dos softwares aumento na complexidade dos softwares

A importância da Arquitetura de Software para os projetistas de software nos anos 90 é comparável a importância das estruturas de dados para os programadores nos anos 60

Introdução

Vantagens

sistemas podem ser construídos rapidamente

reusando-se ou gerando-se grandes componentes

desenvolvidos independentemente

predizer qualidades (desempenho,

mantenabilidadde) do sistema a partir de sua

arquitetura, sem um projeto ou um código detalhado

Introdução

Vantagens comunicação

decisões de projeto nas fases iniciais

restrições sobre a implementação

predizer atributos de qualidade

base para treinos de iniciantes

visão do sistema e das mudanças

transferência de conhecimento

linhas de produtos

Princípios

Termo

Disciplina

área emergente da ES aborda as questões ligadas à estrutura do software Estrutura do software

várias definições nenhuma aceita como padrão semelhanças no núcleo das definições e diferenças nas características adicionais

Princípios

Definição 1

“Uma arquitetura de software deve conter: a definição dos elementos de projeto que

compõe o software; a descrição das interações entre estes elementos; os padrões de

composição dos elementos; e um conjunto de restrições sobre

estes padrões.”

Princípios

Definição 2

“A descrição da arquitetura de software é um passo intermediário

entre a análise de requisitos e o projeto. Esta descrição consiste de

elementos arquiteturais, as interações entre estes elementos, e as restrições sobre estes elementos

e sobre as suas interações.”

Princípios

Definição 3

“Uma arquitetura de software é um conjunto de componentes

genéricos junto com uma descrição de propriedades, regras

de como estes componentes podem interagir, e estilo de

interação destes componentes.”

Princípios

Definição 4

“Arquitetura de software é a estrutura de

um programa ou um sistema, seus relacionamentos e os princípios

que guiam o seu projeto e a sua

evolução no tempo.”

Princípios

Modelos

Perry & Wolf, 1992

elementos

– processamento, armazenamento, interação

formas

– propriedades dos elementos

rationale

– restrições de composição dos elementos

Princípios

Modelos

Shaw & Garlan, 1996

Componentes

Conectores

Configuração

Princípios

Componentes

modela a computação e o armazenamento de informações

desenvolvido independentemente

exemplos de componentes

cliente

servidor

aplicação inteira

Princípios

Conectores

modela as interações entre os componentes

desenvolvido independentemente

exemplos de conectores

protocolos de comunicação

Princípios

Configuração

topologia

composição

conjunto de componentes combinados usando-se os

conectores

grafo de componentes e conectores ligados,

descrevendo uma estrutura arquitetural

Princípios

Visão de uma Arquitetura de Software

C++Java

C

Componente

Conector

Configuração

Princípios

Componentes e formas de interação

Módulos Chamada de procedimento Dados compartilhados Objetos Invocação de método Filtros Fluxo de dados ( pipe ) Processos Passagem de mensagem, RPC Arquivo de dados Leitura e escrita Base de dados Consulta

Componentes Tipos de interação

Princípios

Módulos

Módulo

Módulo

Módulo

Chamada de Procedimento

Princípios

Objetos

Objeto

Objeto

Objeto

Invocação de método

Princípios

Programas e funções

funções

ProgramaPrincipal

funções

funções

funções

Chamada de função

Princípios

Software X Hardware

número pequeno de elementos de projeto mudança de escala com a replicação dos elementos de projeto ênfase na organização e configuração

Arquitetura de Hardware

grande número de elementos de projeto mudança de escala com a adição de novos elementos de projeto ênfase na organização e configuração

Arquitetura de Software

Princípios

Software X Redes de Computadores

nós conexões poucas topologias

Arquitetura de Rede

componentes conectores muitas topologias

Arquitetura de Software

Princípios

Software X Arquitetura de Construção

visões enfatizando diferentes aspectos da construção restrição sobre os elementos de projeto e a composição estreita relação entre o estilo arquitetural e os princípios de engenharia a relação entre o estilo e o material utilizado para a construção é fundamental

Arquitetura de Construção

visões para diferentes e usuários estilos arquiteturais

princípios de engenharia e estilo arquitetural

implementação ( algoritmos e estrutura de dados que satisfazem a arquitetura )

Arquitetura de Software

Princípios

Sobre Arquitetura de Software

descrição mais abstrata no ciclo de vida do software

suprime detalhes da implementação

Arquitetura de Software sempre existiu, mas era implícita

Princípios

Sobre Arquitetura de Software separação de interesses

funcionalidade interação

Arquitetura de Software separa claramente a funcionalidade (componentes) da interação (conectores)

Princípios

Sobre Arquitetura de Software

Funcionalidade+interação

interaçãoFuncionalidade

Princípios

Sobre Arquitetura de Software define aspectos estruturais importantes

fornece uma base para as outras fases de desenvolvimento do software

a arquitetura é normalmente descrita usando-se linhas e caixas de diagramas acompanhados por uma descrição textual

Princípios

Desenvolvimento de software

Implementação Implementação

Desenvolvimento tradicional Desenvolvimento baseado em arquitetura

Arquitetura

Análise do domínio

Desenvolver / escolher a arquitetura

Representação da arquitetura

Análise e avaliação da arquitetura

Análise de requisitos Análise de requisitos

Projeto Projeto

Princípios

Arquitetura X Projeto

componentes e conectores

restrições sobre componentes

e conectores

composição de componentes

Arquitetura

procedimentos e interfaces

algoritmos e estruturas de

dados

composição procedural

Projeto

Princípios

Por que definir uma Arquitetura?

reuso de elementos de projeto permitindo maior

rapidez na construção do software

definindo-se uma arquitetura é possível predizer

algumas características do software

Princípios

Por que definir uma Arquitetura?

facilita a comunicação entre os desenvolvedores do

software

permite um entendimento maior da evolução do

software

Princípios

Por que definir uma Arquitetura?

possibilidade de análise da descrição da arquitetura

nas fases iniciais do desenvolvimento

consistência da configuração, componentes e conectores

propriedades não funcionais

conformidade com um determinado estilo

Estilos Arquiteturais

Termo

padrão organizacional

padrão arquitetural

padrão idiomático

padrão de organização estrutural

idioma arquitetural

Estilos Arquiteturais

Termo

“Um estilo arquitetural consiste de um vocabulário de elementos de projeto, um conjunto de regras de configuração, uma

interpretação semântica da composição dos elementos, e um conjunto de análises que podem ser executadas sobre um sistema

construído em um determinado estilo.”

Estilos Arquiteturais

Termo

Vocabulário

idioma de projeto

restringe os elementos arquiteturais que podem ser

utilizados em uma descrição de arquitetura

elementos arquiteturais:

componentes , conectores

Estilos Arquiteturais

Regras de Configuração

restrições topólogicas

restrigem as composições dos elementos

arquiteturais

proibição de ciclos no estilo Fipe-filter

relacionamento n-para-1 no estilo Cliente-servidor

Estilos Arquiteturais

Análise

verificação de propriedades

ausência de impasses em um estilo Cliente-servidor

Estilos Arquiteturais

Sobre estilo arquitetural

uso ad hoc

“Camelot é baseado no modelo Cliente-servidor e usa

RPC para comunicação remota e local dos clientes e

servidores”

Estilos Arquiteturais

Sobre estilo arquitetural

define uma família e não apenas um sistema

explora os pontos comuns entre famílias de

sistemas e ignora detalhes específicos

a construção de compiladores é o primeiro exemplo

do uso de estilos

Estilos Arquiteturais

Sobre estilo arquitetural a descrição da arquitetura é uma instância de um estilo

exemplos Cliente-servidor

Pipe-filter

Objetos

Invocação implícita

Camadas, repositórios

Estilos Arquiteturais

Arquitetura de software

Servidor

Cliente

Cliente

Cliente

Request-reply

Estilo Cliente-servidor

Estilos Arquiteturais

Arquitetura de software

Pipe

Filtro

Filtro

Filtro

Estilo Pipe-Filter

Estilos Arquiteturais

Arquitetura de software

Pipe

Filtro

Filtro

Filtro

Estilo Pipe-Filter

Estilos Arquiteturais

Por que definir estilos

reuso de projetos

reuso de código

o uso de estruturas convencionais facilita o

entendimento da arquitetura

“cliente-servidor”

Estilos Arquiteturais

Por que definir estilos

a restrição do espaço de projeto permite análises

mais especializadas para os estilos

“menos é mais”

Linguagem de Descrição de Arquitetura

ADL - Architecture Description Language

O que podemos esperar de uma linguagem para

descrição de arquitetura de software?

ênfase em estruturas de alto nível em oposição a

detalhes de implementação

Linguagem de Descrição de Arquitetura

Composição

divisão hierárquica de um sistema complexo em partes

menores

Abstração

explicitar a estrutura de mais alto nível

Reusabilidade

componentes, conectores e padrões de arquitetura

Linguagem de Descrição de Arquitetura

Configuração

separação da descrição de estruturas compostas da

descrição dos elementos dessas composições

Análise

permite verificar propriedades dos sistemas, especialmente

referentes a Arquiteturas Dinâmicas

Linguagem de Descrição de Arquitetura

Heterogeneidade

habilidade para combinar diferentes padrões arquiteturais

em um mesmo sistema

possibilidade de combinar componentes escritos em

linguagens diferentes

Linguagem de Descrição de Arquitetura

habilidade para representar componentes (primitivos ou

compostos)

habilidade para representar conectores

abstração e encapsulamento

tipos e checagem de tipos

permitir a construção de ferramentas de análise

Linguagem de Descrição de Arquitetura

abstração de componentes

abstração de comunicação

integridade de comunicação

a comunicação é limitada a componentes conectados

arquiteturalmente a outros

habilidade de modelar arquiteturas

Linguagem de Descrição de Arquitetura

Modelagem de componentes

conceitos diferentes em cada ADL MetaH

– um programa

C2

– uma aplicação inteira (componentes hierárquicos)

Wright

– componente

Linguagem de Descrição de Arquitetura

Modelagem de componentes

interfaces de componentes

pontos de interação com o ambiente externo

permitem a percepção da semântica dos componentes

– serviços oferecidos

– portas de comunicação

Linguagem de Descrição de Arquitetura

Modelagem de componentes

componentes como tipos para serem reusados

uso explícito de parametrização

ACME, Darwin e Rapide

Linguagem de Descrição de Arquitetura

Modelagem de componentes

restrições podem ser definidas por uma linguagem

específica

componentes podem evoluir

subtipagem de componentes

refinamento

Linguagem de Descrição de Arquitetura

Modelagem de componentes

especificação de propriedades não-funcionais

permite simulação do comportamento em tempo de execução

análise dos componentes

verificação de restrições

auxilia no gerenciamento do projeto

Linguagem de Descrição de Arquitetura

Modelagem de conectores

não necessariamente corresponde a uma unidade

de compilação em uma implementação

podem ser modelados explicitamente

possuem interface própria

Linguagem de Descrição de Arquitetura

Modelagem de conectores

podem ser modelados como entidades de primeira

classe

tipos ou instâncias

estabelecer restrições de uso via interface

suportar evolução

Linguagem de Descrição de Arquitetura

Modelagem de configurações

a estrutura de um sistema deve, idealmente,

permitir que a especificação da configuração seja

compreendida sem se conhecer detalhes internos

dos componentes e os conectores

Linguagem de Descrição de Arquitetura

Modelagem de configurações

descrição de configurações permite estimar

aspectos concorrentes e distribuídos de uma

arquitetura

ADLs podem modelar evolução e dinamismo das

configurações

Linguagem de Descrição de Arquitetura

Modelagem de configurações

suporte à composição hierárquica é fundamental em

uma ADL

em algumas ADLs uma configuração é modelada

simplesmente como um componente composto

Darwin, UniCon, CL

Linguagem de Descrição de Arquitetura

Modelagem de configurações

heterogeneidade

uma configuração deve idealmente lidar com componentes

e conectores programados em diversas linguagens

Linguagem de Descrição de Arquitetura

Modelagem de configurações

a especificação de restrições é fundamental para

descrever dependências entre componentes e

conectores

Uma ADL deve permitir refinamento da arquitetura

Linguagem de Descrição de Arquitetura

Modelagem de configurações devem suportar especificação e desenvolvimento de

sistemas que possam sofrer alterações durante sua execução.

C2

Darwin

Rapide

ZCL

Wright

Linguagem de Descrição de Arquitetura

Exemplo - Sistema de Monitoramento de Pacientes

O sistema de monitoramento de pacientes consiste

de medições periódicas ou por solicitação de pulso, temperatura e pressão através de

sensores colocados no paciente. Tais sensores disparam um alarme sempre que

qualquer das medições atingirem valores não adequados.

Linguagem de Descrição de Arquitetura

Exemplo

Paciente

estado

alarmealarme

estado

Enfermeira

Hospital

Linguagem de Descrição de Arquitetura

Exemplo - CL

system hospital

begin

use task enfermeira, paciente;

create cama from paciente;

create cuidado from enfermeira ;

link cama.alarme to cuidado.alarme;

link cuidado.estado to cama.estado;

activate cuidado, cama;

end.

Linguagem de Descrição de Arquitetura

Wright Componentes

interface (portas)

computação (comportamento)

Conectores Role (comportamento de um único participante)

Glue (comportamento completo)

Configuração componentes + conectores

Linguagem de Descrição de Arquitetura

Exemplo - pipe-filter

Este sistema lê um conjunto caracteres e transforma-os em caracteres maiúsculos

Linguagem de Descrição de Arquitetura

Exemplo - pipe-filter

UpperCaseinput output

Mergeleft

right

Split

left

right

Linguagem de Descrição de Arquitetura

Exemplo - pipe-filter

Component SplitFilter port input [entrada de dados] port left [porta de saída para o UpperCase] port right [porta de saída para o Merge] computation [lê dados e envia-os para as portas de saída]

Splitleft right

Linguagem de Descrição de Arquitetura

Exemplo - pipe-filter

Connector Pipe role Source [envia dados repetidamente] role Sink [recebe dados repetidamente] glue right [Sink recebe dados na mesma ordem

que foram enviados por Source]

UpperCaseinput output

Linguagem de Descrição de Arquitetura

Configuration CapitaliseComponent UpperCase ...Component MergeFilter ...Component SplitFilter ...Connector Pipe ...Instances

Split : SplitFilterUpper: UpperCaseMarge: MergeFilterP1, P2, P3 : Pipe

Attachments Split.left as P1.Source

Upper.input as P1.SinkSplit.right as P2.SourceMerge.right as P2.SinkUpper.output as P3.SourceMerge.left as P3.Sink

End Capitalise.

Componentes

Conector

Instanciação

Configuração

Linguagem de Descrição de Arquitetura

Exemplo - incluindo comportamento

A Bout in

C

A||C||B

{a} {a,c} {b,c}

Linguagem de Descrição de Arquitetura

Configuration ABCComponent A-Type

Port Out =a Out � Computation = Out.a Computation �

Component B-Type Port In = c In � Computation = In.c b Computation �

Connector C-TypeRole Origin = a Origin � Role Target = c Target � Glue Origin = Origin.a Target.c Glue �

InstancesA : A-TypeB : B-TypeC : C-Type

AttachmentsA.Out as C.OriginB.In as C.Target

End ABC.

Recommended