• Aucun résultat trouvé

2. CHARACTERISATION OF THE GROUNDWATER BODY

2.2 Identification of pressures

2.2.3 Pollution

Em programas orientados a objetos e interativos as ações do usuário sobre os objetos, como manipulação de um botão do mouse ou entrada de texto via teclado, são tratadas como eventos que alteram outros objetos que mantém o estado do programa. Um sistema baseado em eventos possui os seguintes elementos: eventos e notificações para a comunicação, produtores e assinantes interagindo, inscrições manifestando interesse do assinante em determinadas no- tificações e o serviço de notificação de eventos, que é o responsável por entregar notificações entre produtores e assinantes. Sistemas baseados em eventos distribuídos estendem o modelo de eventos locais permitindo a objetos em diferentes máquinas serem notificados sobre eventos que ocorreram em um outro objeto (COULOURIS et al.,2001).

Publish/subscribeé um modelo de comunicação baseado em eventos implementado no ROS. ROS é baseado em eventos, e dessa forma, os nós assinantes são os consumidores e os que publicam são os produtores de eventos. Nesse sistema, um ou mais clientes registram suas funções Callback para um evento específico e quando o evento é gerado as funções são chamadas. Neste trabalho funções e métodos são termos intercambiáveis, para uma padronização é utilizado apenas o termo método. Os métodos Callback são executados quando uma interrupção ocorre, nesse caso a interrupção provoca a chegada de uma mensagem a um nó. A partir deste ponto um nó executado no ROS será denominado processo.

produtor serializa a mensagem a ser enviada em um buffer (fila) e retorna a execução. As threads internas do ROS acessam essa fila e distribuem as mensagens entre as filas dos assinantes correspondentes. Dessa forma, a comunicação explorada neste trabalho é assíncrona, dado que o processo produtor não aguarda que o envio do dado seja concluído para retornar a execução. Entende-se como envio do dado concluído a ação que possibilita que o processo assinante acesse o dado recebido. Além disso, a comunicação seria bloqueante se ela garantisse que o buffer com a mensagem (no espaço do usuário) pudesse ser reutilizado após a liberação do processo produtor sem que a mensagem fosse perdida ou sobreposta. Isso garantiria que o conteúdo da mensagem não seria corrompido pelo próprio processo transmissor após a execução do método publish. Porém, no ROS, se uma dessas filas ultrapassa a capacidade máxima, as mensagens mais antigas são descartadas, caracterizando assim, uma comunicação não bloqueante.

O ROS em tempo de execução constitui-se como uma rede de processos peer-to-peer que são fracamente acoplados utilizando a infraestrutura de comunicação do ROS. O fraco acoplamento resulta do fato dos publicadores e assinantes não se conhecerem e, dessa forma, há um desacoplamento entre a produção de informação e o seu consumo. Esse comportamento resulta de três características principais: 1) o serviço de eventos funciona como intermediário na comunicação entre os processos, de forma que o processo assinante não tem conhecimento sobre quem publicou determinado evento; 2) um evento é propagado de forma assíncrona para os assinantes que registraram interesse naquele evento, de forma que o assinante não precisa estar ativo no momento que o evento foi publicado e; 3) produtores não são bloqueados enquanto produzem eventos e assinantes podem ser notificados de forma assíncrona da ocorrência de um evento, enquanto estão realizando alguma atividade concorrente (EUGSTER et al.,2003).

Em resumo, sistemas robóticos são compostos por um grande número de processos que interagem e concorrem por recursos e uma preocupação durante a atividade de teste é avaliar o impacto dessa característica nos resultados (BRITO et al.,2009;LEE; KIM; CHA,2002;LIMA; CAVALLI,1997;LU et al.,2011;PAKALA; KHAN; RAJU,2010;PAKALA; RAJU; KHAN,

2011; DAMM et al.,2011). Um defeito pode estar relacionado com a comunicação entre os processos e garantir a cobertura das diversas situações de comunicação por tópicos aumenta a confiança de que as interações entre as unidades são executadas corretamente. Para a aplicação desse tipo de análise de cobertura é necessário um modelo que represente o fluxo de controle e de dados de cada processo do programa em cada ponto de comunicação. O modelo de teste deve permitir identificar os dados de teste a serem executados e exercitar as possibilidades de comunicação.

Assim, este trabalho propõe uma abordagem de teste que utiliza cenários e define um grafo, inspirado no grafo de fluxo de controle (ALLEN,1970), para sistemas robóticos móveis baseado no modelo de comunicação publish/subscribe. Os cenários de teste têm como objetivo testar as funcionalidades do sistema e, para isso, utiliza o critério funcional particionamento em classes de equivalência para auxiliar na geração dos dados de teste. A representação de um

5.5. Abordagem de teste para comunicaçãoPublish/Subscribe 85

programa P como um grafo de fluxo de controle G = (N, E, s), para programas sequenciais, representa os blocos de comandos e desvios que indicam os possíveis caminhos de execução de P. N representa o conjunto de nós, E o conjunto de arestas, e s o nó de entrada. Um grafo de fluxo de controle é um grafo orientado, que possui um único nó de entrada s ∈ N e um nó de saída o ∈ N, no qual cada vértice representa um bloco indivisível de comandos e cada aresta representa um possível desvio de um bloco para outro. Cada bloco possui as seguintes características: 1) uma vez que o primeiro comando do bloco é executado, todos os demais são executados sequencialmente e; 2) não existe desvio de execução para nenhum comando dentro do bloco.

O grafo definido no contexto desta tese de doutoramento é inspirado no grafo de fluxo de controle, na medida em que representa blocos de comandos e desvios no fluxo de execução do programa. Porém, o grafo aqui definido pode possuir mais que um nó de entrada si∈ N e mais que um nó de saída oi∈ N, com i ∈ N e i = 1, 2,..., k − 1. Além disso, nem todos os blocos de comandos são representados no grafo, pois o objetivo do grafo é representar os pontos de integração do programa, ou seja, a comunicação entre os processos do sistema distribuído.

O grafo de fluxo de dados, também chamado grafo Def-Uso foi proposto porRapps e Weyuker(1985) como uma extensão ao grafo de fluxo de controle e representa informações do fluxo de dados do programa. Nesse grafo são representados pontos do programa em que é atribuído um valor a uma variável v, chamado de definição da variável, e pontos em que o valor de v é utilizado, chamados de uso da variável.

No grafo aqui definido, inspirado no grafo de fluxo de dados, são representadas as definições e usos de variáveis de comunicação ao longo da execução do sistema. Uma variável de comunicação é definida em um processo produtor e usada em um método publish durante a comunicação com um processo assinante. Com base nesse grafo é definida uma família de critérios de integração de fluxo de controle e de dados, os quais são apresentados na próxima seção.

5.5

Abordagem de teste para comunicação Publish/Subs-

Documents relatifs