representação da construção de uma documentação
Padronizar a documentação do projeto. (imagem por DALL-E)

Estou fazendo parte de um processo que começou com a pesquisa e aplicação da conversão de repositórios SVN para GIT. Isso demonstra o nosso profissionalismo e o nosso compromisso com os padrões e boas práticas da nossa área.

Bom, não sei se vocês lembram das aulas de engenharia de software mas em todas as etapas do processo de construção e desenvolvimento de um software é gerado um documento. A etapa de requisitos gera um documento, a especificação gera um documento, o teste, a implementação, as instruções e a manutenção do software também geram documentos.

E dando seguimento em manter nossos esforços em documentação rastreável e auditável, precisamos estabelecer um processo que permita a verificação e validação por outros colegas: a padronização de commits.

Commits Semânticos

O commit no contexto da ciência da computação: “Refere-se ao processo de tornar permanente um conjunto de alterações, ou seja, de efetivar as alterações”. No contexto de controle de versão: “São registros das alterações feitas no código-fonte de um software no sistema de controle de versão”. Eles fazem parte da documentação do software porque permitem acompanhar o histórico de desenvolvimento, identificar os autores das mudanças, justificar as decisões tomadas e facilitar a correção de bugs ou a implementação de novas funcionalidades. Um bom commit deve ter uma mensagem clara, concisa e informativa, que descreva o que foi feito e por quê.

Com o objetivo de fornecer um histórico explícito e padronizado o commit semântico ou em sua especificação formal: conventional commit se utiliza de regras simples e claras reduzindo o tempo gasto em compreender algo que foi feito, mesmo que por outro time de desenvolvedores.

A especificação conventional commit é uma convenção leve sobre mensagens de confirmação, fornecendo um conjunto fácil de regras para criar um histórico de confirmação explícito, o que torna mais fácil escrever ferramentas automatizadas em cima, descrevendo os recursos, correções e alterações de quebra feitas nas mensagens de confirmação.

A mensagem deve ser estruturada da seguinte maneira:

<tipo>[escopo]: <descrição>

[corpo]

[rodapés(s)]

O Tipo:

Possui a finalidade de indicar a intenção que o usuário teve ao efetivar as alterações:

  • fix: corrige um bug ou erro no código.
  • feat: introduz um novo recurso.
  • build: a alteração afeta a compilação ou está relacionado a dependências externas (por exemplo: composer, maven, gulp, broccoli, npm).
  • chore: a alteração ocorre em código que não vai para produção. (por exemplo: .gitignore).
  • ci: descreve alteração nos arquivos e scripts de configuração de CI - Continuous Integration (por exemplo: Travis, Github Actions, Gitlab CI).
  • docs: possui alterações na documentação, (por exemplo: README ou docblocks).
  • perf: indica alterações no código que melhoram o desempenho da aplicação.
  • refactor: para alterações no código que não alteram a funcionalidade da aplicação.
  • style: identifica alterações que alteram o estilo do código, como: espaços, identação, formatação etc.
  • test: descreve a adição de testes ou correção de testes existentes.

O escopo

O escopo é uma descrição opcional que pode ser adicionada à mensagem para fornecer mais informações sobre a alteração. A especificação de commits semânticos define o escopo como: “um identificador de nível superior, ou seja, relacionado ao projeto, componente ou módulo”.

A descrição

A descrição é uma mensagem curta e descritiva que resume a alteração feita.

  • Comece com um verbo no imperativo no presente simples, como “adiciona”, “corrige”, “remove”, “atualiza” em vez de “adicionou”, “corrigiu”, etc. Isso ajuda a tornar a mensagem mais clara e concisa.
  • Seja específico: Forneça detalhes suficientes na mensagem para que outros desenvolvedores possam entender o que foi alterado. Por exemplo, em vez de “corrige bug”, use “corrige bug de renderização inconsistente em dispositivos móveis”.
  • Separe o assunto do corpo com uma linha em branco, isso ajuda a tornar a mensagem mais fácil de ler.

O corpo

O corpo da mensagem é opcional, caso seja escrita deve conter informações complementares em relação a tipo, escopo e a descrição resumida já definidas no título.

Use para contextualizar o por quê, em relação à regra de negócio, aquela implementação foi realizada. Seja preciso, descritivo e conciso, evite escrever mensagens longas e detalhadas.

Rodapé

O rodapé da mensagem de um commit semântico é opcional e pode ser usado para fornecer informações adicionais. O rodapé deve ser separado do corpo da mensagem por uma linha em branco e consistir em um token de palavra, seguido pelo símbolo “:” (dois pontos) um espaço em branco e a descrição.

Alguns exemplos de tokens de palavra que podem ser usados no rodapé da mensagem de um commit semântico:

  • Closes: usado para indicar que o commit fecha uma issue.
  • Refs: usado para indicar que o commit faz referência a uma issue.
  • BREAKING CHANGE: usado para indicar que o commit introduz uma mudança que quebra a compatibilidade com versões anteriores.
  • Co-authored-by: usado para indicar que o commit foi escrito por mais de um autor. Cada autor deve ser listado no rodapé com seu nome e endereço de e-mail.

Exemplo de commits semânticos:

fix: corrige bug de renderização em dispositivos móveis

Corrige bug que causava renderização inconsistente em dispositivos móveis.

Refs: #456
feat: adiciona login com o google

Adiciona nova funcionalidade para permitir que os usuários façam login usando suas contas do Google.

Closes: #123

Conclusão

Neste artigo apresentei uma estratégia para criar um histórico de commits mais claro, consistente e informativo, que reflita as mudanças significativas do seu projeto e facilite o seu gerenciamento. “Commitar com propósito” é uma prática que visa facilitar a comunicação entre os desenvolvedores, além de contribuir para a qualidade da documentação. Espero que este artigo tenha sido útil e que você possa aplicar o aprendizado nos seus próximos projetos.

Updated:

Comments