Você está na página 1de 53

Teste Funcional

IPL, Designing Unit Test Cases

Teste Funcional
Teste funcional aquele onde o objetivo verificar se uma dada implementao est de acordo com a sua respectiva especificao; Tambm conhecido como teste Black-Box; Um tipo de teste funcional o chamado teste formal. Nele, tanto as especificaes como os procedimentos de gerao de casos de teste so formalizados; A identificao dos casos de teste devem se basear nica e exclusivamente nas especificaes dos componentes de implementao.

Teste Funcional
As principais tcnicas de teste funcional so:
Testes Derivados de Especificao; Partio por Equivalncia; Anlise de Valores Limites; Teste Baseado em Estado-Transio.

Testes Derivados de Especificao


Baseado na especificao, os testes so gerados de acordo com as vrias expresses contidas na mesma; No se pode precisar que as expresses contidas na especificao refletiro as expresses contidas no cdigo, mas isso tende a ser uma prtica comum em vrios trechos.

Testes Derivados de Especificao


Exemplo Funo para clculo de Raiz Quadrada:
Input Nmero Real Output Nmero Real Para uma dada entrada igual a 0 ou maior que 0, a raiz positiva do nmero ser retornada. Para uma dada entrada menos que 0, a mensagem Erro Entrada Invlida dever ser mostrada e o valor 0 dever ser retornado. A rotina PrintLine dever ser utilizada para mostrar a mensagem.

Testes Derivados de Especificao


Exemplo Funo para clculo de Raiz Quadrada
Caso 1: Entrada 4, Retorno 2.
Testa a primeira expresso da especificao;

Caso 2: Entrada -10, Retorno 0, Sada Erro Entrada Invlida atravs de PrintLine.
Testa a segunda e a terceira expresso da especificao;

Partio por Equivalncia


Particionar por equivalncia significa identificar parties dos domnios das entradas e sadas onde os elementos, supostamente, fariam com que o sistema se comportasse da mesma forma; Parties so identificadas no apenas em parmetros de funes, mtodos, etc., mas tambm em dados acessados, tempo, sequncia de entradas e sadas e em estados.

Partio por Equivalncia


Exemplo Funo para clculo de Raiz Quadrada Parties de Entrada i ii <0 >= 0 Parties de Sada a b >= 0 Error

Partio por Equivalncia


Exemplo Funo para clculo de Raiz Quadrada
Caso 1: Entrada 4, Retorno 2.
Testa ii e a;

Caso 2: Entrada -10, Retorno 0, Sada Erro Entrada Invlida atravs de PrintLine.
Testa i e b;

Anlise de Valores Limites


Esta tcnica se baseada na hiptese de que erros geralmente so encontrados nas regies limite das parties; Neste ponto estamos interessados em procurar por erros.

Anlise de Valores Limites


Exemplo Funo para clculo de Raiz Quadrada

Anlise de Valores Limites


Exemplo Funo para clculo de Raiz Quadrada
Caso 1: Entrada {Menor Nmero Real}, Retorno 0. Sada Erro Entrada Invlida atravs de PrintLine
Testa o limite inferior de (i);

Caso 2: Entrada {Nmero prximo a e menor que 0}, Retorno 0. Sada Erro Entrada Invlida atravs de PrintLine.
Testa o limite superior de (i);

Caso 3: Entrada 0, Retorno 0.


Testa o prximo valor aps (i), limite inferior de (ii) e limite inferior de (a);

Caso 4: Entrada {Nmero prximo a e maior que 0}, Retorno {Raiz Positiva}.
Testa um valor prximo ao limite inferior de (ii);

Caso 5: Entrada {Maior nmero Real}, Retorno {Raiz Positiva}.


Testa o limite superior de (ii) e de (a);

Teste Baseado em Estado-Transio


Caso a especificao seja feita utilizandose de algum diagrama de estadotransio, possvel retirar os casos de teste deste diagrama percorrendo os estados e as transies gerando casos de teste para este elementos; Este assunto ser tratado mais adiante na apresentao em maiores detalhes.

Teste de Classe
MCGREGOR, J. D., AND SYKES, D. A. A Practical Guide to Testing ObjectOriented Software. Object Technology Series. Addison-Wesley, 2001.

Teste de Classe
Teste de classe compreende em verificar se uma dada implementao est de acordo com sua respectiva especificao; Caso a implementao da classe esteja correta, suas instncias se comportaro como especificado; Trataremos aqui de teste de classes (relativamente simples) baseado em execuo; Assumimos que a classe possui uma especificao correta e completa.

Formas de Testar Classes


Revises:
Sujeitas a erros humanos; Muito ruins para teste de regresso.

Execues:
Existem casos onde um grande esforo para identificao dos casos de teste requerido; Existem casos onde um grande esforo para construo dos drivers de teste requerido.

Nosso foco em teste baseado em execuo.

Dimenses de Teste de Classe


importante definir se a classe deve ser testada de forma separada ou como sendo um componente de uma parte do sistema. Esta definio baseada nos seguintes fatores:
Papel da classe no sistema (Risco associado); Complexidade da classe (numero de estados, operaes e associaes); Complexidade do driver de teste da classe.

Dimenses de Teste de Classe


Quem:
Geralmente as classes so testadas pelos desenvolvedores; Isto visa diminuir o numero de pessoas que devem conhecer a especificao da classe; Facilita a implementao dos casos de teste pois o testador conhece a implementao da classe; Driver de teste pode ser usado para debug; Como desvantagem temos que erro de entendimento da especificao ser propagada para o teste.
Plano de teste pode ser feito por outra pessoa, bem como reviso formal do cdigo, etc.

Dimenses de Teste de Classe


O que:
Devemos testar se uma implementao reflete exatamente suas especificao; Testar se a implementao contm APENAS o que foi especificado depende do risco associado classe; Se aps vrias execues de casos de teste, ainda h cdigo no coberto, possvel que exista comportamentos indesejados ou que os testes foram insuficientes.

Dimenses de Teste de Classe


Quando:
Assim que uma classe est pronta para ser codificada, um plano de teste deve ser elaborado; Isto facilita o entendimento da especificao por parte do desenvolvedor (caso sejam a mesma pessoa); Testes podem ser executados a qualquer momento de um processo de desenvolvimento; Caso a implementao mude, os testes devem ser executados novamente podendo ser alterados ou no.

Dimenses de Teste de Classe


Como:
Classes so testadas atravs de drivers de teste; Componentes estticos de uma classe devem ser testados separadamente; Drivers de teste constroem o ambiente necessrio execuo dos casos de teste. Aps isto, mensagens so enviadas ao objeto em tese e seu retorno e/ou mudana de estados so avaliados.

Dimenses de Teste de Classe


Quanto:
Geralmente medimos pelo quanto da especificao e quanto da implementao da classe foi testada; Queremos testar operaes e mudanas de estados, onde geralmente um afeta o outro; Testes exaustivos devem ser avaliados de acordo com o esforo e necessidade (criticalidade) do mesmo.

Construo dos Casos de Teste


Casos de teste so, inicialmente, construdos a partir da especificao (OCL, linguagem natural, diagrama de transio de estados, etc.); Caractersticas referentes implementao so adicionadas em outros casos de teste;
Estes casos de teste devem ser construdos apenas posteriormente para no propagar erros de entendimento de especificao.

Veremos a construo de casos de teste a partir de dois tipos de especificao:


OCL (Pr e ps-condies) e; Diagrama de Transio de Estados

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Aqui, iremos identificar os requisitos onde as pr-condies so aceitas e as ps-condies so obtidas; Para esses requisitos, constroem-se casos de tese como entradas tpicas e limites, determinando os corretos valores de sada; Caso esteja usando programao defensiva, casos que violem as pr-condies devem ser construdos.

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Requisitos a partir de contribuies retiradas de Pr-condies.

Pr-Condio true 1 not 1 1 and 2

Contribuio (true, Post) (1, Post) (not 1, Exception) (not 1, Post) (1, Exception) (1 and 2, Post) (not 1 and 2, Exception) ... ... (1 and 2, Post) (not 1 and 3, Post) ...

Prog. Defensiva

X X X X ...

... If 1 then 2 else 3

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Requisitos a partir de contribuies retiradas de Ps-condies.

Ps-Condio 1 1 and 2 1 or 2 (Pr, 1)

Contribuio

(Pr, 1 and 2) (Pr, 1) (Pr, 2) (Pr, 1 and 2) ... (Pr and , 2) (Pr and not , 3) ...

... If 1 then 2 else 3

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Exemplo Classe Velocity:

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Exemplo:
Vamos analisar o mtodo setDirection()

Velocity:: setDirection( dir: Direction) pre: 0 <= dir and dir < 360 post: direction = dir and speed = speed@ pre

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Exemplo:
Assim temos:
(1 and 2, 1 and 2) (not 1 and 2, Exceo) (1 and not 2, Exceo) X X (0 <= dir and dir < 360, direction = dir and speed = speed@pre) (not (0 <= dir) and dir < 360, Exceo) (0 <= dir and not(dir < 360), Exceo) (not (0 <= dir) and not(dir < 360), Exceo) X X X

(not 1 and not 2, Exceo) X

Construo de Casos de Teste a Partir de Pr e Ps-Condies


Exemplo:
Para construir os casos de teste atribumos valores s variveis da seguinte maneira:
Para o primeiro caso, speed = 1000 e dir variando de 0 a 359; Para o segundo caso, speed = 1000 e dir = -1; Para o terceiro caso, speed = 1000 e dir como 360 (limite) e 540;

Construo de Casos de Teste a Partir de DTE


Estes diagramas mostram de forma grfica o comportamento das instncias da classe;

Construo de Casos de Teste a Partir de DTE


Usamos a mesma abordagem descrita anteriormente; Assumimos que cada transio no diagrama um requisito para um caso de teste; A construo dos casos de teste realizado satisfazendo os requisitos e utilizando-se de valores tpicos e limites em cada lado da transio, alm de satisfazer as condies de guarda (caso existam).

Adequao da Suite de Teste para uma Classe


Usamos as seguintes medidas de adequao:
Cobertura baseada em estado: Baseado na quantidade de transies cobertas em um diagrama de transies de estado; Cobertura baseada em restries: Baseado na quantidade de pares formados pelas pr e pscondies que esto presente na suite; Cobertura baseada em cdigo: Baseado na quantidade de cdigo que executado pela suite.

Teste Funcional de Classes


McGregor, J. D. Functional Testing of Classes, COMSOFT

Teste Funcional de Classes


Teste funcional se preocupa com o comportamento dos objetos focando em suas interfaces publicas; Iremos considerar que a suite de teste para uma classe ir prover casos de teste tanto para os mtodos individualmente quanto para a classe como um componente unificado.

Teste Funcional de Classes


Ser apresentado um algoritmo de teste funcional para a identificao de casos de teste a partir de especificaes em mquinas de estado; O algoritmo ir gerar casos de teste tanto para os mtodos individualmente como para a classe como uma unidade.

Classes como Mquinas de Estado


Uma mquina de estados (ME) formada por um conjunto de estados (combinao de valores de atributo) e um conjunto de transies; As transies so rotuladas com um nome (nome do mtodo) e suas entradas (explcitas e implcitas) e sadas.

Classes como Mquinas de Estado


Algumas restries so necessrias aos objetos para que possam ser especificados com ME:
O nmero de estados deve ser finito; O nmero de transies deve ser finito; Todos os estados so alcanveis dos estados iniciais; Cada estado unicamente alcanado atravs de um conjunto de mtodos.

Classes como Mquinas de Estado


Na maioria das situaes, os estados podem ser identificados atravs de valores agregados dos atributos, e no apenas por valores unitrios do domnio dos atributos; Por exemplo, para um atributo inteiro X, a sua variao por um mtodo de 3 para 4, possivelmente no alterar o estado do objeto; Mas sua variao de -3 para 4, sim.

Classes como Mquinas de Estado


Exemplo:

Herana e Mquinas de Estado


Para obtermos um melhor aproveitamento de herana nesta abordagem, utilizaremos o conceito de herana estrita; Herana estrita assume que cada subclasse contm a interface pblica da classe pai como um sub-conjunto de sua interface; A idia que a inteno de cada mtodo seja o mesmo, o que chamado de invariante de mtodo;

Herana e Mquinas de Estado


As pr-condies devem ser apenas mais fracas que as pr-condies do mesmo mtodo da classe pai; As ps-condies devem ser apenas mais fortes que as ps-condies do mesmo mtodo da classe pai; As invariantes de classe devem permanecer; A especificao das classe filhas devem conter a especificao da classe pai.

Herana e Mquinas de Estado


Quando trabalhamos com herana, temos as seguintes observaes:
Uma sub-classe no pode eliminar estados ou transies da ME da classe pai; Cada novo atributo introduzido pode ser adicionado a sub-estados ou como estados concorrentes que no interagem com estados anteriores; Herana mltipla resulta em um conjunto de estados concorrentes sem interao.

Herana e Teste Funcional de Classe


As alteraes descritas anteriormente tero implicao nos casos de teste para as classes formadas por herana:
Todos os casos de teste da classe pai deve funcionar para a classe filha; Novos casos de teste devem ser adicionados para testar os novos estados e transies adicionados; O script de teste para a classe filha pode ser construda por wrapping da classe pai.

Especificao das Classes


A especificao de uma classe descreve totalmente o comportamento de seus objetos, atravs de descries dos mtodos e da classe em si; Essa especificao dever conter:
Uma especificao para cada mtodo; Uma expresso para invariante de classe; Uma descrio do comportamento dos objeto.

Especificao das Classes


A especificao pode ser construda atravs da identificao das transies para cada estado. O que ocorre com cada evento em cada estado. Caso seja usada programao defensiva, conjunto de possibilidades no permitida pelas pr-condies devem ser adicionadas.

O Algoritmo
Requisitos Para os Casos de Teste
Construir casos de teste para todos os mtodos de acesso da classe; Construir casos de teste que produzam todas as pscondies de um mtodo; Cada caso de teste dever conter uma expresso para verificar invariantes de classe; Construir casos de teste que comecem com cada estado inicial da representao de estados; Construir casos de teste que passem por todas as transies da representao de estados.

O Algoritmo

Fim!

Você também pode gostar