• Nenhum resultado encontrado

6.3 Algoritmo do Jogo de Refinamento

6.3.2 Valida¸c˜ ao do Algoritmo do Jogo de Refinamento

Para validar o algoritmo do jogo de refinamento, ele foi implementado e est´a dispon´ıvel em (MACHADO, 2016). O algoritmo foi testado em um computador com a seguinte confi- gura¸c˜ao: processador Intel(R) Core (TM) i7-5500U CPU @2.40GHz 2.40 GHz, mem´oria ram 8 GB e sistema operacional Windows 10 64 bits. A valida¸c˜ao da implementa¸c˜ao deste algoritmo foi dividida em duas etapas: (i) valida¸c˜ao da corre¸c˜ao do algoritmo; e (ii) valida¸c˜ao da performance em rela¸c˜ao ao tempo de execu¸c˜ao.

A valida¸c˜ao da corre¸c˜ao do algoritmo foi realizada em duas partes: (a) 20 testes espec´ıficos com exemplos encontrados na literatura (e modificados para suas vers˜oes em KMTS e analisados manualmente); (b) 10000 (dez mil) testes gerados automaticamente.

6.3 ALGORITMO DO JOGO DE REFINAMENTO 85

Cada teste consiste em dois modelos: a especifica¸c˜ao M e o modelo N. Em metade dos testes espec´ıficos, os modelos foram modificados para serem refinamentos e na outra metade os modelos foram modificados para n˜ao serem refinamentos. O mesmo racioc´ınio foi realizado nos testes gerados automaticamente: um algoritmo gera uma especifica¸c˜ao aleat´oria M, cria N a partir de uma c´opia de M e modifica N atrav´es da remo¸c˜ao ou convers˜ao de transi¸c˜oes may em must e da altera¸c˜ao das proposi¸c˜oes indefinidas em verdadeiro ou falso. Realizando apenas estas modifica¸c˜oes, N sempre ser´a refinamento de M. De forma inversa, alterando o comportamento obrigat´orio para gerar N, temos que N nunca ser´a um refinamento de M. As sa´ıdas, tanto dos testes espec´ıficos quanto a dos testes autom´aticos foram analisadas. Em caso de uma sa´ıda diferente do esperado, o teste e/ou o algoritmo era inspecionado e corrigido (se necess´ario).

Para a valida¸c˜ao da performance, foram gerados quatro grupos de teste considerando as seguintes vari´aveis: quantidade de estados; quantidade de transi¸c˜oes de sa´ıda por estado (grau); quantidade de proposi¸c˜oes; e propor¸c˜ao, que incrementa todas vari´aveis de forma proporcional. Os grupos criados foram: Grupo-estado, Grupo-transicao, Grupo- proposicao e Grupo-proporcao. Cada grupo ´e composto por blocos. Cada bloco de um grupo ´e criado com o mesmo valor para todas as vari´aveis, com exce¸c˜ao da vari´avel a ser analisada, que tem seu valor incrementado em cada bloco. Claramente, o grupo Grupo- proporcao n˜ao segue este padr˜ao e tem todas as suas vari´aveis incrementadas em cada bloco de forma proporcional.

Cada bloco ´e composto por 10 testes e cada teste ´e composto por dois KMTS M e N. Em 5 testes n˜ao h´a rela¸c˜ao de refinamento entre M e N e em 5 testes h´a rela¸c˜ao de refinamento entre M e N. O resultado de um bloco ´e o tempo m´edio (em milissegundos) para executar o algoritmo sobre cada um dos 10 testes do bloco.

Para criar estes casos, os KMTS foram gerados aleatoriamente de forma a garantir a rela¸c˜ao de refinamento (atrav´es da remo¸c˜ao ou da transforma¸c˜ao das transi¸c˜oes may em must e altera¸c˜ao das vari´aveis indefinidas em vari´aveis definidas). Para gerar os casos onde n˜ao h´a rela¸c˜ao de refinamento, as altera¸c˜oes ocorreram no sentido inverso (do comportamento definido para o comportamento indefinido). Estas altera¸c˜oes foram feitas baseadas em duas vari´aveis: quantidade de mudan¸cas nas proposi¸c˜oes e quantidade de mudan¸cas nas transi¸c˜oes. Uma mudan¸ca em uma proposi¸c˜ao representa altera¸c˜ao de seu valor de forma aleat´oria (respeitando o objetivo do teste) e uma mudan¸ca em uma transi¸c˜ao representa uma altera¸c˜ao aleat´oria que pode remover, alterar a modalidade ou alterar a a¸c˜ao na transi¸c˜ao (respeitando o objetivo do teste).

A Figura 6.4 representa a divis˜ao de um grupo qualquer em blocos e em seus testes. Casos positivos representam a existˆencia da rela¸c˜ao de refinamento no teste e casos ne- gativos representam o contr´ario. O incremento em cada bloco ´e justificado no resultado de cada teste.

As vari´aveis foram definidas para cada grupo s˜ao exibidas na Tabela 6.1. Quando uma c´elula desta tabela cont´em mais de um valor, significa que cada bloco do teste tem um valor contido na c´elula. As vari´aveis do Grupo-proporcao s˜ao incrementadas em conjunto seguindo a ordem definida na tabela. As vari´aveis que s˜ao fixas em um grupo foram escolhidas buscando-se um valor m´edio extra´ıdo dos exemplos encontrados nos diversos trabalhos pesquisados. Por fim, vari´aveis que indicam mudan¸cas em transi¸c˜oes

86 JOGO DO REFINAMENTO

Figura 6.4 Estrutura dos testes realizados por grupo

Vari´avel Grupo

estado transi¸c˜oes proposi¸c˜oes crescimento proporcional Nº de estados 25, 50, 75, 100, 125, 150, 175, 200 100 100 25, 50, 75, 100, 125, 150, 175, 200 Nº de transi¸c˜oes 10 5, 10, 15, 20, 25, 30, 35, 40 10 5, 10, 15, 20, 25, 30, 35, 40 Nº de proposi¸c˜oes 10 10 5, 10, 15, 20, 25, 30, 35, 40 5, 10, 15, 20, 25, 30, 35, 40 Nº modifica¸c˜oes em transi¸c˜oes 3 4*, 7, 10, 14, 17, 20, 24, 27 3 4*, 7, 10, 14, 17, 20, 24, 27 Nº modifica¸c˜oes em proposi¸c˜oes 3 3 4*, 7, 10, 14, 17, 20, 24, 27 4*, 7, 10, 14, 17, 20, 24, 27

Tabela 6.1 Vari´aveis de acordo com o grupo de teste

ou proposi¸c˜oes foram incrementadas sempre seguindo o valor de 2/3 (arredondado para cima) da sua vari´avel referente. Para os grupos Grupo-transicao e Grupo-proposicao os mesmos testes foram realizados com o n´umero de mudan¸cas fixas (representado pelo * na tabela). O objetivo destes testes duplicados ´e analisar se o n´umero de mudan¸cas implica de alguma forma na performance do algoritmo. A quantidade de estados e transi¸c˜oes nos testes foram definidos de forma semelhante aos testes realizados pelas ferramentas MoTrAs (KRETINSK, 2013) e a MTSA (D’IPPOLITO et al., 2008b)

O resultado da execu¸c˜ao dos testes dos Grupo-estado, Grupo-transicao, Grupo-proposicao e Grupo-proporcao s˜ao exibidos nas Tabela 7.2 e no gr´afico da Figura 6.5, na Tabela 6.3 e no gr´afico da Figura 6.6, na Tabela 6.4 e no gr´afico da Figura 6.7 e na Tabela 6.5 e no gr´afico da Figura 6.8, respectivamente.

Por fim, o Gr´afico 6.9 apresenta um cruzamento dos dados do Grupo-estado e Grupo- proporcao. Este cruzamento foi realizado porque ambos os grupos demonstraram que

6.3 ALGORITMO DO JOGO DE REFINAMENTO 87

Quantidade de estados

25 50 75 100 125 150 175 200

Tempo m´edio 10 11,7 11,3 24 43,3 59,5 77,8 121,3 Desvio Padr˜ao 8,59 4,57 1,95 8,42 10,65 15,23 12,64 32,27

Tabela 6.2 Tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de estados

Figura 6.5 Gr´afico do tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de estados

Quantidade de transi¸c˜oes por estado

5 10 15 20 25 30 35 40 Tempo m´edio (Nº fixo de mudan¸cas) 25,54 21,27 30,91 39 69 78,18 107 90,09 Desvio Padr˜ao (Nº fixo de mudan¸cas) 31,1 6,55 6,62 8,94 26,89 25,4 30,65 24,27 Tempo m´edio (Nº vari´avel de mudan¸cas) 31,4 20,6 27,2 37 64,8 62,7 81,5 89,5 Desvio Padr˜ao (Nº vari´avel de mudan¸cas) 28,95 2,15 3,64 3,65 27,29 10,9 8,72 9,96

Tabela 6.3 Tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de transi¸c˜oes por estado

88 JOGO DO REFINAMENTO

Figura 6.6 Gr´afico do tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de transi¸c˜oes por estado

Quantidade de proposi¸c˜oes por estado

5 10 15 20 25 30 35 40 Tempo m´edio (Nº fixo de mudan¸cas) 385,54 17,91 13,73 14,18 16,1 16,91 26,73 20,91 Desvio Padr˜ao (Nº fixo de mudan¸cas) 175,56 2,87 0,82 2,2 3,19 4,56 11,46 8,41 Tempo m´edio (Nº vari´avel de mudan¸cas) 399,8 18,9 12,2 13 12,1 11,9 12,2 14,1 Desvio Padr˜ao (Nº vari´avel de mudan¸cas) 108,611 3,44 0,44 3,7 0,71 0,6 0,71 1,79

Tabela 6.4 Tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de proposi¸c˜oes por estado

Figura 6.7 Gr´afico do tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com a quantidade de proposi¸c˜oes por estado

6.3 ALGORITMO DO JOGO DE REFINAMENTO 89

Quantidade de estados (crescimento proporcional)

25 50 75 100 125 150 175 200 Tempo m´edio (Nº fixo de mudan¸cas) 10,5 11,6 17,2 29,8 64,5 114,6 168,2 282 Desvio Padr˜ao (Nº fixo de mudan¸cas)) 9,72 2,72 7,88 1,81 12,57 10,39 5,39 24,23 Tempo m´edio (Nº vari´avel de mudan¸cas) 12,3 14,2 11,6 24,3 54 92,2 148,1 230,5 Desvio Padr˜ao (Nº vari´avel de mudan¸cas) 16,6 16,08 0,52 1,57 5,68 10,87 11,78 25,7

Tabela 6.5 Tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com o crescimento proporcional do modelo

Figura 6.8 Gr´afico do tempo m´edio de execu¸c˜ao (milissegundos) do algoritmo do jogo de refinamento de acordo com o crescimento proporcional do modelo

90 JOGO DO REFINAMENTO

Figura 6.9 Gr´afico do cruzamento dos dados do Grupo-estado e Grupo-proporcao

possuem um peso maior na influˆencia do tempo m´edio de execu¸c˜ao.

A an´alise das tabelas, dos grupos e os fatos observados durante os testes nos permitem concluir:

1. A quantidade de estados tem um peso maior no tempo m´edio de execu¸c˜ao do algoritmo. Este resultado j´a era esperado porque a quantidade de estados tem um peso maior na express˜ao que define a complexidade aproximada do algoritmo (os expoentes das vari´aveis que representam a quantidade de estados s˜ao maiores que os demais). Outro fato que impacta neste resultado ´e que ao se adicionar mais estados, consequentemente adiciona-se mais transi¸c˜oes e proposi¸c˜oes aos modelos; 2. A quantidade de transi¸c˜oes tem forte influˆencia no tempo m´edio de execu¸c˜ao do

algoritmo, sendo apenas menos impactante que a quantidade de estados;

3. A quantidade de proposi¸c˜oes tem uma fraca influˆencia no tempo m´edio de execu¸c˜ao do algoritmo;

4. Testes com uma quantidade de mudan¸ca fixa tˆem um tempo m´edio de execu¸c˜ao maior que os testes com uma quantidade de mudan¸ca vari´avel. Isto acontece porque ao fixar a quantidade de mudan¸cas, a especifica¸c˜ao e o modelo s˜ao mais similares (´e v´alido lembrar que o modelo ´e uma c´opia da especifica¸c˜ao com algumas mudan¸cas). Quando os modelos s˜ao mais similares, a probabilidade de um par de estados sa- tisfazerem as condi¸c˜oes para virarem um v´ertice do jogo ´e maior e por isto, testes com n´umero de mudan¸cas fixas tˆem jogos com mais estados que testes com n´umero de mudan¸cas vari´aveis;

5. Os testes dos blocos iniciais tiveram desvios-padr˜ao mais elevados que os testes dos outros blocos. Isto ocorre porque nos blocos iniciais, os valores de tempo de execu¸c˜ao de cada teste s˜ao muito baixos (pr´oximos a 0). Qualquer teste que tenha um valor mais elevado entre os 10 testes distorce o valor da m´edia e do desvio- padr˜ao. Isto significa que mesmo uniformizando as vari´aveis, existem casos, dentro de um mesmo bloco, que exigem um maior tempo de execu¸c˜ao. Acreditamos que

6.3 ALGORITMO DO JOGO DE REFINAMENTO 91

este fato seja decorrente da estrutura ramificada das entradas. Estes valores pode- riam ter sido removidos da amostra de testes para desfazer estas distor¸c˜oes, todavia, decidimos mantˆe-los por uma quest˜ao de transparˆencia.

Por fim, gostar´ıamos de ter realizado um comparativo com as principais ferramentas que implementaram algoritmos de verifica¸c˜ao de refinamento modal forte para modelos parciais, a MoTrAs e a MTSA. Todavia, n˜ao encontramos as entradas testadas necess´arias nos benchmarking destas ferramentas. De acordo com os resultados exibidos em (BENES et al., 2011), e a descri¸c˜ao dos testes realizados nas duas ferramentas, o algoritmo do jogo de refinamento possui um desempenho similar ou superior aos algoritmos utilizados nestas ferramentas. Este resultado ´e interessante porque a ferramenta MoTrAs utiliza um verificador baseado na redu¸c˜ao dos modelos para uma f´ormula QBF, e hoje, at´e onde sabemos, ´e a maneira mais eficaz de verificar se existe uma rela¸c˜ao de refinamento entre os modelos. Entretanto, precisamos de mais dados referentes aos testes executados para realizar um comparativo e poder afirmar que o algoritmo apresentado aqui apresenta uma performance igual ou superior `a performance das ferramentas supracitadas no que diz respeito `a an´alise de refinamento modal forte.

De qualquer maneira, mesmo que o desempenho do algoritmo do jogo de refinamento seja pior que o desempenho dos outros algoritmos, sua utiliza¸c˜ao ´e justificada porque o jogo de refinamento nos fornece uma s´erie de informa¸c˜oes a respeito da rela¸c˜ao de refina- mento existente (ou de sua n˜ao existˆencia). Como mostrado no pr´oximo cap´ıtulo, estas informa¸c˜oes ser˜ao utilizadas para ajudar a resolver o problema do reparo de refinamento.

Cap´ıtulo

7

REPARO DE REFINAMENTO

No desenvolvimento incremental e iterativo, novos requisitos podem produzir modelos que devem preservar as propriedades definidas em rela¸c˜ao aos modelos j´a existentes. O conceito de refinamento pode ser utilizado para garantir a preserva¸c˜ao de propriedades j´a definidas entre os modelos parciais, como feito, por exemplo em (UCHITEL; KRAMER; MAGEE, 2003b). A maior parte dos estudos define e caracteriza o refinamento entre estruturas modais e utiliza t´ecnicas, j´a apresentadas anteriormente, para analisar quando existe uma rela¸c˜ao de refinamento entre dois modelos. Todavia, estes trabalhos n˜ao analisam o que deve ser feito nos modelos quando n˜ao h´a uma rela¸c˜ao de refinamento. Nestes casos, os novos modelos devem ser alterados para garantir a preserva¸c˜ao das propriedades j´a definidas. Chamamos esta atividade de reparo de refinamento.

Neste cap´ıtulo analisamos o problema de reparo de refinamento entre modelos KMTS, considerando o refinamento modal forte. A Se¸c˜ao 7.1 realizamos uma an´alise do problema de refinamento, define as condi¸c˜oes m´ınimas para que um modelo N sejam reparado para ser refinamento de uma especifica¸c˜ao M. Esta se¸c˜ao tamb´em apresenta um algoritmo que resolve o problema do reparo de refinamento. A Se¸c˜ao 7.2 apresenta como encontrar as causas da n˜ao existˆencia da rela¸c˜ao de refinamento utilizando o jogo de refinamento e como ´e poss´ıvel corrigir estas causas. Em seguida, apresentamos um algoritmo que resolve o problema do reparo de refinamento utilizando o jogo de refinamento e realiza uma an´alise da corre¸c˜ao, termina¸c˜ao, complexidade e valida¸c˜ao deste algoritmo.

7.1 O PROBLEMA DO REPARO DE REFINAMENTO

Quando um modelo N ´e utilizado para representar uma especifica¸c˜ao M em um n´ıvel maior de detalhes, o modelo N deve ser um refinamento da especifica¸c˜ao M, isto ´e, o modelo N deve satisfazer todas as propriedades satisfeitas por M. Quando N n˜ao ´e um refinamento de M, isto significa que N n˜ao satisfaz algumas das (ou todas as) propriedades que M satisfaz e, ent˜ao, N deve ser alterado para que ele satisfa¸ca todas as propriedades que o modelo M satisfaz, isto ´e, N deve ser alterado gerando um modelo N’ tal que N’

94 REPARO DE REFINAMENTO

seja um refinamento de M. Encontrar as altera¸c˜oes que devem ser realizadas no modelo N ´e o objetivo do problema do reparo de refinamento.

Para estudar este problema de forma sistem´atica, ´e preciso definir o que ´e uma al- tera¸c˜ao em um KMTS. As altera¸c˜oes no modelo se d˜ao de forma estrutural, de forma similar ao realizado em (GUERRA; ANDRADE; WASSERMANN, 2013a).