Você está na página 1de 33

4

Teste Funcional

O teste funcional de um sistema procura identificar as faltas existentes na


sua programao por meio da observao da estrutura e do comportamento
definidos pela sua interface pblica.

Por no depender da compreenso da

organizao interna do sistema avaliado e por desconhecer o contedo de seu


cdigo fonte, este tipo de teste considerado caixa-preta (Black-box Testing).
O escopo dos testes definido pelo engenheiro de software responsvel
(testador) ou pela equipe de testes do sistema de acordo com a demanda de seu

PUC-Rio - Certificao Digital N 0611931/CA

usurio e de sua equipe de desenvolvimento. O teste pode ser to abrangente


como especfico de acordo com o interesse destes atores. Muitas vezes, em
virtude do cronograma de desenvolvimento, preciso selecionar as partes do
sistema que sero priorizadas nos testes.

O ideal que todas elas fossem

avaliadas, mas quando isso no possvel, pelo menos as partes crticas de


processamento deveriam ser testadas. Com a conduo das atividades de teste de
forma sistemtica, os testes podem ser automatizados. No caso da automao, a
proximidade do ideal fica cada vez maior visto que um maior nmero de testes
executado num menor intervalo de tempo (Hartman, 2002).
Para conduzir um teste funcional de forma sistemtica, importante definir
um processo de teste.

Esta pesquisa prope um processo de teste funcional

baseado em modelos gramaticais (captulo 3). Este processo dividido em fases


compostas de atividades claramente definidas de modo a orientar a modelagem, a
gerao e a execuo dos testes. Este processo pode ser manual, semi-automtico
ou automtico, sendo assim classificado segundo a menor ou maior participao
de testadores humanos nas fases e atividades de teste.
Este captulo inicialmente descreve o processo de teste e suas fases em
linhas gerais e introduz um exemplo que ser utilizado por todo o captulo (seo
4.1). Posteriormente, detalha cada uma das fases (sees 4.2, 4.3, 4.4, 4.5) e as
atividades realizadas em cada fase (subsees).

Teste Funcional

73

4.1.
Processo de Teste Funcional
O termo processo definido pelo dicionrio Merriam-Webster como um
conjunto de aes ou operaes conduzindo a um fim. Esta definio traduz
bem a idia central de processo adotada por esta pesquisa. Neste contexto, as
aes ou operaes correspondem s atividades e o fim, no sentido de objetivo,
o teste funcional de um sistema.
Ao planejar e elaborar o processo de teste descrito neste captulo, alm dos
trabalhos relacionados (Whittaker, 2000; El-Far, 2001) em captulos anteriores,
algumas questes (Bertolino, 2007) foram consideradas. Tais questes (Tabela

PUC-Rio - Certificao Digital N 0611931/CA

10) serviram como orientao para a definio das atividades do processo.


Questo

Conceito

Por qu?

Motivo do Teste

Como?

Seleo do Teste

Quanto?

Adequao do Teste

Qual?

Foco do Teste

Onde?

Ambiente de Teste

Quando?

Momento de Teste

Tabela 10 Principais Questes do Processo de Teste.

Uma questo est relacionada ao motivo do teste. Por que determinada


estrutura ou certo comportamento do software est sendo analisado? preciso
identificar claramente o objetivo do teste para justificar a sua necessidade e o
esforo dedicado para ger-lo e execut-lo.
Outro fator relevante a seleo do teste. Como definimos o critrio de
teste a ser empregado e selecionamos os casos de teste representativos deste
critrio?

A escolha do critrio tem influncia direta na eficcia dos testes

(Bertolino, 2007).
A adequao do teste um fator complementar seleo de teste. Quanto
necessrio testar para garantir a observao de um critrio de teste? A anlise de
cobertura e as medidas de confiabilidade so mostras claras deste ponto e
auxiliam na deciso de quando parar a execuo dos testes.

Teste Funcional

74

Adotando a terminologia de teste (seo 2.1), o termo sistema em teste pode


corresponder ntegra deste sistema ou as suas partes, representadas por
subsistemas e por unidades de programao. Isto conduz a uma nova pergunta.
Qual o foco do processo de teste funcional?

Em virtude dos nveis de

composio de um sistema, o foco do processo de teste funcional varia. Quando o


foco a unidade, um mdulo, uma classe ou um componente so exercitados.
Quando o foco a integrao, o relacionamento e o comportamento das unidades
so avaliados em conjunto. Quando o foco o sistema completo, sua estrutura,
seu comportamento e suas interaes com o ambiente so verificados.
O contexto de execuo dos casos de teste tambm tem impacto nos seus
resultados. Onde so executados os casos de teste? Isto se reflete na gerao do
ambiente de teste. A configurao inicial para realizao de um conjunto de testes
e a capacidade de reproduo de testes so diretamente afetadas por esta questo.
PUC-Rio - Certificao Digital N 0611931/CA

Finalmente, a integrao dos testes ao ciclo de desenvolvimento de um


sistema no s influencia nos custos dos testes como na qualidade do produto
entregue ao usurio final do sistema. Quando os testes podem ser realizados? Os
momentos de interao entre equipe de teste e desenvolvimento so to
importantes quanto os seus trabalhos isolados.
4.1.1.
Fases e Atividades
O processo de teste funcional proposto divide as suas atividades em fases.
Cada fase equivale a um subconjunto de atividades que compartilham um mesmo
aspecto do problema de teste de sistema. Os fluxos de atividades de uma fase
esto organizados de forma a solucionar este aspecto em comum oferecendo,
quando possvel, alternativas.
Os aspectos principais a serem abordados pelo processo de teste funcional
so a modelagem do sistema em teste, a seleo de um cenrio de teste, a
execuo e avaliao deste cenrio. Cada um destes aspectos tratado por uma
fase do processo (Figura 26). Alm destas fases, foi introduzida uma fase de
preparao, denominada de preliminares, cujo aspecto abordado a compreenso
do sistema em anlise por meio dos requisitos presentes em sua especificao.

Teste Funcional

75

PUC-Rio - Certificao Digital N 0611931/CA

Figura 26 Processo de Teste Funcional

As fases e as atividades do processo de teste descritas em mais detalhes nas


prximas sees foram inspiradas, respectivamente, nos passos do metaprocesso
de teste (seo 2.2) e nos passos do processo de teste baseado em modelos (seo
2.6.3) anteriormente descritos. O formato proposto foi concebido e elaborado a
partir de composio e extenso destes passos somados a acrscimos e mudanas
promovidos por idias prprias resultantes de experincias prticas.
A descrio de cada fase apresenta implicitamente uma estrutura comum
para facilitar a sua compreenso: introduo; problema; soluo; conseqncias;
referncia. A introduo identifica sua motivao e seu objetivo. O problema
revela o escopo da fase em termos de conceitos e abstraes tratados (anlise).
Indica quando a fase aplicada e o contexto de aplicao. A soluo define como
o problema resolvido, apresentando um projeto (design). As conseqncias
descrevem os produtos obtidos e as decises de projeto tomadas mediante as
alternativas de projeto existentes. Apontam os custos e os benefcios da soluo.
A referncia aponta os trabalhos relacionados que serviram como base para
caracterizao do problema ou que influenciaram na soluo proposta.
Aps a caracterizao das fases, suas atividades so detalhadas.

Neste

ponto, o propsito, os papis envolvidos, a entrada (insumos) e a sada


(resultados) das atividades so descritos. Ao final de cada atividade, um exemplo

Teste Funcional

76

mostra em termos prticos como so realizadas. Este exemplo contnuo e


permeia todas as atividades de todas as fases.
Em cada atividade apresentada a arquitetura da soluo de software
desenvolvida para resolver ou auxiliar na resoluo do problema abordado pela
atividade. Apresenta-se ainda a dinmica dos participantes desta arquitetura. Os
papis desempenhados por estes participantes poderiam ser realizados num
processo manual de teste por seres humanos. A nomenclatura de papis usada
pelo processo foi concebida para atender as duas realidades, humana e
computacional.
A representao da arquitetura feita com uso do diagrama de classes da
UML (Unified Modeling Language) e a dinmica retratada por meio do
diagrama de seqncias desta mesma linguagem (Blaha & Rumbaugh, 2005). Em
cada soluo proposta, destacam-se sempre os pontos fixos e os pontos de
PUC-Rio - Certificao Digital N 0611931/CA

extenso da arquitetura.

Alm disso, quando apropriado, so tratados como

aspectos arquiteturais os diferentes nveis de concretude dos testes e a


dependncia ou no da plataforma de execuo.
4.1.2.
Exemplo
Com o intuito de descrever de forma prtica o processo de teste e de
transformar este captulo tambm num guia para sua utilizao, um exemplo ser
desenvolvido ao longo de todas as suas fases e suas atividades. Com um exemplo
em comum possvel compreender o escopo de cada fase, as necessidades
(entradas) e os resultados (sadas) de cada atividade.
O exemplo escolhido foi o mesmo utilizado na descrio de modelos
gramaticais (captulo 3). Trata-se de um sistema simples para manipulao do
saldo de contas bancrias de pessoas fsicas ou pessoas jurdicas. O processo de
teste ser conduzido de forma a abordar dois cenrios: o teste de uma unidade do
sistema e o teste de integrao de vrias unidades deste sistema. A idia mostrar
as particularidades do processo tendo como base este exemplo. Um cenrio mais
complexo envolvendo o teste de todo um sistema ser desenvolvido somente no
estudo de caso (captulo 5) apresentado nesta dissertao.

Teste Funcional

77

4.2.
Preliminares
Para testar um sistema preciso saber quais so os requisitos a satisfazer
segundo as perspectivas de seus usurios e seus desenvolvedores. Nesta fase, o
objetivo coletar todas as informaes disponveis sobre o sistema e selecionar
dentre estas as que auxiliaro na sua modelagem para teste e na seleo, execuo
e avaliao de um cenrio de teste.
A coleta de informaes normalmente feita a partir da documentao
disponvel sobre o sistema. Eventualmente, o conhecimento de usurios e de
desenvolvedores tambm pode ser capturado. Quando no h documentao ou
participantes capazes de prover informaes, preciso utilizar tcnicas como a
engenharia reversa para tentar identificar possveis requisitos a partir do prprio

PUC-Rio - Certificao Digital N 0611931/CA

sistema. A seleo destas informaes est diretamente vinculada ao escopo de


testes que precisa ser definido. Estes procedimentos devem ocorrer no incio do
processo de teste antes da modelagem do sistema avaliado.
Para atacar esses pontos, a fase de preliminares define duas atividades
executadas em srie (Figura 27). A primeira delas tem por finalidade identificar
os documentos de especificao de requisitos.

A segunda procura definir o

escopo de avaliao. Ambas so atividades realizadas pelo testador do sistema a


princpio sem auxlio de uma ferramenta de automao.

Figura 27 Fase: Preliminares

Teste Funcional

78

O resultado final destas atividades a definio de um conjunto de


requisitos que sero utilizados como base para a construo dos modelos
gramaticais das prximas fases.
4.2.1.
Identificar Requisitos e Documentos de Especificao
O propsito desta atividade (Figura 28) fazer o levantamento das possveis
fontes de informao provedoras de requisitos funcionais do sistema.

Esta

atividade desempenhada pelo testador do sistema com auxlio do usurio e da

PUC-Rio - Certificao Digital N 0611931/CA

equipe de desenvolvimento.

Figura 28 Atividade: Identificar Documentos de Especificao de Requisitos

O resultado deste levantamento normalmente uma coleo de documentos.


Dentre estes documentos esto documentos de viso, atas de reunio, glossrios,
requisitos, descrio de casos de uso, diagramas com notao UML (Unified
Modeling Language), documentos sobre a arquitetura do sistema, documento
sobre a interface de programao.
No exemplo do sistema de contas bancrias, que foi desenvolvido utilizando
a linguagem Java, os diagramas de classe, os diagramas de seqncia de casos de
uso e a especificao da interface de programao (javadoc) foram coletados
(Figura 29).

Teste Funcional

79

Figura 29 Exemplo: Documentos do Sistema de Contas Bancrias

4.2.2.
Definir Escopo de Avaliao
O propsito desta atividade (Figura 30) definir que partes do sistema sero
testadas e selecionar quais dos requisitos presentes nos documentos de
PUC-Rio - Certificao Digital N 0611931/CA

especificao coletados so pertinentes para avaliao destas partes.

Esta

atividade desempenhada pelo testador. A definio do escopo normalmente


pautada pela indicao de usurios e desenvolvedores sobre o que mais crtico
em termos de funcionalidade ou o que causa maior impacto em termos de controle
e integrao.

Figura 30 Atividade: Definir Escopo de Avaliao

No caso da avaliao de uma unidade de programao de forma isolada,


somente a documentao relacionada a esta unidade ser considerada. O mesmo

Teste Funcional

80

vlido para um subsistema. No caso mais extremo correspondente ao teste de


todo o sistema, toda documentao disponvel ser considerada.
No exemplo do sistema de contas bancrias, dois testes sero realizados. O
teste de unidade de uma conta bancria e o teste de integrao que envolve o
servio bancrio (classe Bank Service), a conta bancria (classe Account) e o
registro de transferncias (classe Account Transfer). Para atender a este escopo de
teste, o diagrama de seqncia (Figura 31) do caso de uso de transferncia entre
contas bancrias e a documentao de suas interfaces pblicas (Figura 32) foram
coletados. Como tais elementos dependem tambm de conceitos que no so o

PUC-Rio - Certificao Digital N 0611931/CA

foco do teste, o diagrama de classe (Figura 33) do sistema tambm foi requerido.

Figura 31 Exemplo: Diagrama de Seqncia da Transferncia entre Contas

Teste Funcional

PUC-Rio - Certificao Digital N 0611931/CA

Figura 32 Exemplo: Documentao da Interface Pblica de Conta Bancria

Figura 33 Exemplo: Diagrama de Classes com foco na Conta Bancria

81

Teste Funcional

82

4.3.
Modelagem do Sistema em Teste
Definido o escopo de teste de um sistema, inicia-se a etapa de sua
modelagem. Neste momento, importante compreender as responsabilidades das
unidades de programao, como elas esto relacionadas e como interagem para
cumprir sua funo ou papel no sistema.

O objetivo desta fase construir

modelos do material em anlise que capturem estes aspectos e permitam a gerao


de casos de teste a partir de suas representaes.
Nesta fase, a forma de representao dos conceitos do sistema, seus
relacionamentos e seu comportamento a maior preocupao do responsvel pela
conduo dos testes.

A representao escolhida tambm deve ser capaz de

PUC-Rio - Certificao Digital N 0611931/CA

capturar todos esses itens.

Figura 34 Fase: Modelagem do Sistema em Teste

A soluo proposta o uso de modelos gramaticais como forma de


representao tanto da parte esttica, estrutura, quanto da parte dinmica,
comportamento, do sistema em teste. Duas atividades (Figura 34), que podem ser
concorrentes, so planejadas e executadas nesta fase visando construir um modelo
estrutural e um modelo comportamental. De posse da especificao de requisitos
do sistema em teste, possvel elaborar estes modelos e construir a partir deles um
modelo orientado a objeto que os represente num contexto computacional.

Teste Funcional

83

A automao da elaborao destes modelos gramaticais pode ser alcanada


com o emprego de tcnicas capazes de converter representaes comumente
empregadas na especificao de seus requisitos. A literatura de referncia deste
trabalho destaca duas destas tcnicas. Uma gera uma gramtica a partir de uma
documentao descrita em linguagem natural (Riebisch & Hbner, 2005), outra
usa diagramas UML de classe (Javed et al., 2005) como base.
Como conseqncia da soluo proposta, o sistema passa a ser avaliado sob
uma nova perspectiva: uma linguagem gramatical. Por ter uma forma genrica, a
anlise foca a especificao e inicialmente independente de plataforma. O custo
relacionado descrio dos sistemas por modelos gramaticais compensado pelo
benefcio obtido com seu formalismo que prepara a base para a automao do

PUC-Rio - Certificao Digital N 0611931/CA

teste.
4.3.1.
Especificar Estrutura

O propsito desta atividade descrever os tipos abstratos de dados usados


pelo sistema em teste de forma que possam ser aplicados posteriormente por um
gerador de casos de teste. O diagrama de classes de um sistema um exemplo de
fonte de extrao destas estruturas.
Esta atividade (Figura 35) desempenhada pelo testador do sistema
(System Tester), responsvel pela gerao do modelo estrutural, e em parte
pelo interpretador da gramtica (Structural Grammar Parser), responsvel
pela sua converso num modelo orientado a objeto (seo 3.5.1).

Teste Funcional

84

Figura 35 Atividade: Especificar Estrutura

Neste modelo (Figura 36 e Figura 37), cada estrutura de dados


PUC-Rio - Certificao Digital N 0611931/CA

representada por um tipo (Type), que pode ser uma unidade de programao
(Program Unit), um tipo primitivo (Primitive Type) ou uma enumerao
(Enumeration). Este modelo ainda captura a relao de generalizao entre
unidades de programao (superunits e subunits) e a definio das
propriedades (Properties) de uma unidade considerando a sua multiplicidade.
Os relacionamentos de associao entre as unidades de programao so
materializados nas propriedades das unidades relacionadas.

Figura 36 Arquitetura de Representao da Estrutura do Sistema

PUC-Rio - Certificao Digital N 0611931/CA

Teste Funcional

85

Figura 37 A Dinmica de Representao da Estrutura do Sistema

No exemplo do sistema de contas bancrias, a estrutura avaliada est


definida pelo modelo estrutural exibido a seguir (Tabela 11).

Modelo Estrutural
Account = ($string:number $double:balance Branch:branch Party:owner);
Branch = ($string:number {Account}:account Bank:bank);
Bank = (LegalOrganization);
LegalOrganization = (Organization)($string:cnpj);
Organization = (Party)($string:code);
Party = ($string name);
Person = ($string cpf);
InsufficientFundsExceptionParameters = (AccountException)();
IllegalAmountException = (AccountException)();
AccountException = ($exception)(Account:account);

Tabela 11 Exemplo: Modelo Estrutural

Teste Funcional

86

4.3.2.
Especificar Comportamentos
O propsito desta atividade descrever o comportamento do sistema a partir
das funcionalidades descritas pelos documentos de sua especificao e por suas
interfaces pblicas. Os diagramas de seqncia UML, as descries de casos de
uso e a API do sistema so exemplos destas especificaes.
Esta atividade (Figura 38) desempenhada pelo testador do sistema
(System Tester), responsvel pela gerao do modelo comportamental, e em
parte pelo interpretador da gramtica (Behavior

Grammar

Parser),

responsvel pela sua converso num modelo orientado a objeto (seo 3.5.2) que
consolidado com o modelo gerado pela atividade anterior de especificao da

PUC-Rio - Certificao Digital N 0611931/CA

estrutura de teste.

Figura 38 Atividade: Especificar Comportamentos

Neste modelo (Figura 39 e Figura 40), cada funo declarada representada


como uma operao (Operation) de sua correspondente unidade de
programao (ProgramUnit). Seus parmetros (Parameters), seu valor de
retorno (referncia a um tipo Type) e possveis excees (conjunto de
referncias a um tipo Type) geradas tambm so capturados e associados
operao.

Teste Funcional

87

PUC-Rio - Certificao Digital N 0611931/CA

Figura 39 Arquitetura de Representao dos Comportamentos do Sistema

Figura 40 A Dinmica de Representao dos Comportamentos do Sistema

No exemplo do sistema de contas bancrias, os comportamentos avaliados


esto definidos pelo modelo comportamental descrito na tabela a seguir.

Teste Funcional

88

Modelo Comportamental
Account = ( makeAccount($string:number Branch:branch
Party:owner $double:balance) Account;
credit ($double:amount) $void IllegalAmountException;
debit ($double:amount) $void
IllegalAmountException InsufficientFundsException;
getBalance $void;
getBranch branch;
getNumber $string;
getOwner $string;
setBalance( $double:balance ) $void IllegalAmountException;
setBranch( Branch:branch ) $void;
setNumber( $string:number ) $void;
setOwner( Party:owner ) $void; );
Branch = ( makeBranch ($string:number, Bank:bank) Branch;
getAccount {account}; );
Bank = ( makeBank ($string:name $string:code $string:cnpj) Bank; );

PUC-Rio - Certificao Digital N 0611931/CA

Person = ( makePerson( $string:name ) Person; );


/* S foram declaradas as classes e operaes necessrias ao teste das
operaes <credit> e <debit> da classe <Account>; */

Tabela 12 Exemplo: Modelo Comportamental

4.4.
Seleo do Cenrio de Teste
Definido o escopo de avaliao e caracterizado o sistema, a prxima etapa
especificar e definir um cenrio de teste. Este cenrio indica que estruturas e
funcionalidades sero avaliadas segundo uma estratgia de teste e contempla as
particularidades do ambiente onde os testes sero executados.
O objetivo desta fase gerar o cenrio no formato de um programa que ser
utilizado para a execuo e avaliao dos testes.

Esta execuo pode ser

meramente conceitual, independente de plataforma, ou voltada para uma


plataforma especfica.
Nesta fase, preciso definir um critrio de teste que permita avaliar o
sistema e que seja eficaz na deteco de faltas existentes no mesmo. Orientado
por este critrio, deve-se especificar os casos de teste que o atendem. Alm disso,
deve-se preparar um conjunto de teste, uma massa crtica que permita avaliar as
funcionalidades do sistema.

Teste Funcional

89

O conjunto de teste composto por casos de teste que descrevem


comportamentos e usam os dados gerados para provocar mudanas nos
comportamentos. necessrio estabelecer o mecanismo que permita refletir esta
sensibilidade ao contexto. O ambiente de execuo tambm influencia nos
resultados do teste e, portanto, precisa ser modelado. O cenrio de teste define um

PUC-Rio - Certificao Digital N 0611931/CA

contexto representado pelo sistema, seu ambiente e um conjunto de teste.

Figura 41 Fase: Seleo do Cenrio de Teste

Esta fase (Figura 41) est dividida em quatro atividades: definir critrio de
seleo de teste; especificar casos de teste; especificar ambiente de teste; gerar
cenrio de teste.
Analisando o domnio de cada funo disponvel na interface pblica do
sistema em teste possvel selecionar um critrio de cobertura. Aps a definio
do critrio, possvel escolher que tcnicas de teste funcional (seo 2.4.1) sero
aplicadas na gerao dos dados de teste. Para cada tcnica, existe um algoritmo
que representa uma estratgia (Gamma et al., 1994) usada para percorrer os
modelos gramaticais que representam a estrutura e os comportamentos do sistema.

Teste Funcional

90

Os casos de teste tambm so modelados com base em gramticas. Para


permitir a variabilidade, cada elemento desta gramtica apresenta atributos que
correspondem a restries tanto na interpretao do seu valor quanto na definio
do fluxo a ser percorrido. Os valores so limitados em faixas ou conjuntos por
regras definidas pelos atributos. Este fluxo corresponde a uma seqncia de
chamadas de mtodos descritos como elementos no-terminais da gramtica. O
fluxo alterado por meio de condies a serem testadas. Com o uso de atributos,
portanto, a gerao torna-se sensvel ao contexto.
At ento, as especificaes foram feitas numa representao genrica que
independe da plataforma de execuo, mas o ambiente tambm impe restries.
Estas precisam ser capturadas e consideradas na gerao dos casos de teste. A
forma de captura tambm ocorre pelo uso de modelo gramatical. O modelo
descrever as configuraes do sistema, a maneira como o mesmo ser
PUC-Rio - Certificao Digital N 0611931/CA

instanciado e quais sero as restries de recursos utilizados pela estrutura de


teste. Isto caracterizar o estado inicial de teste.
Neste momento, realiza-se um mapeamento entre os conceitos genricos e
os conceitos concretos da programao.

preciso utilizar agora uma infra-

estrutura de teste compatvel com a plataforma em uso.


Nesta fase foram gerados modelos gramaticais de casos de teste e de
ambiente de teste adotados para gerar casos de teste executveis propriamente
ditos. A construo dos modelos manual, mas os casos de teste executveis so
gerados automaticamente a partir destes modelos e da infra-estrutura disponvel
para uma plataforma especfica.
O uso dos modelos gramaticais facilita a concepo dos testes uma vez que
se trabalha com uma representao independente da plataforma. Mesmo quando
eles so derivados automaticamente de modelos (como diagramas UML) ou de
textos em linguagem natural, que compem a especificao do sistema, eles so
descritos num nvel abstrato. O custo de sua elaborao compensado pelo fato
da gerao dos casos de teste ser sistemtica. A gerao limitada apenas pela
existncia ou no de infra-estrutura para uma plataforma especfica.

Teste Funcional

91

4.4.1.
Definir Critrio de Seleo de Teste
O propsito desta atividade definir o critrio de cobertura de teste usando
como referncia o escopo de avaliao (seo 4.2.2) definido na fase de
preliminares e as funcionalidades do sistema em teste, sua estrutura e suas formas
de interao identificadas na modelagem do sistema em teste (seo 4.3). Esta

PUC-Rio - Certificao Digital N 0611931/CA

atividade desempenhada pelo testador do sistema (System Tester).

Figura 42 Atividade: Definir Critrio de Seleo de Teste

Esta atividade (Figura 42) desempenhada pelo testador do sistema


(System Tester).

O testador do sistema avalia cada item do escopo de

avaliao e identifica qual a tcnica de teste funcional (seo 2.4.1) mais


adequada para avaliar a estrutura ou comportamento envolvido. Quando se trata
de um teste de um sistema que j foi avaliado anteriormente, o conhecimento de
um conjunto bem-definido de faltas pode auxiliar na seleo da tcnica de teste.
A escolha da tcnica de teste funcional indicar a estratgia (Functional
Strategy) de gerao de dados de teste (Figura 43). O uso de determinadas

estratgias requer a extenso da gramtica utilizada na descrio dos modelos de


teste. Esta extenso representada pelo acrscimo de atributos a elementos desta
gramtica.
identificada.

Um cenrio de teste ser montado para cada estratgia de teste

Teste Funcional

92

Figura 43 Arquitetura de Estratgia de Teste

No exemplo do sistema de contas bancrias, como o escopo de avaliao


so as operaes de crdito e dbito realizadas diretamente pela conta (Account)
PUC-Rio - Certificao Digital N 0611931/CA

ou indiretamente pela transferncia entre contas (Account Transfer) gerada a


partir de um servio bancrio (Bank Service), a estratgia de valor de contorno
foi selecionada. Com ela possvel avaliar se os limites das operaes esto
sendo contemplados corretamente, identificando a ausncia de fundos e quantias
invlidas, permitindo a transferncia entre contas e recuperando o saldo correto.
4.4.2.
Especificar Casos de Teste
O propsito desta atividade descrever os casos de teste do sistema,
formalizando o critrio de teste caracterizado na atividade anterior. Esta atividade
(Figura 44) desempenhada em parte pelo testador do sistema (System
Tester), responsvel pela gerao do modelo de casos de teste, e em parte pelo

interpretador da gramtica do modelo (Test

Case

Grammar

Parser),

responsvel pela sua converso num modelo orientado a objetos (seo 3.5.3).

Teste Funcional

93

Figura 44 Atividade: Especificar Casos de Teste

Para cada caso de teste definido um objetivo de teste (Test Goal) que
PUC-Rio - Certificao Digital N 0611931/CA

corresponde a uma seqncia de comandos consistentes com a descrio da


estrutura e do comportamento do sistema.

Estes comandos normalmente

correspondem s chamadas de funes do sistema em teste.


A cada objetivo est associado um orculo de teste (Test Oracle) que
estabelece o resultado esperado para a execuo do caso de teste. O orculo de
teste pode ser um valor calculado ou um tipo esperado, representado,
respectivamente, por um elemento no-terminal da gramtica do modelo.

orculo, assim como o objetivo de teste, tambm pode ser descrito como uma
seqncia de comandos, sendo calculado dinamicamente para revelar o resultado
esperado.
Nesta atividade (Figura 45 e Figura 46), o modelo de casos de teste
analisado por um interpretador que o converte num conjunto (Test Suite) de
casos de testes (Test Cases) constitudos por pares de objetivo de teste (Test
Goal) e orculo de teste (Test Oracle).

Este conjunto ser referenciado

posteriormente pelo cenrio de teste (Test Scenario).

Teste Funcional

94

PUC-Rio - Certificao Digital N 0611931/CA

Figura 45 Arquitetura de Representao dos Casos de Teste

Figura 46 A Dinmica de Representao dos Casos de Teste

No exemplo do sistema de contas bancrias, os casos de teste esto


definidos pelo modelo descrito na tabela a seguir.

Teste Funcional

95

Modelo de Caso de Teste


testGoal = ( makeAccount( 1234 aBranch aPerson 0 ) ?createdAccount?;
?createdAccount? credit( 10 );
?createdAccount? debit( 20 );
) ?createdAccount? getBalance();

testOracle = InsufficientFundsException;

Tabela 13 Exemplo: Modelo de Caso de Teste

4.4.3.
Especificar Ambiente de Teste
O propsito desta atividade especificar os parmetros de configurao do

PUC-Rio - Certificao Digital N 0611931/CA

ambiente de teste que sero considerados pelo cenrio de teste. Quando o teste
concebido para execuo numa plataforma especfica, esta atividade tambm
realiza o mapeamento entre os conceitos usados na descrio da estrutura e do
comportamento do sistema e na sua representao nesta plataforma de execuo.
Nos casos citados, a especificao realizada por meio de um modelo de
ambiente de teste.

Figura 47 Atividade: Especificar Ambiente de Teste

Esta atividade (Figura 47) desempenhada por um interpretador de


gramtica de ambiente de teste (Environment Grammar Parser).

Este

interpretador converte o modelo de ambiente de teste descrito num arquivo texto

Teste Funcional

96

num modelo orientado a objeto (seo 3.5.4). Este modelo (Figura 48 e Figura
49) simples e constitudo por uma classe que representa o ambiente de teste
(Test Environment) sendo as suas propriedades e valores armazenados por
uma estrutura de mapa (conjunto de pares de chave-valor).

Tal classe ser

referenciada posteriormente pelo programa que representa o cenrio de teste

PUC-Rio - Certificao Digital N 0611931/CA

(Test Scenario).

Figura 48 Arquitetura de Representao do Ambiente de Teste

Figura 49 A Dinmica de Representao do Ambiente de Teste

No exemplo do sistema de contas bancrias, o ambiente de teste est


definido pelo modelo gramatical descrito na tabela a seguir.

Modelo de Ambiente
/* Configurao Inicial do Ambiente */
startup = ( aPerson = makePerson ('Silva' '000.000.000-00');
aBank = makeBank ('Banco' '001' '00.000.000/0000-00' );
aBranch = makeBranch ('1000' aBank) );

Teste Funcional

97

/* Mapeamento da Estrutura para a Plataforma Java */


Person = sample.Banking.Person;
Bank = sample.Banking.Bank;
Branch = sample.Banking.Branch;s
/* ... (continua) ... */

/* Mapeamento dos Comportamentos para a Plataforma Java */


Branch.makeBank = Branch;
Bank.makeBranch = Bank;
Account.makeAccount = Account;
Person.makePerson = Person;
Account.credit = credit;
Account.debit = debit;
Account.getBalance = getBalance;
Account.setBalance = setBalance;
/* ... (continua) ... */

PUC-Rio - Certificao Digital N 0611931/CA

Tabela 14 Exemplo: Modelo de Ambiente

4.4.4.
Gerar Cenrio de Teste
O propsito desta atividade gerar um programa de teste que representa o
cenrio de teste do sistema. Esta atividade (Figura 50) desempenhada por um
construtor de programa de teste (Test Builder) auxiliado por interpretadores
de modelos de teste (Test Parsers).

Figura 50 Atividade: Gerar Cenrio de Teste

Teste Funcional

98

O construtor de programa de teste coordena a ao dos interpretadores dos


modelos de teste.
Scenario).

O construtor gera o corpo do programa de teste (Test

Este preenchido por mtodos gerados para cada caso de teste

identificado pelo interpretador de caso de teste (Test Case Model Parser).


O corpo de cada mtodo descrito pela seqncia de comandos definida pelo
objetivo de teste correspondente. Ao final do mtodo, uma assertiva gerada com
base no orculo de teste correspondente. Durante a atividade de gerao do
programa (Figura 51), os interpretadores de estrutura (Structural Model
Parser), de comportamento (Behavior Model Parser) e de ambiente de

teste (Environment

Model

Parser) so consultados para garantir a

consistncia do cdigo gerado (somente estruturas ou funes definidas podem ser


referenciadas) e para substituir parmetros de configurao por seus respectivos

PUC-Rio - Certificao Digital N 0611931/CA

valores.

Figura 51 Arquitetura de Gerao de Cenrio de Teste

4.5.
Execuo e Avaliao do Cenrio de Teste
Para analisar a correspondncia entre a codificao de um sistema e sua
especificao, preciso exercit-lo com a finalidade de encontrar problemas
funcionais. O objetivo desta fase (Figura 52) executar os casos de teste descritos
num programa de teste construdo na fase de seleo de cenrio (seo 4.4),
observando as falhas manifestadas e identificando os possveis erros no sistema.

Teste Funcional

99

PUC-Rio - Certificao Digital N 0611931/CA

Figura 52 Fase: Execuo e Avaliao do Cenrio de Teste

Uma soluo de execuo de teste deve conceber como feito o controle da


seqncia de execuo dos casos de teste, garantindo ou no seu isolamento.
Tambm identifica como o resultado de um objetivo de teste deve ser comparado
com o resultado previsto pelo orculo de teste. Os resultados podem apresentar
nveis de abstrao diferentes, sendo necessrio compatibilizar as diferenas para
compar-los.

Suas descries podem ser mais genricas e independentes de

plataforma ou mais especializadas e dependentes de plataforma. Em caso de


falha, um laudo deve ser gerado identificando a falta e o local onde foi
encontrada, facilitando a correo do problema. Em caso de erro, a arquitetura de
teste deve indicar o contexto de sua execuo onde foi identificada uma
inconsistncia. Com base nos laudos, deve ser possvel atribuir um veredicto ao
cenrio de teste. Este deve ser um indicativo de qualidade do sistema.
A seqncia de execuo dos casos de teste feita de acordo com o que foi
descrito no modelo de casos de teste. Ela est refletida no programa gerado para o
cenrio de teste. A princpio, o programa tambm define quando deve retornar ou
no ao seu estado inicial aps a execuo de um caso de teste. O comportamento
padro retornar ao estado inicial, pois assim se evita que o resultado de um caso
de teste interfira no processamento de outro caso de teste.
Durante a execuo de um caso de teste, tanto o objetivo de teste quanto o
orculo de teste so avaliados. Nos casos de teste conceituais, ambos estaro

Teste Funcional

100

descritos de forma genrica. Nos casos de teste dependentes de plataforma, o


objetivo de teste e o orculo de teste so concretos e equivalem ao resultado de
um processamento nesta plataforma. Em virtude disto, evita-se a discrepncia
entre os nveis de concretude da representao. Os comandos descritos para o
objetivo de teste e para o orculo de teste nos modelos de casos de teste so
convertidos por um adaptador para a sua representao na plataforma.
O resultado de toda comparao registrado num laudo de teste dependendo
da estratgia de teste empregada. Normalmente, se houve um erro ou uma falha, o
laudo de teste gerado. Este laudo indicar a diferena encontrada e marcar o
local, ponto de processamento do modelo gramatical, onde ela foi identificada.
No caso de sucesso, o laudo conter apenas o veredicto.

Os laudos so

armazenados pelo cenrio de teste.


Aps a execuo do cenrio de teste, todos os defeitos encontrados so
PUC-Rio - Certificao Digital N 0611931/CA

relacionados em laudos de teste do sistema. Estes laudos so verificados por um


juiz de teste que atribui um veredicto ao cenrio de teste segundo uma estratgia
de julgamento. A partir desse ponto, os fatos gerados permitiro ao testador (ou
equipe de testes) decidir sobre quando gerar mais testes, modificar os modelos,
alterar a estratgia de teste e parar os testes. Os resultados da execuo descritos
nos laudos de teste podem funcionar como parmetros para medidas de
confiabilidade e qualidade do sistema em teste.
importante notar que para averiguar a adequao dos testes, podem ser
introduzidos cdigos mutantes de modo a controlar se os testes esto sensveis s
mudanas. Essa percepo conseguida pelo acompanhamento dos veredictos
gerados. Se um defeito foi introduzido conscientemente e um caso de teste foi
projetado corretamente para detect-lo, ento a falha dever ser manifestada.
4.5.1.
Executar Cenrio de Teste
O propsito desta atividade executar o cenrio de teste selecionado para o
sistema. Esta atividade (Figura 53) desempenhada por um executor de testes
(Test Runner).

Este executor (Figura 54) aciona o programa de teste

correspondente ao cenrio de teste (Test Scenario), disparando os casos de

Teste Funcional

101

teste (Test Case) do mesmo. Os resultados dos testes so registrados em laudos


de teste (Test Logs).

PUC-Rio - Certificao Digital N 0611931/CA

Figura 53 Atividade: Executar Cenrio de Teste

Figura 54 Arquitetura de Execuo de Teste

Teste Funcional

102

4.5.1.1.
Executar Caso de Teste
A execuo do cenrio de teste (Figura 55) composta pela execuo
individual de cada caso de teste de forma isolada. Isto significa que o resultado de
um caso de teste no interfere no estado inicial da execuo de outro. O propsito
desta tarefa avaliar uma funcionalidade do sistema de teste para um dado
domnio de entrada (dados de teste) por meio da execuo de um nico caso de
teste (Test Case). O caso de teste equivale semanticamente a um mtodo do
programa de teste que tenta assegurar que um objetivo de teste (Test Goal) seja
equivalente a um orculo de teste (Test Oracle).

O objetivo de teste

corresponde a um mtodo com uma seqncia (bloco) de comandos disparados


por um executor de testes e com um resultado (valor de retorno). Estes comandos

PUC-Rio - Certificao Digital N 0611931/CA

normalmente so as chamadas de mtodos do sistema em teste. O orculo de teste


corresponde outra seqncia de comandos tambm com um resultado. O caso
de teste confronta o resultado do processamento do objetivo de teste e do orculo
de teste por meio de uma assertiva, registra o resultado da comparao (veredicto)
no laudo de teste criado por ele e adiciona este laudo ao repositrio mantido pelo
cenrio de teste.

Figura 55 A Dinmica de Execuo de Teste

Teste Funcional

103

4.5.2.
Gerar Veredicto de Teste
O propsito desta atividade gerar uma sentena que identifica se o critrio
de teste foi ou no satisfeito. Esta atividade (Figura 56) desempenhada por um
juiz de teste (Test Judge). Este juiz (Figura 57) avalia os laudos de teste (Test
Logs) que contm o resultado da execuo de cada caso de teste. A sentena do

juiz (Verdict) proferida com base numa estratgia (Gamma et al., 1994) de

PUC-Rio - Certificao Digital N 0611931/CA

julgamento (Test Judgement).

Figura 56 Atividade: Gerar Veredicto de Teste

Figura 57 Arquitetura de Julgamento de Teste

A estratgia de julgamento padro (Default

Test

Judgement)

estabelece um veredicto de falha (Fail) quando pelo menos um caso de teste est

Teste Funcional

104

invlido, situao em que a resposta obtida no equivale resposta esperada.


Estabelece um veredicto de sucesso (Pass) quando todos os casos de uso esto
vlidos, situao em que respostas obtidas equivalem a respostas esperadas.
Finalmente, estabelece um veredicto de erro (Error), quando a estrutura de teste

PUC-Rio - Certificao Digital N 0611931/CA

apresentou falha na execuo (Figura 58).

Figura 58 A Dinmica de Julgamento de Teste

Com base no veredicto de teste possvel definir as prximas aes.


Quando falhas forem observadas, os casos de teste com problemas sero
identificados e a estrutura e o comportamento relacionados sero alvo de futuras
inspees. Se todos os casos passaram, isto pode indicar uma possvel parada dos
testes. Em algumas circunstncias, predizer o resultado de um teste to difcil,
inclusive em termos de programao, que o caso de teste precisar ser
simplificado. Noutros casos ser descartado. Estando o problema relacionado
estrutura de teste, esta dever ser corrigida antes que qualquer outra ao seja
tomada.