II. MODERN FİZİK’İN GENEL YAPISI
II.I. Özel Relativite Kuramı
A primeira categoria de estudos de caso foi realizada no contexto de descrições de configurações de software. Para isso, utilizamos 08 (oito) gramáticas, sendo 06 (seis) na área de Linha de Produto de Software, 01 (uma) utilizada em teste de firewall e 01 (uma) no contexto de software de telefonia VoiP. No caso das gramáticas de linha de produto, utilizamos as gramáticas apresentadas no trabalho desenvolvido por [Bagheri et al., 2012]. Apresentaremos o estudo detalhado para a gramática GPL e um resumo dos resultados para demais gramáticas. As gramáticas de linhas de produto foram geradas através de uma ferramenta desenvolvida pelos autores do trabalho. No caso da gramática de testes de firewall [Hoffman et al., 2010], ela foi disponibilizada através de arquivo texto, pelos autores do trabalho. O estudo de caso utilizando a gramática no contexto de software de telefonia VoiP[Hoffman et al., 2010] já foi apresentado na seção 3.2 do capítulo 3.
6.2.1
Linha de Produto de Software
Como apresentado na seção 4.1.1, o GPL é um modelo típico da comunidade de linha de produto de software e é utilizado para aplicações com grafos, na área da Ciência da Computação. Este modelo também foi utilizado em um estudo de caso desenvolvido no artigo Application of a Syntax-based Testing Method and Tool to Software Product Lines [Ramalho et al., 2013], apresentado no Workshop sobre Teste de Software Sistemático e Automatizado (SAST 2013). Neste trabalho, LGen foi aplicado ao domínio de linha de produto de software, mas especificamente com a proposta de geração de configurações de teste para uma familia de produtos em uma linha de produto, reduzindo o número de configurações a serem testadas, bem como cobrindo em 100% os critérios de cobertura tradicionais (terminais e produção).
características: 16 (dezesseis) símbolos não-terminais, 13 (treze) símbolos terminais, 28 (vinte e oito) regras de produção, pequena, ambígua e recursiva.
1 GPL = GraphType , Algorithms |
2 GraphType , Algorithms , Search; 3 GraphType = _r_1_2 |
4 _r_1_5;
5 LHS-directed = "t_directed" , "t_Strongly_Connected"; 6 _r_1_2 = LHS-directed | 7 "t_undirected"; 8 _r_1_5 = "t_weighted" | 9 "t_unweighted"; 10 search = _r_8_9; 11 LHS-DFS = "t_DFS" , "t_Cycle_Detection"; 12 _r_8_9 = LHS-DFS | 13 "t_BFS"; 14 Algorithms = _r_12_13; 15 _r_12_13-sec = | 16 _r_12_13;
17 LHS-Cycle Detection = "t_Cycle_Detection" , "t_DFS";
18 LHS-Strongly_Connected = "t_Strongly_Connected" , "t_directed"; 19 _r_12_13 = "t_Shortest Path" , _r_12_13-sec |
20 Coloring , _r_12_13-sec | 21 LHS-CycleDetection , _r_12_13-sec | 22 "t_MST" , _r_12_13-sec | 23 LHS-Strongly_Connected , _r_12_13-sec; 24 Coloring = _r_12_13_16_20; 25 _r_12_13_16_20-sec = | 26 _r_12_13_16_20; 27 _r_12_13_16_20 = "t_Approximation" , _r_12_13_16_20-sec | 28 "t_Brute_Force" , _r_12_13_16_20-sec;
Listagem 6.1: Gramática extraída do modelo de característica GPL [Bagheri et al., 2012]
Execução MaxDerivlen Tempo Exec. C.N T C.T erminais C.RP Num.
Sentenças 1 4 0:00.02 81.25% 84.61% 78.57% 48 2 5 0:00.02 81.25% 84.61% 78.57% 48 3 6 0:00.13 100% 100% 96.42% 360 4 7 0:00.14 100% 100% 96.42% 360 5 8 0:00.36 100% 100% 100% 840 6 9 0:00.37 100% 100% 100% 840 7 10 0:00.68 100% 100% 100% 1320
Tabela 13: Resultados da execução da gramática apenas com as restrições de ciclos e número de passos de derivação.
A tabela 13 apresenta os resultados dos testes sem a utilização dos critérios de cober- tura. A tabela 14 apresenta os resultados utilizando o critério de cobertura de terminais e a tabela 15 o resultado para o critério de regras de produção. Em todos os casos, os critérios de cobertura foram satisfeitos em 100%.
Execução MaxDerivlen Tempo Exec. C.N T C.T erminais C.RP Num. Sentenças 1 4 0:00.01 68.75% 84.61% 60.71% 7 2 5 0:00.01 68.75% 84.61% 60.71% 7 3 6 0:00.01 87.5% 100% 82.14% 9 4 7 0:00.01 87.5% 100% 82.14% 9 5 8 0:00.01 87.5% 100% 82.14% 9 6 9 0:00.01 87.5% 100% 82.14% 9 7 10 0:00.02 87.5% 100% 85.71% 9
Tabela 14: Resultados da execução da gramática com o critério de cobertura de terminais.
Execução MaxDerivlen Tempo Exec. C.N T C.T erminais C.RP Num.
Sentenças 1 4 0:00.04 81.25% 84.61% 75% 9 2 5 0:00.03 81.25% 84.61% 75% 9 3 6 0:00.06 100% 100% 96.42% 12 4 7 0:00.06 100% 100% 96.42% 12 5 8 0:00.03 100% 100% 100% 13 6 9 0:00.03 100% 100% 100% 13 7 10 0:00.03 100% 100% 100% 13
Tabela 15: Resultados da execução da gramática com o critério de cobertura de regras de produção.
Não apresentamos todas as sentenças geradas em cada teste realizado por questões de tamanho, mas para melhor visualização dos resultados, a tabela 16 apresenta detalhes das sentenças geradas usando o critério de cobertura de terminais, utilizando o parâmetro
MaxDerivLen igual a 6. Apresentamos os terminais cobertos e as regras de produção
utilizadas em cada sentença gerada.
Como pode ser observado, com o uso dos critérios de cobertura de terminal ou pro- dução houve uma redução no número de sentenças geradas e no tempo de execução de LGen. Para o critério de cobertura de terminal foi necessária a execução com 6 passos de derivação para a sua satisfação. O número de sentenças geradas foi reduzido em 99% e o tempo de execução foi reduzido em 83%, quando comparado com a geração das 360 sentenças geradas sem a utilização dos critérios de cobertura, também utilizando 6 passos de 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 99% e o tempo de execução foi reduzido em 87%, quando comparado com a geração das 840 sentenças geradas sem a utilização dos critérios de cobertura, também utilizando 8 passos de derivação.
Sentenças geradas Terminais cobertos Regras de produção cobertas t_directed t_Strongly_Connected t_Shortest_Path t_directed t_Strongly_Connected t_Shortest_Path 1,3,6,5,14,19,15 t_directed t_Strongly_Connected t_Shortest_Path t_Cycle_Detection t_DFS t_directed t_Strongly_Connected t_Shortest_Path t_Cycle_Detection t_DFS 2,3,6,5,14,15,16,17,19,21 t_directed t_Strongly_Connected t_Shortest_Path t_MST t_directed t_Strongly_Connected t_Shortest_Path t_MST 1,3,5,6,14,15,16,19,22 t_directed t_Strongly_Connected t_Approximation t_directed t_Strongly_Connected t_Approximation 1,3,5,6,14,20,24,25,27 t_directed t_Strongly_Connected t_Brute_Force t_directed t_Strongly_Connected t_Brute_Force 1,3,5,6,14,20,24,25,28 t_undirected t_Shortest_Path t_undirected t_Shortest_Path 1,3,7,14,19,15 t_weighted t_Shortest_Path t_weighted t_Shortest_Path 1,4,8,14,19,15 t_unweighted t_Shortest_Path t_unweighted t_Shortest_Path 1,4,9,14,19,15 t_directed t_Strongly_Connected t_Shortest _Path t_BFS t_directed t_Strongly_Connected t_Shortest_Path t_BFS 2,3,6,5,14,19,15,10,13
Tabela 16: Geração de sentenças com o critério de cobertura de terminais com
MaxDerivLen igual a 6
Em relação aos testes utilizando linha de produto de software, ainda realizamos testes com mais 05 (cinco) modelos de características disponibilizados no mesmo trabalho [Bagheri et al., 2012]. Os outros modelos utilizados foram:
• HIS : Apresenta um modelo de características de linha de produto para a integração de sistemas de uma casa [Kang et al., 2002].Ela tem as seguintes características: 45 (quarenta e cinco) símbolos não-terminais, 33 (trinta e três) símbolos terminais e 61 (sessenta e uma) regras de produção.
• Model Transformation: Apresenta um modelo de características de linha de produto para modelos de transformações para taxonomia [Czarnecki and Helsen, 2003]. Ela tem as seguintes características: 72 (setenta e dois) símbolos não-terminais, 50 símbolos terminais, 130 (cento e trinta) regras de produção e recursiva.
• ATM : Apresenta um modelo de características para uma linha de produto de soft- ware para ATM (caixa eletrônico). As ATMs foram criadas pelos bancos para
facilitar as transações bancárias, onde o cliente é o responsável por toda a op- eração. É possível fazer desde operações simples, como saque, retirada de extrato, depósitos, pagamentos, alteração de senhas, transferências, até operações mais com- plexas [Riebisch et al., 2004]. Ela tem as seguintes características: 10 (dez) símbolos não-terminais, 24 (vinte e quatro) símbolos terminais, 28 (vinte e oito) regras de produção e recursiva.
• Mobile Phone: Apresenta um modelo de característica baseado na indústria de telefonia móvel. O modelo ilustra como características são usadas para especificar e desenvolver software para telefones celulares [Benavides et al., 2010b]. Ela tem as seguintes características: 12 (doze) símbolos não-terminais, 14 (quatorze) símbolos terminais, 21 (vinte e uma) regras de produção e recursiva.
• Digital Video System: Apresenta um modelo de linha de produto de software para o desenvolvimento de sistemas de vídeo digital, utilizando componentes de software e hardware. Os sistemas destinam-se a capturar e processar programas de tv digitais [Streitferdt et al., 2003]. Ela tem as seguintes características: 16 (dezesseis) símbo- los não-terminais, 15 (quinze) símbolos terminais e vinte e oito (vinte e oito) regras de produção.
A tabela 17 apresenta um resumo dos resultados para estes 05 (cinco) modelos de car- acterísticas. As colunas da tabela mostram o (1) nome do gramática, (2) critério utilizado, (3) parâmetro MaxDerivLen, (4) quantidade de sentenças geradas1e (5) tempo de geração
das sentenças. No caso dos critérios, quando usamos Derivações estamos nos referindo aos testes usando apenas as restrições de ciclos e número de passos de derivação. Tomando como exemplo a gramática HIS, para o critério de terminais, o parâmetro MaxDerivLen é 8, gerando 13 sentenças, como mostrado na tabela 17. Esta é a configuração mínima para LGen gerar um conjunto de sentenças que satisfaça ao critério de terminais e val- ores maiores para essa configuração não alterariam a satisfação do critério. É importante dizer que essa forma de definir a configuração mínima também foi realizada para as demais gramáticas. No caso das gramáticas recursivas (Model Transformation, ATM e Mobile
Phone) definimos a configuração de MaxDerivLen com um valor igual ou maior que o
valor definido para um dos critérios, já que para essas gramáticas a linguagem é infinita. Como pode ser observado, com o uso dos critérios de cobertura de terminais e regras de produção houve uma redução do número de sentenças geradas e/ou do tempo de execução.
1A quantidade de sentenças apresentada para a gramática Model Transformation foi gerada através
Gramática Criterio MaxDerivLen Sentenças Tempo
HIS Derivações 8 26880 0:30.72
Produções 8 17 0:00.07
Terminais 8 13 0:00.10
Model Transformation Derivações 12 1.639087061102e+26 -
Producões 12 59 0:00.92
Terminais 10 40 0:00.18
ATM Derivações 7 280 0:00:07
Producões 7 19 0:00.02
Terminais 5 18 0:00.02
Mobile Phone Derivações 7 146 0:00:06
Producões 7 10 0:00.02
Terminais 5 8 0:00.04
Digital Video System Derivações 4 184 0:00:07
Producões 4 13 0:00.02
Terminais 4 9 0:00.02
Tabela 17: Resultados da geração com outros cinco modelos de linha de produto [Bagheri et al., 2012]
Em todos os casos, os critérios foram satisfeitos em 100%. Os detalhes destes testes não foram apresentados neste trabalho por conta do tamanho. No entanto, as gramáticas EBNF, as especificações Lua e as informações de percentual de cobertura atingido nestes testes estão disponíveis em http://lgen.wikidot.com/examples. As gramáticas EBNF também estão apresentadas no Apêndice 8.
6.2.2
Teste de Firewall
A gramática utilizada neste estudo de caso foi apresentada no trabalho de [Hoffman et al., 2010]. Neste trabalho as gramáticas são utilizadas no contexto de teste de firewall. A gramática pode ser visualizada na Listagem 6.2. Ela gera todos os pacotes necessários para estabelecer e derrubar uma conexão TCP, com flags ruins injectados em cada uma das sete posições.
O elemento StaticBadFlags() apresentado na gramática corresponde a um gerador de terminal que foi criado para produzir todas as possíveis 64 combinações de flags.Este elemento corresponde a uma função que gera estas variações. Para um melhor entendi- mento sobre estas variações, um exemplo é a sequência (syn ack fin psh rst urg). Todas estas variações estão escondidas nesta função e não são apresentadas na gramática 6.2.
Para a realização do estudo de caso com esta gramática, este elemento foi modelado como um símbolo não-terminal que reescrevesse todas estas variações. Dessa forma, os
testes obteve resultados mais reais e temos uma melhor avaliação. Caso o elemento StaticBadFlags() fosse definido como símbolo terminal, teríamos apenas uma sentença gerada e os resultados não seriam suficientes para uma boa avaliação. Por questões de tamanho a gramática completa será apresentada no apêndice 8.1.
S ::= SEPARATOR BadFlags0 SYN BadFlags1 SYNACK BadFlags2 ACK1 BadFlags3 FINACK1 BadFlags4 FINACK2 BadFlags5 ACK2 BadFlags6;
SEPARATOR ::= "! ! ! ! ! ! ! ! !";
SYN ::= "\n" "SYN" "SYN" "ack" "fin" "psh" "rst" "urg" "OUT" "ACCEPT"; SYNACK ::= "\n" "SYNACK" "SYN" "ACK" "fin" "psh" "rst" "urg" "IN" "
ACCEPT";
ACK1 ::= "\n" "ACK1" "syn" "ACK" "fin" "psh" "rst" "urg" "OUT" "ACCEPT ";
FINACK1 ::= "\n" "FINACK1" "syn" "ACK" "FIN" "psh" "rst" "urg" "IN" " ACCEPT";
FINACK2 ::= "\n" "FINACK2" "syn" "ACK" "FIN" "psh" "rst" "urg" "OUT" " ACCEPT";
ACK2 ::= "\n" "ACK2" "syn" "ACK" "fin" "psh" "rst" "urg" "IN" "ACCEPT"; BadFlags0 ::= BadFlag0;
BadFlag0 ::= "\n" "badFlag0" StaticBadFlags() "IN" "DROP"; BadFlags1 ::= "\n" "badFlag1" Flag1 "IN" "DROP";
Flag1 ::= StaticBadFlags();
BadFlags2 ::= "\n" "badFlag2" Flag2 "IN" "DROP"; Flag2 ::= StaticBadFlags();
BadFlags3 ::= "\n" "badFlag3" Flag3 "IN" "DROP"; Flag3 ::= StaticBadFlags();
BadFlags4 ::= "\n" "badFlag4" Flag4 "IN" "DROP"; Flag4 ::= StaticBadFlags();
BadFlags5 ::= "\n" "badFlag5" Flag5 "IN" "DROP"; Flag5 ::= StaticBadFlags();
BadFlags6 ::= "\n" "badFlag6" Flag6 "IN" "DROP"; Flag6 ::= StaticBadFlags();
Listagem 6.2: Parte da gramática que estabelece e finaliza uma conexão TCP
As tabelas 18 e 19 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. O número de sentenças encontrado foi de 4398046511104. Este cálculo foi realizado usando o algoritmo apresentado na seção 5.5.
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num. Sentenças
1 4 0:00.07 100% 100% 33.72% 4
Tabela 18: Resultados da execução da gramática com o critério de cobertura de terminais.
Execução MaxDerivlen Tempo Exec. C.NT C.T erminais C.RP Num.
Sentenças
1 4 0:00.42 100% 100% 100% 64
Tabela 19: Resultados da execução da gramática com o critério de cobertura de regras de produção.