Processo de Desenvolvimento
Para termos um trabalho fluído, é necessário seguir um processo bem definido, nesse bootcamp iremos introduzir práticas básicas e normalmente usadas no mercado.
Iniciando o desenvolvimento de uma história
Na planning o épico será apresentado, em seguida todas as histórias que compoem esse épico serão planejadas, cada história será dividida em tasks (tarefas técnicas para concluir a história), cada task será distribuida para um membro da equipe, após a planning começa o dia-a-dia do desenvolvimento, é importante seguir esses passos para ter sucesso no desenvolvimento:
1. Story Opening (Abertura da história)
Antes de iniciar as atividades da sprint é importante todos os membros que vão realizar tasks daquela história se juntarem em uma call para discutirem como cada um vai resolver a sua task, é importante passar pelos seguintes passos:
- Criar a branch da história seguindo o padrão descrito abaixo
- Revisar as documentações de arquitetura e engenharia da sprint
- Fazerem acordos de como vão integrar as partes que dependem uma da outra
- Tentar identificar as dependencias que uma task tem da outra
- Decidirem qual a melhor forma de gerenciar os branchs de task para evitar conflitos de código
2. Desenvolvendo uma task
- Entre no jira e mova a card da task para "Em desenvolvimento"
- Crie a branch da task baseado no padrão descrito abaixo
- Desenvolva o código da task
- Abra um Pull Request no bitbucket da task para a feature
task/123456-atividade-xpto -> feature/123456-cadastro-xpto - Aguarde o code review de seu Tutor Tech Lead e de pelo menos um de seus colegas de time
- Verifique se o branch passou na esteira de deployment
- Finalize a PR mergeando seu branch na feature, não se esqueça de apagar a sua branch para não acumular branchs mortas no repositório
3. Story Closing (Finalizando a história)
Quando todas as tasks da história forem enfim mergeadas, realizar uma nova call com todos os membros que realizaram tasks dentro da história para realizarem os seguintes passos:
- Criar a Pull Request da feature branch para a main
feature/123456-cadastro=de-xpto -> main - Fazer um code review coletivo e verificar se está tudo correto
- Resolver conflitos caso houverem
- Validar e corrigir os erros da esteira se houverem
- Testar a funcionalidade se está funcionando corretamente
- Mergear a feature na main e apagar a branch da feature
- Criar a tag que representa o incremento de versão do sistema usando o semantic versioning
4. Correção de Bugs (Bugfix)
Quando é encontrado um problema (bug) ou implementação errada das regras de negócio quando o pull request da feature estiver aberta (durante os testes da feature no Story Closing por exemplo), é necessário abrir uma branch de de bugfix bugfix/123456-correcao-botao-errado, corrigir o problema e mergear na feature. Se a feature em questão já tiver sido mergeada na master, precisa criar um branch de hotfix hotfix/123456-correcao-botao-errado, apenas o hotfix pode ser mergeado direto na main, esse é um caso que em projetos reais é uma correção rápida de algo que está atrapalhando a operação do sistema em produção
Modelo de branchs do Git
Aqui está um desenho que representa o fluxo e ciclo de vida das branches
2. Estrutura de Nomenclatura das Branches
2.1 Nomenclatura das Branches
- Histórias de Usuário: As branches que representam histórias de usuário devem ser nomeadas como
feature/id_jira-nome, ondeid_jiraé o identificador da história no Jira enomeé uma descrição breve da funcionalidade. - Tarefas: As branches relacionadas a tarefas devem ser nomeadas como
task/id_jira-nome, ondeid_jiraé o identificador da tarefa no Jira enomeé uma descrição breve da tarefa. - Correção de Bugs: As branches que envolvem correções de bugs devem ser nomeadas como
bugfix/id_jira-nome, ondeid_jiraé o identificador do bug no Jira enomeé uma descrição breve da correção.
2.2 Exemplo de Nomenclatura
- História de Usuário:
feature/JIRA-123-adicionar-autenticação(representando uma história no Jira com IDJIRA-123) - Tarefa:
task/JIRA-456-adicionar-validação(representando uma tarefa no Jira com IDJIRA-456) - Correção de Bug:
bugfix/JIRA-789-corrigir-erro-login(representando um bug no Jira com IDJIRA-789)
3. Fluxo de Trabalho com Integração ao Jira
-
Criar a Ramificação de Funcionalidade:
- Inicie a partir da branch
maine crie uma nova branch para a funcionalidade relacionada à história:git checkout main git checkout -b feature/JIRA-123-adicionar-autenticação
- Inicie a partir da branch
-
Criar a Ramificação de Tarefa:
- Dentro da branch
feature/JIRA-123-adicionar-autenticação, crie uma nova branch para uma tarefa específica:git checkout -b task/JIRA-456-adicionar-validação
- Dentro da branch
-
Desenvolver e Comitar:
- Realize as mudanças necessárias na branch
task/JIRA-456-adicionar-validaçãoe faça os commits:git add . git commit -m "Implementa a tarefa JIRA-456: adicionar validação"
- Realize as mudanças necessárias na branch
-
Criar um Pull Request:
- Após concluir a tarefa, faça push da branch
task/JIRA-456-adicionar-validaçãopara o repositório remoto:git push origin task/JIRA-456-adicionar-validação - Acesse o Bitbucket e crie um pull request para mesclar a branch
task/JIRA-456-adicionar-validaçãona branchfeature/JIRA-123-adicionar-autenticação.
- Após concluir a tarefa, faça push da branch
-
Mesclar a Tarefa de Volta para a Funcionalidade:
- Após a revisão e aprovação do pull request, a branch
task/JIRA-456-adicionar-validaçãoserá mesclada na branchfeature/JIRA-123-adicionar-autenticação.
- Após a revisão e aprovação do pull request, a branch
-
Finalizar a Funcionalidade:
- Quando a funcionalidade estiver completa e testada, crie um pull request para mesclar a branch
feature/JIRA-123-adicionar-autenticaçãode volta para a branchmain.
- Quando a funcionalidade estiver completa e testada, crie um pull request para mesclar a branch
-
Remover Branches:
- Após a mesclagem, você pode excluir as branches de tarefa e funcionalidade:
git branch -d task/JIRA-456-adicionar-validação git branch -d feature/JIRA-123-adicionar-autenticação
- Após a mesclagem, você pode excluir as branches de tarefa e funcionalidade: