Skip to content

02 ‐ Padrões de Projeto da Equipe

Gabriel Reis edited this page Nov 18, 2024 · 21 revisions

2.1 - Padrões de Projeto da Equipe

Nesta seção serão abordados os parâmetros e regras de desenvolvimento de projeto da equipe. A grosso modo, será explicado como a equipe se organizou para desenvolver o produto. Essa seção contará com os seguintes temas:



2.2 - Regras na criação de tasks

A fim de tornar mais dinâmico e eficiente o desenvolvimento, criamos este "padrão de tasks", seu objetivo é servir como um modelo e explanar o porque desse modelo. Primeiramente é válido deixar explicito que a equipe optou por gerenciar as tasks na plataforma do Github, na aba "Projects", logo, tanto regra quanto modelo q serão apresentados, são baseados nesse contexto.

O modelo é o seguinte:

nome do card - vertente 
dificuldade - prioridade


### **_Oque fazer_**:
inserir descrição do que se deve fazer
### **_Restrições_**: 
inserir restrições (caso haja)
### **_Falha_**: 
inserir falhas possíveis/comuns que devem ser evitadas e como resolve-las (o que o sistema fará caso elas aconteçam).
### **_Conteúdo_**: 
conteúdo a ser desenvolvido com este card, pode incluir o conteúdo que precisa ser visto ou acessado.

--------------------------------------------------------------------------------------------------------------------------------------------

### **_Aceitação_**:
- [ ] Inserir um parametro de aceitação para que a task seja dada como concluída e o pull-request seja feito
caso hajam casos de falhas eles precisam passar pela aceitação

--------------------------------------------------------------------------------------------------------------------------------------------

### **_Apoio_**:
qualquer material suplementar, que vá ajudar etc.

data inicio - data conclusão
Ver Exemplo Este é um exemplo de como deve ficar o card ao ser aberto

image

  • nome do card: É o nome da tarefa, precisa ser o mais simples possível;
  • vertente: Front ou Back;
  • dificuldade: o quão difícil é para a equipe de modo geral, realizar aquela tarefa;
  • prioridade: o quão urgente é aquela tarefa?
  • descrição: é a abordagem das instruções da tarefa, como fazer, atenções, tudo que envolve o processo dessa tarefa deve ser explicado;
  • aceitação: quando a tarefa pode ser dada como concluída e abrir o pull-request?
  • data inicio e data coclusão: o encarregado da tarefa deve inserir estes valores, quando começar e quando terminar a tarefa;

Você pode criar a task de modo manual, abrindo um draft no board e depois convertendo em issue e preenchendo os campos nescessários... ou pode fazer da seguinte maneira:

Ver exemplo de como abrir uma task

Comece indo até a aba: "Issues"

image

Depois selecione para criar uma nova Issue.

image

Selecione a opção de "Get started"

image

Ele irá criar a partir de um template, uma nova issue:

image

É muito importante que você linque a issue no project correto:

image

preencha os campos e clique em "submit new issue". Com tudo configurado, você irá linkar essa Issue a uma branch no repositorio correto:

image

No caso escolha entre o front e o back, neste exemplo vou escolher o front... Com o repositório, selecionado, vamos na opção create a branch:

image

Por fim confiure a branch corretamente, por exemplo, seu nome estará fora do padrão, arrume-o, certifiquesse que a opção: "checkout locally" está marcada e que o repositório está correto, por fim, clique em "create branch"

image

Por fim, arrume a posição no board desse card, pois ele estará em um uma tabela de "No status", mova ele para sua aba correta.

image



2.3 - Fluxo de desenvolvimento

Para garantir uma organização eficiente e coerente entre os membros da equipe, seguimos um fluxo de desenvolvimento específico. Cada etapa é seguida de forma que o trabalho se mantenha linear e bem estruturado. Seguimos o seguinte fluxo: criação da branch, Testes de código, modelo e regras de commits, padrão de documentação de endpoints para o Swagger (quando necessário) e modelo e regras de pull-request



2.4 - Regras de teste de código

O teste de código é uma etapa essencial para garantir a qualidade do projeto. Definimos regras que devem ser seguidas para criação e execução de testes. Cada desenvolvedor é responsável por escrever o teste após o desenvolvimento de cada funcionalidade e também por testar seu código manualmente e assegurar que ele funcione como o esperado e não afete outras áreas do sistema.



2.5 Modelo e regras na criação de branches

Para uma melhor rastreabilidade e análise das tasks realizadas, foi definido um padrão ao criar novas branches, as mesmas levam o tipo, o título, e o id da task que está no scrum board.

2.5.1 Git Flow

O Git Flow é um modelo, uma estratégia ou, ainda, um fluxo de trabalho muito utilizado por equipes de desenvolvimento de software. Ele se destaca por auxiliar na organização do versionamento de códigos. O Git Flow é recomendado para projetos que utilizam versionamento semântico (semantic versioning) ou que precisam oferecer suporte a várias versões de seu software.

Segundo o próprio autor, Vincent Driessen, se o projeto exige entrega contínua, como normalmente ocorre em projetos, este modelo não é recomendado para esse tipo de cenário. Porque geralmente com o Git Flow são geradas branches de longa duração e branches de longa duração atrapalham a entrega contínua.

A equipe optou pela utilização do Git Flow pois existe uma grande quantidade de pessoas “commitando” dentro de um repositório, e o projeto possuí um ciclo de entrega agendada.

image

Siga os passos para utilizar o git-flow:

O padrão segue o seguinte modelo:

id_da_task-tag_do_tipo_da_branch/descricao

Segue abaixo as tags e seus respectivos tipos de branch:

TAG TIPO DE BRANCH
func funcionalidade
corr correção
refa refatoração
perf performance
mant manutenção
oper CI, integração, actions e deploy

Note

É possível que o padrão de branchs mude, caso haja necessidade. Se isso acontecer, é de suma importância que o modelo e a tabela sejam atualizados.

Exemplo

No Scrum Board existe a task 'swagger' de id 1. Portanto, a nomeação da branch deve seguir próxima do seguinte modelo:

1-func/swagger

Warning

Evite caracteres especiais e acentuações nas branches.



2.6 Modelo e regras na criação de commits

Para melhor organização do time, foi criado um padrão que deve ser seguido na criação de commits. Esse padrão tem como objetivo facilitar o entendimento das alterações feitas nos trechos de código, promovendo agilidade na rastreabilidade de possíveis erros durante o desenvolvimento do projeto.

O padrão segue o seguinte modelo:

tag_do_tipo_do_commit: descricao_da_alteracao_do_commit

Segue abaixo as tags e seus respectivos tipos de commit:

TAG TIPO DE COMMIT
func funcionalidade
corr correção
refa refatoração
perf performance
mant manutenção
oper CI, integração, actions e deploy

Note

É possível que o padrão de commits mude, caso haja necessidade. Se isso acontecer, é de suma importância que o modelo e a tabela sejam atualizados.

Exemplo

Realizei uma alteração no código-fonte que adiciona o endpoint de login à aplicação. Portanto, o commit deve seguir o seguinte modelo:

func: adicionar o endpoint de login

Warning

Preze pelo espaço entre os dois pontos e a descrição da alteração do commit. Além disso, evite caracteres especiais e acentuações nos commits.



2.7 Padrão de documentação de endpoints para o Swagger

Todo o endpoint do API deve ser documentado através do @extend_schema usado pela biblioteca drf_spectacular para a criação do Schema utilizado no Swagger.

Sempre acima da função de cada método do respectivo endpoint deve ser codificado um @extend_schema contendo parameters (se necessário), request (se necessário) e response com os status dos possíveis retornos.

Exemplo:

from .models import User
from .serializers import UserSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from drf_spectacular.utils import extend_schema

class UserViewSet(APIView)
@extend_schema(
    responses={
        200: UserSerializer(many=True),
        400: OpenApiResponse(
            description="Bad Request",
            examples={
                "application/json": {
                    "message": "Erro ao listar usuários"
                }
            }
        )
    }
)
def get(self, request, format=None):
    try:
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer, status=status.HTTP_200_OK)
    except:
        return Response({'message': 'Erro ao listar usuários'}, status=status.HTTP_400_BAD_REQUEST)


2.8 Modelo e regras de pull-request

O pull-request deve ser aberto assim que todos os requisitos pedidos no card estiverem validados, ou seja, efetivamente quando a tarefa estiver feita. Ao abrir o pull-request certifique-se de que a "base"; seja a main e aquela que será comparada seja a branch em questão. O padrão de nome para o pull-request não está bem definido, pois é abstrato, mas recomendamos utilizar o próprio nome da branch. Não é obrigatório inserir uma descrição para o pull-request, mas é interessante colocar a seguinte descrição:

Fixes Grupo-Syntax-Squad/Tupan#id-task

isso irá concluir automaticamente a task assim que o pull request for aprovado e mergeado.

image


2.9 - Regras de review de pull-request

O processo de revisão é importante para manter a qualidade e consistência do código. Para cada pull-request, um membro da equipe deve revisá-lo, garantindo que o código esteja em conformidade com as regras e padrões estabelecidos e validando o impacto das alterações. É recomendável que a revisão seja feita por um desenvolvedor que não participou da implementação inicial para evitar viés e trazer uma perspectiva externa.


Assim que o pull-request for aprovado, não se esqueça de atualizar a release do repositório, seja ele do front ou do backend.