Arquitetura de Software Introdução Por quê? O que? Como? Onde? e Quem? Francilene Garcia Projeto em Computação I 2009.2 Síntese • Arquitetura de software é o caminho para: – – – – conectar as metas de negócios ao que iremos construir obter alinhamento organizar a atividade de produção de código envolver as diferentes competências de um time • Arquitetura está muito ligada à vantagem competitiva • Arquitetura não se obtém facilmente: – é um trabalho de design não trivial – cada um tem um papel a desempenhar na sua criação – é melhor construída por um time pequeno de “arquitetos” dedicados que dirigem o processo e tomas as decisões Arquitetura funciona como o “plano de vôo” do desenvolvimento. Ela deve facilitar o alcance da estratégia de negócio – torna-se a implementação técnica da estratégia de negócio. Nós iremos construir um shopping? Aqui um exemplo de uma arquitetura base e seus requisitos. É só construir ela! Time 1 Lado Leste Time 2 Link A Requisitos: • estilo típico • praça da alimentação central • ... Time 3 Link B Suponha o seguinte • O Boulevard Shopping pretende construir uma nova área. Vários aspectos do novo negócio foram levantados pelos executivos. É chegado o momento de traçar os planos e prazos da nova construção. Eles pretendem uma construção rápida, pois vários lojistas estão à espera. Os construtores foram divididos em times. Ao time mais experiente foi entregue a tarefa de traçar a arquitetura do novo shopping. Cada parte da arquitetura foi entregue a um dos time para construção. • O que foi obtido ao final? Certo. Mas nós não entregamos modelos... • No negócio software, nós entregamos código, e temos um certo desconforto em trabalhar com modelos. • Porém, se olhamos para o negócio da construção civil, eles entregam “prédios” e não plantas e, não iniciam um novo projeto complexo sem começar por desenhos de tais estruturas físicas. Nós construímos o shopping! Construir uma arquitetura de software é similar... • Na construção civil é lugar comum – sente-se a necessidade de plantas antes de se iniciar uma nova construção. • Existem vários aspectos que se relacionam com integridade, integração entre equipes, consistência nos detalhes. • Um plano de atividades é gerado, definindo uma sequência clara, incluindo aspectos de sua estrutura: entradas de luz, tolerância a ventos fortes, (em alguns casos) suportar movimentação de equipamentos pesados. Ou seja, existem condições típicas e atípicas a serem consideradas. • O que resulta de uma arquitetura incompleta? Adaptações na arquitetura... É muito fácil obter um “sistema espaguete”! ...as adaptações podem levar ao caos! • Tudo começa com as primeiras decisões de cortes ou extensões na arquitetura, com a justificativa de melhor atender aos requisitos. Aumenta o número de ajustes e o acoplamento cresce a ponto de não se poder mais isolar os componentes. • É assim que um sistema deve evoluir? É a desintegração do sistema, não sua evolução! Seria um problema do negócio Software? • Um sistema típico de software é perecível, resultado de: • incertezas – no comportamento do sistema – nas próximas release • baixa qualidade – difícil rastrear falhas – difícil consertar bugs • difícil alterar – duro atender às mudanças – custa mais, leva mais tempo • Baixo reuso – difícil isolar blocos para reuso – blocos são muito específicos (orientados) • problemas éticos • perda de market share – o concorrente é melhor – não há retorno A Arquitetura faz a diferença! • Uma arquitetura é algo mais que um “rascunho desenhado” do sistema • A arquitetura é alinhada a... Conceitos chaves • Decomposição do sistema – Como eu quebro o sistema em partes? – Tenho todas as partes necessárias? – As partes se encaixam? • Trade-offs de interesse – Aspectos de qualidade mais abrangentes ou propriedades específicas do sistema (RNF e SLA) – Relação entre os atributos de qualidade • Integridade do sistema Decomposição da arquitetura: as partes se encaixam? • Ao atribuir essa tarefa para o melhor “engenheiro” do time, que entende de: – Motor – Transmissão – Suspensão – Etc • Podemos construir o melhor carro? Arquitetura deve ter foco nas “propriedades mais críticas primeiro” • Ideia chave: a integridade do sistema não pode ser alcançada de forma bottom-up • Você irá precisar de uma visão mais abrangente do sistema – Analise os trade-offs existentes para assegurar que as propriedades críticas do sistema continuam sendo atendidas quando você o decompõe em partes – Projete os mecanismos da arquitetura que endereçam as propriedades do sistema Decisões Arquiteturais: Uma questão de escopo Quanto mais abrangente a decisão, menos erros podem ser inseridos! Diferencie decisões de design de decisões de implementação. Ou seja... • Se temos em mãos uma dada aplicação, todas as decisões que podem ser tomadas por projetistas de componentes ou desenvolvedores devem ser atribuídas a eles e não surgir como parte da arquitetura. Se o escopo da arquitetura é uma linha de produtos, então toda decisão referente a um dado produto deve constar, pelo menos, na arquitetura do produto se não for possível constar na arquitetura da linha de produtos. • Qualquer decisão deve focar no impacto sobre o sistema – decisões arquiteturais devem focar nas propriedades de alto impacto nas áreas que estão altamente alinhadas com a estratégia do negócio. Escopo das decisões arquiteturais: Exemplo do Reuso Escopo das decisões arquiteturais: Exemplo do Reuso • Quando focamos num dado produto, todas as decisões são orientadas para atender às demandas do respectivo cliente – o que torna tais componentes menos adequados para outros produtos. • Ao construir arquiteturas devemos analisar os trade-offs de forma mais ampla, adequando-os aos sistemas globalmente. Decisões sobre propriedades individuais devem ser consideradas como parte da arquitetura do sistema como um todo. Escopo das decisões arquiteturais: Impacto Baixo Impacto Alto Impacto Sistêmicas Não arquitetural Foco da decisão (escopo amplo) arquitetural Local Não arquitetural Em geral, não arquitetural Prioridades do sistema • A atenção deve estar voltada para as áreas de alta prioridade e para os trade-offs entre elas: – – – – o negócio (estratégias, competências e recursos) o mercado (clientes, concorrentes e parceiros) tecnologia (desafios e oportunidades) riscos (investimentos em tecnologias e sistemas legados) – desafios ao sucesso do sistema (desenvolvimento em si e do negócio) Arquitetura de Software: Conceitos chaves • Decomposição do sistema • Trade-offs entre propriedades • Integridade do sistema • Alinhamento com o negócio – Com a estratégia do negócio – Com o ambiente do negócio • Legado • Cultura • Evolução do sistema – Vida longa! – Esquema para a estratégia de implementação – Lidar com as mudanças, inevitáveis! Não esqueça! • Decisão bottom-up Estratégia bottom-up – Pode ser um caminho muito arriscado! Nesse caso a estratégia real do negócio irá ser resultante das decisões dos desenvolvedores... • Estratégia top-down: Estratégia do negócioEstratégia da arquiteturaEstratégia da implementação – A estratégia do negócio é quem dirige a arquitetura, que é traduzida tecnicamente para suportar toda a evolução do desenvolvimento. Por quê isto é tão importante? • Permite que sejamos – Mais produtivos – Mais criativos – Mais orientados por nossa estratégia • De forma que podemos ser – Mais flexíveis, dando retorno ágil • aos ajustes necessários (mudanças) • fazendo mais – Ser um player dominante no mercado – Estar no negócio, mesmo 5 anos mais tarde O que é uma arquitetura? (definição formal) • “arquitetura é a estrutura do sistema, que compreende: – componentes ou partes da implementação – as propriedades visíveis externamente desses componentes, e – as relações entre eles.” Arquitetura: componentes e relações • Componentes – Blocos (alto nível) do sistema – Suporta • Modularidade • Separação de papéis – Colaboração entre componentes • Prover serviços (funcionalidades) • Num dado nível de serviço (qualidades) – Interface entre componentes • Provê encapsulação, com pontos de acesso restritos – Especificação dos componentes • Define propriedades visíveis externamente • Provê guias de utilização Propriedades visíveis externamente: o propósito das interfaces • Interfaces – Define os pontos de acesso aos componentes – Facilita o plug-and-play entre componentes • ameniza restrições entre clientes e provedores • Serve como um contrato entre provedores de componentes e clientes – Define externamente propriedades visíveis • Uma interface bem definida – Facilita o entendimento e compreensão do comportamento do componente e como ele é usado – Aumenta a produtividade do desenvolvedor • Foca na montagem e ligação entre componentes através de suas interfaces Modelos de arquiteturas • Ferramentas para apoiar a “criação” – Explora alternativas e ideias (mais barato que prototipar ou tentar uma versão teste do sistema) – Por exemplo, explorar as colaborações entre componentes para definir as operações da interface • Documentam a arquitetura – Descritiva ou explícita – Auxilia na visualização do sistema Visões da arquitetura • Clientes diferentes apresentam diferentes informações sobre suas necessidades Stakeholders da arquitetura • • • • • • • • • Gerentes Arquitetos Desenvolvedores QA Suporte Marketing Usuários Tomadores de decisão (mercado) Administradores de sistemas Visões da arquitetura Visão global do sistema Esquema para os desenvolv: •preciso •Sem ambiguidade Arquitetura Conceitual • Diagramas arquiteturais, especificação informal de componentes • Foco: identificação e alocação de responsabilidades entre componentes Arquitetura Lógica • Atualiza os diagramas arquiteturais (apresentando as interfaces), especificação interface, especificação de componentes e guias de utilização • Foco: design da interação, mecanismos e protocolos de conexão; provimento de info contextual para os usuários dos componentes Arquitetura Execução • Visão do Processo (via Diagramas de Colaboração) • Foco: informa como se dará o comportamento do componente em tempo de execução, threads; como eles se comunicam; como os recursos físicos são alocados. Endereçando trade-offs • (re)Lembrando: arquitetura aborda – a decomposição do sistema em componentes – foco nas propriedades críticas do sistema e seus trade-offs • Trade-offs devem ser endereçados – Através de padrões arquiteturais – Estrutura: componentes e interfaces – Mecanismos: papéis dos componentes e padrões de interação • Responsabilidades (atribuídas aos componentes) • Comportamento expresso nas interações • fluxo das interações Visões da arquitetura Qualidades do sistema: encapsulação e separação de papéis Arquitetura Conceitual • Diagramas arquiteturais, especificação informal de componentes • Foco: identificação e alocação de responsabilidades entre componentes Mecanismos e interações entre componentes Arquitetura Lógica • Atualiza os diagramas arquiteturais (apresentando as interfaces), especificação interface, especificação de componentes e guias de utilização • Foco: design da interação, mecanismos e protocolos de conexão; provimento de info contextual para os usuários dos componentes Topologia do sistema/recursos e concorrência Arquitetura Execução • Visão do Processo (via Diagramas de Colaboração) • Foco: informa como se dará o comportamento do componente em tempo de execução, threads; como eles se comunicam; como os recursos físicos são alocados. Processo de construção de uma arquitetura: Objetivos • Criar uma arquitetura: – BOA, tecnicamente válida e bem documentada – CORRETA, satisfaz aos requisitos dos stakeholders – De SUCESSO, como as utilizadas na construção civil Processo de construção da arquitetura Conclusão • Uma arquitetura Boa, Correta e de Sucesso: – Não aparece “do nada” – É necessário: • Planejar (tempo!) • Documentar e seguir avaliando (não é algo estático) • As vezes, joga-se fora e recomeça do zero • Existe uma contribuição a ser dada por cada um de nós Referências • http://www.bredemeyer.com • http://www.ewita.com • http://www.extra.research.philips.com/natl ab/sysarch/index.html