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 seguintes linguagens: Python, JavaScript, TypeScript e Java.
Você deve submeter via Moodle apenas o link do seu fork, conforme descrito abaixo.
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
Instale a ferramenta GitEvo com o comando:
pip install gitevo
Rode a ferramenta no repositório selecionado através do seguinte comando (dependendo da linguagem do projeto que escolheu):
# Python
$ gitevo -r python <git_url>
# JavaScript
$ gitevo -r js <git_url>
# TypeScript
$ gitevo -r ts <git_url>
# Java
$ gitevo -r java <git_url>Onde <git_url> é URL do repositório a ser analisado.
Por exemplo, para analisar o projeto Flask escrito em Python:
$ gitevo -r python https://github.com/pallets/flask
Ao rodar a ferramenta GitEvo, o arquivo index.html é gerado com diversos gráficos de evolução de código.
Abra o arquivo index.html e observe com atenção os gráficos gerados.
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!
Para responder este exercício, primeiramente, você deve fazer um fork deste repositório.
No Moodle, você deve submeter apenas a URL do seu fork.
Em seguida, adicione o arquivo gerado index.html no seu fork.
Por fim, responda as questões abaixo no seu fork:
-
Repositório selecionado: https://github.com/fastapi/fastapi
-
Gráfico selecionado: LOC of functions and classes (mean)
-
Explicação:
No início (2020-2023), o tamanho médio tanto das funções quanto das classes era pequeno e relativamente constante (funções em torno de 7 LOC, classes começando em ~11 e caindo para ~9 LOC). Manter essas estruturas pequenas é geralmente uma boa prática, facilitando a leitura e manutenção do código, sendo um dos princípios do Clean Code.
Ocorre uma mudança brusca entre 2023 e 2024, onde vemos um aumento acentuado no tamanho médio para ambos: funções sobem para uma média acima de 20 LOC e classes para perto de 19 LOC. Esse crescimento pode indicar a implementação de funcionalidades mais complexas ou uma refatoração importante na base de código do FastAPI.
Após 2024, os tamanhos médios parecem estabilizar nesse novo patamar mais alto. Interessante notar que, nesse período final, a média de linhas das funções supera ligeiramente a das classes. Uma possível explicação para isso, no contexto do FastAPI, é o uso frequente de classes Pydantic para definir modelos de dados (que tendem a ser menores, puxando a média das classes para baixo), enquanto as funções que processam as requisições podem acumular mais lógica de negócios e validação, elevando sua média de tamanho.
Em resumo, o gráfico mostra um projeto que começou com componentes pequenos, passou por um período de aumento significativo na complexidade média de suas funções e classes, e depois estabilizou nesse novo nível.