Engenharia de Software Experimental 2013.2
Avaliação de introdução de anomalias de software, após aplicação de refatorações automáticas para remoção de code smells
Chrystinne Fernandes
Sumário
Conceitos abordados
Introdução
Objetivos
Gerais
Específicos
Hipóteses
Método empírico
Resultados esperados
Considerações finais
Referências
Conceitos abordados
Qualidade de software
Conjunto de métricas;
Ferramentas de medição
Code smells
Conceito
Exemplos
Ferramentas de detecção
Refatoração
Conceito
Exemplos
Ferramentas
02/10/2013 @LES/PUC-Rio 3
Introdução
De que forma é possível avaliar a qualidade de um software?
Escolha adequada do conjunto de métricas
Ferramentas de medição
O que são code smells?
Ferramentas de detecção
O que é refatoração?
Por que, quando e como refatorar
Impactos positivos e negativos no código, no projeto e na qualidade do sistema
Ferramentas de refatoração
Qualidade de software
Uso de formas de avaliação da qualidade consolidadas e amplamente aceitas;
Conjunto de métricas que serão utilizadas:
DAC: Data Abstraction Coupling;
LCOM: Lack of Cohesion in Methods;
NOM: Number Of Methods;
RFC: Response For a Class;
TCC: Tight Class Cohesion;
WMC: Weighted Methods per Class;
02/10/2013 @LES/PUC-Rio 5
Categorias:
Métricas de Coesão (LCOM e TCC);
Métricas de Acoplamento (DAC e RFC);
Métricas de Complexidade (WMC e RFC);
Ferramentas para avaliação da qualidade do código:
JDepend4Eclipse (Plugin Eclipse);
Sonar (Plugin Eclipse);
Eclipse-PMD (Plugin Eclipse);
Qualidade de software
Code smells
Definição:
São estruturas no código que segerem ou às vezes até “gritam” pela refatoração.
“If it stinks, change it.”
(by Kent Beck and Martin Fowler)
Alguns exemplos:
Duplicated Code;
Long Method;
Large Class;
Long Parameter List;
02/10/2013 @LES/PUC-Rio 7
Code smells – alguns exemplos
Divergent Change;
Shotgun Surgery;
Feature Envy;
Data Clumps;
Primitive Obsession;
Switch Statements;
Parallel Inheritance Hierarchies;
Lazy Class;
Speculative Generality;
Temporary Field;
Message Chains;
Code smells – alguns exemplos
Middle Man;
Inappropriate Intimacy;
Alternative Classes with Different Interfaces;
Incomplete Library Class;
Data Class;
Refused Bequest;
Smells que serão abordados:
Feature Envy (Inveja dos dados);
Long Method;
Shotgun Surgery (Cirurgia com rifle);
Large Class;
Entre outros;
02/10/2013 @LES/PUC-Rio 9
Refatoração
Conceito:
“Refatoração é o processo de alteração de um sistema de software de modo que o comportamento externo do código não
mude, mas que sua estrutura interna seja melhorada.”
(Martin Fowler)
Refatoração – Alguns exemplos
Extract Method;
Inline Method;
Replace Temp with Query;
Split Temporary Variable;
Move Method;
Move Field;
Extract Class;
Replace Conditional with Polymorphism;
Rename Method;
Pull Up Field;
Pull Up Method;
02/10/2013 @LES/PUC-Rio 11
Refatoração – Alguns exemplos
Pull Up Constructor Body;
Push Down Method;
Push Down Field;
Extract Subclass;
Extract Superclass;
Extract Interface;
Collapse Hierarchy;
Form Template Method;
Replace Inheritance with Delegation;
Replace Delegation with Inheritance;
Separate Domain from Presentation;
Refatoração
Refatorações que serão aplicadas:
Move Method;
Extract Method;
Extract Class;
Entre outras;
02/10/2013 @LES/PUC-Rio 13
Ferramentas de Refatorãção
Ferramentas de suporte ao processo de refatoração:
Ferramenta Linguagem
Sonar Java, C, PHP, Groovy SafeRefactor Java
Together Java, C++, C#
JDepend Java
Jdeodorant Java
PMD Java
InFusion Java, C, C++
Objetivos gerais
Avaliar a introdução de anomalias em sistemas de software, após aplicação de
refatorações automáticas para remoção de code smells.
02/10/2013 @LES/PUC-Rio 15
Objetivos específicos
Avaliar impactos na qualidade de sistema após as transformações, utilizando
métricas bem definidas;
Avaliar a relação custo-benefício resultante da remoção de cada code smell;
Determinar quais anomalias foram geradas após a aplicação de cada refatoração e qual seu impacto na qualidade do sistema;
Indicar quais refatorações produzem maior número anomalias;
Hipóteses
H1 Ferramentas de detecção de code
smells não são 100% confiáveis, podendo não reconhecer alguns code smells ou
encontrar falsos positivos;
H2 Ferramentas de refatoração não são 100% confiáveis, uma vez que seu uso não elimina todos os code smells;
H3 O processo de refatoração traz riscos para o desenvolvimento de software,
mesmo realizado de modo sistemático, com uma metodologia bem definida;
02/10/2013 @LES/PUC-Rio 17
Hipóteses
H4 O uso de ferramentas que automatizam o processo de refatoração introduz anomalias no código;
H5 Quando aplicado de modo sistemático, o
processo de refatoração aumenta a qualidade do software, melhorando a legibilidade e a
manutenibilidade do código;
Método empírico
Estudo de caso
Serão avaliados 3 sistemas open source;
02/10/2013 @LES/PUC-Rio 19
Resultados esperados
Relação de code smells mais críticos do sistema, listados na ordem em que
deveriam ser removidos através de ferramentas de refatoração;
Relação das anomalias introduzidas após a refatoração e seu impacto na qualidade do sistema;
Considerações finais
Dúvidas?
Críticas?
Sugestões
Contato: cfernandes@inf.puc-rio.br
02/10/2013 @LES/PUC-Rio 21
Referências
[1] Martin Fowler et al. Refactoring:
Improving the Design of Existing Code.
Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1999.
[2] Joshua Kerievsky, Refactoring To Patterns. Industrial Logic, Inc., 2001.
[3] Fontana, Francesca Arcelli; Spinelli, Stefano. Impact of refactoring on quality
code evaluation. WRT '11 Proceedings of the 4th Workshop on Refactoring Tools. Pages 37-40
[4] Murphy-Hill et al. 2009. How we refactor and how we know it. Proceedings of 31st
ICSE, USA.
[5] Arcoverde, Roberta. Identificando Quebras de Assertivas Causadas por Refatorações.
[6] Arcoverde, Roberta. Ferramentas de Apoio a Refatorações.
[7] Arendt, Thorsten; Taentzer, Gabriele.
Integration of smells and refactorings within the Eclipse modeling framework.
02/10/2013 @LES/PUC-Rio 23
Referências
Referências
[8] http://www.refactoring.com/
[9] http://dl.acm.org/
[10]http://www.industriallogic.com/xp/refac toring/
[11] Understand for Java:
http://www.scitools.com/
[12] PMD: http://pmd.sourceforge.net/
Obrigada!
02/10/2013 @LES/PUC-Rio 25