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

Slides:



Advertisements
Apresentações semelhantes
Desenvolvimento de Sistemas
Advertisements

Objetivos do Capítulo Utilizar o processo de desenvolvimento de sistemas delineado neste capítulo e o modelo de componentes de SI, do Capítulo 1, como.
Rational Unified Process
Técnicas de Teste de Software
UNIVERSIDADE ESTADUAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO ENGENHARIA DE SOFTWARE Métricas de Software Prof.ª Adriana dos Santos Caparróz Carvalho.
Prototipação de Software
Projeto conceitual Mostra ao cliente exatamente o que o sistema fará
Engenharia de Software
FACULDADE DOS GUARARAPES
RUP - Rational Unified Process
Padrão de Projeto Interpreter
Projeto de Sistemas de Software
Faculdade de Ciências Sociais e Aplicadas de Petrolina – FACAPE
Adélia Barros Requisitos Adélia Barros
SISTEMA DE INFORMAÇÕES DESENVOLVIMENTO DE SISTEMAS
Análise Léxica Supondo o trecho de programa abaixo:
Análise e Projeto de Sistemas
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Visão Geral do Desenvolvimento de Sistemas e Papéis no Desenvolvimento de Software Marcely Dias
Integração de Produto Marleson Filipe.
Princípios e Conceitos de Software(v2)
Principios e Conceitos de Projeto
Engenharia de Software
Uma visão geral Grupo: Alexandre Henrique Vieira Soares
Departamento de Estatística e Informática
Aula prática - análise contextual
Padrão de Projeto Visitor
Projeto de Sistemas de Software
Fase de Elaboração: Fluxo de Requisitos
Desenvolvimento de Sistemas Orientados a Aspectos
Análise e Projeto de Sistemas
Metolodogia de Desenvolvimento de Data Warehouse
Engenharia de Requisitos
Análise e Desenvolvimento de Software
Aspect Oriented Programming (AOP)
Professor: Márcio Amador
PSBD II Projeto de Sistemas de Banco de Dados II
Programação Orientada à Objetos
Capítulo II Gramáticas e Linguagens
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Sistema de Transformação para a linguagem OO1 Adeline Sousa Gustavo Santos.
Princípios da Programação em Prolog
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
ANÁLISE ESTRUTURADA DE SISTEMAS
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
Introdução a Banco de Dados Aula 04
RUP - Cap. 4 – Processo Centrado na Arquitetura
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
Requisitos de Software
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
Gestão de projetos de Software GTI-16
Linguagem de Transformação para a linguagem OO1 Adeline Sousa Gustavo Santos.
Padrões de projeto M.Sc. Sílvio Bacalá Jr..
Prototipação de Software
Engenharia de Software
Metodologia para o Desenvolvimento de Sistemas de Informação
Introdução à modelagem orientada a objetos
Sistemas de Informação
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS Aula /08/2012 Professor Leomir J. Borba-
Sintaxe de uma Linguagem
Profa. Reane Franco Goulart. É uma representação de engenharia de algo que vai ser construído. Para a engenharia de software o projeto foca em quatro.
PADROES DE PROJETO PROF. OSIEL MARLON. PADRÕES DE PROJETO INTRODUÇÃO Padrões de projeto têm emergido como uma das mais promissoras abordagens para a melhoria.
Aula 02 de Eng. de Requisitos
Engenharia de Requisitos Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Agosto de 2012.
APSI II Análise e Projeto de Sistemas de Banco de Dados II.
QUALIDADE DE SOFTWARE Prof. Carlos Augusto da Costa Carvalho.
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
Mauricio Barbosa e Castro.  A construção de um produto multimídia se faz através de um projeto.  O escopo e a complexidade de um projeto de multimídia.
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
O Processo Unificado (PU). 2 O que é o Processo Unificado (PU)? É um modelo de processo de software baseado no modelo incremental, visando a construção.
Transcrição da apresentação:

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

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

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.

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

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

Interface Gráfica do JaTS (beeeeem antiga )

Como vocês construiriam esse sistema?

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

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

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

Espaço de Projeto ( Design Space ) Sistemas de software costumam ser muito complexos! Sistemas de software costumam ser muito complexos! Fonte de figura:

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?

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

Algumas Escolhas de Projeto no JaTS

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)

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

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

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

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

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?

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)

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)

Espaço de Projeto do JaTS (resumido)

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

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?)

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); }; }

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

Obrigado! Dúvidas e comentários: