Teste de Software
02: Oracles
Marcelo d’Amorim
[email protected]
Resumo
• Limitação de oracles
• Tipos de oracles
• Exemplos
Oracle
• Função que classifica o comportamento de
uma execução (teste) como
– correto (teste passa) ou não (teste falha)
Oracles parciais
• Condição necessária mas insuficiente
para detectar um erro
• Fonte de incompletude
Oracles parciais: Exemplo
• Ordenação de um array de inteiros
int[] input = new int[]{432, 909, 754, 7, 87};
int[] output = sort(input);
Assert.assertTrue(isAscending(output));
assuma que sort() não faz mutação em input
Oracles parciais: Exemplo
• Ordenação de um array de inteiros
int[] input = new int[]{432, 909, 754, 7, 87};
int[] output = sort(input);
Assert.assertTrue(isAscending(output));
Assert.assertTrue(isPermutation(input, output));
Limitação
• Em geral, é indecidível automatizar a
construção de oracles
Tipos de oracles
• Programas sequenciais
– Usam asserção de estado
– Usam diferenciação
• Programas concorrentes
– ...
Baseados em asserção
• Onde a asserção é declarada?
– Programa teste: SUT, subject
• Declarado pelo programador
• Declarado pelo implementador da linguagem
– Teste
• Declarado pelo testador
Baseados em asserção
• Onde a asserção é declarada?
– Programa teste: SUT, subject
• Declarado pelo programador
• Declarado pelo implementador da linguagem
– Teste
• Declarado pelo testador
Baseados em asserção
• Onde a asserção é declarada?
– Programa teste: SUT, subject
• Declarado pelo programador
• Declarado pelo implementador da linguagem
– Teste
• Declarado pelo testador
Precioso para o testador! Entretanto, o programador
raramente escreve código com asserções. Note
também que as asserções da linguagem testam
apenas crash.
Baseados em asserção
• Onde a asserção é declarada?
– Programa teste: SUT, subject
• Declarado pelo programador
• Declarado pelo implementador da linguagem
– Teste
• Declarado pelo testador
Baseados em diferenciação
new int[]{432, 909, 754, 7, 87};
sort1(_);
array_1
Baseados em diferenciação
new int[]{432, 909, 754, 7, 87};
sort1(_);
sort2(_);
array_1
array_2
Baseados em diferenciação
new int[]{432, 909, 754, 7, 87};
sort1(_);
sort2(_);
array_1
array_2
Assert.assertEquals(array_1, array_2);
Formas de diferenciação
• Baseado em estado (slide anterior)
• Baseado em fluxo de controle
• Capture and Replay de tela de GUI
Resumo
• Limitação de oracles
• Tipos de oracles
• Exemplos
Download

Teste de Software Aula 2: Oracles