Um método para inferência da familiaridade de código em projetos de software
Desenvolvimento de software, mineração de repositórios de software, familiaridade de código, autoria de código, propriedade de código.
Durante o desenvolvimento de software é comum o uso de ferramentas para armazenar ou compartilhar informações entre a equipe. Essas informações podem ser alguns documentos ou até mesmo o código fonte de todo o projeto que está sendo desenvolvido. Uma das ferramentas mais utilizadas é o sistema de controle de versão. Por meio delas é possível obter informações valiosas acerca do processo de desenvolvimento, dos membros da equipe e até mesmo da empresa. Essas informações podem ser utilizadas para apoiar diversas outras atividades também ligadas ao desenvolvimento, como a manutenção de sistemas, aprimorar o design e reutilização do software, além de servir para, empiricamente, validar novas ideias ou técnicas. Neste trabalho as contribuições dos desenvolvedores para código do projeto, obtidas a partir dos commits feitos ao sistema de controle de versão, são utilizadas para inferir a familiaridade que cada membro da equipe tem com o código do projeto. Além das contribuições, foram criadas algumas métricas para tratar de aspectos relacionados ao desenvolvimento de software e ao próprio ser humano, como a sua capacidade de esquecer algo que implementou ao longo do tempo ou a possibilidade de o que fez ser sobrescrito por outro desenvolvedor. Para facilitar a visualização da familiaridade de código em toda a estrutura do projeto foi criado uma ferramenta denominada CoDiVision. Por meio das avaliações feitas percebeu-se que as informações obtidas nesse processo podem ser utilizadas para diversos objetivos como no apoio aos professores na atividade de escolha da nota de alunos de disciplinas de programação, ou no apoio aos gerentes de projeto na descoberta dos membros com maior familiaridade com a finalidade de dar mais agilidade ao projeto, atribuindo as atividades ao membros com maior familiaridade, ou na melhor distribuição da familiaridade com a finalidade de evitar eventuais prejuízos decorrentes da ausência de um membro com alta familiaridade. Pode auxiliar ainda as próprias equipes de desenvolvimento na procura dos membros com maior familiaridade para retirar dúvidas acerca do código do projeto.