13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution.

Slides:



Advertisements
Apresentações semelhantes
Manutenção em software Conceitos básicos
Advertisements

ENGENHARIA DE SOFTWARE Garantia de Qualidade de Software
Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
Rational Unified Process
Tipos de sistemas de Lehman
Engenharia de Software
Engenharia de Software
ISO/IEC – 6 Avaliação do Produto – Módulos de Avaliação
Engenharia de Software
Rational Unified Process(RUP)
Desenvolvimento ágil: eXtreme Programming vs SCRUM Tiago Rodrigues de Mello CCO-230 – ENGENHARIA DE SOFTWARE / 2010.
Engenharia de Software Professor Sandro de Paiva Carvalho.
Metodologia de Desenvolvimento de Software
Projeto Arquitetural de Software Orientado a Aspectos
Processos de Desenvolvimento de Software
Extreme Programming Walfredo Cirne Universidade Federal da Paraíba.
Processo Desenvolvimento de Software Tradicional
Engenharia Reversa É o processo de derivar as especificações lógicas dos componentes do sistema a partir de sua descrição física com auxílio de ferramentas.
TIPOS DE TESTES APLICÁVEIS E NÃO APLICÁVEIS AO PROJETO
RUP: Fluxo de Análise e Projeto
TSDD Teste de segurança durante o desenvolvimento.
Visão Geral do Desenvolvimento de Sistemas e Papéis no Desenvolvimento de Software Marcely Dias
Gerenciamento de Requisitos com Casos de Uso
Princípios e Conceitos de Software(v2)
Engenharia de Software
Engenharia de Software Respostas do Questionário 01
Métodos Ágeis Agile Modeling, ou AG
REDUNDÂNCIA POR SOFTWARE
Desafios do desenvolvimento de software
Fundamentos de Engenharia de SW
Programação Avançada Prof. Natalia Castro Fernandes
Avaliação do RUP como processo para desenvolvimento de software
Desenvolvimento de Sistemas Orientados a Aspectos
Análise e Projeto de Sistemas
Sistemas Distribuídos
Test Driven Development Nazareno Andrade Baseado no material do prof. Hyggo Almeida.
Fabíola Guerra Nakamura Vitor Alcântara Batista
Introduzindo Refatoramento a Metodologias Tradicionais Tiago Massoni Workshop de Artigos TAES3 19/08/2003.
Engenharia de Software
Desenvolvimento Rápido de Aplicação (RAD)
Gerência de Configuração - GC
Engenharia de Software
Professor: Márcio Amador
Introdução à Engenharia de Software
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Teste de Software Conceitos iniciais.
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.
RUP - Cap. 4 – Processo Centrado na Arquitetura
Automação de Testes de Software
Processos de Software.
João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG 1 Defesa de Estágio Análise automática de impacto causado por mudanças em sistemas de software.
Técnicas e Projeto de Sistemas
Fluxos secundários Só devem ser analisados e descritos após a descrição dos fluxos básicos. Fluxos alternativos situações especiais (desconto para um cliente)
Planejamento e Gerência de Projeto Plácido Antonio de Souza Neto
Desenvolvimento de Software Dirigido a Modelos
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE AULA 5
1 Padrões de Reengenharia Orientada a Objetos Nome: Gewerton J. Gomes da Cruz Silva Prof: Fabio Kon.
Métodos Ágeis e Programação Extrema (XP)
Engenharia de Software
Engenharia de Requisitos
Engenharia de Software
Qualidade de Produtos de Software
Gerenciamento de Configuração de Software
ISO9001:2000 para Software Professor: Alexandre Vasconcelos Equipe: Amanda Pimentel Börje Karlsson Danielly Karine Erika Pessoa Jorge Cavalcanti Jose Edson.
TÉCNICAS DE ESTIMATIVAS
QUALIDADE DE SOFTWARE Prof. Carlos Augusto da Costa Carvalho.
Processos de Software Ludimila Monjardim Casagrande 1º Semestre Desenvolvimento e Qualidade.
18/09/ /12/20082 Testes Baseados Em Modelo Diana Rúbia Paulo César Qualidade, Processos e Gestão de Software Alexandre Vasconcelos {drrr, pco,
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:

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution Using Clone Detection

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Roteiro Contextualização O Problema Refatoração Definição Refatoração e Evolução Processo Técnicas e Ferramentas Conclusão

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Contextualização Software precisa evoluir Modificações Adição de funcionalidades Melhoria na estrutura Adequação ao cliente

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG O Problema Complexidade aumenta Distância do design original Erosão do Design Perda de qualidade Custo com manutenção é alto

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG A Solução: Refatoração Restruturação Refatoração: “Processo de mudar um software orientado a objeto de uma maneira que não altere seu comportamento externo, mas melhore sua qualidade interna” Reduzir a complexidade do software aumentando de forma incremental sua qualidade

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG A Solução: Refatoração Relacionado à qualidade interna do software Evolution Critical Normalmente não é fruto de novas funcionalidades no código, mas está relacionado à previsão da adição de novas funcionalidades “Funciona, mas e quando eu precisar modificar? Vai ser simples?”

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração e Evolução Melhorar aspectos como: Modularidade Reusabilidade Complexidade Manutenabilidade Refatorar para facilitar futuras adaptações e extensões Coverter código legado em um código modularizado e extensível

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração Primitive Refactoring MoveMethod RenameMethod AddClass ExtractMethod Composite Refactoring MoveMethodsToVisitor

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Identificar qual parte do código deve ser refatorada Determinar quais refactorings devem ser aplicados Garantir a preservação do comportamento Avaliar o efeito da refatoração nas características que indicam qualidade no software Manter a consistência do código com os outros artefatos

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Uso de métricas para identificar quais partes do software precisam ser refatoradas Abordagens dinâmicas e estáticas Testes Detecção Bad Semells Código Duplicado God Class

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Por definição, refatoração não pode alterar o comportamento do software O que é comportamento? Para um mesmo conjunto de valores de entrada, a saída deve ser a mesma depois da refatoração Desempenho depende do domínio Embarcados Sistemas de vendas web

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Avaliar o efeito da refatoração na qualidade do software Demeyer [1] avaliou que, ao trocar condições lógicas por polimorfismo, o software ganha em desempenho Compiladores otimizam chamadas polimórficas

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Manter a consistência com outros artefatos Documentação do design Testes de unidade Documentação do código e de funcionalidades

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: O Processo Design Wizard Abordagem baseada em testes que permite verificar se o design de um determinado programa está em conformidade com o design especificado Suporte à atividade de refatoração

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: Formalismos Uso de Asserções Pré-condições Devem ser válidas antes da refatoração Pós-condições Devem ser válidas depois da refatoração Invariantes Devem ser válidas antes e depois da refatoração

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: Uso de asserções Maneira verificável de assegurar que o comportamento de um método foi mantido depois de refatorado Exemplo: MoveMethod(print,ASCIIDoc,Printer) ‏ Pré-condições ASCIIDoc e Printer devem existir o método print deve existir em ASCIIDoc Não deve existir o método print em Printer

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração: Uso de asserções Pós-condições O método print deve existir em Printer O método print não deve existir em ASCIIDoc Invariantes ASCIIDoc e Printer devem existir antes de depois da refatoração

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Outros Formalismos Fatiamento de Programas Extrair todas as declarações que podem afetar um certo conjunto de variáveis Baseado em grafos de dependência Pode ser usado para verificar que uma refatoração preserva o comportamento de determinada porção do código

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Outros artefatos Refatoração não é somente aplicável a código Modelos de Design Esquemas de bancos de dados Arquitetura de Software Requisitos de Software Necessidade de manter todos sincronizados

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Ferramentas Ferramentas automatizam primitive refactorings IntelliJ Idea Eclipse JFactor XRefactory JBuilder CodeGuide

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Ferramentas Indepedência de linguagem Embora exista ferramentas de refatoração para Java, não existe para JAspect Confiabilidade Undo

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Refatoração e XP Pequenas iterações ao estilo: Codifica para passar nos testes Refatora Refatoração é um dos pilares de XP Refatoração + Testes = Aumento da qualidade e confiabilidade do código

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Conclusões Evolução implica em refatoração O uso de métricas e visualização é extremamente importante para a atividade de refatoração Análise de impacto também é uma das atividades que podem acompanhar a refatoração Refatoração não é exclusiva a código

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Reconstruction of Successful Software Evolution Using Clone Detection Heurística para reconstruir o processo evolutivo explorando técnicas de detecção de código duplicado Interesse em como as mudanças afetam o software ao longo do tempo Software Peleontology Heurist

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Visualização Procura por mudanças entre duas versões distintas de software Visualização em forma de matriz

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Visualização

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Conclusões Limitações Escrita As linhas devem ser idênticas para serem detectadas Escalabilidade da visualização Poucos dados Poucas conclusões

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Conclusões Usar o histórico de refatoração com intuito de entender a evolução do software pode ser interessante Detecção de outros tipos de refatoração Abordar a interpretação dos dados

13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Referências [1] S. Demeyer, “Maintainability versus Performance: What's the effect of introducing Polimorphism?” technical report, Lab. on Reeng., Universiteit Antwerpern, Belgium, 2002.