V Workshop em Algoritmos e Aplicações de Mineração de Dados Uma extensão do Microsoft Visual Studio para predição de modificações de software Francisco Rodrigues Santos1, Methanias Colaço Júnior1, Manoel Mendonça1 1 Departamento de Ciência da Computação Universidade Federal da Bahia (UFBA) ­ Salvador – BA – Brasil [email protected], [email protected], [email protected] Abstract. Version control system stores information on the creation and modification of software systems. Researchers have been using version control historical records to estimate software modules modification association. This article presents a tool integrated to a commercial software development environment. It uses association rules extracted version control systems to suggest the modules to be modified next by a programmer during his or hers software maintenance job. Resumo. Sistemas de controle de versão armazenam informaç�es sobre a criação e modificação de sistemas de software. Pesquisadores têm usado o histórico dos registros de controle de vers�es para estimar a associação de modificaç�es entre módulos do software. Este artigo apresenta uma ferramenta integrada a um ambiente comercial de desenvolvimento de software, que utiliza regras de associação extraídas de sistemas de controle de versões, para sugerir os próximos módulos de software a serem alterados pelo programador durante o seu trabalho de manutenção de software. 1. Mineração de repositório de versões A utilização de Sistemas de Controle de Versão (SCVs) permite que vários dados sejam armazenados durante e sobre o processo de desenvolvimento de software. Entre estes podemos citar o número da revisão, o usuário, a data e o comentário de uma modificação [Rochkind 1975]. Nos últimos 10 anos, as pesquisas para estender a capacidade dos repositórios dos SCVs vêm sendo intensificadas. A mineração de dados tem sido uma alternativa importante para a descoberta de padrões nesse tipo de repositório, culminando com alguns trabalhos descritos a seguir, que inspiraram a construção da nossa ferramenta. Ying (2003) apresenta uma abordagem de mineração de regras de associação entre modificações de arquivos armazenadas no repositório do CVS (Concurrent Version System). Associações são classificadas como importantes a partir do nível de “surpresa� considerado para as mesmas, ou seja, quanto mais difícil a determinação de uma associação através de uma análise manual, mais importante ela será. Apesar de sugerir as associações nas mudanças de arquivo, o trabalho de [Ying 2003] não oferece a mineração de dados em tempo real (on­the­fly). Em outras palavras, não é possível predizer uma próxima modificação no momento exato em que um arquivo está sendo alterado. 83 V Workshop em Algoritmos e Aplicações de Mineração de Dados Outra solução semelhante é a apresentada por Zimmermann et al (2005). Chamada de ROSE, a ferramenta não só permite a mineração on­the­fly, como também encontra associações em um nível de granularidade mais fina, tal como a associação entre modificações de classes. Neste sistema, os resultados das regras são apresentados em formato textual quando os desenvolvedores estão alterando o código. Os trabalhos anteriormente mencionados têm duas coisas em comum. Tanto os SCVs quanto as bases de dados que foram mineradas provieram de sistemas de código aberto, e nenhum deles utilizou uma base de dados projetada para a análise de dados históricos [Colaço, 2004]. Motivados pelo trabalho de Zimmermann et al (2005), nossa solução possui as seguintes características: (a) construímos um Data Warehouse (DW) expansível e flexível para armazenar os dados do SCV [Colaço et al 2009] e (b) todo nosso trabalho foi testado em ambiente industrial com softwares de código fechado. 2. A Ferramenta Nosso plug­in é uma extensão para o Visual Studio, o qual minera dados transferidos de um repositório Microsoft Visual Source Safe (VSS) para um DW [Colaço et al 2009] e, no momento da alteração de código, baseado no histórico pregresso de alteração conjunta de módulos, reporta ao desenvolvedor os prováveis próximos pontos de manutenção. Os objetivos desta abordagem são aumentar a eficiência do processo de manutenção e diminuir a inserção de erros de omissão no código. 2. 1. Funcionamento da Ferramenta A ferramenta foi projetada para trabalhar como um plug­in do Visual Studio, como mostrado na Figura 1, um botão na IDE permite a descoberta de associações de modificações existentes entre o arquivo ou classe sendo editada e os outros arquivos ou classes do sistema. Esta busca de associações é feita on­the­fly e pode ser ativada a qualquer instante pelo programador executando a manutenção do software. Os dados de associação são obtidos de um DW. O DW é carregado com dados extraídos do VSS por um job que roda em intervalos ou eventos programados pela organização. Este job ativa um módulo ETL (Extração, Transformação e Carga) que desenvolvemos especificamente para o VSS. O módulo ETL extrai, integra, limpa e carrega os dados para o repositório. Nesse processo de carga, são recuperadas as transações de modificações através do algoritmo proposto por [Zimmermann et al. 2004] em conjunto com um algoritmo de identificação dos responsáveis pela alteração, sistemas, classes e métodos alterados. O algoritmo de Zimmermann utiliza uma janela de tempo (no nosso caso cinco minutos), o nome do autor e comentário para identificar módulos de software modificados em uma mesma transação. Com a identificação dos módulos, podemos fazer a busca de associações. A busca é feita através da consulta a um modelo de mineração de dados gerado pelo pacote de Business Intelligence da Microsoft. O modelo utiliza um algoritmo de regras de associação pertencente à família dos algoritmos Apriori [Agrawal e Srikant 2004]. 84 V Workshop em Algoritmos e Aplicações de Mineração de Dados Figura 1. Execução do Plugin Na Tabela 1 encontra­se um exemplo de consulta DMX (Data Mining Extensions), realizada pelo plug­in, que procura por associações existentes com os dois arquivos que estão sendo editados pelo programador (IAcaoMkt.cs e ngVendasCC.cs). Como resultado, são apresentados ao usuário (na forma de lista) os dez primeiros itens que alcançam uma confiança de setenta e cinco pontos percentuais de associação com os arquivos fornecidos como parâmetro, ordenados pelos valores encontrados no suporte e confiança (vide Figura 1). Tabela 1. Exemplo de consulta DMX SELECT [Expression.P_Path] as Path, [Expression.$Support] as [Support], [Expression.$AdjustedProbability] * 100 as Confidence FROM ( SELECT FLATTENED TopCount( ( Predict( [Associa Programas].[V Associa Programas], EXCLUSIVE, INCLUDE_STATISTICS, INCLUDE_NODE_ID ) ), $AdjustedProbability, 10 ) From [Associa Programas] NATURAl PREDICTION JOIN ( select ( select 'IAcaoMkt.cs' as [P_Path] UNION select 'ngVendasCC.cs' as [P_Path] ) as [V Associa Programas] ) as P as M where [Expression.$AdjustedProbability] * 100 >= 75 Um estudo de caso foi realizado para avaliar o plug­in e a acurácia do modelo. O parceiro escolhido foi a CIAL, um fabricante e distribuidor de produtos Coca­Cola para os estados de Sergipe e Alagoas, que possui sistemas desenvolvidos na plataforma Microsoft .NET. Utilizando validação cruzada, foram avaliadas as bases VSS de 18 sistemas da CIAL. Os resultados médios de precisão e revocação [Rijsbergen 1979] foram de 76% e 58%, respectivamente [Colaço et al 2009]. Em outras palavras, nossa ferramenta acerta 58% das sugestões das próximas alterações, chegando a alcançar a precisão de mais de 70% em diversos sistemas. Estes resultados são superiores aos 85 V Workshop em Algoritmos e Aplicações de Mineração de Dados obtidos por Zimmermann et al (2005) e acreditamos que eles podem ser melhorados se analisado também o detalhe a nível de método e se os programadores informarem corretamente o comentário no momento do envio da modificação para o SCV. 3. Conclusão Programadores foram entrevistados e confirmaram a acurácia das dependências apresentadas pela ferramenta. Eles reportaram que a possibilidade de ver as dependências existentes nas mudanças dinamiza o seu trabalho de manutenção. O desenvolvimento da ferramenta mostra que é viável manter uma base de dados histórica do processo de manutenção de código, bem como explorar o acoplamento de técnicas de mineração de dados aos ambientes de desenvolvimento de software em um ambiente industrial. Os próximos desafios deste trabalho são a avaliação da utilidade do plug­in através de estudos de caso. Nestes estudos, a utilização do plug­in será controlada e os programadores terão que preencher questionários com questões sobre a usabilidade, utilidade, eficiência e eficácia do ferramental. Planejamos também explorar níveis mais finos de granularidade, realizando descobertas de associações até o nível de métodos. Consideramos ainda a utilização de outras técnicas de mineração de dados, como análise de séries temporais, para descoberta de conhecimento no DW implementado. 7. Referências Agrawal, R. e Srikant, R.. “Fast algorithms for mining association rules�. Em Proceedings of the 20th Very Large Data Bases Conference, p.p. 487–499, 1994. C. J. V. Rijsbergen. Information Retrieval, 2nd edition. Butterworths,London, 1979. Colaço, Methanias. Projetando Sistemas de Apoio à Decisão Baseados em Data Warehouse. Rio de Janeiro, Brasil: Axel Books, 2004. Colaço, Methanias; Mendonça, M. G.; Rodrigues, F. Mining Software Change History in an Industrial Environment. Em: XXIII Simpósio Brasileiro de Engenharia de Software, Fortaleza, Brasil, 2009. Rochkind, Marc J. “The Source Code Control System�. IEEE Transactions on Software Enginnering. Dezembro 1975, Vols. SE­1, 4. Ying, A. T. T.. “Predicting source code changes by mining revision history�. Master’s thesis, University of British Columbia, Canada, Outubro. 2003. Zimmermann T. and Weibgerber, P. Preprocessing CVS data for fine­grained analysis. In Proc. International Workshop on Mining Software Repositories (MSR04), Edinburgh, 2004. Zimmermann, T., Zeller, A., Weissgerber, P., Diehl, S. Mining Version Histories to Guide Software Changes. IEEE Transactions on Software Engineering, 31, 429­445, 2005. 86