Arquitetura de Software - SIGAA - Sistema Integrado de ...jair/as/slides/ConceitosDefinicoes.pdf ·...
Transcript of Arquitetura de Software - SIGAA - Sistema Integrado de ...jair/as/slides/ConceitosDefinicoes.pdf ·...
1
Arquitetura de Software, © Jair C Leite
Arquitetura de Software
Jair C Leite
Arquitetura de Software, © Jair C Leite
Arquitetura e Engenharia• Qual o papel da arquitetura e da engenharia...
– Na construção civil – edifícios, pontes, estradas, etc.?– Na indústria automobilística?– Na indústria de eletrônicos – televisores, tocadores
de DVD, de CD, de MP3?• Os papéis podem variar, mas algumas
características comuns podem ser identificadas...– É preciso que alguém idealize, defina e conceba o
produto ou artefato de acordo com os requisitos– É preciso que alguém execute e realize o que foi
idealizado, definido e concebido.
2
Arquitetura de Software, © Jair C Leite
Limitações das analogias• A natureza do software não é física, é conceitual• O software é uma máquina abstrata que
processa informações e toma decisões• Indústria de software é imatura e não está
completamente estabelecida.• A forma como um software é entregue
(configuração e instalação) é diferente dos outros produtos.
Arquitetura de Software, © Jair C Leite
Design e Arquitetura na ES
• Tradicionalmente na engenharia de software, usa-se os termos– Design arquitetural– Design detalhado
• No modelo cascata eles são fases do processo
• No modelo RUP eles são disciplinas que ocorrem em várias fases
• A arquitetura é o produto
3
Arquitetura de Software, © Jair C Leite
O papel da arquitetura de software
Arquiteto de software
Produtofinal
Compilaçãoe Ligação
Class a {int x;
char v;Func(a,b
}
Class b...
Codificação
Modelo abstrato do programa em termos de componentes (sub-sistemas, módulos, etc..) interconectados entre si.- Modelo estático: estrutura- Modelo dinâmico: comportamento- Diferentes Visões
Modelo abstrato do programa em termos de componentes (sub-sistemas, módulos, etc..) interconectados entre si.- Modelo estático: estrutura- Modelo dinâmico: comportamento- Diferentes Visões
ComponentesBinários executáveis
Modelo abstrato dos componentes físicos que formam o produto final
Modelo abstrato dos componentes físicos que formam o produto final
Sub-sistemas ou módulos
Arquitetura de Software, © Jair C Leite
Conceitos fundamentais• Arquitetura é o conjunto das principais decisões
de design sobre um sistema de software• Três aspectos fundamentais
– Todo software tem uma arquitetura– Todo software tem pelo menos uma arquitetura– Arquitetura não é uma fase do desenvolvimento.
• A arquitetura está fundamentalmente ligada aos requisitos– Funcionais– Não-funcionais
4
Arquitetura de Software, © Jair C Leite
O que é Arquitetura de Software?• Uma descrição abstrata de diferentes visões do
sistema em termos de unidade (partes) que interagem entre si.
• As unidades podem variar dependendo da visão utilizada. Por exemplo, as partes podem ser componentes e conectores; ou sub-sistemas e módulos.
• A arquitetura deve dar suporte à funcionalidade do sistema (requisitos funcionais).
• A arquitetura deve está em conformidade com a qualidade (requisitos não-funcionais).
Arquitetura de Software, © Jair C Leite
O que não é arquitetura de software?– Design detalhado (baixo-nível) – design de
componentes internos, modelos de dados e implementação
– Arquitetura do sistema físico – elementos processadores, topologia de rede, arquitetura de elementos de hardware, etc.
– Arquitetura de software está relacionada com estes últimos no que se chama de Arquitetura do Sistema.
– Uma fase do processo de software.
5
Arquitetura de Software, © Jair C Leite
Histórico• Visão tradicional
– Conceito de Sub-sistema e Módulos – Arquitetura nos Métodos Estruturados– Arquitetura nos Métodos Orientados-a-Objetos
• Visão atual– Disciplina emergente [Shaw e Garlan]– Estilo arquiteturais– Padrões de Design e Frameworks– Visões Arquiteturais– Linguagens de Descrição Arquitetural (ADL)– Desenvolvimento Baseado em Componentes
Arquitetura de Software, © Jair C Leite
Arquitetura de Software nos Métodos Estruturados• Objetivos:
– Visão abstrata em termos de módulos e funções/procedimentos– Diminuir complexidade e facilitar manutenção
• Princípios:– “Dividir-e-conquistar”– Informação escondida– Independência Funcional– Alta coesão e baixo acoplamento
• Técnicas– Decomposição Funcional– Refinamento sucessivo (passo-a-passo)
• Representação– Diagramas de caixas e linhas– Linguagens de descrição de módulos
6
Arquitetura de Software, © Jair C Leite
Estilo de arquitetura• A arquitetura básica é
hierárquica: – um programa principal
decomposto em várias sub-rotinas ou funções
– Sub-rotinas podem ser agrupadas em módulos
• Forma de Interação: – Chamada-de-função e
passagem de parâmetros• Conceitos:
– Fan-in e Fan-out: mede o grau de dependência entre as sub-rotinas.
– Coesão e Acoplamento: uma boa arquitetura deve ter alta coesão e baixo acoplamento
Fan-in
Fan-out
Baixa coesãoAlto acoplamento
Alta coesãoBaixo acoplamento
módulos
Sub-rotinas
Arquitetura de Software, © Jair C Leite
Arquitetura de Software nos Métodos Orientados-a-Objetos• Objetivos
– Agrupamento de dados e funções num único componente– Visão abstrata em termos de classes/objetos e troca de
mensagens• Princípios:
– Independência Conceitual– Encapsulamento
• Técnicas– Identificação de objetos– Especialização de objetos (Herança)– Padrões de Projetos (Design Patterns)
• Representação– UML: diagramas de classes, de seqüência, de colaboração e de
estados
7
Arquitetura de Software, © Jair C Leite
Exemplo – Sistema estação meteorológica –subsistemas e módulos
«subsystem»Data collection
«subsystem»Data processing
«subsystem»Data archiving
«subsystem»Data display
Weatherstation
Satellite
Comms
Balloon
Observer
Datachecking
Dataintegration
Map store Data store
Datastorage
Map
Userinterface
Mapdisplay
Mapprinter
Fonte: Ian Sommerville, 2000
Arquitetura de Software, © Jair C Leite
Exemplo – Sistema estação meteorológicaclasses de um módulo
identifier
reportWeather ()calibrate (instruments)test ()startup (instruments)shutdown (instruments)
WeatherStation
test ()calibrate ()
Groundthermometer
temperature
AnemometerwindSpeedwindDirection
test ()
Barometerpressureheight
test ()calibrate ()
WeatherData
airTemperaturesgroundTemperatureswindSpeedswindDirectionspressuresrainfall
collect ()summarise ()
Fonte: Ian Sommerville, 2000
8
Arquitetura de Software, © Jair C Leite
Arquitetura de Software – visão emergente• Objetivos
– Visão abstrata do software através de componentes e interfaces– Independência de plataforma e paradigma de programação– Paradigma de desenvolvimento baseado em componentes
• Técnicas– Estilos Arquiteturais– Padrões de projetos (Design Patterns)– Frameworks– Visões arquiteturais
• Tecnologias– CORBA, .NET, J2EE
• Representação– Linguagens de Descrição Arquitetural
Arquitetura de Software, © Jair C Leite
Estilos arquiteturais• Identificados em diversas aplicações de sucesso
– Modelo em camadas OSI/ISO para redes– “Notificador” em Sistemas de Janelas– “Pipes” em Sistemas Unix
• Não são modelos, são conjunto de características comuns
• Mais de um estilo pode ser utilizado em uma mesma aplicação
• Semelhanças com a idéia de Patterns
9
Arquitetura de Software, © Jair C Leite
Tubos e filtros (pipe-and-filter)
• Um Filtro é um componente que processa o fluxo de dados de sua entrada e gera um fluxo de saída para um outro filtro
• Fluxo de dados vai de um Filtro para o outro através de Tubos
• Exemplo– Abrindo uma imagem compactada e criptografada
• Facilmente implementado no Unix– ls | grep ‘java’ | more
Application Decompression OS File-System
P P Decryption P
req req req
Arquitetura de Software, © Jair C Leite
Visões arquiteturais• Separar diferentes aspectos em visões
separadas com o objetivo de gerenciar complexidade.
• Cada visão descreve diferentes conceitos da engenharia.
• Visões permitem reduzir a quantidade de informação que o arquiteto trata em um dado momento
• Muitos arquitetos de software tem usado as diferentes visões sem reconhecê-las como visões arquiteturais separadas.
10
Arquitetura de Software, © Jair C Leite
Visões arquiteturais (Hofmeister, 2000)
Arquitetura de Software, © Jair C Leite
Visões arquiteturais (Hofmeister, 2000)
• Quatro visões:– Conceitual: descreve o sistema em termos dos
elementos de design e relacionamentos entre eles
– Módulo: consiste na decomposição do sistema em módulos
– Execução: consiste no mapeamento dos componentes a entidades de execução e de hardware. Este mapeamento deve ser definido na fase de projeto arquitetural e não apenas na fase de desenvolvimento.
– Código: consiste na organização do código fonte em bibliotecas, binários, arquivos, versões e diretórios
11
Arquitetura de Software, © Jair C Leite
Visão conceitual• Mais próxima ao domínio da aplicação• A funcionalidade do sistema é mapeada em elementos
arquiteturais:– Componentes, conectores, configuração
• Desafio: – Isolar comunicação entre componentes em conectores
• Notação utilizada– Variação da UML – componentes, conectores descritos como
classes estereotipadas.
componentecomponente conectorconectorporta
role
Arquitetura de Software, © Jair C Leite
Visão conceitual
12
Arquitetura de Software, © Jair C Leite
Visão de módulo• Componentes e Conectores que formam a visão
conceitual são mapeados em subsistemas, módulos e camadas
• Sub-sistemas– Partes que podem funcionar de forma independentes– Podem conter módulos ou outros sub-sistemas
• Módulos– Implementam os elementos conceituais (componentes,
conectores, portas e roles)– Podem conter outros módulos
• Camadas– Organizam módulos de acordo com o seu uso.
• Princípios:– Dependências entre módulos devem ser minimizadas– Reuso de módulos deve ser maximizado
Arquitetura de Software, © Jair C Leite
Visão de módulos
13
Arquitetura de Software, © Jair C Leite
Visão de execução• Descreve como os módulos são mapeados para
elementos oferecidos pela plataforma de execução e como estes são mapeados para o hardware
• Define entidades de execução e seus atributos como uso de memória e de elementos de hardware
• Exemplos de elementos de execução– Processo (<<process>>)– Memória compartilhada (<<shared data>>)
Arquitetura de Software, © Jair C Leite
Visão de execução
14
Arquitetura de Software, © Jair C Leite
Visão de execução
Relação com o hardware
Arquitetura de Software, © Jair C Leite
Visão de código
• Determina:– como módulos (visão de módulo) são
mapeados em componentes fonte– como componentes do nível de
implementação são mapeados a partir dos componentes fonte
– como as entidades de execução são mapeadas em componentes do nível de implementação (p.ex. executáveis)
15
Arquitetura de Software, © Jair C Leite
Visão de codificação
Organização do fonte
Arquitetura de Software, © Jair C Leite
Visão de codificação
16
Arquitetura de Software, © Jair C Leite
Relacionamento entre as Visões• Há necessidade de feedback e interação entre
as visões• As visões módulo, execução e código auxiliam a
diminuir o gap entre o que uma ADL modela e o que uma plataforma de execução pode executar.– Componentes e conectores da visão conceitual não
podem ser diretamente mapeados para uma plataforma de execução
– As visões módulo e execução definem como componentes e conectores são mapeados para uma plataforma de execução