Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 52
    • Issues 52
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CP - Planta
  • WikiWiki
  • Wiki
  • qualidade

Last edited by ESKieroff Oct 19, 2024
Page history
This is an old version of this page. You can view the most recent version or browse the history.

qualidade

Home Escopo Processo Design/Mockups Gerência Estudos Arquitetura Contratos BD Qualidade Configuração Instalação Instruções Utilização Analytics Infraestrutura Dicas

Qualidade de Software

Descrição

Nesta seção, detalhamos as metodologias e procedimentos adotados para garantir a qualidade do software, juntamente com o uso de design patterns e ferramentas para manter a consistência e a confiabilidade do código. Nossa abordagem visa não apenas evitar erros, mas também assegurar que o código seja escalável, manutenível e aderente aos princípios de boas práticas de desenvolvimento.

Sumário

  • Índices de Qualidade
  • Testes
  • Padronização de Código
  • Fluxo Gitlab
  • Commit
  • Merge
  • UX/UI
  • Documentação
  • Persistência de Dados

Índices de Qualidade

  • Jest: Ferramenta de testes unitários.
  • Eslint: Ferramenta para análise sintática.
  • Prettier: Ferramenta para formatação de código e padronização de estilo.

Utilizamos essas ferramentas para manter a qualidade do código e garantir que ele atenda às especificações de funcionalidade e estilo. O Jest valida o comportamento correto dos módulos individuais através de testes unitários. O Eslint ajuda a detectar erros de sintaxe e práticas de código incorretas, enquanto o Prettier formata automaticamente o código para manter a consistência e legibilidade.

Benefícios

  • Jest: Reduz a probabilidade de introdução de bugs ao garantir que as funções se comportam conforme o esperado.
  • Eslint: Aumenta a qualidade geral do código, detectando padrões que podem levar a erros ou diminuir a legibilidade.
  • Prettier: Garante que o código siga um padrão visual consistente, tornando-o mais fácil de ler e manter.

Testes

  • Jest: Testes unitários.
  • Insomnia/Postman: Testes de integração.

Implementamos dois níveis de testes:

  1. Testes Unitários: Validam a funcionalidade isolada de cada componente, sendo desenvolvidos pelo autor da funcionalidade.
  2. Testes de Integração: Simulam o uso do sistema como um todo, testando a integração dos componentes. São realizados por um colega desenvolvedor utilizando ferramentas como Insomnia ou Postman para testar a API.

Benefícios

  • A combinação de testes unitários e de integração permite detectar erros tanto no nível de implementação quanto no nível de interação entre diferentes módulos, garantindo uma maior robustez e confiabilidade do sistema.

Padronização de Código

  • Prettier: Automatiza a formatação de código para garantir consistência em toda a base de código.
  • Husky: Configurado para executar hooks Git que validam o código antes do commit.

Nosso fluxo de padronização de código segue dois momentos principais:

  1. Pré-commit (localmente): Husky, em conjunto com Eslint e Prettier, valida e formata o código antes que ele seja enviado para o repositório.
  2. No GitLab (após o push): O código é novamente validado no CI/CD para garantir que esteja de acordo com os padrões estabelecidos.

Benefícios

  • Automatizar a padronização e verificação de código minimiza o retrabalho, elimina inconsistências e garante que o código enviado para produção esteja sempre em conformidade com as regras definidas.

Fluxo Gitlab

  • Husky: Executa verificações automáticas de qualidade no ciclo de commits.
  • Lint-Staged: Verifica apenas os arquivos modificados, otimizando o processo de validação.
  • Conventional Commits: Padroniza mensagens de commit para facilitar o rastreamento de alterações.

GitFlow

Utilizamos o GitFlow para organizar o desenvolvimento, onde cada nova tarefa ou funcionalidade é desenvolvida em uma branch separada e, ao finalizar, enviada para a branch develop através de um Merge Request (MR).

Procedimento para criação de Branches

O padrão a ser seguido para a nomeação de branches é o seguinte:

  • usar um prefixo (fortemente recomendado)
  • usar identificador (opcional)
  • usar user storie, quando houver (recomendado)
  • usar número da issue (opcional)
  • descritivo do objetivo principal (fortemente recomendado)

Formato esperado:

prefix/ticket-number-short-subject
prefix/id-short-subject
prefix/us-short-subject

Exemplos:

  • feature/US01_T10-endpoint-cadastro-produto
  • bugfix/US01_T10-endpoint-cadastro-produto
  • hotfix/13-endpoint-cadastro-produto
  • release/US01_T10-endpoint-cadastro-produto
  • docs/A2023-endpoint-cadastro-produto

Prefixos Comuns

Os prefixos são usados para identificar rapidamente o propósito de uma branch. Estes são os prefixos mais comuns:

  • feature/: Usado para o desenvolvimento de novas funcionalidades.
  • bugfix/: Usado para corrigir bugs não críticos.
  • hotfix/: Usado para correções urgentes de bugs críticos diretamente na produção.
  • release/: Usado para preparar uma nova versão para lançamento.
  • docs/: Usado para modificar ou adicionar documentação.

Convenções

  1. Uso de Hífen e Barra: Utilize barras / para separar categorias e hífens - para separar palavras, garantindo que o nome da branch seja legível.
    Exemplo: feature/nova-funcionalidade.

  2. Letras Minúsculas: Mantenha o nome das branches em letras minúsculas, usando apenas caracteres alfanuméricos e hífens.

  3. Ticket de Rastreamento: Se houver um número de ticket relacionado a uma tarefa, ou for usar um id ou a User Storie, inclua esse dado no início do nome da branch.
    Exemplo: feature/US01_T10-adicionar-login.

  4. Evitar Nomes Longos: Nomes muito longos podem dificultar a navegação e a diferenciação entre branches. Mantenha-os curtos e descritivos.
    Exemplo: feature/autenticacao-2fa em vez de feature/adicionar-sistema-de-autenticacao-com-dois-fatores.

Na prática:

  1. Crie uma nova branch a partir da develop com o formato "US00T00-TaskName", por exemplo:

    • US24T03-CreateStudent
  2. Use mensagens de commit descritivas e no imperativo. Exemplo:

    • feat: added registration form

    Evite mensagens genéricas como:

    • Corrige service

    Um exemplo mais claro seria:

    • fix: corrects error message in getAll method of userService
  3. Após concluir o desenvolvimento, crie um MR para a branch develop. O merge só será permitido se todos os testes e verificações de sintaxe forem bem-sucedidos.

Benefícios

  • Esse fluxo mantém o histórico de desenvolvimento limpo e organizado, facilitando o rastreamento de mudanças e a resolução de conflitos, além de garantir que apenas código testado e validado seja integrado à base de código principal.

Commit

Mensagens de commit são essenciais para documentar o que foi alterado e por quê. Seguir um padrão garante que essas mensagens sejam informativas e fáceis de entender.

Conventional Commits

Adotamos o padrão Conventional Commits para nomear as mensagens de commit. Esse padrão descreve as mudanças de forma clara e padronizada, facilitando o entendimento e o rastreamento do histórico de mudanças.

Mensagem de Commit:

<tipo>: <descrição curta>

[Corpo opcional]
[Rodapé opcional]

Tipos Comuns de Commits

  • feat: Quando se adiciona uma nova funcionalidade ao projeto.
  • fix: Para correção de bugs.
  • docs: Alterações na documentação.
  • style: Alterações que não afetam o significado do código (formatação, por exemplo).
  • refactor: Mudanças que não corrigem bugs nem adicionam funcionalidades, mas melhoram a estrutura do código.
  • test: Adição ou modificação de testes.

Boas Práticas para Commit

  1. Modo Imperativo: Escreva a mensagem do commit no modo imperativo (exemplo: "adicionar", "corrigir") como se fosse uma instrução.
    Exemplo: fix: corrigir erro de autenticação.

  2. Descrição Curta e Objetiva: A linha principal da mensagem de commit deve ser breve (máximo 50 caracteres) e descritiva, sem ponto final.
    Exemplo: feat: adicionar suporte a múltiplos usuários.

  3. Rodapé (opcional): Use o rodapé para fornecer informações adicionais, como referências a tickets, ou avisos sobre mudanças críticas (ex: BREAKING CHANGE).

Exemplo de Mensagem Completa de Commit

feat: adicionar autenticação com OAuth

Esta mudança adiciona o suporte a autenticação com OAuth para
permitir login com redes sociais.

BREAKING CHANGE: O endpoint de login foi modificado para suportar
novos métodos de autenticação.

Benefícios

  • Com commits padronizados, o histórico de mudanças fica mais legível e estruturado, o que auxilia no gerenciamento de versões, automatizações e na compreensão do que foi alterado.

Merge

  • GitFlow e Conventional Commits: Para realizar o merge, o código deve passar pelos testes unitários e de integração, bem como pela validação de sintaxe.

Apenas usuários com a permissão de "maintainer" podem realizar merges nas branches develop e main.

Observação: Consulte a seção Merge Request no menu Processo para mais detalhes sobre o processo.

Benefícios

  • Este processo rigoroso de merges garante que o código enviado para as branches principais já tenha sido amplamente validado, evitando problemas em produção.

Merge Request (MR)

  • Crie uma nova MR a partir da sua branch com o formato "US00T00-TaskName", por exemplo:
    • US24T03-CreateStudent

UX/UI

Para garantir uma experiência de usuário satisfatória, seguimos práticas de design que buscam a simplicidade, usabilidade e acessibilidade. O objetivo é garantir que as interfaces sejam intuitivas e eficientes, proporcionando uma experiência agradável ao usuário.

Documentação

Swagger API

Utilizamos Swagger para documentar nossa API, fornecendo uma interface clara e interativa para visualizar e testar os endpoints disponíveis. Isso facilita a comunicação entre desenvolvedores e stakeholders, e melhora a eficiência no desenvolvimento de integrações.

Benefícios

  • A documentação com Swagger permite que tanto desenvolvedores quanto outros membros da equipe visualizem e interajam com a API de forma clara e eficiente.

Persistência de Dados

PostgreSQL

Utilizamos PostgreSQL como banco de dados relacional para garantir integridade e eficiência na manipulação de dados.

Padrões de Schema

  • Utilize snake_case para nomear colunas e tabelas.
  • Inclua sempre campos created_at e updated_at.
  • Adote o uso de campos booleanos como active para controle de status.
  • Utilize json para campos com dados dinâmicos.
  • Prefira uuid ao invés de id tradicional, o que facilita a replicação e a clusterização.

Para campos categóricos, utilize strings ou enums em vez de valores numéricos. Exemplo:

  • usertype: "Admin" ao invés de usertype: 0
  • gender: "Female" ao invés de gender: 'F'

Benefícios

  • Utilizar uuid melhora a escalabilidade e flexibilidade do sistema, especialmente em ambientes distribuídos. O uso de json facilita a armazenagem de dados semiestruturados, enquanto a padronização dos tipos de dados melhora a clareza do schema.

                                                                                                         Topo

Clone repository
  • Infraestrutura
  • Utilizando a wiki
    • adicionando imagens
    • escrevendo em markdown
    • wiki no editor de texto
  • analytics
  • arquitetura
  • backend_categories
  • backend_inicio
  • backend_persons
  • backend_production_order
  • backend_products
  • backend_qualidade
  • backend_settings
  • backend_stock
  • backend_stock_locations
View All Pages