Testes e validação de software
Tags: testing, braziliandevs, devops, beginners
Published: 2023-09-16 00:44:25

# 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](https://www.cursospm3.com.br/blog/como-usar-o-principio-invest-para-escrever-e-quebrar-user-stories/).

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!