MODELAGEM DE SISTEMAS DE TEMPO REAL EM UML
Este artigo tem como objetivo apresentar a modelagem de sistemas de tempo real na linguagem UML. Analisa-se que os sistemas de tempo real são complexos porque possuem interação com o ambiente o que os torna algumas vezes imprevisíveis. Possuem também restrições relativas à segurança e desempenho, além de terem de retornar respostas não somente corretas, mas também em um momento hábil de acordo com os requisitos do software. Os sistemas de tempo real são considerados críticos e, por terem alto custo de falhas, precisam prevê-las ou tratá-las a tempo. A modelagem desses sistemas tem como meta criar modelos a partir das características desses sistemas, ignorando particularidades menos importantes, e minimizar erros de desenvolvimento, cortando custos. Para isso, serão apresentados perfis que servem de extensão aos mecanismos da UML, além das funcionalidades da versão 2.0 que unidas tornam a modelagem desses sistemas ainda mais poderosa.
1. Introdução
Atualmente, a modelagem dos sistemas de tempo real é muito importante, dado o grande número de aplicações nas áreas comercial, industrial, militar, educacional, médica e cultural e, também, ao fato de serem sistemas complexos e de existirem em número muito pequeno os modelos que abrangem grande parte dos aspectos de tempo real.
A UML (Unified Modeling Language) é uma linguagem orientada ao paradigma de programação orientada a objetos e apesar dessa linguagem não ter sido desenvolvida especialmente para o paradigma dos sistemas de tempo real, vários estudos foram realizados para a sua adequação. È através de extensões da linguagem UML que é possível modelar sistemas com restrições temporais e, por isso, o artigo apresenta três perfis sobre mecanismos de tempo real, além da versão 2.0 da UML.
Os sistemas de tempo real têm como principal recurso o tempo. Tempo esse que não pode ser medido, mas pode ser avaliado. Esses sistemas precisam responder a estímulos do meio dentro de um prazo-limite. Como não é possível o controle sobre o ambiente externo surge ai a complexidade dos sistemas de tempo real. O aumento da complexidade desses sistemas levou a um crescimento do número de funcionalidades disponíveis para aplicações de tempo real.
A grande importância da modelagem é o fato de economizar custos na medida em que erros podem ser eliminados ainda na fase de projeto do sistema. Como exemplo, erros nos sistemas embarcados que muitas vezes possuem hardware sob medida e quando mal analisados teriam como conseqüência prejuízos financeiros e de não cumprimento de prazos. É evidente que a fase de modelagem não substitui os testes e análises ao sistema real.
Para modelagem de sistemas de tempo real, é necessário modelar a infra-estrutura física do sistema, como processador e redes de comunicação e o relacionamento destes com o software. Também é preciso modelar o comportamento do sistema que tem como fundamento o acontecimento de eventos. Além disso, é necessário modelar a estrutura do sistema de tempo real já que o mesmo é intolerante às falhas.
A modelagem de sistemas de tempo real não dispensa a fase de análise dos modelos e precisa de complementação de informações relativas aos recursos do sistema.
A linguagem UML é utilizada para especificar, construir, documentar e visualizar toda a fase de modelagem dos sistemas e será apresentado o seu histórico sobre desenvolvimento de sistemas de tempo real no tópico a seguir.
2. Histórico
Linguagens de modelagem orientadas a objeto começaram a aparecer entre meados de 1970 e 1980. Nesse período, várias metodologias foram experimentadas para análise orientada a objeto. Entre 1989 e 1994, o número de linguagens de modelagem passou de menos de 10 para mais de 50. Mesmo assim, muitos usuários ainda tinham algumas dificuldades com essas linguagens. Em meados de 1990, novos métodos, porém, utilizando técnicas já existentes melhoradas, foram aparecendo.
Em 1998, a OMG (Object Management Group) criou um grupo para estudar a aplicação da UML para sistemas de tempo real. Desse trabalho surgiu em 2003 uma versão da UML chamada Profile for Schedulability Performance and Time Specification (SPT) com objetivo de definir uma maneira de utilizar as funcionalidades da UML para modelar conceitos e práticas de sistemas de tempo real, ou seja, escalonabilidade e desempenho. Detalhes do perfil SPT serão apresentados nos tópicos seguintes.
3. Modelagem de Sistemas de Tempo Real
A seguir serão apresentadas as funcionalidades da versão 2.0 da UML e as extensões para modelagem de sistemas de tempo real.
3.1 UML 2.0
Segundo Becker (2003) a UML 2.0 incorpora mecanismos novos que valorizam a modelagem dos sistemas de tempo real, já que estes sistemas interagem com o ambiente, são não-determinísticos e altamente concorrentes. Com a UML 2.0 é possível construir modelos a partir da composição hierárquica. Também de acordo com Maeunier et al. (2003) é possível modelar a dependência entre hardware e software acrescentando características do processador.
A UML 2.0 suporta modelagem de concorrência, faz uso de objetos ativos e estados de concorrência. Para isso foram adicionados novos diagramas e um modelo de tempo. O modelo de tempo é dotado de conceitos que são utilizados nos diagramas comportamentais para representar o relacionamento com o tempo. Os conceitos podem ser instantes de eventos, duração e periocidade. Os novos diagramas são: diagrama de estrutura, diagrama de composição, diagrama de comunicação, diagrama de tempo e uma revisão do diagrama de interação.
Com o diagrama temporal ou Timing Diagram é possível visualizar o impacto do tempo em um ou mais objetos e, as condições e os efeitos do tempo nos estados dos objetos. Por outro lado, o diagrama de estados permite verificar as alterações do estado de um objeto.
Aos diagramas de colaboração e de seqüência foram acrescentadas novas funcionalidades como a possibilidade de agrupar interações, permitindo a analise de períodos críticos.
Para melhor compreensão, os diagramas da UML 2.0 são divididos em diagramas de estrutura e diagramas de comportamento. Os diagramas de estrutura são formados por diagrama de pacotes (Package Diagram), diagrama de objeto (Object Diagram), diagrama de classes (Class Diagram), diagrama de desenvolvimento (Deployment Diagram), diagrama de componente (Component Diagram) e diagrama de composição da estrutura (Composite Structure Diagram). Os diagramas de comportamento são formados por diagramas de atividade (Activity Diagram), diagrama de interação (Interaction Diagram), diagrama de caso de uso (Use Case Diagram), e diagrama de estado (State Machine Diagram). Além disso, o diagrama de interação possui ramificações que são os digramas de tempo, (Timing Diagram), diagrama de comunicação (Communication Diagram), diagrama de colaboração (Collaboration Diagram) e diagrama de seqüência (Sequence Diagram).
3.2 Conceitos arquitetônicos em UML
A melhoria na arquitetura foi uma das mais importantes inovações da UML 2.0 no que diz respeito à modelagem de sistemas complexos. É possível descrever seu comportamento como uma colaboração de comportamentos de instâncias de outras classes contidas dentro de uma classe. Os conceitos que descrevem esta estrutura interna são Partes, Conectores e Portas.
3.2.1 Partes
O conceito de parte em UML 2.0 torna possível descrever a estrutura interna de uma classe. Uma parte é um conjunto de instâncias de outras classes. A parte faz uso do conceito de encapsulamento e podem ter multiplicidades no formato [n..m], onde o n especifica quantas instâncias podem ser criadas dentro de uma classe e, m significa quantas instâncias no máximo podem ser criadas.
3.2.2 Portas
Uma porta é um ponto de interação de uma classe. Pode ser o seu endereçamento e utiliza-se de meios que sinalizam isso. Uma porta também pode ser uma interface que especifica operações e sinais oferecidos por uma classe. Além disso, é através das portas que ocorre a comunicação com o ambiente externo podendo enviar e receber operações através das portas e também dispor operações por elas.
As portas possuem um atributo de comportamento (isBehavior) que especifica se os pedidos que chegam a esta porta são recebidos por uma máquina de estado do objeto ou por qualquer parte que este objeto possua. Tais portas são chamadas de portas de comportamento. A máquina de estados dirigirá sinais que são enviados à porta de comportamento.
3.2.3 Conectores
Um conector especifica um vínculo (uma instância de uma associação) que habilita a comunicação entre duas ou mais partes. Em contraste com as associações que especificam vínculos entre instâncias de classes, os conectores especificam ligações somente entre partes. Os conectores podem ficar presos a portas ou presos diretamente em uma parte.
Conectores e portas são conceitos excelentes porque causam mais efeito ao reuso de tipos e assim encorajam o uso de componentes.
3.3 Extensões UML para sistemas de tempo real
Para modelar sistema de tempo real é necessário aplicar os conceitos de UML às especificações de sistemas de tempo real. O suporte aos mecanismos de tempo real é possível utilizando-se de perfis que incorporam as especificações ou dos avanços na versão 2.0 da UML.
Além dos diagramas e das funcionalidades da UML 2.0 já apresentados, para este artigo, foram escolhidos três perfis por serem os mais utilizados em aplicações de tempo real. São eles:
- Perfil SPT: Schedulability Performance and Time Specification, criado pela OMG.
- ROOM: Real-Time Object Modeling, criado pela IBM e a Rational.
...