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

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

Teste de Software Parte 2. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

Introdução ao Teste de Software

Introdução ao Teste de Software

Teste de Software Orientado a Objeto. Ricardo Argenton Ramos

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

Introdução a Verificação, Validação e Teste de Software

Teste de Validação. ações visíveis ao usuário e entradas e saídas do sistema reconhecíveis pelo usuário

Teste de Software: conceitos, técnicas e benefícios

Testes de software - Teste funcional

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

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

Teste de Software. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

Engenharia de Software

TESTES DE SOFTWARE. Profa. Maria Auxiliadora

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

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

Estágio II. Aula 02 Conceitos de Teste de Software. Prof. MSc. Fred Viana

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

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.

SSC 0721 Teste e Validação de Software

Algoritmos e Programação

Organização para Realização de Teste de Software

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:

NOTAS DIDÁTICAS DO ICMC

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software

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

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Falta Erro Falha. Motivação. Teste de Software. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro 6/6/11

TESTES DE SOFTWARE Unidade 1 Importância do Teste de Software. Luiz Leão

Fundamentos de Teste de Software

TS03. Teste de Software ESTÁGIOS DO TESTE DE SOFTWARE. COTI Informática Escola de Nerds

Estruturas de Controle em c#

Programação: Vetores

Estratégias de Testes Parte I

Aula 01. Programação Condicional Programação repetitiva

Teste de Software Parte 2. Prof. Jonas Potros

Introdução a Teste de Software

Organização para Realização de Teste de Software Quando o teste se inicia há um conflito de interesses:

C Comandos de Controle

Técnicas de Teste Estrutural. Teste de Fluxo de Controle. Introdução. Introdução. Introdução. Introdução. Introdução

Introdução à Programação. Estruturas de Repetição

Estrutura do programa

Teste de Software. Planejamento de Teste. Rosemary Silveira Filgueiras Melo

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

Técnicas de teste de software

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

Linguagem de Programação III

5 Comando de Seleção Simples e Composta

Comandos de desvio de fluxo. Expressões lógicas.

Computação 1 - Python Aula 7 - Teórica: Estrutura de Repetição com teste de parada: while 1/ 23

Aula 4 Estruturas de Controle

Aula 4 Objetivos if/else while

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Algoritmos e Programação

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

CASOS DE TESTE PALESTRANTE: MARCIA SILVA

3. Linguagem de Programação C

Métodos Computacionais. Comandos Condicionais e de Repetição em C

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Linguagem C. Prof.ª Márcia Jani Cícero

TESTES DE SOFTWARE Lista de Exercício 01. Luiz Leão

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Introdução à Ciência da Computação

Teste de Software. Objetivo: Executar software para revelar erros/falhas ainda não descobertos. Pode gastar 40% do esforço de desenvolvimento

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Transcrição:

Introdução a Testes de Software Ricardo Argenton Ramos ricargentonramos@gmail.com

Agenda da Aula Introdução sobre Testes; Testes Funcionais de software; Testes Estruturais de Software;

Teste de Software Processo para descobrir a existência de defeitos em um software. Um defeito pode ser introduzido em qualquer fase de desenvolvimento ou manutenção como resultado de um ou mais bugs imprecisão, desentendimentos, omissões e direcionamento a soluções particulares, inconsistências, incompletude. Debugging Processo de encontrar bugs associados a um defeito. Objetivos: Mostrar que a aplicação faz o esperado Mostrar que a aplicação não faz mais do que o esperado Teste é um processo referencial: É necessário existir uma definição precisa do que se quer verificar e quais os resultados esperados.

Teste de Software Cont. Todas as representações de um software podem e devem ser testados. Teste não implica em garantia de qualidade: é necessário ter um conjunto de métodos para a prevenção e remoção de defeitos. Nenhuma quantidade absurda de testes pode melhorar a qualidade de um software: teste ajuda a identificar problemas que poderíamos ter evitado. Garantia de qualidade requer processos além da execução de testes. Entretanto, processos de planejamento e especificação de testes executados mais cedo podem contribuir nesta direção.

Fases de Teste As fases de teste são independentes do paradigma de desenvolvimento de software utilizado, seja ele procedimental ou orientado a objetos. Teste de Unidade Teste de Integração Teste de Sistema Teste de Aceitação

Características de um bom Teste Um bom teste tem alta probabilidade de encontrar um erro; Um bom teste não é redundante; Um bom teste não deve ser muito simples nem muito complexo;

Técnicas de Testes Teste Funcional (Caixa Preta); Teste Funcional Teste Estrutural(Caixa Branca); Teste Estrutural

Teste Funcional Teste Funcional - Definição São técnicas de teste que são apenas consideradas as entradas e as saídas para verificar se em conformidade com os objetivos especificados. Em princípio, o teste funcional pode detectar todos os defeitos, submetendo o programa a todas as possíveis entradas (teste exaustivos). Se o domínio da entrada for muito grande pode ser inviável fazer este teste. É necessário utilizar um critério

Teste Funcional Critérios Funcionais O testador deverá encontrar um subconjunto de todas as possíveis entradas do programa e este subconjunto deve ter grande probabilidade de encontrar defeitos Particionamento de Classes de Equivalência Análise do Valor Limite

Teste Funcional Particionamento de Equivalência Para aplicar este critério de teste na aplicação a ser testada, deve-se seguir o seguinte roteiro: 1. Estabelecer as classes válidas (valores permitidos para o atributo) e as inválidas (valores proibidos), para cada atributo do software. 2. Gerar casos de teste selecionando um elemento de cada classe, de forma a ter o menor número de casos de testes possível.

Teste Funcional Exemplo de Elementos Requeridos do critério Particionamento em Classes de Equivalência para o Cadastro de Crianças Variável de Entrada Classes de Equivalência válidas Classes de Equivalência inválidas Variáveis de Entrada Saída Esperada Saída Obtida Peso Criança (P) da P>0 P<=0 1) 2,4 kg 2) 0 kg 3) -2,5 kg 1) OK 2) ERRO 3) ERRO 1) OK 2) ERRO 3) ERRO Data Nascimento (DN) de nasc <= sysdate nasc > sysdate 4) 21/03/2014 5) 22/03/2014 6) 23/03/2014 4) OK 5) OK 6) ERRO 4) OK 5) OK 6) ERRO Como o testador lê o caso de teste 1 2 3 Dentro da classe de equivalência válidas P>0 Digita no programa a entrada planejada no caso de teste 2,4 kg Executa a operação e verifica se a saída do programa é a mesma esperada no caso de teste OK 4 Caso a saída obtida seja a mesma da saída esperada o teste é feito para a próxima variável de entrada

Teste Funcional Análise do Valor Limite Em vez de se concentrar somente nas condições de entrada, a análise de valor limite deriva os casos de teste também do domínio de saída. Para aplicar este critério, deve-se seguir o seguinte roteiro: 1. Estabelecer as classes válidas e as inválidas para cada atributo do software (caso o critério descrito anteriormente tenha sido aplicado, essa etapa não precisa ser repetida). 2. Definir os limites dos atributos, ou seja, selecionar dados com um valor inferior, igual e outro superior ao limite.

Teste Funcional Exemplo de elemento requerido do critério Análise dos Valores Limites para o Cadastro de Crianças Variável de Entrada Entrada Saída Esperada Saída Obtida Data de Nascimento (DN) 1) 00 2) 01 3) 02 4) 30 5) 31 6) 32 7)11 8)12 9)13 10) ano atual-1 11) ano atual 12) ano atual+1 1- ERRO 2- OK 3- OK 4- OK 5- OK 6- ERRO 7- OK 8- OK 9- ERRO 10- OK 11- OK 12- ERRO 1- ERRO 2- OK 3- OK 4- OK 5- OK 6- ERRO 7- OK 8- OK 9- ERRO 10- OK 11- OK 12- ERRO Peso da Criança (P) 13) P=-1 14) P=0 15) P=1 13- ERRO 14- ERRO 15- OK 13- ERRO 14- ERRO 15- OK

Teste Funcional Teste Sistemático Combina os critérios Particionamentos de Equivalência e Análise do Valor Limite Variável de Entrada Classes de Equivalência válidas Classes de Equivalência inválidas Variáveis de Entrada Saída Esperada Saída Obtida Data Nascimento (DN) de nasc <= sysdate nasc > sysdate 1) 21/03/2014 2) 22/03/2014 3) 23/03/2014 1) OK 2) OK 3) ERRO 1) OK 2) OK 3) ERRO

Teste Funcional Outras Técnicas Error Guessing abordagem ad-hoc na qual o testador pratica, inconscientemente, uma técnica para projetar os casos de teste, supondo por intuição e experiência alguns tipos prováveis de erros. Grafo Causa-Efeito Ajuda na definição de um conjunto de casos de teste que exploram ambiguidade e incompletude nas especificações.

Teste Estrutural Teste Estrutural - Definição É um método de projeto de testes que usa a estrutura de controle do projeto procedimental para derivar casos de teste; Baseia-se num minucioso exame dos detalhes procedimentais; Caminhos lógicos de código do software são testados; Não é viável testar todos os caminhos lógicos de um programa (teste exaustivo).

Teste Estrutural Vamos Imaginar a Seguinte Situação Programa Pascal com 100 linhas e dois ciclos aninhados que executam entre 1 e 20 vezes cada um dependendo do dado da entrada. Dentro do ciclo interior 4 construções seentão-senão. 10 14 caminhos possíveis de execução Se cada caso de teste for executado por um processador mágico de testes em 1 mseg Vai levar 3170 anos para completar os testes.

Teste Estrutural Casos de Testes Estruturais Devem garantir que todos os caminhos independentes de um módulo tenham sido exercitados pelo menos uma vez; Todas as decisões lógicas em seus lados verdadeiro e falso devem ser executadas; Todos os laços de repetição nos seus limites e dentro de seus intervalos operacionais devem ser executados; As estruturas de dados internas devem ser executadas.

Teste Estrutural Geração de um Grafo Nós: blocos indivisíveis Não existe desvio para o meio do bloco; Uma vez que o primeiro comando do bloco é executado, os demais comandos são executados sequencialmente; Arestas ou Arcos: representam o fluxo de controle entre os nós Vamos a um exemplo!

Identifier.c (função main) 01 Teste Estrutural /* 01 */ { /* 01 */ char achar; /* 01 */ int length, valid_id; /* 01 */ length = 0; /* 01 */ printf ( Identificador: ); /* 01 */ achar = fgetc (stdin); /* 01 */ valid_id = valid_s(achar); /* 01 */ if (valid_id) /* 02 */ length = 1; /* 03 */ achar = fgetc (stdin); 05 /* 04 */ while (achar!= '\n') /* 05 */ { /* 05 */ if (!(valid_f(achar))) 06 /* 06 */ valid_id = 0; /* 07 */ length++; /* 07 */ achar = fgetc (stdin); 07 /* 07 */ } /* 08 */ if (valid_id && (length >= 1) && (length < 6) ) /* 09 */ printf ( Valido\n ); /* 10 */ else /* 10 */ printf ( Invalido\n ); /* 11 */ } 02 03 04 08 09 10 11

Detalhes Considerados no Teste Estrutural nó arco caminho simples (1,2,3,4,5,6,7) Completo Grafo (1,2,3,4,5,6,7,4,8,9,11) (1,2,3,4,5,6,7,4,8,10,11) fluxo de controle 05 06 07 01 02 03 04 08 09 10 11

Teste Estrutural Técnica Baseada em Erros Os requisitos de teste são derivados a partir dos erros mais frequentes cometidos durante o processo de desenvolvimento do software;

Teste Estrutural Teste de Mutação Hipótese do Programador Competente Programadores experientes escrevem programas corretos ou muito próximos do correto. Efeito de Acoplamento Casos de teste capazes de revelar erros simples são tão sensíveis que, implicitamente, também são capazes de revelar erros mais complexos.

Teste Estrutural Teste de Mutação [2] Passos da Análise de Mutantes 1- Geração de Mutantes Para modelar os desvios sintáticos mais comuns, operadores de mutação são aplicados a um programa, transformandoo em programas similares: mutantes.

length = 5 Saída = Valido Código Original length = 6 Saída = Invalido if ( (length >= 1) && (length < 6) ) printf ("Valido\n"); else printf ("Invalido\n"); Teste de Mutação - Exemplo Mutante 01 Teste Estrutural O mutante é eliminado quando as mesmas entradas, do código original e do mutante, geram saídas diferentes length = 5 Saída = Valido length = 6 Saída = Valido length = 5 Saída = Valido length = 6 Saída = Valido Mutante 02 if ( (length >= 1) (length < 6) ) printf ("Valido\n"); else printf ("Invalido\n"); if ((length >= 1) && (length <= 6) ) printf ("Valido\n"); else printf ("Invalido\n");

Exercício 1. Derive o grafo de fluxo do código a seguir

Resposta