II. MODERN FİZİK’İN GENEL YAPISI
II.II. Genel Relativite Kuramı
Esta gramática faz parte do trabalho desenvolvido por [Hoffman et al., 2009], que utiliza gramáticas livres de contexto para geração automática de testes que avaliam um parser de feed RSS. A gramática utilizada no estudo de caso pode ser visualizada na Listagem 6.3. A gramática possui seis diferentes tags HTML e três atributos HTML diferentes são usados. A gramática possui dez (10) símbolos não-terminais, 20 (vinte) símbolos terminais e dezenove (19) regras de produção.
As tabelas 20 e 21 apresentam os resultados dos testes com o critério de cobertura de terminais e com o critério de regras de produção, respectivamente. Em relação ao número de sentenças utilizando apenas as restrições de ciclos e passos de derivação a quantidade de sentenças foi gerada através de um cálculo teórico, pois para esta gramática LGen não terminou o processo de geração. Este cálculo foi realizado usando o algoritmo apresentado na seção 5.5. O número de sentenças encontrado foi de 26458925342976.
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num.
Sentenças
1 5 0:00.07 100% 100% 100% 9
Tabela 20: Resultados da execução da gramática com o critério de cobertura de terminais.
probes ::= title_probe rights_probe link_probe link_probe; title_probe ::= type html html; rights_probe ::= type html html; link_probe ::= type html html; type ::= ‘>’ | ‘type=’, html, ‘>’; lt ::= ‘<’; gt ::= ‘>’;
html ::= lt ‘script’ attr gt lt ‘/script’ gt; html ::= lt ‘applet’ attr gt lt ‘/applet’ gt; html ::= lt ‘embed’ attr gt lt ‘/embed’ gt; html ::= lt ‘object’ attr gt lt ‘/object’ gt; html ::= lt ‘meta’ attr gt lt ‘/meta’ gt; html ::= lt ‘a’ attr gt lt ‘/a’ gt;
attr ::= ’’;
attr ::= ‘style’ value_empty; attr ::= ‘abbr’ value_empty; value_empty ::= ‘=’ ‘""’;
Listagem 6.3: Gramática que representa um feed RSS
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num.
Sentenças
1 5 0:00.09 100% 100% 100% 9
Tabela 21: Resultados da execução da gramática com o critério de cobertura de regras de produção.
cobertura de terminais e produções em 100%. Para os dois casos foi necessária a execução permitindo 5 passos de derivação para a sua satisfação. O número de passos necessários para a maior derivação nesta gramática é 5. Dessa forma, é justificada a estabilização do processo de geração com a configuração do parâmetro maxDerivLen em 5.
O conjunto de sentenças gerado utilizando os critérios de cobertura foram reduzidos, quando comparados com a geração utilizando apenas as restrições de ciclos e passos de derivação. Com este cenário pode-se observar que houve uma redução de tempo de execução e número de sentenças geradas em relação às execuções utilizando apenas as restrições de ciclos e passos de derivação.
6.3.2
Processamento de Imagens
O trabalho de [Hamdi, 2012] apresenta uma gramática usada para definir uma im- agem. Uma imagem é dividida em blocos de tamanho fixo. Um alfabeto V da imagem é criado. Após a divisão em blocos e codificação do bloco, uma imagem corresponde a uma matriz. A gramática é utilizada para descrever o formato que se está procurando
na matriz. A gramática 8.6 possui 06 (seis) símbolos não-terminais, 11 (onze) símbolos terminais e 18 (dezoito) regras de produção.
S -> zA | zS A -> xA |xB B -> zB | zC C -> λ| S z -> 0 x -> 1 - 9
Listagem 6.4: Gramática para Processamento de Imagem [Hamdi, 2012]
A tabela 22, 23 e 24 apresentam os resultados dos testes sem a utilização dos critérios de cobertura, com o critério de cobertura de terminais e com o critério de regras de produção, respectivamente. Em todos os casos, os critérios de cobertura foram satisfeitos em 100%. No caso das sentenças geradas para a satisfação do critério de terminais, não foi necessário utilizar todas as regras de produção. Para exemplificar como as sentenças são geradas, apresentamos a tabela 25 com o conjunto de sentenças, os terminais cobertos e as regras de produção utilizadas com o critério de cobertura de regras de produção, com o parâmetro MaxDerivlen igual a 8
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num.
Sentenças
1 8 0:00.20 100% 100% 100% 441
Tabela 22: Resultados da execução da gramática apenas com as restrições de ciclos e número de passos de derivação.
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num.
Sentenças 1 4 0:00.02 100% 100% 88.88 % 9 2 5 0:00.01 100% 100% 88.88 % 9 3 6 0:00.02 100% 100% 88.88 % 9 4 7 0:00.02 100% 100% 88.88 % 9 5 8 0:00.02 100% 100% 88.88 % 9
Tabela 23: Resultados da execução da gramática com o critério de cobertura de terminais.
Como pode ser observado, houve uma redução no tempo de geração das sentenças quando os critérios de cobertura foram utilizados. Em relação ao número de sentenças geradas também houve diferença na quantidade com o uso dos critérios de cobertura. Para o critério de terminais, o número de sentenças geradas foi reduzido em 97,96% e o tempo de execução foi reduzido em 88,24%, quando comparado com a geração das 441 sentenças geradas sem a utilização dos critérios de cobertura, utilizando 8 passos de
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num. Sentenças 1 4 0:00.03 100% 100% 88.88 % 9 2 5 0:00.02 100% 100% 94.44% 10 3 6 0:00.02 100% 100% 94.44% 10 4 7 0:00.03 100% 100% 94.44% 10 5 8 0:00.03 100% 100% 100% 11
Tabela 24: Resultados da execução da gramática com o critério de cobertura de regras de produção.
Sentenças geradas Terminais cobertos Regras de produção cobertas
0 1 0 0 1 1,3,4,5,6,7,9,10 0 2 0 0 2 1,3,4,5,6,7,9,11 0 3 0 0 3 1,3,4,5,6,7,9,12 0 4 0 0 4 1,3,4,5,6,7,9,13 0 5 0 0 5 1,3,4,5,6,7,9,14 0 6 0 0 6 1,3,4,5,6,7,9,15 0 7 0 0 7 1,3,4,5,6,7,9,16 0 8 0 0 8 1,3,4,5,6,7,9,17 0 9 0 0 9 1,3,4,5,6,7,9,18
Tabela 25: Sentenças geradas com o critério de terminais com MaxDerivlen igual a 4
derivação. Para o critério de regras de produção foi necessária a execução com 8 passos de derivação para a sua satisfação e o número de sentenças geradas foi reduzido em 97,51% e o tempo de execução foi reduzido em 88,24%, quando comparado com a geração das 441 sentenças geradas sem a utilização dos critérios de cobertura, também utilizando 8 passos de derivação.
6.4
Conclusão
Neste capítulo foram apresentados estudos de caso que consistiram da aplicação de LGen à geração de casos de teste. Foram utilizadas dez gramáticas, sendo 6(seis) de linha de produto, 1(uma) da área de teste de firewall, 1(uma) utilizada no contexto de analisadores de Feed RSS e 1(uma) de processamento de imagens. Também apresentamos os resultados obtidos a partir destes estudos de caso e suas avaliações.
Com estes estudos de caso foi possível observar que LGen gera um conjunto de casos de teste para uma determinada gramática. Também foi possível observar que LGen se aplica a outros escopos de aplicação, além daquele para o qual foi projetado originalmente, ou seja, testes de compilares. Os estudos realizados apontaram a possibilidade de utilização de LGen com gramáticas de áreas diversas.
Através dos estudos de caso também observamos que com o uso dos critérios de cobertura o conjunto de sentenças geradas foi reduzido e que este conjunto tem um nível de qualidade satisfatório já que foi possível satisfazer os critérios de cobertura. O tempo de geração das sentenças utilizando estes critérios também foi reduzido em relação ao tempo gasto utilizando apenas as restrições de ciclos e número de passos de derivação.
Com os estudos de caso também foi possível avaliar a facilidade do uso de LGen. Alguns itens que foram observados são:
• A definição do valor para o parâmetro MaxDerivlen: No momento da geração das sentenças, a profundidade mínima de derivação necessária para satisfação dos critérios de cobertura não é calculada por LGen. É necessário que o usuário forneça essa informação para realizar os testes.
• Cobertura de requisitos por cada sentença: Na geração das sentenças utilizando os critérios de cobertura, a informação dos requisitos cobertos por cada sentença gerada não é apresentada. Se essa informação estivesse disponível, seria bastante útil, pois ajudaria no cálculo de percentual de terminais e regras de produção coberto que realizamos para cada conjunto de sentenças gerado.
• Gramáticas ambíguas: Quando realizamos testes com uma gramática ambígua, caso essa ambiguidade não seja identificada diretamente na gramática, só é pos- sível identificá-la se analisarmos as sentenças geradas, observando duplicação de uma mesma sentença no conjunto gerado. Mesmo assim, essa análise não garante que a ambiguidade seja identificada, pois pode acontecer que o valor do parâmetro
MaxDerivlen usado gere um conjunto de sentenças e a duplicidade não esteja pre-
sente nesse conjunto.
Em relação ao segundo item apresentado, nós comentamos sobre a utilidade da infor- mação de cobertura de requisitos por cada sentença que iria nos auxiliar no cálculo do percentual de terminais e regras de produção coberto. É importante dizer que a ferra- menta apresenta o percentual coberto para cada critério utilizado no momento da geração e que isso está correto. Ocorre que para o nosso trabalho nós utilizamos os percentuais de cobertura em todos os casos, inclusive sem os critérios de cobertura. Essa informação é utilizada para fins de comparação. No entanto, essa informação só é gerada para o critério utilizado naquele momento, quando não utilizamos os critérios precisamos fazer esse cálculo manualmente. Quando geramos as sentenças com o critério de terminais, o
percentual de regras de produção cobertas para aquele conjunto de sentenças não é infor- mado. O mesmo acontece quando usados o critério de regras de produção. Nesse sentido, quando a gramática é grande, esse cálculo é demorado.
Por fim, ao longo dos testes observamos que LGen ainda não está estável, pois através dos nossos estudos foi necessária algumas correções em LGen, que ocorreram em resposta à execução dos testes realizados.