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 js <git_url>
# TypeScript
$ gitevo -r ts <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: https://github.com/quasarframework/quasar.git
-
Gráfico selecionado:
-
Explicação: É possível perceber um salto maior no uso de await a partir do ano de 2022. Saiu de 120, nesse ano, para 406 em 2023. Em 2025 já são 1447. Uma explicação plausível para esse aumento poderia ser a nova feature do ES2022, o top-level await. Antes, o await era disponível apenas dentro de funções assíncronas (async function). Desde 2022, ele pode ser usado fora do escopo desse tipo de função, fornecendo assim boas soluções para problemas de sincronização. Você pode, por exemplo, aguardar a importação de um módulo ser completamente finalizada para que o código continue a sua execução sem problemas (https://www.syncfusion.com/blogs/post/7-features-of-es2022). Para ver se essa hipótese era de fato razoável, busquei o termo await no repositório. Com efeito, vários resultados estão fora do escopo de async functions, como os exemplos a seguir:
Isso pode ser valioso em casos onde você precisa garantir que um recurso esteja pronto antes de fazer algo com ele. Mas também pode ser problemático se a operação for lenta, porque o carregamento da aplicação inteira pode atrasar.