• Nenhum resultado encontrado

Granularidade de Fluxo de Dados Persistentes

Interação entre Regras Baseada em Fluxo de Dados

4.1 Fluxo de Dados Persistentes

4.1.1 Granularidade de Fluxo de Dados Persistentes

Relações de fluxo de dados ligadas a entidades de banco de dados são estabelecidas a partir de níveis de granularidade das variáveis de banco de dados: a definição e o uso posterior são observados para a mesma granularidade (Daou et al., 2001). A granularidade é uma propriedade que determina o nível de precisão da análise de fluxo de dados e estabelece as relações de fluxo de dados das variáveis persistentes. Segundo Kapfhammer e Soffa (2003), a granularidade pode ser definida segundo vários níveis: banco de dados, relação (tabela), atributo (coluna), tupla (linha) e valor de atributo.

No nível de granularidade relação mapeiam-se as variáveis persistentes em relações do banco de dados, não importando quais tuplas ou atributos foram afetados por operações de manipulação. Esse enfoque simplifica a análise e reduz o número de variáveis, pois considera cada relação como uma única variável. Contudo, estabelece uma abordagem conservadora, pois toda definição de variável seguida de uso dessa variável é uma associação de fluxo de dados, independentemente se estão manipulando dados distintos dentro da relação. Cardoso (2004) construiu uma ferramenta para a aplicação de critérios baseados em fluxo de dados em regras ativas escritas em SQL e utilizou a granularidade relação em sua implementação.

No nível de granularidade atributo exploram-se as ocorrências de definição e de uso para os atributos de relações, sem se preocupar em saber quais tuplas foram manipuladas. Esta granularidade representa uma maior precisão do que o nível relação, pois distingue os atributos de cada relação; associações de fluxo de dados podem ser caracterizadas quando a interseção dos dois conjuntos de colunas manipuladas, respectivamente, atribuídos a uma ocorrência de definição seguida de uma ocorrência de uso, não for vazia. Uma vantagem para essa abordagem é que o número de colunas de uma relação é fixo e pode-se determinar suas ocorrências de definição e de uso estaticamente. Aranha (2005) usa essa abordagem para definir requisitos de teste de esquema de bases de dados relacionais, onde os casos de teste buscam exercitar atributos e restrições associadas a atributos. Daou et al. (2001) propõem uma estratégia para o teste de regressão de aplicações de banco de dados e usam a granularidade em nível coluna para determinar os módulos de banco de dados afetados por modificações na definição de componentes de banco de dados.

O nível de granularidade tupla é adotado quando se busca refinar a análise de fluxo de dados para saber quais as tuplas afetadas em cada operação de manipulação de dados. Em geral, não se pode determinar estaticamente que tuplas serão alvo de uma dada operação, devido à complexidade que pode ser atingida nos predicados de seleção de linhas (Vaduva, 1999) e à dependência ao estado de banco de dados corrente (Leitão et al., 2002); ou seja, esta é uma questão indecidível. No contexto de bancos de dados relacionais, em geral uma tupla representa uma entidade do mundo real, uma associação entre entidades ou algum aspecto particular de uma entidade. Sendo assim, utilizar granularidade em nível linha significa atingir as entidades do mundo real manipuladas por operações de banco de dados.

Os níveis de granularidade banco de dados e valor de atributo representam lados antagônicos de precisão de análise de fluxo de dados. No primeiro, todo o banco de dados é convencionado como uma única variável e as ocorrências de definição e de uso podem ser conhecidas por análise estática. O último é o nível com maior precisão de análise de fluxo de dados e representa uma composição dos níveis tupla e atributo, herdando a indecidibilidade na identificação de tuplas inerente à granularidade em nível tupla.

Leitão et al. (2002) propuseram preliminarmente um modelo de instrumentação de tuplas, capaz de abstrair a identificação das tuplas afetadas pela execução de operações de manipulação de dados. Tal modelo representa a primeira iniciativa que trata conjuntos de dados afetados por operações da SQL, utilizando as próprias estruturas de dados do modelo relacional para armazenar os dados atribuídos à instrumentação de tuplas. A evolução deste modelo é descrita no Capítulo 6. Em (Spoto, 2000), para cada comando que caracteriza uma definição (persistente) de tabela, existe um comando específico para indicar a tupla utilizada; entretanto, a implementação desse esforço na direção da granularidade em nível tupla utiliza variáveis de programa para a identificação da linha afetada por um comando.

Kapfhammer e Soffa (2003) definem critérios de teste baseados em análise de fluxo de dados para aplicações de banco de dados explorando os vários níveis de granularidade; são introduzidas extensões ao critério todos-usos para dados persistentes no contexto do modelo relacional. Nesta abordagem, o elenco de associações de fluxo de dados é dependente do estado inicial da base de dados: o tamanho da base de dados afeta a determinação de elementos requeridos, pois associações são abstraídas para toda entidade possível da base de dados. Para as granularidades tupla e valor de atributo, é estabelecida uma abordagem conservadora para

Interação entre Regras Baseada em Fluxo de Dados 71

enumerar os objetos de banco de dados que podem ser definidos e usados. Os resultados do estudo empírico realizado com dois programas escritos em linguagem Java utilizando o sistema de banco de dados MySQL são: o número de elementos requeridos tende a ser elevado para os níveis de granularidade tupla e valor de atributo, mesmo usando bases de dados reduzidas; apesar de alguns desses elementos requeridos já serem exercitados no teste de adequação ao critério

todos-usos focado somente nas variáveis de programa, algumas associações de fluxo de dados

persistentes requerem casos de teste adicionais. Em síntese, o número de elementos requeridos aumenta à medida em que se aplica mais precisão na análise de fluxo de dados e casos de teste específicos são necessários ao exercício de associações de fluxo de dados persistentes.

A cobertura de associações de fluxo de dados persistentes é afetada pela granularidade da análise de fluxo de dados adotada. A cobertura de uma associação-ddef-duso em nível de granularidade β é alcançada quando a interseção dos conjuntos ddef e duso estabelecidos em nível β é distinta do conjunto vazio e pelo menos um caminho livre de definição c.r.a variável persistente for executado. Nesse sentido, adotou-se uma abordagem precisa para a noção de redefinição de dados persistentes: a redefinição persistente ocorre em nível valor de atributo, independentemente da granularidade utilizada para a análise de cobertura da associação persistente. A motivação para esta abordagem é a determinação exata dos dados definidos que alcançam os usos persistentes, para então efetuar a avaliação de cobertura em cada granularidade de fluxo de dados.

Uma ddua denotada por [i, (j,k), v] é coberta para a granularidade β se existem dados de entrada capazes de executar pelo menos um caminho completo que inclua algum caminho π iniciado no nó i e terminado no arco (j,k), desde que: (i) v ddef(i) duso(j,k) para a

granularidade β; e (ii) π seja um caminho livre de definição c.r.a v considerando a abordagem precisa de redefinição de dados. Associações que são exercitadas para uma dada granularidade podem não estar sendo cobertas em outras granularidades. Por exemplo, considere os comandos abaixo, onde (1) e (2) representam definição e uso de dados persistentes, respectivamente:

(1) update empl (2) select emplno from empl set bonus = bonus * 1.1 where salary > :var_2 where salary < :var_1

O conteúdo das variáveis var_1 e var_2 são determinantes para a cobertura de associações estabelecidas a partir dos comandos (1) e (2). Para a precisão de fluxo de dados tupla, é requerido

que a definição e o uso ocorram em pelo menos uma mesma tupla; ou seja, o predicado (var_2 <

var_1) deve ser verdadeiro para que possam existir relações empl capazes de atender tal requisito;

para a granularidade relação, a qual é menos exigente do que a precisão tupla, este predicado não é exigido.

Uma questão pertinente é se a cobertura de associações persistentes em granularidades mais precisas agrega valor à habilidade de descoberta de defeitos. Nesse sentido, o Capítulo 5 explora o requisito de teste (critério, granularidade), investigando empiricamente se as granularidades relação, atributo, tupla e valor de atributo são suplementares à descoberta de defeitos no contexto de regras ativas escritas em SQL.