Desenho de casos de teste



Documentos relacionados
Testes de software - Teste funcional

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

Projeto de Casos de Teste

Plano de testes. Norma ANSI/IEEE para Documentação de Teste de Software define plano de testes como:

1. Quando algo visível para os usuário finais é um desvio em relação ao especificado ou um comportamento não esperado, isso é chamado de:

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Aula 20 Testes 3. Alessandro Garcia Leonardo da Silva Sousa OPUS Group/LES/DI/PUC-Rio Dezembro 2016

Fundamentos de Teste de Software

Engenharia de Software. Teste de Software. Introdução. Profa. Dra. Lúcia V. L. Filgueiras Profa. Dra. Selma Shin Shimizu Melnikoff

Vamos estudar o que se entende por «programação», que é uma linguagem de programação e ver algumas terminologias própria de programação e como

SSC 0721 Teste e Validação de Software

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Introdução ao Teste de Software

Lógica de Programação I

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software

MC102 Algoritmos e Programação de Computadores

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

6. QUAIS AS TÉCNICAS E RESPECTIVOS CRITÉRIOS DE TESTE EXISTENTES?

Visualização 2D: - Transformação window to viewport - Clipping

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Engenharia de Software

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Introdução à Programação em C Input / Output

Introdução a Testes de Software. Ricardo Argenton Ramos

Desenho de Segmentos de Recta

Teste de Software: Teste Funcional. Simone Senger Souza ICMC/USP

Linguagens de Programação Aula 14

Fundamentos Programação

Estruturas de Repetição

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Exercícios Repetição

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem C/C++ Estrutura Condicional. Prof: Rosemary Melo

Introdução à Programação

Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo

Introdução à Programação. João Manuel R. S. Tavares

Métodos Numéricos Zeros Posição Falsa e Ponto Fixo. Professor Volmir Eugênio Wilhelm Professora Mariana Kleina

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Questão 1 Analise o trecho do código abaixo, escrito na linguagem C#:

Nós estamos acostumados com operações aritméticas: soma, subtração, multiplicação e divisão.

Matemática. Exame Discursivo 07 / 12 / ª Fase. Caderno de prova. Boa prova!

Introdução à Programação em C (II)

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Resolução das Questões Discursivas

Algoritmos e Programação

Capítulo 8. Estruturas de Controle no Nível de Sentença

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Linguagem Java - Introdução

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Programação Introdução

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Variáveis primitivas e Controle de fluxo

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Aula 6 Instruções de Seleção Cleverton Hentz

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 04 Algoritmos e Programação Estruturada

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Teste de Software. Teste Funcional Teste Estrutural. Teste Baseado em Erros (Análise de Mutantes)

3. Linguagem de Programação C

Tipos Primitivos, estruturas de iteração e decisão.

Processamento digital de imagens

8º ANO ENSINO FUNDAMENTAL Matemática. 1º Trimestre 45 questões 26 de abril (Sexta-feira)

LISTA DE EXERCÍCIOS: 1ª Unidade

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Programação de Redes de Computadores

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Comandos em C (cont.)

TÉCNICO DE INFORMÁTICA - SISTEMAS

Desenvolvimento de programas. Análise do problema. Análise do problema. Análise do problema. Desenvolvimento do algoritmo. Codificação do programa

1. A principal razão de dividir o processo de teste em tarefas distintas é:

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Português Estruturado

4. Constantes. Constantes pré-definidas

Estruturas de Repetição. for() while() do-while() break; continue;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Transcrição:

Desenho de casos de teste A função dos casos de teste é fornecer informação rápida e eficientemente Em teoria da informação, define-se informação em termos de redução de incerteza. Se há pouca incerteza, há pouca informação para ser ganha Um caso de teste que não promete obter informação significativa está mal concebido. Um bom caso de teste dá informação valiosa, quer o programa passe o teste quer falhe Universidade Portucalense Engenharia de Software ES05 2014-2015 1

Características de um bom teste Tem uma probabilidade razoável de apanhar um erro Ao procurar ideias para casos de teste, recua-se a partir de uma ideia de como o programa pode falhar. Se o programa poderia falhar desta maneira, como é que vamos apanhar essa situação? Não é redundante É o melhor da família de testes semelhantes Não é demasiado simples nem demasiado complexo Podem-se combinar vários testes num caso, mas sem exageros Torna evidentes as situações de falha Universidade Portucalense Engenharia de Software ES05 2014-2015 2

Qualidade dos testes Objetivos principais (em resumo...) Encontrar erros considerados relevantes por todos Ajudar a corrigir esses erros Um teste é melhor do que outros se for: Mais provável expor um erro, se ele existir Mais provável dar resultados significativos (motivadores) Mais credível (realista, representativo de acontecimentos resultantes da utilização normal do programa) Mais fácil de avaliar (não há dúvidas sobre o resultado) Útil para o diagnóstico (fácil de reproduzir) Mais informativo Adequadamente complexo Universidade Portucalense Engenharia de Software ES05 2014-2015 3

O que é um caso de teste? IEEE standard 610 (1990) Um conjunto de entradas, condições de execução, e resultados esperados desenvolvido para um objetivo particular, tal como exercitar um determinado caminho do programa ou verificar a satisfação de um requisito específico IEEE standard 829-1983 Documentação especificando entradas, resultados esperados, e um conjunto de condições de execução para um item de teste Boris Beizer (1995, p. 3) Uma sequência de um ou mais sub-testes executados em sequência porque o resultado ou estado final de um sub-teste é a entrada ou estado inicial do seguinte. Universidade Portucalense Engenharia de Software ES05 2014-2015 4

Classes de equivalência e valores fronteira Classes de equivalência Se se espera o mesmo resultado de dois testes, então são considerados equivalentes Um grupo de testes forma uma classe de equivalência se entendemos que: Todos testam o mesmo Se um deles encontra um erro, os outros provavelmente também Se um deles não encontra um erro, os outros provavelmente também não Frequentemente um grupo de testes caem na mesma classe de equivalência quando: envolvem as mesmas classes de entrada dão origem às mesmas operações no programa afetam as mesmas variáveis de saída nenhum, ou todos, forçam o programa a fazer tratamento de erros Universidade Portucalense Engenharia de Software ES05 2014-2015 5

Abordagens ao teste Test-to-pass Atitude inicial Para encontrar erros em condições normais de funcionamento Test-to-fail Segunda fase Para encontrar erros em condições anormais de funcionamento Levar o programa ao limite, e mesmo passar o limite Universidade Portucalense Engenharia de Software ES05 2014-2015 6

Condições para deteção de defeitos Alcance Para detetar um defeito, os dados de entrada fornecidos ao programa devem provocar a execução da instrução que contém o erro Necessidade Para detetar um defeito, os dados de entrada fornecidos ao programa devem fazer com que a instrução que contém o erro produza um valor diferente do valor correto Propagação Para detetar um defeito, os resultados internos incorretos produzidos pela instrução que contém o erro devem ser visíveis no resultado do programa Universidade Portucalense Engenharia de Software ES05 2014-2015 7

Um exemplo (1) void check_square(double x) { double y=x; if (x<100) y= x+x ; /* devia ser x*x */ else y= sqrt(x ); if (y>x) System.out.println( verificado ); } Universidade Portucalense Engenharia de Software ES05 2014-2015 8

Um exemplo (2) Alcance x < 100 Necessidade x 2 e x 0 Propagação Requer que (x + x > x) tenha um valor lógico diferente de (x * x > x). Isto é verdade quando 0 < x <= 1 ou x < 0. Para detetar este defeito, os dados de entrada de um caso de teste devem satisfazer as seguintes condições: (x < 100) e (x 2 e x 0) e ((0 < x <= 1) ou (x < 0)) Universidade Portucalense Engenharia de Software ES05 2014-2015 9

Cobertura de linhas Cobertura de linhas Todas as linhas de código têm que ser testadas pelo menos uma vez IF (A > B AND C = 5) THEN do SOMETHING SET D = 5 Neste exemplo há quatro opções: A > B e C = 5 A > B e C 5 A B e C = 5 A B e C 5 O caso 1 testa todas as linhas de código Universidade Portucalense Engenharia de Software ES05 2014-2015 10

Cobertura de ramos Cobertura de ramos Todas as seleções são testadas para cada uma das opções Inclui o teste de todos os ramos e todas as instruções No exemplo anterior, seria necessário testar um caso em que do SOMETHING é executado, e outro em que não é Universidade Portucalense Engenharia de Software ES05 2014-2015 11

Cobertura de condições Cobertura de condições Testa todas as formas pelas quais uma condição pode ser feita verdadeira ou falsa No exemplo, todos os quatro casos Universidade Portucalense Engenharia de Software ES05 2014-2015 12

Teste de caminhos O teste de caminhos não garante que o programa não tem erros Exemplo: INPUT A INPUT B PRINT A / B Funciona com A=1 e B=2, e testa todos os caminhos O teste é completo? O problema não é de caminhos, mas de dados Universidade Portucalense Engenharia de Software ES05 2014-2015 13

Um exemplo A função pos_sum calcula a soma dos elementos positivos do array a; num_of_entries é o número de elementos do array pos_sum(a, num_of_entries) returns integer int sum = 0 int i = 0 while (i < num_of_entries) if a[i] > 0 sum = sum + a[i] endif i = i + 1 end while return sum end pos_sum O array a = [ 1, -45, 3] testa todas as instruções (linhas) e todos os ramos do programa Universidade Portucalense Engenharia de Software ES05 2014-2015 14

Teste de ciclos Muitos defeitos estão associados à utilização de ciclos Se um ciclo pode ter uma gama de 0 a n iterações, devem ser usados casos de teste com: zero iterações uma iteração duas iterações k iterações, onde k < n n-1 iterações n iterações n+1 iterações (se possível) Exemplo: pretende-se somar os primeiros k elementos de um array com 20 elementos (isto é, n = 20) Universidade Portucalense Engenharia de Software ES05 2014-2015 15

Outro exemplo (1) // Return the greatest // common denominator. int euclid (int m, int n) { assert(n > 0); assert(m > 0); int r; if (n > m) { r = m; m = n; n = r; } r = m % n ; while (r! = 0) m = n; n = r; r = m % n ; } return n; } Universidade Portucalense Engenharia de Software ES05 2014-2015 16

Outro exemplo (2) n > m r!= 0 Caso de teste Caminho F F n = 3, m = 9 a c V F n = 9, m = 3 b c V V n = 8, m = 3 b d d d c Uma sugestão para gerar caminhos de teste: 1. Definir um caminho base, o principal do algoritmo 2. Alterar o resultado da primeira condição, tentando manter os resultados das restantes 3. Em seguida alterar o resultado da segunda condição. Repetir este processo para cada condição 4. Considerar o primeiro caminho variante (resultado do ponto 2) como o caminho base, e repetir o processo. 5. Repetir o ponto anterior para cada um dos caminhos alternativos Universidade Portucalense Engenharia de Software ES05 2014-2015 17

Encontrando classes de equivalência (1) Duas pessoas a analisar o mesmo programa encontrarão diferentes classes de equivalência. É um processo subjetivo Isto não significa que todas as soluções são corretas! Compensa olhar para as classes de equivalência encontradas Ajuda a selecionar bem os testes, evitando perder tempo a repetir o que no fundo é o mesmo teste Testa-se um ou alguns dos casos de cada classe de equivalência Universidade Portucalense Engenharia de Software ES05 2014-2015 18

Encontrando classes de equivalência (2) Não esquecer classes de equivalência para entradas inválidas É frequentemente a melhor fonte de erros Exemplo: um programa deve aceitar um número entre 1 e 99 Há pelo menos quatro classes de equivalência: Qualquer número entre 1 e 99 é válido Qualquer número menor que 1 é demasiado pequeno Qualquer número maior que 99 é demasiado grande Se não é um número, não é aceite Universidade Portucalense Engenharia de Software ES05 2014-2015 19

Classes de equivalência - Outlines Organizar as classificações encontradas numa tabela ou outline 1. Fornecer um número 1.1. Caso válido 1.1.1. Entre 1 e 99 1.2. Casos inválidos 1.2.1. 0 1.2.2. > 99 1.2.3. Cálculo cujo resultado é um valor inválido 1.2.4. Números negativos 1.2.5. Letras e outros caracteres não numéricos 1.2.5.1. Letras 1.2.5.2. Operadores aritméticos tais como +, -, *, / 1.2.5.3. Outros caracteres não numéricos 1.2.5.3.1. Com código ASCII menor que o do 0 1.2.5.3.2. Com código ASCII maior que o do 9 Universidade Portucalense Engenharia de Software ES05 2014-2015 20

Domínio de entradas Passo 1 identificar funções testáveis Casos de uso podem ser usados para identificar funções testáveis No caso de POO, cada método público pode ser uma função testável Passo 2 identificar todos os parâmetros que podem influenciar o comportamento de cada função testável Se o método pertence a uma classe com estado interno, este tem que ser incluído como parâmetro Passo 3 - definir os domínios das entradas Abordagem interface-based Considera cada parâmetro individualmente Abordagem functionality-based Considera as características que correspondem à funcionalidade pretendida Universidade Portucalense Engenharia de Software ES05 2014-2015 21

Gamas de valores Procurar gamas de valores Sempre que se encontra uma gama de valores, encontram-se várias classes de equivalência Normalmente três classes inválidas: valores abaixo do limite, valores acima do limite, e valores não numéricos Procurar gamas múltiplas (por exemplo escalões fiscais) Cada sub-gama é uma classe de equivalência A transição entre gamas contíguas é frequentemente fonte de problemas Procurar pertença a um grupo Se uma entrada deve pertencer a um grupo, uma classe de equivalência inclui todos os membros do grupo, e outra tudo o resto Por exemplo, nomes de países Universidade Portucalense Engenharia de Software ES05 2014-2015 22

Listas e menus Analisar respostas a listas e menus Tem que se fornecer um valor de uma lista. O programa responde de forma diferente a cada valor Cada valor possível é uma classe de equivalência Exemplo: Resposta Sim ou Não a Tem a certeza? (Sim/Não) Exemplo: estado civil no impresso do IRS Procurar variáveis que têm que ser iguais Pode escolher qualquer cor desde que seja preto. Exemplo: o produto está esgotado, exceto na cor preta. Escolhas que costumavam ser válidas deixam de o ser; verificar que só é possível escolher essa cor Universidade Portucalense Engenharia de Software ES05 2014-2015 23

Tempo Criar classes de equivalência baseadas no tempo Suponhamos que se prime a tecla de espaço antes, durante, ou depois do carregamento de um programa do disco. Testes deste tipo fazem falhar alguns programas. Classes de equivalência: Tudo que se faz muito antes da operação, tudo que se faz pouco antes da operação, tudo que se faz pouco antes do programa terminar a leitura, etc. Procurar grupos de variáveis que devem dar origem a cálculos com um dado resultado Fornecer os três ângulos de um triângulo; a soma tem que ser 180º Universidade Portucalense Engenharia de Software ES05 2014-2015 24

Baseadas nas saídas Procurar eventos de saída equivalentes Desenhar um segmento de reta Classe de equivalência válida: desde 1 pixel de largura, e até 10cm de comprimento Classes de equivalência inválidas: (1) não é desenhado o segmento, (2) o segmento tem mais de 10cm, (3) é desenhada uma curva A dificuldade está em determinar que entradas se devem dar ao programa para gerar as diferentes saídas Universidade Portucalense Engenharia de Software ES05 2014-2015 25

Fronteiras - gamas de valores Devem-se usar, normalmente, até meia dúzia de casos de cada classe de equivalência Os melhores casos estão nas fronteiras das classes O maior, o menor, o próximo, o mais alto, o mais feio... Para detetar o problema das desigualdades ( < ou?) Normalmente os programas que falham fora das fronteiras também falham nas fronteiras Universidade Portucalense Engenharia de Software ES05 2014-2015 26

Fronteiras - grupos de variáveis Há situações em que em vez de se pensar só numa variável, é necessário pensar em grupos de variáveis Exemplo: Dia do mês, numa data 1-28, 1-29, 1-30, 1-31 Dividem-se os meses em três conjuntos: {Fevereiro} {Abril, Junho, Setembro, Novembro} {Janeiro, Março, Maio, Julho, Agosto, Outubro, Dezembro} Para teste, seleciona-se pelo menos um mês de cada conjunto Universidade Portucalense Engenharia de Software ES05 2014-2015 27

Exemplos Fronteiras - exemplos Se a gama válida é 1 a 99, os casos válidos são 1 a 99. Usar 0 e 100 para testes de valores inválidos Se um programa deve escrever cheques com valores de 1 a 99, aceitará escrever cheques de 0, 100, ou valores negativos? Se o programa espera uma letra maiúscula, testar A e Z. Deve-se testar @ porque é vizinho de A, e [ que é vizinho de Z. Testar também a e z. Se o programa deve desenhar linhas retas de largura superior a 1 pixel, e até 10 cm de comprimento, testar com uma linha de largura 1 pixel e de comprimento 10 cm. Testar com uma linha de 0 pixels de largura. Se a soma das entradas deve ser 180, testar 179, 180 e 181. Se o programa espera um dado número de valores de entrada, fornecer-lhe o valor correto, um a menos e um a mais. Universidade Portucalense Engenharia de Software ES05 2014-2015 28

Exemplo de classes de equivalência (1) A referência dos produtos de uma empresa tem entre 3 e 15 caracteres alfanuméricos, dos quais os 2 primeiros têm que ser letras 1: Número de caracteres entre 3 e 15 2: Têm que ser alfanuméricos 3: Os dois primeiros têm que ser letras 3 classes de equivalência derivam da primeira condição: CE1: menos de 3 caracteres, inválido CE2: entre 3 e 15 caracteres, válido CE3: mais de 15 caracteres, inválido 2 classes de equivalência derivam da segunda condição: CE4: caracteres todos alfanuméricos, válido CE5: algum carácter é não alfanumérico, inválido 2 classes de equivalência derivam da terceira condição: CE6: os dois primeiros caracteres são letras, válido CE7: algum dos dois primeiros caracteres não é uma letra, inválido Universidade Portucalense Engenharia de Software ES05 2014-2015 29

Exemplo de classes de equivalência (2) A tabela de descrição das classes de equivalência poderia ser: Condição Classes de equivalência válidas Classes de equivalência inválidas 1 CE2 CE1, CE3 2 CE4 CE5 3 CE6 CE7 Em seguida devem ser analisados os valores fronteira, ou limite. Por exemplo para o comprimento da referência: 1: Valor imediatamente abaixo do limite inferior (2) 2: Valor no limite inferior (3) 3: Valor imediatamente acima do limite inferior (4) 4: Valor imediatamente abaixo do limite superior (14) 5: Valor no limite superior (15) 6: Valor imediatamente acima do limite superior (16) Universidade Portucalense Engenharia de Software ES05 2014-2015 30

Exemplo de classes de equivalência (3) Exemplo de valores de entradas para contemplar as classes de equivalência e valores fronteira No. Valor de entrada Classes de equivalência válidas 1 abc1 CE2, CE4, CE6, (3) 2 ab1 CE2, CE4, CE6, (2) 3 abcdef123456789 CE2, CE4, CE6, (5) 4 abcde123456789 CE2, CE4, CE6, (4) 5 abc* CE2, CE6 (3) CE5 6 ab CE4, CE6 CE1, (1) 7 abcdefg123456789 CE4, CE6 CE3, (6) 8 a123 CE2, CE4, (3) CE7 9 abcdef123 CE2, CE4, CE6 Classes de equivalência inválidas Universidade Portucalense Engenharia de Software ES05 2014-2015 31

Critérios de combinação de classes (1) Quando há várias classes de equivalência correspondentes a diferentes variáveis, temos necessidade de testar combinações de valores dessas variáveis. Dependendo da situação, podemos elaborar conjuntos de casos de teste mais ou menos exaustivos. Exemplo: três partições com classes [A,B], [1,2,3] e [x,y] Critério: Cobertura de todas as combinações 12 casos: (A,1,x) (A,1,y) (A,2,x) (A,2,y) (A,3,x) (A,3,y) (B,1,x) (B,1,y) (B,2,x) (B,2,y) (B,3,x) (B,3,y) Universidade Portucalense Engenharia de Software ES05 2014-2015 32

Critérios de combinação de classes (2) Critério: Cobertura de um valor de cada classe 3 casos, por exemplo: (A,1,x) (B,2,y) (A,3,x) Outro exemplo para este critério: Suponhamos uma função para classificar um triângulo, dados os comprimentos dos 3 lados. Cada lado pode ter os valores de teste -1, 0, 1, 2, dos quais os dois primeiros correspondem a casos inválidos. Segundo este critério, bastariam os casos (-1,-1,-1) (0,0,0) (1,1,1) (2,2,2) que são claramente insuficientes Universidade Portucalense Engenharia de Software ES05 2014-2015 33

Critérios de combinação de classes (3) Cobertura de pares Um valor de cada classe deve ser combinado com um valor de cada classe de cada uma das outras variáveis Neste exemplo temos 8 casos: (A,1,x) (B,1,y) (A,2,x) (B,2,y) (A,3,x) (B,3,y) (A,-,y) (B,-,x) Cobertura de caso base É escolhido um valor base de cada classe, e é definido um teste com esses valores; outros testes são definidos variando uma variável de cada vez, a partir dos valores base Caso base, por exemplo: (A,1,x) Mais 4 casos, para os valores B, 2, 3 e y que não pertencem ao caso base: (B,1,x) (A,2,x) (A,3,x) (A,1,y) Cobertura de múltiplos casos base Como o anterior, mas com múltiplos casos base Universidade Portucalense Engenharia de Software ES05 2014-2015 34