Escolar Documentos
Profissional Documentos
Cultura Documentos
Compilado a partir do material original gentilmente cedido pelos professores Sandra Fabbri (UFSCar) e Jos Carlos Maldonado (ICMC-USP)
1
?
T
Caso de Teste
Especificao de uma entrada para o programa e a correspondente sada esperada Entrada: conjunto de dados necessrios para uma execuo do programa Sada esperada: resultado de uma execuo do programa (um orculo esperado) Um bom caso de teste tem alta probabilidade de revelar um erro ainda no descoberto
Critrios de Teste
Critrio de Teste C
Objetivo:
... obter, de maneira sistemtica um conjunto T de casos de teste efetivo quanto meta principal de teste - revelar a presena de erros no programa
Tcnicas de Teste
Funcional Estrutural Baseada em Erros
A diferena est na fonte utilizada para estabelecer os requisitos de teste O importante no definir qual usar, mas saber us-las de forma complementar
7
Tcnicas de Teste
Funcional ou Teste Caixa Preta
baseada na especificao do software
Baseada em Erros
baseada nos erros tpicos e comuns cometidos durante o desenvolvimento
Teste Funcional
Os requisitos de teste so extrados da especificao do software Aborda o software de um ponto de vista macroscpico Problema:
Dificuldade em quantificar a atividade de teste - no se pode garantir que partes essenciais ou crticas do software foram executadas
Critrios:
Particionamento de Equivalncia Anlise do Valor Limite Grafo Causa-Efeito
9
Particionamento de Equivalncia
Descrio:
divide o domnio de entrada em classes ou parties de equivalncia que, de acordo com a especificao do programa, so tratadas da mesma maneira As classes, que podem ser vlidas ou invlidas, so definidas de acordo com as seguintes diretrizes:
se a condio de entrada especifica um intervalo, so definidas uma classe vlida e duas invlidas se a condio de entrada especifica um membro de um conjunto, so definidas uma classe vlida e uma invlida se a condio de entrada for booleana, so definidas uma classe vlida e uma invlida
10
Particionamento de Equivalncia
Aplicao:
de acordo com sua especificao existem, basicamente, quatro entradas:
um inteiro positivo (entre 1 e 20 3 parties) uma cadeia de caracteres um caractere a ser procurado a opo por procurar por mais caracteres (duas parties: uma para s e outra para n)
o domnio de sada consiste de duas respostas, que levam a outra diviso do domnio de entrada:
a posio na qual o caractere foi encontrado na string (caractere de entrada pertencente string) uma mensagem declarando que ele no foi encontrado (caractere de entrada no pertencente string)
11
Particionamento de Equivalncia
Dados de teste para o Teste de Particionamento de Equivalncia
x 34 0 3 entrada a sada esperada c resposta entre com um inteiro entre 1 e 20 entre com um inteiro entre 1 e 20 o caractere c aparece na posio 3 s k n o caractere k no ocorre na string fornecida
abc
12
Particionamento de Eqivalncia
Observao:
reduz o tamanho do domnio de entrada concentra-se em criar dados de teste baseados unicamente na especificao especialmente adequado para aplicaes em que as variveis de entrada podem ser facilmente identificadas e podem ter valores distintos problemas:
embora a especificao possa sugerir que um grupo de dados seja processado de forma idntica, isso pode no ocorrer a tcnica no fornece um guia para a determinao dos dados de teste
13
Partio de Equivalncia
Limites
14
Teste Estrutural
Os requisitos de teste so extrados de uma implementao em particular Teste dos detalhes procedimentais A maioria dos critrios dessa tcnica utiliza uma representao conhecida do programa como grafo de programa ou grafo de fluxo de controle
16
Teste Estrutural
Teste Baseado em Fluxo de Controle Critrios:
Teste de Comandos Teste de Ramos Caminho DD Teste de Condio Teste de Deciso/Condio Teste de Condio Mltipla Teste do Caminho Bsico Teste de Caminho
17
Teste Estrutural
Grafo de Fluxo de Controle ou Grafo de Programa
consiste de ns conectados por arcos com setas que mostram sua direo os ns representam blocos de comandos
bloco de comando: um conjunto de comandos tal que se o primeiro comando for executado, ento todos os comandos subseqentes tambm o sero
os arcos indicam precedncia, ou transferncia de controle essa representao permite que o programa seja examinado independentemente de sua funo
18
Teste Estrutural
Construes Bsicas do Grafo de Fluxo de Controle
seqncia
if
while
repeat
case
19
Teste Estrutural
Exemplo de Construo do Grafo de Fluxo de Controle
20
Teste Estrutural
Exemplo de Construo do Grafo de Fluxo de Controle
incio
leia nro se nro > 0 raiz = raiz-quadrada(nro) escreva raiz seno escreva mensagem de erro fim-se fim
4
21
Teste Estrutural
Exemplo de Construo do Grafo de Fluxo de Controle
incio
leia nro enquanto nro 0 2 3 se nro > 0 raiz = raiz-quadrada(nro) 4 escreva raiz seno escreva mensagem de erro fim-se 6 leia nro fim-enqto fim
7
4 5 6
Teste Estrutural
1 program exemplo(input, output); 2 var a: array[1..20] of char; 3 x, i: integer; 4 c, resposta: char; 5 achou: boolean; 6 begin 1 7 writeln (entre com um inteiro entre 1 e 20); 8 readln (x); 2 9 while (x < 1) or (x > 20) do 10 begin 3 11 writeln (entre com um inteiro entre 1 e 20); 12 readln (x) 13 end; 14 writeln (digite, x, caracteres); 4 5 15 for i := 1 to x do 16 read (a[ i ]); 6 7 17 readln; 18 repeat 19 writeln (digite o caracter a ser pesquisado: ); 8 20 readln (c); 21 achou := FALSE; 22 i := 1; 23 while (not(achou)) and (i <= x) do 9 24 begin 10 25 if a[ i ] = c then 11 26 achou := TRUE 27 else 12 28 i := i + 1 29 end; 13 14 30 if achou then 31 writeln (o caracter , c, aparece na posicao, i) 15 32 else 33 writeln (o caracter , c, no ocorre na string fornecida); 34 writeln; 35 writeln (deseja fazer a procura para outro caracter? [s/n]); 36 readln (resposta); 37 until (resposta = n) or (resposta = N); 38 end. 18
16
17
23
Teste Estrutural
1 program exemplo(input, output); 2 var a: array[1..20] of char; 3 x, i: integer; 4 c, resposta: char; 5 achou: boolean; 6 begin 1 7 writeln (entre com um inteiro entre 1 e 20); 8 readln (x); 2 9 while (x < 1) or (x > 20) do 10 begin 3 11 writeln (entre com um inteiro entre 1 e 20); 12 readln (x) 13 end; 14 writeln (digite, x, caracteres); 4 5 15 for i := 1 to x do 16 read (a[ i ]); 6 7 17 readln; 18 repeat 19 writeln (digite o caracter a ser pesquisado: ); 8 20 readln (c); 21 achou := FALSE; 22 i := 1; 23 while (not(achou)) and (i <= x) do 9 24 begin 10 25 if a[ i ] = c then 11 26 achou := TRUE 27 else 12 28 i := i + 1 29 end; 13 14 30 if achou then 31 writeln (o caracter , c, aparece na posicao, i) 15 32 else 33 writeln (o caracter , c, no ocorre na string fornecida); 34 writeln; 35 writeln (deseja fazer a procura para outro caracter? [s/n]); 36 readln (resposta); 37 until (resposta = n) or (resposta = N); 38 end. 18
1 a 2 b d 3 c
4 e 5 g 6
7 i 8 j 9 r l 11 n q s 15
16
k 10 m 12 13 o p
14
t 16
17 w 18
17
24
Teste de Comandos
Descrio:
Estabelece como requisito de teste que sejam executados todos os comandos do programa ao menos uma vez
Aplicao:
necessrio concentrar-se nos comandos que so controlados por condies fornecer um valor para x que esteja fora do intervalo para forar a execuo dos comandos no loop (linhas 11-12) quando x est dentro do intervalo, ele ser no mnimo 1 e o comando dentro do for (linha 16) ser executado
25
Teste de Comandos
Aplicao (cont.):
o comando if (linha 25) precisa ser executado, com as alternativas then e else (linhas 26 e 28) procurar por um caractere que esteja na cadeia e que force a procura dentro dela a entrada no while (linha 23) garantida o comando if (linha 30) precisa ser executado, com as alternativas then e else (linhas 31 e 33) um caractere que pertena e outro que no pertena cadeia (combinando com o if anterior uma cadeia de caracteres a, de um caractere e valores para a varivel c que ocorra e que no ocorra em a) por fim, preciso terminar o loop para executar o comando end
26
Teste de Comandos
Dados de teste para o Teste de Comandos (sute 1)
x 25 3 a entrada c sada esperada resposta entre com um inteiro entre 1 e 20 o caractere b aparece na posio 2 n 25 3 entre com um inteiro entre 1 e 20 o caractere d no ocorre na string fornecida n
abc
abc
Observao:
o nvel mnimo de cobertura esperado no teste estrutural
27
Teste de Comandos
Dados de teste para o Teste de Comandos (sute 2)
x 25 1 a entrada c sada esperada resposta entre com um inteiro entre 1 e 20 o caractere x aparece na posio 1 s a n o caractere a no ocorre na string fornecida
Observao:
A busca de um caractere que no existe pode ser feita na mesma execuo do programa
28
Teste de Ramos
Descrio:
Estabelece como dados de teste exercitar todas as sadas verdadeiro e falso de todas as decises
Aplicao:
conveniente observar o grafo do programa observando o grafo, necessrio gerar dados de teste que causem as duas sadas verdadeiro e falso que ocorrem nos ns 2, 5, 9, 10, 14 e 17 para o n 2, um valor da varivel x menor que 1 ou maior que 20 causa a sada pelo ramo verdadeiro e um valor de x dentro desse intervalo causa a sada pelo ramo falso o n 5, comando for (linha 15), ter as sadas verdadeiro e falso, desde que o valor de x seja ao menos 1 (e ter que ser para chegar nesse ponto) 29
Teste de Ramos
Aplicao (cont.):
para o n 9, loop while (linha 23), a sada verdadeiro (arco k) garantida devido aos comandos das linhas 21 e 22; a sada falso (arco q) garantida ou quando o caractere que est sendo procurado encontrado ou quando o final da cadeia encontrado o n 10, if (linha 25), requer uma comparao que encontre o caractere que est sendo procurado (arcos l, n) e uma outra que cause o incremento de i (arcos m, o) o n 14 (linha 30) precisa de um caractere que seja encontrado e um outro que no seja encontrado o n 17 requer pelo menos mais uma iterao do loop repeat (arco r) antes que o final do programa seja encontrado (arco w)
30
Teste de Ramos
Dados de teste para o Teste de Ramos
x 25 1 a entrada c sada esperada resposta entre com um inteiro entre 1 e 20 o caractere x aparece na posio 1 s a n o caractere a no ocorre na string fornecida
Observao:
O conjunto de dados de testes o mesmo da Sute 2 do Teste de Comandos Note que sute 1 do Teste de Comandos no satisfaz o Teste de Ramos No Teste de Ramos, a execuo do loop repeat obrigatria !
31
Teste de Condio
Descrio:
Estabelece os requisitos de teste tal que todas as condies em uma deciso requeiram as duas sadas, verdadeiro e falso, se for possvel, ao menos uma vez
Aplicao:
necessrio considerar todos os ns identificados no Teste de Ramos, mas neste caso, devem ser consideradas todas as condies das decises no loop while (linha 9), tem-se uma deciso com duas condies: while (x<1) or (x>20) do
valores de x: 0 e 21 obtm-se a cobertura das condies se x=0 ento a primeira condio verdadeira e a segunda falsa; se x=21 ento a primeira condio falsa e a segunda verdadeira
32
Teste de Condio
Aplicao (cont.):
necessrio gerar um outro valor para x que esteja dentro do intervalo, de forma que seja possvel a execuo do resto do programa esse valor pode ser determinado pelo requisito imposto pela outra condio do programa, que corresponde ao loop for do comando: for i:=1 to x do
para uma sada verdadeira a varivel i deve ser menor ou igual a x; para uma sada falsa a varivel i deve ser maior que x. Como x pelo menos 1 para se chegar nessa parte do programa, o for executado at que i seja maior que x
33
Teste de Condio
Aplicao (cont.):
loop while, linha 23 (n 9): while (not(achou))and(i<=x) do
as duas condies nessa deciso so verdadeiras quando se entra nesse loop Para torn-las com valor falso, preciso prever as duas alternativas, ou seja, o caso de um caractere que pertena string e o caso de um caractere que no pertena
essas duas alternativas geram tambm os valores verdadeiro e falso para os comandos if da linha 25 e if da linha 30 a ltima deciso a ser considerada o comando until da linha 37 (n 17): until (resposta = n) or (resposta = N)
quando fornecido o valor n, a primeira condio verdadeira e a segunda falsa; quando fornecido o valor N, a primeira falsa e a segunda verdadeira (executar o programa duas vezes) 34
Teste de Condio
Dados de teste para o Teste de Condio
x 21 0 1 a entrada c resposta sada esperada
x n
entre com um inteiro entre 1 e 20 entre com um inteiro entre 1 e 20 o caractere x aparece na posio 1
a N
Observao:
o Teste de Condio pode no satisfazer o Teste de Ramos neste caso, o loop do repeat no executado
35
Aplicao:
a partir desse nmero deve-se escolher 7 caminhos linearmente independentes do grafo:
1. 2. 3. 4. 5. 6. 7. 1-2-4-5-7-8-9-14-15-17-18 1-2-4-5-7-8-9-14-16-17-18 2-3-2 5-6-5 9-10-11-13-9 9-10-12-13-9 8-9-14-15-17-8
d
2 b 3 c
4 e 5 f h 6 g
7 i 8 j 9 r l 11 n q s 15 u 17 w 18 14 t 16 v 13 o k 10 m 12 p
38
uma combinao dos caminhos 1, 3, 4 (2 vezes) e 5 neste caso, o conjunto de dados de teste o mesmo do Teste de Ramos
39
40
41
42
Requisitos de teste: 1) um valor vlido de x fornecido na primeira entrada (input), e ento usado dentro do programa 2) um valor invlido de x seguido por um valor vlido, que usado subseqentemente
43
Requisitos de teste: 1) o par d-u 1 satisfeito lendo-se pelo menos um valor no vetor 2) os pares 2 e 3 sero cobertos automaticamente 3) o par 4 exercitado quando a procura do caractere no obtm sucesso no primeiro elemento do vetor 4) o par 5, por outro lado, o resultado de uma procura com sucesso no primeiro elemento do vetor 5) os pares 6 a 9 so exercitados por uma futura procura sem sucesso seguida por uma procura com sucesso
44
Requisitos de teste: para a varivel c: 1) encontrando-se com sucesso o caractere c no vetor 2) no encontrando o caractere c no vetor
45
para a varivel a: o vetor tratado como uma varivel simples ele exercitado pela execuo normal do programa
46
x 1
a D
XYZ
47
48
Anlise de Mutantes
Descrio:
opn P
op2 op1
Mutantes
operadores de mutao T
escore de mutao =
Anlise de Mutantes
Garantir a ausncia de determinados tipos de defeitos Considerando todos os programas Q, possvel provar a correo de P
T
P P(t) Q(t)
tT
50
Anlise de Mutantes
impraticvel executar e comparar todos os programas Q Estabelece-se ento uma vizinhana (P) que contm apenas um conjunto finito de programas Esses programas contm pequenos desvios sintticos que representam defeitos simples
51
Anlise de Mutantes
Q01 Q02 Q... Q... Q... Q... Q...
Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q...
(P)
Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Q... Qn
52
Anlise de Mutantes
Hiptese do Programador Competente
Programadores experientes escrevem programas corretos ou muito prximos do correto.
Efeito de Acoplamento
Casos de teste capazes de revelar erros simples so to sensveis que, implicitamente, tambm so capazes de revelar erros mais complexos.
53
Anlise de Mutantes
Os operadores de mutao determinam o tipo de alterao sinttica que deve ser feita para a criao dos mutantes
Introduzir pequenas alteraes semnticas atravs de pequenas alteraes sintticas que representam defeitos tpicos
54
Anlise de Mutantes
Exemplos de operadores de mutao
Retira um comando de cada vez do programa Troca operador relacional por operador relacional Troca o comando while por do-while Interrompe a execuo do lao aps duas execues Troca constante por constante Requer valor negativo, positivo e zero para cada referncia escalar
55
Anlise de Mutantes
Dados P e T Passos para a Aplicao da Anlise de Mutantes
P executado com os casos de teste de T Mutantes so gerados Mutantes so executados com os casos de teste de T Mutantes so analisados
56
Anlise de Mutantes
Aplicao:
Considere o trecho do programa e o conjunto de teste obtido para o Teste de Ramos
M 21 22 23 24 25 26 27 28 29 M achou := FALSE; i := 1; while (not(achou)) and (i <= x) do begin if a[ i ] = c then achou := TRUE else i := i + 1 end;
x 25 1
a x
entrada c resposta x s a n
sada esperada entre com um inteiro entre 1 e 20 o caractere x aparece na posio 1 o caractere a no ocorre na string fornecida
57
Anlise de Mutantes
Aplicao:
Mutante 1: alterao na linha 21
de: achou := FALSE para: achou := TRUE considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos a sada gerada seria: o caractere a aparece na posio 1 em vez de: o caractere a no ocorre na string fornecida mutante seria morto por esse conjunto de dados de teste
58
Anlise de Mutantes
Aplicao:
Mutante 2: alterao na linha 22
de: i := 1 para: x := 1 considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos o erro no revelado; o mutante continua vivo pois a sada gerada por ele igual sada gerada pelo programa original, uma vez que a string de tamanho 1 e o loop while da linha 23 executa exatamente uma vez (somente se o for sair com i=1) para matar esse mutante deve-se criar um caso de teste que possua uma string de tamanho maior que 1 e assim, qualquer caractere da posio 2 em diante ser considerado como no pertencente string, mesmo que faa parte dela
59
Anlise de Mutantes
Aplicao:
Mutante 2: novos dados de teste para ser morto
Dado de teste que mata o mutante 2
x 3 a xCv entrada c resposta x y v y C n o caractere C no ocorre na string fornecida o caractere v no ocorre na string fornecida sada fornecida pelo mutante
Obs: se o programa original fosse executado com esses dados, os caracteres v e C seriam encontrados nas posies 3 e 2 respectivamente.
60
Anlise de Mutantes
Aplicao:
Mutante 3: alterao na linha 28
de: i := i + 1 para: i := i + 2 considere agora que o mutante seja re-executado com os dados de teste obtidos para o Teste de Ramos o erro no revelado; o mutante continua vivo pois a sada gerada por ele igual sada gerada pelo programa original, uma vez que a string de tamanho 1 e o loop while da linha 23 executa exatamente uma vez (o incremento de 2 no ser executado) para matar esse mutante deve-se criar um caso de teste que possua uma string de tamanho maior que 1 e, alm disso, necessrio procurar por um caractere nas posies pares da string
61
Anlise de Mutantes
Aplicao:
Mutante 3: novos dados de teste para ser morto
Dado de teste que mata o mutante 3
x 3 a xCv entrada c resposta x y v y C n o caractere C no ocorre na string fornecida o caractere v aparece na posio 3 sada fornecida pelo mutante
Obs: Se o programa original fosse executado com esse dado de teste, o caractere C seria encontrado na posio 2
62
Anlise de Mutantes
Observao:
Teste de Mutao consegue mostrar a ausncia de erros particulares, pois ao matar os mutantes est sendo mostrado que o programa original no possui aquele erro esse critrio fora o testador a analisar cuidadosamente o programa, uma vez que ele precisa criar dados de teste que exponham os erros introduzidos desvantagem:
ele computacionalmente caro devido ao grande nmero de mutantes gerados e o tempo e recurso usados para compilar e executar todos eles
63
Estratgias de Teste
Aspectos genricos das Estratgias de Teste
a atividade de teste inicia-se no nvel de mdulos e caminha na direo da integrao de todo o sistema diferentes tcnicas de teste so apropriadas para diferentes situaes a atividade de teste, em geral, realizada pela equipe de desenvolvimento e, no caso de grandes projetos, por um grupo de teste independente as atividades de teste e depurao so atividades diferentes, mas a depurao necessria em qualquer estratgia de teste
64
Estratgias de Teste
Relao entre o processo de desenvolvimento e uma estratgia de teste
S R P C U I V TS
65