Skip to content

marcelomrad/exploring-code-evolution

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Explorando evolução de código

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.

Passo 1: Selecionar repositório a ser analisado

Selecione um repositório relevante na linguagem de sua preferência (Python, JavaScript, TypeScript ou Java). Você pode encontrar projetos interessantes nos links abaixo:

Passo 2: Instalar e rodar a ferramenta GitEvo

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.

Passo 3: Explorar o relatório de evolução de código

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.

Passo 4: Explicar um gráfico de evolução de código

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!

Instruções para o exercício

  1. Crie um fork deste repositório (mais informações sobre forks aqui).
  2. Adicione o relatório HTML no seu fork.
  3. No Moodle, submeta apenas a URL do seu fork.

Responda às questões abaixo diretamente neste arquivo README.md do seu fork:

  1. Repositório selecionado: https://github.com/spring-projects/spring-framework

  2. Gráfico selecionado: Record Declarations ao longo do tempo (2021–2026)

alt text

alt text

Ano record_declaration
2021 0
2022 0
2023 22
2024 57
2025 124
2026 178
  1. Explicação:

    O gráfico de Record Declarations mostra a adoção gradual e crescente do recurso record do Java no Spring Framework ao longo do tempo.

    Os Java Records foram introduzidos como preview no Java 14 (2020) e tornaram-se um recurso oficial e estável no Java 16 (2021). Eles são classes imutáveis com código boilerplate mínimo (sem necessidade de escrever getters, equals, hashCode e toString manualmente).

    Análise da curva:

    • 2021–2022: Zero usos de record. O Spring Framework ainda não adotava o recurso, provavelmente por manter compatibilidade com versões mais antigas do Java.
    • 2023: Os primeiros 22 records aparecem, coincidindo com o Spring Framework 6.x, que passou a exigir Java 17 como versão mínima. Com a garantia de que os usuários estariam em Java 17+, a equipe começou a introduzir records no código-fonte.
    • 2024–2026: A adoção acelera de forma consistente (57 → 124 → 178), indicando que a equipe do Spring passou a preferir records para representar estruturas de dados simples e imutáveis, como DTOs, configurações e objetos de valor.

    Conclusão: A curva está em total acordo com boas práticas modernas de Java. O aumento gradual reflete uma adoção responsável: primeiro a migração para um baseline de Java 17, depois a substituição progressiva de classes de dados verbosas por records, tornando o código mais conciso, legível e seguro (imutabilidade por padrão).

About

Exploring code evolution with GitEvo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • HTML 100.0%