Вы находитесь на странице: 1из 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:
Aplicando-se os casos de testes acima,
conclui-se que o programa no tem erros.
No entanto, bastariam apenas trs casos de
testes para concluir-se que o programa tem
erros.
Como determinar estes casos?

read(x,y);
If (x>y) then
max:=x;
else
max:=x;
print(max);

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, 06, 9-21, 21-9
estado ou pas: AC,AM,
AP, ... (estados do
Brasil), EUA, RU, JP, ...

- e lgico
v - ou lgico

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
An object is returned
because= 11
it is
in Java
Complexidade
ciclomtica
9not
+ 2possible
=4
reference to a function and so return two values
the key is -1 if the element is not found

public static void search ( int key, int [] elemArray, Result r )


{
int bottom = 0 ;
int top = elemArray.length - 1 ;
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

to

Caminhos independentes:
basic types by
1, 2, 3, 8, 9
1, 2, 3, 4, 6, 7, 2
1, 2, 3, 4, 5, 7, 2
1, 2, 3, 4, 6, 7, 2, 8, 9

pass

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

Вам также может понравиться