Renovação de um sistema com mais de 15 anos

Inovação em um projeto com mais de 15 anos de uso, o desenvolvedor só pode chamar de renovação.

Para atualizar esse sistema o desenvolvedor precisa alinhar com a diretoria. Pois será utilizado web components, essa é a tecnologia para criação dessas novas telas será utilizado Vue 3.0, Quasar e Vite.

O nosso backend ainda está dentro da antiga api existente. Ainda não tivemos tempo e estamos tentando levar para uma nova api, que também está em construção. Essa nova api está nascendo usando Dotnet sdk 7.0. Até compramos licenças do Visual Studio 2022 Professional para o time.

Hoje o time está com uma composição de 4 pessoas.

Como qualquer sistema que tenha mais de dez anos, não é criado novas telas o tempo todo. Todavia para ter resultado iniciamos a analise do que já existe. Ao passo que desenvolvemos novos Web Components.

Momento pensamento de programador

Percebi que no sistema atual não tinha dados sobre onde estão as dívidas técnicas. Mas, sabemos qual a funcionalidade que o cliente mais reclama. E sabemos que precisamos sempre melhorar o processo de criação de pedido desse sistema.

Em um momento para definir as próximas telas que iriámos desenvolver. Planejamos conversar com os clientes para tentar gerar insight o que é o ideal para o negócio. Porém não conseguimos e estamos analisando os dados que temos. Lembrei de já ter lido em algum livro sobre dívidas técnicas. As dívidas tem muito mais impacto nos códigos que sofrem alterações com maior frequência.

Então resolvi buscar quais eram os arquivos mais alterados no repositório. Pois, quanto mais código em um arquivo que já contém dívidas técnicas. Teremos mais juros e mais dívidas técnicas por culpa da complexidade que fica ainda mais evidente por ter uma alta quantidade de commits nos arquivos.

Então fui ler como eu poderia gerar um gráfico contendo os 100 arquivos com mais commits. Tendo em vista que todos nossos repositórios usam git, fui em busca de extensões para coloca no Azure pois usamos o Azure como CI & CD.

Não encontrei nenhuma extensão para gerar esses gráficos com insight. Então com uma combinação de informação gerei o script em python que pega os 100 arquivos com mais commits em um repositório git.

Esse scipt precisa estar na pasta que foi feito o checkout do repositório a ser analisado. Foi implementado condições no script ler apenas arquivos com as extensões (.vb, .js e .cs).

Boas análises.

Código para gerar o gráfico

import matplotlib.pyplot as plt
import subprocess
# Comando git que você deseja executar
comando_git = "git log --format=format: --name-only | sort | uniq -c | sort -nr > data.txt"
# Executa o comando git e redireciona a saída para o arquivo data.txt
subprocess.run(comando_git, shell=True)
# Listas para armazenar os dados
arquivos = []
commits = []
i = 0
j = 0
# Ler o arquivo data.txt
with open('data.txt', 'r') as file:
    # Ler cada linha do arquivo
    for line in file:
        if i >= 1 and j < 100:
            line = line.strip().split(' ')
            num_commits = int(line[0])
            arquivo = str(line[1]).strip()
            
            # Verificar se o arquivo possui extensão .vb, .js ou .cs e tem mais de 2 commits
            if (arquivo.endswith(".vb") or arquivo.endswith(".js") or arquivo.endswith(".cs")) and num_commits > 2:
                # Armazenar os dados nas listas
                commits.append(num_commits)
                arquivos.append(arquivo)
                j = j + 1
        
        i = i + 1
print("Arquivos: ", len(arquivos))
# Configurar o gráfico de barras
plt.bar(arquivos, commits)
plt.xlabel('Arquivo')
plt.ylabel('Número de Commits')
plt.title('Relação de Número de Commits por Arquivo')
# Ajustar tamanho da figura
fig = plt.gcf()
fig.set_size_inches(20, 6) 
# Ajustar a exibição dos rótulos dos eixos x para evitar sobreposição
plt.xticks(rotation=90)
plt.gca().set_xticklabels(arquivos, rotation=90, ha='right')
# Exibir o gráfico
plt.tight_layout()  # Evitar corte dos rótulos
plt.show()
Esse é o resultado, eu retirei o nome do arquivos.

Dicas de livo:

Trabalho Eficaz com Código Legado