Qualidade de software
Qualidade vem de requisitos claros, código organizado, revisão, testes e melhoria contínua. Não é algo colocado apenas no final.
Portfólio DSM
← Voltar às disciplinas
Disciplina 04 · 3º semestre · 2026
Conteúdo abordado
Os pontos principais da matéria, em linguagem direta e ligados ao desenvolvimento de aplicações web.
Qualidade vem de requisitos claros, código organizado, revisão, testes e melhoria contínua. Não é algo colocado apenas no final.
É executar e verificar partes do sistema para descobrir defeitos e confirmar se o comportamento esperado foi atendido.
Testar reduz o risco de falhas, retrabalho e perda de confiança. Quanto antes um erro aparece, mais simples costuma ser a correção.
Um software confiável se comporta de forma previsível. Defeitos não somem totalmente, mas podem ser prevenidos, encontrados e controlados.
Os testes podem avaliar unidade, integração, sistema e aceitação, além de aspectos funcionais e não funcionais.
O teste funcional observa uma regra do ponto de vista do uso; o teste de unidade isola uma classe ou método para validar uma parte pequena.
Qualidade é responsabilidade de todos. Testes acompanham análise, desenvolvimento, integração e entrega, em vez de formar uma etapa separada.
Ferramentas ajudam quando existem testes repetitivos, regressões frequentes e necessidade de retorno rápido. Nem todo teste precisa ser automatizado.
Vale automatizar cenários estáveis, importantes e executados muitas vezes. Exploração, usabilidade e situações raras ainda pedem avaliação humana.
Atividades
Entregas já feitas e próximas atividades da disciplina.
Programa demonstrativo que implementa o mesmo fluxo de pedidos em três arquiteturas. As versões em Java usam Spring Boot e a solução de microsserviços inclui um serviço de pagamento em Python, mostrando que os componentes podem usar tecnologias diferentes e se comunicar por HTTP e JSON.
Para executar: é preciso ter Java 17, Maven e Python 3. Depois de extrair o arquivo, basta abrir INICIAR_PROJETO.bat, escolher uma arquitetura e aguardar a inicialização. A coleção do Postman traz requisições prontas para os testes.
Pacote revisado: a versão disponível contém apenas o código-fonte, o iniciador, a coleção do Postman e um guia completo. Não foram encontrados senhas, tokens, chaves, dados pessoais reais ou conexões externas.
Baixar projeto e instruções em ZIP ↓ Baixar apresentação PPTX ↓ Baixar infográfico PDF ↓O grupo trabalhou o tema Teste de Integração, com explicação teórica, exemplo prático em Spring Boot e avaliação quantitativa do resultado dos testes automatizados.
O projeto mongoapp foi analisado, teve seus principais riscos identificados e depois evoluiu com Spring Security, autenticação por JWT, controle de perfis e DTOs.
A prática mostrou a diferença entre uma API que apenas funciona e uma API preparada para proteger usuários, credenciais e rotas.
Ver análise e implementação →Spring Boot + MongoDB
A atividade começou com uma análise do mongoapp original e terminou com a implementação de uma camada completa de autenticação e autorização.
O projeto inicial era uma API Spring Boot conectada ao MongoDB. Ela permitia operações CRUD com usuários, porém não confirmava quem fazia a requisição, não diferenciava usuários comuns de administradores e devolvia diretamente a entidade interna da aplicação.
Diagnóstico
A API não exigia login e não conseguia identificar quem estava fazendo cada requisição.
Não existia separação entre permissões de usuário comum e administrador.
As rotas de consulta, alteração e exclusão ficavam acessíveis sem uma barreira de segurança.
Senhas e segredos poderiam ficar expostos se fossem armazenados ou configurados sem proteção.
Usar Usuario diretamente nas respostas poderia revelar senha, perfis e campos internos.
Faltavam validações consistentes, bloqueio de e-mail repetido e respostas padronizadas para erros.
Evolução
Centralizou as regras de acesso e a proteção das rotas da API.
A senha passou a ser armazenada como hash, sem guardar o texto original.
O login retorna um token que identifica o usuário sem manter sessão no servidor.
Rotas comuns e administrativas receberam permissões diferentes.
Cadastro, login e respostas usam objetos próprios, evitando a exposição da entidade.
Nome, e-mail e senha são verificados antes de chegar à regra de negócio.
O sistema impede um novo cadastro quando o endereço já está registrado.
Falhas de validação, acesso e negócio recebem respostas claras e padronizadas.
A chave usada para assinar o JWT não fica gravada diretamente no código.
Tecnologias utilizadas
Fluxo de autenticação
POST /api/auth/register recebe nome, e-mail e senha.
O sistema valida os campos e verifica se o e-mail já existe.
O BCrypt gera o hash antes de salvar o usuário no MongoDB.
POST /api/auth/login confere e-mail e senha.
Com os dados corretos, a API gera e devolve o token assinado.
O cliente envia Bearer + token; o Spring Security valida identidade e perfil.
Testes realizados
Os cenários verificaram tanto o caminho permitido quanto o bloqueio de acesso indevido.
USER acessando rotas comuns.USER bloqueado na rota de ADMIN.ADMIN acessando a rota administrativa.Comparação
Conclusão e aprendizado
Na versão original, o CRUD respondia, mas não existia controle sobre quem poderia usar cada operação. A evolução mostrou que segurança precisa fazer parte da arquitetura desde o começo. O principal aprendizado foi entender como autenticação, autorização, DTOs, validação e tratamento de erros trabalham juntos: não adianta proteger apenas o login se as rotas, os dados retornados e os segredos continuarem expostos.
Trabalho completo
Conteúdo teórico, prática desenvolvida e avaliação quantitativa no ecossistema Spring Boot.
Teste de integração verifica se diferentes partes reais do sistema funcionam juntas. Em uma aplicação Spring Boot, isso pode envolver controller, service, repository, serialização JSON, configuração do contexto e banco de dados de teste.
Diferente do teste unitário, que observa uma unidade pequena de código de forma isolada, o teste de integração avalia o fluxo entre camadas e ajuda a encontrar problemas de configuração, persistência e comunicação interna.
O programa desenvolvido implementa uma API REST simples para cadastro e consulta de produtos de uma loja virtual. O teste principal envia uma requisição para POST /produtos, passa pelas camadas da aplicação e confirma a gravação no banco H2.
O que mais ficou claro para mim é que teste não serve só para provar que algo funciona. Ele ajuda a entender melhor a regra, encontrar erros antes da entrega e alterar o código com menos medo de quebrar o que já estava pronto.
No trabalho de integração, a prática mostrou que a confiança aumenta quando o teste percorre o caminho completo da API, desde a requisição HTTP até a persistência no banco de teste.