Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 25, 2021 11:34 pm GMT

Aprendendo sobre testes em Java com as princesas da Disney

"Era uma vez, um jovem Aleatrio que achou que existia muitos contedos legais sobre testes, mas resolveu adicionar seus dois centavos. O resto da histria, vocs vero a seguir..."

O post de hoje ser um dos mais legais e mais densos que eu j tive o prazer de fazer. Falaremos sobre um dos assuntos que eu mais gosto que so as princesas da Disney os testes. Juro que vou tentar ser o mais sucinto possvel, mas contedo to legal que capaz que eu me empolgue. Para conseguir me ajudar nessa tarefa, eu trouxe a minha princesa da Disney favorita:

Image Text

O que um teste?

No contexto de desenvolvimento, um teste de software consiste em um conjunto de aes que garantem que o software far o que est se propondo a fazer. As aes realizadas variam de acordo com o projeto, a importncia, o tempo disponvel, complexidade, etc...

Nesse ponto, trago um revelao: colocar o cdigo em produo para ser utilizado pelos clientes j um teste. No o melhor teste, tem vrios riscos, mas acaba acontecendo ;/
Num mundo ideal, nosso sistema tem boa cobertura e conseguimos garantir que a nossa aplicao funcione e encontramos os casos de erro antes dos clientes.

Image jasmine meme

O que testar?

Esse ponto polmico e existem pessoas que defendem as mais diferentes opinies. Alguns vo dizer que para testar todos os casos possveis, outros diro que s precisa pegar os casos representativos, outros diro que necessrio testar as interfaces, outros diro que preciso testar as aplicaes usando sistemas reais outros diro que os sistemas no precisam ser reais e por a vai...

Image Text

Como tudo na vida do dev, a resposta : depende. Depende do tempo, recursos, tamanho do time, conhecimento e importncia do seu projeto. No meu caso, eu prefiro testar o fluxo bsico (tambm chamado de caminho feliz) com testes automatizados e alguns fluxos que eu acho que podem ocorrer erros.

Conforme a aplicao utilizada e os bugs vo sendo encontrados, ento adiciono mais e mais testes automatizados que simulem esses erros e essa parte esteja coberta. Afinal, errar umano, mas tem limites.

Sempre achei que essa abordagem bom ponto de comeo para os testes, trazendo o equilbrio bom entre o que deve ser testado e os recursos disponveis.

O que no testar

Existe uma linha muito tnue entre voc testar a sua aplicao e testar os frameworks que voc est utilizando. O ideal testar apenas o nosso cdigo. E confiar assumir que os frameworks esto bem testados e cobertos.

Para exemplificar isso, vamos imaginar um mtodo que recebe uma princesa, verifica se o nome est nulo e salva no banco.

public void salvarPrincesa(Princesa princesa) {  if(princesa.getNome() == null) {      throw new RuntimeException("Princesa com nome nulo");  }  princesaDao.salvar(princesa);}

Olhando esse mtodo, voc diria que um teste deve verificar se a princesa foi salva no banco?

Alt Text

A resposta NO. Esse mtodo no tem nenhuma relao com banco de dados. Ele lida com uma abstrao (o DAO). Logo, um teste deve verificar se o DAO foi chamado. Se o DAO vai realmente salvar no banco, vai colocar em memria ou vai dar uma ma envenenada para que a princesa durma para todo o sempre, no problema da nossa regra e negcio. Nossa regra testa apenas nome nulo e passa adiante.

Caso seja necessrio fazer um teste que verifica se o mtodo salvar realmente salva no banco ou no, ento esse teste deve ser feito em cima da classe PrincesaDao.

Tipos de testes

Da mesma forma que existem vrios tipos de princesas, existem vrios tipos de testes. E podemos classificar eles de diferentes formas. A lista abaixo traz algumas classificaes possveis.

Automatizados

Nesses testes, todo o processo de anlise, execuo dos testes e gerao de relatrios feito por um ou mais scripts diferentes. Isso permite que o mesmo teste possa ser repetido vrias e vrias vezes.

Manuais

Por outro lado, os testes manuais so testes realizados com a interao humana. Nem tudo pode ser validado atravs de scripts ou o custo de automatizar pode no valer a pena.

Image tiana com dinheiro

Testes funcionais

Esses testes buscam garantir que o sistema faz o que ele se prope a fazer. Existem vrias formas de fazermos esses testes e por isso os testes funcionais so divididos de acordo com a granularidade. A diviso que eu apresento um pouco diferente do que visto na litaratura. Normalmente, os testes mockeados ficam em algum limbo entre os testes unitrios e os de integrao.

Teste unitrio

Esses testes so muito legais de fazer porque eles so rpidos, leves e permitem que voc consiga cobrir um monte de situao diferente.
Porm, eles duas pegadinhas. A) Muito cdigo que voc faz no pode ser testado de forma unitria. Pois ele acaba tendo dependncias com objetos externos. B) Existem coisas que voc no consegue testar com teste unitrio.

Teste mockeado

Uma sada para lidar com os objetos externos criar um mock. Um objeto de mentirinha que vai reagir da forma que ns queremos e dando os retornos que ns esperamos. As duas principais bibliotecas de mock que ns temos a Mockito e a Powermock.

Teste de integrao

Ao invs de usar um mock para simular os objetos e ambientes externos, por que no usar algo de verdade?
Seguindo a linha dos 12 fatores para desenvolvimento de software, os ambientes de devsenvolvimento e produo devem ser semelhantes. Logo, se a aplicao funcionar usando um banco de dados de verdade, vamos testar usando um banco de dados de verdade.

Teste ponta--ponta

Esse o suprassumo dos testes. Muitas pessoas so contra faz-los porque eles so caros ou difceis de serem realizados. Mas esses testes so os mais prximos da realidade.
Nesse tipo de teste levantamentos todos os sistemas e dependncias de verdade. Buscando chegar o mais prximo do que feito no mundo real.

Teste caixa preta

Essa nomenclatura serve mais para dizer que o teste criado/planejado/executado sem saber as estruturas internas da aplicao.

Teste caixa branca

Ao contrrio dos testes caixa-preta, nos testes caixa-branca, os testes so criados j tendo em mente as estruturas internas da aplicao.

Teste de performance

Esses testes buscam descobrir como o desempenho do sistema em diferentes cenrios.

Teste de carga

Visa medir os tempos de resposta e vazes do sistema em diferentes cargas.

Teste de stress

Semelhante a teste anterior em termos de execuo, mas totalmente em sua filosofia. Esse teste busca tanto descobrir quais so os limites da aplicao bem como o comportamento do sistema atuando no limite.

Teste de regresso

Consiste em executar todos testes funcionais criados (ou demais testes quando relevante) para garantir que novas mudanas e alteraes no introduzam novos erros.

Teste de segurana

Tambm conhecido com teste de penetrao. Geralmente feito por alguma empresa externa e visa encontrar falhas de segurana tanto no cdigo quanto nos processos executados pela aplicao/empresa.

Teste de usabilidade

Mais focado para aplicaes que tem telas, esse tipo de teste consiste em navegar pelas telas feitas (ou por ideias de telas) para verificar se elas atendero o usurio.

Teste de aceitao

O sonho de consumo de todo o software. Os testes de aceitao vo dizer se o software est pronto ou no para receber o aceite do cliente.

Por que testar?

Qualidade. Fazer testes o que permite dizer que nossa aplicao funciona ou no. Como vocs viram no outro tpico, existem vrias formas de fazer isso.

Dicas gerais de como testar

Caso voc seja a Aurora ou Cinderella, voc tem uma fada madrinha que te dar uma mo para resolver os problemas. Caso voc no seja, voc precisa se ajudar.

Image aleatrio de fado madrinho

Separei algumas dicas para trabalhar tanto em ferramentas que podem te ajudar a fazerem bonito nesse baile dos testes.

Faa que os testes rodem de forma rpida

Desenvolver algo estressante ento as coisas precisam ser rpidas. Se cada vez que voc precisar rodar os testes, voc levar 10 minutos esperando, a tendncia que voc pare de testar.
Parando de testar, as coisas comeam a dar ruim. Dando ruim, os prazos vo se apertar. Apertando os prazos, voc vai tirar o que for menos necessrias para o sistema ir pra produo. Tirando o menos necessrio, voc tirar os testes e as coisas vo ficando pior. Ento MUITO importante que voc consiga fazer com que os testes rodem rpido.

Escreva um cdigo que facilite os testes

Se o seu cdigo no for pensado para testes, quando voc for escrev-los voc provavelmente ter dificuldades. Tendo dificuldade para testar, voc vai parar de testar. Parando de testar, as coisas comeam a dar ruim...

Evite o uso de static

Mtodos estticos como LocalDate.now() ou Objects.isNull() no podem ser mockeados facilmente. Ento, se voc precisa testar com algum comportamento especfico, fica complicado.

Sempre que aparecer um mtodo esttico, pense se isso pode afetar os testes. Caso afete, utilize um objeto para encapsular esse mtodo.

Saiba o porque do teste estar ali

Image ariel pentendo o cabelo

Muitas vezes ns fazemos as coisas sem saber bem o que estamos fazendo ou o porqu das coisas. Com isso, ns podemos testar umas 10 vezes a mesma lgica e deixar de testar algo importante. Ento, antes de escrever qualquer coisa crie algum tipo de "plano" onde voc define o que voc quer testar e o motivo desse teste.

Utilize ferramentas para verificar a cobertura de testes

Se ns no conseguimos medir, ns nem podemos dizer se estamos fazendo um bom trabalho (provavelmente, nosso trabalho est ruim).
O JaCoCo uma ferramenta tima para dizer como est nossa cobertura. O que estamos esquecendo e o que precisamos melhorar.

Mas no se prenda muito a isso

importante ter uma boa cobertura de teste. Particularmente, eu acho que 80% para um projeto maduro um bom nmero. Existem coisas que simplesmente so caras demais para serem testadas, ou que s no tem motivo para testar.
Alm disso, buscar os 100% pode dar a falsa sensao de que voc tem todos os casos possveis mapeados e que nunca vai acontecer um erro. Spoiler: a menos que o seu nome seja Mulan e voc esteja lutando contra os Hunos, voc vai errar.
Image mulan

Consideraes

Esse post foi mais terico. Nos prximos, vamos ver como fazer testes unitrios, mockeados e de integrao. Tudo isso trabalhando com Quarkus. Aguardem a continuao /o/


Original Link: https://dev.to/lucasscharf/aprendendo-sobre-testes-em-java-com-as-princesas-da-disney-1jk5

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To