Você está na página 1de 15

Testes de correo (de defeitos)

Revelam a presena de erros, mas NO a ausncia


Um teste bem sucedido aquele que descobre o
maior nmero de erros existentes.
Deve ser utilizado em conjunto com tcnicas de
inspeo
O teste deve identificar o erro
A inspeo analtica (rastreamento ou depurao) deve
localizar e corrigir o erro

Fonte: Ian Sommerville, 2007 Engenharia de Software, Jair C Leite


Fundamentos
Seja P um programa, D o domnio (valores iniciais) e I a
imagem (valores resultantes). Por simplicidade, vamos
considerar P que se comporta com uma funo D -> I.
Seja R os valores resultantes desejveis determinados durante
a especificao. Seja d dados do domnio D, dizemos que P(d)
refere-se aos possveis resultados de P para d.
Dizemos que um programa est correto se P(d) satisfaz R. P
est correto se e somente se para todo dado d, P(d) satisfaz R.
Dizemos que um programa no est correto se o programa no
termina de executar, ou se termina mas P(d) no satisfaz R.
A presena de um erro demonstrada pela existncia de dados
d, tal que P(d) no satisfaz R. Muitas vezes impossvel
verificar P(d) para todos os dados d do domnio D. Nestas
situaes importante elaborar casos de testes.
Um caso de teste um elemento d de D. Um conjunto de
casos de teste T um subconjunto de D. Um conjunto de teste
T dito ideal se, sempre que P for incorreto, existe um d
pertencente a T que faz P(d) no satisfazer a R.
Engenharia de Software, Jair C Leite
O problema da gerao de casos de
testes
Testes exaustivos so impraticveis.
Escolher bons casos de testes (dados de entrada e
comportamento esperado) fundamental para que um teste
seja bem sucedido, isto , detecte os erros existentes.
Exemplo:
Considere um programa (ou trecho de programa) que deve
determinar o maior entre dois nmeros inteiros: MAX(x,y)
O conjunto de casos testes exaustivos infinito. Um possvel
conjunto de casos de testes poderia ser:
{ (1,0)->1; (-2,-5)->-2; (9,3)->9; (34,25)->34; (0,-1)->0; (1,1)->1;
(100,99)->100; (-11,-45)->-11; }
Inspecione o cdigo deste programa ao lado: read(x,y);
Aplicando-se os casos de testes acima, If (x>y) then
conclui-se que o programa no tem erros. max:=x;
else
No entanto, bastariam apenas trs casos de max:=x;
testes para concluir-se que o programa tem print(max);
erros.
Como determinar estes casos?

Engenharia de Software, Jair C Leite


Gerao de casos de testes
Os casos de testes so derivados da especificao funcional (p.
ex., casos de uso)
Cada caso de teste deve definir
Um conjunto de dados de entrada dados de teste
O comportamento esperado do sistema
Existem dois tipos de abordagens para determinar os casos de
testes
Testes caixa-preta baseado na especificao do sistema
Testes caixa-branca (transparente) baseados na estrutura do
programa

Fonte: Ian Sommerville, 2007 Engenharia de Software, Jair C Leite


Testes caixa-preta
So chamados testes
funcionais.
O programa uma caixa
preta cujo comportamento
determinado estudando-se
as suas entradas e sadas.
Os casos de testes so
derivados da especificao
funcional.
A escolha dos dados de
entrada podem ser feitas
com vrias tcnicas:
Partio de domnio
Grafos de causa-efeito

Engenharia de Software, Jair C Leite


Partio de domnio (equivalncia)
Inicialmente determina-se entre entradas vlidas (pertencentes
ao domnio) e invlidas para verificar como o sistema
comporta-se com as ltimas.
Para o domnio de dados de entradas vlidas devem ser
identificadas parties (classes) para os quais o sistema tenha
comportamento semelhante.

Engenharia de Software, Jair C Leite


Partio de domnio exemplo 1/2
Considere a seguinte especificao de um procedimento de busca:
procedure Search (Key : ELEM ; T: ELEM_ARRAY; Found : in out BOOLEAN;
L: in out ELEM_INDEX) ;
Pr-condio
-- o array tem pelo menos 1 elemento
TFIRST <= TLAST
Ps-condio
-- o elemento encontrado e referenciado por L
( Found and T (L) = Key)
or
-- o elemento no est no array
( not Found and not (exists i, TFIRST >= i <= TLAST, T (i) = Key ))

As parties podem ser determinadas da seguinte forma:


Entradas que esto de acordo com o pr-requisito
Entradas que NO esto de acordo com o pr-requisito
Entradas nas quais o elemento chave membro do array
Entradas nas quais o elemento chave NO membro do array

Engenharia de Software, Jair C Leite


Partio de domnio exemplo 2/2
Casos de testes:
Testar com
seqncias que
tenham apenas 1
valor e de
diferentes
tamanhos
Force o teste para
que os elementos
do incio, meio e
fim da seqncia
sejam acessados
Teste com
seqncia de
tamanho zero.

Engenharia de Software, Jair C Leite


Grafos causa-efeito
Esta tcnica oferece um representao
concisa das condies lgicas e das aes
correspondentes.
A tcnica segue 4 passos:
Causas (condies de entrada) e efeitos (aes)
so relacionados para um mdulo e um
identificador atribudo a cada um.
Um grafo de causa-efeito (descrito a seguir)
desenvolvido.
O grafo convertido numa tabela de deciso.
As regras da tabela so convertidas em casos de
teste.

Engenharia de Software, Jair C Leite


Grafos causa-efeito exemplo 1/3
Programa de cobrana de chamadas telefnicas.
Os valores de cada chamadas so contabilizados de acordo
com a durao, local de destino da chamada e faixa de
horrio.
Se o local de destino for o mesmo da origem (chamada
local) e a faixa de horrio for das 6:00 s 23:59 ento valor
do minuto R$ 1,00.
Se chamada local e a faixa for 0:00 s 5:59 o valor do
minuto de cada chamada R0,50.
Se o local for um outro estado no pas (chamada
interurbana) e a faixa de horrio for das 9:00 s 21:00 ento
o valor do minuto calculado de acordo com o valor bsico
por estado.
Se chamada interurbana e faixa de horrio for das 21:00 s
9:00 o valor do minuto fixo, sendo R$1,00.
Se chamada internacional o valor no depende de faixa de
horrio e calculado de acordo com o valor bsico por pas.
Engenharia de Software, Jair C Leite
Grafos causa-efeito exemplo 2/3
Para o programa
cobrana temos ento as
causas
tipo da chamada: local
(CL), interurbana (DDD)
e internacional (DDI)
faixa de horrio: 6-24, 0-
^ - e lgico 6, 9-21, 21-9
v - ou lgico
estado ou pas: AC,AM,
AP, ... (estados do
Brasil), EUA, RU, JP, ...
Os efeitos esperados so
os clculos de cobrana
conforme especificado
F1= durao*R$1,00
F2= R$0,50
F3=
durao*valor_localidad
e

Engenharia de Software, Jair C Leite


Grafos causa-efeito exemplo 3/3
Com base no grafo podemos derivar cinco casos de
teste para verificar se para as entradas
correspondentes (causas) o programa realiza os
clculos correspondentes (efeitos).
Caso1: {tipo_da_chamada=CL, faixa_de_horrio=6-24,
valor_localidade=X}
Caso2: {tipo_da_chamada=DDD, faixa_de_horrio=21-9,
valor_localidade=X}
Caso3: {tipo_da_chamada=CL, faixa_de_horrio=0-6,
valor_localidade=X}
Caso4: {tipo_da_chamada=DDD, faixa_de_horrio=9-21,
valor_localidade=X}
Caso5: {tipo_da_chamada=DDI, faixa_de_horrio=Y,
valor_localidade=X}

Engenharia de Software, Jair C Leite


Teste caixa-branca (estrutural)
Analisa a estrutura do programa para determinar os casos de
teste

Exemplo: teste do caminho bsico


Visa determinar um conjunto de casos de teste que garanta que
todos os caminhos (fluxos) atravs do programa sejam percorridos.
Utiliza-se um grafo de fluxo de programa onde cada n representa
uma deciso e cada arco um caminho possvel.
O grafo usado como base para determinar a complexidade
ciclomtica do programa

Complexidade ciclomtica = nmero_de_arcos nmero_de_ns + 2


Engenharia de Software, Jair C Leite
class BinSearch {

//
//
Testes de caminho exemplo
This is an encapsulation of a binary search function that takes an array of
ordered objects and a key and returns an object with 2 attributes namely
// index - the value of the array index
// found - a boolean indicating whether or not the key is in the array Caminhos independentes:
// Complexidade
An object is returned ciclomtica
because= 11 9not
it is + 2possible
=4 in Java to passbasic types by
// reference to a function and so return two values 1, 2, 3, 8, 9
// the key is -1 if the element is not found
1, 2, 3, 4, 6, 7, 2
public static void search ( int key, int [] elemArray, Result r )
{ 1, 2, 3, 4, 5, 7, 2
int bottom = 0 ;
int top = elemArray.length - 1 ; 1, 2, 3, 4, 6, 7, 2, 8, 9
int mid ;
r.found = false ; r.index = -1 ;
while ( bottom <= top )
{
mid = (top + bottom) / 2 ;
if (elemArray [mid] == key)
{
r.index = mid ;
r.found = true ;
return ;
} // if part
else
{
if (elemArray [mid] < key)
bottom = mid + 1 ;
else
top = mid - 1 ;
}
} //while loop
} // search
} //BinSearch

Devem ser derivados casos de teste que forcem a execuo dos 4 caminhos
Engenharia de Software, Jair C Leite
Parties de domnio - exemplo

Engenharia de Software, Jair C Leite

Você também pode gostar