Teste de Software 04: Que parte devo testar? Marcelo d’Amorim [email protected].

25
Teste de Software 04: Que parte devo testar? Marcelo d’Amorim [email protected]

Transcript of Teste de Software 04: Que parte devo testar? Marcelo d’Amorim [email protected].

Page 1: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

Teste de Software04: Que parte devo testar?

Marcelo d’[email protected]

Page 2: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

2

Resumo desta aula

• Que partes devo testar?• Integração: driver, stub, e mock-up• Em que ordem devo testar as partes?

Page 3: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

3

Que parte devo testar?

• Teste de Unidade• Teste de Integração• Teste de Sistema

Page 4: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

4

Que parte devo testar?

• Teste de Unidade• Teste de Integração• Teste de Sistema

Segue decomposição do sistema em módulos: classes, pacotes, e fachada.

Page 5: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

5

Funções diferentes

• Unidade– checa corretude de unidades

• Integração– consistência entre interfaces

• Sistema– valida implementação contra requisitos

Page 6: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

6

Por que dividir?

• Elevar produtividade– Desenvolvimento e teste paralelo

Mais fácil construir pacote (/sistema) correto a partir de classes (/pacotes) corretas

Page 7: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

7

Quiz

• É possível desenvolver sistemas corretos com unidades incorretas?

Page 8: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

8

Quiz

• É possível desenvolver sistemas corretos com unidades incorretas?

SIM

Page 9: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

9

Quiz

• É possível desenvolver sistemas corretos com unidades incorretas?

SIMsort(int[] input) { if (input.length > 100) ERROR!!! …}

ERROR não é alcançável, quando o sistema não chama sort()com arrays de tamanho > 100

Page 10: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

10

Integração

• Drivers• Stubs

Page 11: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

11

Integração

• Drivers• Stubs

X

S1 S2

main Driver

SUT

Stubs

Page 12: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

Driver

• Operação que exercita o módulo sob teste– Envia valores, coleta e compara resultados

• Exemplo:– JUnit test cases

Page 13: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

Exemplo: Driver

public class TestDriver extends TestCase { … public static void testDeposito(){ BankAccount sut = new BankAccount(100); sut.remove(60); Assert.assertEquals(sut.saldo(), 40); }}

Page 14: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

Stub

• Cenário: A e B são unidades. A depende de B, mas B não pode ser usado

• Stub: Substituto de B para testar A

Page 15: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

15

Por que usar stubs?

• O componente real (B) não está pronto• Usar componente real não é prático para

o teste. Exemplos:– Requer conexão de rede– É ineficiente

Page 16: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

16

Stub

• Pode ser trabalhoso implementar (http://www.easymock.org/, https://jmockit.dev.java.net/)

• Pode requerer modificação na interface do sistema

• Stub e Stubbed devem respeitar mesma interface

Page 17: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

17

Example: Stub

public static int testPath(int x){ y = foo(x); if (x > y) return x – y else if (x > y) return x + y; else x/y;}

public static int foo(int x) { // assuma que escrever ou usar // implementacao real é inviável }

Page 18: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

18

Observe que o sistema nao esta preparado para receber um stub!

Page 19: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

19

Passo 1: preparação da interfacepublic static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y;}static interface CmdFoo {public int foo(int x);}

Page 20: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

20

Passo 2: instanciação da interfacepublic static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y;}static interface CmdFoo {public int foo(int x);}…public static void test1() { int x = 1; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return x + 1; } }; testPath(x, foo1);}

Page 21: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

21

Passo 2: instanciação da interfacepublic static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y;}static interface CmdFoo {public int foo(int x);}…public static void test2() { int x = 1; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return x - 1; } }; testPath(x, foo1);}

Page 22: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

22

Passo 2: instanciação da interfacepublic static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else x/y;}static interface CmdFoo {public int foo(int x);}…public static void test3() { int x = 0; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return 0; } }; testPath(x, foo1);}

BANG!!!

Page 23: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

23

Em que ordem integrar?

• Estática– Big-Bang, Top-Down, Bottom-Up

• Dinâmica– Feature

Page 24: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

24

Em que ordem integrar?

• Estática– Big-Bang, Top-Down, Bottom-Up

• Dinâmica– Feature

Page 25: Teste de Software 04: Que parte devo testar? Marcelo d’Amorim damorim@cin.ufpe.br.

25

Resumo desta aula

• Que partes devo testar?• Integração: driver, stub, e mock-up• Em que ordem devo integrar as partes?