Conhecendo Property Based Testing

Preview:

Citation preview

Globalcode – Open4education

Property Based TestingMariane Machado

Globalcode – Open4education

Quem sou eu

Desenvolvedora @mariane_sm

mariane.machado@gmail.com

Globalcode – Open4education

Antes de começar …

Como nós testamos normalmente? Casos de teste.

boolean isPositive(int n)

Globalcode – Open4education

Pensando além

O que nos levou a escolher esses casos de teste?

Por que não -2, 0, 2 e 5?

Example based testing

Globalcode – Open4education

Vida real

Nem sempre é fácil achar os casos de teste

Globalcode – Open4education

Outro exemplo

Dado 3 lados (a,b,c), dizer se eles formam um triângulo.

boolean isTriangle(int a, int b, int c)

Globalcode – Open4education

Condição de existência do Triângulo

|b - c| < a < b + c

|a - c| < b < a + c

|a - b| < c < a + b

Globalcode – Open4education

Vamos escolher casos de teste

EQUILÁTERO: a=2 b=2 c=2

ISÓSCELES: a=2 b=2 c=3

ESCALENO: a=2 b=3 c=4

NÃO FORMA TRIÂNGULO: a=1 b=2 c=3

Globalcode – Open4education

Código foi pra produção …

Quebrou com o input: a=3 b=1 c=2

Globalcode – Open4education

Implementação

if (a > |b - c|) and (a <= b+c) { return true

} return false

Retorna false pra (1,2,3) mas true pra (3,1,2)

Globalcode – Open4education

Problema (e solução)

Fato: normalmente não é fácil achar todos os casos de teste

Às vezes ficamos enviesados: difícil pensar “fora da caixa”

Property based testing ao resgate!

Globalcode – Open4education

Testando propriedades

Triângulo (1,2,3) == (3,2,1)

Condição de existência do triângulo é COMUTATIVA

Como colocar isso num teste?

Globalcode – Open4education

Property based testing

Globalcode – Open4education

Property based testing

Ajuda a encontrar casos de teste que não são tão óbvios ou que esquecemos.

Complementar ao example based testing

Globalcode – Open4education

Várias linguagens

Haskell: Quickcheck

Scala: Scalacheck

Java: JUnit Quickcheck

Javascript: JSVerify

Python: Hypothesis

Globalcode – Open4education

Trending topic

Globalcode – Open4education

Era isso !

Recommended