Please use this identifier to cite or link to this item: http://hdl.handle.net/1843/ESBF-AEDQVV
Full metadata record
DC FieldValueLanguage
dc.contributor.advisor1Marco Tulio de Oliveira Valentept_BR
dc.contributor.advisor-co1Andre Cavalcante Horapt_BR
dc.contributor.referee1Andre Cavalcante Horapt_BR
dc.contributor.referee2Eduardo Magno Lages Figueiredopt_BR
dc.contributor.referee3Marcelo de Almeida Maiapt_BR
dc.creatorTamara Márcia Mendespt_BR
dc.date.accessioned2019-08-11T14:48:10Z-
dc.date.available2019-08-11T14:48:10Z-
dc.date.issued2016-08-11pt_BR
dc.identifier.urihttp://hdl.handle.net/1843/ESBF-AEDQVV-
dc.description.abstractUtility functions are functions that offer generic services such as data conversions, manipulation of dates and structures, among others and which are useful in many parts of a system. Ideally, they should be implemented in appropriate modules, to facilitate reuse. However, developers often implement utility functions in modules designed to contain specific purpose functions. Thus, this practice decreases opportunities of reuse, causing rework and duplicating code. Moving the utility function to a suitable module is a solution for this problem. However, this type of refactoring is not trivial for large system developers, due to the lack of supporting tools to identify such functions. To address this shortcoming, we proposed a set of heuristics to identifyutility functions. Initially, we investigate the use of machine learning to solve the proposed research problem. We conducted evaluations by project (intra-project) and using many projects (cross-project) in training and testing phases. This last approach is closer to a practical application scenario. Despite the classifier has showed excellentresults in intra-project evaluation, they were much lower in the cross-project scenario. Therefore, we proposed heuristics to identify utility functions, which can be computed by static analysis of Java and JavaScript source code, with no training phase. We obtained an average precision of 68% evaluating the proposed heuristics in four proprietarysystems of a Brazilian software development company. Furthermore, in a survey performed with 33 developers, we obtained a precision of 66% and 67%, respectively, for Java and JavaScript, considering a sample of open source systems functions from GitHub and Qualitas Corpus.pt_BR
dc.description.resumoFunções utilitárias são funções de propósito geral, que podem ser reusadas em diferentes tipos de sistemas. Teoricamente, devem ser implementadas em módulos específicos. No entanto, desenvolvedores frequentemente implementam essas funções junto a funções de domínio, diminuindo as chances de reuso. Nesta dissertação, inicialmente foi investigado o uso de um algoritmo de aprendizado de máquina para identificar funções utilitárias, usando métricas estáticas de código como preditores. Em seguida, é proposto um conjunto de heurísticas para identificação de tais funções. Essas heurísticas podem ser facilmente implementadas nos atuais ambientes integrados de desenvolvimento de software, fornecendo recomendações para movimentação de funções utilitárias para módulos adequados. Em um survey com 33 desenvolvedores, as heurísticas propostas apresentaram uma precisão de 65% (quando aplicadas em sistemas implementados em Java) e de 67% (quando aplicadas em sistemas JavaScript).pt_BR
dc.languagePortuguêspt_BR
dc.publisherUniversidade Federal de Minas Geraispt_BR
dc.publisher.initialsUFMGpt_BR
dc.rightsAcesso Abertopt_BR
dc.subjectArquitetura de Softwarept_BR
dc.subjectAprendizado de Máquinapt_BR
dc.subjectRefatoraçãopt_BR
dc.subjectFunções utilitáriaspt_BR
dc.subjectModularizaçãopt_BR
dc.subject.otherComputaçãopt_BR
dc.subject.otherSoftware Arquiteturapt_BR
dc.subject.otherProgramação modularpt_BR
dc.titleIdentificação de funções utilitárias em Java e Javascriptpt_BR
dc.typeDissertação de Mestradopt_BR
Appears in Collections:Dissertações de Mestrado

Files in This Item:
File Description SizeFormat 
tamaramendes.pdf1.73 MBAdobe PDFView/Open


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.