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 02/10/2013 @LES/PUC-Rio 2
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 02/10/2013 @LES/PUC-Rio 4
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
Qualidade de software 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); 02/10/2013 @LES/PUC-Rio 6
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; 02/10/2013 @LES/PUC-Rio 8
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) 02/10/2013 @LES/PUC-Rio 10
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; 02/10/2013 @LES/PUC-Rio 12
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++ 02/10/2013 @LES/PUC-Rio 14
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; 02/10/2013 @LES/PUC-Rio 16
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; 02/10/2013 @LES/PUC-Rio 18
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; 02/10/2013 @LES/PUC-Rio 20
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 02/10/2013 @LES/PUC-Rio 22
Referências [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 [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/ 02/10/2013 @LES/PUC-Rio 24
Obrigada! 02/10/2013 @LES/PUC-Rio 25