SlideShare uma empresa Scribd logo
CIn.ufpe.br
REfacTool
Ferramenta de refactoring para disciplinar anotações em Linhas de
Produto de Software
Aluno: Antonio Alves Correia
Orientador: Leopoldo Motta Teixeira
CIn.ufpe.br
Agenda
• Contextualização
• Motivação
• Objetivos
• Fundamentação Teórica
• Projeto
• Avaliação
• Conclusão
CIn.ufpe.br
Contextualização
CIn.ufpe.br
Contextualização
• No mercado de tecnologia atual empresas devem ser capazes de
produzir softwares com features variadas, levando em consideração
as necessidades dos clientes e sem superfaturar o preço de seus
produtos.
• Uma nova abordagem de reuso de software tem ganhado atenção
tanto pela indústria quanto pela academia, Linhas de Produtos de
Software ou LPS.
CIn.ufpe.br
Contextualização
• Grandes organizações e mesmo projetos menores e open source
têm usado a abordagem de sistemas configuráveis em suas linhas
de produto para o desenvolvimento de softwares complexos.
• Com a utilização do CPP para lidar com portabilidade e variabilidade
(SPENCER,1992) surgem alguns problemas, como a introdução de
anotações não disciplinadas (ou incompletas) no código, o que é
criticado por alguns estudos por dificultar manutenção, entendimento
e assim prejudicar a qualidade do código.
CIn.ufpe.br
Motivação
CIn.ufpe.br
Motivação
• Catálogo de refactorings para disciplinar anotações
– Aumentar a qualidade do código
– Ajuda na manutenção e desenvolvimento no geral
• Não se tem conhecimento de ferramentas de refatoração automática
para disciplinar anotações em LPS.
CIn.ufpe.br
Objetivos
CIn.ufpe.br
Objetivos
• Implementar uma ferramenta de refactoring para disciplinar
anotações em linhas de produto de software.
• Benchmark com casos de testes
• Comparar com ferramenta existente em projeto real.
CIn.ufpe.br
Fundamentação Teórica
CIn.ufpe.br
Linhas de Produto de Software
• Sistemas configuráveis
– Sistemas voltados ao desenvolvimento para composição por configurações ou
features. Como em Apel et al. (2013) Features são uma noção fundamental na
engenharia de software moderna, definidas como unidades incrementais de
funcionalidade.
• Variabilidade
– Variabilidade é a habilidade de derivar diferentes produtos de um conjunto
comum de artefatos (APEL et al., 2013, Chapter 3)
CIn.ufpe.br
Pré-processador C
• O Pré-Processador C ou CPP, é um pré-processador usado em
quase todos os projetos C e C++. Disponibiliza facilidades como
inclusão de arquivos com diretivas #include, geralmente para reuso
de arquivos .h ou headers, macros e compilação condicional
(KERNIGHAN; RITCHIE, 1988).
CIn.ufpe.br
Anotações
• Não disciplinadas x Disciplinadas
Fonte: MEDEIROS, F. et al. A Catalogue of Refactorings to Remove Incomplete Annotations.
CIn.ufpe.br
Catálogo de refatorações
• Refactoring 1 – else if wrappers
Fonte: MEDEIROS, F. et al. A Catalogue of Refactorings to Remove Incomplete Annotations.
CIn.ufpe.br
Catálogo de refatorações
• Refactoring 3 – case wrappers
Fonte: MEDEIROS, F. et al. A Catalogue of Refactorings to Remove Incomplete Annotations.
CIn.ufpe.br
Expressões Regulares
Uma Expressão Regular (ER) define um padrão de busca ou substituição de
strings. É um meio preciso de se fazer buscas em textos.
Exemplo de utilização em Python
CIn.ufpe.br
Projeto
CIn.ufpe.br
REfacTool
• Regular Expressions-based Refactoring Tool
CIn.ufpe.br
REfacTool
CIn.ufpe.br
REfacTool
CIn.ufpe.br
REfacTool
CIn.ufpe.br
REfacTool
CIn.ufpe.br
REfacTool
(.*)if ((.*?)){(.*?)}(n+t*?)#ifdef (.*?)(n+t*?)else if(.*?){(.*?)}(n+t*?)#endif(.*)
CIn.ufpe.br
REfacTool
CIn.ufpe.br
Avaliação
CIn.ufpe.br
Benchmark
• Benchmark com 26 casos de testes elaborados manualmente com
base em arquivos coletados na web.
CIn.ufpe.br
Benchmark
– Transformação do refactoring 3 realizada pela REfacTool.
CIn.ufpe.br
Benchmark
– Transformação do refactoring 3 realizada pela REfacTool.
CIn.ufpe.br
Benchmark
Tabela com comparação entre REfacTool (R) e log real (L).
CIn.ufpe.br
Benchmarck
• Diferença encontrada para o caso 3
CIn.ufpe.br
Comparação REfacTool x Colligens
CIn.ufpe.br
Conclusão
CIn.ufpe.br
Conclusão
• Principais contribuições
– Benchmark utilizando os casos de testes disponibilizados;
– Definição de ERs para identificar e, posteriormente, transformar código, com
base nos refactorings do catálogo Medeiros et al. (2014);
– REfacTool, com interface gráfica e por linha de código.
CIn.ufpe.br
Conclusão
• Trabalhos futuros
– Avaliação sistemática da ferramenta, comparando precisão, acurácia, e
desempenho com a ferramenta Colligens, aplicando a ferramenta em mais
projetos reais;
– Aperfeiçoar a implementação da ERs, para reconhecer mais parâmetros,
assim melhorando a precisão da ferramenta;
– Acoplar ferramenta para indentar código depois de transformado;
– Desenvolver padrões para identificar diretivas aninhadas;
– Destacar a linha do código de uma ocorrência de refactoring.

Mais conteúdo relacionado

Semelhante a REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linhas de produto de software (Apresentação)

Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de Software
Rafael Berto
 
Academia do programador
Academia do programadorAcademia do programador
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Adolfo Neto
 
Pipeconf no CoffeOps Campinas
Pipeconf no CoffeOps CampinasPipeconf no CoffeOps Campinas
Pipeconf no CoffeOps Campinas
Aécio Pires
 
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
Daniel Moraes
 
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
Erivan de Sena Ramos
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
Ismael
 
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
sbcars
 
Cake PHP
Cake PHPCake PHP
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
guestd37c23
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
Tiago Barros
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Fernando Geraldo Mantoan
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
Fabio Spanhol
 
Ponto de função
Ponto de funçãoPonto de função
Ponto de função
Eduardo Salinas
 
Ponto de função
Ponto de funçãoPonto de função
Ponto de função
Eduardo Salinas
 
Aula 1 pc - slides
Aula 1   pc - slidesAula 1   pc - slides
Aula 1 pc - slides
Elaine Cecília Gatto
 
[PARFOR 2017.1] ESW - Aula 01
[PARFOR 2017.1] ESW - Aula 01[PARFOR 2017.1] ESW - Aula 01
[PARFOR 2017.1] ESW - Aula 01
César França
 
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
Tarcísio Couto
 
Reutilização
ReutilizaçãoReutilização
Reutilização
emjorge
 
Mini Curso Avaliação de Linha de Produto de Software
Mini Curso Avaliação de Linha de Produto de SoftwareMini Curso Avaliação de Linha de Produto de Software
Mini Curso Avaliação de Linha de Produto de Software
Edson Oliveira Junior
 

Semelhante a REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linhas de produto de software (Apresentação) (20)

Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de Software
 
Academia do programador
Academia do programadorAcademia do programador
Academia do programador
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Pipeconf no CoffeOps Campinas
Pipeconf no CoffeOps CampinasPipeconf no CoffeOps Campinas
Pipeconf no CoffeOps Campinas
 
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
Palestra EPF (Eclispe Process Framework) Estudo Caso FliSoL Abr 09
 
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
Artigo Um Mapeamento Sistemático sobre Padrões de Software para Reengenharia ...
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
Desenvolvimento baseado em Componentes e Arquitetura de Linhas de Produto - P...
 
Cake PHP
Cake PHPCake PHP
Cake PHP
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Ponto de função
Ponto de funçãoPonto de função
Ponto de função
 
Ponto de função
Ponto de funçãoPonto de função
Ponto de função
 
Aula 1 pc - slides
Aula 1   pc - slidesAula 1   pc - slides
Aula 1 pc - slides
 
[PARFOR 2017.1] ESW - Aula 01
[PARFOR 2017.1] ESW - Aula 01[PARFOR 2017.1] ESW - Aula 01
[PARFOR 2017.1] ESW - Aula 01
 
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
BVCCoN-Tool - Uma Ferramenta para Apoiar uma Abordagem de Configuração de Pro...
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Mini Curso Avaliação de Linha de Produto de Software
Mini Curso Avaliação de Linha de Produto de SoftwareMini Curso Avaliação de Linha de Produto de Software
Mini Curso Avaliação de Linha de Produto de Software
 

REfacTool - Uma ferramenta de refactoring para disciplinar anotações em linhas de produto de software (Apresentação)

Notas do Editor

  1. Inicio a apresentação pela agenda. A seguir apresento a contextualização, a motivação e os objetivos deste trabalho. Partindo para fundamentação teórica, explicando melhor os conceitos para entendimento da proposta. Depois falarei sobre o projeto em si, seu desenvolvimento, uso e uma avaliação preliminar realizada. No final serão apresentadas as contribuições e falarei sobre trabalhos futuros.
  2. Inicio a apresentação pela agenda. A seguir apresento a contextualização, a motivação e os objetivos deste trabalho. Partindo para fundamentação teórica, explicando melhor os conceitos para entendimento da proposta. Depois falarei sobre o projeto em si, seu desenvolvimento, uso e uma avaliação preliminar realizada. No final serão apresentadas as contribuições e falarei sobre trabalhos futuros.
  3. No mercado de tecnologia atual empresas devem ser capazes de produzir softwares com features variadas, levando em consideração as necessidades dos clientes e sem superfaturar o preço de seus produtos. Com esse desafio cada vez mais empresas investem em políticas de reuso de código para evitar retrabalho e consequentemente o repasse desse custo para os preços finais. Uma nova abordagem de reuso de software tem ganhado atenção tanto pela indústria quanto pela academia, Linhas de Produtos de Software ou LPS.
  4. Grandes organizações e mesmo projetos menores e open source têm usado a abordagem de sistemas configuráveis em suas linhas de produto para o desenvolvimento de softwares complexos. Muitos desses softwares utillizam a linguagem C e suas diretivas de pré-processamento (com o uso do CPP ou Pré-Processador C). Com a utilização do CPP para lidar com portabilidade e variabilidade (SPENCER,1992) surgem alguns problemas, como a introdução de anotações não disciplinadas (ou incompletas) no código, o que é criticado por alguns estudos por dificultar manutenção, entendimento e assim prejudicar a qualidade do código
  5. Anotações disciplinadas são alinhadas com a estrutura do código fonte, envolvem blocos sintáticos completos.
  6. A maioria dos formalismos utiliza pelo menos três operações para construir ERs. A primeira é a alternância, uma barra vertical ’|’ separa alternativas como em (if|else|endif). A segunda é a concatenação, representada por ’ab’, onde ’a’ e ’b’ são também expressões regulares. Por fim, a operação de quantificação (ou repetição), quantificadores representam a quantidade de vezes que um caractere ou grupo pode ocorrer, por exemplo, a ER (ab*c), representa as cadeias “ac”, “abc”, “abbc”, ou seja, o quantificador ’*’ indica que o ’b’ pode ocorrer zero ou mais vezes.