Escolar Documentos
Profissional Documentos
Cultura Documentos
Referncia Bibliogrfica
FABBRI, Sandra C. Pinto Ferraz. Teste e Validao de Software. MOLINARI, Leonardo. Testes de Software: Produzindo sistemas melhores e mais confiveis. So Paulo: rica, 2003. MYERS, Glenford J. The Art of Software Testing. New York: A WileyInterscience, 1979 PRESSMAN, R. S. Engenharia de Software. 5 ed. Rio de Janeiro: McGraw-Hill 2002. RUV, Marcelo. Notas de Aula. Universidade de Taubat. Taubat, 2006 SOMMERVILLE, I. Engenharia de Software. 6 ed. So Paulo: Pearson Addison Wesley, 2003.
Problema
Um programa l trs valores de Entrada. Os trs valores so interpretados como sendo os lados de um tringulo. O programa imprime uma mensagem que indica se o tringulo escaleno, issceles ou eqiltero.
Proposta:
Como este programa seria testado para garantir que o mesmo esteja correto? Elabore casos de teste para o problema acima.
Check List:
1. 2. 3. 4.
Voc tem um caso de teste que represente um tringulo escaleno vlido? Voc tem um caso de teste que represente um tringulo eqiltero vlido? Voc tem um caso de teste que represente um tringulo issceles vlido? Voc tem ao menos trs casos de teste que representem tringulos issceles de tal forma que tenham sido testadas todas as permutaes dos lados? Por exemplo: 3, 3, 4; 3, 4, 3; 4, 3, 3. Voc tem um caso de teste onde um dos lados zero? Voc tem um caso de teste onde um dos lados possui valor negativo? Voc tem um caso de teste com trs nmeros inteiros maiores que zero tal que a soma dos dois lados menores igual ao lado maior? Voc tem ao menos trs casos de teste na categoria 7 tal que voc tenha tentado todas as permutaes dos lados? Voc tem um caso de teste com trs nmeros inteiros maiores que zero tal que a soma dos dois lados menores seja menor que o lado maior? Voc tem ao menos trs casos de teste na categoria 9 tal que voc tenha tentado todas as permutaes? Voc tem um caso de teste onde todos os lados so zero? Voc tem ao menos um caso de teste especificando valores no inteiros? Voc tem ao menos um caso de teste especificando valores errados? Por exemplo: dois ao invs de trs lados. Para cada caso de teste, voc especificou o(s) resultado(s) esperado(s) para cada conjunto de entradas?
Definies
Defeito Erro Falha
No h um consenso sobre a definio de termos. Existe sim um conceito comum que recebe diferentes nomes em diferentes momentos. Defeito: deficincia mecnica ou algortmica que se ativada pode levar a uma falha Erro: item de informao ou estado de execuo inconsistente Falha: evento notvel onde o sistema viola suas especificaes
Definies
Teste: o processo de executar um programa ou sistema com a finalidade de encontrar erros. Teste: qualquer atividade que vise avaliar uma caracterstica ou recurso de programa ou sistema. Teste: Processo de executar um programa com o objetivo de revelar a presena de defeitos; ou, falhando nesse objetivo, aumentar a confiana sobre o programa Depurao: uma conseqncia no previsvel do teste. Aps revelada a presena do defeito ele deve ser encontrado e corrigido
Objetivo:
Um teste tem por objetivo encontrar erros atravs de verificao/ validao de uma caracterstica, atributo etc., de um programa. Um caso de teste caracteriza-se pelos experimentos feitos no software a fim de cumprir o objetivo do teste.
Objetivo:
Principal Objetivo: refutar a assertiva de que o produto est correto
Determinar entradas que faam as sadas obtidas diferirem das sadas esperadas segundo a especificao (busca de um contraexemplo) um processo destrutivo, sob o ponto de vista psicolgico, contrariamente s demais fases da Engenharia de Software, onde constri-se um produto
Teste de Software
Uma das atividades mais onerosas do desenvolvimento de software Atividade essencial para ascenso ao nvel 3 do Modelo CMMI/SEI Atividade relevante para avaliao de produtos de software (ISO 9126, ISO 14598-5)
Baseada em Erros
Baseada nos erros tpicos e comuns cometidos durante o desenvolvimento
Os arcos indicam precedncia, ou transferncia de controle Essa representao permite que o programa seja examinado independentemente de sua funo
seqncia seq
deciso
Deciso Case
1,2 3
7 8
5,6
10
Fim Procedimento
3 5 4 5
6 7 8
Teste Estrutural
1 program exemplo(input, output); 2 var a: array[1..20] of char; Programa com 3 x, i: integer; blocos marcados 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; 4 14 writeln (digite, x, caracteres); 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; 9 23 while (not(achou)) and (i <= x) do 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) 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 (UpCase(resposta)='N'); 18 38 end. d
a 2 b 3 c
4 e 5 g 6
7 i 8 j 9 r l 11 n q
15 16
k 10 m 12 13 o p
s 15 u
14
t 16 v
17 w 18
17
Descrio:
Esse critrio fornece uma maneira de determinar um conjunto bsico de caminhos linearmente independentes, de modo que executando-os garante-se a execuo de todos os comandos ao menos uma vez. Um caminho independente qualquer caminho atravs do programa que introduza pelo menos um novo conjunto de instrues de processamento ou uma nova condio. Esse nmero determinado pela frmula da Complexidade Ciclomtica de McCabe V(G) = a n + 2 ou V(G) = P + 1 ou V(G) = no. de regies Onde:
G: um grafo direcionado a: arestas (ramos) n: ns P: no. de ns predicativos
Complexidade Ciclomtica de McCabe: Ciclom 1. V(G) = O grafo de fluxo tem 3 regies 2. V(G) = 9 arestas - 8 ns + 2 = 3 3. V(G) = 2 ns predicativos + 1 = 3 A Complexidade Ciclomtica 3.
R2
8
5,6
R3
R1
10
Caminho 3: 1, 2, 3, 4, 7, 8, 9, 3, 10
10
Caminho 1: 1, 2, 3, 10 1:
A=(1,5)
Tam=0
A=(1,5)
5,6
Tam=2
R2
8
R3
A=(5,1,)
Tam=2
R1
10
R1
6 7 8
R2 R3
Aplicao:
V(G) = 9 - 8 + 2 = 3 V(G) = 2 +1 = 3 V(G) = no. de regies = 3 A partir desse nmero deve-se escolher 3 caminhos linearmente independentes do grafo: 1. 1-2-8 2. 1-2-3-5-6-7-2-8 3. 1-2-3-4-6-7-2-8
11
1 a 2 d 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 13 o k 10 m 12 p
14
t 16 v
12
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
13
Teste de Comandos
Dados de teste para o Teste de Comandos
x 25 1 a b entrada c b s a n o caracter a no ocorre na string fornecida sada esperada resposta entre com um inteiro entre 1 e 20 o caracter b aparece na posicao 1
Observao:
o nvel mnimo de cobertura esperado no teste estrutural
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)
14
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 caracter que est sendo procurado encontrado ou quando o final da cadeia encontrado O n 10, if (linha 25), requer uma comparao que encontre o caracter 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 caracter 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)
Teste de Ramos
Dados de teste para o Teste de Ramos
x 25 1 a x entrada c x s a n o caracter a no ocorre na string fornecida sada esperada resposta entre com um inteiro entre 1 e 20 o caracter x aparece na posicao 1
Observao:
O conjunto de dados de testes o mesmo do Teste de Comandos, mas neste, o caracter a poderia ser fornecido atravs de outra execuo do programa, j no Teste de Ramos, a execuo do loop repeat obrigatria
15
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
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
16
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 caracter que pertena string e o caso de um caracter 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 (UpCase(resposta)='N' );
executar o programa duas vezes, uma com n e outra com N
17
Teste Funcional
Os requisitos de teste so extrados da especificao do software Aborda o software de um ponto de vista macroscpico Procura descobrir erros nas seguintes categorias: Funes incorretas ou ausentes Erros de Interface Erros nas estruturas de Dados ou acesso a bancos de dados externos Erros de desempenho Erros de inicializao e trmino
Teste Funcional
Problema:
Dificuldade em quantificar a atividade de teste - no se pode garantir que partes essenciais ou crticas do software foram executadas Est sujeito a inconsistncias decorrentes da especificao.
Critrios:
Particionamento de Equivalncia Anlise do Valor Limite Grafo Causa-Efeito Teste Estatstico de Software
18
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 de equivalncia representam um conjunto de estados vlidos ou invlidos e podem ser definidas de acordo com as seguintes diretrizes:
Se a condio de entrada especificar um intervalo, so definidas uma classe vlida e duas invlidas Se a condio de entrada exige um valor especfico, 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
Programa Exemplo
1 program exemplo(input, output); 2 var a: array[1..20] of char; Programa com 3 x, i: integer; blocos marcados 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; 4 14 writeln (digite, x, caracteres); 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; 9 23 while (not(achou)) and (i <= x) do 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) 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 (UpCase(resposta)='N'); 18 38 end. d
1 a 2 b 3 c
4 e 5 g 6
7 i 8 j 9 r l 11 n q
15 16
k 10 m 12 13 o p
s 15 u
14
t 16 v
17 w 18
17
19
Particionamento de Equivalncia
Aplicao:
De acordo com a especificao, existem basicamente quatro entradas:
um inteiro positivo (entre 1 e 20 3 parties) uma cadeia de caracteres um caracter 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 caracter foi encontrado na string (caracter de entrada pertencente string) uma mensagem declarando que ele no foi encontrado (caracter de entrada no pertencente string)
Particionamento de Equivalncia
abc c k
20
Particionamento de Equivalncia
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
Descrio:
Complementa o Particionamento de Equivalncia Coloca sua ateno em uma fonte propcia a erros os limites de uma classe ou partio de equivalncia
Partio de Equivalncia
Limites
21
22
23
Estratgias de Teste Estrat Relao entre o processo de desenvolvimento e uma estratgia de teste
Engenharia de Sistema Requisitos Projeto Cdigo
S R P C U I V TS
24
Teste de Unidade
Concentra-se no mdulo Utiliza a tcnica de teste estrutural Pode ser realizado em paralelo para vrios mdulos Aspectos considerados:
Mdulo __________ __________ __________ __________ __________ _____ Interface Estrutura de dados local Condies limite Caminhos independentes Caminhos de tratamento de erros
Casos de teste
25
Teste de Unidade
Geralmente, um programa no um mdulo nico, mas formado de diversos mdulos que, para efeito do teste de unidade devem ser testados separadamente
driver : um programa principal que aceita dados de casos de teste, passa esses dados para o mdulo a ser testado e imprime os dados relevantes que ele recebe do mdulo stub : so mdulos que servem para substituir outros mdulos que estejam subordinados, isto , que so chamados pelo mdulo testado; ele usa a interface do mdulo subordinado, faz o mnimo de manipulao de dados, imprime uma verificao da entrada e retorna
Driver Interface Estrutura de dados local Condies limite Caminhos independentes Caminhos de tratamento de erros
Stub
Stub
Constri-se, de uma forma sistemtica, a estrutura do programa realizando, ao mesmo tempo, testes para detectar erros de interface Embora os mdulos, depois do teste de unidade, funcionem corretamente de forma isolada, o teste de integrao necessrio pois quando colocados juntos, vrias situaes inesperadas podem acontecer Integrao dos mdulos feita atravs de uma abordagem incremental
integrao top-down integrao bottom-up
26
Integrao Top-down
A integrao dos mdulos feita de cima para baixo Pode ser realizada de duas maneiras:
por profundidade (M2, M5 e M8 ou M2, M5, M6 e M8) por largura (M2, M3 e M4)
M1
M2
M3
M4
M5
M6
M7
M8
Integrao Top-down
O processo de integrao feito atravs de cinco passos:
1. O mdulo de controle principal usado como um driver e substitui-se por stubs todos os mdulos reais diretamente subordinados ao mdulo principal; 2. Dependendo da abordagem de integrao a ser utilizada por profundidade ou largura os stubs so substitudos pelos mdulos reais, um de cada vez; 3. So realizados testes para cada mdulo que seja integrado; 4. Quando um teste concludo, outro stub substitudo pelo mdulo real; 5. Teste de regresso, isto , repetio de todos ou alguns dos testes j realizados pode ser aplicado novamente para garantir que novos erros no tenham sido introduzidos.
27
Integrao Top-down
Por profundidade: permite que uma funo especfica do mdulo principal possa ser testada por completo Nem sempre a construo de um stub uma tarefa fcil, pois se a funo do mdulo real que ele representa for complexa, o stub tem que tratar os aspectos principais desse mdulo para que o teste seja significativo
Integrao Bottom-up
A integrao dos mdulos feita de baixo para cima Quando os mdulos de nveis superiores vo ser testados, os mdulos subordinados j esto prontos e portanto, no se torna necessria a construo de stubs
Mc
Ma D2
Mb D3
D1
28
Integrao Bottom-up
O processo de integrao feito atravs de quatro passos:
1. Os mdulos de nvel mais baixo so combinados em clusters que executam funes especficas do mdulo principal; 2. Para cada cluster elaborado um driver que coordena a entrada e sada dos casos de teste; 3. O cluster testado; 4. Os drivers so substitudos pelos clusters que passam a interagir com os mdulos acima, na estrutura do programa.
A escolha por uma dessas duas abordagens de integrao depende do tipo de software e, s vezes, do cronograma do projeto Em geral, uma integrao combinada - sanduche - mais aconselhvel:
mdulos superiores abordagem top-down mdulos mais inferiores abordagem bottom-up
top-down
vantagem: testar logo no incio as funes principais do software desvantagem: os stubs e a dificuldade de teste quando eles so usados
bottom-up
vantagem: no se precisa de stubs desvantagem:o mdulo principal no existe enquanto todos mdulos no estiverem testados
29
O software est montado como um pacote e a validao do mesmo realizada atravs de uma srie de testes caixa preta. Finalidade:
Demonstrar a conformidade aos requisitos funcionais e de desempenho (testar todos os casos de uso). Verificar se a documentao est correta
Duas possibilidades:
Aceito No est totalmente de acordo com os requisitos: negociar com o usurio
Engloba o Teste de Aceitao: realizado pelo prprio usurio No caso de software desenvolvido para vrios usurios:
Teste alfa: realizado pelo usurio no ambiente do alfa: desenvolvedor Teste beta: realizado pelo usurio em seu prprio ambiente beta:
30
Teste de Sistema
Considera o software dentro do seu ambiente mais amplo (todos os aspectos de interao com ele, como outro hardware, software, pessoas, etc.) Corresponde a uma srie de testes que tem por objetivo verificar se todos os elementos do sistema foram integrados adequadamente e realizam corretamente suas funes
teste de segurana: tem por objetivo verificar se todos os mecanismos de proteo protegem realmente o software de acessos indevidos. teste de estresse: tem por objetivo confrontar os programas com situaes anormais de freqncia, volume ou recursos em quantidade. teste de desempenho: tem por objetivo testar o tempo de resposta do sistema e aplicado, geralmente, para sistemas de tempo real
Depurao Depura
Processo de Depurao
Testes adicionais
31
Depurao Depura
Pontos-Chaves Pontos-
O objetivo do teste encontrar erros e se eles no forem detectados, o teste no pode afirmar sua ausncia Testar tudo impossvel As tcnicas de teste so complementares, isto , devem aplicadas conjuntamente a execuo do teste criativa e difcil, pois para testar com eficincia preciso conhecer o software a fundo
32