17
Globalcode – Open4education Property Based Testing Mariane Machado

Conhecendo Property Based Testing

Embed Size (px)

Citation preview

Page 1: Conhecendo Property Based Testing

Globalcode – Open4education

Property Based TestingMariane Machado

Page 2: Conhecendo Property Based Testing

Globalcode – Open4education

Quem sou eu

Desenvolvedora @mariane_sm

[email protected]

Page 3: Conhecendo Property Based Testing

Globalcode – Open4education

Antes de começar …

Como nós testamos normalmente? Casos de teste.

boolean isPositive(int n)

Page 4: Conhecendo Property Based Testing

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

Page 5: Conhecendo Property Based Testing

Globalcode – Open4education

Vida real

Nem sempre é fácil achar os casos de teste

Page 6: Conhecendo Property Based Testing

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)

Page 7: Conhecendo Property Based Testing

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

Page 8: Conhecendo Property Based Testing

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

Page 9: Conhecendo Property Based Testing

Globalcode – Open4education

Código foi pra produção …

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

Page 10: Conhecendo Property Based Testing

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)

Page 11: Conhecendo Property Based Testing

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!

Page 12: Conhecendo Property Based Testing

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?

Page 13: Conhecendo Property Based Testing

Globalcode – Open4education

Property based testing

Page 14: Conhecendo 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

Page 15: Conhecendo Property Based Testing

Globalcode – Open4education

Várias linguagens

Haskell: Quickcheck

Scala: Scalacheck

Java: JUnit Quickcheck

Javascript: JSVerify

Python: Hypothesis

Page 16: Conhecendo Property Based Testing

Globalcode – Open4education

Trending topic

Page 17: Conhecendo Property Based Testing

Globalcode – Open4education

Era isso !