SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Does the Act of Refactoring 
Really Make Code Simpler? 
A Preliminary Study 
Francisco Zigmund Sokol, Maurício 
Finavaro Aniche, Marco Aurélio Gerosa 
francisco.sokol@usp.br, {aniche, gerosa}@ime.usp.br
Refatoração 
Pequenas mudanças no código para aprimorar a 
qualidade interna sem alterar as funcionalidades de 
um software. 
● Legibilidade? 
● Coesão? 
● Acoplamento? 
● Complexidade? 
○ Complexidade Ciclomática.
Exemplo - Complexidade 
Ciclomática 
CC = 4
Exemplo - Refatoração
Exemplo - Refatoração 
Extract method
Exemplo - Refatoração 
Extract method CC = 6 CC = 5
Objetivo 
A complexidade ciclomática reduz 
ao aplicar uma refatoração? 
Replicação do trabalho de Soetens e 
Demeyer (2010).
Trabalhos relacionados 
M. 
Alshayeb 
(2009) 
Adaptabilidade, 
manutenabilidade, 
legibilidade e 
testabilidade. 
Três projetos 
OS. 
Não apresenta 
melhoria 
significativa. 
Du Bois et 
al 
(2006) 
Legibilidade. Experimento 
controlado. 
Apresenta 
melhoria. 
Stroggylos 
e Spinellis 
(2007) 
Complexidade, coesão, 
acoplamento. 
Três projetos 
OS. 
Apresenta 
piora. 
Geppert et 
al (2005) 
Densidade de bugs e 
capacidade de 
mudança. 
Projeto da 
indústria. 
Apresenta 
melhoria.
Soetens e Demeyer 
Análise da evolução da Complexidade Ciclomática de 
~800 versões do projeto de código aberto PMD:
Soetens e Demeyer 
● Poucas refatorações removiam código duplicado. 
● Commits de refatoração junto com novas 
funcionalidades. 
● Mudanças simples como mover métodos e 
renomear variáveis.
Protocolo de replicação 
● 256 projetos Java da Apache. 
● Aproximadamente 500 mil commits. 
● Classificação de uma refatoração por meio da 
mensagem de commit. 
● Complexidade Ciclomática pré-calculada no 
MetricMiner (http://metricminer.org.br/).
Resultados
Resultados
Resultados
Resultados
Resultados
Análise qualitativa
Análise qualitativa 
● Muitos commits de refatoração adicionavam 
também novas funcionalidades - floss refactoring 
(Murphy-Hill et al 2010). 
● Commits grandes. 
● Melhorias principalmente em legibilidade.
Ameaças à validade 
● O método de classificação de refatorações é 
simples. 
● Poucos dados utilizados na análise qualitativa. 
● Complexidade Ciclomática total da classe pode 
não ser a métrica ideal para medir complexidade. 
● Classes de teste não foram ignoradas. 
● Conjunto de dados limitado aos projetos da 
Apache.
Conclusão e trabalhos futuros 
● Não é possível afirmar que a prática de 
refatoração de código diminui a Complexidade 
Ciclomática. 
● A análise qualitativa indica que a maioria das 
refatorações traz melhorias a legibilidade.
Conclusão e trabalhos futuros 
● Utilização de outras métricas de para medir 
outros aspectos de qualidade de código. 
● Os padrões diferentes de evolução da 
Complexidade Ciclomática de cada projeto 
podem ser investigados.
Obrigado! 
Perguntas?

Mais conteúdo relacionado

Destaque

Destaque (9)

Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?Eu meço, tu medes, ele mede.. Mas medimos o quê?
Eu meço, tu medes, ele mede.. Mas medimos o quê?
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
 

Semelhante a Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - WBMA 2013

METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
Roberto Pepato
 

Semelhante a Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - WBMA 2013 (20)

Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
Palestra TaSafo Conf-2015: Refatoração com Métricas
Palestra TaSafo Conf-2015: Refatoração com MétricasPalestra TaSafo Conf-2015: Refatoração com Métricas
Palestra TaSafo Conf-2015: Refatoração com Métricas
 
[Pereira IC'2011] Otimizacoes no LLVM
[Pereira IC'2011] Otimizacoes no LLVM[Pereira IC'2011] Otimizacoes no LLVM
[Pereira IC'2011] Otimizacoes no LLVM
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
METACOM – Uma análise de correlação entre métricas de produto e propensão à m...
METACOM – Uma análise de correlação entre métricas de produto e propensão à m...METACOM – Uma análise de correlação entre métricas de produto e propensão à m...
METACOM – Uma análise de correlação entre métricas de produto e propensão à m...
 
Brateste 2013: Testes Agile em Processos Agile
Brateste 2013:  Testes Agile em Processos AgileBrateste 2013:  Testes Agile em Processos Agile
Brateste 2013: Testes Agile em Processos Agile
 
METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
METACOM - Um Método para Análise de Correlação entre Métricas de Produto de S...
 
SlidesHarmonization of ISO/IEC 9001:2000 and CMMI-DEV: from a theoretical com...
SlidesHarmonization of ISO/IEC 9001:2000 and CMMI-DEV: from a theoretical com...SlidesHarmonization of ISO/IEC 9001:2000 and CMMI-DEV: from a theoretical com...
SlidesHarmonization of ISO/IEC 9001:2000 and CMMI-DEV: from a theoretical com...
 
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Eng.ª do Software - 5. Desenvolvimento rápido de software
Eng.ª do Software - 5. Desenvolvimento rápido de softwareEng.ª do Software - 5. Desenvolvimento rápido de software
Eng.ª do Software - 5. Desenvolvimento rápido de software
 
Definição de processos para AS Brasil utilizando Rational Method Composer
Definição de processos para AS Brasil utilizando Rational Method ComposerDefinição de processos para AS Brasil utilizando Rational Method Composer
Definição de processos para AS Brasil utilizando Rational Method Composer
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Eng.ª do Software - 4. Processos de software
Eng.ª do Software - 4. Processos de softwareEng.ª do Software - 4. Processos de software
Eng.ª do Software - 4. Processos de software
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 
Aula 05
Aula 05Aula 05
Aula 05
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
 
Benchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenhoBenchmarking para sistemas de alto desempenho
Benchmarking para sistemas de alto desempenho
 

Mais de Maurício Aniche

Mais de Maurício Aniche (13)

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to Practice
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019
 
Test Automation Day 2018
Test Automation Day 2018Test Automation Day 2018
Test Automation Day 2018
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and Stroopwafels
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?
 
Métricas de código, pra que te quero?
Métricas de código, pra que te quero?Métricas de código, pra que te quero?
Métricas de código, pra que te quero?
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introduçãoMétodos Ágeis de Desenvolvimento de Software: Uma introdução
Métodos Ágeis de Desenvolvimento de Software: Uma introdução
 
The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)The relationship between test and production code quality (@ SIG)
The relationship between test and production code quality (@ SIG)
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
 

Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - WBMA 2013

  • 1. Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study Francisco Zigmund Sokol, Maurício Finavaro Aniche, Marco Aurélio Gerosa francisco.sokol@usp.br, {aniche, gerosa}@ime.usp.br
  • 2. Refatoração Pequenas mudanças no código para aprimorar a qualidade interna sem alterar as funcionalidades de um software. ● Legibilidade? ● Coesão? ● Acoplamento? ● Complexidade? ○ Complexidade Ciclomática.
  • 3. Exemplo - Complexidade Ciclomática CC = 4
  • 5. Exemplo - Refatoração Extract method
  • 6. Exemplo - Refatoração Extract method CC = 6 CC = 5
  • 7. Objetivo A complexidade ciclomática reduz ao aplicar uma refatoração? Replicação do trabalho de Soetens e Demeyer (2010).
  • 8. Trabalhos relacionados M. Alshayeb (2009) Adaptabilidade, manutenabilidade, legibilidade e testabilidade. Três projetos OS. Não apresenta melhoria significativa. Du Bois et al (2006) Legibilidade. Experimento controlado. Apresenta melhoria. Stroggylos e Spinellis (2007) Complexidade, coesão, acoplamento. Três projetos OS. Apresenta piora. Geppert et al (2005) Densidade de bugs e capacidade de mudança. Projeto da indústria. Apresenta melhoria.
  • 9. Soetens e Demeyer Análise da evolução da Complexidade Ciclomática de ~800 versões do projeto de código aberto PMD:
  • 10. Soetens e Demeyer ● Poucas refatorações removiam código duplicado. ● Commits de refatoração junto com novas funcionalidades. ● Mudanças simples como mover métodos e renomear variáveis.
  • 11. Protocolo de replicação ● 256 projetos Java da Apache. ● Aproximadamente 500 mil commits. ● Classificação de uma refatoração por meio da mensagem de commit. ● Complexidade Ciclomática pré-calculada no MetricMiner (http://metricminer.org.br/).
  • 18. Análise qualitativa ● Muitos commits de refatoração adicionavam também novas funcionalidades - floss refactoring (Murphy-Hill et al 2010). ● Commits grandes. ● Melhorias principalmente em legibilidade.
  • 19. Ameaças à validade ● O método de classificação de refatorações é simples. ● Poucos dados utilizados na análise qualitativa. ● Complexidade Ciclomática total da classe pode não ser a métrica ideal para medir complexidade. ● Classes de teste não foram ignoradas. ● Conjunto de dados limitado aos projetos da Apache.
  • 20. Conclusão e trabalhos futuros ● Não é possível afirmar que a prática de refatoração de código diminui a Complexidade Ciclomática. ● A análise qualitativa indica que a maioria das refatorações traz melhorias a legibilidade.
  • 21. Conclusão e trabalhos futuros ● Utilização de outras métricas de para medir outros aspectos de qualidade de código. ● Os padrões diferentes de evolução da Complexidade Ciclomática de cada projeto podem ser investigados.