introdução a testes de software - federal university of ... · teste de software – cont. •...

27
Introdução a Testes de Software Ricardo Argenton Ramos [email protected]

Upload: others

Post on 14-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Introdução a Testes de

Software

Ricardo Argenton Ramos

[email protected]

Page 2: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Agenda da Aula

• Introdução sobre Testes;

• Testes Funcionais de software;

• Testes Estruturais de Software;

Page 3: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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.

Page 4: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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.

Page 5: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste nã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

Page 6: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste nã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;

Page 7: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Técnicas de Testes

• Teste Funcional (Caixa Preta);

• Teste Estrutural(Caixa Branca);

Teste Funcional

Teste Estrutural

Page 8: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 9: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Critérios Funcionais

• Particionamento de Classes de Equivalência

• Análise do Valor Limite

O testador deverá encontrar um subconjunto de todas as possíveis

entradas do programa e este subconjunto deve ter grande probabilidade de

encontrar defeitos

Teste Funcional

Page 10: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 11: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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 da

Criança (P)

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 de

Nascimento

(DN)

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

Exemplo de Elementos Requeridos do critério Particionamento

em Classes de Equivalência para o Cadastro de Crianças

Dentro da classe

de equivalência

P>0válidas

Como o testador lê o caso de teste

1 2 3

2,4 kg

Digita no programa

a entrada planejada

no caso de teste

OK

Executa a operação e verifica se

a saída do programa é a mesma

esperada no caso de teste

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

Page 12: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 13: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Exemplo de elemento requerido do critério Análise dos

Valores Limites para o Cadastro de Crianças

Teste Funcional

Page 14: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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 de

Nascimento

(DN)

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

Page 15: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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 Funcional

Page 16: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 17: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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 se-

então-senão.

• 1014 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

Page 18: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 19: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Teste Estrutural

Vamos a um exemplo!

Page 20: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

/* 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);

/* 04 */ while (achar != '\n')

/* 05 */ {

/* 05 */ if (!(valid_f(achar)))

/* 06 */ valid_id = 0;

/* 07 */ length++;

/* 07 */ achar = fgetc (stdin);

/* 07 */ }

/* 08 */ if (valid_id && (length >= 1) && (length < 6) )

/* 09 */ printf (“Valido\n“);

/* 10 */ else

/* 10 */ printf (“Invalido\n“);

/* 11 */ }

Identifier.c (função main) 01

02

03

04

05

06

07

08

09 10

11

Teste Estrutural

Page 21: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Detalhes Considerados no

Grafo• nó

• arco

• caminho

– simples

(1,2,3,4,5,6,7)

– Completo

(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

01

02

03

04

05

06

07

08

09 10

11

Teste Estrutural

Page 22: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 23: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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

Page 24: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

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, transformando-

o em programas similares: mutantes.

Teste Estrutural

Page 25: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Teste de Mutação - Exemplo

Teste Estrutural

Mutante 02

if ((length >= 1) && (length <= 6) )

printf ("Valido\n");

else

printf ("Invalido\n");

Mutante 01

if ( (length >= 1) || (length < 6) )

printf ("Valido\n");

else

printf ("Invalido\n");

Código Original

if ( (length >= 1) && (length < 6) )

printf ("Valido\n");

else

printf ("Invalido\n");

length = 5

Saída = Valido

length = 5

Saída = Valido

length = 6

Saída = Valido

length = 6

Saída = Valido

length = 6

Saída = Invalido

length = 5

Saída = Valido

O mutante é eliminado

quando as mesmas

entradas, do código original

e do mutante, geram saídas

diferentes

Page 26: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Exercício

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

Page 27: Introdução a Testes de Software - Federal University of ... · Teste de Software – Cont. • Todas as representações de um software podem e devem ser testados. • Teste não

Resposta