Estou trabalhando em alguns projetos nos quais gostaria de fornecer um registro de alterações preciso a cada versão, mas não encontrei um método para coletar o registro de alterações que funcionaria sem problemas. O problema ocorre principalmente quando o tempo entre as versões é longo e cada versão é fornecida com muitos recursos e correções de bugs, e quando o software tem várias ramificações sendo desenvolvidas ao mesmo tempo.
Algumas opções que eu considerei:
- Crie o log de alterações a partir das mensagens de confirmação e exija que os desenvolvedores escrevam as mensagens como se estivessem escrevendo uma linha para o log de alterações (o que eles efetivamente estariam fazendo).
- Pode não funcionar quando há várias ramificações e a fusão entre ramificações (pode ser difícil saber quais confirmações acabaram no release).
- Exija que, para cada alteração no código, exista um ticket correspondente no sistema de rastreamento de bugs. O changelog pode ser escrito com base nos tickets.
- Os desenvolvedores podem achar frustrante fazer um ticket para alterações ainda menores, especialmente se o ticket demorar mais do que corrigir o bug.
- Exija que os desenvolvedores sempre atualizem o log de alterações (como um arquivo de texto na raiz do projeto) ao mesmo tempo em que fazem alterações no código.
- Parece trabalho manual que pode ser automatizado.
- Faça com que o gerente de projetos pegue o diff da versão atual e da anterior e escreva o changelog nesse ponto com base no que eles vêem que foi alterado.
- Trabalho extra para a pessoa responsável pela liberação e pode não ser óbvio qual é o efeito prático de uma alteração apenas olhando o código.
- Envie apenas os recursos que foram planejados para a liberação; você pode escrever o changelog antes mesmo de começar a codificar.
- Não é uma opção real, a menos que você esteja usando o modelo em cascata.
Eu usei cada um deles ou uma variação deles no passado, mas eles eram muito pouco confiáveis, trabalhosos ou rígidos. Alguém tem uma bala mágica ou boas idéias sobre como resolver o problema?