Teste de Software 02: Oracles Marcelo d’Amorim
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(_); array_1 sort2(_); array_2
Baseados em diferenciação new int[]{432, 909, 754, 7, 87}; sort1(_); array_1 sort2(_); 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