cregit+: Evoluindo a Análise de Autoria de Código em Nível de Token
Proposta
O objetivo deste Trabalho de Conclusão de Curso é propor e implementar melhorias no Cregit, uma ferramenta que estende a funcionalidade do git blame ao permitir a análise de autoria em nível de token.
O git blame é um comando do sistema de controle de versão Git que exibe, para cada linha de um arquivo, qual foi o último commit que a modificou, quem realizou esse commit e quando. É uma ferramenta bastante utilizada para identificar a origem de trechos de código, que possibilita entender o histórico de alterações e identificar quem foi responsável por determinadas decisões de implementação.
Um problema com o git blame tradicional é que ele atribui a autoria de uma linha inteira ao autor do último commit que a alterou, ignorando os autores dos outros commits que alteraram essa linha no passado. Ou seja, é possível que uma mudança simples ou uma reformatação façam com que o desenvolvedor original não seja mais identificado facilmente. E em projetos de longa duração como o kernel Linux, que tem mais de 30 anos de existência e uma quantidade massiva de commits, tendem a ser mais impactados.
Então, visando apoiar estudos sobre a evolução de sistemas de software, a identificação de desenvolvedores especialistas, e a análise de questões legais como propriedade intelectual de código, o Cregit nasceu como uma ferramenta open source que estende a funcionalidade do git blame original com uma abordagem de análise em nível de token em vez de nível de linha. Ele tokeniza o código-fonte, dividindo nas suas menores unidades sintáticas (palavras-chave, identificadores, operadores, pontuação), criando um outro repositório capaz de rastrear cada token individualmente através do histórico do repositório.
A motivação para este trabalho vem tanto de dificuldades práticas do Cregit quanto da continuidade de seu objetivo de fidelizar contribuições aos autores. Primeiramente, a ferramenta apresenta barreiras de uso, tendo uma instalação complexa e ausência de padronização de ambiente. Além disso, com a introdução da linguagem Rust no kernel Linux a partir de 2025, o Cregit não é mais capaz de cumprir 100% de seu objetivo, já que ainda não possui um tokenizador adequado para essa linguagem.
Dessa forma, a fim de aumentar sua usabilidade e abrangência, este trabalho propõe: (i) a padronização do ambiente de execução do Cregit, (ii) a extensão do suporte a novas linguagens, com foco em Rust, e (iii) melhorias gerais no software como na visualização e extração de informações do output gerado, tornando-o mais estruturado e navegável.
Plano de Trabalho
O trabalho será desenvolvido ao longo de dois semestres, com as seguintes etapas:
1º Semestre — Estudo e Planejamento
- Levantamento das dificuldades de instalação e execução da ferramenta em diferentes ambientes;
- Padronização do ambiente de execução;
- Estudo aprofundado da arquitetura e do funcionamento interno do Cregit;
- Início da implementação do tokenizador para a linguagem Rust;
2º Semestre — Implementação e Validação
- Implementação do tokenizador para a linguagem Rust;
- Outras melhorias como na visualização e extração de dados do output gerado pelo Cregit;
- Escrita e revisão do texto final do TCC.
Referências
- German, D. M., Adams, B. & Stewart, K. cregit: Token-level blame information in git version control repositories. Empirical Software Engineering, v. 24, p. 2725–2763, 2019. https://doi.org/10.1007/s10664-019-09704-x