• No results found

CHAPTER 1 INTRODUCTION

1.4 Structure of the thesis

O Sistema de Controle de Incêndio (ou FCS) [Oliveira 2006] é um sistema em JCSP que monitora detecção de incêndio em seis zonas distribuídas, 4 das quais em duas áreas diferentes (veja figura 4.2). As outras duas zonas não pertencem a nenhuma área. O sis- tema pode estar em algum dos seguintes estados: Automático, Manual, ou Desabilitado. Quando o sistema está no modo Automático e é detectado um incêndio em apenas uma zona de uma área, o sistema ativa o alarme de primeiro estágio, e lança um gás na área que contém a zona onde o incêndio foi detectado. Quando o sistema está no modo Au- tomático e é detectado incêndio em duas zonas da mesma área, o sistema ativa o alarme de segundo estágio e começa uma contagem regressiva de 30 segundos. Após a contagem, o sistema lança o gás na área. Detecção de incêndio em uma zona que não pertence a nenhuma área não faz o sistema lançar gás. Quando o sistema está no modo Manual, o gás é expelido manualmente. É possível lançar gás numa área quando ela está ativa, e para isso, a detecção de incêndio é necessária em pelo menos uma zona daquela área.

Figura 4.2: Áreas e zonas do Sistema de Controle de Incêndio A interface gráfica do Sistema de Controle de Incêndio é exibida na figura 4.3. Nesta dissertação, implementamos casos de teste em JCSP para o Sistema de Controle de Incêndio. O objetivo deste caso de teste é verificar se, depois de cada evento, o estado do sistema esteve como esperado, se as leituras e escritas nos canais foram realizadas como esperado, e como os requisitos do Sistema de Controle de Incêndio podem ser checados usando JCSPUnit.

O Sistema de Controle de Incêndio tem alguns requisitos. Exibiremos, nesta disser- tação, apenas o requisito que será testado. O requisito, extraído de [Oliveira 2006], é:

1. Se o sistema está sendo executado no modo automático e duas zonas de uma área estão incendiando, o alarme de segundo estágio foi ativado

O caso de teste deste exemplo vai ser a verificação do requisito exibido. Este caso de teste implementa os métodos setUp, contentOfTest e contentOfSynchronization. Eles serão implementados como segue:

• contentOfTest automaticamente clica os botões da GUI do Sistema de Controle de Incêndio e invoca as asserções após cada clique. O objetivo destas asserções é checar se os valores escritos e lidos dos canais são aqueles esperados;

• setUp instancia um objeto da classe que coloca o sistema para executar, e a coloca como instância do método prepareProcess, que deve ser invocado no setUp;

Figura 4.3: GUI do Sistema de Controle de Incêndio

• contentOfSynchronization é implementado com um corpo vazio (não será exibido neste caso de teste). Isto ocorre porque o Sistema de Controle de Incêndio não requer sincronização com um testador

No nível de implementação, o requisito exibido significa que se o botão Automatic e dois botões da mesma área (por exemplo, Zone 0 e Zone 1) foram clicados, a instância de Alarm foi executada e o sistema está no estado COUNTDOWN , ou seja, o alarme disparado é o de segundo estágio (o estado COUNTDOWN representa a contagem re- gressiva antes do disparo do alarme de segundo estágio). Cada botão clicado na GUI efetua uma sincronização (read e write) no canal btnPressed, da classe Keyboard.

A verificação do estado do sistema pode ser feita checando-se o valor lido no canal systemState. Assim, a verificação do requisito consiste em clicar respectivamente nos botões Switch On, Automatic, Zone 0 e Zone 1 (estes dois se encontram na mesma área). Entre cada clique, será invocada uma asserção para verificar a sincronização cor- rente do sistema, isto é, verificar se houve uma leitura e uma escrita de um valor naquele canal, e se aquele valor escrito foi o esperado. No final, assertHasAlreadyRan será invo- cado com a instância de Alarm como parâmetro.A asserção assertWasReadOnChannel também será invocada, com systemState e COUNTDOWN como parâmetros, para ver- ificar se o estado do sistema é o estado que corresponde ao disparo do alarme de segundo estágio. O código do caso de teste será exibido em duas partes. A primeira corresponde ao código do método setUp, e a segunda corresponde ao método contentOfTest. O código a seguir exibe a primeira parte do caso de teste para o Sistema de Controle de Incêndio.

public class TestFireControl extends JCSPTestCase { ConcreteMain cm;

public void setUp () {

cm = new ConcreteMain (); prepareProcess (cm); }

}

O método setUp deve ser implementado em todos os casos de testes de JCSP, porque a instanciação do PUT deve ser feita, e isto deve ser feito no método setUp. No código anterior, o objeto ConcreteMain de nome cm corresponde ao processo principal do Sis- tema de Controle de Incêndio. Em setUp, este objeto é instanciado e submetido como parâmetro do método prepareProcess, indicando que este é o PUT, de acordo com o con- teúdo do teste em contentOfTest.

Em contentOfTest, o PUT deve ser referenciado através do nome preparedProcess, e, por limitações técnicas, cada vez que ele é referenciado, ele deve ser envolvido com um cast (esta limitação técnica se deve ao fato de que preparedProcess é um atributo CSProcess, e portanto, a princípio, não é uma instância de ConcreteMain). Assim, cm pode ser referenciado como (ConcreteMain)preparedProcess. A primeira parte do conteúdo do teste consiste em verificar se as instâncias de ConcreteMain, ExternalDevices e

Keyboard estão sendo executadas em paralelo. Esta asserção é feita 4 segundos após

o início do teste (através do método sleep, com o valor 4 como parâmetro).

O tempo escolhido entre cada clique foi de 1 segundo. Após isso, o teste verifica se o estado do sistema é FIRE SYS START . Depois de clicar em Switch On, é checado se realmente houve uma sincronização no canal btnPressed com a constante SWITCH ON , e se o estado do sistema é FIRE SYS . Clicando em Automatic, o teste checa se real- mente houve uma sincronização em btnPressed com MODE SWITCH AUTOMATIC . Um segundo depois, o teste clica em Zone 0. Depois deste clique, o teste checa se o estado do sistema é AUTO e se houve uma sincronização em btnPressed com DETECTION 0. Mais um segundo passa, e o teste clica em Zone 1, checa se houve a sincroniza- ção esperada em btnPressed, com DETECTION 1, e checa se o estado do sistema é

COUNTDOWN. O último passo deste teste consiste da invocação da asserção assert-

HasAl readyRan, aplicada à instância de Alarm, para checar se o processo já foi execu- tado. O resultado final é exibido na figura 4.4.