Upload
beatriz-martinho-padilha
View
215
Download
0
Embed Size (px)
Citation preview
Teste de Software04: Que parte devo testar?
Marcelo d’[email protected]
2
Resumo desta aula
• Que partes devo testar?• Integração: driver, stub, e mock-up• Em que ordem devo testar as partes?
3
Que parte devo testar?
• Teste de Unidade• Teste de Integração• Teste de Sistema
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.
5
Funções diferentes
• Unidade– checa corretude de unidades
• Integração– consistência entre interfaces
• Sistema– valida implementação contra requisitos
6
Por que dividir?
• Elevar produtividade– Desenvolvimento e teste paralelo
Mais fácil construir pacote (/sistema) correto a partir de classes (/pacotes) corretas
7
Quiz
• É possível desenvolver sistemas corretos com unidades incorretas?
8
Quiz
• É possível desenvolver sistemas corretos com unidades incorretas?
SIM
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
10
Integração
• Drivers• Stubs
11
Integração
• Drivers• Stubs
X
S1 S2
main Driver
SUT
Stubs
Driver
• Operação que exercita o módulo sob teste– Envia valores, coleta e compara resultados
• Exemplo:– JUnit test cases
Exemplo: Driver
public class TestDriver extends TestCase { … public static void testDeposito(){ BankAccount sut = new BankAccount(100); sut.remove(60); Assert.assertEquals(sut.saldo(), 40); }}
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
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
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
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 }
18
Observe que o sistema nao esta preparado para receber um stub!
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);}
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);}
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);}
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!!!
23
Em que ordem integrar?
• Estática– Big-Bang, Top-Down, Bottom-Up
• Dinâmica– Feature
24
Em que ordem integrar?
• Estática– Big-Bang, Top-Down, Bottom-Up
• Dinâmica– Feature
25
Resumo desta aula
• Que partes devo testar?• Integração: driver, stub, e mock-up• Em que ordem devo integrar as partes?