O que é pra testar no miniep4?

O que é pra testar no miniep4?

por Gustavo Estrela de Matos -
Número de respostas: 18

No fim do enunciado do ep4 está escrito que devemos usar uma constante eps para testar as respostas das funções matemáticas. Isso dá a entender que precisamos fazer funções fazem as mesmas coisas que a biblioteca matemática faz e depois comparar os resultados, o que, pra mim, não faz sentido, porque se já fizemos essas funções, pra que usar a biblioteca matemática aprovo?
Acho que parece muito mais justo ver se os resultados fazem algum sentindo, como algum outro colega propos num post comparar sen(a+b) usando cos, ou ver se as funções levantam exceções quando mandamos um valor onde a função não está definida.
O que vocês acham? 

Em resposta à Gustavo Estrela de Matos

Re: O que é pra testar no miniep4?

por Eric Kenji Yoshikawa -

Pelo que eu entendi a constante epsilon é uma constante de "arredondamento"

As funções sin, cos, por exemplo,  do python3 devolvem um float "infinito", então é meio dificil de você comparar com algum outro resultado.

Nesses casos então o epsilon limitaria o número de casas decimais, assim 1,1234 != 1,123456789 , mas com um certo epsilon, seriam iguais.

É bem util, porque sin(pi) não é zero por exemplo.

Em resposta à Eric Kenji Yoshikawa

Re: O que é pra testar no miniep4?

por Gustavo Estrela de Matos -

Acho que eu me expressei mal. Eu vi muita gente que está testando as funções fazendo outras versões e comparando os resultados, o que, pra mim, nao faz sentido.

Em resposta à Gustavo Estrela de Matos

Re: O que é pra testar no miniep4?

por Alfredo Goldman -

Olá Gustavo,

    No final, a sua pergunta leva a uma discussão de fundo importante. Se eu já fiz, para que verificar? Por algumas razões:

  • garantir que no futuro, o que você fez continue funcionando;
  • ver o que acontece em outros ambientes, isso é, você pode rodar os seus testes em uma nova arquitetura, por exemplo;
  • Ter uma documentação de como usar o que foi testado.

    Note que usamos as funções matemáticas de Python que devem funcionar, mas imagine que você recebeu a biblioteca QuickerMath.py, que você não conhece? Como você faria?

Alfredo

Em resposta à Alfredo Goldman

Re: O que é pra testar no miniep4?

por Bruno Sesso -

Pelo que entendi, acho que a questão é se devemos implementar uma função que calcula sen(x) através de uma série, por exemplo, para testar se a função sen(x) da math é correta.
Ao meu ver isso também não parece fazer sentido.

Em resposta à Bruno Sesso

Re: O que é pra testar no miniep4?

por Eric Kenji Yoshikawa -

Sim,estou fazendo outros testes como ângulos suplementares, sen^2 + cos^2 = 1.

A ideia é testar a função para ver se ela realmente faz o que deveria.

 

Em um programa mais complexo, é bom saber que algumas funções que você implementou anteriormente não foram "quebradas" ao longo do desenvolvimento.

Em resposta à Bruno Sesso

Re: O que é pra testar no miniep4?

por Gustavo Estrela de Matos -

Exato. Fazer uma outra função que calcula um seno para calcular com a versão na math não faz sentido. 
Devemos então escolher uns 10 casos intermediarios e colocar a resposta esperada direto no programa?

Em resposta à Gustavo Estrela de Matos

Re: O que é pra testar no miniep4?

por Alfredo Goldman -

Olá Gustavo,

   Como assim "Não faz sentido"? Repito, imagine que você está testando uma biblioteca Math

recebida de alguém. Como você vai validá-la?

Alfredo

Em resposta à Alfredo Goldman

Re: O que é pra testar no miniep4?

por Gustavo Estrela de Matos -

Se eu fosse testar o seno, por exemplo, eu testaria o programa para alguns valores que eu sei o seno e testaria a função para alguns valores esquisitos, como valores muito altos ou strings, mas não criaria uma função que calcula o seno pra validar essa biblioteca que me passaram. Se eu fizesse isso eu teria que recriar essa biblioteca, não?

Em resposta à Gustavo Estrela de Matos

Re: O que é pra testar no miniep4?

por Eric Kenji Yoshikawa -

Pelo que eu entendi, você não deve implementar outra função que calcula o sen, cos, etc... E sim avaliar e validar as que já existem na biblioteca d Python usando o unittest

 

Em resposta à Eric Kenji Yoshikawa

Re: O que é pra testar no miniep4?

por Ian Carvalho -

Eu entendi  isso também.

Você usa valores tabelados  das funções e compara com os das bibliotecas.

Eu faria isso para testar uma biblioteca Math arbitrária

Em resposta à Ian Carvalho

Re: O que é pra testar no miniep4?

por Alfredo Goldman -

Olá Ian,

   Imagine agora que a empresa que vende a biblioteca Math fica sabendo do seus testes. Nesse caso, ela poderia ao invés de fazer contas, apenas fazer um simples switch e fazer
 passar o seu teste.

   Tentem abstrair um pouco que estamos testando uma biblioteca bem conhecida e que não terá
nenhum erro. Pensem que vocês vão receber uma biblioteca possivelmente não confiável e opapel de vocês é fazer testes tão abrangentes quanto o possível.

 

Alfredo

Em resposta à Gustavo Estrela de Matos

Re: O que é pra testar no miniep4?

por Eric Kenji Yoshikawa -

Então devemos implementar testes para verificar se o sin, cos etc do math do python funcionam como deveriam certo?

Testar se sin(0) = 0.

 

Em resposta à Eric Kenji Yoshikawa

Re: O que é pra testar no miniep4?

por Diego Araújo -

Certo.

Testar os casos extremos é importante! Mas não se limitem somente a isso, testem casos intermediários também.

Em resposta à Eric Kenji Yoshikawa

Re: O que é pra testar no miniep4?

por André Meneghelli -

Bom, aí que está o problema a meu ver. Só coisas como sen(0) = 0 ou sen(a+b)  podem ser testadas. Pois ao meu ver usar sen(pi) faz menos sentido do que implementar um teste com cosseno já que pi também deve ser testado.

O mesmo oocorre se quiser testar usando série de Taylor. Já que utiliza fatorial. 

Em resposta à André Meneghelli

Re: O que é pra testar no miniep4?

por Alfredo Goldman -

Olá André,

    Se você fez um teste que garante que o Math.Pi corresponde ao valor de Pi antes, faz sentido o teste de Math.sin(Math.Pi).

Mais, ainda, se você não confia no fatorial do Math, faça o seu antes. Todos os testes que verificam o funcionamento de formas

diferentes fazem sentido. Só para completar, não se usa o cálculo de fatorial, a cada iteração, em uma implementação eficiente

de série de Taylor sorriso

Alfredo

Em resposta à André Meneghelli

Re: O que é pra testar no miniep4?

por Thiago Pereira Bueno -

Uma ideia seria testar outras propriedades da função seno independentes de pi, cos... por exemplo testar se math.sin é limitada, se é função ímpar, se é periódica...

Em resposta à Eric Kenji Yoshikawa

Re: O que é pra testar no miniep4?

por Alfredo Goldman -

Olá Eric,

   Sim, mas esperamos de vocês algumas verificações mais sofisticadas.

 

Alfredo