A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fernando Castor e Paulo Borba Decisões/Escolhas de Projeto.

Apresentações semelhantes


Apresentação em tema: "Fernando Castor e Paulo Borba Decisões/Escolhas de Projeto."— Transcrição da apresentação:

1 Fernando Castor e Paulo Borba Decisões/Escolhas de Projeto

2 Motivação A arquitetura deve mostrar como o sistema satisfará alguns dos seus requisitos A arquitetura deve mostrar como o sistema satisfará alguns dos seus requisitos Diferentes arquiteturas terão diferentes características Diferentes arquiteturas terão diferentes características Compromissos são sempre necessários Compromissos são sempre necessários A arquitetura é, basicamente, um conjunto de escolhas de projeto A arquitetura é, basicamente, um conjunto de escolhas de projeto o Negligenciadas por desenvolvedores pouco experientes Tópico tratado nesta aula Tópico tratado nesta aula

3 Projeto ( design* ) 1. a plan or drawing produced to show the look and function or workings of a building, garment, or other object before it is built or made; 2. purpose, planning, or intention that exists or is thought to exist behind an action, fact, or material object : the appearance of design in the universe. * Fonte: New Oxford American Dictionary, 2 a ed.

4 Estudo de Caso: JaTS (Java Transformation System) Sistema de transformação para programas Java Sistema de transformação para programas Java Objetivos principais: geração de código e aplicação de refatorações Objetivos principais: geração de código e aplicação de refatorações o Bem mais sofisticadas que search-and-replace Transformações escritas em uma linguagem própria Transformações escritas em uma linguagem própria o Sintaxe similar a Java Disponível para download (versão antiga): Disponível para download (versão antiga): o http://www.cin.ufpe.br/~jats/

5 Um Exemplo de Transformação em JaTS class C extends SC { private int f1; private int f1;} Lado Esquerdo class #C extends #SC { #FD:FieldDeclaration; #FD:FieldDeclaration;} Lado Direito class #C extends #SC { private [[#FD:getType()]] f2; private [[#FD:getType()]] f2; #FD:FieldDeclaration; #FD:FieldDeclaration;} class C extends SC { private int f1; private int f1; private int f2; private int f2;} resulta em

6 Interface Gráfica do JaTS (beeeeem antiga )

7 Como vocês construiriam esse sistema?

8 Alguns Requisitos Capacidade de transformar programas Java Capacidade de transformar programas Java o Ler os programas o Representá-los de uma forma fácil de transformar o Ler as transformações o Casar os lados esquerdos das transformações com os programas fonte o Substituir variáveis no lado direito das transformações o Executar alguns elementos das transformações o Aplicar condicionalmente partes de uma transformação o Gerar o código Java resultante Transformações podem ter pré-condições Transformações podem ter pré-condições

9 Mais Requisitos Separação entre GUI e lógica da aplicação Separação entre GUI e lógica da aplicação o Organização da equipe de desenvolvimento Modularidade Modularidade o Construção incremental do backend o Facilidade de manutenção Escrito em Java Escrito em Java o Pode ser visto como uma escolha de projeto

10 Por onde começar? Sistemas não-triviais levantam diversos problemas Sistemas não-triviais levantam diversos problemas o Decorrem dos requisitos o Requisitos frequentemente estão em conflito Diferentes soluções para cada problema resultam em diferentes sistemas Diferentes soluções para cada problema resultam em diferentes sistemas o Cada problema costuma ter inúmeras soluções possíveis o Cada uma com vários prós e contras

11 Espaço de Projeto ( Design Space ) Sistemas de software costumam ser muito complexos! Sistemas de software costumam ser muito complexos! Fonte de figura: http://www.tolweb.org/tree/home.pages/AttachImageToToL.html

12 Escolhas (ou Decisões) de Projeto As escolhas que o projetista faz, para que o sistema final satisfaça seus requisitos As escolhas que o projetista faz, para que o sistema final satisfaça seus requisitos o Entre as várias soluções possíveis para o problema Sempre envolvem compromissos Sempre envolvem compromissos No projeto arquitetural, é fundamental identificar tais escolhas No projeto arquitetural, é fundamental identificar tais escolhas o Muitas vezes são feitas implicitamente o Vocês percebem algum exemplo em seus projetos?

13 Escolhas de Projeto são Importantes! Algumas podem ser feitas com uma análise superficial Algumas podem ser feitas com uma análise superficial o Devido a questões organizacionais o Pela experiência do arquiteto o Por serem simples, mesmo Outras exigem estudos mais cuidadosos Outras exigem estudos mais cuidadosos o Avaliação detalhada das opções existentes o Uma nova solução pode ser necessária

14 Algumas Escolhas de Projeto no JaTS

15 Como processar programas em Java e JaTS? 1. Analisador sintático construído manualmente o desempenho o difícil de construir (muito overhead inicial) 2. Reaproveitar um analisador pré-existente o pouquíssimo trabalho inicial, desempenho o pouca flexibilidade para modificar a linguagem, sistema muito complexo 3. Usar um gerador de analisadores sintáticos o trabalho inicial equilibrado, fácil de estender o necessidade de especificar gramática, desempenho Solução escolhida: 3 (JavaCC) Solução escolhida: 3 (JavaCC)

16 Como construir a árvore sintática ? Desempenho não era um requisito fundamental para o JaTS Desempenho não era um requisito fundamental para o JaTS Mas a primeira versão funcional do sistema era muito lenta Mas a primeira versão funcional do sistema era muito lenta Gargalo: processamento de construções executáveis Gargalo: processamento de construções executáveis o Árvore sintática de exressões muito ineficiente o Culpa do jjTree

17 Como construir a árvore sintática? 1. Manualmente o eficiente o trabalhoso 2. Usando o jjTree (parte do JavaCC) o trivial o muito ineficiente 3. Usando as classes do jjTree mas construindo as classes manualmente o eficiente o bom compromisso, em termos de esforço Solução escolhida: 3 Solução escolhida: 3

18 Como guardar informações nos nós da árvore sintática? Exigiu um estudo cuidadoso Exigiu um estudo cuidadoso o Estudo de caso comparando as duas abordagens consideradas o Aproximadamente 20h o Relatório com 10 páginas o Altíssimo impacto na arquitetura do sistema Resultado foi de encontro à minha intuição Resultado foi de encontro à minha intuição o Não-óbvio para alguém pouco experiente

19 Como guardar informações nos nós da árvore sintática? 1. jjTree já guarda (como uma lista de tokens) o Tempo de desenvolvimento encurtado o Fácil de fazer pretty-printing o Muito difícil de fazer o casamento  Difícil acesso aos elementos específicos de cada construção da linguagem o Muito difícil de fazer a substituição 2. Anotar as informações manualmente nos nós o Mais fácil fazer transformações  Nós bem-estruturados o Bem mais trabalhoso inicialmente

20 Onde implementar as operações que manipulam a árvore sintática? Palavra-chave: “implementar” Palavra-chave: “implementar” Ainda assim, importante para a arquitetura Ainda assim, importante para a arquitetura o Afeta a organização interna do motor de transformação Operações percorrem a árvore sintática de maneiras diferentes Operações percorrem a árvore sintática de maneiras diferentes o Casamento: top-down, percorre pares de árvores sintáticas o Substituição, execução: bottom up, uma árvore To visit or not to visit? To visit or not to visit?

21 Onde implementar as operações que manipulam a árvore sintática? Abordagem/ Quesito Inclusão de novas construções Inclusão de novas operações Código responsável pelo percurso Tipos de Visitors Visitors (percurso feito pelo Visitor) Fácil (depende do núm. de Visitors) Muito fácil Duplicado (várias vezes) 2 (casamento e o resto) Visitors (percurso feito pelas classes) Fácil (depende do núm. de Visitors) Muito fácil Duas políticas (casamento e o resto) 2 (casamento e o resto) Operações nas classes (que implementam as construções Muito fácil Difícil (depende do número de classes) Duplicado (várias vezes) 0 (todas as operações nas classes) Abordagem híbrida Fácil (depende do núm. de Visitors) Em geral, muito fácil Duas políticas (casamento e o resto) 1 (casamento nas classes)

22 Onde implementar as operações que manipulam a árvore sintática? Abordagem/ Quesito Inclusão de novas construções Inclusão de novas operações Código responsável pelo percurso Tipos de Visitors Visitors (percurso feito pelo Visitor) Fácil (depende do núm. de Visitors) Muito fácil Duplicado (várias vezes) 2 (casamento e o resto) Visitors (percurso feito pelas classes) Fácil (depende do núm. de Visitors) Muito fácil Duas políticas (casamento e o resto) 2 (casamento e o resto) Operações nas classes (que implementam as construções Muito fácil Difícil (depende do número de classes) Duplicado (várias vezes) 0 (todas as operações nas classes) Abordagem híbrida Fácil (depende do núm. de Visitors) Em geral, muito fácil Duas políticas (casamento e o resto) 1 (casamento nas classes)

23 Espaço de Projeto do JaTS (resumido)

24 Como documentar escolhas de projeto Texto Texto o Preferencialmente estruturado Tabelas Tabelas o Várias opções, critérios bem definidos o Complementam descrições textuais Algumas notações gráficas Algumas notações gráficas o Tópico de pesquisa

25 Modelo para documentar decisões de projeto 1.Decisão (sumário da decisão) 2.Restrições (requisitos, orçamento, exigências de stakeholders, linguagens, tecnologias, componentes pré- existentes) 3.Alternativas (outras opções consideradas) 4.Efeitos (impactos da decisão sobre os requisitos, as partes interessadas) 5.Evidência (a decisão realmente foi boa?)

26 Escopo das justificativas para as escolhas de projeto Cada visão Cada visão Cada interface Cada interface Escolhas que afetam a arquitetura de maneira mais ampla Escolhas que afetam a arquitetura de maneira mais ampla module HelloApp { interface HelloCallback { void callback(in string message); }; interface Hello { string sayHello(in HelloCallback objRef, in string message); }; }

27 Quando é benéfico justificar decisões? (nem sempre, certamente) Grande esforço para avaliar as opções existentes Grande esforço para avaliar as opções existentes Decisão crítica para satisfazer os requisitos Decisão crítica para satisfazer os requisitos Escolha não-óbvia Escolha não-óbvia o difícil de compreender sem informação adicional o confusa para novos membros da equipe Impacto em várias partes do sistema Impacto em várias partes do sistema

28 Obrigado! Dúvidas e comentários: castor@cin.ufpe.br phmb@cin.ufpe.br


Carregar ppt "Fernando Castor e Paulo Borba Decisões/Escolhas de Projeto."

Apresentações semelhantes


Anúncios Google