Aula 26 Testes de Caixa Preta (Exercícios) Danyllo Albuquerque LES/DI/PUC-Rio Novembro / 2014
Sumário Revisão Correção do Exemplo Exercícios 2
Testes Caixa Preta Testes Caixa Preta (ou Caixa Fechada) consideram um módulo sob testes uma caixa opaca, i.e., não há conhecimento a respeito da estrutura interna, apenas do que o módulo faz. Testes Caixa Preta utilizam, exclusivamente, as especificações do artefato para formular os casos de teste Consideram-se Relações entre entradas e saídas Assertivas Requisitos Conhecimento do domínio da aplicação 3
Testes Caixa Preta Mas como escolher um conjunto de casos de testes adequados dentre todo o conjunto de entradas válidas e inválidas? É impraticável / impossível testar todas as possíveis entradas, mesmo para funções muito simples Ex.: int soma( int x, int y) Critérios para seleção de entradas: Aleatório Classes de Equivalência Análise de Limite 4
Testes Caixa Preta Aleatório Cada módulo / sistema possui um conjunto domínio de entradas do qual as entradas de teste são selecionadas Se um testador escolhe aleatoriamente (ou ao acaso) entradas de teste deste domínio, isto é chamado de teste aleatório Ex.: soma(2, 3), soma(0, 1)... Vantagens: Fácil e de baixo custo. Desvantagens: Não há garantia da qualidade dos casos de teste. 5
Testes Caixa Preta Classes de Equivalência 6
Testes Caixa Preta Classes de Equivalência Vantagens: Reduz o conjunto de casos de testes Diversifica o conjunto de casos de testes, aumentando a probabilidade de detectar defeitos Desvantagens: Não é fácil identificar todas as classes de equivalência 7
Testes Caixa Preta Análise de Limites Muitos erros comuns de programação ocorrem nas condições limites Ex.: for( i = 0; i < x; i++ ) ou for( i = 0; i <= x; i++ )? O critério de Análise de Limites tem como objetivo usar entradas próximas aos limites para exercitar a checagem dessas condições Geralmente é usada para refinar as entradas criadas com o critério de Classes de Equivalência Também pode ser aplicado às saídas 8
Testes Caixa Preta Combinando Classes de Equivalência e Análise de Limites: É necessário ter um conjunto de casos de testes que cubra todas as classes de equivalência e todos os limites Mas é importante que o conjunto de casos de testes seja minimal! Se fizer um caso de teste para cada caso, o número aumentará rapidamente É possível criar casos de testes que cubram mais de uma classe de equivalência válida ao mesmo tempo Mas é importante testar cada classe de equivalência inválida independentemente para melhor observar cada exceção 9
Exemplo Função char* substring( char *str, int begin ) Um função recebe uma string que contém apenas caracteres alfanuméricos e um inteiro, begin, e retorna uma string contendo os caracteres da string de entrada contidos (inclusive) entre begin e o último caractere Ex.: substring( hamburguer, 4 ) == urguer Defina as classes de equivalência válidas e inválidas das entradas Faça a análise de limite para a variável begin Descreva um conjunto de casos de testes que exercite todas as classes de equivalência válidas e inválidas, bem como todos os limites da variável begin 10
Correção - Exemplo Do enunciado derivamos duas assertivas: 1. STR só pode ter NA 2. BEGIN deve ser >=0 3. O Total de caracteres de STR [0, TAM-1] tal que BEGIN deve ser <= TAM-1 11
Correção - Exemplo Da primeira assertiva Classe 1. STR só pode ter NA (válida) Classe 2. STR contem 1,N CE (Inválida) Da segunda assertiva Classe 3. BEGIN = 0 (Válida) (LI) Classe 4. BEGIN < 0 (inválido) (AbLI) Classe 5. BEGIN > 0 (válido) (AcLI) Da terceira assertiva Classe 6. BEGIN = TAM-1 (válido) (LS) Classe 7. BEGIN < TAM-1 (válido) (AbLS) Classe 8. BEGIN > TAM-1 (inválido) (AcLS) 12
Correção - Exemplo Da primeira assertiva Classe 1. STR só pode ter NA (válida) { hamburguer, 4} Classe 2. STR contem 1,N CE (Inválida) { *#$hamburguers, 3} Da segunda assertiva Classe 3. BEGIN = 0 (Válida) (LI) { modularidade, 0} Classe 4. BEGIN < 0 (inválido) (AbLI) { modularidade -1} Classe 5. BEGIN > 0 (válido) (AcLI) { modularidade, 1} Da terceira assertiva Classe 6. BEGIN = TAM-1 (válido) (LS) { teste, 4} Classe 7. BEGIN < TAM-1 (válido) (AbLS) { teste, 3} Classe 8. BEGIN > TAM-1 (inválido) (AcLS) { teste, 6} 13
Correção - Exemplo Assertiva ID Entrada Classe Valida (LC) Classe inválida (LC) 1 2 3 1 { hamburguer, 4} Classe 1 Classe 5, 7 2 { *#$hamburguer, 3} Classe 2 3 { modularidade, 0} Classe 3 (LI) Classe 1, 7 4 { modularidade -1} Classe 4 (AbLI) 5 { modularidade, 1} Classe 5 (AcLI) Classe 1,7 6 { teste, 4} Classe 6 (LS) Classe 1, 5 7 { teste, 3} Classe 7 (AbLS) Classe 1, 5 8 { teste, 6} Classe 8 (AcLS) 14
Dúvidas? 15
Trabalhos práticos e dúvidas Monitor - 2ª. Feira (1630 as 1730) dwalbuquerque@inf.puc-rio.br woizumi@inf.puc-rio.br 16