|
|
| [Home](home) | [**Escopo**](escopo) | [Processo](processo) | [Design/Mockups](design_mockups) | [Gerência](gerencia) | [Estudos](estudos) | [Arquitetura](arquitetura) | [Contratos](contratos) | [BD](banco_dados) | [Qualidade](qualidade) | [Configuração](configuracao) | [Instalação](instalacao) | [Instruções](instrucoes) | [Utilização](utilizacao) | [Analytics](Analytics) |
|
|
|
| :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: | :----------: |
|
|
|
|
|
|
# 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](#índices-de-qualidade)
|
|
|
- [Testes](#testes)
|
|
|
- [Padronização de Código](#padronização-de-código)
|
|
|
- [Fluxo Gitlab](#fluxo-gitlab)
|
|
|
- [Commit](#commit)
|
|
|
- [Merge](#merge)
|
|
|
- [UX/UI](#ux-ui)
|
|
|
- [Documentação](#documentação)
|
|
|
- [Persistência de Dados](#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
|
|
|
|
|
|
1. Crie uma nova branch a partir da `develop` com o formato "US00-TaskName", por exemplo:
|
|
|
- `US24-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
|
|
|
|
|
|
### 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.
|
|
|
|
|
|
### 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](processo#criando-o-merge-request-no-gitlab) 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.
|
|
|
|
|
|
## 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**](#qualidade-de-software) |
|
|
\ No newline at end of file |