Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software Prof. MSc. Edilberto Silva prof.edilberto.silva@gmail.com http://www.edilms.eti.br Arquitetura de Software Definição: Software • Conjunto de instruções (programa de computador) que, quando executadas, produzem a função e desempenho desejados. • Inclui documentação sobre operação e uso dos programas. • Software é um elemento de sistema lógico, não físico. • Software não se desgasta, mas se deteriora. [Pressman] Prof. Edilberto Silva – www.edilms.eti.br Definição: Sistema • Um conjunto de componentes inter- relacionados organizados para atingir um certo objetivo. • É organizado para executar certo método, procedimento ou controle ao processar informações. • Automatiza ou apóia a realização de atividades humanas através do processamento de informações. Prof. Edilberto Silva – www.edilms.eti.br Definição: Engenharia de Sistemas • Um conjunto de componentes inter-relacionados organizados para atingir um certo objetivo. • É organizado para executar certo método, procedimento ou controle ao processar informações. • Automatiza ou apóia a realização de atividades humanas através do processamento de informações. Prof. Edilberto Silva – www.edilms.eti.br • “Definição e representação de uma estrutura para a composição de um sistema em termos de seus componentes computacionais, suas propriedades e interações.” [Pressman] • “A arquitetura de software de um programa ou sistema computacional é a estrutura ou estruturas do sistema que abrange os componentes de software, as propriedades externamente visíveis desses componentes e as relações entre eles.” [Kazman] Definição: Arquitetura de Software Prof. Edilberto Silva – www.edilms.eti.br Motivação: Arquitetura de Software • O aumento do tamanho e da complexidade dos softwares • A estrutura do software é importante, e adotar a estrutura correta pode trazer benefícios Quem faz ? • O Arquiteto de Software. Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software Prof. Edilberto Silva – www.edilms.eti.br Motivação: Complexidade dos projetos de software Projetos simples • Podem ser construído por uma única pessoa • Pouca modelagem • Processo de construção simples • Técnicas simples • Ferramentas simples Prof. Edilberto Silva – www.edilms.eti.br Motivação: Complexidade dos projetos de software Projetos complexos • Exigem arquiteturas • Trabalho em equipe com especialistas • Mais modelagem • Processos bem-definidos • Técnicas sofisticadas • Ferramentas mais “poderosas” Prof. Edilberto Silva – www.edilms.eti.br Objetivo e Abordagem Objetivo • Diminuir a distância entre o projeto e a implementação do software Prof. Edilberto Silva – www.edilms.eti.br Arquitetura x Projeto Arquitetura � Componentes e conectores � Restrições sobre componentes e conectores � Composição de componentes Projeto � Procedimentos e interfaces � Algoritmos e estruturas de dados � Composição procedural X Prof. Edilberto Silva – www.edilms.eti.br Definição: Arquitetura de Software • A Arquitetura de Software (AS) de um sistema define sua estrutura de alto nível, ou seja, denota sua estrutura organizacional como uma coleção de componentes interativos • Descrição mais abstrata no ciclo de vida do software • Suprime detalhes da implementação Prof. Edilberto Silva – www.edilms.eti.br Definição: Arquitetura de Software • Define apenas os aspectos estruturais importantes • Fornece uma base para as outras fases de desenvolvimento do software • A arquitetura pode ser descrita usando-se linhas e caixas de diagramas acompanhados por uma descrição textual. (UML !) • Separa as funcionalidades das interações Prof. Edilberto Silva – www.edilms.eti.br Definição: Arquitetura de Software Outras definições • “Arquitetura de software inclui o conjunto de decisões significantes sobre a organização de um software: – Seleção dos elementos estruturais e suas interfaces – Comportamento entre esses elementos – Composição destes elementos estruturais e de comportamento em subsistemas maiores – Estilo arquitetural que guia esta organização” [Booch] Prof. Edilberto Silva – www.edilms.eti.br Mais definições ... • “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.” [Garlan] • “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.” [Perry] • “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.” [Jackson] Definição: Arquitetura de Software Prof. Edilberto Silva – www.edilms.eti.br E ainda mais ... • “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.” [Shaw] • “Arquitetura de software é a organização incluindo seus componentes, o relacionamento componentes e com o ambiente e a evolução dos componentes.” [IEEE] Definição: Arquitetura de Software Prof. Edilberto Silva – www.edilms.eti.br AS: Importância • Facilitador na comunicação entre todas as partes interessadas no desenvolvimento do software • Estabelece as decisões iniciais de projeto que terão impacto profundo no resultado final do software • Sendo assim, vale a pena fazer um modelo que é relativamente pequeno, intelectualmente inteligível de como o sistema é estruturado e como os componentes trabalham em conjunto • Esse modelo é transferível para outros projetos de software e representam um conjunto de abstrações que permitem descrever a arquitetura de modo previsível. Prof. Edilberto Silva – www.edilms.eti.br AS: Benefícios • 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 • Facilita a comunicação entre os desenvolvedores do software • Permite um entendimento maior da evolução do software – Possibilidade de análise da descrição da arquitetura nas fases iniciais do desenvolvimento – Consistência da configuração, componentes e conectores – Completude – Propriedades não funcionais – Conformidade com um determinado estilo arquitetural Prof. Edilberto Silva – www.edilms.eti.br AS: Elementos e Componentes Elementos essenciais • Componentes • Conectores • Configuração Componentes • Denotados por termos como “elementos arquiteturais”, “componentes genéricos”, “elementos do projeto”.. • Modela a computação e o armazenamento de informações • Desenvolvido independentemente • Exemplos de componentes: Cliente, Servidor e até uma aplicação inteira Prof. Edilberto Silva – www.edilms.eti.br Arquitetura de Software Configuração Componente Conector Prof. Edilberto Silva – www.edilms.eti.br Exemplos de componentes e formas de interação • Módulo – Chamada de procedimentos – Dados compartilhados • Objeto – Invocação de método • Processo – Passagem de mensagem • Arquivo de dados – Acesso de leitura e escrita • Banco de dados – Consulta SQL Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Quem é ? – Arquiteto de software é um papel recente na indústria de software.– Arquiteto de software NÃO é um desenvolvedor sênior!!! • Desenvolvedor é especialista e tático. • Arquiteto é generalista e estratégico. "O arquiteto ideal deve ser uma pessoa erudita, um matemático, familiarizado com estudos históricos, um estudioso aplicado de filosofia, conhecedor de música, que não desconheça medicina, detentor de saber jurídico e familiarizado com astronomia e cálculos astronômicos." Vitruvius, há aproximadamente 25 anos a.C. Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Habilidades – Liderança técnica – Hábil negociador – Possui conhecimentos de projeto e programação – Possui conhecimentos do domínio da aplicação – É capaz de tomar decisões e conduzir times de projetos – Tem ampla habilidade para gerenciar riscos técnicos de projetos Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Principais tarefas – Trabalhar em intensa e forte colaboração com a equipe. – Apoiar a equipe na investigação dos pontos de relevância técnica de um projeto. – Atuar como um coach. – Identificar os mecanismos arquiteturais relevantes. – Motivar a equipe para a investigação e resolução destes mecanismos. – Apoiar a equipe do início ao fim do projeto. Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Atividades e produtos (segundo o RUP) Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Responsabilidades – “Atacar” os principais riscos cedo e continuamente. – Garantir que o produto entregue tem valor para o cliente. – Manter o foco no software executável. – Acomodar as mudanças. – Estabelecer uma arquitetura “executável” no início do projeto. – Construir o sistema usando componentes. – Trabalhar sob os preceitos da qualidade contínua. – Promover o balanceamento das prioridades: • Requisitos, riscos, mercado e arquitetura. Prof. Edilberto Silva – www.edilms.eti.br O Arquiteto de Software • Processos de arquitetura (segundo o RUP) Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Variáveis – Produtividade no desenvolvimento (desde a concepção à implantação) – Agilidade na manutenção – Integração com sistemas legados – Escalabilidade – Redução do custo de produção, treinamento e suporte ao usuário – Agilidade e baixo custo na atualização de versões – Segurança Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas monolíticas – Processamento centralizado – Terminais Burros – Redes de comunicação lentas • Metodologia de Desenvolvimento – Linguagem Cobol – Linguagens de 4a geração (Natural) – Bancos de dados hierárquicos, rede e "relacional" – Análise Estruturada Clássica • Características das Aplicações • Aplicações corporativas batch e on-line • Aplicações com interface com o usuário baseada em caracteres. Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Arquiteturas monolíticas • Vantagens – Facilidade de gerência da segurança – Facilidade de gerência de usuários – Facilidade de gerência de aplicações – Facilidade de integração de sistemas • Desvantagens – Processamento centralizado (escalabilidade vertical) – Alto custo (milhões de dólares/ano) – Arquiteturas de hardware, software e comunicação totalmente proprietárias levando à dependência do fornecedor – Interface com o usuário limitada, baseada em caractere – Usuário sem autonomia Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Arquiteturas distribuídas – Servidores de serviços compartilhados (ex. arquivos, impressão) com boa capacidade de processamento – Estações de trabalho com bom poder de processamento com aplicações locais, interface gráfica – Redes com boa velocidade (10, 100, 1000 Mbps) – Metodologia de Desenvolvimento • Linguagens Clipper, Pascal, Cobol • Gerenciamento de arquivos específico das linguagens; • Análise Estruturada – Características das Aplicações • Aplicações departamentais on-line com até dezenas de usuários • Aplicações acessam servidor através de mapeamento de unidades de disco ou protocolos proprietários Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Arquiteturas distribuídas • Vantagens – Processamento espalhado permitindo o uso de aplicações nas estações – Servidores e estações de baixo custo – Arquiteturas de software e comunicação proprietárias mas com recursos de integração entre plataformas – Interface com o usuário montada localmente e com recursos gráficos – Usuário com autonomia total • Desvantagens – Dificuldade de gerência da segurança – Dificuldade de gerência de usuários – Dificuldade de gerência de aplicações – Dificuldade de integração de sistemas – Aplicações são executadas nas estações de forma independente, podendo acessar arquivos no servidor, mas sobrecarregando muito a rede Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Arquiteturas cliente-servidor – Aplicações divididas em dois módulos: o cliente e o servidor – Cliente e servidor comunicam-se através de protocolos de comunicação proprietários voltados para serviços – Metodologia de Desenvolvimento • Linguagens Delphi, Visual Basic, Java, etc • Servidores de Banco de Dados Relacional • Análise Estruturada e Orientada a Objetos – Características das Aplicações • Aplicações departamentais on-line e com até dezenas de usuários; • Aplicações com interface gráfica com o usuário. • Aplicação cliente sem regra de negócio e servidor de banco de dados com regra de negócio em Stored Procedures. Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Arquiteturas cliente-servidor Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas cliente-servidor – Vantagens • Maior performance, já que a regra de negócio está no próprio banco de dados – Desvantagens • Soluções de Stored Procedures são proprietárias o que amarra a aplicação ao banco de dados • Perda de escalabilidade horizontal • Desenvolvimento em linguagens de programação proprietárias dos bancos de dados, normalmente procedurais ou de scripts, com baixa reutilização de código • Maior dificuldade de implementação Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Aplicações Multi-Camadas (Multi-tier) • Consiste numa evolução do modelo cliente servidor introduzindo uma ou mais camadas intermediárias de software. • Três Camadas – Consiste em três camada de software. – Camada de Interface • Responsável pela interface com o usuário. – Camada de Regras de Negócio • Responsável pela regras de negócio. – Camada de Dados • Responsável pelo acesso aos dados (normalmente em banco de dados). Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • 2 camadas Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • 3 camadas Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software 3 camadas MVC • Model (Database) • View (client) • Controller • Modelo: representa os dados da aplicação e as regras de negócio. • Controlador: define o comportamento da aplicação. • Visão: apresenta os dados aos usuários. Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software Multi-camadas – Possui as três camadas anteriores com a adição de subcamadas na camada de regra de negócio, normalmente para a integração com sistemas legados. – Desvantagens • Maior dificuldade de implementação. – Vantagens • Grande facilidadede gerência de segurança, de aplicações e de usuários • Grande facilidade de integração de sistemas: administração de componentes • Independência de banco de dados • Grande escalabilidade horizontal através da criação de clusters de servidores de aplicação • Boa performance • Maior flexibilidade para a estruturação da arquitetura da aplicação e para incorporar o uso de outras tecnologias Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Multi-camadas Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Multi-camadas Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P – Uma tecnologia que permite a qualquer dispositivo com acesso a uma rede prover serviços a outros dispositivos da mesma rede. – Um peer em uma rede P2P age como um cliente e como um servidor de uma arquitetura cliente/servidor tradicional – Compartilhamento de Recursos: • Informações • Recursos computacionais: – Espaço em disco, Processamento, Recursos de rede – Algumas aplicações P2P: mensagem instantânea, compartilhamento de arquivos, computação distribuída Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P – Arquitetura Cliente/Servidor Tradicional • Responsabilidades do cliente – Enviar pedidos de um serviço qualquer – Receber as respostas de um pedido feito a um serviço • Responsabilidades do Servidor – Receber pedidos de serviço – Processar os pedidos e executar o serviço requerido – Enviar a resposta com os resultados do serviço requerido Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P – Responsabilidades do peer, como cliente • Enviar pedidos de serviço a outros peers • Receber as respostas de pedidos de serviço feitos a outros peers – Responsabilidades do peer, como servidor • Receber pedidos de serviço de outros peers • Processar os pedidos e executar o serviço requerido • Enviar a resposta com os resultados do serviço requerido • Propagar os pedidos de serviço a outros peers Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • P2P Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P híbridas – Responsabilidades do Cliente • Registrar no servidor seus serviços disponíveis • Enviar ao servidor pedidos de busca por serviços e receber respostas contendo listas de peers com os serviços desejados • Enviar a outros peers pedidos de serviço e receber as respostas desses pedidos • Receber de outros peers pedidos de serviço, processar e executar o serviço requerido e enviar repostas a quem fez o pedido – Responsabilidades do servidor • Registrar serviços disponíveis nos peers • Receber pedidos de busca por serviços disponíveis, buscar por esses serviços e enviar respostas com as localizações dos serviços desejados Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • P2Ps híbridas Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P – Algumas razões • Eliminar o gargalo de fonte única, usando o P2P para distribuir dados e fazer o balanceamento de pedidos na rede • Eliminar o risco de um único ponto de falha • A infraestrutura P2P permite acesso direto aos recursos compartilhados, e isso dá capacidade de manutenção remota – Elementos • Um peer é o nodo em uma rede P2P. É a unidade fundamental de qualquer solução P2P. • Cada peer possui um ID único • Cada peer pertence a um ou mais grupos (PeerGroups) • Cada peer pode se comunicar com outros peers de seus grupos e também de outros grupos. Prof. Edilberto Silva – www.edilms.eti.br Tipos de Arquitetura de Software • Arquiteturas P2P – Elementos • Peer Simples (Simple Peer): – É designado a servir um único usuário final, permitindo a este prover e consumir serviços da rede. • Peer Rendezvous – Fornece as localizações na rede para a descoberta de outros peers e de seus recursos disponíveis. • Peer Router – Fornece um mecanismo para que os peers se comuniquem através de firewalls ou NATs • Peer Group – Um grupo de peers com um conjunto comum de interesses ou objetivos. – Peer groups podem fornecer aos seus membros serviços que não estão diretamente acessíveis aos outros peers da rede. Prof. Edilberto Silva – www.edilms.eti.br Referências • Bibliografias – The Rational Unified Process Made Easy: A Practitioner’s Guide to the RUP by Per Kroll, Philipe Krutchen, Addison-Wesley. – Applied Software Architeture, by Cristine Hoffmeister, Robert Nord, Dilip Soni, Addison-Wesley. • Sobre RUP e EUP – http://www.enterpriseunifiedprocess.com/ – http://www-128.ibm.com/developerworks/rational/library • Portais de Arquitetura de Software – http://www.opengroup.org/ – http://www.research.ibm.com/journal/sj/381/youngs.html – http://www.booch.com/architecture/index.jsp – http://www.sei.cmu.edu/architecture – http://microsoft.com/architecture Prof. Edilberto Silva – www.edilms.eti.br Obrigado! Edilberto Silva www.edilms.eti.br Prof. Edilberto Silva – www.edilms.eti.br
Compartilhar