DEV Community

Testes e validação de software

Indicações

  • Livro: Accelerate - Building and Scaling High Performing Technology Organizations
  • Pesquisa: Os testes finais de aceitação pelo usuário (UAT: User acceptance Testing) exigem perguntas difíceis de responder em um ambiente ágil.

Desejo

A grande maioria das empresas de serviços digitais desejam que suas aplicações estejam disponíveis para o consumo dos clientes sempre que precisarem. Para obter esse nível de disponibilidade, elas vão precisar, além de outras coisas, que o produto seja devidamente testado e validado. Sejam arquiteturas, servidores ou sistemas, se desejamos resiliência, confiabilidade e segurança precisamos fazer isso.

Vamos ao que interessa!

Code & Test & Release & Repeat

Agil

Algumas metodologias ágeis são mais favoráveis aos testes, como: Estórias de usuário, Behavior Driven Development (BDD) e Teste Driven Development (TDD). Pode-se utilizar os princípios INVEST para criar as estórias de usuário. Para esse tema eu recomendo muito esse post.

A técnica conhecida como TDD foi introduzida no XP e é a mais eficaz em garantir que os testes automatizados funcionem de forma confiável. Antes mesmo de iniciarmos o desenvolvimento, o programador já faz a criação do teste seguindo três princípios: testes de falha esperada, testes de sucesso, e tanto testes antigos como testes novos bem estruturados/refatorados.

Os testes precisam estar versionados. As mudanças precisam ser integradas ao repositório remoto diariamente (Integração Contínua).

Testes

Quando falamos de desenvolvimento de software, costuma-se dividir os testes em duas classes: os funcionais, que verificam o comportamento da aplicação, e os não-funcionais, que verificam os elementos que a aplicação precisa.

No tocante aos testes funcionais, o Manual de DevOps divide os testes em quatro tipos:

  • Testes unitários: testes de um método, função ou classe (pequenas parte) do código com valores de entrada, consulta e saída pré-definidos (mockados);
  • Testes de aceitação: esse tipo de teste verifica se o que foi desenvolvido foi o que o cliente pediu, e não o que o programador esperava desenvolver;
  • Testes de integração: visando garantir que a nova funcionalidade não interfiram de forma inesperada com as demais;
  • Teste de segurança: garantem que as politicas de segurança e conformidade foram seguidas, e verificar a existência de vulnerabilidades.

Por outro lado, os testes não-funcionais, não estamos falando apenas da aplicação, mas da infraestrutura que a suporta, da lógica e dos diretórios, das regras e das integrações internas e externas. Em suma, limites e requisitos. Muitas vezes, o testes não-funcionam dizem respeito ao desempenho. Existem três testes primordiais quando tratamos de limites e requisitos. São eles:

  • Testes de carga: valida o volume que uma aplicação suporta;
  • Testes de resistência: valida a estabilidade e capacidade de um ambiente (aplicação, plataforma, banco, cache) em um determinado período de tempo;
  • Testes de stress: verificamos o comportamento das métricas de uma aplicação, sua estabilidade e capacidade de recuperação quando levada ao limite.

Ferramentas

Além das metodologias citadas (TDD e BDD), também existem frameworks de testes e bibliotecas de testes, como é o caso, respectivamente, do JBehave e da XUnit's. Foram desenvolvidos até mesmos recursos linguísticos para criação de testes, como o Gherkin.

Realidade

Espero que tenha ficado mais do que claro que quando se deseja que suas aplicações sejam consumíveis sempre que os clientes precisarem é preciso uma boa cobertura de testes. Os testes previnem e anteveem problemas nos ambientes produtivos por meio do aferimento de diversos indicadores. Quer sejam arquiteturas, servidores ou sistemas, se desejamos resiliência, confiabilidade e segurança precisamos testá-los.

Um minuto do seu tempo

O que eu disse faz sentido pra você? Me fala um pouco da sua experiência com testes!

Não esquece de curtir e comentar esse post. Se esse conteúdo foi relevante pra você ele com certeza pode ser pra alguém do seu trabalho ou empresa.

Me conta o mais você gostaria de ver aqui. Alguma das palavras acima chamou a sua atenção? Me conta.


Um abraço, rede!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay