Agenda do Curso. Reuso de Software. Agenda da Aula. Tipos de Reuso. Vantagens de Reuso. Reuso de Software. Eduardo Figueiredo

Documentos relacionados
Agenda da Aula. Reuso de Software. Tipos de Reuso. Potenciais Problemas. Vantagens de Reuso. Introdução a Reuso de Software

Técnicas para Reutilização de Software

Técnicas para Reutilização de Software Prof. Eduardo Figueiredo Estagiário: Johnatan Oliveira

Reutilização de Software

Reuso de Software Aula Maio 2012

Técnicas de Reutilização. Reutilização em Programação Orientada a Objetos. Considere três classes... Reuso de Classes.

Histórico: Linha de Produção

CBSE. Independência e Padronização. Características da CBSE. Fundamentos da CBSE. Middleware e Processo 22/05/2013

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Agenda da Aula. Arquitetura de Software e Padrões Arquiteturais. Elementos de um Padrão. Arquitetura de Software. Arquitetura de Software

Perguntas da Aula 2. Respostas da Pergunta 2. Respostas da Pergunta 1. Respostas da Pergunta 4. Respostas da Pergunta 3. Processos de Software

Processos de Software

Processos de Software. O que é modelo de processo? Vantagens. Modelos de Processo Gerais. O que é um processo de software?

DESENVOLVIMENTO BASEADO EM COMPONENTES

ENGENHARIA DE SOFTWARE. Aula 17 Reuso de software

Reúso de Software. Adaptado de. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 18 Slide by Pearson Education

Model Driven Development (MDD)

Agenda Atual do Curso. Desenvolvimento Dirigido por Modelos (MDD) Abordagem MDD. Agenda da Aula. Abordagem MDD. Manutenção e Geração

Model Driven Development (MDD)

Tópicos da Aula. Desenvolvimento Dirigido por Modelos (MDD) Reusar cada vez mais... Reusar cada vez mais... O que é modelagem? Reuso: Código x Modelos

SOFTWARE REUSE. Ian Sommerville, 8º edição Capítulo 18. Aula de Luiz Eduardo Guarino de Vasconcelos

Engenharia de Software. Projeto de Arquitetura

15/04/2013. Pensar Orientado a Objetos. Projeto Orientado a Objetos. Características de Objetos. Classe de Objetos. Comunicação entre Objetos

Frameworks. Viviane Torres da Silva

Introdução a Engenharia de Software

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software

ARCHITECTURAL DESIGN. Ian Sommerville, 8º edição Capítulo 11 Aula de Luiz Eduardo Guarino de Vasconcelos

Desenvolvimento de Software Baseado em Componentes. Paulo C. Masiero

Por que é importante?

Tópicos da Aula. O que é anunciado. Falha de Comunicação no Desenvolvimento de Software. Engenharia de Software: Conceitos Fundamentais

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

Fábricas de Software. Processos de Software. Fábricas de Software. Fábricas de Software 17/08/2010. Jorge Dias

Requisitos de Software

Estilos Arquiteturais

Processos de Software by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Frameworks. SSC-526 Análise e Projeto Orientados a Objeto Profa. Dra. Elisa Yumi Nakagawa 2º semestre de 2013

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Engenharia de Software II

Manutenção Leitura: Sommerville; Pressman

Estimativa de Esforço. Estimativas de Software. Subjetividade da Estimativa. Incerteza de Estimativa. Técnicas de Estimativas

UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA. Sistemas Distribuídos

Processos de software

Tópicos da Aula. A Linguagem UML. A Linguagem UML. De onde surgiu? Fundadores da UML. Introdução à UML e Diagrama de Casos de Uso.

REUSO E REUSABILIDADE

DCC / ICEx / UFMG. O Modelo CMMI. Eduardo Figueiredo.

3 Uma Arquitetura Distribuída via WEB

Engenharia de Requisitos

Professor Emiliano S. Monteiro

Processos de Software

Análise e Projeto de Software

Engenharia de Software Orientada a Serviços

Introdução à Análise e Projeto de Sistemas

132 6 Conclusão 6.1. Contribuições da Tese

Histórico: Linha de Produção. Linha de Produtos de Software. Reuso vs. Customização. Mercado Competitivo. Linha de Produtos de Software

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Disciplina Medições e Qualidade de Software. Tópicos da Disciplina. Método de Avaliação. Qualidade de Software.

Paradigmas de Software

Tópicos da Aula. Diretrizes Gerais. Trabalho Prático (TP) Pontuação do TP. Tema do Trabalho. Projeto de Software Diagrama de Classes

Leitura: Cap : Sommerville; cap20: Pressman

Aula 1: Apresentação. Revisão para Prova 1. Aula 2: Motivação. O que é software? Eng. de Software em Camadas. O que é Engenharia de Software?

Arquitetura de Software visão emergente

Engenharia de Requisitos

QUALIDADE DE SOFTWARE

Experiência de Implantação de um Processo de Desenvolvimento de Software no Banco Central do Brasil

3 Arquitetura para a Coordenação e a Composição de Artefatos de Software

Tarefas de Gerenciamento de Configuração

15/03/2018. Professor Ariel da Silva Dias Modelos de Processo de Software

Requisitos de sistemas

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

PMR3507 Fábrica digital

Resumo de TCC: MAGIC: Um framework para jogos de cartas. Ademir Coelho

A Linguagem UML. A Linguagem UML. De onde surgiu? Fundadores da UML. História da UML. O que é modelagem?

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA ENGENHARIA DE SOFTWARE

Apresentação do Capítulo 4 MDA (Model-Driven Archtecture) ALUNO: DOMENICO SCHETTINI FILHO NÚMERO USP:

ClassGenerator - Desenvolvendo aplicações em PHP com qualidade e eficiência.

Metamodelos para Banco de Dados. Carlos Julian Menezes Araújo Prof. Dr. Robson do Nascimento Fidalgo

Princípios da Engenharia de Software aula 03

Engenharia de Software. Prof. Raquel Silveira

Atividades de Desenvolvimento. Desenvolvimento de Software. Especificação de Requisitos. Atividades de Desenvolvimento. Especificação de Requisitos

Principais conceitos de CORBA

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Processo de Desenvolvimento. Edjandir Corrêa Costa

Desenvolvimento de uma Linha de Produto de Software para Módulos de Aprendizagem Interativa

Visões Arquiteturais. Visões Arquiteturais

MODELOS DE PROCESSOS (PARTE 2)

Engenharia de Software

ENGENHARIA DE SOFTWARE. Aula 03 Processos de Software

SOFTWARE REQUIREMENTS

RUP Unified Process. Profª Jocelma Rios

SEMINÁRIOS INTEGRADOS EM SISTEMAS DE INFORMAÇÃO. Luiz Leão

Análise de Sistemas. Aula 5

Engenharia de Software Aula 2.1 Introdução à Engenharia de Requisitos. Prof. Bruno Moreno

ALUNO: RONI FABIO BANASZEWSKI

Desenvolvimento ágil de software

Engenharia Reversa e Reengenharia. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

Prof. Esp. Fabiano Taguchi

Problema: Problema: FRAMEWORK. Problema: Motivação. O que é um framework

Requisitos de Software

Transcrição:

Engenharia de Software Aula 21 Agenda do Curso Reuso de Software Aula 23 Data 28/05 Assunto Desenv. Orientado a Aspectos 24 30/05 Laboratório 25 04/06 Apresentações do TP (1) Eduardo Figueiredo 26 06/06 Apresentações do TP (2) http://www.dcc.ufmg.br/~figueiredo dcc603@gmail.com 27??/06 Revisão para Prova 2 21 Maio 2012 28??/06 Prova 2 (P2) Agenda da Aula Introdução a Reuso de Software Abordagens de Reuso Bibliotecas Padrões de Projeto Frameworks Reuso de Modelos Reuso de Componentes Linhas de Produtos de Software Reuso de Software Abordagem de desenvolvimento com o objetivo de maximizar o uso de software pré-existente Nos últimos 20 anos, muitas técnicas foram desenvolvidas para apoiar o reuso Bibliotecas (API) Classes de objetos Componentes, etc. Tipos de Reuso Reuso de Objetos e Funções Tipo mais comum de reuso Ocorre nos últimos 40 anos Reuso de Componentes Reuso de média granularidade. Exemplo, componente arquitetural ou sub-sistema Reuso de Sistema Um sistema pode ser reusado por incorporação à outro sistema Pode ser necessário customização Vantagens de Reuso Redução de tempo e custos O sistema pode ser entregue em menor prazo, que reduz os custos Maior confiabilidade do produto O software reusado já foi testado antes Menor risco no processo O custo de software existente já é conhecido Adequação aos padrões Alguns padrões (exemplo, GUI) podem ser implementados como componentes reusáveis

Potenciais Problemas Planejamento para Reuso Custo de Manutenção Componentes reusados podem se tornar incompatíveis em versões futuras Falta de Apoio de Ferramenta Ambientes de desenvolvimento podem não estar preparados para reuso É caro manter um biblioteca para reuso É difícil encontrar e entender o software que se pretende reusar O reuso não ocorre por acaso Ele deve ser planejado e incentivado em toda a organização Muitas empresas desenvolvem sistemas de um mesmo domínio Surgem situações potenciais para o reuso Fatores do Planejamento Cronograma e Ciclo de Vida Alguns fatores a considerar no planejamento de reuso Cronograma de desenvolvimento Ciclo de vida do software Conhecimento e experiência da equipe Domínio da aplicação Cronograma de Desenvolvimento Se o cronograma de entrega é apertado, reusar pode agilizar a entrega do produto Ciclo de Vida do Software Se o sistema terá vida longa e deve passar por muitas manutenções, reuso deve ser evitado Componentes de terceiros podem ser de difícil manutenção (ou de código proprietário) Equipe e Domínio Abordagens de Reuso Conhecimento e experiência da equipe na abordagem de reuso Muitas abordagens de reuso são difíceis de serem usadas e requerem experiência Domínio da aplicação Em alguns domínios, é fácil encontrar componentes e bibliotecas para reuso Em outros domínios, é mais complicado Brevemente nesta aula Nas próximas aulas

Bibliotecas de Software Biblioteca e Framework Bibliotecas implementam serviços que podem ser usados por programas É um forma bem comum de reuso Disponibiliza funcionalidades comuns a diferentes tipos de sistemas Converter informação entre formatos conhecidos (e.g., string para inteiro) Acesso a recursos, arquivos, BD, etc. Tipos abstratos de dados: fila, pilha, lista... Uso de Biblioteca em Java Framework import java.util.vector; public class Customer { String name; Vector phonenumbers = new Vector(); void removephonenumber(string c){ phonenumbers.removeelement(c); } void addphonenumber(string c){ phonenumbers.addelement(c); }... } Frameworks são aplicações incompletas São formados por interfaces, classes abstratas e classes concretas (OO) O conjunto de classes e interfaces formam uma estrutura genérica Um sistema é implementado pela adição de componentes para preencher partes do projeto Por exemplo, pela implementação das classes abstratas do framework Tipos de Frameworks Frameworks de infra-estrutura Apóiam a criação de infra-estruturas de sistemas, tais como comunicações, interfaces de usuário e compiladores Frameworks de integração Apóiam a comunicação e a troca de informações de componentes Frameworks de aplicações Apóiam o desenvolvimento de um tipo de aplicações (e.g., aplicações Web) Extensão de Frameworks Frameworks são entidades grandes que devem ser estendidas para reuso Exemplos de extensão Adição de classes concretas que implementam métodos abstratos Adição (sobrescrita) de métodos que implementam comportamento padrão Adição de arquivos de configuração (XML)

Principal Problema Framework são uma entidade complexa Leva um longo tempo para entendêlo e usá-lo efetivamente O desenvolvedor pode querer apenas uma funcionalidade simples Padrão de Projeto e Padrão de Arquitetura Padrões de Projeto Um padrão é uma descrição do problema e a essência da sua solução Documenta boas soluções para problemas recorrentes Permite o reuso de conhecimento anterior documentados em boas práticas Deve ser suficientemente abstrato para ser reusado em aplicações diferentes Elementos de um Padrão Nome Um identificador significativo para o padrão Descrição do problema Descrição da solução Um template de solução que pode ser instanciado em maneiras diferentes Consequências Os resultados e compromissos de aplicação do padrão Exemplo de Problema Padrão Obsever Padrão Observer Nome Observer Descrição do problema Separa o objeto de sua forma de apresentação Descrição da solução (próximo slide) Consequências Otimizações para melhorar a atualização da apresentação

Solução do Observer Padrões Arquiteturais Padrões arquiteturais expressam formas de organizar a estrutura fundamental do sistema Permitem a construção de uma arquitetura aderente a certas propriedades O conhecimento de padrões arquiteturais pode ajudar na definição da estrutura macro do sistema Arquitetura em Camadas Organiza o sistema em um conjunto de camadas Cada camada oferece um conjunto de serviços Exemplo 1: Protocolos OSI Modelo de camadas para sistemas de comunicação Uma camada somente Solicita serviços da camada inferior Fornece serviços para a camada superior Exemplo 2: Três Camadas Camada de Apresentação Reuso de Componentes Camada de Negócios Camada de Dados

CBSE Engenharia de Software Baseada em Componentes Reusar e integrar componentes pouco acoplados Padrões devem ser seguidos para facilitar a integração Componentes devem ser completamente especificados pelas suas interfaces O Processo CBSE Modelo de processo orientado ao reuso Baseia-se na existência de um número significativo de componentes reusáveis O processo se concentra na integração dos componentes Especificação de Requisitos Análise de Componentes Modificação dos Requisitos Desenvolvimento e Integração Projeto do Sistema com Reuso Validação do Sistema Alinhar componentes aos requisitos Análise de Componentes Dada uma especificação, encontrar componentes que a atendam Modificação dos Requisitos Se possível, os requisitos são adaptados aos componentes existentes Integração dos Componentes Projeto do Sistema com Reuso Se necessário, projeta-se novos componentes reusáveis Desenvolvimento e Integração Desenvolvimento de novos componentes Integração de todos os componentes Especificação de Requisitos Análise de Componentes Desenvolvimento e Integração Validação do Sistema Especificação de Requisitos Análise de Componentes Desenvolvimento e Integração Validação do Sistema Modificação dos Requisitos Projeto do Sistema com Reuso Modificação dos Requisitos Projeto do Sistema com Reuso Características de Componentes Padronização Devem seguir um padrão para facilitar integração Independência Devem ser auto suficientes com uma interface mínima Substituível Devem ser pensados para plugar ou remover Bem documentado Para permitir reuso efetivo, devem ter boa documentação Componentes x Objetos Componentes são geralmente implementados por uma linguagem OO Mas, componentes e objetos não são a mesma coisa Componentes estão prontos para serem implantados Componentes não definem tipos Mesmo desenvolvidos em linguagens diferentes, componentes são integráveis Componentes são padronizados para integração

Notação de Componentes << interfaces provedoras >> Componente << interfaces requeridas >> Uma caixa com o nome do componente Definem dois tipos de interfaces Interfaces provedoras Interfaces requeridas Existem várias implementações para os modelos de componentes CORBA da OMG, Enterprise Java Beans da Oracle, COM+ da Microsoft, etc. Vantagens Redução da quantidade de software a ser desenvolvido Redução dos custos e dos riscos Entrega mais rápida do produto ao cliente Potenciais Problemas Pode-se desenvolver um produto que não atenda aos requisitos do cliente Pode ser mais difícil evoluir os sistemas Componentes de terceiros A gerência de versões dos componentes pode ser complexa Reuso de Modelos e Geração de Código Motivação Solução (MDD) O reuso no nível de código é geralmente difícil Envolve vários detalhes específicos da solução ou tecnologia adotada Elevar o nível de abstração O reuso passa ao nível de modelos Reuso de código -> Reuso de modelos Pelo uso de geradores, o programa (código) é automaticamente gerado

Modelos x Código Modelos têm vida útil mais longa Modelos facilitam a comunicação entre desenvolvedores (e clientes) Modelos são geralmente produzidos, mesmo que não se use um abordagem de geração de código Desenvolvimento Dirigido por Modelos Propõe que o desenvolvimento, manutenção, evolução e reuso sejam feitos no nível de projeto Reuso de modelos ainda é uma técnica pouco adotada Se limitam a alguns domínios específicos ou em centros de pesquisa Abordagem MDD Abordagem MDD Modelos Executáveis Código de Alto Nível Código de Baixo Nível Compilador de Modelos Compilador de Código Os modelos são independentes de software Assim como, código de alto nível é independente de hardware Modelos Executáveis Código de Alto Nível Código de Baixo Nível Compilador de Modelos Compilador de Código Modelos podem ser compilados para várias linguagens de programação Modelos podem ser parcialmente ou totalmente reusados em diferentes contextos O Processo MDD Selecionar um modelo existente Recortar as partes do modelo que interessam Pode ser necessário projetar novos modelos ou adaptar os modelos existentes Integrar as partes selecionadas ao modelo do sistema Selecionar uma tecnologia de implementação Descrever (ou reusar) o mapeamento dos modelos para a implementação Gerar o sistema Potenciais Problemas Imaturidade do desenvolvimento dirigido por modelos Falta de suporte de ferramentas e ambientes de desenvolvimento Modelos são vistos como extras Código seria o principal Desenvolvedores são resistentes Não gostam de brincar com figuras Temem por seus empregos como programadores

Linha de Produtos Linhas de Produtos de Software Conjunto de aplicações definidas sobre uma arquitetura comum e que compartilham componentes Criada a partir de várias aplicações desenvolvidas sobre o mesmo domínio Uma forma efetiva de reuso em larga escala Usa outras técnicas de reuso Frameworks, componentes, etc. Extração da Linha A extração de uma linha de produtos geralmente ocorre em etapas 1. Cria uma aplicação 2. Cria outra aplicação no mesmo domínio 3. Reusa algo da primeira aplicação na segunda 4. Cria uma terceira aplicação e reusa... e assim por diante Processo de Desenvolvimento 1. Levantar os requisitos dos usuários 2. Escolher elementos da linha de produtos que atendem de forma aproximada os requisitos 3. Negociar os requisitos com o cliente para minimizar alterações 4. Adaptar o sistema para atender todos os requisitos 5. Integrar o novo membro a família Cada nova aplicação é um novo membro da linha de produtos O Conceito de Característica Tipos de Características Característica é um propriedade importante e observável do sistema Uma característica tem um nome conciso Facilita a comunicação entre desenvolvedores Ex.: Visualizar fotos, ordenar fotos, Tamanho da tela, Logging, etc. Características mandatórias Aquelas que são encontradas em todos as aplicações da linha de produto Características variáveis Opcionais: uma aplicação pode ou não contê-las Alternativas: uma aplicação deve conter uma das alternativas

Exemplo de Linha de Produtos Características Mandatórias Todo produto deve permitir a visualização, adição, remoção e edição da legenda View, Add, Delete, Edit Label Características Opcionais Características Alternativas Os produtos não precisam conter a características opcionais Capture Photo, Sort by Views, etc. Os produtos devem considerar algum tamanho para a tela Bibliografia da Aula Ian Sommerville. Engenharia de Software, 9ª Edição. Pearson Education, 2011. Cap. 16 Reuso de Software Disciplina (Prevista para 2013-1) Reuso de Software Reuso de funções e bibliotecas Frameworks de aplicação Linhas de produtos de software Padrões de projeto e de arquitetura Desenvolvimento orientado a aspectos Programação orientada a características Desenvolvimento baseado em componentes Desenvolvimento dirigido por modelos