Arquitetura de Software - SIGAA - Sistema Integrado de ...jair/as/slides/ConceitosDefinicoes.pdf ·...

16
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.

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