Neste exercício, iremos explorar a evolução de código em sistemas reais.
Iremos utilizar a ferramenta GitEvo.
Essa ferramenta analisa a evolução de código em repositórios Git nas linguagens Python, JavaScript, TypeScript e Java, e gera relatórios HTML como este.
Mais exemplos de relatórios podem ser podem ser encontrados em https://github.com/andrehora/gitevo-examples.
Selecione um repositório relevante na linguagem de sua preferência (Python, JavaScript, TypeScript ou Java). Você pode encontrar projetos interessantes nos links abaixo:
- Python: https://github.com/topics/python?l=python
- JavaScript: https://github.com/topics/javascript?l=javascript
- TypeScript: https://github.com/topics/typescript?l=typescript
- Java: https://github.com/topics/java?l=java
Note
Antes de instalar a ferramenta, é recomendado criar e ativar um ambiente virtual Python.
Instale a ferramenta GitEvo com o comando:
$ pip install gitevo
Execute a ferramenta no repositório selecionado utilizando o comando abaixo (ajuste conforme a linguagem do repositório).
Substitua <git_url> pela URL do repositório que será analisado:
# Python
$ gitevo -r python <git_url>
# JavaScript
$ gitevo -r javascript <git_url>
# TypeScript
$ gitevo -r typescript <git_url>
# Java
$ gitevo -r java <git_url>Por exemplo, para analisar o projeto Flask escrito em Python:
$ gitevo -r python https://github.com/pallets/flask
Note
Essa etapa pode demorar alguns minutos pois o projeto será clonado e analisado localmente.
Após executar a ferramenta GitEvo, é gerado um relatório HTML contendo diversos gráficos sobre a evolução do código.
Abra o relatório HTML e observe com atenção os gráficos.
Selecione um dos gráficos de evolução e explique-o com suas palavras. Por exemplo, você pode:
- Detalhar a evolução ao longo do tempo
- Detalhar se as curvas estão de acordo com boas práticas
- Explicar grandes alterações nas curvas
- Explorar a documentação do repositório em busca de explicações para grandes alterações
- etc.
Seja criativo!
- Crie um
forkdeste repositório (mais informações sobre forks aqui). - Adicione o relatório
HTMLno seu fork. - No Moodle, submeta apenas a URL do seu
fork.
Responda às questões abaixo diretamente neste arquivo README.md do seu fork:
- Repositório selecionado: Sherlock Project
- Gráfico selecionado:
- Explicação:
O gráfico escolhido foi o de comparação entre arquivos de produção e arquivos de teste, uma vez que nele podemos ver uma mudança notável de curva. Analisando a evolução do código ao longo dos anos, percebemos que entre 2020 e 2022, nenhum arquivo de teste existia, o que mudou para um único arquivo de teste durante os anos de 2022 a 2024. Porém, percebemos um aumento considerável da curva de arquivos de teste e a primeira diminuição da curva de arquivos de produção desde o início do projeto no ano de 2024. Isso pode levantar uma hipotese: O código pode ter passado por uma refatoração no último ano que focou em testes e retirada de arquivos desnecessários.
Explorando o repositório e buscando por logs relacionados a deleções de arquivos e atualizações da pasta de testes, ambos foram encontrados no ano de 2024, o que indica que essa refatoração realmente ocorreu, como mostram as imagens abaixo.
Pensando na evolução do projeto, as boas práticas pedem crescimento paralelo de código de produção e de testes desde o início, porém, aqui houve um longo atraso: 3 anos sem nenhum arquivo de teste. Também foi analisado se o débito técnico foi pago com a realização dos testes de 2024 com a geração de um report html de verificação de cobertura (do próprio pytest), e, como pode ser visto na imagem abaixo, a cobertura ainda é abaixo do recomendando: 38%.



