4 Uma Linguagem Baseada em Máquinas de Estado 4.1. A Linguagem

Documentos relacionados
3 Ferramenta Proposta 3.1. Objetivos

LÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz

7 Discussão dos Resultados

5 Mini Casos. 5.1.Campos Numéricos Interface e Especificação

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Apêndice 1. Recomendações para testes de módulos

Um Modelo Semântico para a Linguagem Java Jorge Henrique Cabral Fernandes CIC-UnB Junho de Introdução

Contratos O diagrama de sequência não menciona a funcionalidade das operações. Isto é, o comportamento do sistema Contrato é um documento que

Instituto de Informática Estrutura de Dados II

Segundo trabalho prático de implementação Sistema de reserva de assentos

Uma linguagem de especificação formal simplificada

1 Objetivo. 2 Descrição do domínio. Primeiro Trabalho - Segundo semestre de 2007 Sistema de Apoio a Jogos Lotéricos. 2.1 Caracterização dos jogos

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Conceitos básicos de programação

Introdução a Teste de Software

Modelagem Usando Orientação à Objetos (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Tema 2: Modelo Dinâmico

6 Aplicação da Ferramenta

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Lição 4 Fundamentos da programação

Victor Hugo Andrade Soares monitor João Vitor dos Santos Tristão Primeiro Trabalho Prático

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1013 MODELAGEM DE SOFTWARE

2 Versão 1: Funcionalidade Básica e Interface Web

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Terceiro Trabalho Prático. Este trabalho tem como objetivo ordenar um arquivo de dados e implementar as operações cosequenciais de merging e matching.

Classes e Objetos. Sintaxe de classe em Java

Segunda Parte do Trabalho Prático (Parte II) Valor: 70%

Trabalho Prático. Descrição do arquivo de dados

Análise e Projeto de Sistemas

ESTRUTURA DE DADOS (TCC )

Trabalho Prático 2015 Simulador de Circuitos Opção 1 Versão /11/2013

4 Conceito de Herança

Bruno Loureiro Rezende. Um Framework para a Automação de Testes com Linguagens de Especificação Configuráveis DISSERTAÇÃO DE MESTRADO

Banco de Dados. SGBDs. Professor: Charles Leite

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani -

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Primeira Parte do Trabalho Prático (Parte I) Valor: 30% Descrição do arquivo de dados

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

SSC Linguagem de Programação e Aplicações

Histórico de alterações

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

A programação orientada a objetos tenta simular estes aspectos, trazendo para o computador a realidade do dia-a-dia.

Introdução a Programação de Jogos

POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos. POO Paradigma Orientado a Objetos

TRATAMENTO DE EXCEÇÕES

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

A modelagem de Negócio com UML

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Biblioteca de auxílio ao uso de elementos gráficos

Java para Desktop. Exceções JSE

Linguagem de Programação III

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

4 LearnAds: um Framework de Recomendação de Anúncios

Diagrama de Máquina de Estados

Classes, Métodos e Propriedades

Algoritmos e Programação

Análise e Projeto de Circuitos Combinacionais e Sequenciais

5. Expressões aritméticas

2

Algoritmos II Aula 11 Funções e Procedimentos

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Trabalho de LP 15/07/2013. Prof. Flávio Miguel Varejão

Quinto Trabalho Prático. Este trabalho tem como objetivo indexar arquivos de dados usando um índice árvore-b.

Sumário REGISTRADOR ELETRÔNICO DE PONTO - REP-1000 REGISTRADOR ELETRÔNICO DE PONTO - REP-1000

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software

Linguagem C: Introdução

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

especificação por meio de exemplos não é garantia de corretude, mas a experiência mostra que tende a ser melhor do que o estado da prática hoje

Linguagens de Domínio Específico

Capítulo 7. Expressões e Sentenças de Atribuição

4 Binding entre Charm++ e Lua

Tratamento de Exceções. Julio Cesar Nardi

Namespaces, Classes e Métodos.

5 Fidedignidade Disponibilidade Confiabilidade Segurança Proteção Privacidade Integridade

Introdução a orientação a objetos

4. Constantes. Constantes pré-definidas

2 Conceitos. 2.1 Sistema Multiagentes Abertos e Abordagens de Leis

FACULDADE LEÃO SAMPAIO

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Análise e projeto de sistemas

4 Processo de Transformação

Porque usar um montador? Formato de uma linha de código fonte:

A figura abaixo representa uma classe denominada Carteira. Esta classe é composta dos métodos depositar(valor) e retirar(valor) e do atributo saldo.

3. Linguagem de Programação C

1 Introdução. 2 Especificação

Diagramas. Abordaremos agora cada um destes tipos de diagrama: 1. Diagrama Use-Case. 2. Diagrama de Colaboração. 3. Diagrama de Sequência

O Pronome MAIN 6.1. O Objeto Principal do Sistema

Algoritmos Lógica e Programação Prof. Me. Adelson Felipe Dias Nogueira

Como construir um compilador utilizando ferramentas Java

2 Fluxos no Ciclo de Vida do Processo Unificado. O Processo Unificado consiste da repetição de uma série de ciclos durante a vida de um sistema.

Técnico em Informática. Web JavaScript. Profª Ana Paula Mandelli

Transcrição:

4 Uma Linguagem Baseada em Máquinas de Estado 4.1. A Linguagem Acredita-se nesse trabalho que características reativas e fortemente baseadas em modelos tornam necessária a criação de uma linguagem específica capaz de representar de forma mais eficiente os comportamentos do sistema. A linguagem proposta fornece uma forma de especificar máquinas de estado que descrevam os comportamentos da aplicação. As máquinas de estado possuem três elementos principais: Estados: Representam a situação do(s) módulo(s) sob teste em um determinado instante. Eventos: Situações que ocorrem no sistema e podem ou não causar mudanças de estado no(s) módulo(s) sob teste. Transições: Definem as possíveis mudanças de estado no(s) módulo(s) sob teste, levando a máquina de um estado para outro quando ocorre um determinado evento. As máquinas de estado definidas por esta ferramenta são do tipo determinístico, ou seja, dados um estado e um evento apenas uma transição pode ocorrer. Caso ocorra um evento desconhecido, ou seja, que não está em nenhuma das transições definidas para o estado em que a máquina se encontra, este será descartado. A definição das máquinas de estado é feita através de um script que contém estados, eventos e as possíveis transições. Um exemplo de aplicação para a linguagem proposta vem de uma das situações de não conformidade verificadas pelo controle de alarmes do sistema alvo, o controle de velocidade. De forma simplificada, existem os seguintes estados, mutuamente exclusivos, para um veículo em um determinado momento: em alta velocidade, e em velocidade regular. Os eventos que causam as transições entre esses estados são obtidos a partir das informações recebidas do equipamento GPS do veículo, podendo ser uma informação de alta velocidade ou uma

42 informação de velocidade regular. Portanto, um veículo no estado velocidade regular para o qual se recebe uma informação de velocidade acima da permitida deve ir para o estado de alta velocidade. Caso a informação recebida para esse veículo indique velocidade permitida, o veículo continuará no seu estado anterior, de velocidade regular. De forma semelhante, um veículo que se encontre no estado de alta velocidade deve ir para o estado de velocidade regular caso se receba informações de velocidade regular, ou deve permanecer no estado alta velocidade caso a informação seja de alta velocidade. Esse comportamento é descrito na máquina de estados da figura 17. Figura 17: Máquina de estados descrevendo o controle de alarmes de velocidade A linguagem proposta foi uma extensão da linguagem mostrada no exemplo da seção 3.4.1, adicionando os comandos necessários para a manipulação de máquinas de estado. Além dos comandos definidos para a declaração da máquina de estados, através da declaração de seus estados e possíveis transições, mecanismos são fornecidos para que se force a máquina a ir a um determinado estado e para a geração de eventos que causem as transições. Tais operações podem ser realizadas através dos seguintes comandos: Existe transição <estado de origem> <evento> <estado de destino>: Define uma transição para o estado de destino sempre que a máquina se encontrar no estado de origem e o evento especificado ocorrer. Além de criar a transição, este comando também está declarando os estados e evento envolvidos na transição. Vai para <estado>: É o comando disponível para forçar que a máquina de estados esteja em um estado específico. Esse comando é útil para criar as pré-condições para a realização de determinado caso de testes.

43 Acontece evento <evento>: Faz com que ocorra o evento especificado. Dependendo do estado em que a máquina se encontra e das transições definidas tendo esse estado como origem este comando pode gerar uma transição. Caso uma transição seja gerada, é verificado posteriormente se o estado alcançado pelo módulo sob teste após a transição é compatível com aquilo que foi declarado para a máquina de estados no script de teste, verificando dessa forma se o comportamento que era esperado de fato ocorreu. Após a execução do script de testes, é gerado um relatório contendo as linhas do script, com seus comandos e comentários, e para cada comando executado são apresentados os resultados da execução, com indicação de falha ou sucesso, mensagens geradas pelo módulo específico de testes e, caso exista, a exceção não capturada que impediu a sua execução. Espera-se que esse relatório possua informações suficientes para auxiliar na detecção dos defeitos causadores das falhas encontradas durante a execução. 4.2. Instanciação do Módulo de Linguagem Para a criação da instância da ferramenta contendo a linguagem de máquinas de estado foi necessário criar um novo módulo de linguagem, capaz de gerar os novos elementos no modelo de script, e novos componentes de execução para os novos elementos de script definidos. A figura 18 mostra o arquivo de configuração com as alterações necessárias para a criação dessa instância.

44 Figura 18: Arquivo de configuração para a instância com linguagem de máquinas de estado Para cada um dos novos comandos foi criado um novo elemento de script. Os elementos criados foram: DefineTransaction, representando o comando Existe transição. ForceState, representando o comando Vai para. GenerateEvent, Representando o comando Acontece evento. Como a linguagem utilizada é puramente textual, foi possível criar o novo módulo apenas através da configuração do módulo de linguagem DefaultScriptReader, descrito na seção 3.4, como é possível ver na linha 1 da figura. Na linha 5 estão declarados os 3 novos comandos criados pela linguagem. Os componentes que realizam a leitura são registrados para seus respectivos comandos nas linhas 13 a 15. A execução dos novos elementos de script é realizada por novos componentes de execução que são registrados nas linhas 20 a 22. Esses componentes recebem seus respectivos elementos de script, os executam, e adicionam os resultados execução ao relatório de resultados, que será processado pelo módulo de resultados. Novos elementos de relatório foram criados para conter os resultados de cada novo comando. Caso seja interessante a construção

45 de um módulo de linguagem gráfico, os componentes de execução e dos modelos de especificação e resultados não precisam ser alterados, bastando para tal alterar apenas o módulo de linguagem, utilizando os elementos disponíveis na criação do modelo de especificação. A figura 19 exibe um diagrama explicando a instanciação do framework. Figura 19: Diagrama da ferramenta após a instanciação com a linguagem de máquinas de estado. Da mesma forma que na linguagem de exemplo, os scripts são utilizados como uma linguagem de mais alto nível que realiza os testes invocando métodos

46 do módulo específico de testes, de acordo com a lógica do script. Para esse novo conjunto de comandos, são necessários quatro tipos de métodos: void force<nome do estado>(): Deve existir um método desse tipo para cada estado criado. É o método invocado pela ferramenta no momento em que o comando Vai para <nome do estado> é executado. boolean check<nome do Estado>(): Também deve existir um desses para cada um dos estados criados. É o método invocado após a ocorrência de uma transição, para verificar se o estado alcançado foi de fato o esperado. void generate<nome do evento>(): Deve haver um método desse tipo para cada evento disponível no script. Este método é invocado durante a execução do comando acontece evento <Nome do evento> para gerar o evento passado como parâmetro. String getcurrentstate(): Obtém o estado corrente da máquina. É implementado apenas uma vez por módulo específico de testes e é utilizado para obter o estado da máquina em caso de falha, ou seja, quando o estado esperado não é alcançado após uma transição. Os resultados são exibidos pelo mesmo módulo utilizado na seção 3.4, o OutputFileReportPrinter, que imprime os resultados em um arquivo texto.