• Nenhum resultado encontrado

CASOS DE TESTE EM CSP BASEADOS EM CENÁRIOS 77 No refinamento (5.11), o processo EXEC CTCSP corresponde à execução do caso de teste

Geração de Casos de Testes CSP Baseada em Propósitos

Definição 5.6.1. Seja uma implementação IUT e uma especificação P, tal que IUT cspioco P,

5.6 CASOS DE TESTE EM CSP BASEADOS EM CENÁRIOS 77 No refinamento (5.11), o processo EXEC CTCSP corresponde à execução do caso de teste

sobre a implementação trivial (a especificação P). A construção UNTIL é utilizada para se- lecionar os cenários onde eventualmente ocorre uma falha. Portanto, o referido refinamento quando falso, retorna, caso exista, tal cenário de EXECCTCSP. Este cenário indica o evento que deve ser incluído no conjunto initialsN. No caso em que o refinamento é falso, surge um contra- exemplo CCTCSP da forma t a hfail, refuse.1i, onde t é uma seqüência de eventos que pertenceP. O valor do comprimento da seqüência t (#t) indica a posição da tupla em s que precisa atualizar initials#t pela inclusão do evento que está na última posição de t. Desta atualização

surge s0, que corresponde a s após a atualização de initials#t. De s0pode ser obtido um novo

CTCSP (CTCSP0) que é executado contra P pela expressão EXECCTCSP0 = P[| (ΣP |]CTCSP.

EXECCTCSP0 é reaplicado no refinamento (5.11) substituindo EXECCTCSP e repetindo as atuali-

zações necessárias para initialsN. Esta reaplicação acontece até que o refinamento seja válido, portanto nenhum contra-exemplo será retornado. Neste ponto, não há ajustes a ser efetuados no teste, pois o mesmo é consistente.

A Figura 5.11 mostra através de exemplos, o processo completo para obtenção de um caso de teste, bem como a aplicação de (5.11) para identificar se CT é consistente.

01 PT2= UNTIL(ΣSYSTEM, {y},UNTIL(ΣSYSTEM,{z}, ACCEPT(1))) 02

03 SYSTEM vτ SYSTEM |[ΣSYSTEM]| PT2 04

05 CE1= ha,b,y,z,accept.1i

06

07 sCE1= h(a,∅),(y,∅),(b,∅),(z,∅),(accept.1,∅)i 08

09 CT = TC BUILDER(ΣSYSTEMiSYSTEMo,sCE1) 10

11 EXECSYSTEM = SYSTEM |[| ΣSYSTEM| ]| CT 12

13 EXECSYSTEMEXECSYSTEM[| union(ΣSYSTEM,fail) |] 14 UNTIL(ΣSYSTEM,fail,REFUSE(1))

Figura 5.11 Processo completo para obtenção de um caso de teste e verificação de consistência.

Acompanhando a Figura 5.11, na linha 1, tem-se o PTCSP PT2 que seleciona cenários de teste onde eventualmente ocorre y e eventualmente ocorre z, pelo evento de marcação accept.1. Na linha 3, está um refinamento cujo resultado da verificação é falso quando aplica PT2 sobre a especificação SYSTEM para obter o cenário de teste CE1(da linha 5). A partir deste cenário é

formado o parâmetro sCE1(na linha 7) que é utilizado como parâmetro de TC BUILDER para dar comportamento ao CTCSP CT (linha 09). Na linha 11, está a execução formal entre especi- ficação e CTCSP. Finalmente, na linha 13, está o refinamento (5.11) que indica como completar

sCE1, de forma que uma nova versão do teste CT torne-se consistente. Este refinamento retorna o contra-exemplo CCT = ha,y,b,y,fail,refuse.1i que indica que o conjunto initials4de sCE1pre-

cisa incluir o evento y. Abaixo está a seqüência s0CE1 que corresponde a sCE1 depois do ajuste em initials4.

s0CE1= h(a,∅),(y,∅),(b,∅),(z,{y}),(accept.1,∅)i

A partir de s0CE1 constrói-se um novo caso de teste, uma nova execução de teste, e reaplica- se (5.11) para verificar se o novo teste é consistente.

CT0= TC BUILDER(ΣSYSTEMiSYSTEMi,s0CE1)

EXEC0SYSTEM = SYSTEM |[| ΣSYSTEM | ]| CT0

EXECSYSTEMEXECSYSTEM0 [| union(ΣSYSTEM,fail) |]UNTIL(ΣSYSTEM,fail,REFUSE(1)) Na especificação acima, CT0representa o novo CTCSP obtido a partir de s0CE1.

A expansão do processo CT0possui o mesmo comportamento do processo CT00especificado a seguir.

CT00 = a → CT10

CT10 = y → CT20 ANY(ΣSYSTEMo− {y}, FAIL)

CT20 = b → CT30

CT30 = z → PASS  ANY({y},INCO)  NOT(ΣSYSTEM,{z,y},FAIL)

Analisando a continuação do processo CT00(que é a expansão de CT0), verificamos que este corresponde a uma modificação do processo CT0(da Seção 5.6.2) pelas mudanças no processo

CT30. Entretanto, CT00 é consistente e CT0 não o é. O processo de teste CT00 durante a exe-

cução contra a especificação SYSTEM, quando não encontra o cenário de teste especificado, porém encontra um comportamento que faz parte da especificação não falha, pois o veredicto coerente para este comportamento é inconclusivo. Isto pode ser verificado usando como exem- plo o comportamento de CT00 que ao chegar a se comportar como CT30 executa o trace ha, y, bi em sincronia com a especificação SYSTEM. As opções que este teste espera da especificação como CT30 são: o evento de saída z, que leva o teste a passar, o evento de saída y, que leva o teste a ser inconclusivo, e, qualquer evento do alfabeto diferente de z e y, que leva o teste a falhar. Observando a semântica operacional do processo SYSTEM na Figura 5.1, fica claro que o comportamento da especificação após o trace ha, y, bi aceita a ocorrência do evento de saída

y, portanto, um teste deve ser inconclusivo no caso em que y aconteça.

Continuando a verificar a consistência de CT0através de refinamentos, uma nova execução

EXEC0SYSTEMé montada com CT0, e por último o refinamento que indica se CT0pode eventual- mente falhar. O resultado do refinamento é positivo, o que indica que não existem mais ajustes a realizar no caso de teste CT0, pois o mesmo é um caso consistente - jamais falha para uma implementação correta. A Figura 5.12 mostra o processo completo para obtenção do caso de teste consistente CT0.

Na especificação que sucede, é possível analisar os eventuais veredictos encontrados quando se executa CT0na implementação IUT1 da Seção 5.5.

EXEC IUT1= IUT1|[| AlfaI1 |]|CT0 EXEC IUT1 \ AlfaI1 vτpass → STOP EXEC IUT1 \ AlfaI1 vτfail → STOP

5.6 CASOS DE TESTE EM CSP BASEADOS EM CENÁRIOS 79 01 PT2= UNTIL(ΣSYSTEM, {y},UNTIL(ΣSYSTEM,{z}, ACCEPT(1)))

02

03 SYSTEM vτ SYSTEM |[ΣSYSTEM]| PT2 04

05 CE1= ha,b,y,z,accept.1i

06

07 sCE1= h(a,∅),(y,∅),(b,∅),(z,∅),(accept.1,∅)i 08

09 CT = TC BUILDER(ΣSYSTEMiSYSTEMi,sCE1) 10

11 EXECSYSTEM = SYSTEM |[| ΣSYSTEM| ]| CT 12

13 EXECSYSTEMEXECSYSTEM[| union(ΣSYSTEM,fail) |] 14 UNTIL(ΣSYSTEM,fail,REFUSE(1))

15

16 s0CE1= h(a,∅),(y,∅),(b,∅),(z,{y}),(accept.1,∅)i 17

18 CT0= TC BUILDER(ΣSYSTEMiSYSTEMo,s0CE1) 19

20 EXEC0SYSTEM = SYSTEM |[| ΣSYSTEM| ]| CT0 21

22 EXECSYSTEMEXEC0SYSTEM[| union(ΣSYSTEM,fail) |] 23 UNTIL(ΣSYSTEM,fail,REFUSE(1))

Figura 5.12 Processo completo para obtenção de um caso de teste consistente.

O resultado do primeiro refinamento é verdadeiro, pois eventualmente o caso de teste CT0 passa em uma das possíveis interações com IUT1. Já o segundo é falso, porque sendo a

IUT1 cspioco SYSTEM, e o caso de teste consistente, não existe uma execução na qual o caso

de teste falhe.

Em outro exemplo, emprega-a implementação IUT2 da Seção 5.5 para analisar os veredic- tos eventualmente alcançados quando executando o caso de teste CT0.

EXEC IUT2= IUT2|[| AlfaI2 |]|CT0 EXEC IUT2 \ AlfaI1 vτpass → STOP EXEC IUT2 \ AlfaI1 vτfail → STOP

Apesar de ¬(IUT2 cspioco SYSTEM), CT0 alcança com IUT2 eventualmente o mesmo veredicto de quando é executado contra IUT1. Isto acontece, pois sendo este teste consistente, é garantido que ele não falha em especificações corretas, entretanto, pode aceitar especificações não conformes - que é o caso de IUT2.

C´ 6