---
title: "Testes de software para máquinas de estados"
date: "2011-04-05"
categories: 
  - "software"
tags: 
  - "agile-development"
  - "software-modeling"
  - "software-tools"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "v2011r2"
description: Explore como melhorar a qualidade do software através da realização de testes precoces de diagramas de máquinas de estados UML, utilizando o Altova UModel. Descubra técnicas de teste práticas e exemplos.
---
Status: #blog

Tags:  #agile-development #software-modeling #software-tools #uml #uml-tool #umodel #v2011r2

Categories: [development](/blog/pt/category/development.md) [uml](/blog/pt/category/uml.md)
# Testes de software para máquinas de estados

Muitas variedades de testes de software ganharam importância à medida que os desenvolvedores procuram formas de melhorar a qualidade e cumprir os prazos dos projetos – revisão de código, testes unitários, testes de regressão, testes beta, desenvolvimento orientado por testes, entre outros. Independentemente dos objetivos de um projeto ou da linguagem de código fonte utilizada, é amplamente aceite que quanto mais cedo um defeito é detetado, mais fácil, mais barato e mais rapidamente ele pode ser corrigido. [Geração de código](https://www.altova.com/pt/umodel/uml-code-generation.html) de [Diagramas de máquina de estados UML](https://www.altova.com/pt/umodel/state-diagrams.html), uma nova funcionalidade introduzida em [Altova UModel 2011](https://www.altova.com/pt/umodel.html) A versão 2 pode ser utilizada para validar a lógica conceptual numa fase muito inicial do desenvolvimento do projeto. 

**Design prático representado num diagrama de máquina de estados** 

Um exemplo incluído com o UModel fornece um diagrama de máquina de estados simples e realista, acompanhado de uma pequena aplicação de teste que pode executar para verificar pessoalmente a facilidade com que é possível testar a lógica de um projeto. O diagrama de máquina de estados no projeto AirCondition.ump, localizado na pasta de exemplos do UModel 2011, descreve o funcionamento de um sistema típico de aquecimento e ar condicionado. 

[![Diagrama de máquina de estados no Altova UModel ](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY4ceg5yI/AAAAAAAAAXU/EvHaGDO0_sw/Snap1_state_diagram_LR5.png?imgmax=800 "State machine diagram in Altova UModel ")](https://www.altova.com/umodel.html) 

O sistema inclui um botão de alimentação, localizado no lado esquerdo, que permite a transição do estado "desligado"; uma função "modeSelect" que permite escolher entre aquecimento ou arrefecimento; uma função "speedSelect" para controlar a velocidade do ventilador; e um botão de "standby" que coloca o sistema no modo de espera, como mostrado no lado direito. A pasta do projeto de exemplo inclui todo o código gerado para o diagrama pela ferramenta UModel, em Java, C# e Visual Basic. Para experimentar a versão em Java, basta usar o comando **javac STMTester.java** para compilar o código e **java STMTester** para executá-lo. A aplicação de teste exibe um painel de controlo simulado, com janelas de informação sobre a unidade de aquecimento e ar condicionado. Os botões de funcionamento aparecem na parte superior, o estado atual é descrito na primeira janela, e as mensagens de saída geradas pelas alterações no sistema aparecem na segunda janela.

[![Painel de controlo para testes do código de máquina de estados gerado pelo Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY4k3SX7I/AAAAAAAAAXY/BbrYrNG5nTQ/clip_image0043.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel/state-diagrams.html) 

Como se pode ver acima, o sistema inicia no estado "desligado", o modo está definido para "aquecimento" e o ventilador está desligado. Antes de utilizar o sistema, poderá ser útil redimensionar o painel de controlo e o diagrama de máquina de estados para acompanhar as ações da aplicação de teste no próprio diagrama, como se pode ver na imagem de tamanho reduzido abaixo. 

[![Diagrama de máquina de estados UModel e painel de controlo de testes para o código gerado](https://lh3.ggpht.com/_REdrfeVqYdU/TZsY5AeHLzI/AAAAAAAAAXc/oNqgojYQqZw/Snap3_combinedimage_LR5.png?imgmax=800 "UModel state machine diagram and test control panel for generated code")](https://www.altova.com/umodel.html) 

**A operação da máquina de estados** 

Quando clicamos no botão de energia, a janela de estado atual é atualizada e uma descrição detalhada das operações que ocorreram é apresentada como "Evento 1" na janela de mensagens de depuração. 

[![Painel de controlo para testes do código de máquina de estados gerado pelo Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY5d6YGOI/AAAAAAAAAXg/GPAgI00JHWo/clip_image0084.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

Se estiver um dia quente, podemos querer mudar o modo para "arrefecimento" e aumentar a velocidade do ventilador. Podemos fazer isso clicando nos botões "modo" e "velocidade". A janela de estado atual é atualizada a cada clique, e os eventos 2 e 3 são adicionados à janela de mensagens de saída. 

[![Painel de controlo para testes do código de máquina de estados gerado pelo Altova UModel](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY6EeKdOI/AAAAAAAAAXk/hIxBihKj4-Y/clip_image0103.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

Agora podemos ver como a aplicação de teste nos permite testar completamente a lógica do nosso diagrama de máquina de estados, clicando em todas as sequências possíveis de seleção de botões para verificar se produzem os resultados esperados. Por exemplo, se colocarmos o dispositivo em modo de espera (Evento 4 abaixo) e, em seguida, pressionarmos o botão "speedSelect", podemos verificar nas mensagens de saída do Evento 5 que não ocorre nenhuma alteração de estado no subestado chamado "RegionSpeed". Compare o Evento 5 com o Evento 3 na janela de mensagens de saída, como mostrado abaixo. 

[![Painel de controlo para testes do código de máquina de estados gerado pelo Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY6T-8lBI/AAAAAAAAAXo/VDovIAt3cDs/clip_image0123.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

Agora que o sistema está em modo de espera e não precisamos de aquecimento nem arrefecimento, vamos poupar energia pressionando o botão de energia para o desligar. 

[![Painel de controlo para testes do código de máquina de estados gerado pelo Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY66RZsKI/AAAAAAAAAXs/v6FK67nFMVI/clip_image0143.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

Espere um momento – parece que nada aconteceu. Não houve nenhuma transição no evento 6, e o estado atual na janela superior continua em "Standby" (espera)! Ao analisarmos o diagrama de estados, podemos ver que a única forma de sair do modo "Standby" é pressionar novamente o botão "Standby". Será que este é realmente o comportamento que um utilizador comum esperaria? O botão de energia não desliga o sistema quando está no modo "Standby"? 

[![Parte de um diagrama de máquina de estados criado com o Altova UModel](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7RcFpgI/AAAAAAAAAXw/1oWwcxTveBE/clip_image0163.jpg?imgmax=800 "Portion of a state machine diagram created with Altova UModel")](https://www.altova.com/umodel.html) 

Imagine o quão dispendioso poderia ser resolver este problema se ele tivesse sido detetado muito mais tarde, durante o desenvolvimento do produto, quando o protótipo estivesse a ser testado por uma agência reguladora! Aqui está um desafio que propomos aos nossos leitores: como projetariam uma rota mais direta do estado de espera para o estado de desligado? 

**Testar os seus próprios autômatos de estados** 

Pode utilizar os exemplos de projetos de geração de código de máquina de estados da UModel como modelos para criar aplicações de teste para os seus próprios projetos. É importante aproveitar a funcionalidade da UModel que cria automaticamente operações numa classe à medida que adiciona nomes de operações às transições na sua máquina de estados. 

[![Botão da barra de ferramentas Altova UModel para a criação automática de operações em classes](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7mEsVhI/AAAAAAAAAX0/FDDlekHpIgk/clip_image0183.jpg?imgmax=800 "Altova UModel toolbar button for automatic creation of operations in classes")](https://www.altova.com/umodel.html) 

Além disso, o sistema de ajuda do UModel inclui informações detalhadas sobre a geração de código a partir de diagramas de máquina de estados, e também utiliza o ficheiro de projeto "AirCondition.ump" como exemplo. 

**Descubra por si mesmo como pode melhorar o desenvolvimento de projetos, testando a lógica dos seus próprios diagramas de máquinas de estados com o Altova UModel –** [**descarregue hoje mesmo uma versão de avaliação gratuita de 30 dias**](https://www.altova.com/pt/download/umodel/uml_tool_enterprise.html)**!**
