HENRIQUE GOMES NUNES IDENTIFICAO DE BAD SMELLS EM SOFTWARE A PARTIR DE MODELOS UML Dissertao apresentada ao Programa de Ps-Graduao em Cincia da Computao do Instituto de Cincias Exatas da Univer- sidade Federal de Minas Gerais como re- quisito parcial para a obteno do grau de Mestre em Cincia da Computao. Orientadora: Mariza Andrade da Silva Bigonha Co-orientadora: Kecia Aline Marques Ferreira Belo Horizonte Maro de 2014
Ficha catalogrfica elaborada pela Biblioteca do ICEx - UFMG
Nunes, Henrique Gomes.
N972i Identificao de badsmells em software a partir de modelos UML / Henrique Gomes Nunes Belo Horizonte, 2014. xvii, 80 f.: il.; 29 cm.
Dissertao (mestrado) Universidade Federal de Minas Gerais Departamento de Cincia da Computao.
1. Computao - Teses. 2. Engenharia de software Teses. 3. UML (Linguagem de modelagem padro) Teses. 4. Software Controle de qualidade - Teses. I. Orientadora. II. Coorientadora. III. Ttulo.
519.6*32(043) Agradecimentos Quero agradecer primeiramente a Deus, a fora, determinao e f durante toda esta caminhada. Mariza e Kecia, que me acompanharam durante todo o meu mestrado, a paci- ncia na orientao e incentivo que tornaram possvel a concluso desta dissertao. minha esposa, pai, me e irm, que sempre me apoiaram nos momentos difceis e zeram-me acreditar que tudo era possvel. Aos amigos do meu trabalho pelo apoio e compreenso, aos amigos pessoais pelos bons momentos e a todos que contribuiram para meu crescimento neste perodo. Muito obrigado! v Resumo Mtricas de software podem auxiliar na identicao de desvios de projeto, conhecidos na literatura como bad smells, e so teis para avaliar a qualidade do cdigo-fonte. Mtricas tambm podem ser usadas para identicar problemas estruturais nas fases iniciais do ciclo de vida do software. Esta dissertao visa contribuir nesse aspecto, propondo um mtodo e uma ferramenta para a identicao de bad smells, via mtricas de software, em sistemas orientados por objetos a partir de modelos UML. Neste trabalho, o mtodo proposto foi avaliado em dois experimentos: um com o objetivo de analisar os resultados do mtodo aplicado a verses antigas e verses refato- radas de um conjunto de seis softwares abertos; e outro com o objetivo de comparar os resultados do mtodo com a anlise manual. Os resultados desses experimentos indicam que o mtodo proposto mostra-se til para a identicao dos bad smells considerados nesta dissertao. Palavras-chave: Bad Smells, Mtricas, Qualidade de Software, Estratgias de Detec- o, Valores Referncia, Modelo UML. vii Abstract Software metrics may aid to identify design deviances, known in the literature as bad smells and are useful for evaluating the quality of source code. They also can be used for identifying design deviances in the early stages of the software lifecycle. This disser- tation aims to contribute in this aspect, proposing a method and a tool for identifying bad smells, using software metrics, in UML models. In this work, we carried out two experiments to evaluate the proposed method: the rst one aimed to evaluate the results of our method when applied to old versions as well as to refactored versions of six open source projects; in the second experiment, we compare the results of our method with the results of manual inspections. The results of these experiments indicate that our method is able to identify the bad smells analyzed in this study. Keywords: Bad Smells, Metrics, Software Quality, Detection Strategies, Thresholds, UML Model. ix Lista de Figuras 3.1 Filtros de dados. Fonte: Marinescu [2004] . . . . . . . . . . . . . . . . . . 20 3.2 Estratgia de deteco do God Class. Fonte: Marinescu [2002] . . . . . . . 21 3.3 Estrutura do iPlasma. Fonte: Marinescu et al. [2005] . . . . . . . . . . . . 25 3.4 Nveis do modelo de qualidade QMOOD. Fonte: Bertran [2009] . . . . . . 29 3.5 Mtricas utilizadas no modelo QMOOD. Fonte: Bertran [2009] . . . . . . . 30 4.1 Estratgia de deteco para o God Class. . . . . . . . . . . . . . . . . . . . 37 4.2 Estratgia de deteco para o Shotgun Surgery. . . . . . . . . . . . . . . . 38 4.3 Estratgia de deteco para o Indecent Exposure. . . . . . . . . . . . . . . 38 4.4 Casos de Uso da UMLsmell. . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.5 Estrutura da UMLsmell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.6 Diagrama de Classes da UMLsmell. . . . . . . . . . . . . . . . . . . . . . . 41 4.7 Tela com a lista de projetos criados por UMLsmell. . . . . . . . . . . . . . 43 4.8 Tela para seleo de mtricas de UMLsmell. . . . . . . . . . . . . . . . . . 43 4.9 Telas para a denio dos valores das mtricas de UMLsmell. . . . . . . . . 44 4.10 Tela para seleo de mtricas para avaliao em UMLsmell. . . . . . . . . 44 4.11 Tela com as estatsticas de mtricas de UMLsmell. . . . . . . . . . . . . . . 45 4.12 Tela para a seleo de bad smells para avaliao em UMLsmell. . . . . . . 45 4.13 Tela para as estatsticas de bad smells de UMLsmell. . . . . . . . . . . . . 46 5.1 Tabela com os resultados de UMLsmell. . . . . . . . . . . . . . . . . . . . 51 A.1 Classe Loader do software Picasso . . . . . . . . . . . . . . . . . . . . . . 75 A.2 Classe ServiceURL do software JSLP . . . . . . . . . . . . . . . . . . . . . 76 xi Lista de Tabelas 2.1 Valores referncia denidos por Ferreira et al. [2012]. . . . . . . . . . . . . 15 3.1 Tabela de deciso usada para classicar os suspeitos das duas verses do sistema analisado. Fonte: Marinescu [2002]. . . . . . . . . . . . . . . . . . 22 3.2 Resultado da avaliao automtica de Marinescu [2002]. FP = Falsos Posi- tivos, CE = Casos Especiais, FR = Falhas Reais. . . . . . . . . . . . . . . 23 3.3 Resultado de avaliao manual de Marinescu [2002]. DC = Deteco Cor- reta, OB = Outro Bad Smell, PE = Preciso Estrita, PS = Preciso Solta. 24 5.1 Bad smells no JHotdraw Verso 5.2 . . . . . . . . . . . . . . . . . . . . . . 52 5.2 Bad smells no JHotdraw Verso 7.0.6 . . . . . . . . . . . . . . . . . . . . . 53 5.3 Comparao dos bad smells no JHotdraw Verses 5.2 e 7.0.6 . . . . . . . . 53 5.4 Bad smells no Struts Verso 1.1 . . . . . . . . . . . . . . . . . . . . . . . . 54 5.5 Bad smells no Struts Verso 1.2.7 . . . . . . . . . . . . . . . . . . . . . . . 55 5.6 Comparao dos bad smells no Struts Verses 1.1 e 1.2.7 . . . . . . . . . . 55 5.7 Bad smells no HSqlDB Verso 1.8.1 . . . . . . . . . . . . . . . . . . . . . . 56 5.8 Bad smells no HSqlDB Verso 2.3.1 . . . . . . . . . . . . . . . . . . . . . . 56 5.9 Comparao dos bad smells no HSqlDB Verses 1.8.1 e 2.3.1 . . . . . . . . 56 5.10 Bad smells no Jslp Verso 0.7 . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.11 Bad smells no Jslp Verso 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.12 Comparao dos bad smells no Jslp Verses 0.7 e 1.0 . . . . . . . . . . . . 58 5.13 Bad smells no Log4j Verso 1.2 . . . . . . . . . . . . . . . . . . . . . . . . 59 5.14 Bad smells no Log4j Verso 1.3 alpha 6 . . . . . . . . . . . . . . . . . . . . 59 5.15 Comparao dos bad smells no Log4j Verses 1.2 e 1.3a6 . . . . . . . . . . 59 5.16 Bad smells no Sweethome 3D Verso 2.5 . . . . . . . . . . . . . . . . . . . 60 5.17 Bad smells no Sweethome 3D Verso 3.5 . . . . . . . . . . . . . . . . . . . 60 5.18 Comparao dos bad smells no Sweethome 3D Verses 2.5 e 3.5 . . . . . . 60 5.19 Avaliao manual do Picasso. . . . . . . . . . . . . . . . . . . . . . . . . . 62 xiii 5.20 Avaliao do Picasso pela UMLsmell. . . . . . . . . . . . . . . . . . . . . . 63 5.21 Avaliao manual do JSLP . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.22 Avaliao do JSLP pela UMLsmell . . . . . . . . . . . . . . . . . . . . . . 65 xiv Sumrio Agradecimentos v Resumo vii Abstract ix Lista de Figuras xi Lista de Tabelas xiii 1 Introduo 1 1.1 Denio do Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Contribuies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Organizao do Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Referencial Terico 5 2.1 Mtricas de Software para Diagramas de Classes . . . . . . . . . . . . . 5 2.1.1 Mtricas CK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.2 Mtricas de Li e Henry . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.3 Mtricas MOOD . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.4 Mtricas de Lorenz e Kidd . . . . . . . . . . . . . . . . . . . . . 8 2.1.5 Mtricas de Briand . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.6 Mtricas de Marchesi . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.7 Mtrica de Harrison . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.8 Mtricas de Bansiya et al. . . . . . . . . . . . . . . . . . . . . . 10 2.1.9 Mtricas de Genero et al. . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Bad Smells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Valores Referncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 xv 2.4 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Trabalhos Relacionados 17 3.1 Ferramentas de Medio Aplicadas a Modelos UML . . . . . . . . . . . 17 3.2 Estratgias de Deteco de Bad Smells . . . . . . . . . . . . . . . . . . 19 3.2.1 Mecanismos de Filtragem de Mtricas . . . . . . . . . . . . . . . 19 3.2.2 Mecanismos de Composio . . . . . . . . . . . . . . . . . . . . 20 3.2.3 Avaliao das Estratgias de Deteco . . . . . . . . . . . . . . 21 3.3 Falhas de Software e Bad Smells . . . . . . . . . . . . . . . . . . . . . . 25 3.3.1 Anlise de Correlao . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.2 Anlise Delta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4 Bad Smells em Modelos UML . . . . . . . . . . . . . . . . . . . . . . . 28 3.4.1 O Modelo de Qualidade QMOOD . . . . . . . . . . . . . . . . . 28 3.4.2 Estudos Experimentais . . . . . . . . . . . . . . . . . . . . . . . 31 3.5 Consideraes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4 Identicao de Bad Smells a partir de Diagramas de Classes 35 4.1 Mtodo Proposto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2 A Ferramenta UMLsmell . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.1 Requisitos de UMLsmell . . . . . . . . . . . . . . . . . . . . . . 38 4.2.2 Implementao de UMLsmell . . . . . . . . . . . . . . . . . . . 40 4.2.3 Interface com o Usurio . . . . . . . . . . . . . . . . . . . . . . 43 4.3 Diferenciais do Mtodo Proposto . . . . . . . . . . . . . . . . . . . . . 46 5 Avaliao do Mtodo Proposto 49 5.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.1 Diagramas de Classes dos Experimentos . . . . . . . . . . . . . 50 5.2 Anlise de Softwares Reestruturados . . . . . . . . . . . . . . . . . . . 51 5.2.1 Resultados da Avaliao Automtica via UMLsmell . . . . . . . 52 5.3 Avaliao Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.3.1 Resultado da Avaliao Manual da Biblioteca Picasso . . . . . . 61 5.3.2 Resultado da Avaliao Manual do Protocolo JSLP . . . . . . . 64 5.4 Anlise dos Resultados das Avaliaes Automtica e Manual . . . . . . 65 5.5 Consideraes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6 Concluso 69 6.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.2 Publicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 xvi A Avaliao Manual dos Bad Smells 73 A.1 Denio dos Bad Smells . . . . . . . . . . . . . . . . . . . . . . . . . . 73 A.2 Softwares Usados na Avaliao Manual . . . . . . . . . . . . . . . . . . 74 A.3 Questionrio Usado para a Avaliao Manual . . . . . . . . . . . . . . . 74 A.3.1 Picasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 A.4 Exemplo de Classes Avaliadas . . . . . . . . . . . . . . . . . . . . . . . 75 Referncias Bibliogrcas 77 xvii Captulo 1 Introduo No contexto de Engenharia de Software, mtrica corresponde a um mtodo para deter- minar se um sistema, componente ou processo possui um determinado atributo (IEEE [1990]). Historicamente as mtricas so utilizadas para estimar custo, esforo e tempo de desenvolvimento e manuteno. As mtricas mais comuns so usadas para avaliar o tamanho de um software e estimar o tempo que levar para desenvolv-lo (Nuthakki et al. [2011]). A medio de softwares permite que uma organizao melhore seu processo de desenvolvimento, auxi- liando no planejamento, acompanhamento e controle, alm de ser til para a avaliao do software. Soliman et al. [2010] armam que muitas mtricas de software tm sido propostas na literatura, para contabilizar: linhas de cdigos, porcentagem de comen- trios, nmero de mdulos, contagem de elementos, abstrao de dados acoplados, etc. Eles ainda armam que a maioria das mtricas so aplicadas nas fases posteriores ao projeto, entretanto sabe-se que necessrio compreender o projeto desde o seu incio. As mtricas de software tambm podem auxiliar na identicao dos desvios de projeto, conhecidos na literatura como bad smells (Fowler [1999]). Alguns trabalhos tm sido desenvolvidos para identicar bad smells em software com o uso de mtricas a partir de cdigo fonte (Marinescu [2002], Lanza et al. [2006]). Todavia, poucos traba- lhos propuseram avaliar bad smells nas fases iniciais de projetos de software (Bertran [2009]). A Unied Modeling Language (UML) uma famlia de notaes grcas, apoi- ada por um metamodelo nico, que auxilia na descrio e no projeto de sistemas de softwares orientados por objetos (Fowler [2005]). A UML surgiu com a proposta de padronizar questes relacionadas ao projeto orientado por objetos, permitindo assim que um sistema seja representado independente da linguagem de programao utili- zada. Ser capaz de obter mtricas a partir de modelos da UML importante, porque 1 2 Captulo 1. Introduo a UML fornece uma viso da estrutura do software. Alm disso, com a avaliao de modelos UML, a qualidade do software pode ser medida desde os estgios iniciais, o que pode tornar as intervenes no software menos dispendiosas. No entanto, poucas so as discusses de como aplicar as mtricas propostas na literatura via UML (Soliman et al. [2010]). Yi et al. [2004] citam em seu trabalho que diversos pesquisadores deniram m- tricas para softwares orientados por objetos, e que um grupo especco de estudiosos se concentrou na denio de mtricas para modelos da UML. Os autores ainda armam que no h um consenso sobre quais as mtricas a serem aplicadas nesses modelos. Alguns atribuem maior importncia s mtricas baseadas em mtodos e atributos, en- quanto outros acreditam que as classes e seus relacionamentos so os mais importantes. Assim como no caso do cdigo fonte, as mtricas na UML podem permitir analisar aspectos como conabilidade, manutenibilidade e complexidade de sistemas, porm, neste caso, logo nas fases iniciais do ciclo de vida do software. Dentre os diagramas denidos na UML destaca-se o diagrama de classes, que representa classes de objetos e suas relaes. A anlise desse diagrama pode fornecer diversas mtricas relacionadas manutenibilidade e complexidade do software logo no incio do projeto. Porm, um projeto real necessita de uma ferramenta para automatizar este processo, pois invivel calcular tais mtricas manualmente (Girgis et al. [2009]). O trabalho de dissertao proposto visa contribuir nesse aspecto, propondo um mtodo e uma ferramenta para identicao de bad smells automaticamente em soft- ware orientado por objetos a partir de diagramas de classes da UML, aplicando mtricas de software. 1.1 Denio do Problema As pesquisas sobre bad smells, na maioria dos estudos, analisa desvios de projeto em cdigo fonte (Fowler [1999], Marinescu [2002], Lanza et al. [2006]). Encontrar bad smells no cdigo fonte necessrio para identicar demandas de refatorao. Porm, tambm importante identicar bad smells nas fases iniciais do ciclo de vida do software, o que poder contribuir para a diminuio do custo total do projeto, uma vez que realizar modicaes quando o sistema j est em operao mais dispendioso. Isto posto, na pesquisa realizada para esta dissertao foram identicados al- guns problemas que ainda no possuem solues disponveis na literatura, e as poucas existentes ainda no so satisfatrias. So eles: carncia de mtodos que identiquem desvios de projetos nas fases iniciais do 1.2. Objetivos 3 desenvolvimento de software. ausncia de mtodos e ferramentas que automatizem a identicao de bad smells em modelos UML; h poucos experimentos que validam estratgias de deteco em modelos UML. Contornar esses problemas importante, pois a identicao de desvios de projeto nas fases iniciais do projeto de software, como na fase de modelagem por exemplo, contribuem para que os problemas nas fases posteriores do desenvolvimento de software possam ser reduzidos. O presente trabalho contribui para a soluo desses problemas. 1.2 Objetivos Este trabalho tem por objetivos: denir um mtodo de identicao de bad smells em softwares a partir de dia- grama de classes, aplicando mtricas de software; desenvolver uma ferramenta que permita automatizar a coleta de mtricas e a aplicao delas na identicao dos bad smells a partir de diagramas de classes; avaliar o mtodo e a ferramenta propostos por meio de experimentos com softwa- res abertos. 1.3 Contribuies A seguir, as principais contribuies desta dissertao. 1. Identicao das mtricas que melhor representam os aspectos relacionados a bad smells em diagramas de classe. 2. Uma ferramenta, denominada UMLsmell, para auxiliar os engenheiros de software na identicao de bad smells logo nas fases iniciais do projeto. 3. Avaliao do mtodo proposto via experimentos com software aberto. 4. Disponibilizao de UMLsmell, em formato de cdigo aberto, para que engenhei- ros de software possam fazer uso da ferramenta. 4 Captulo 1. Introduo 1.4 Organizao do Texto O restante desta dissertao est organizada da seguinte forma: Captulo 2 faz uma breve reviso sobre conceitos fundamentais de mtricas, atendo-se em especial quelas para diagramas de classes, valores referncia e bad smells. Captulo 3 apresenta os trabalhos relacionados com o tema da dissertao. Os Captulos 4 e 5 constituem o cerne desta dissertao. Captulo 4 apresenta o modelo proposto e a ferramenta desen- volvida, alm dos pontos positivos deste trabalho em relao aos outros. O Captulo 5 discute os resultados dos experimentos feitos automaticamente com a ferramenta de- senvolvida, e, manualmente com o auxlio de avaliadores com formao em Engenharia de Software. Apresenta tambm algumas limitaes identicadas no decorrer de seu desenvolvimento. Captulo 6 apresenta as concluses do trabalho desta dissertao, e aponta direes a serem seguidas, relacionando os trabalhos futuros. Apndice A apresenta o questionrio usado pelos avaliadores para a avaliao manual, alm das informaes pertinentes para esta avaliao. Parte dos diagramas de classes dos dois sistemas avaliados so mostrados para exemplicar o processo realizado. Captulo 2 Referencial Terico Este captulo faz uma reviso sobre conceitos fundamentais relacionados a mtricas, em especial quelas para diagramas de classes, valores referncia e bad smells. Sommerville [2007] dene medio como um valor numrico relacionado a algum atributo de software, permitindo a comparao entre atributos da mesma natureza. Ele argumenta que a medio permite realizar previses gerais de um sistema e identicar componentes com anomalias. Sommerville [2007] argumenta que por meio das mtri- cas possvel controlar um software. possvel tambm, por exemplo, via atributos internos de um software, denir atributos externos como facilidade de manuteno, conabilidade, portabilidade e facilidade de uso. 2.1 Mtricas de Software para Diagramas de Classes Em seu trabalho, Genero et al. [2005] relatam o resultado de uma pesquisa, baseada em 12 outras obras, na qual apresentam conjuntos de mtricas para diagramas de classes. De acordo com Genero et al. [2005], a escolha pelo modelo de diagrama de classes justica-se pelo fato desse representar a espinha dorsal do desenvolvimento orientado por objetos, fornecendo informaes sobre a concepo e implementao de um software logo no incio de um projeto, tal que o impacto de falhas nas fases posteriores seja minimizado. Eles tambm armam que a coleta de mtricas relacionadas a diagramas de classes ainda escassa, e que por muitos anos o foco principal de medio tem sido o cdigo fonte. Para eles, as mtricas de diagramas de classes so: identicam os pontos fracos de um software nas fases iniciais do ciclo de vida do projeto, quando uma modicao nele custar menos; 5 6 Captulo 2. Referencial Terico permitem escolher alternativas de projeto de forma mais objetiva; e possibilitam prever caractersticas externas de qualidade, como: manuteno e reutilizao, alm de possibilitar uma melhor alocao de recursos para solucionar tais questes. Os autores denem os seguintes elementos como fundamentais para a extrao de mtricas em diagramas de classes: pacotes, classes, atributos, mtodos, parmetros e relacionamentos de associao, agregao, generalizao e dependncia. Identicados esses elementos, a escolha das mtricas feita por Genero et al. [2005] seguiram os seguintes princpios bsicos: a mtrica deve ser clara ao denir seus objetivos; a mtrica deve medir o atributo o qual ela se prope avaliar; a mtrica deve ser validada para saber se ela realmente til; o clculo da mtrica deve ser fcil e de possvel automatizao. Para validar a escolha de suas mtricas os autores utilizam cinco critrios: de- nio da mtrica, objetivo da mtrica, validao terica, validao emprica e possibi- lidade de automatizao. A seguir so denidas as mtricas levantadas por Genero et al. [2005]. Para cada um dos conjuntos de mtricas apresentados nas prximas sees, so descritas aquelas identicadas como possveis colaboradoras no reconhecimento dos bad smells em diagramas de classes. 2.1.1 Mtricas CK O objetivo das mtricas CK (Chidamber & Kemerer [1994]) medir a complexidade de um projeto em relao a atributos externos de qualidade como manuteno e reuti- lizao de software. Ao total, existem seis mtricas denidas no conjunto CK, porm apenas trs, descritas a seguir, podem ser extradas a partir de diagramas de classe: WMC (Weighted Methods per Class): diz respeito complexidade dos mtodos de uma classe. Usualmente, o WMC equivale quantidade de mtodos em uma classe no diagrama de classes. DIT (Depth of Inheritance): refere-se distncia entre uma determinada classe e a superclasse raiz na rvore de herana do software. 2.1. Mtricas de Software para Diagramas de Classes 7 NOC (Number of Children): representa o nmero de subclasses subordinadas diretamente uma superclasse. 2.1.2 Mtricas de Li e Henry O objetivo das mtricas de Li & Henry [1993] medir atributos internos como acopla- mento, complexidade e tamanho. Estas mtricas so denidas no nvel de classes: DAC (Data Abstraction Coupling): nmero de atributos que referenciam outra classe. DAC: nmero de diferentes classes que so usadas em uma determinada classe. NOM (Number of Methods): nmero de mtodos locais. SIZE2 (number of methods plus number of attributes): nmero de atributos da classe somado ao seu nmero de mtodos locais. 2.1.3 Mtricas MOOD O objetivo das mtricas MOOD (Abreu & Carapua [1994]) medir a produtividade no desenvolvimento. Essas mtricas so denidas para prover uma avaliao em nvel de sistema, em vez de em nvel de classe. Questes como herana, encapsulamento e polimorsmo so tratadas. Dentre as mtricas MOOD, existem seis que so aplicveis a diagrama de classes: MHF (Method Hiding Factor): representa o quociente entre o total de mtodos privados no sistema e a quantidade total de mtodos no sistema. AHF (Attribute Hiding Factor): diz respeito ao quociente entre os atributos privados e a quantidade total de atributos no sistema. MIF (Method Inheritance Factor): refere-se ao quociente entre os mtodos her- dados pela quantidade de mtodos locais mais os mtodos herdados. AIF (Attribute Inheritance Factor): representa o quociente entre os atributos herdados pela quantidade de atributos locais mais os atributos herdados. PF (Polymorphism Factor): representa o quociente entre o nmero atual de situaes de polimorsmo e o numro total de mtodos reescritos, considerando que um mtodo pode ser reescrito vrias vezes. 8 Captulo 2. Referencial Terico 2.1.4 Mtricas de Lorenz e Kidd As mtricas de Lorenz e Kidd (Lorenz & Kidd [1994]) tm como objetivo avaliar ques- tes estticas de projeto de software como herana e responsabilidade das classes. Elas se dividem em trs grupos: mtricas de tamanho, de herana e de aspectos internos da classe. Mtricas de Tamanho de Classe PIM (Public Instance Methods): conta o nmero total de mtodos pblicos em uma classe. NIM (Number of Instance Methods): conta todos os mtodos pblicos, protegidos e privados denidos na classe. NIV (Number of Instance Variables): conta o nmero total de atributos em uma classe. NCM (Number of Class Methods): conta o nmero total de mtodos em uma classe. NCV (Number of Class Variables): conta o nmero total de atributos que so do tipo classe. Mtricas de Herana de Classes NMO (Number of Methods Overridden): conta o nmero total de mtodos rede- nidos nas subclasses de uma superclasse. NMI (Number of Methods Inherited): o nmero total de mtodos herdados por uma classe. NMA (Number of Methods Added): conta o nmero total de mtodos denidos em uma classe. SIX (Specialization Index): o produto de mtodos redenidos na classe e o nvel de profundidade hierrquica dividido pelo nmero total de mtodos de uma classe. Questes Internas da Classe APPM (Average Parameter per Method): representa a diviso do nmero total de parmetros pelo nmero total de mtodos. 2.1. Mtricas de Software para Diagramas de Classes 9 2.1.5 Mtricas de Briand As mtricas de Briand et al. [1997] tm o objetivo de medir o acoplamento entre as classes. O nome dessas mtricas so denidas por letras da seguinte forma: ACAIC, OCAIC, DCAEC, OCAEC, ACMIC, OCMIC, DCMEC, OCMEC, tal que o signicado de cada letra : primeira letra indica o relacionamento: A representa o acoplamento com as classes ancestrais, D, os descendentes e O, outros tipos de relacionamentos; a segunda e terceira letras indicam o tipo de interao: CA interao de uma classe com um atributo e CM a interao de uma classe com um mtodo; a quarta e quinta letras indicam o direcionamento: IC (import coupling) so conexes aferentes, ou seja, aquelas que chegam classe. EC (export coupling) so conexes eferentes, ou seja, conexes que se originam da classe. 2.1.6 Mtricas de Marchesi O objetivo das mtricas de Marchesi [1998] medir a complexidade do software e equilibrar as responsabilidades entre pacotes e classes. As mtricas com as inicias CL referem-se a mtricas de classes, PK, mtricas de pacotes e OA, mtricas de complexi- dade global. Marchesi [1998] dene responsabilidade como informaes retidas ou clculos que devem ser realizados. Tambm dene que dependncia so todos os relacionamentos, exceto os de herana. Mtricas de Classes CL1: nmero de responsabilidades, herdadas ou no, de uma classe. CL2: nmero de relacionamentos de dependncia de uma classe. Mtricas de Pacotes Seja Ca uma classe do pacote Pa: PK1: quantidade de relacionamentos de Ca com classes no pertencentes ao pacote Pa. PK2: quantidade de relacionamentos de Ca com outras classes do pacote Pa. PK3: valor mdio dos resultados da mtrica PK1 em todas as classes. 10 Captulo 2. Referencial Terico Mtricas de Sistema OA1: nmero total de classes. OA2: nmero total de relacionamentos de herana. OA3: a mdia de todos os valores de CL1. OA4: desvio padro para a mtrica OA3. OA5: a mdia de todos os valores de CL2. OA6: desvio padro da mtrica OA5. OA7: porcentagem das responsabilidades herdadas em relao ao seu nmero total. 2.1.7 Mtrica de Harrison Harrison et al. [1998] denem a mtrica NAS (Number of Associations) que tem como objetivo medir o nvel de acoplamento entre as classes. Essa mtrica se refere quan- tidade de relaes de associao que se origina de uma classe. 2.1.8 Mtricas de Bansiya et al. As mtricas de Bansiya & Davis [2002] foram denidas para avaliar propriedades de projeto, como encapsulamento (DAM), acoplamento (DCC), coeso (CACM), compo- sio (MOA) e herana (MFA). DAM (Data Access Metric): a proporo dos atributos privados em relao quantidade total de atributos. DCC (Direct Class Coupling): representa a quantidade de classes s quais uma classe est diretamente relacionada. CAMC (Cohesion Among Methods of Class): um indicador da anidade entre mtodos de uma classe com base na lista de parmetros de mtodos. MOA (Measure of Aggregation): representa a quantidade de atributos que fazem referncia a outras classes. MFA (Measure of Functional Abstraction): dene a relao entre o nmero de mtodos herdados pela classe avaliada e o nmero total de mtodos, de outras classes, acessados por um mtodo da classe avaliada. 2.1. Mtricas de Software para Diagramas de Classes 11 DSC (Design Size in Classes): conta o nmero total de classes no projeto. NOH (Number of Hierarchies): conta o nmero total de hierarquias no projeto. ANA (Average Number of Ancestors): conta o nmero de classes ao longo de todos os caminhos da classe raiz para todas as classes em uma estrutura de herana. NOP (Number of Polymorphism): conta a quantidade total de mtodos que foram reescritos em outras classes. 2.1.9 Mtricas de Genero et al. As mtricas de Genero [2002] avaliam atributos de qualidade externos como manu- teno via relacionamentos de associaes, generalizao, agregao e dependncias. Essas mtricas se dividem em dois grupos: mtricas de escopo do diagrama de classe e mtricas de escopo de classe. Algumas mtricas de Genero [2002] so ambguas e de difcil interpretao, mas como elas tambm so identicadas como possveis colaboradoras no reconhecimento dos bad smells em diagramas de classes, no poderiam ser ignoradas. A seguir, so apresentadas as descries das mtricas exatamente como o autor delas as dene. Mtricas de Escopo de Classe NAssocC (Number of Association per Class): representa o nmero total de asso- ciaes de uma classe. HAgg (Height of a Class): considerando o diagrama como um grafo, esta mtrica indica o maior caminho denido por relacionamentos de agregao, a partir da classe avaliada. NODP (Number of Direct Parts): total de classes parte, diretas ou indiretas, que integram uma classe composta. NP (Number of Parts): total de classes parte, diretas ou indiretas, de uma classe todo. NW (Number of Wholes): total de classes todo, diretas ou indiretas, de uma classe parte. MAgg (Multiple Aggregation): total de classes todo diretas da qual uma classe parte-de, dentro de uma hierarquia de agregao. 12 Captulo 2. Referencial Terico NDepIn (Number of Dependencies In): total de classes que dependem de uma classe. NDepOut (Number of Dependencies Out): total de classes que tem classes de- pendentes. Mtricas de Escopo do Diagrama de Classes NAssoc (Number of Association): conta o nmero total de relacionamentos de associao em um diagrama de classes. NAgg (Number of Aggregation): conta o nmero total de relacionamentos de agregao em um diagrama de classes. NDep (Number of Dependencies): conta o nmero total de relacionamentos de dependncia em um diagrama de classes. NGen (Number of Generalization): conta o nmero total de relacionamentos de generalizao em um diagrama de classes. NGenH (Number of Generalization Hierarchies): conta o nmero total de hierar- quias de generalizao em um diagrama de classes. NAggH (Number of Aggregation Hierarchies): conta o nmero total de caminhos compostos por relacionamentos de agregao em um diagrama de classes. MaxDIT (Maximum DIT): o nmero do maior nvel de hierarquia no diagrama de classes. O nvel de hierarquia de uma classe dado conforme denido pela mtrica DIT do conjunto CK. MaxHAgg (Maximum HAgg): o maior caminho denido pela mtrica HAgg. 2.2 Bad Smells Para Fowler [1999], bad smell um indicador de possvel problema estrutural em cdigo- fonte, que pode ser melhorado via refatorao. Fowler [1999] dene o termo bad smells e apresenta uma lista com bad smells que aborda refatorao em cdigo fonte, mas no usa as estratgias de deteco de bad smells para reconhec-los. Fowler apenas cita caractersticas de como identicar as anomalias em cdigo fonte, e deixa em aberto quais metodologias poderiam ser utilizadas para tal tarefa. 2.2. Bad Smells 13 O trabalho de Marinescu [2002] possivelmente um dos primeiros a denir es- tratgias de deteco de bad smells utilizando mtricas. Lanza et al. [2006] tambm denem uma lista de bad smells, alguns novos e outros modicados a partir da obra de Fowler [1999], e usam estratgias de deteco para identicao deles. Em seu traba- lho sobre refatorao, Hamza et al. [2008] descrevem os bad smells das obras de Fowler [1999] e Kerievsky [2005]. Eis as descries de alguns bad smells: God Class: classes com alta responsabilidade no sistema. Data Class: classes que no denem funcionalidades prprias. Long Parameter List: mtodos com uma longa lista de parmetros. Shotgun Surgery: classes que ao serem alteradas causam impacto em outras clas- ses. Misplaced Class: classes que se relacionam pouco com as classes de seu pacote, porm se relacionam muito com as classes de outros pacotes. God Package: pacotes grandes, que possuem muitos dependentes. Divergent Change: classes que podem mudar diversas vezes e de formas distintas. Data Clumps: um conjunto considervel de atributos ou parmetros que andam sempre juntos. Parallel Inheritance Hierarchies: mostra que toda vez que for feita uma subclasse de uma superclasse, ter que ser feita uma subclasse de outra classe. Indecent Exposure: quando uma classe est mal encapsulada. Brain Method: um mtodo que centraliza as funcionalidades de uma classe. Feature Envy: uma classe que usa os mtodos de outra classe em excesso. Intensive Coupling: mtodos de uma classe intensivamente acoplados a mtodos de outra classe. Dispersed Coupling: mtodos de uma classe intensivamente acoplados a mtodos de vrias outras classes. 14 Captulo 2. Referencial Terico 2.3 Valores Referncia Crespo et al. [1996] armam que na literatura a maior parte dos estudos realizados sobre bad smells valem-se de mtricas para sua identicao e que a relao entre as mtricas e bad smells determinada pelos valores referncia. Em Marinescu [2002], os valores referncia fazem parte dos mecanismos de ltragem. Para determinar os valores referncia de mtricas que identicam bad smells, Marinescu [2002] avaliou 45 softwares escritos em Java e 37 em C++. Para cada uma das mtricas foram calculados as mdias e os desvios padres, sendo identicadas trs faixas de valores referncia para cada mtrica: Acima de = mdia + desvio padro. Corresponde a valores ligeiramente acima do aceitvel. Abaixo de = mdia desvio padro. Identicam valores abaixo do esperado. Muito acima de = (mdia + desvio padro) * 1,5. Identicam valores muito acima do esperado. Crespo et al. [1996] relatam que em estudos anteriores utilizaram-se mtricas para identicao de bad smells em cdigos fonte. Os autores relatam a necessidade de se avaliar melhor a denio de valores referncia para as mtricas. Nos resultados do estudo de caso apresentado, Crespo et al. [1996] notam que os valores referncia variam de acordo com o contexto dos softwares avaliados. Softwares de contextos similares obtiveram valores referncia similares e em contextos diferentes os valores referncia foram mais distantes. As mtricas e valores referncia utilizados nesta dissertao foram denidos por Ferreira [2011] e Ferreira et al. [2012] que identica valores referncia para 6 mtricas de software orientado por objetos: NCA (nmero de conexes aferentes), NAP (nmero de atributos pblicos), NMP (nmero de mtodos pblicos), DIT (depth in inheritance tree), LCOM (lack of cohesion in methods) e COF (fator de acoplamento). O estudo de Ferreira et al. [2012] conclui que a essas mtricas, exceto DIT, seguem uma distri- buio de cauda pesada (heavy-tailed distribution), o que signica que no h um valor tpico para essas mtricas. Esse estudo foi realizado em um conjunto de 40 softwares abertos, de diferentes contextos e tamanhos. Os valores referncia identicados esto representados na Tabela 2.1. O valor bom representa os valores mais frequentes, em softwares tidos como de boa qualidade, para as mtricas avaliadas, regular para valores pouco frequentes e ruim para valores raramente frequentes. 2.4. Concluso 15 Mtrica Bom Regular Ruim COF at 0.02 0.02 a 0.14 superior a 0.14 NCA at 1 2 a 20 superior a 20 NAP 0 1 a 10 superior a 10 NMP at 10 11 a 40 superior a 40 DIT mdia igual a 2 LCOM 0 1 a 20 superior a 20 Tabela 2.1. Valores referncia denidos por Ferreira et al. [2012]. 2.4 Concluso Neste captulo foi apresentado o conceito de mtricas e foi feito um levantamento das principais mtricas de diagramas de classes encontradas na literatura. As mtricas permitem quanticar a qualidade de um software, por isso importante o conhecimento delas. Tambm foi apresentado o conceito de bad smells, que indica possveis desvios de projeto em softwares via mtricas de softwares. Esse conceito muito importante, e o principal ponto deste trabalho de dissertao. Para que as mtricas possam identicar os bad smells, necessrio identicar algo que os relacione. Esse relacionamento possvel via valores referncia, que denem valores numricos que determinam quantitativamente se o valor de uma mtrica aceitvel. No Captulo 3 so apresentados os trabalhos que inuenciaram e que esto mais relacionados com o trabalho de pesquisa desenvolvido nesta dissertao. Captulo 3 Trabalhos Relacionados Neste captulo so abordados trabalhos relacionados a bad smells, com foco princi- palmente em modelos UML e nesse sentido so apresentadas ferramentas desenvolvi- das para coleta de mtricas orientadas por objetos nestes modelos. Posteriormente descreve-se o trabalho de Marinescu [2002], um dos trabalhos pioneiros que utiliza m- tricas de software para identicao de bad smells, assim como a ferramenta iPlasma proposta por Marinescu et al. [2005]. Discute-se sobre os estudos realizados por Mari- nescu [2002] e Ferreira et al. [2012] sobre valores referncia, e, na sequncia, apresenta-se o trabalho de DAmbros et al. [2010] que relaciona falhas de software com bad smells. Por m, mas no menos importante, destaca-se o trabalho de Bertran [2009] que rea- liza experimentos de identicao de bad smells em diagramas de classes. Este captulo termina com uma anlise crtica dos trabalhos relacionados ao tema desta dissertao. 3.1 Ferramentas de Medio Aplicadas a Modelos UML Na literatura h relato de ferramentas propostas para extrarem mtricas de modelos da UML, na maioria dos casos, de diagrama de classes. Algumas delas so descritas a seguir. Girgis et al. [2009] apresenta uma ferramenta capaz de calcular automaticamente diversas mtricas relacionadas ao diagrama de classes. O objetivo dos autores que a partir delas seja possvel tomar decises acerca de um projeto de software. Eles dividem as mtricas em quatro grupos: mtricas de complexidade, mtricas de tamanho de software, mtricas de acoplamento e mtrica de herana, todas extradas de diagramas de classes. A ferramenta recebe como entrada um diagrama de classe, porm no formato 17 18 Captulo 3. Trabalhos Relacionados de uma Extensible Markup Language (XML) chamado XMI, que a sigla de XML Metadata Interchange 1 . A ferramenta coleta as seguintes informaes para as classes do modelo UML: atributos (nome, tipo e visibilidade), mtodos (nome, tipo, parmetros e visibilidade) e relacionamentos (quantidades de agregaes, composies, associaes e heranas). As mtricas so geradas a partir desses dados e os resultados so exibidos para o usurio. Para avaliar o trabalho, Girgis et al. [2009] realizaram um estudo de caso em que so coletadas mtricas de trs verses de um sistema em Java de cdigo aberto. Os autores apresentam as alteraes do software em dados quantitativos e concluem que o comportamento das mtricas permite avaliar a evoluo do software em diversos aspectos: avaliao da qualidade do projeto, melhor visualizao do sistema, deteco de falhas dos padres de projetos e deteco da necessidade de refatoraes. Soliman et al. [2010] apresentam uma ferramenta que coleta seis mtricas CK. Essas mtricas so extradas de diagramas da UML, que so representados em arquivos do tipo XMI. A justicativa dos autores para escolherem as mtricas CK que alm delas cobrirem todos os aspectos de modelos orientados por objetos, as mesmas so amplamente aceitas e so adotadas pela Object Constraint Language (OCL) (Fowler [2005]), linguagem que dene parte do padro da UML. Para avaliar a ferramenta desenvolvida, os autores realizaram dois estudos de caso. No primeiro, eles escolhem um modelo de um software ctcio de matrcula em cursos online, fornecido no stio da Microsoft [2013], que disponibiliza os diagramas UML com o objetivo de fazer uma demonstrao da linguagem UML. Os trs diagramas usados foram: diagrama de classes, diagrama de sequncia e diagrama de atividades. Os autores coletaram as 6 mtricas de cada classe e forneceram o valor mdio de cada uma delas, comparando com o maior e menor valor obtido para cada mtrica. O segundo estudo de caso foi realizado em um sistema de cdigo aberto chamado Midas, que apresentado no prprio trabalho de Soliman et al. [2010]. Nesse estudo, os diagramas no so fornecidos pelo criador do sistema. Os autores utilizam a ferramenta de modelagem Argo UML (ArgoUML [2013]) e realizam uma engenharia reversa no cdigo-fonte para obter os diagramas. O trabalho de coletar mtricas feito por Nuthakki et al. [2011] se diferencia dos outros trabalhos uma vez que a ferramenta proposta por eles, UXSOM, capaz de extrair mtricas em diferentes formatos de arquivos gerados pelas ferramentas de mo- delagem. UXSOM suporta diagramas de classes exportados para os formatos XML, UXF (UML exchange format) e XMI, e, utiliza os arquivos de representao de diagra- mas gerados pelas seguintes ferramentas: ArgoUML [2013], UMLet [2013], ESS-Model 1 A justicativa do autor para utilizar este formato que este o padro adotado pela Object Management Group, tambm conhecida como OMG (OMG [2012]), a maior organizao internacional que aprova padres abertos para aplicaes orientadas por objetos. 3.2. Estratgias de Deteco de Bad Smells 19 [2013], MagicDraw [2013] e Enterprise-Architect [2013]. Para cada arquivo so extra- das as seguintes informaes: formato do arquivo do diagrama, quantidade de mtodos pblicos e privados , quantidade de mtodos pblicos, quantidade de atributos pblicos e privados, quantidade de atributos pblicos, quantidade de associaes, quantidade de lhos diretos, quantidade de classicadores e pacotes, e quantidade de relaes entre classicadores e pacotes. O mesmo diagrama de classes gerado para cada ferramenta e o mesmo exportado para algum dos formatos citados - XML, UXF ou XMI. Os auto- res, ento, comparam os valores obtidos e observam que apesar de algumas diferenas, os valores so bem prximos. 3.2 Estratgias de Deteco de Bad Smells Esta seo apresenta regras para estratgias de deteco denidas por Marinescu [2002] e reapresentadas detalhadamente em Marinescu [2004]. Estratgia de deteco nesse contexto denida como "uma expresso quanticvel de uma regra, aonde podemos vericar se fragmentos do cdigo fonte esto em conformidade com esta regra denida" (Bertran [2009]). Os aspectos abordados por essas estratgias de deteco de bad smells so: mecanismos de ltragem de mtricas e mecanismos de composio. 3.2.1 Mecanismos de Filtragem de Mtricas A ltragem possibilita a reduo do conjunto inicial de dados, de modo que se possa vericar uma caracterstica especial de fragmentos que tm suas mtricas capturadas. Os ltros permitem denir limites de valores para determinados aspectos. A Figura 3.1 mostra os tipos de ltros e os divide em dois grupos: Filtro marginal: dividido em dois sub-ltros denominados semnticos (variveis) e estticos (invariveis). Filtro de intervalo: dene um limite inferior e outro superior para o conjunto de dados. Marinescu [2002] e Marinescu [2004] apresentam um conjunto de regras com o objetivo de orientar o engenheiro de software a decidir qual tipo de ltro de dados deve ser aplicado sobre os resultados de uma mtrica em particular: Regra 1: escolher um ltro absoluto quando for quanticar regras de projeto que especicam limites explicitamente concretos dos valores. 20 Captulo 3. Trabalhos Relacionados Figura 3.1. Filtros de dados. Fonte: Marinescu [2004] Regra 2: escolher um ltro semntico quando a regra do projeto for denida em termos de valores difusos marginais, como acima ou abaixo de valores ou em valores extremos. Regra 3: para grandes sistemas, utilizar os ltros do tipo marginal, mais especi- camente, os semnticos. Para sistemas menores, utilizar intervalos. Regra 4: escolher um ltro esttico para os casos em que as regras de projeto faam referncia a valores extremamente alto / baixo, sem especicar qualquer limite preciso. Em relao aos mecanismos de ltragem para mtricas, Lanza et al. [2006] os denem como: muito (valores altos), pouco (valores baixos), metade de algum valor, no utilizando valores numricos, pois acreditam que eles dependem do contexto. As estratgias de deteco so denidas pelos autores no formato de circuito lgico. 3.2.2 Mecanismos de Composio Os mecanismos de composio permitem utilizar as mtricas em operaes matem- ticas, possibilitando assim a mescla de mtricas para obter informaes relevantes. Marinescu [2002] e Marinescu [2004] denem dois tipos de mecanismos de composio: Ponto de vista lgico: permite aplicar operadores lgicos s mtricas. Ponto de vista de conjuntos: permite agrupar as mtricas em conjuntos. Marinescu [2004] utiliza-se do bad smell denominado God Class, para exemplicar o processo de formulao das estratgias de deteco de bad smells. Na Figura 3.2 possvel ver o exemplo da denio da estratgia de deteco do God Class. Primeiramente, as regras denidas para God Class tratam de encontrar uma classe com alta complexidade, baixa coeso e um alto nvel de acoplamento. No trabalho de 3.2. Estratgias de Deteco de Bad Smells 21 Figura 3.2. Estratgia de deteco do God Class. Fonte: Marinescu [2002] Marinescu [2002] e Marinescu [2004], foram usadas as seguintes mtricas, tambm usadas por Lanza et al. [2006], para identicar God Class: Weighted Method Count (WMC): soma de complexidade dos mtodos. Tight Class Cohesion (TCC): representa o nmero de mtodos conectados dire- tamente, ou seja, conta o nmero relativo de mtodos de uma classe que acessam pelo menos um atributo em comum. Access to Foreign Data (ATFD): nmero de acessos a atributos de classes exter- nas. O God Class foi usado apenas como um exemplo para que Marinescu apresentasse passo-a-passo a contruo de uma estratgia de deteco de bad smells. A partir da foram apresentadas outras estratgias de deteco para outros bad smells. 3.2.3 Avaliao das Estratgias de Deteco Para avaliar os resultados de sua proposta, Marinescu [2002] destaca os seguintes cri- trios: Dentre as estratgias de deteco para identicar bad smells em cdigo fonte destacam-se os seguintes critrios usados por Marinescu [2002] para avaliar os resultados de sua proposta: Escalabilidade: verica se problemas em sistemas de grande escala foram identi- cados. Preciso: verica se os resultados esto de acordo ou dentro do esperado. 22 Captulo 3. Trabalhos Relacionados Suspeito em V1 ? Suspeito em V2 ? Concluso SIM SIM Falso positivo SIM NO Falha real NO NO Caso especial Tabela 3.1. Tabela de deciso usada para classicar os suspeitos das duas verses do sistema analisado. Fonte: Marinescu [2002]. A validao das estratgias de deteco denidas por Marinescu [2002] foi baseada nos seguintes itens: estratgias de deteco devem ser um mecanismo de mapeamento entre os resul- tados de medio e os problemas de projeto; estratgias de deteco devem identicar corretamente os problemas; estratgias de deteco devem ser capazes de localizar o problema. Apesar de sutil, existe uma diferena entre o primeiro e o ltimo item. O primeiro utiliza a estratgia de deteco como mecanismo de interpretao em alto nvel para resultados de mtricas que conduz para fragmentos de falhas de projeto, enquanto o ltimo requer a estratgia de deteco para identicar especicamente a falha que pretende detectar. Foram usados dois mtodos para avaliar escalabilidade e preciso: um automtico e outro manual. Marinescu [2002] realizou esse experimento em um software com apro- ximadamente 152 classes e outro com 387 classes para avaliar se possvel identicar automaticamente bad smells em cdigos fonte. Os dois softwares representam o mesmo sistema, porm em verses distintas, Verso V1 e Verso V2, tal que a Verso V2 re- presenta a refatorao da Verso V1. Isso signica que se a metodologia de Marinescu [2002] apontar a presena de mais bad smells em V1 que em V2, est comprovada sua eccia, pois como o V2 uma verso arquiteturalmente melhorada de V1, obviamente V1 apresentar mais falhas de projeto. Na avaliao automtica, foram avaliados os resultados da primeira e segunda verses do sistema em questo, respectivamente V1 e V2. Na Tabela 3.1 possvel ver o modelo adotado por Marinescu [2002] para avaliar automaticamente as estratgias de deteco. A avaliao ocorreu da seguinte forma: caso o problema exista na primeira verso e na segunda, isso signica que ou a estratgia no detectou a falha ou a reengenharia no foi feita para tal aspecto. Nesse caso Marinescu [2002] considerou o item como falso positivo; 3.2. Estratgias de Deteco de Bad Smells 23 Bad Smell V1 V2 FP CE FR Preciso Feature Envy 40 15 11 4 25 63% God Method 4 4 1 3 3 75% Shotgun Surgery 15 7 6 1 9 60% Refused Bequest 22 6 4 2 18 81% God Class 5 2 2 0 3 60% Data Class 3 2 1 1 2 66% God Package 2 1 1 0 1 50% Misplaced Class 4 2 1 1 3 75% Wide Subsystem Interface 5 1 1 0 4 80% Lack of Bridge 0 0 0 0 0 - Lack of Strategy 4 2 2 0 2 50% Lack of Singleton 4 5 2 3 2 50% Tabela 3.2. Resultado da avaliao automtica de Marinescu [2002]. FP = Falsos Positivos, CE = Casos Especiais, FR = Falhas Reais. caso o problema exista na primeira verso, mas no na segunda, signica que a refatorao ocorreu com sucesso, ou que houve alguma mudana na estrutura de pacotes que mascarou a falha. Nesse caso Marinescu [2002] considerou o item como falha real ; caso o problema exista na segunda verso, mas no na primeira, signica que o caso deve ser avaliado separadamente. Os resultados dessa anlise so apresentados na Tabela 3.2. Na coluna Preciso possvel ver o critrio de avaliao preciso. Para obter esse valor, o nmero de falhas reais dividido pela quantidade de suspeitos na Verso 1 do sistema. Por considerar a avaliao automtica como cega, o autor optou por realizar inspees manuais nos resultados da avaliao automtica. Foram utilizados os critrios de escalabilidade e preciso em fragmentos suspeitos (falhas reais) e feita a avaliao manual em cada um desses trechos. Aps a inspeo manual, os suspeitos foram classicados em trs categorias: deteco correta: quando a avaliao manual julga que o elemento realmente possui o problema do bad smell avaliado; outro bad smell : ocorre quando o bad smell avaliado no detectado, porm outro bad smell detectado; falso positivo: ocorre quando a avaliao manual julga que o suspeito no possui problema algum. 24 Captulo 3. Trabalhos Relacionados Bad Smell Suspeitos DC OB FP PE PS God Method 4 2 1 1 50% 75% Shotgun Surgery 15 10 2 3 66% 80% God Class 5 3 1 0 80% 100% Data Class 3 3 0 0 100% 100% Wide Subsystem Interface 5 3 1 1 60% 80% Lack of Strategy 4 3 1 0 75% 100% Lack of Singleton 4 1 1 2 25% 50% Tabela 3.3. Resultado de avaliao manual de Marinescu [2002]. DC = Deteco Correta, OB = Outro Bad Smell, PE = Preciso Estrita, PS = Preciso Solta. Na avaliao manual, Marinescu [2002] utiliza dois tipos de preciso para quan- ticar a eccia da estratgia de deteco. Estrita (strict): considera apenas o bad smell avaliado, ou seja, apenas a deteco correta. Solta (loose): considera o bad smell avaliado mais outros presentes no item ava- liado, ou seja, deteco correta mais outro bad smell. Os resultados dessa anlise realizada por Marinescu [2002] podem ser vistos na Tabela 3.3. Seus resultados mostram que possvel identicar automaticamente bad smells em cdigo fonte. Percebe-se que a quantidade de falso positivo inferior a quantidade de falhas reais encontradas, indicando a eccia do mtodo. A metodologia denida por Marinescu de grande importncia para avaliar estratgias de deteco. Posteriormente, Marinescu et al. [2005] denem uma ferramenta, iPlasma [2013], para automatizar algumas de suas estratgias de deteco para bad smells. A fer- ramenta foi feita para detectar bad smells em cdigo fonte. A Figura 3.3 mostra a estrutura de iPlasma. A ferramenta iPlasma denida em quatro camadas. A primeira camada, deno- minada Model Extractors, a camada responsvel por realizar a anlise sinttica do cdigo fonte, seja o cdigo em C++ ou Java. As informaes extradas do cdigo fonte pelo analisador sinttico so importantes para construir uma nova camada denominada Models, responsvel por organizar e armazenar todas as informaes extradas do c- digo fonte. Essa camada utilizada pela terceira camada que se chama Analyses. A camada Analyses responsvel por gerar as mtricas, denir as estratgias de deteco para identicao dos bad smells e denir os modelos de qualidade. A ltima camada refere-se ao Front-end que faz a interface entre o sistema e o usurio; ela que fornece as informaes para o engenheiro de software. 3.3. Falhas de Software e Bad Smells 25 Figura 3.3. Estrutura do iPlasma. Fonte: Marinescu et al. [2005] 3.3 Falhas de Software e Bad Smells Sommerville [2007] dene falha de software como "incapacidade do software de realizar a funo requisitada (aspecto externo)". DAmbros et al. [2010] prope relacionar bad smells com falhas de software. Os autores armam que 90% dos problemas de software esto relacionados a manuteno e que mtricas somente sero efetivas se forem combinadas formando estratgias de deteco. DAmbros et al. [2010] analisam mtricas e dados nas ocorrncias de falhas em seis softwares: Lucene, Maven, Mina, Eclipse CDT, Eclipse PDE UI e Equinox, que so das comunidades do Apache e do Eclipse. Essa escolha se deu devido ao fato dos softwares pertencerem a diferentes contextos e por terem muitas pessoas envolvidas no seu desenvolvimento. Para a realizao do trabalho, foi avaliada a frequncia de bad smells nos softwa- res. Tambm foi avaliada a correlao entre os bad smells e falhas de softwares em vrias verses deles. O objetivo dessa anlise foi avaliar se os bad smells induzem s falhas de software. As estratgias de deteco utilizadas para identicar os bad smells usados por DAmbros et al. [2010] foram propostas por Lanza et al. [2006]. Os bad smells avaliados foram, Shotgun Surgery, Brain Method, Feature Envy, Intensive Coupling e Dispersed Coupling denidos na Seo 2.2. Os cdigos fonte dos softwares avaliados foram coletados em repositrios CVS 26 Captulo 3. Trabalhos Relacionados disponibilizados pelos desenvolvedores. Para analisar o cdigo fonte, foi utilizado o software Infusion [2012], que realiza uma anlise sinttica e posteriormente gera um arquivo em uma linguagem independente de meta dados de sistemas orientados por ob- jetos denominado FAMIX. O arquivo FAMIX foi dado como entrada para o framework Moose [2013], que informou as estatsticas dos bad smells nos softwares avaliados. DAmbros et al. [2010] extraram e relacionaram as falhas com as classes dos sistemas avaliados utilizando o repositrio CVS. Foi realizada novamente uma anlise sinttica de cada sistema gerando um arquivo FAMIX e, a partir dele, foi extrado o nome de cada classe dos sistemas. Foram analisados os logs de erros de cada commit do repositrio e os dados de erros foram relacionados com suas respectivas classes. Para obter os relatrios de bugs foram usadas as ferramentas Bugzilla e Jira. Para avaliar a relao entre bad smells e falhas de softwares foram realizados dois experimentos: anlise de correlao e anlise delta. Anlise de correlao: analisa a correlao entre bad smells e defeitos. Anlise delta: investiga, em um perodo de tempo, se o crescimento de bad smells acompanha o crescimento de defeitos. Para os seis softwares foram coletadas mltiplas verses, uma a cada duas sema- nas. Em seguida foram extrados os dados relativos a bad smells e falhas do software. O nmero de classes, falhas e bad smells varia entre verses. Diferente do bad smells, uma mesma falha pode afetar vrias classes. 3.3.1 Anlise de Correlao A partir dos dados coletados, DAmbros et al. [2010] os analisaram para identicar quais bad smells so mais recorrentes em um determinado sistema e quais so mais recorrentes em todos os sistemas. Na anlise de correlao avaliaram-se duas questes.: Os bad smells esto relacionados com as falhas de software ? Algum bad smell est mais presente do que outros em todos os sistemas ? Os resultados de DAmbros et al. [2010] concluiram que no existe um bad smell predominante em todos os sistemas, e que valores de correlao acima de 0.4 conguram forte correlao de acordo com estudos da literatura. Os autores avaliaram que existem dois tipos de sistemas: um em que os bad smells no possuem tanta relao com as falhas; 3.3. Falhas de Software e Bad Smells 27 outro em que um ou poucos bad smells possuem forte relao com as falhas. 3.3.2 Anlise Delta O objetivo da anlise delta vericar se o crescimento de bad smells acompanha o crescimento das falhas de software. Esse experimento teve como objetivo investigar se: o crescimento dos bad smells est relacionado as falhas de software; h um bad smell que inuencia falhas mais que os outros; a relao do crescimento de falhas acompanha o crescimento dos bad smells. DAmbros et al. [2010] concluram que: o crescimento da quantidade de bad smells est relacionado s falhas de software. Porm, isso no regra geral para todos os bad smells em todos os sistemas; no h um bad smell que inuencie mais no crescimento do nmero de falhas do que os outros; existem softwares em que a correlao entre falhas e bad smells baixa, mas o crescimento de um acompanha o outro ao longo das verses; existem softwares que falhas e bad smells no crescem juntos ao longo das verses, mas a correlao entre eles alta. Eles tambm concluram que em alguns sistemas, no primeiro experimento observa-se que um bad smell F predominantemente mais correlacionado com as falhas ao longo das verses. Porm no segundo experimento seu crescimento no acompanha o nmero de falhas no sistema. Uma possvel explicao para isso que um sistema possui por natureza o bad smell F, porm os desenvolvedores sabem lidar com esse problema. Tambm existem aqueles bad smells que possuem baixa correlao com as falhas de um sistema, porm um acrscimo desse bad smell causa falhas no sistema. Isso corrobora com a explicao anterior, pois como o bad smell no est na natureza do projeto, uma explicao possvel que qualquer acrscimo nele causa impacto nas falhas. DAmbros et al. [2010] armam que uma das limitaes de seu trabalho est rela- cionado com o fato dos valores referncia utilizados, extrados dos estudos de Marinescu [2002], serem estatisticamente avaliados de um conjunto de sistemas. 28 Captulo 3. Trabalhos Relacionados Com os resultados dos experimentos, DAmbros et al. [2010] concluiram ar- mando que os bad smells possuem correlao com as falhas de software, que existem bad smells mais frequentes, mas que no existe um bad smell que seja mais correlacio- nado com falhas do que os outros. 3.4 Bad Smells em Modelos UML A maioria dos trabalhos desenvolvidos at hoje esto relacionados deteco de bad smells extrados exclusivamente do cdigo fonte. Embora detectar desvios de projeto em cdigo fonte seja til para evitar a degradao do software, necessrio tambm que existam meios para se identicar problemas desde o incio do ciclo de vida do sistema. Nesse sentido, o trabalho de Bertran [2009] dene estratgias de deteco que podem ser aplicadas a diagramas UML. O propsito do trabalho denir tcnicas que encontrem os mesmos elementos problemticos do projeto, quando extrados do cdigo fonte, mas que sejam aplicados a diagrama de classes. No trabalho de Bertran [2009] foram considerados seis bad smells: God Class, Data Class, Long List Parameter, Shotgun Surgery, Misplaced Class e Shotgun Surgery. Bertran [2009] desenvolveu uma ferramenta, denominada QCDTool, com o ob- jetivo de automatizar o controle de qualidade em modelos UML, ou seja, a aplicao automatizada das estratgias propostas e dos modelos de qualidade. Tal ferramenta foi utilizada em dois estudos experimentais. O primeiro estudo teve por objetivo vericar se os valores das mtricas obtidos em diagramas de classes correspondiam queles ob- tidos em cdigo fonte. Para isso, foram extrados dados do cdigo fonte e do diagrama de classes de 9 sistemas, e os valores obtidos foram comparados. O segundo estudo props a aplicao do modelo de qualidade QMOOD em uma sequncia de verses do framework JHotdraw com o objetivo de avaliar, via mtricas, a degradao do software. Dada a grande relao do trabalho de Bertran [2009] com o tema de pesquisa proposto nesta dissertao, esta seo apresenta o seu trabalho em mais detalhes. 3.4.1 O Modelo de Qualidade QMOOD A qualidade de um software deve ser denida em termos de atributos de produtos de software que so de interesse do usurio. Utilizar os atributos internos de um software a m de predizer os atributos externos que so denidos pelo usurio uma tarefa fundamental. Por causa disso, engenheiros de software deniram na literatura modelos de qualidade para a estimativa dos atributos externos em termos de atributos internos. 3.4. Bad Smells em Modelos UML 29 Bertran [2009] utilizou o modelo de qualidade QMOOD (Quality Model for Object- Oriented Design) (Bansiya & Davis [2002]), que prope estimar os atributos de quali- dade que so de interesse para os usurios. Esse modelo tem um formato hierrquico, no qual os nveis superiores fazem referncias aos atributos externos de qualidade de um software, como exibilidade e facilidade de uso, e os atributos externos so com- postos por um ou mais atributos internos de um software. QMOOD decomposto em quatro nveis como mostra a Figura 3.4. Figura 3.4. Nveis do modelo de qualidade QMOOD. Fonte: Bertran [2009] Os atributos de qualidade esto relacionados a atributos externos de qualidade, que se baseiam em um conjunto denido pela norma ISO9126. Os atributos utilizados no QMOOD por Bertran [2009] foram: funcionalidade, eccia, facilidade de compre- enso, facilidade de extenso, usabilidade e exibilidade. As propriedades do projeto orientado por objetos so avaliadas examinando as classes, mtodos e atributos de um modelo, ou seja, os atributos internos. Abordam tamanho, hierarquia, coeso, abstrao, acoplamento, herana, polimorsmo, compo- sio e troca de mensagens entre classes. As mtricas de projeto orientado por objetos utilizadas no trabalho de Bertran [2009] so mostradas na Figura 3.5. Os componentes de projeto orientados por objetos so os elementos do diagrama: classes, atributos, mtodos, relaes como composio e herana. Os componentes de projeto so os responsveis por fornecer informaes para gerar as mtricas do modelo. Por sua vez, o conjunto de mtricas forma as propriedades de projeto, como por exemplo, os valores de acoplamento e coeso de um modelo. As propriedades, quando aplicadas em frmulas, geram os valores dos atributos de qualidade, ou seja, os atributos externos de um modelo. Um exemplo de uma frmula do QMOOD para um dos atributos de qualidade externa, facilidade de extenso, utilizada no trabalho : Facilidade de extenso = 0, 25 coesao 0, 25 acoplamento + 0, 25 trocademensagens + 0, 5 tamanho 30 Captulo 3. Trabalhos Relacionados Figura 3.5. Mtricas utilizadas no modelo QMOOD. Fonte: Bertran [2009] No trabalho de Bertran [2009] o modelo QMOOD no foi integrado ao mecanismo de deteco de bad smells, foi desenvolvido separadamente dentro do QCDTool, mas a inteno de trabalho futuro da autora de que utilizando os dois mecanismos de 3.4. Bad Smells em Modelos UML 31 forma integrada, se ter a estimativa dos atributos externos de qualidade e a detec- o/localizao de possveis entidades que causam anomalias de projetos. 3.4.2 Estudos Experimentais A ferramenta QCDTool, utilizada para realizao dos estudos experimentais, foi desen- volvida pela prpria Bertran [2009]. QCDTool responsvel por realizar a coleta de dados para identicar os 6 bad smells considerados no trabalho e por aplicar o modelo QMOOD, ambos para diagramas de classe. No primeiro estudo de caso a ferramenta buscou avaliar se os problemas de pro- jeto encontrados em cdigos fonte so os mesmos identicados em seu diagrama de classes correspondente. O objetivo foi avaliar a acurcia 2 , preciso 3 e o recall 4 entre os valores obtidos para cdigo fonte e o diagrama para os 6 bad smells. Para isso, foram utilizados nove sistemas, sendo alguns softwares de cdigo aberto e outros sistemas de- senvolvidos em trabalhos de cursos acadmicos. Todos os sistemas foram desenvolvidos na linguagem Java. Os resultados do estudo de caso mostraram que as estratgias de deteco dos bad smells Data Class, God Class e God Package estavam correlacionadas signicativa- mente com suas correspondentes verses para o cdigo. As estratgias Long Parameter List e Data Class apresentaram 100% nos graus de recall. A God Package apresentou 100% de preciso, o que indica que a Shotgun Surgery apresentou alto grau de simila- ridade dos valores entre cdigo fonte e o modelo. Isso signica que todas as entidades que tiveram esses seis problemas de projeto no cdigo fonte foram detectadas pela estratgia proposta para o modelo. Porm, algumas das entidades identicadas como problemticas no modelo no foram identicadas como tal no cdigo. O segundo estudo de caso teve como objetivo avaliar a usabilidade do modelo de qualidade QMOOD em diagramas de classe. Este modelo foi aplicado em uma sequn- cia de verses do framework JHotDraw [2012]. Foram avaliadas ao total 4 verses do aplicativo. Os atributos de qualidade externos avaliados nos modelos foram: facilidade de compreenso, exibilidade e reusabilidade. A avaliao desse estudo de caso consis- tiu em avaliar valores manualmente de uma verso para outra e vericar se a alterao desses valores correspondiam a diferenas signicativas na estrutura do software. As mtricas consideradas avaliaram os seguintes aspectos: abstrao, acoplamento, coe- so, complexidade, composio, encapsulamento, polimorsmo, tamanho e troca de mensagens. 2 Representa o grau de veracidade dos resultados. 3 Corresponde relevncia dos resultados obtidos. 4 Representa a habilidade para recuperao dos resultados relevantes de acordo consulta realizada. 32 Captulo 3. Trabalhos Relacionados Os resultados da aplicao do modelo QMOOD nos diagramas de classe mostra- ram que os valores das mtricas que avaliam os atributos de qualidade reusabilidade e exibilidade aumentaram ao longo das quatro verses. Isso aconteceu pelo aumento das funcionalidades ao longo das verses do software. Alm disso, o atributo relacio- nado a qualidade facilidade de compreenso degradou. Isto foi motivado pelo fato que novas funcionalidades e caractersticas foram inseridas para aumentar a capacidade do sistema por meio da implementao de novas classes e mtodos das classes j existentes. 3.5 Consideraes Finais Os trabalhos de Girgis et al. [2009], Soliman et al. [2010] e Nuthakki et al. [2011] discu- tem acerca de extrao de mtricas a partir de modelos UML. Esses trabalhos indicam que o diagrama de classes o modelo predominante quando o foco medio de soft- ware a partir de modelos UML. Esses trabalhos tambm utilizam o formato de arquivo XMI para representar as mtricas coletadas do diagrama de classes. Porm, nenhum desses trs trabalhos relaciona as mtricas com atributos externos de um sofware, ou seja, no fornece informaes relevantes acerca do projeto a ser desenvolvido. Os trabalhos de Marinescu [2002] e Marinescu [2004] apresentam uma soluo para transformar mtricas em informaes relevantes para detectar bad smells. Porm, esses trabalhos lidam apenas com informaes coletadas em cdigos fonte, que em geral passam a existir apenas em fases j avanadas do ciclo de vida dos softwares. O trabalho de Bertran [2009] o mais prximo deste trabalho de mestrado. Nele, a autora associa mtricas extradas de diagramas de classes a bad smells. Para automa- tizar tal tarefa, a autora desenvolveu uma ferramenta para coleta desses dados. Muito embora o trabalho de Bertran [2009] tenha denido estratgias de deteco que po- dem ser aplicadas a diagramas UML, algumas questes foram deixadas em aberto: (1) Bertran [2009] relata, por exemplo, a importncia de redenir os valores referncia uti- lizados em seus estudos experimentais, denidos por Marinescu [2002], pois considera que a tcnica utilizada por Marinescu [2002] no seja a melhor forma de den-los. (2) Bertran [2009] relata tambm que os experimentos foram realizados apenas por uma pessoa e que o contexto e tamanho dos softwares utilizados no diferem tanto. (3) A autora ainda sugere que novos experimentos sejam realizados para identicar novos bad smells em outros diagramas da UML. O trabalho de dissertao apresentado neste documento visa contribuir para a soluo do problema de identicar desvios de projeto em fases iniciais do ciclo de vida do sistemas. Especicamente, este trabalho se concentra em denir um mtodo para 3.5. Consideraes Finais 33 identicao de bad smells a partir de diagramas de classes, bem como desenvolver uma ferramenta para viabilizar a aplicao e a avaliao do mtodo proposto. Para isso, este trabalho se baseia nos seguintes aspectos: denir um mtodo para deteco de bad smells em diagramas UML que utilize mtricas de software e seus respectivos valores referncia propostos na literatura; criar e disponibilizar uma ferramenta, UMLsmell, que identique bad smells em diagrama de classes; denir uma tcnica para avaliar o mtodo proposto nessa dissertao que no dependa de cdigo fonte e avalie quantitativa e qualitativamente os resultados; avaliar uma quantidade maior de softwares e com tamanhos tambm maiores do que os utilizados por Marinescu [2002] e Bertran [2009], para avaliar a escalabi- lidade do mtodo proposto nesta dissertao; realizar experimentos manuais com critrios bem denidos e com uma quantidade considervel de avaliadores. Captulo 4 Identicao de Bad Smells a partir de Diagramas de Classes Neste captulo apresentado o mtodo para identicao de bad smells proposto nesta dissertao. Alm disso, so descritas as principais funcionalidades, arquitetura e in- terfaces da ferramenta, UMLsmell, que automatiza o mtodo proposto. 4.1 Mtodo Proposto Diferente de outros mtodos propostos na literatura que avaliam a qualidade de soft- ware em modelos UML, o mtodo denido nesta dissertao considera valores referncia que, associados s mtricas de software, permitem identicar as partes problemticas de um software, ou seja, o mtodo vale-se das mtricas de software para denir estratgias de deteco que identiquem bad smells. Inicialmente, foram identicados, dentre os bad smells descritos na literatura, aqueles que podem ser aplicados a modelos de classe da UML. Esses bad smells e as mtricas que podem ser aplicadas para identic-los so descritos a seguir. Divergent Change: este bad smell est associado s mtricas de relacionamen- tos do tipo eferentes que permitem avaliar se uma classe pode sofrer alteraes decorrente de modicaes em outras classes. God Class: este bad smell est associado s mtricas que calculam a quantidade de relacionamentos e mtricas que calculam o nmero de mtodos da classe ava- liada, que permitem avaliar se uma classe possui muitos mtodos e se muitas classes dependem da classe avaliada. 35 36 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes God Package: este bad smell est associado s mtricas de relacionamentos en- tre pacotes e classes de diferentes pacotes que permitem avaliar se as classes que possuem o maior nmero de outras classes dependentes (conexes aferentes) concentram-se em poucos pacotes. Indecent Exposure: este bad smell est associado s mtricas de atributos pblicos que permitem avaliar o encapsulamento das classes. Large Class: este bad smell est associado s mtricas de quantidade de mtodos que permitem avaliar o tamanho de uma classe. Long List Parameter: este bad smell est associado s mtricas de parmetros dos mtodos que permitem avaliar a quantidade de parmetros de um mtodo. Shotgun Surgery: este bad smell est associado s mtricas de relacionamentos do tipo aferentes que permitem avaliar se a alterao em uma classe implicar em alteraes em outras classes. A escolha dos bad smells avaliados nesta dissertao foi limitada pela carncia de valores referncia propostos na literatura. Os valores referncia usados foram denidos por Ferreira et al. [2012]. A escolha desses valores referncia se deu por duas razes principais: primeiro por que os mesmos consideram a frequncia de vrios softwares e no simplesmente a mdia, e segundo por que os valores referncia foram avaliados empiricamente, e h poucos valores referncia propostos na literatura. Dentre as m- tricas para as quais a autora prope valores referncia, trs delas podem ser obtidas via diagramas de classes: Nmero de Conexes Aferentes (NCA); Nmero de Mtodos Pblicos (NMP); Nmero de Atributos Pblicos (NAP). Essas trs mtricas permitem identicar os bad smells God Class, Shotgun Surgery e Indecent Exposure. Os valores referncia das mtricas de Ferreira et al. [2012] so classicados como: Bom: so os valores mais frequentes para mtricas em softwares de boa qualidade; Regular: corresponde a valores pouco frequentes para mtricas em softwares de boa qualidade; 4.1. Mtodo Proposto 37 Ruim: corresponde a valores raros para mtricas em softwares de boa qualidade. A idia bsica por trs das faixas bom, regular ou ruim a seguinte: uma vez que os valores so frequentes em softwares, isso indica que eles correspondem prtica comum no desenvolvimento de software de alta qualidade, o que serve como um pa- rmetro de comparao de um software com os demais. Da mesma forma, os valores pouco frequentes indicam situaes no usuais na prtica, portanto, pontos a serem considerados como crticos. Por esta razo, neste trabalho, optou por considerar as fai- xas regular e ruim na identicao de bad smells. A seguir, so descritas as estratgias de deteco propostas para esses trs bad smells. As mtricas que denem a estratgia de deteco do bad smell God Class consi- deram seus relacionamentos com outras classes e o tamanho da classe avaliada. O God Class identicado via mtricas NCA e NMP. A mtrica NCA verica a inuncia da classe avaliada sobre as outras classes do software, ou seja, a quantidade de classes que usam os servios da classe avaliada. A mtrica NMP permite avaliar o tamanho de uma classe e a quantidade de servios a oferecer pela quantidade de mtodos. A estratgia de deteco adotada para identicao do God Class pelo mtodo proposto apresen- tada na Figura 4.1. Caso as duas mtricas avaliadas estejam dentro da faixa regular, a avaliao do God Class considerada como regular e caso uma das mtricas esteja dentro da faixa ruim de acordo com os valores referncia , o God Class considerado como crtico (ruim), caso contrrio a classe no considerada como problemtica. Figura 4.1. Estratgia de deteco para o God Class. O Shotgun Surgery identicado via mtrica NCA, que dene quantas classes dependem da classe avaliada, uma vez que quando uma classe alterada, todas as outras classes que dependem dela esto sujeitas a mudanas. A estratgia de deteco para identicao do Shotgun Surgery apresentada na Figura 4.2 e sua identicao em uma classe e em qual faixa se encontra, regular ou ruim, equivalente mtrica avaliada. 38 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes Figura 4.2. Estratgia de deteco para o Shotgun Surgery. Um bom encapsulamento acontece quando os dados, atributos, de uma classe so ocultos e seus servios, mtodos, teis para as demais classes, so pblicos (Sommerville [2007]). Classes seguras so bem encapsuladas. O Indecent Exposure um bad smell referente falta de encapsulamento de classes. Ele pode ser identicado via mtrica NAP, que dene quantos atributos de uma classe so pblicos. A estratgia de deteco para identicao do Indecent Exposure apresentada na Figura 4.3. A identicao do Indecent Exposure em uma classe e em qual faixa se encontra, regular ou ruim, equivalente mtrica avaliada. Figura 4.3. Estratgia de deteco para o Indecent Exposure. 4.2 A Ferramenta UMLsmell O objetivo deste trabalho de dissertao a automatizao na identicao de bad smells em diagramas de classe da UML. Para atingir este objetivo foi proposto um mtodo baseado em mtricas e seus valores referncias, bem como foi projetada e implementada uma ferramenta denominada UMLsmell que permite a aplicao do mtodo proposto. Esta seo apresenta a sua arquitetura, a metodologia usada para seu desenvolvimento, incluindo as decises de projeto, as funcionalidades oferecidas e sua implementao. 4.2.1 Requisitos de UMLsmell A primeira tarefa para o desenvolvimento da UMLsmell foi a denio de seus casos de uso, ilustrados no diagrama da Figura 4.4 e descritos a seguir. 4.2. A Ferramenta UMLsmell 39 Figura 4.4. Casos de Uso da UMLsmell. Denir valores referncia: permite que o usurio personalize os valores referncia em regular e ruim para cada mtrica coletada pela ferramenta. Esta funcionali- dade foi implementada para que o usurio tenha liberdade de escolher os valores referncia que preferir utilizar. Criar projeto: cria um arquivo que ir armazenar todas alteraes feitas nos valores referncia. Esta funcionalidade til caso o usurio altere os valores refe- rncia conforme sua necessidade e pretenda salv-los para utilizaes posteriores da UMLsmell. Gerar mtricas: permite que o usurio possa selecionar, dentre as mtricas exis- tentes no sistema, aquelas para as quais ele deseja gerar relatrios para anlises posteriores. Esta funcionalidade permite ao usurio vericar os valores das m- tricas selecionadas para as classes do software. Identicar bad smells: o ponto central da ferramenta. Sua funcionalidade con- siste em receber como entrada um arquivo XMI, que corresponde ao diagrama de classes a ser analisado, e identicar via mtricas, em quais classes foram identi- cados os bad smells e em qual nvel regular ou ruim, conforme o mtodo para identicao de bad smells proposto neste trabalho. Exportar resultados: permite que a anlise das mtricas e dos bad smells seja exportada para o formato de planilha, aceito pela maioria das ferramentas de planilhas disponveis atualmente. 40 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes 4.2.2 Implementao de UMLsmell Denidas as funcionalidades de UMLsmell, o prximo passo foi denir a sua estrutura. A estrutura de UMLsmell ilustrada na Figura 4.5. Figura 4.5. Estrutura da UMLsmell. UMLsmell recebe como entrada um arquivo XMI, no qual realizada a anlise sinttica com o objetivo de extrair as seguintes informaes: classes, atributos, m- todos, parmetros e relacionamentos. Esses dados so armazenados internamente nas estruturas de dados denidas pelo programa para consultas posteriores, tal que, a partir desses dados a funcionalidade Gerar mtricas possa fornecer as informaes de mtri- cas das classes do software ao usurio. Essas mtricas permitem que a funcionalidade Identicar bad smells detecte os bad smells do software analisado. A ferramenta foi desenvolvida na linguagem Java e contm 3205 linhas de cdigo. UMLsmell foi projetada e desenvolvida por dois programadores, sendo um aluno de mestrado, autor deste trabalho, e outro de iniciao cientca. A Figura 4.6 exibe o diagrama de classes, das camadas de controle e modelo, usado para desenvolver a ferramenta. Na camada de modelo foram criadas quatro classes: ClassData, Attribute, 4.2. A Ferramenta UMLsmell 41 Method e Relationship. Essas classes so responsveis por armazenar na memria as informaes coletadas durante a anlise sinttica. Figura 4.6. Diagrama de Classes da UMLsmell. ClassData: classe responsvel por informaes relativas s classes e interfaces do software avaliado. Tambm mantm vetores com dados sobre atributos, mtodos e relacionamentos das classes. Attribute: classe responsvel pelas informaes relativas aos atributos do soft- ware. Informa o nome de um atributo, tipo e tipo de acesso. Method: classe responsvel pelas informaes relacionadas aos mtodos do soft- ware. Informa o nome do mtodo, seu tipo de acesso e possui uma lista do tipo Attribute com os parmetros de entrada do mtodo. 42 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes Relationship: classe responsvel pelas informaes relativas aos relacionamentos entre as classes do software. Informa as classes nas duas pontas do relacionamento e qual o tipo de relacionamento. Existe tambm um conjunto de classes que possui como superclasse a classe Me- tric, tal que todas as suas subclasses so as mtricas existentes no sistema. O padro de projeto Strategy, apresentado por Gamma et al. [2006], foi usado nesta parte da im- plementao de tal forma que as subclasses herdam as informaes gerais das mtricas, como nome, valor e valor referncia, e, as subclasses, via polimorsmo, implementam o mtodo generateMetric, tal que cada subclasse possui sua forma de calcular a respectiva mtrica. Esse mtodo permite facilmente criar outras mtricas no sistema. Na camada de controle foi criada uma classe, a DataCollector. Essa classe responsvel por ler o arquivo XMI, coletar todas as informaes e criar as instncias da camada de entidade. Essa classe funciona como o analisador sinttico do arquivo XMI. Para coletar os dados necessrios para gerar as mtricas que permitiro a iden- ticao de bad smells, necessrio denir quais so as informaes relevantes em um diagrama de classes. Neste trabalho foram usadas as seis informaes sugeridas por Genero et al. [2005], apresentadas na Seo 2.1. So elas: pacotes, classes, atributos, mtodos, parmetros e relacionamentos. As informaes extradas do diagrama de classes so armazenadas em blocos muito bem denidos no XMI. Os blocos do tipo <element> representam tanto os pacotes, quanto as classes e interfaces. O que os diferencia o atributo "xmi:type" denido nas tags desses blocos. Fora do bloco <element> tambm existem os blocos <packagedElement> que denem todas informaes como classes, interface, atributos, mtodos, parmetros e relacionamentos presentes em um pacote. Dentro do bloco <element> existem os blocos <attribute>, <operation> e <links> que fornecem todas informaes referentes aos atributos, mtodos e relaci- onamentos do elemento em questo, classe, interface ou pacote. Dentro do bloco <operation> existem os blocos <parameter> que so os parmetros do mtodo em questo. Informaes referentes a nomes, nveis de acesso (privado, pblico e protegido), nmero de identicao dos elementos e todas outras informaes referentes a cada item, encontram-se dentro dos blocos ou em forma de atributo em cada bloco. 4.2. A Ferramenta UMLsmell 43 4.2.3 Interface com o Usurio Desenvolvida a estrutura de UMLsmell, o prximo passo foi a criao das interfaces grcas do sistema. So elas: Figura 4.7. Tela com a lista de projetos criados por UMLsmell. Figura 4.8. Tela para seleo de mtricas de UMLsmell. Tela com a Lista de Projetos Criados: a tela inicial, que apresenta uma lista 44 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes Figura 4.9. Telas para a denio dos valores das mtricas de UMLsmell. Figura 4.10. Tela para seleo de mtricas para avaliao em UMLsmell. de todos os projetos j criados para serem carregados. Esta tela mostrada na Figura 4.7. Telas para a Denio dos Valores das Mtricas: so duas telas, uma para selecio- nar uma mtrica e outra para denir os valores referncia da mtrica selecionada, ilustradas nas Figuras 4.8 e 4.9, respectivamente. Telas com as Estatsticas das Mtricas: so duas telas, uma para selecionar as mtricas e outra para exibir os valores das mtricas do arquivo XMI carregado, 4.2. A Ferramenta UMLsmell 45 Figura 4.11. Tela com as estatsticas de mtricas de UMLsmell. Figura 4.12. Tela para a seleo de bad smells para avaliao em UMLsmell. mostradas nas Figuras 4.10 e 4.11, respectivamente. Telas com as Estatsticas dos Bad Smells: so duas telas, uma para selecionar os bad smells a serem avaliados, mostrada na Figura 4.12, e outra com os valores dos bad smells para cada classe avaliada, mostrada na Figura 4.13. 46 Captulo 4. Identificao de Bad Smells a partir de Diagramas de Classes Figura 4.13. Tela para as estatsticas de bad smells de UMLsmell. 4.3 Diferenciais do Mtodo Proposto Os principais trabalhos relacionados a esta dissertao so os de Marinescu [2002] e Bertran [2009]. Estes trabalhos possuem algumas limitaes que foram exploradas pelo mtodo proposto nesta dissertao. O primeiro ponto que tanto Marinescu [2002] quanto Bertran [2009] utilizam valores referncias obtidos a partir da mdia de vrios softwares. Essa tcnica pode prejudicar os resultados pois parte-se do princpio que os valores das mtricas seguem uma distribuio normal. Todavia, a literatura (Ferreira et al. [2012]) tem convergido para os achados de que boa parte das mtricas tm valores que seguem uma distribuio de cauda pesada e, consequentemente, a mdia no representativa. Neste trabalho de dissertao foram escolhidos valores referncia que consideram frequncia em vez da mdia dos valores referncia dos softwares. Diferente dos softwares avaliados por Marinescu [2002] e Bertran [2009], neste trabalho tambm foram avaliados softwares de diversos tamanhos e contextos. A avaliao do mtodo proposto descrita no Captulo 5. A avaliao realizada tambm se diferencia daquelas realizadas em trabalho anteriores. Ao contrrio dos trabalhos prvios, o mtodo proposto se baseia na utilizao de valores referncia de mtricas associados interpretao apropriada para eles, o que pode facilitar o uso do mtodo nas tarefas de refatorao de software. Outro aspecto comum nos dois trabalhos que a avaliao manual para identicar erros na avaliao automtica envolveu apenas os autores das obras, de tal forma que 4.3. Diferenciais do Mtodo Proposto 47 os resultados da avaliao manual podem favorecer involuntariamente os resultados da avaliao automtica. O mtodo proposto neste captulo foi avaliado por 15 avaliadores de forma que os resultados automticos possam ser comparados com o consenso de um grupo consideravelmente grande. Outro ponto do trabalho de Bertran [2009] que para validar seus resultados, esses foram comparados aos resultados de cdigo fonte. Porm, existem aspectos no cdigo fonte que no podem ser avaliados em modelos de diagramas de classes. Neste trabalho de dissertao, a avaliao automtica dos resultados considerou apenas os diagramas de classes. Nos experimentos realizados por Bertran [2009], os relacionamentos que no foram gerados automaticamente via engenharia reversa foram criados manualmente. Todavia, a quantidade de relacionamentos no criados pelo Enterprise-Architect [2013] grande. portanto possvel que por fatores humanos, alguns relacionamentos sejam ignorados. Para evitar esse problema, nesse trabalho de dissertao foi projetada e implemen- tada uma ferramenta para identicar e criar automaticamente os relacionamentos no criados pelo Enterprise-Architect [2013]. Captulo 5 Avaliao do Mtodo Proposto Este captulo relata os experimentos realizados para avaliar o mtodo proposto e os seus respectivos resultados. O objetivo desses experimentos foi avaliar o mtodo para identicao de bad smells a partir de diagramas de classes. 5.1 Metodologia Os experimentos investigam as seguintes questes de pesquisa: RQ1: as mtricas de software e seus respectivos valores referncia auxiliam a identicar bad smells em um software? RQ2: os bad smells identicados pelo mtodo em um software so corresponden- tes queles identicados por avaliadores com formao em Engenharia de Software? Para responder essas questes foram realizados os dois conjuntos de experimentos descritos a seguir. Anlise de softwares reestruturados: este experimento avalia a identicao au- tomtica de bad smells em duas verses de cada software, tal que uma verso a refatorao da outra. Tendo em vista que uma refatorao uma modicao realizada no software para melhorar sua estrutura, espera-se encontrar mais bad smells na verso no refatorada, indicando que o mtodo proposto ecaz no re- conhecimento de bad smells automaticamente. Esse tipo de anlise foi empregada por Marinescu [2002] para avaliar sua proposta, porm ele a aplicou em somente um software. Neste trabalho, so analisados os projetos de sete softwares abertos. Avaliao Manual: este experimento avalia manualmente a identicao de bad smells e os compara com os resultados da UMLsmell a m de avaliar a eccia da estratgia de deteco proposta. 49 50 Captulo 5. Avaliao do Mtodo Proposto Seo 5.2 apresenta a anlise de softwares reestruturados e Seo 5.3 a avaliao manual. 5.1.1 Diagramas de Classes dos Experimentos Foram realizados experimentos a partir dos diagramas de classes dos seguintes softwares abertos desenvolvidos em Java: JHotdraw, Struts, HSqlDB, JSLP, Log4J e Sweethome 3D. A seleo desses softwares deve-se ao fato dos mesmos serem considerados como refatorados, conforme relatado pelos autores Dig & Johnson [2005] e Soares et al. [2011]. Isso signica que os desenvolvedores do software, a cada verso lanada, se preocuparam em melhorar a arquitetura desses softwares. Para a escolha dos softwares da avaliao manual, um conjunto de software pequenos foram escolhidos no repositrio Github e foram analisados pelo UMLsmell, para determinar quais deles possuiam mais bad smells. Neste processo foram escolhidos o Picasso e JSLP. O fato desses softwares serem pequenos viabiliza a inspeo manual pelos avaliadores. Devido a carncia de diagramas de classes para realizar os experimentos, os dia- gramas dos softwares utilizados para esta avaliao foram obtidos a partir de engenha- ria reversa usando a ferramenta Enterprise-Architect [2013] para ler os cdigos fonte e gerar os diagramas de classes. Como a ferramenta Enterprise-Architect [2013] no capaz de criar todos os relacionamentos existentes no cdigo fonte, utilizou-se o software DependencyFinder [2013] que a partir do bytecode de um software capaz de gerar um arquivo XML contendo os relacionamentos de dependncia para cada classe do software. Para gerar o diagrama de classes completo automaticamente, a partir das informaes obtidas na engenharia reversa do Enterprise Architect e do resultado reportado pelo Dependency Finder, neste trabalho foi desenvolvida uma ferramenta para criar automaticamente todos os relacionamentos de dependncia existentes no cdigo fonte. Essa ferramenta intermediria foi desenvolvida na linguagem Java e recebe como entrada o arquivo XMI do Enterprise-Architect [2013] e o arquivo XML do DependencyFinder [2013]. A ferramenta realiza uma anlise sinttica do arquivo XML e os relacionamentos so criados no arquivo XMI da engenharia reversa feita pelo Enterprise-Architect [2013]. Com isso, obtm-se um arquivo XMI resultante que contm os dados de todass as classes do software e dos relacionamentos existentes entre elas. 5.2. Anlise de Softwares Reestruturados 51 5.2 Anlise de Softwares Reestruturados Esta anlise busca responder a questo de pesquisa RQ1. Para cada software avaliado, foi necessrio gerar dois diagramas de classes: um deles representando a verso usada para avaliar os bad smells e o outro, a verso refatorada do mesmo software. Esse detalhe fundamental para esse experimento, pois dado um software B que representa a refatorao de um software A, espera-se que B apresente menos bad smells que A, visto que a refatorao prope melhorar os aspectos do projeto. A Figura 5.1 mostra como os resultados da UMLsmell foram organizados para cada uma das duas verses do sistema avaliado, considerando V1 a verso do software avaliado e V2 sua verso refatorada. Para cada software usado neste experimento foram geradas trs tabelas como esta, uma para cada bad smells avaliado. Na primeira coluna da tabela ilustrada na Figura 5.1 aparecem as classes presentes na Verso V1. As demais colunas, cujos contedos so relatados a seguir, mostram o resultado da avaliao dos bad smells. Figura 5.1. Tabela com os resultados de UMLsmell. As Colunas 2 e 3 contm os resultados do bad smell avaliado para V1 e V2. O resultado pode ser um dos seguintes valores: bom, que indica que os valores das mtricas que avaliam o bad smell esto dentro da faixa bom de seus valores referncia, ou seja, uma faixa de valores referncia considerados frequentes na maioria dos softwares; regular, quando todas as suas mtricas esto com valores referncia regulares; ruim, quando ao menos uma mtrica est com o valor referncia ruim; e nos outros casos os bad smells esto ausentes, portanto o limiar considerado bom. A coluna denominada Falha Real informa se houve melhora na condio de um bad smell de V1 para V2, ou seja, se em relao ao bad smell avaliado a classe avaliada foi refatorada de V1 para V2. A coluna denominada Falso Positivo, informa se de V1 para V2 uma classe no sofreu melhoria em relao ao bad smell avaliado, por exemplo, uma classe possua o valor ruim para um bad smell em V1 e continuou ruim em V2. Como o software foi refatorado, o esperado que o bad smell no esteja presente na Verso V2. 52 Captulo 5. Avaliao do Mtodo Proposto A coluna denominada Caso Especial apresenta o caso no qual o bad smell piorou de V1 para V2 em uma determinada classe. Esses casos so considerados como especiais pois a expectativa que um software refatorado no apresente resultados piores que na verso no refatorada. O resultado esperado nesse experimento que a coluna Falha Real possua mais ocorrncias do que a coluna Caso Especial, pois isso signica que V2 possui menos ocorrncias de bad smells que V1, que o que se espera de um software refatorado. 5.2.1 Resultados da Avaliao Automtica via UMLsmell Nas prximas sees so descritos os resultados gerados pela UMLsmell para os softwa- res usados neste experimento. Tambm foi feita uma anlise destes resultados para ve- ricar se as estratgias de deteco sugeridas foram ecazes na identicao automtica dos bad smells. 5.2.1.1 Resultados da Avaliao do Framework JHotdraw O JHotdraw um framework para criao de editores grcos. Neste experimento foram avaliadas as Verses 5.2 e 7.0.6 do software JHotdraw correspondendo a V1 e V2, respectivamente. Essa escolha se deu pelo fato de Soares et al. [2011] vericarem que nesse perodo de tempo o software passou por diversas refatoraes que provavelmente afetaram diversas classes. Foram identicadas 171 classes na Verso V1 e 310 na Verso V2. Todas as classes de V1 mantiveram-se presentes na Verso V2, o que talvez indique que a Verso V2 tenha criado novas funcionalidades e refatorado a Verso V1 criando novas classes. Os quantitativos de classes de acordo com a classicao (bom, regular e ruim) para cada bad smell so ilustrados nas Tabelas 5.1 e 5.2. Bad Smell Bom Regular Ruim Shotgun Surgery 101 57 13 God Class 144 13 14 Indecent Exposure 148 22 1 Tabela 5.1. Bad smells no JHotdraw Verso 5.2 5.2. Anlise de Softwares Reestruturados 53 Bad Smell Bom Regular Ruim Shotgun Surgery 293 17 0 God Class 294 7 9 Indecent Exposure 233 68 9 Tabela 5.2. Bad smells no JHotdraw Verso 7.0.6 Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 66 104 1 God Class 23 141 7 Indecent Exposure 14 127 30 Tabela 5.3. Comparao dos bad smells no JHotdraw Verses 5.2 e 7.0.6 Observa-se que mesmo a quantidade de classes tendo aumentado consideravel- mente de uma verso para outra, a equipe de desenvolvimento do JHotdraw reduziu consideravelmente o nvel de acoplamento entre as classes e tambm a concentrao da inteligncia em um pequeno grupo de classes, uma vez que a quantidade de classes com os bad smells God Class e Shotgun Surgery na Verso V2 menor do que na Verso V1. Porm, o mesmo no ocorreu com o encapsulamento das classes. Na Verso V1 foi identicada apenas uma classe com o bad smell Indecent Exposure, enquanto a Verso V2 possui 9 classes com esse bad smell. A comparao entre as Verses V1 e V2 quanto ao nmero de falhas reais, falsos positivos e casos especiais so apresentados na Tabela 5.3. Esses dados permitem veri- car a quantidade de refatoraes de uma verso para outra, referentes aos bad smells avaliados. As falhas reais permitem quanticar quantas classes foram melhoradas de uma verso para outra, as ocorrncias de falso positivo, as classes no refatoradas entre as verses, e, casos especiais, as pioras de uma verso para outra. Para o bad smell Shotgun Surgery, de todas as 171 classes, 104 no sofreram alteraes, apenas uma teve uma piora na verso posterior e 66 classes passaram por melhoria. Em relao ao bad smell God Class, foi identicada uma situao similar ao Shotgun Surgery. Do total de 171 classes, apenas 7 pioraram em relao a esse bad smell, 141 se mantiveram no mesmo nvel, e foram identicadas 23 classes com melhorias no bad smell God Class. 54 Captulo 5. Avaliao do Mtodo Proposto Para o bad smell Indecent Exposure, na Verso V2, as classes pioraram na avali- ao em relao a esse aspecto. Analisando a Tabela 5.1, possvel ver que na Verso V1 o nmero de classes problemticas era 23, sejam elas com valores regulares ou ruins. Analisando a Tabela 5.3, possvel perceber que 14 dessas classes melhoraram, ou seja, 60% delas foram refatoradas. Porm, 30 classes da verso V1 pioraram no aspecto do bad smell Indecent Exposure. Soares et al. [2011] no descrevem se foram feitas, ou no, refatoraes para reduzir a quantidade de atributos pblicos. Uma possvel explicao para que a refatorao no tenha ocorrido que essas caractersticas mostram que essas 14 melhorias provavelmente so resultados da distribuio de inteligncia e reduo do acoplamento do sistema, ou seja, reduziu-se a quantidade de atributos pblicos em uma classe que as concentrava e, por outro lado, os aumentou em outras que assumiram novas responsabilidades. Os resultados encontrados para o software JHotDraw mostram que a estratgia de deteco do mtodo proposto encontrou mais ocorrncias de bad smells na verso no reestruturada, conforme esperado, o que indica que a estratgia proposta capaz de identicar automaticamente a presena de falhas de projeto automaticamente. 5.2.1.2 Resultados da Avaliao do Framework Struts Struts um framework de desenvolvimento da camada controladora para arquitetura MVC (modelo-viso-controle) em Java. As verses avaliadas do software Struts foram as seguintes: V1 referindo-se Verso 1.1 e V2, Verso 1.2.7. H 281 classes na verso V1 e 283 na Verso V2. Todas as classes de V1 mantiveram-se presentes na Verso V2, e apenas duas classes foram acrescentadas, portanto, possvel inferir que, se ocorreu a refatorao, talvez ela tenha ocorrido apenas internamente nas classes, ou ento, houve apenas uma troca de responsabilidades entre as classes. Os resultados de V1 e V2 esto resumidos nas Tabelas 5.4 e 5.5. Bad Smell Bom Regular Ruim Shotgun Surgery 205 64 12 God Class 243 22 16 Indecent Exposure 221 54 6 Tabela 5.4. Bad smells no Struts Verso 1.1 5.2. Anlise de Softwares Reestruturados 55 Bad Smell Bom Regular Ruim Shotgun Surgery 166 101 16 God Class 234 29 20 Indecent Exposure 225 52 6 Tabela 5.5. Bad smells no Struts Verso 1.2.7 Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 5 221 55 God Class 5 258 18 Indecent Exposure 6 272 3 Tabela 5.6. Comparao dos bad smells no Struts Verses 1.1 e 1.2.7 Analisando o bad smell Indecent Exposure percebeu-se que o encapsulamento de algumas classes passou por melhorias, enquanto o de outras piorou. Porm, houve mais melhorias do que pioras. Isso signica que o encapsulamento provavelmente foi um aspecto que passou por refatorao. De acordo com os resultados das Tabelas 5.4 e 5.5, percebe-se que durante a refatorao, o nvel de acoplamento entre as classes aumentou, assim como as classes que concentram inteligncia do sistema, pois para os bad smells Shotgun Surgery e God Class, os valores ruim e regular aumentaram, enquanto o valor bom reduziu. Os resultados de comparao entre V1 e V2 podem ser vistos na Tabela 5.6. De acordo com os resultados, dos itens avaliados, grande parte piorou da Verso V1 para Verso V2. Os bad smells Shotgun Surgery e God Class tiveram uma quantidade muito elevada de classes que pioraram na verso posterior, enquanto a quantidade de classes que melhoraram foi muito baixa. No caso do bad smell Indecent Exposure foi diferente, mais classes melhoraram em vez de piorar. Porm a quantidade de melhorias e pioras de 6 para 3, respectivamente, um valor baixo se for considerado que o Struts possui 271 classes. Desta forma, possivelmente as refatoraes realizadas no foram no sentido de eliminar ou amenizar os bad smells God Class ou Shotgun Surgery. Um ponto que deve ser observado diz respeito aos tipos de alteraes que foram feitas pela equipe de desenvolvimento durante as refatoraes. Dig & Johnson [2005] relatam em seus estudos que a refatorao do Struts priorizou mover mtodos, mover campos, remover mtodos, mudar tipos de argumentos e renomear os mtodos. Com isso, as maiores mudanas foram nos mtodos e nos campos, de forma que reetiu 56 Captulo 5. Avaliao do Mtodo Proposto em melhoria no aspecto de ocultao de informao, referente ao bad smell Indecent Exposure, mas no dos aspectos dos bad smells God Class e Shotgun Surgery. 5.2.1.3 Resultados da Avaliao do Servidor de Banco de Dados HSqlDB O HSqlDB um servidor de banco de dados escrito em linguagem Java. As verses avaliadas neste experimento foram as HSqlDB 1.8.1, referenciadas aqui como V1, e HSqlDB 2.3.1, que a verso refatorada e referenciada aqui como V2. Na Verso V1 foram identicadas 378 classes e na Verso V2, 703 classes. O aumento de classes de uma verso para outra foi de quase o dobro, o que possivelmente se deu devido criao de novas funcionalidades, alm da refatorao para melhoria das classes. Bad Smell Bom Regular Ruim Shotgun Surgery 320 57 1 God Class 352 19 7 Indecent Exposure 314 58 6 Tabela 5.7. Bad smells no HSqlDB Verso 1.8.1 Bad Smell Bom Regular Ruim Shotgun Surgery 595 95 13 God Class 622 41 40 Indecent Exposure 499 172 32 Tabela 5.8. Bad smells no HSqlDB Verso 2.3.1 Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 32 321 25 God Class 11 343 24 Indecent Exposure 32 314 32 Tabela 5.9. Comparao dos bad smells no HSqlDB Verses 1.8.1 e 2.3.1 As Tabelas 5.7 e 5.8 mostram o resumo dos resultados gerados pela UMLsmell para as Verses V1 e V2 do HSqlDB, respectivamente. De acordo com a Tabela 5.9 para o bad smell Shotgun Surgery, observa-se que houve melhoria na Verso V2 em relao a Verso V1. Por outro lado, observa-se 5.2. Anlise de Softwares Reestruturados 57 que para o bad smell God Class houve uma piora. Uma possvel explicao para isso que o aumento de classes na Verso V2 pode ser resultado do acrscimo de novas funcionalidades e tambm do aumento da inteligncia de cada classe. A preocupao em relao ao encapsulamento das classes continuou a mesma, visto que as quantidades de melhorias e pioras so as mesmas. Soares et al. [2011] armam que houve refatoraes no software entre as verses analisadas aqui, mas no detalham os tipos de refatoraes que foram realizadas. A anlise dos resultados desse software mostram que, dentre os bad smells avaliados por UMLsmell, somente no aspecto de Shotgun Surgery houve melhora. 5.2.1.4 Resultados da Avaliao do Protocolo JSLP O JSLP uma implementao pura de SLP (Service Location Protocol ) em Java. As verses avaliadas nos experimentos realizados foram 0.7 e 1.0, que correspondem respectivamente s Verses V1 e V2. Esse um software pequeno, a Verso V1 possui 33 classes e V2 possui 35 classes. O fato do software ser pequeno e existir a diferena de apenas 2 classes entre as verses, indica que poucas mudanas devem ter ocorrido de uma verso para outra, o que pode resultar tambm em poucas alteraes nos bad smells. Bad Smell Bom Regular Ruim Shotgun Surgery 14 18 1 God Class 30 2 1 Indecent Exposure 31 2 0 Tabela 5.10. Bad smells no Jslp Verso 0.7 Bad Smell Bom Regular Ruim Shotgun Surgery 15 20 0 God Class 33 2 0 Indecent Exposure 33 2 0 Tabela 5.11. Bad smells no Jslp Verso 1.0 58 Captulo 5. Avaliao do Mtodo Proposto Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 1 32 0 God Class 1 32 0 Indecent Exposure 0 0 0 Tabela 5.12. Comparao dos bad smells no Jslp Verses 0.7 e 1.0 Observando o resumo dos resultados gerados pela UMLsmell apresentados nas Tabelas 5.10 e 5.11, percebe-se que da Verso V1 para Verso V2 houve um aumento de classes na faixa bom para todos os bad smells avaliados. Tambm possvel ver que na Verso V2 j no existem classes com valores na faixa ruim para nenhum bad smell. Isto posto, possvel deduzir que o software passou por refatoraes referentes aos bad smells analisados por UMLsmell. Os resultados apresentados nas Tabelas 5.10 e 5.11 indicam que houve refatorao da Verso V2 em relao a Verso V1. Portanto, espera-se que sejam identicados mais bad smells em V1 do que em V2. Esses resultados so conrmados pelos resultados mostrados na Tabela 5.12. Tanto para o bad smell Shotgun Surgery quanto para o God Class, houve a melhoria de uma classe em cada um. Os resultados dessa anlise mostram que de fato JSLP passou por modicaes que geraram melhorias em sua estrutura nos aspectos dos bad smells considerados neste trabalho. Isso indica que essas melhorias foram percebidas pelo mtodo proposto, ou seja, ele se mostrou capaz de identicar os problemas estruturais na Verso V1, bem como se mostrou sensvel s melhorias realizadas na Verso V2. 5.2.1.5 Resultados da Avaliao da API Log4j Log4j uma API (Application Programming Interface) para fazer log de dados em aplicaes Java. As verses avaliadas neste experimento foram as Verses 1.2 e 1.3 alpha 6, respectivamente referenciadas aqui como Verses V1 e V2. A Verso V1 possui 123 classes e a Verso V2, 215 classes. O aumento do nmero de classes foi signicativo de uma verso para outra. 5.2. Anlise de Softwares Reestruturados 59 Bad Smell Bom Regular Ruim Shotgun Surgery 119 4 0 God Class 121 1 1 Indecent Exposure 106 16 1 Tabela 5.13. Bad smells no Log4j Verso 1.2 Bad Smell Bom Regular Ruim Shotgun Surgery 207 8 0 God Class 213 1 1 Indecent Exposure 194 20 1 Tabela 5.14. Bad smells no Log4j Verso 1.3 alpha 6 Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 0 121 0 God Class 0 121 0 Indecent Exposure 9 106 6 Tabela 5.15. Comparao dos bad smells no Log4j Verses 1.2 e 1.3a6 Observando as Tabelas 5.13 e 5.14, percebe-se que a quantidade de classes na faixa bom para todos os bad smells aumentou consideravelmente, enquanto a quantidade de classes na faixa regular aumentou suavemente para os bad smells Shotgun Surgery e Indecent Exposure, e a quantidade de classes na faixa ruim se manteve a mesma para todos os bad smells. Do ponto de vista das melhorias das classes de V1 em V2, observando a Tabela 5.15, percebe-se que os bad smells Shotgun Surgery e God Class no sofreram alteraes entre as Verses V1 e V2, no havendo nenhuma melhora e nenhuma piora. Isso sugere que, no aspecto da distribuio da inteligncia concentrada das classes e do acoplamento das mesmas, as refatoraes realizadas ou as funcionalidades includas preservaram a qualidade estrutural do projeto do software. Em relao ao bad smell Indecent Exposure, nota-se mais melhorias do que pioras da Verso V1 para Verso V2. 60 Captulo 5. Avaliao do Mtodo Proposto 5.2.1.6 Resultados da Avaliao do Sweethome 3D O Sweethome 3D uma ferramenta para projetos de interiores. As verses avaliadas nesse experimento foram as 2.5 e 3.5 referenciadas aqui como V1 e V2, respectivamente. A Verso V1 possui 160 classes, enquanto a Verso V2 possui 178 classes. Poucas classes foram acrescentadas entre as duas verses to distantes, o que sugere que refatoraes realmente ocorreram da verso V1 para V2, conforme armam Soares et al. [2011]. Bad Smell Bom Regular Ruim Shotgun Surgery 54 96 11 God Class 112 33 16 Indecent Exposure 116 38 7 Tabela 5.16. Bad smells no Sweethome 3D Verso 2.5 Bad Smell Bom Regular Ruim Shotgun Surgery 149 25 4 God Class 154 8 16 Indecent Exposure 124 40 14 Tabela 5.17. Bad smells no Sweethome 3D Verso 3.5 Bad Smell Falha Real Falso Positivo Caso Especial Shotgun Surgery 83 78 0 God Class 32 124 5 Indecent Exposure 7 146 8 Tabela 5.18. Comparao dos bad smells no Sweethome 3D Verses 2.5 e 3.5 Nas Tabelas 5.16 e 5.17 possvel observar que para os bad smells Shotgun Surgery e Indecent Exposure a melhoria da Verso V1 para V2 foi signicativa, conrmando que realmente ocorreu a refatorao de tais aspectos. Para esses bad smells no ocorreram acrscimos nas faixas regular e ruim, apenas na faixa bom. Em relao ao bad smell Indecent Exposure, nota-se que as diferenas foram pequenas. Os dados reportados na Tabela 5.18 mostram que a quantidade de falhas reais alta, indicando que neste software foram realizadas refatoraes que resultaram na 5.3. Avaliao Manual 61 melhoria dos bad smells Shotgun Surgery e God Class. A quantidade de classes classi- cadas como caso especial so baixas, isso porque a refatorao considerou os aspectos avaliados. 5.3 Avaliao Manual Esta anlise busca responder a questo de pesquisa RQ2. Para a realizao da anlise manual foram escolhidos os softwares Picasso e JSLP. Picasso uma biblioteca para o sistema operacional Android que permite baixar e armazenar imagens. Foi avaliada a Verso 1.1.1 do Picasso que possui 36 classes. JSLP uma implementao pura de SLP (Service Location Protocol ) em Java. Foi avaliada a Verso 1.0.0 RC5 do JSLP que possui 35 classes. A escolha desses softwares se deu pelo fato de UMLsmell identicar bad smells em algumas classes deles e tambm por que os softwares so de um tamanho vivel para avaliao manual. Para realizar a avaliao manual dos bad smells, 15 avaliadores, alunos de gradu- ao de cursos da rea de Computao, se voluntariaram. Os alunos possuem formao em Engenharia de Software. Para estes avaliadores foram disponibilizados: (1) em for- mato digital, os diagramas de classes dos softwares Picasso e JSLP (2) as denies dos bad smells God Class, Shotgun Surgery e Indecent Exposure, e, (3) para cada software foi distribuda uma lista com classes pr-selecionadas para que os avaliadores julgassem se uma classe possuia, um ou mais bad smells; ou se ela no possuia bad smell. No foram apresentadas aos avaliadores as estratgias de deteco e as mtricas de software utilizadas no mtodo proposto para identicar os bad smells. O Apndice A apresenta o material disponibilizado para os avaliadores para a realizao da avaliao manual. O critrio de escolha dos avaliadores foi a de que todos deveriam possuir conhecimento de desvios de projeto e engenharia de software. Na anlise dos resultados produzidos pelos avaliadores, as classes consideradas como problemticas foram as que em mais de 40% dos questionrios os avaliadores julgaram possuir um determinado bad smell. 5.3.1 Resultado da Avaliao Manual da Biblioteca Picasso Das 36 classes do Picasso, 15 foram avaliadas. Foram escolhidas todas as classes com bad smells e algumas sem falhas de projeto, incentivando uma anlise real dos avalia- dores. A Tabela 5.19 mostra para cada uma das 15 classes do Sistema Picasso e para cada um dos bad smells: God Class, Shotgun Surgery e Indecent Exposure, a porcentagem 62 Captulo 5. Avaliao do Mtodo Proposto de avaliadores que identicaram um determinado bad smell em uma dada classe. O resultado da avaliao do Picasso pela UMLsmell apresentado na Tabela 5.20. Classes God Class Shotgun Surgery Indecent Exposure Cache 20% 53% 33% Loader 13% 67% 7% Listener 0% 40% 13% Picasso 100% 33% 7% PicassoTest 80% 7% 13% PicassoTransformTest 20% 0% 40% RequestBuilder 33% 7% 13% RequestBuilderTest 20% 0% 33% StatsSnapshot 0% 0% 100% TargetRequestTest 0% 0% 20% TestTransformation 0% 7% 20% UrlConnectionLoader 0% 13% 13% ResponseCacheIcs 13% 7% 7% UrlConnectionLoaderTest 0% 13% 13% Utils 27% 7% 0% Tabela 5.19. Avaliao manual do Picasso. 5.3. Avaliao Manual 63 Classes God Class Shotgun Surgery Indecent Exposure Cache Bom Regular Bom Loader Bom Regular Bom Listener Bom Regular Bom Picasso Bom Regular Bom PicassoTest Ruim Bom Bom PicassoTransformTest Bom Bom Bom RequestBuilder Bom Bom Bom RequestBuilderTest Bom Bom Bom StatsSnapshot Bom Bom Ruim TargetRequestTest Bom Bom Bom TestTransformation Bom Bom Bom UrlConnectionLoader Bom Bom Bom ResponseCacheIcs Bom Bom Bom UrlConnectionLoaderTest Bom Bom Bom Utils Bom Bom Bom Tabela 5.20. Avaliao do Picasso pela UMLsmell. Para o bad smell God Class a maioria dos avaliadores julgaram que duas classes possuam tal problema, Picasso e PicassoTest. Dessas duas classes a UMLsmell julgou apenas uma delas como problemtica, classe PicassoTest. A classe Picasso, apesar de ser considerada como problemtica pelos avaliadores, no foi identicado o God Class pela UMLsmell. Todavia, no mtodo proposto, so consideradas duas mtricas para detectar God Class: NMP e NCA. UMLsmell reportou a mtrica NMP como regular e NCA como bom. Desta forma, de acordo com a estratgia de deteco empregada no mtodo, essa classe no foi indicada com esse bad smell. As classes em que os avaliadores identicaram God Class e a UMLsmell no so visualmente grandes, devido a quantidade de atributos e mtodos, porm a quantidade de relacionamentos aferentes muito baixo nestas classes. Tal fato pode ter contribudo para que os resultados dos avaliadores e da UMLsmell fossem diferentes. Em relao ao bad smell Shotgun Surgery, foram identicadas 4 classes com tal problema pela UMLsmell, Cache, Loader, Listener e Picasso. Essas classes foram tambm aquelas com maior porcentagem na identicao dos avaliadores. O bad smell Indecent Exposure foi identicado por unanimidade na classe Stats- Snapshot pelos avaliadores. A nica classe identicada com Indecent Exposure pela 64 Captulo 5. Avaliao do Mtodo Proposto UMLsmell tambm foi a classe StatsSnapshot. Nas outras classes, menos de 40% dos avaliadores consideraram que elas possuem Indecent Exposure. De forma geral, neste experimento, os resultados de UMLsmell foram coincidentes com aqueles reportados pelos avaliadores. 5.3.2 Resultado da Avaliao Manual do Protocolo JSLP Na Tabela 5.21 so apresentados os resultados da avaliao manual do JSLP. Na Ta- bela 5.22 so apresentados os resultados da avaliao automtica do JSLP feita por UMLsmell. Classes God Class Shotgun Surgery Indecent Exposure AuthenticationBlock 13% 73% 27% Filter 0% 73% 13% ReplyMessage 0% 67% 0% ServiceLocationException 27% 20% 60% ServiceLocationManager 0% 73% 7% ServiceType 7% 53% 27% ServiceURL 40% 73% 40% SLPConguration 80% 60% 53% SLPManager 73% 67% 20% SLPMessage 67% 60% 60% Tabela 5.21. Avaliao manual do JSLP 5.4. Anlise dos Resultados das Avaliaes Automtica e Manual 65 Classes God Class Shotgun Surgery Indecent Exposure AuthenticationBlock Bom Regular Bom Filter Bom Regular Bom ReplyMessage Bom Regular Bom ServiceLocationException Bom Regular Ruim ServiceLocationManager Bom Bom Bom ServiceType Regular Regular Bom ServiceURL Regular Regular Regular SLPConguration Bom Regular Bom SLPManager Bom Regular Bom SLPMessage Bom Regular Ruim Tabela 5.22. Avaliao do JSLP pela UMLsmell Das duas classes identicadas com God Class nos resultados da UMLsmell, apenas uma foi considerada como problematica pelos avaliadores, a classe ServiceURL. Os avaliadores tambm julgaram que as trs ltimas classes que aparecem na Tabela 5.21 possuem God Class, enquanto a UMLsmell julgou que as mesmas no possuem tal problema. Essas trs classes possuem muitos atributos e mtodos, mas poucas conexes aferentes. Das dez classes avaliadas, foram identicadas oito com o bad smell Shotgun Sur- gery tanto pelos avaliadores, quanto pela UMLsmell. Apenas a classe ServiceLocatio- nException foi considerada como problemtica pela UMLsmell mas no pelos avalia- dores. Ocorreu outro caso em que os avaliadores consideraram a classe ServiceLocati- onManager como problemtica, mas a UMLsmell no. Dentre as quatro classes identicadas com o bad smell Indecent Exposure pelos avaliadores, trs constam como problemticas nos resultados da UMLsmell. Neste experimento tambm, os resultados reportados por UMLsmell so muito prximos daqueles reportados pelos avaliadores. 5.4 Anlise dos Resultados das Avaliaes Automtica e Manual Para responder a questo de pesquisa RQ1: As mtricas de software e seus respectivos valores referncia auxiliam a identicar bad smells em um software ? foram realizados os experimentos apresentados na Seo 5.2.1. O objetivo da realizao da avaliao 66 Captulo 5. Avaliao do Mtodo Proposto automtica foi vericar se realmente possvel identicar bad smells automaticamente em diagramas de classes. Para cada software foram avaliados os resultados gerados pela UMLsmell para as Verses V1 e V2, onde a Verso V2 tida na literatura como uma refatorao da Verso V1. Como a Verso V2 resultante da refatorao da Verso V1 era esperado encontrar melhorias entre as duas verses em pelo menos um dos aspectos avaliados nesse estudo e, de fato, em quase todos os softwares foram identicadas ao menos uma melhoria de bad smells de uma verso para outra refatorada. Este resultado conrma a eccia do mtodo proposto, visto que foram encontrados mais falhas na verso no refatorada dos softwares avaliados. Essas melhorias caram evidentes nos softwares Jhotdraw e Sweethome 3D. Nesses dois softwares, a quantidade de bad smells foi muito superior em V1 do que em V2, o que est de acordo com o que foi relatado na literatura que diz que a Verso V2 uma refatorao de V1. Nesses softwares foram constatados que principalmente nos bad smells Shotgun Surgery e God Class a quantidade de classes que apresentavam esses problemas diminuiu muito mais do que cresceu, apontando que a estrutura do sistema realmente passou por melhorias. No entanto, nesses trs casos, no se pode dizer o mesmo em relao ao Indecent Exposure, que em alguns casos a quantidade de classes que apresentavam esse bad smell foi mantida ou aumentou da Verso V1 para V2. Tal fato pode ter ocorrido porque esse bad smell pode no ter sido alvo de atenes durante as refatoraes. Tambm foram observadas melhorias mais discretas nos softwares Struts, Log4j, HSqlDB e JSLP. Neles, nos trs bad smells avaliados, ocorreram menos melhorias da Verso V1 para a Verso V2, sendo que em alguns casos ocorreu aumento da quantidade de bad smells. Mas, ainda assim, foi possvel detectar que a refatorao ocorreu em alguns casos nos quais os bad smells reduziram, por exemplo, o Indecent Exposure no software Struts. Para responder a questo de pesquisa RQ2: Os bad smells identicados pelo mtodo em um software so correspondentes queles identicados por avaliadores com formao em Engenharia de Software? foi realizada avaliao manual, apresentada na Seo 5.3. A avaliao manual feita apresentou resultados muito prximos dos apresentados pela UMLsmell. Para os bad smells Shotgun Surgery e Indecent Exposure, as classes identicadas como problemticas pela UMLsmell foram as classes com maior frequncia de identicao pelos avaliadores. Das classes em que UMLsmell acusou a presena do bad smell God Class a maioria tambm foi identicada com esses bad smells pelos avaliadores. Quatro classes identicadas como problemtica pelos avaliadores, no foram identicadas como problemticas pela UMLsmell. Esses resultados indicam que as estratgias de deteco denidas neste estudo, esto prximas dos resultados 5.5. Consideraes Finais 67 dos avaliadores. No caso de God Class, houve uma diferena maior entre os resultados do mtodo proposto e a anlise manual. Uma explicao possvel para isso que os avaliadores provavelmente consideraram apenas o tamanho das classes, enquanto a estratgia de deteco do mtodo proposto considera tambm a quantidade de classes que utilizam a classe avaliada. 5.5 Consideraes Finais Este captulo mostrou os resultados dos experimentos realizados para avaliar o mtodo proposto. Durante a realizao dos experimentos, observando seus resultados, foram identi- cadas algumas limitaes. A principal delas est associada ao fato do mtodo descrito neste trabalho considerar poucos bad smells. Esta limitao se deve ao fato de haver poucas mtricas para os quais h valores referncia propostos na literatura. As demais limitaes encontradas esto relacionadas com: Diagramas de classes usados nos experimentos: o ideal seria a utilizao de di- agramas de classes produzidos durante a fase de projeto do software. Todavia, difcil obter esse tipo de diagrama em projetos abertos e, em geral, h restri- es por parte das organizaes em fornecer qualquer dado sobre seus softwares proprietrios. Devido a isso, os diagramas foram obtidos via engenharia reversa a partir do cdigo fonte de softwares abertos. Desconhecimento da arquitetura e do contexto dos softwares avaliados: em uma avaliao manual, para armar com preciso que as classes apontadas como problemticas realmente possuem os bad smells acusados pela UMLsmell, seria necessrio que um avaliador tivesse conhecimento das classes e seus elementos. Por exemplo, uma superclasse que utiliza o padro de projeto Strategy e possui muitas subclasses no deve ser considerada como problemtica, pois dependendo do contexto, tal estratgia exige muitas conexes aferentes Apesar dessas limitaes, os resultados da avaliao do mtodo proposto indicam que ele capaz de auxiliar, de forma automtica, a identicao de bad smells em software orientado por objetos a partir de diagrama de classes, utilizando, para isso, mtricas de software e seus respectivos valores referncia. Os resultados dos experimentos realizados em softwares tidos como refatorados mostram que em todos os softwares foram identicadas ao menos uma melhoria de bad smells de uma verso para outra refatorada. Esse resultado indica que o mtodo 68 Captulo 5. Avaliao do Mtodo Proposto proposto capaz de detectar automaticamente os bad smells considerados neste tra- balho, visto que foram encontradas mais falhas na verso no refatorada dos softwares avaliados. Com isso, conclui-se que a resposta para RQ1 positiva. Da mesma forma os resultados da avaliao manual se mostraram muito prximos daqueles produzidos por UMLsmell, aonde se conclui que a resposta para a RQ2 tambm positiva. Captulo 6 Concluso Esse trabalho de dissertao prope um mtodo para identicar desvios de projeto de software nas fases iniciais do ciclo de vida do sistema, mais especicamente na fase de projeto. O mtodo proposto se baseia em extrair mtricas de diagramas de classes e usar os valores referncia propostos na literatura para tais mtricas para identicar bad smells. Inicialmente, foram identicados os bad smell que podem ser extrados de dia- gramas de classes. Depois foram identicadas as principais mtricas que podem ser extradas de diagramas de classes. Em relao s mtricas, duas caractersticas foram levadas em considerao: primeiro, as mtricas deveriam possuir valores referncia propostos na literatura e segundo, que elas representassem melhor os bad smells que podem ser identicados em diagramas de classes. Os valores referncia usados para relacionar as mtricas aos bad smells Shotgun Surgery, God Class e Indecent Exposure foram denidos por Ferreira et al. [2012]. Neste trabalho, tambm foi projetada e implementada uma ferramenta, deno- minada UMLsmell, que permite aplicar o mtodo proposto. A ferramenta identica automaticamente bad smells em diagramas de classes. Para avaliar esse mtodo, foram conduzidos dois grupos de experimentos. O pri- meiro foi realizado com o objetivo de vericar se o mtodo proposto identica os bad smells considerados neste trabalho, a partir da comparao entre verses de softwares que, de acordo com relatos na literatura, passaram por refatoraes. O segundo expe- rimento teve por objetivo comparar os resultados reportados pelo mtodo e a avaliao manual. A anlise automtica consistiu em avaliar duas verses de softwares abertos, tal que a segunda verso do software em questo era tida como a refatorao da primeira verso. Era esperado que UMLsmell apontasse menos problemas na segunda verso se 69 70 Captulo 6. Concluso comparada com a primeira. Os resultados dessa anlise mostram que todos os softwares apresentaram algum tipo de melhoria da primeira para a segunda verso. O segundo experimento foi realizado com um grupo de 15 avaliadores. Foram dis- tribudos os diagramas de classes dos softwares Picasso e JSLP para que os avaliadores julgassem quais classes possuem algum tipo de bad smell. A comparao entre os resultados manuais dos avaliadores e dos automticos gerados pela UMLsmell permitiu identicar que, na maioria dos casos, os resultados dos avaliadores e da UMLsmell foram prximos, principalmente para os bad smells Shotgun Surgery e Indecent Exposure. Isso indica que as mtricas e valores referncia utilizados no mtodo denido neste trabalho permitem identicar automaticamente bad smells que seriam apontados de forma mais custosa e demorada de forma manual. Os experimentos realizados evidenciam que o mtodo proposto auxilia a identi- car automaticamente a presena de bad smells em diagramas de classes. 6.1 Trabalhos Futuros Com os resultados obtidos neste trabalho, identicam-se os seguintes trabalhos futuros: A identicao de valores referncia para outras mtricas, que ser importante para viabilizar a deteco de outros bad smells com o mtodo proposto. Realizar outros experimentos com pequenos ajustes nos valores referncia utili- zados com o objetivo de vericar se isso melhoraria a eccia da deteco. Avaliar o uso de outras mtricas para avaliar os bad smells considerados nesta dissertao a m de renar as estratgias de deteco sugeridas. Aplicar o mtodo em diagramas de colaborao da UML, como o diagrama de sequncia, a m de vericar se possvel identicar outros bad smells alm da- queles considerados neste trabalho. 6.2 Publicaes Nunes, Henrique Gomes; Bigonha, Mariza Andrade da Silva; Ferreira, Kecia Aline Marques. Identicao de Bad Smells em Softwares a partir de Modelos UML. Publicado em WTDSoft 2013, Braslia, DF. Nunes, Henrique Gomes; Bigonha, Mariza Andrade da Silva; Ferreira, Kecia Aline Marques; Airjan, Flvio.Um Mtodo para Identicao Automtica de Falhas de 6.2. Publicaes 71 Projeto em Modelos UML. Esse artigo est sendo escrito para posteriormente ser submetido em CBSoft 2014. Nunes, Henrique Gomes; Bigonha, Mariza Andrade da Silva; Ferreira, Kecia Aline Marques; Airjan, Flvio. UMLsmell: Uma ferramenta para Identicao de Falhas de Projeto em Modelos UML. Esse artigo est sendo escrito para pos- teriormente ser submetido em uma sesso de ferramentas no CBSoft 2014. Apndice A Avaliao Manual dos Bad Smells A avaliao manual dos bad smells foi realizada por 15 alunos de graduao da rea de Computao, com formao em Engenharia de Software. Para estes avaliadores foram disponibilizados: 1. em formato digital, os diagramas de classes dos softwares Picasso e JSLP; 2. as denies dos bad smells God Class, Shotgun Surgery e Indecent Exposure; 3. uma lista, para cada software, com classes pr-selecionadas para que os avaliado- res julgassem se cada classe possuia, um ou mais bad smells ou se ela no possuia bad smell. A seleo dessas classes se deu devido ao fato de as mesmas possuirem bad smells de acordo com a avaliao do UMLsmell. Tambm foram includas algumas classes sem bad smells. No foram apresentadas aos avaliadores as estratgias de deteco e as mtricas de software utilizadas no mtodo proposto para identicar os bad smells. O questionrio aplicado neste experimento apresentado em A.3. A.1 Denio dos Bad Smells O autor Martin Fowler dene bad smell como um indicador de possvel problema estru- tural em projetos de software, que pode ser melhorado via refatorao. Na literatura, podemos encontrar os seguintes exemplos de bad smells: God Class: ocorre quando poucas classes tendem a centralizar grande parte da inteli- gncia do sistema, fazendo com que muitas classes dependam dos servios do pequeno conjunto dessas classes. Tal prtica indesejada, pois isso faz com que essas classes sejam grandes, complexas e de difcil manuteno. 73 74 Apndice A. Avaliao Manual dos Bad Smells Shotgun Surgery: ocorre quando mudanas em uma classe geram pequenas mudanas em muitas outras classes. A consequncia do Shotgun Surgery que a manuteno de um software ser muitas vezes custosa, pois sempre que uma classe for alterada, provavelmente muitas outras tambm sero. Indecent Exposure: ocorre quando uma classe mal encapsulada, expondo seus dados que deveriam ser ocultos. O resultado do mal encapsulamento a baixa segurana de um sistema. A.2 Softwares Usados na Avaliao Manual Os softwares escolhidos para a avaliao manual foram: Picasso e JSLP. Picasso uma biblioteca para o sistema operacional Android que permite baixar e armazenar imagens. Para esta avaliao foi usada a Verso 1.1.1 do Picasso que possui 36 classes. JSLP uma implementao pura de SLP (Service Location Protocol ) em Java. Em relao a este software foi avaliada a Verso 1.0.0 RC5 que possui 35 classes. A escolha desses softwares se deu pelo fato de UMLsmell identicar bad smells em algumas classes deles e tambm por que os softwares so de um tamanho vivel para avaliao manual. A.3 Questionrio Usado para a Avaliao Manual Considerando as denies dos trs bad smells apresentados, para cada classe a seguir, identique quais bad smells cada classe possui. Uma classe pode possuir nenhum bad smell ou mais do que um bad smell. A.3.0.1 JSLP AuthenticationBlock [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure Filter [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ReplyMessage [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ServiceLocationException [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ServiceLocationManager [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ServiceType [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ServiceURL [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure SLPConguration [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure SLPManager [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure SLPMessage [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure A.4. Exemplo de Classes Avaliadas 75 A.3.1 Picasso Cache [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure Listener [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure Loader [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure Picasso [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure PicassoTest [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure PicassoTransformTest [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure RequestBuilder [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure RequestBuilderTest [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure ResponseCacheIcs [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure StatsSnapshot [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure TargetRequestTest [ ] God Class [ ] Shotgun Surgery [ ] Indecent Exposure A.4 Exemplo de Classes Avaliadas Nas Figuras A.1 e A.2 so apresentadas duas classes julgadas como problemticas, tanto pelos alunos quanto pelo UMLsmell. Figura A.1. Classe Loader do software Picasso Na classe Loader, ilustrada na Figura A.1, foi identicado o bad smell Shotgun Surgery por 67% dos alunos e a mesma classe foi julgada julgada na faixa regular para o 76 Apndice A. Avaliao Manual dos Bad Smells Figura A.2. Classe ServiceURL do software JSLP mesmo bad smell pelo UMLsmell. Para os outros bad smells menos de 15% dos alunos identicaram problemas e o UMLsmell no apontou problemas. Na classe ServiceURL, ilustrada na Figura A.2, mais de 40% dos alunos identi- caram os trs bad smells avaliados e o mesmo ocorreu na avaliao automtica em que para todos os bad smells a classe se enquadrou na faixa regular. Referncias Bibliogrcas Abreu, F. B. & Carapua, R. (1994). Object-oriented software engineering: Measuring and controlling the development process. Em proceedings of the 4th International Conference on Software Quality, volume 186. ArgoUML (2013). http://argouml.tigris.org/, acessado em 20/11/2013. Bansiya, J. & Davis, C. G. (2002). A hierarchical model for object-oriented design quality assessment. Software Engineering, IEEE Transactions on, 28(1):4--17. Bertran, I. M. (2009). Avaliao da qualidade de software com base em modelos uml. Dissertao da PUC-RJ. Rio de Janeiro, RJ, Brasil. Pontifcia Universidade Catlica do Rio de Janeiro. Briand, L.; Devanbu, P. & Melo, W. (1997). An investigation into coupling measures for c++. Em Proceedings of the 19th international conference on Software engineering, pp. 412--421. ACM. Chidamber, S. R. & Kemerer, C. F. (1994). A metrics suite for object oriented design. Software Engineering, IEEE Transactions on, 20(6):476--493. Crespo, Y.; Lpez, C. & Marticorena, R. (1996). Relative thresholds: Case study to incorporate metrics in the detection of bad smells. Em QAOOSE 2006 Proceedings, pp. 109118. DAmbros, M.; Bacchelli, A. & Lanza, M. (2010). On the impact of design aws on software defects. Em Quality Software (QSIC), 2010 10th International Conference on, pp. 23--31. IEEE. DependencyFinder (2013). http://depnd.sourceforge.net/, acessado em 08/12/2013. Dig, D. & Johnson, R. (2005). The role of refactorings in api evolution. Em Software Maintenance, 2005. ICSM05. Proceedings of the 21st IEEE International Conference on, pp. 389--398. IEEE. 77 78 Referncias Bibliogrficas Enterprise-Architect (2013). http://www.sparxsystems.com.au/, acessado em 20/11/2013. ESS-Model (2013). http://essmodel.sourceforge.net/, acessado em 20/11/2013. Ferreira, K. A.; Bigonha, M. A.; Bigonha, R. S.; Mendes, L. F. & Almeida, H. C. (2012). Identifying thresholds for object-oriented software metrics. Journal of Systems and Software, 85(2):244--257. Ferreira, K. M. (2011). Em Um Modelo de Predio de Amplitude da Propagao de Modicaes Contratuais em Software Orientado por Objetos. Tese de Doutorado, Belo Horizonte, MG. Universidade Federal de Minas Gerais. Fowler, M. (1999). Refactoring: improving the design of existing code. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA. Fowler, M. (2005). UML Essencial: Um breve guia para a linguagem-padro de mode- lagem de objetos. 3a ed. Bookman, Porto Alegre. Gamma, E.; Johnson, R.; Helm, R. & Vlissides, J. (2006). Padres de Projetos: Solu- es Reutilizveis. Bookman, Porto Alegre, RS. Genero, M. (2002). Dening and validating metrics for conceptual models. Ph.D. thesis. University of Castilla-La Mancha. Genero, M.; Piattini, M. & Calero, C. (2005). A survey of metrics for uml class diagrams. Journal of Object Technology, 4(9):59--92. Girgis, M.; Mahmoud, T. & Nour, R. (2009). Uml class diagram metrics tool. Em Computer Engineering Systems, 2009. ICCES 2009. International Conference on, pp. 423 428. Hamza, H.; Counsell, S.; Loizou, G. & Hall, T. (2008). Code smell eradication and as- sociated refactoring. Em Proceedings of the European Computing Conference (ECC). Harrison, R.; Counsell, S. & Nithi, R. (1998). Coupling metrics for object-oriented design. Em Software Metrics Symposium, 1998. Metrics 1998. Proceedings. Fifth International, pp. 150--157. IEEE. IEEE (1990). Ieee standard glossary of software engineering terminology. Oce, 121990(1):1. Referncias Bibliogrficas 79 Infusion (2012). http://www.intooitus.com/products/infusion, acessado em 25/11/2012. iPlasma (2013). http://loose.upt.ro/reengineering/research/iplasma, acessado em 08/12/2013. JHotDraw (2012). http://www.jhotdraw.org/, acessado em 25/11/2012. Kerievsky, J. (2005). Refactoring to patterns. Pearson Deutschland GmbH. Lanza, M.; Marinescu, R. & Ducasse, S. (2006). Object-Oriented Metrics in Practice. Springer-Verlag New York, Inc., Secaucus, NJ, USA. Li, W. & Henry, S. (1993). Object-oriented metrics that predict maintainability. Jour- nal of systems and software, 23(2):111--122. Lorenz, M. & Kidd, J. (1994). Object-oriented software metrics: a practical guide. Prentice-Hall, Inc. MagicDraw (2013). http://www.nomagic.com/products/magicdraw.html, acessado em 20/11/2013. Marchesi, M. (1998). Ooa metrics for the unied modeling language. Em Software Maintenance and Reengineering, 1998. Proceedings of the Second Euromicro Confe- rence on, pp. 67--73. IEEE. Marinescu, C.; Marinescu, R.; Mihancea, P. F. & Wettel, R. (2005). iplasma: An integrated platform for quality assessment of object-oriented design. Em In ICSM (Industrial and Tool Volume. Citeseer. Marinescu, R. (2002). Em Measurement and Quality in Object-Oriented Design, Tese de Doutorado. Timisoara, Romnia. University of Timisoara. Marinescu, R. (2004). Detection strategies: metrics-based rules for detecting design aws. Em Software Maintenance, 2004. Proceedings. 20th IEEE International Con- ference on, pp. 350 359. Microsoft (2013). http://www.microsoft.com/en-us/download/details.aspx?id=24023, acessado em 20/11/2013. Moose (2013). http://moose.iinteractive.com/en/, acessado em 08/12/2013. Nuthakki, M. K.; Mete, M.; Varol, C. & Suh, S. C. (2011). Uxsom: Uml generated xml to software metrics. SIGSOFT Softw. Eng. Notes, 36(3):1--6. 80 Referncias Bibliogrficas OMG (2012). http://www.omg.org/, acessado em 25/11/2012. Soares, G.; Catao, B.; Varjao, C.; Aguiar, S.; Gheyi, R. & Massoni, T. (2011). Analy- zing refactorings on software repositories. Em Software Engineering (SBES), 2011 25th Brazilian Symposium on, pp. 164--173. IEEE. Soliman, T.; El-Swesy, A. & Ahmed, S. (2010). Utilizing ck metrics suite to uml models: A case study of microarray midas software. Em Informatics and Systems (INFOS), 2010 The 7th International Conference on, pp. 1 6. Sommerville, I. (2007). Engenharia de Software 8a ed. So Paulo: Pearson Addison Wesley. UMLet (2013). http://www.umlet.com/, acessado em 20/11/2013. Yi, T.; Wu, F. & Gan, C. (2004). A comparison of metrics for uml class diagrams. SIGSOFT Softw. Eng. Notes, 29(5):1--6.