O que testar em um software?
Tags: testing, womenintech, 100daysofcode, braziliandevs
Published: 2021-05-24 21:18:03

Olá olá! Bora continuar o papo sobre testes? 

No [post anterior](https://dev.to/thalimarra/testes-de-software-parte-1-3330) falei sobre o que são testes de software, quais as técnicas que podemos empregar na criação e execução dos mesmos e também quais suas classificações em relação à etapa do ciclo de vida do software.

Ou seja, já vimos o como e o quando testar, mas falta uma pergunta muito importante...

## O que testar?

Sabemos que um **teste de sistema**, por exemplo, procura confirmar se o software desenvolvido está funcionando de acordo com os contratos definidos, mas o que valida se o contrato foi cumprido? Se eu informo um valor X e recebo Y de resposta? Se o tempo de execução até eu receber a resposta foi abaixo de N segundos? Existem vários aspectos do software que podem ser testados de acordo com as necessidades do projeto.

Dessa forma, podemos classificar os testes de acordo com seu foco (aquilo que pretendem validar):

• **Teste de funcionalidade:** tem como objetivo validar se as funções do sistema são executadas corretamente. Também checa se a aplicação envia resultados relevantes para o contexto do sistema, como por exemplo tratamentos de erros padronizados e suficientemente informativos.

• **Teste de usabilidade:** foca na experiência do usuário ao utilizar o sistema. Observa e analisa usuários reais utilizando o produto (que pode ser um site, um aplicativo, etc). É bastante comum o uso de protótipos para a execução desse teste.

• **Teste de segurança:** valida a proteção do sistema contra acessos não autorizados e invasões através da checagem de perfis de acesso, confirmação da codificação de dados quando necessário, etc. São executadas uma série de explorações no software buscando identificar e corrigir a maior quantidade possível de vulnerabilidades.

• **Teste de portabilidade:** atesta o funcionamento do sistema em diferentes plataformas e dispositivos nas quais o sistema foi proposto a funcionar. Por exemplo: valida se um site funciona em múltiplos navegadores, um aplicativo funciona em múltiplos sistemas operacionais, etc.

• **Teste de desempenho:** busca confirmar se o tempo de resposta de determinado software está dentro do esperado.

• **Teste de stress:** valida o comportamento do sistema em condições extremas para procurar e corrigir possíveis falhas e identificar melhorias de desempenho o quanto antes.

> 💡 Apesar de ser bem parecido com um teste de desempenho, o teste de stress leva o sistema ao limite, testando seu funcionamento em um ambiente com memória insuficiente, recursos compartilhados limitados, serviços indisponíveis, etc. O teste de desempenho já valida o sistema em um ambiente mais próximo da realidade.

Essas são os aspectos mais comuns a serem testados mas não são os únicos. Podemos testar coisas como concorrência, recuperabilidade do sistema, compatibilidade, por aí vai. Cada software pode ter alguma peculiaridade que precisa de garantia e para isso pode ser necessário testar coisas mais especificas.

## Boas práticas

Por fim, mas não menos importante, vou deixar aqui algumas práticas que podem ajudar na definição, criação e execução dos testes:

• Idealmente, a pessoa que especifica os casos de testes não deve ser a mesma que participa da codificação. Se eu criei o login de um sistema e eu mesma vou testá-lo, é mais fácil me prender apenas ao que já presenciei enquanto codificava, ou seja, meus testes estarão enviesados.

• Faça uma boa seleção de cenários de teste. Considere o tempo disponível para a execução dos testes, a maturidade técnica dos envolvidos, a relevância das funcionalidades. E lembre-se que **o que não está especificado não será validado**.

• Quando necessário podemos explorar casos de testes além dos já definidos, aumentando ainda mais a cobertura do código.

• Não ignore cenários aparentemente inocentes.

• É bem possível encontrar falhas no sistema durante a execução dos testes. Quando isso acontecer, detalhe as falhas da melhor forma possível, assim facilita o trabalho de quem for corrigir e de quem for testar o sistema mais a frente.

• Inclusive, teste novamente os cenários com falhas depois das devidas correções!

• Ao reportar uma falha, busque padrões. Por exemplo: todos os produtos da categoria X apresentam erro quando adicionados ao carrinho de compras.

• Teste sempre os valores limites, há uma grande chance de erros estarem ali. Por exemplo: um sistema permite cadastro apenas de pessoas maiores de 18 anos e menores que 70 anos, então teste também as idades 16, 18, 70, 71... Testar os limites significa testar valores positivos e negativos, tamanhos de arquivos, etc.

• Confira se as informações retornadas pelo sistema estão coerentes, como mensagens de erros e sucesso, textos explicativos, etc.

• Por fim, pense como um usuário pensaria.

----

Então é isso, pessoal. Essas foram as minhas anotações das leituras sobre testes e do curso [Teste de Software](https://www.udemy.com/course/teste-software-completo-testes-automaticos/). Espero que ajude vocês também. Confesso que não fiz o curso todo porque queria estudar apenas a teoria inicial, mas super indico o material para quem ainda ficou meio perdido no assunto. E qualquer coisa pode deixar aqui nos comentários que vou respondendo assim que ver.

Até a próxima!