ESCOLA DE ENGENHARIA
PROGRAMA DE DOUTORADO EM ENGENHARIA DE PRODUÇÃO
NITERÓI
2010
DENIS GONÇALVES COPLE
Niterói
2010
DENIS GONÇALVES COPLE
BANCA EXAMINADORA
___________________________________________________________
Prof. Dr. EDUARDO SIQUEIRA BRICK – Orientador
Universidade Federal Fluminense
____________________________________________________________
Prof. Dr. ARTUR ALVES PESSOA
Universidade Federal Fluminense
____________________________________________________________
Profa. Dra. VIVIANE TORRES DA SILVA
Universidade Federal Fluminense
____________________________________________________________
Prof. Dr. EDSON JOSÉ DALTO
Instituto Brasileiro de Mercados de Capitais
___________________________________________________________
Prof. Dr. EDUARDO SALIBY
Universidade Federal do Rio de Janeiro
___________________________________________________________
Prof. Dr. FERNANDO HIDEO FUKUDA
Universidade Estácio de Sá
Niterói
2010
Dedico a minha prole,
Andrew e Yasmin.
AGRADECIMENTOS
Aos Professores Eduardo Siqueira Brick e Annibal Parracho Sant’Anna, que mais do que
grandes mestres, se tornaram também bons amigos no decorrer desta pesquisa.
Aos meus pais, pelo exemplo que sempre foram para mim.
Aos meus filhos, Andrew e Yasmin, pelo simples fato de existirem.
À Universidade Federal Fluminense, pelos novos conhecimentos adquiridos e pela
oportunidade de discutir com grandes mestres.
RESUMO
Esta tese trata do problema de Análise do Custo de Ciclo de Vida (ACCV) de sistemas
técnicos, com o uso de ferramentas de simulação, sob a ótica do reuso e da interoperabilidade.
Inicialmente é feito um estudo acerca das técnicas e arquiteturas da atualidade voltadas para
reuso e interoperabilidade, tais como frameworks, elementos genéricos, anotações, arquitetura
de software e padrões de desenvolvimento, além do uso de Arquiteturas Orientadas a Serviço,
sendo estes elementos contextualizados frente às atuais necessidades pra simulações
complexas e distribuídas, e tendo como exemplo relevante destas tendências o surgimento da
High Level Architecture (HLA). São analisados os princípios básicos da ACCV e seu
relacionamento com o Modelo de Pilla e Cople para ACCV. Com base no Modelo de Pilla e
Cople, foi criado um framework para simulação de custo de ciclo de vida, utilizando-se de
instâncias dinâmicas e buscando aproveitar o poder computacional fornecido pelo
processamento paralelo e distribuído. Foram analisadas técnicas de reuso e de
interoperabilidade e as mais adequadas foram utilizadas na construção deste framework.
Também foi desenvolvida uma interface para cadastro dos dados, gerência das simulações e
análise de resultados obtidos. Um caso de teste foi estabelecido e utilizado para testar as
funcionalidades de extensão, interoperabilidade e operação do framework e da interface
desenvolvida. Esses testes demonstraram as capacidades de operação, extensão e
interoperabilidade do framework e sua interface.
This thesis deals with the technical systems Life Cycle Cost Analysis (LCCA)
problem, with the use of simulation tools, under reuse and interoperability visions. At first,
the reuse and interoperability techniques and architectures, such as frameworks, generic
elements, annotations, software architecture and design patterns in addition to the use of
Service Oriented Architecture (SOA) are reviewed and contextualized with respect to the
present requirements for complex distributed simulations, also considered by the High Level
Architecture (HLA). The ACCV basic principles are analyzed and their relationship to the
Pilla and Cople Model is established. Based on this model a LCCA simulation framework
was developed, using dynamic instances and trying to enjoy the computing power provided
by parallel and distributed computing. Reuse and interoperability techniques have been
analyzed and the best ones have been applied to the framework. An interface for data entry,
simulation manager and data analysis was also developed. A test case was designed and used
to test the reuse, interoperability and operation functionalities of the framework and the
interface developed. These tests have demonstrated the operation, extension and
interoperability capabilities of the framework and interface..
Key Words: Systems Engineering, Logistics Support, Life Cycle Costing Analysis, Scientific
Computing, Simulation, Reuse, Interoperability.
SUMÁRIO
1. Introdução ........................................................................................................................ 18
1.1 Apresentação .............................................................................................................. 18
1.2 Objetivos .................................................................................................................... 22
1.2.1 Objetivo Geral ..................................................................................................... 22
1.2.2 Objetivos Específicos .......................................................................................... 22
1.3 Justificativa ................................................................................................................ 23
1.4 Delimitação do Estudo ............................................................................................... 24
1.5 Referencial Teórico .................................................................................................... 25
1.5.1 Análise de Custo de Ciclo de Vida ....................................................................... 25
1.5.2 Simulação ............................................................................................................ 26
1.5.3 Reuso de Software ............................................................................................... 27
1.5.4 Arquitetura de Software ....................................................................................... 28
1.5.5 Interoperabilidade ................................................................................................ 30
1.5.6 Processamento Distribuído .................................................................................. 31
1.6 Estrutura do Trabalho ................................................................................................. 32
2. Simulações Computacionais, Reuso e Interoperabilidade ................................................. 33
2.1 Introdução .................................................................................................................. 33
2.2 Simulações por Eventos Discretos .............................................................................. 34
2.3 Técnicas de Reuso no Desenvolvimento de Software .................................................. 39
2.4 Arquiteturas voltadas para o Reuso ............................................................................. 42
2.5 Interoperabilidade....................................................................................................... 49
2.6 Processamento Distribuído ......................................................................................... 54
2.7 Framework de ACCV Original ................................................................................... 56
2.8 Conclusões ................................................................................................................. 60
3. Custo de Ciclo de Vida e o Modelo de Pilla e Cople ......................................................... 65
3.1 Introdução .................................................................................................................. 65
3.2 Fatores Estruturais ...................................................................................................... 67
3.3 Confiabilidade, Manutenibilidade e Disponibilidade................................................... 72
3.4 Atividades .................................................................................................................. 75
3.5 Órgãos........................................................................................................................ 79
3.6 Fatores Financeiros .................................................................................................... 82
9
LISTA DE ILUSTRAÇÕES
Figura 51: Classe para listas de objetos JPA com gravação em background. .................................... 127
Figura 52: Especialização de GenericManager. ............................................................................... 128
Figura 53: Criação da classe para gravação de movimentação de estoque. ....................................... 128
Figura 54: Criação da classe para gravação de instâncias de produtos da simulação. ........................ 129
Figura 55: Resumo esquemático do Processo de Manutenção antigo. ............................................... 131
Figura 56: Resumo esquemático do Processo de Manutenção Padrão do novo framework. ............... 132
Figura 57: Resumo esquemático do modelo de geração de eventos padrão. ...................................... 133
Figura 58: Implementação do estado padrão “Iniciado”. .................................................................. 134
Figura 59: Implementação do estado padrão “Ativo”. ...................................................................... 135
Figura 60: Tela inicial da interface cadastral. ................................................................................... 136
Figura 61: Tela principal do módulo de catálogo. ............................................................................ 137
Figura 62: Cadastro de locais geográficos........................................................................................ 138
Figura 63: Cadastro de órgãos. ........................................................................................................ 138
Figura 64: Cadastro de percursos e respectivas distâncias. ............................................................... 139
Figura 65: Cadastro de meios de transporte e respectivos fatores de custo. ....................................... 139
Figura 66: Telas de cadastro de produto. ......................................................................................... 140
Figura 67: Interface para cadastro de cenários. ................................................................................ 141
Figura 68: Algumas telas do modulo de cenário. ............................................................................. 142
Figura 69: Tela para solicitação de simulações. ............................................................................... 143
Figura 70: Fornecimento de resultados no formato SOAP pelo framework de ACCV. ..................... 144
Figura 71: Custos globais para um grupo de simulações. ................................................................. 145
Figura 72: Custos mensais para uma simulação individual. .............................................................. 145
Figura 73: Consumo de recursos mensais para um grupo de simulações. ......................................... 146
Figura 74: Disponibilidade de uma instância de sistema. ................................................................. 147
Figura 75: Acompanhamento da linha de vida de uma instância de sistema...................................... 147
Figura 76: Análise da movimentação mensal de estoque para um produto........................................ 148
Figura 77: Análise pontual da movimentação de estoque para um produto. ...................................... 148
Figura 78: Criação de aplicativo de linha de comando com C#. ....................................................... 150
Figura 79: Adição do Web Service Java ao sistema em C#. ............................................................. 152
Figura 80: Reconnhecimento do Web Service pelo C#. .................................................................... 152
Figura 81: Codificação para interpretação de parâmetros no Extrator de Resultados ........................ 153
Figura 82: Chamadas ao Web Service de Reultados a partir do C#. .................................................. 154
Figura 83: Adição do elemento COM do Microsoft Excel. ............................................................... 155
Figura 84: Código para ativação da planilha e transferência de resultados. ....................................... 155
Figura 85: Resultado da extração de resultados para o Microsoft Excel. ........................................... 156
Figura 86: Código da classe Java para Sistema de Rede. ................................................................. 159
Figura 87: Código da classe Java para Atividade de Configuração de Rede ..................................... 160
Figura 88: Código da classe Java para Atividade de Reparo com atraso........................................... 161
Figura 89: Modelo para Geração de Eventos no Processo de Manutenção com atraso ...................... 161
Figura 90: Código da classe “ProcessoManutencaoRede”. ............................................................... 162
Figura 91: Código da classe “ManutencaoAtrasoIniciadoState”. ...................................................... 163
Figura 92: Código da classe “ManutencaoAtrasoReparoState”. ....................................................... 164
Figura 93: Ambiente de registro das anotações no framework de ACCV. ......................................... 165
Figura 94: Cadastro de sistema do tipo “Sistema de Rede”. ............................................................. 166
Figura 95: Configuração das atividades extendidas. ......................................................................... 167
Figura 96: Modo de falha com utilização do novo gerador de eventos.............................................. 168
Figura 97: Resultado da simulação para o cenário de sistemas de rede. ............................................ 168
Figura 98: Exemplo de herança no Modelo de Pilla e Cople ............................................................ 197
Figura 99: Exemplo de uso do Java com instâncias de descendentes................................................ 198
Figura 100: Exemplo de polimorfismo no Modelo de Pilla e Cople ................................................. 200
Figura 101: Exemplo de utilização de interfaces na modelagem....................................................... 201
Figura 102: Elementos genéricos como facilitadores na detecção de erros em Java.......................... 206
Figura 103: Exemplo de definição de classe genérica em Java......................................................... 207
Figura 104: Exemplo de utilização de classe genérica em Java ........................................................ 207
Figura 105: Código Java para a lista de falhas simuladas ................................................................. 208
13
Figura 106: Parte do código Java para a classe de lista genérica com suporte a concorrência. .......... 209
Figura 107: Exemplo de anotação definida no framework de ACCV................................................ 210
Figura 108: Exemplo de utilização de anotações no framework de ACCV ....................................... 211
Figura 109: Relacionamento entre Modelo de Referência, Padrão Arquitetural, Arquitetura de
Referência e Arquitetura de Software .............................................................................................. 213
Figura 110: Exemplo de Arquitetura com VisiBroker ...................................................................... 213
Figura 111: Arquitetura Pipes/Filters .............................................................................................. 215
Figura 112: Arquitetura Blackboard ................................................................................................ 216
Figura 113: Domínios do Java Message Service .............................................................................. 217
Figura 114: Estilo Arquitetural de Interpretador .............................................................................. 218
Figura 115: Ambiente Java simples para Internet ............................................................................ 221
Figura 116: Arquitetura PAC (Presentation, Abstraction, Control) .................................................. 222
Figura 117: Código para geração de instâncias ................................................................................ 223
Figura 118: Arquitetura para reutilização de processos .................................................................... 228
Figura 119: Exemplo de código para bean de entidade .................................................................... 232
Figura 120: Exemplo de arquivo de configuração persistence.xml ................................................... 233
Figura 121: Exemplo de inserção de dados no JPA .......................................................................... 233
Figura 122: Exemplo de consulta JP-QL ......................................................................................... 234
Figura 123: Session Beans e Entity Beans em um aplicativo ............................................................ 236
Figura 124: Session Facade no JEE5 ............................................................................................... 237
Figura 125: Modelos de Mensagens com JMS ................................................................................. 238
Figura 126: Fragmentos de código equivalentes nos formatos DTD e XSD...................................... 243
Figura 127: Exemplo de código Java anotado para criação de Web Services .................................... 244
Figura 128: Simulador de Tráfego utilizando DEVS atomizado ....................................................... 259
Figura 129: Simulador de Tráfego utilizando DEVS com acoplamento ............................................ 260
Figura 130: Efeito da falha em E2 para o sistema de exemplo. ......................................................... 263
Figura 131: Operação Normal, sem eventos que causem indisponibilidade ...................................... 264
Figura 132: Eventos com distribuição e duração aleatórias .............................................................. 264
Figura 133: Eventos causadores de indisponibilidade com distribuição definida e duração fixa ........ 265
Figura 134: Efeito sobre um sistema com operação agendada, com deslocamento ........................... 265
Figura 135: Efeito sobre um sistema com operação agendada, sem deslocamento ............................ 265
Figura 136: Representação gráfica do Sistema de Teste. .................................................................. 270
14
LISTA DE TABELAS
LISTA DE EQUAÇÕES
Equação 1 .........................................................................................................................................83
Equação 2 .........................................................................................................................................83
16
1. INTRODUÇÃO
1.1 APRESENTAÇÃO
1.2 OBJETIVOS
1.3 JUSTIFICATIVA
Um sistema de engenharia complexo não pode ser vislumbrado de uma forma simples,
devendo ser planejado de forma adequada, pois mudanças estruturais durante a
operacionalização do mesmo são normalmente caras, quando não impossíveis.
A ACCV é uma disciplina que visa a estimativa dos custos inerentes à construção,
operacionalização e desativação do sistema, ou seja, a sua eficiência, levando a uma melhor
definição das mudanças necessárias, ainda na fase de projeto. Como subproduto, a ACCV
permite avaliar a disponibilidade operacional ou capacidade produtiva de sistemas técnicos
em ambientes operacionais e de apoio logístico complexos.
Nesta área existem softwares de apoio, porém os mesmos, além de não serem
expansíveis, não são adequados a plataformas distribuídas, deixando de tirar proveito das
possibilidades de processamento da Internet, entre outros.
O presente trabalho justifica-se pela necessidade de comprovar a possibilidade e a
utilidade de se criar um sistema computacional expansível que aborde um domínio de
problema específico (no caso a ACCV), com a possibilidade de expansão para novas áreas de
interesse da Engenharia de Sistemas e tenha características de interoperabilidade que
favoreçam a integração dos processos de gestão do ciclo de vida de sistemas técnicos.
Uma versão anterior do framework já havia sido desenvolvida por Cople (2004).
Entretanto ela tinha objetivos muito mais limitados e apresentou os seguintes problemas e
deficiências:
• Não era possível integrar o framework com outras tecnologias, tais como, as
voltadas para a construção de interfaces para usuários, ou outras ferramentas, como
as dedicadas à análise de grandes massas de dados;
• Não era possível integrar o framework com outros sistemas de TI para gestão do
ciclo de vida de sistemas técnicos;
• Análise de resultados deficiente;
• O modelo de geração de eventos não era customizável; e
• Não aproveitava as possibilidades do processamento distribuído.
Não foi objetivo deste trabalho a análise e comparação de modelos para ACCV, pois o
propósito principal do framework é justamente a capacidade de customizar modelos de
cálculo. Por este motivo, o Modelo de Pilla e Cople foi utilizado como padrão.
O modelo de simulação implementado foi por eventos discretos seqüenciais (Discrete
Event Simulation - DES), apenas com processamento paralelo de múltiplas simulações, assim
como as tarefas de I/O são efetuadas de forma paralela, mas não foi objetivo deste trabalho a
implementação de paralelismo interno no que concerne à geração de eventos durante a
simulação (Parallel Discrete Event Simulation - PDES).
Este trabalho não teve por objetivo o estudo e otimização de técnicas de distribuição
de processamento, mas tão somente incluiu a definição de uma arquitetura que tornou
possível efetuar a distribuição de processamento com a qualidade mínima necessária, isto no
intuito de demonstrar as vantagens desta distribuição em termos de tempo de execução e
refino de resultados.
Não foi feita a integração com High Level Architecture (HLA), ou outras integrações
independentes com ferramentas de gestão do ciclo de vida do sistema, pois trataria de um
trabalho muito mais abrangente, porém a criação de Web Services para acesso às
funcionalidades do framework, com a adoção de uma arquitetura orientada a serviços, permite
que qualquer destas integrações seja efetuada com relativa facilidade.
25
Este trabalho utilizou variados referenciais teóricos para que pudesse ser realizado,
pois ele é de natureza claramente interdisciplinar. Esses referenciais são resumidos a seguir.
No intuito de facilitar a leitura do documento por pessoas com diversas formações e
que possam não estar familiarizadas com partes do conhecimento utilizado para elaborar este
trabalho, algumas informações básicas e um pouco mais detalhadas sobre alguns desses
assuntos foram incluídas nos anexos A, B e C.
No capítulo 2 procurou-se mostrar o estado atual de conhecimento sobre esses
assuntos, enquanto que o tema de ACCV mereceu um capítulo especial (Capítulo 3) onde,
também, o Modelo de Pilla Cople é descrito com detalhes.
Estes dois trabalhos e outros abordando o mesmo tema, como Borges (2004), fazem
parte de um projeto de pesquisa mais amplo (Logística Integrada), coordenado pelo Prof.
Eduardo Siqueira Brick.
Maiores detalhes sobre ACCV e o Modelo de Pilla e Cople podem ser obtidos no
Capítulo 3.
1.5.2 Simulação
Entender melhor um sistema nas mais diversas condições permite ao gestor otimizar a
produção de resultados, minimizar custos de manutenção, prever situações críticas e definir
normas de utilização nestes contextos, entre outras possibilidades. No entanto, apenas esperar
as condições de estudo ocorrerem, de forma a prover uma base estatística, poderia demandar
muito tempo, da mesma forma que criar os mais diversos cenários e condições necessárias
para um sistema em funcionamento poderia se tornar muito caro e arriscado, com razoável
possibilidade de perda de produção.
Levando em conta estes fatores, uma solução mais favorável para o estudo
comportamental seria a construção de um modelo idealizado, abstrato (modelo matemático)
ou físico, que permita a criação dos cenários e as análises necessárias com custo muito menor.
Para tratar problemas de alta complexidade, com grande participação de fatores
estocásticos, a simulação computacional apresenta-se como a alternativa adequada. As várias
formas de analisar um sistema podem ser observadas na Figura 1.
Sistema
Experimentos no Experimentos no
Sistema Físico Modelo do Sistema
Modelo Modelo
Físico Matemático
Solução
Analítica Simulação
Existem diversos tipos de simulação, mas o foco de estudo neste trabalho são as
simulações por eventos discretos (DES) e suas variantes com execução em paralelo (PDES).
Estas simulações são formalizadas em termos de modelos do tipo Discrete Event System
Specification (DEVS) e Parallel Discrete Event System Specification (PDEVS).
Simulações por eventos discretos são discutidas na Seção 2.2 e no Anexo C.
Segundo Krueger (1992 p.178), reuso de software é o processo pelo qual se utilizam
artefatos de software já existentes, ao invés de construí-los do zero. Tipicamente, a
reutilização envolve a seleção, especialização, e integração de artefatos, embora diferentes
técnicas de reutilização possam enfatizar ou desaprovar o uso de alguns destes.
A modelagem orientada a objetos representou um grande avanço em termos de reuso,
principalmente devido aos relacionamentos “todo-parte”, onde uma classe pode ser criada a
partir da combinação de outras, e “generalização-especialização”, onde uma nova classe pode
ser criada a partir de outra já existente, expandindo suas funcionalidades para a adequação a
novos contextos.
Apesar de toda a organização promovida pela orientação a objetos, suas vantagens em
termos de reuso podem não ser obtidas quando a técnica é mal utilizada. Neste contexto
surgem os padrões de desenvolvimento.
A idéia inicial dos padrões foi definida por Alexander, Ishikawa e Silverstein (1977),
ao dizerem que “cada padrão descreve um problema que ocorre de forma recorrente, e então
descreve o núcleo da solução para este problema, de tal forma que esta solução pode ser
utilizada um milhão de vezes, sem a necessidade de fazê-lo da mesma maneira duas vezes”.
Existem diferentes definições para padrões de desenvolvimento, mas a idéia básica é a
de que, se uma solução é modelada e aplicada a um determinado contexto, esta solução pode
ser generalizada e utilizada em contextos semelhantes.
Para Gamma, Helm, Johnson e Vlissides (1994 p.12), os padrões de desenvolvimento
visam facilitar a reutilização de projetos bem sucedidos e arquiteturas. Expressar técnicas
aprovadas pelo mercado como padrões de projeto torna este conhecimento mais acessível aos
desenvolvedores de novos sistemas.
28
1.5.5 Interoperabilidade
2.1 INTRODUÇÃO
Lee e Chi (2005) apresentam alguns exemplos simples de modelos DEVS e CDEVS,
os quais constituem a base de complexos controles de tráfego, com a adição de elementos
estocásticos e fatores externos.
Uma forma alternativa para expressar o CDEVS, exemplificada na Figura 3, segue a
seguinte notação:
O modelo CDEVS é amplamente utilizado nos sistemas de simulação, como pode ser
observado nos trabalhos de Fumarola, Seck e Verbraec (2010), Park, Park e Wang (2008),
Zia, Mustafiz, Vangheluwe e Kienzle (2007), Seo (2006), Capocchi, Bernardi, Federici e
Bisgambiglia (2006), além de servir de base para a definição de outros formalismos
derivados, tais como o Cell-DEVS.
36
• Portas são representadas explicitamente, podendo ser qualquer tipo de porta capaz
de enviar e receber valores;
• Ao invés de receber uma entrada simples ou fornecer uma saída simples, o modelo
paralelo trabalha com pacotes de valores; e
• Foi adicionada a função de transição confluente δcon. Esta função decide qual o
próximo estado no caso de colisão entre eventos externos e internos.
Conforme citado por Hagendorf (2009), o modelo PDEVS permite que todos os
componentes na iminência de serem ativados enviem seus sinais de saída para outros
componentes concorrentemente, sendo múltiplas saídas combinadas em um pacote que é
processado por uma função de transição externa. Este pacote é similar a um conjunto,
contendo um grupo desordenado de elementos, mas permite múltiplas ocorrências de um
mesmo elemento.
38
Seguindo a mesma linha, Garrido, Zafra e Vázquez (2009), utilizando outra ferramenta
baseada em objetos (EcosimPro), construíram uma biblioteca de simulação de usinas
hidrelétricas, demonstrando a flexibilidade permitida pela modelagem orientada a objetos, ao
permitir múltiplas configurações com a criação de classes mais complexas a partir da conexão
de componentes atomizados do domínio do problema, ressaltando ainda o reuso propiciado
pela criação de classes.
Estes são apenas dois exemplos de autores que exploraram as possibilidades de reuso
da orientação a objetos na construção de simuladores. No entanto, apesar de toda a
organização e reuso propiciados pela orientação a objetos ter modificado a forma de
concepção dos sistemas contemporâneos, a simples adoção de uma boa metodologia de
modelagem não garante a implementação de um bom projeto.
Os padrões de desenvolvimento surgiram com o objetivo de organizar e formalizar
grande parte do conhecimento obtido na construção de sistemas diversos, definindo soluções
reutilizáveis genéricas, as quais devem ser adaptadas e combinadas para a criação de novos
40
sistemas. Este tipo de reutilização encontra-se em um nível mais estratégico que a simples
metodologia de modelagem da orientação a objetos.
Como definido por Czibula e Czibula (2008 p. 347), o tópico padrões de
desenvolvimento é um clássico moderno na literatura da orientação a objetos, oferecendo
soluções ágeis e elegantes para problemas comuns no desenvolvimento de software. São
descritos padrões para gerenciar a criação de objetos, composição de objetos em estruturas
complexas, e coordenação do fluxo de controle entre objetos.
Para Rypáček, Backhouse e Nilsson (2006 p.13), um padrão de desenvolvimento
representa uma solução preparada para um problema de projeto comum que está facilmente
disponível para os programadores. Além de sua utilidade na fase de codificação, padrões de
desenvolvimento servem também um papel importante na construção de software, descrição
de documentação e comunicação, e, como resultado, tornaram-se bem estabelecidos na prática
de desenvolvimento de software orientado a objeto. Os autores criticam, no entanto, a
ausência de um formalismo mais rigoroso na descrição dos padrões pela literatura.
Segundo Dong, Peng e Zhao (2010 p.1), para usar um padrão de desenvolvimento em
uma aplicação específica é necessário instanciá-lo com as informações de domínio do
aplicativo. Este processo de instanciação pode mudar os nomes genéricos das classes
participantes para refletir as características da aplicação, ou até mesmo a quantidade de
participantes. Entretanto, ainda segundo o autor, tais mudanças não são arbitrárias e têm de
respeitar as limitações do padrão de desenvolvimento.
O uso de padrões de desenvolvimento na área de simulação pode ser observado em
diversos trabalhos como, por exemplo, Wang, Yuan e Li (2010), Zheng, Zheng, He e Han
(2009), Liu, Huang e Han (2009), Breit et al. (2008), Capocchi, Bernardi, Federici e
Bisgambiglia (2006), Chang e Lee (2005), Gustavson, Morse, Lutz e Reichenthal (2004),
Nguyen, Ricken e Wong (2004).
Particularmente, no trabalho de Hamri e Baati (2010), é sugerido um conjunto de
padrões de desenvolvimento para a implementação de DEVS. Entre os padrões citados pelo
autor encontram-se:
boas ou ruins, e finalmente, cada problema pode ser considerado como um sintoma de outro
problema. Ainda segundo os autores, arquitetura de software não é uma disciplina isolada, e
as decisões são construídas em parte pela adaptação de soluções para problemas encontrados
em outros lugares.
Gardazi e Shahid (2009 p.402) alertam que as empresas não devem subestimar a
importância do arquiteto de software. Isto se deve ao fato de que uma arquitetura adequada é
crucial para a correta implementação de todas as funcionalidades do sistema, além do que a
adoção de arquiteturas padronizadas facilita a manutenção e utilização de ferramentas de
produtividade.
A organização de um software em termos arquiteturais é uma decisão que irá interferir
em todas as fases de concepção e implementação do sistema, definindo os tipos de
componentes que poderão ser utilizados, como estes componentes deverão ser integrados,
além da forma como este sistema poderá interagir com usuários, recursos externos, serviços e
outros sistemas.
A arquitetura Model-View-Control (MVC) é uma das mais adotadas na definição de
sistemas da atualidade, caracterizando-se por dividir o aplicativo em três camadas:
Para Dalle, Ribault e Himmelspach (2009 p.947), o padrão MVC pode ser usado na
simulação para descrever a dependência entre uma visualização em tempo de execução
(interativa), o modelo executável, e o algoritmo de simulação, permitindo, por exemplo,
diferentes visualizações simultâneas sobre o modelo a ser criado.
Sridaran, Padmavathi, Iyakutti e Mani (2009 p.64), citam as seguintes vantagens na
adoção da arquitetura MVC:
os desenvolvedores escolhem quais componentes são mais eficazes para a resolução dos
requisitos e, em seguida, tentam resolver o maior número de inadequações mediante
adaptação dos selecionadas, o que leva a uma metodologia de escolha onde devem ser
considerados o custo de adaptação e a eficácia de cada COTS.
O conceito de COTS não é novo, sendo amplamente utilizado em setores industriais
como eletrônicos, telefonia, e automotivo, entre outros, e acabou por se demonstrar essencial
na concepção dos atuais sistemas computacionais, levando em consideração a complexidade
destes sistemas, fatores ligados a interoperabilidade, e necessidade de padronização entre
diferentes equipes de desenvolvimento.
Em termos de software, a divisão em camadas do MVC permitiu a criação de
ferramentas COTS voltadas para a resolução de problemas genéricos em cada um dos três
níveis, viabilizando a rápida combinação destas ferramentas no processo de construção do
aplicativo, o que diminui o tempo e o custo de desenvolvimento, além de aumentar a
qualidade final dos sistemas produzidos.
Hoje em dia ocorre uma preocupação muito grande acerca da escolha dos COTS
adequados, levando em conta fatores como confiabilidade, manutenibilidade, eficiência,
eficácia e longevidade do componente. Trabalhos de autores como Jha, Arora, Kapur e Kumar
(2010), Gupta, Mehalawat e Verma (2010), Wanyama e Far (2008), demonstram esta
preocupação na escolha de COTS, ao definirem metodologias diversas para este fim.
Particularmente quanto à longevidade do componente, existem preocupações acerca da
freqüência de reposição devido à obsolescência, devendo ser levado em conta a existência de
similares e o custo efetivo para substituição no decorrer do ciclo de vida do sistema, como
pode ser observado no trabalho de Concho, Ramirez-Marques e Herald (2009), onde é
definido um modelo para o planejamento da evolução do sistema com o objetivo de
minimizar os custos, baseado na análise do ciclo de vida individual de componentes COTS
com funcionalidades similares.
Os vários frameworks disponibilizados no mercado de software, como o Java
Enterprise Edition (JEE) e o Java Persistence Architecture (JPA), são bons exemplos de
componentes do tipo COTS. Cada framework resolve apenas um domínio específico, como
persistência, controle de serviços transacionais, apresentação visual, etc, e os desenvolvedores
precisam saber como combiná-los na concepção de um novo sistema. É importante conhecer
também a aceitação do framework pelo mercado, pois isto irá definir sua longevidade e
manutenibilidade.
46
2.5 INTEROPERABILIDADE
Segundo Searle e Brennan (2007 p. 3-6), assumindo que o reuso é adequado e viável
para a modelagem e simulação, pode-se observar que interoperabilidade e reutilização estão
intimamente relacionadas. A fim de reutilizar um determinado componente em um sistema
mais amplo, deve-se assegurar que ele possa interagir com os outros elementos do sistema
(pelo menos aqueles com os quais deve trocar dados e informações).
Para Chen, Vallespir e Daclin (2008 p. 2), a interoperabilidade pode abranger quatro
níveis, basicamente, dentro de um sistema corporativo:
Normas como ANSI/EIA 632, ISSO/IEC 15228, ISO 19760 e IEEE/EIA 12207 se
referem ao que fazer, prescrevendo o ciclo de vida de sistemas técnicos, quais processos
devem ser desenvolvidos e o que deve ser feito em cada fase do ciclo de vida (foco nos
processos da Engenharia de Sistemas).
Normas como CMMI e ISO 15504 preocupam-se com o quão bem foi feito,
prescrevendo maneiras de avaliar a qualidade com que as instituições envolvidas estão
desenvolvendo sistemas técnicos (foco na capacidade e qualidade para executar os processos
da Engenharia de Sistemas).
Com relação à identificação dos dados, normas como ISO 13303 prescrevem maneiras
de representar dados relativos a entidades e atributos do sistema e do processo de Engenharia
de Sistemas, para fins de automação e troca de informações entre programas, instituições e
agentes envolvidos no processo (foco em informação).
Finalmente, para a modelagem e representação dos sistemas técnicos, normas como
OMG SYSML e DODAF prescrevem maneiras de representar, através de símbolos e
imagens, atributos e características do sistema técnico, abrangendo todas as visões, desde
requisitos, passando por funções e arquitetura, até detalhamento de componentes (foco em
linguagem).
A Figura 8 apresenta um quadro comparativo entre algumas das normas disponíveis
com foco no processo.
52
Mesmo que Web Services forneçam um meio padrão de comunicação entre todos os
componentes, o que por si só permite a distribuição do processamento, a diversidade de
ambientes oferecida permite que cada componente busque sua própria metodologia de
otimização no que tange aos aspectos da implementação dos serviços oferecidos pelo mesmo.
Em termos de simulações, os cálculos podem ser muito complexos e demandar um
tempo demasiado longo para sua execução, muitas vezes inviabilizando o próprio modelo de
simulação. Neste âmbito, a busca de meios que permitam melhor utilização da base
computacional existente leva a uma nova interpretação desses modelos, com a detecção de
procedimentos independentes que possam ser executados em paralelo ou distribuídos em rede.
No trabalho efetuado por Byrne, Heavey e Byrne (2010) pode ser encontrada uma
comparação entre as diversas tecnologias disponíveis para a construção de ambientes
distribuídos na Web.
55
No framework original criado por Cople (2004), para a resolução de problemas na área
de ACCV, foram adotadas algumas premissas:
Os detalhes acerca do modelo alterado, que passou a ser denominado Modelo de Pilla
e Cople, podem ser observados no Capítulo 3, sendo aqui descritos apenas aspectos
arquiteturais e funcionais do framework original.
Foi adotado um modelo de execução seqüencial, e o uso de processos paralelos para a
execução de múltiplas simulações simultaneamente, mas cada simulação atuava de forma
monolítica, onde os processos de I/O ocorriam em meio a cada execução individual, o que fez
com que as possibilidades de paralelismo não fossem realmente aproveitadas.
O framework original trabalhava com três níveis de abstração:
O acréscimo de classes, nessa versão inicial do framework, apenas podia ser efetuada
com a utilização de eXtended Markup Language (XML). O processamento deste arquivo pelo
framework permitia gerar e compilar uma nova classe, além de guardar suas características
estruturais no banco de dados, o que viabilizava a geração de objetos de catálogo através da
interface de cadastramento, sem alteração da codificação da mesma.
A utilização de arquivos XML permite a criação de elementos do primeiro nível,
enquanto a interface de cadastramento gera elementos do segundo nível e a simulação, por
fim, gera elementos do terceiro nível. No segundo e terceiro níveis a reflexividade é
amplamente utilizada, fato que levou a eleger a linguagem Java para a construção do
software.
O fluxo de utilização baseava-se em quatro passos:
1. Extensão do framework;
2. Cadastro de dados de catálogo;
3. Construção de cenários; e
4. Execução de simulações e análise de resultados.
Para dar suporte a este fluxo, o framework original apresentava quatro módulos
principais: Integração, Catálogo, Interface e Simulação.
O módulo de integração é o nível mais baixo da arquitetura, trabalhando com
elementos de persistência, reflexividade e interpretação de arquivos XML, encapsulando o
acesso a banco de dados e a criação de classes, além de fornecer muitas funções utilitárias
para outros módulos.
O módulo de catálogo engloba as classes de entidade participantes dos cadastros e dos
processos de cálculo, delimitando as propriedades e o comportamento dos elementos
envolvidos na simulação.
O módulo de interface compreende os arquivos JSP e pacotes de conversão
necessários à criação de telas cadastrais dinâmicas no formato Web, permitindo a entrada e
visualização de informações de catálogo, persistidas por intermédio do módulo de integração.
Também é nesta interface dinâmica que os cenários são construídos e as simulações
requisitadas.
O módulo de simulação utiliza os dados armazenados na interface, assim como o
cenário criado na mesma, através de instâncias de objetos das classes do catálogo, para efetuar
as simulações e armazenar os resultados obtidos. Toda a comunicação com banco de dados
envolvida no processo é controlada pelo módulo de integração.
Estes resultados eram observados posteriormente através de sistemas extratores
criados em Delphi, com acesso direto à base de dados, mas isto provou ser uma estratégia
inadequada de visualização, sendo considerado um dos pontos mais frágeis do framework
original.
59
Essa arquitetura já havia sido descrita por Cople e Brick (2010 p.17), podendo ser
observada na Figura 11.
Sentido de Utilização
2.8 CONCLUSÕES
3.1 INTRODUÇÃO
Segundo Fuller e Petersen (1996 p.1-1), a ACCV pode ser definida como uma
metodologia de avaliação econômica de projetos, na qual são considerados todos os custos
relativos à aquisição, desenvolvimento, operação, manutenção e desativação, desde que os
mesmos sejam considerados potencialmente importantes para uma tomada de decisão.
Para Waghmode e Sahasrabudhe (2008 p. 745), a competitividade global está
obrigando as empresas manufatureiras a estimar e otimizar o custo total do ciclo de vida do
sistema com relação ao desempenho, segurança, manutenibilidade e confiabilidade.
Segundo Kshirsagar, El-Gafy e Abdelhamid (2010 p. 171), o uso de ACCV pode ser
considerado como um ferramental para gestão de ativos, porém um sistema de gestão de
informações deve ser cuidadosamente desenvolvido, e o procedimento de coleta de dados
adequado deve ser colocado em prática para que se obtenham resultados precisos.
Autores como Deutsch (2010), Kaenzig e Wüstenhagen (2010), Goedecke,
Therdthianwong e Gheewala (2007), Liebermann e Ungar (2002), defendem também a
perspectiva do consumidor, transformando a divulgação do CCV de produtos industrializados
em um elemento de marketing, ao fornecer parâmetros comparativos, os quais acabam por
aumentar a competitividade entre as empresas no que tange a aspectos de seus produtos como
custo de utilização, tempo para obsolescência, confiabilidade, estrutura de manutenção
disponível, ou impactos ecológicos. Isto no Brasil pode ser observado, por exemplo, em
termos das classificações do INMETRO para consumo energético de eletro-domésticos.
Os projetos considerados nesse trabalho são aqueles referentes ao desenvolvimento e
aquisição de ativos físicos (sistemas técnicos) destinados a implementar processos produtivos
com as mais diversas finalidades. São exemplos desses sistemas os meios de defesa
66
(aeronaves, embarcações, viaturas, armas, sensores, etc), os meios de transporte para uso civil,
as unidades fabris, as unidades de exploração de minerais, etc..
Basicamente, o CCV pode ser entendido como um somatório de todos os custos
envolvidos na concepção, projeto, desenvolvimento, construção, operacionalização, operação,
manutenção, modernizações e desativação de um sistema. Ou seja, os custos incidentes sobre
um sistema durante todas as fases do seu ciclo de vida. Os custos que são computados
dependem em grande medida do tipo de usuário da ACCV. De uma maneira geral existem
três categorias de interessados nesse tipo de análise.
A primeira categoria envolve instituições que especificam, contratam o
desenvolvimento e adquirem sistemas para seu uso muito exclusivo (tais como forças
armadas, empresas petrolíferas e de geração de energia). Para esses usuários praticamente
todos os custos relacionados a um produto, desde a fase de concepção até a desativação são
relevantes.
Uma segunda categoria é a das instituições que adquirem produtos existentes no
mercado para montar os seus processos produtivos (tais como empresas de transporte aéreo,
marítimo ou terrestre e empresas de telecomunicações). Para essas, os custos das fases iniciais
do ciclo de vida, desde a concepção inicial do produto até a sua fabricação, estão embutidos
no custo de aquisição e não precisam ser considerados com maior detalhe.
Finalmente, a última categoria é a das instituições que concebem, desenvolvem e
produzem produtos para o mercado e têm que montar estruturas pós-venda para apoiar seus
clientes e garantir seus produtos. Para esse tipo de usuário os custos de operação e desativação
não são muito relevantes.
As principais características desse domínio de problema específico foram mapeadas
por Pilla (2003) e Cople (2004) através de um modelo no qual podem ser destacados três
elementos principais:
Recurso ref.
Próprios Terceiros
com põe
Config uraçã o_Prod uto Serviços Tipos de Serviços
Numerário Mão de Obra M issão do Produto Produto
1..* 0..* 1..*
0..*
Mi ssão Pri ncipal Missão de Apoio Seguros Aluguel Produtos Serv. Manut enção Transportes Obtenção Armazenagem Consultoria Especializada
Sistemas Hardware Softwares Documentos Instalações Itens de Consumo Embalagens Aéreo Marítimo Rodoviário Ferroviário Pipeline
Segundo o modelo, produtos podem ser compostos de outros produtos, o que pode ser
verificado na agregação “Configuração_Produto”, o que permite a criação de estruturas
hierárquicas (“árvores de produtos”).
Um “sistema” seria compreendido como o topo da hierarquia, comumente sendo
composto em um primeiro subnível por “equipamentos”. Esta não é uma restrição, pois o
sistema pode englobar também “instalações”, ou qualquer outro tipo de “produto” neste
subnível. O que caracteriza um “sistema”, de fato, não seria sua composição, mas sim, o
comprometimento com a missão principal, manufatura ou apoio.
Para Pilla, um “equipamento” pode ser entendido como um conjunto de componentes
(“partes” e “softwares”) que, normalmente, não é retirado de seu local de instalação para ser
submetido a reparos. O seu reparo pode ser feito no próprio local onde está instalado, por
meio da substituição de partes. Um “equipamento” é responsável pela execução de alguma
função específica numa aplicação (“sistema”).
70
No modelo de Pilla e Cople existe uma classe principal para a modelagem dos modos
de falha, associando um produto a uma falha, a qual ocorre segundo uma distribuição
associada para aquele produto. Dada a ocorrência da falha, esta leva a um processo de
manutenção envolvendo um conjunto de atividades para o produto, incluindo a atividade de
reparo, cada qual com duração definida a partir de distribuição específica.
Segundo Pilla (2003 p.93), a ocorrência de uma falha pode impactar de diversas
formas o desempenho, não só do “produto” onde ocorre, mas, também, do sistema como um
todo. Exemplos desses impactos são:
Define-se como “modos de falha” as diferentes formas com que um componente pode
falhar ao executar determinada função do sistema. Como um sistema é composto de diversos
componentes, e os mesmos podem apresentar diferentes “modos de falha”, estas falhas podem
impactar no funcionamento não apenas do componente, mas do sistema como um todo.
73
Neste modelo, atividades sobre determinados produtos geram modos de falha e estes
modos de falha geram novas atividades, tal como a operação do sistema, que causa falhas no
funcionamento dos componentes, gerando demanda para órgãos mantenedores, os quais
deverão efetuar atividades no sentido de restabelecer a operação do sistema inicialmente
citado. O diagrama de classes para “modos de falha” pode ser observado na Figura 15.
Vale lembrar que, apesar de todo modo de falha ser causado por uma atividade, nem
toda atividade é iniciado por um modo de falha. Podem-se citar as atividades de
desenvolvimento e operação, as quais não dependem de uma falha do componente para serem
iniciadas.
Devido à aleatoriedade da ocorrência dos modos de falha, assim como de outros
elementos do modelo, surgiu também a necessidade de se construir classes para obtenção de
instantes aleatórios. Cople (2004) definiu a classe “Distribuicao”, que tem como objetivo
único o fornecimento de instantes de tempo segundo uma distribuição estatística especificada.
Esta classe é um elemento abstrato, apenas definindo o comportamento padrão de suas
descendentes, as quais caracterizam e parametrizam as diferentes distribuições consideradas
nas simulações.
74
Um exemplo de modo de falha pode ser observado na Figura 16, onde é apresentada a
interface cadastral para os modos de falha.
• Disponibilidade Inerente;
• Disponibilidade Alcançável; e
• Disponibilidade operacional.
3.4 ATIVIDADES
Uma atividade pode ser definida como um conjunto de ações a serem praticadas sobre
determinado produto, envolvendo recursos e tempo para a execução das mesmas. Entre as
ações executadas, podem ser encontradas outras atividades, permitindo uma organização
hierárquica das mesmas.
Segundo Pilla (2003 p.85), as atividades do nível mais analítico na estrutura
hierárquica são compostas por tarefas, que consistem nas unidades mais elementares de
trabalho a ser executado para o alcance de um determinado fim.
Cople (2004) considera as atividades como elementos atomizados, não se permitindo a
composição de atividades por outras atividades, como ocorria no modelo original. No caso da
necessidade de atividades subseqüentes, estas têm que ser seqüencializadas segundo um
modelo de eventos próprio.
Isto não significa dizer que uma atividade estaria resumida ao nível de uma tarefa. Na
verdade, tarefas aqui são definidas como ocorrências pontuais distribuídas ao longo do tempo,
e ocorrendo de forma “instantânea”, tal como pousos e decolagens, ou tiros disparados, e
serão importantes na definição do instante em que devem ser efetuadas algumas manutenções
preventivas baseadas na quantidade de tarefas executadas.
Com esta atomização das atividades, elas passaram a ser classificadas de acordo com a
seguinte divisão:
Tabela 2: Classificação de algumas das atividades do modelo, segundo os três tipos principais
Atividades sobre elementos virtuais são aquelas que ocorrem antes da aquisição dos
produtos relacionados, pois até este momento não existe uma ocorrência física dos mesmos,
não permitindo o acompanhamento de seus estados ao longo do ciclo de vida. Exemplos
típicos são: desenvolvimento, projeto, e solicitação de produtos (aquisição). Este modelo
considera que os produtos passam a ter uma conotação física após a atividade de aquisição.
Encontrando-se os produtos instanciados, estes estão sujeitos às atividades
programadas, programação esta baseada em regras pré-estabelecidas, tais como “Manutenção
preventiva a cada 2000 horas”, ou “Instalação na data de 02/05/2000”.
Além de estarem sujeitos às atividades programadas, os produtos cumulam horas de
operação, estando sujeitos a falhas e conseqüentes manutenções corretivas, e até mesmo, a
manutenções previstas para determinados tempos de operação. Exemplos típicos são: “LRU11
apresenta falha com MTBF=2000”, ou “Manutenção preventiva do equipamento E1 a cada
500 horas de utilização”.
Este último tipo de atividade, que é aquela decorrente do uso, depende de um
acompanhamento preciso de toda a vida do produto, observando-se os momentos em que o
mesmo está operando, para correta contabilização do tempo acumulado de operação. Esta
79
3.5 ÓRGÃOS
Pilla (2003, p. 87) define “Órgão” como uma entidade ou unidade organizacional
qualquer, própria ou de terceiros, que pode demandar e/ou executar atividades ao longo do
ciclo de vida de um sistema.
Ainda segundo o autor, o conceito de “Órgão” não se limita à definição das unidades
de operação e manutenção, mas sim, refere-se às diversas unidades onde devem ser alocados
os custos envolvidos no projeto (esse conceito pode entendido como “centros de custos”).
Diferentes órgãos apresentam diferentes finalidades e executam diferentes funções,
conforme pode ser observado no modelo original de Pilla, onde foi definido o conceito de
“Tipo de Órgão”, classificando-os de acordo com sua natureza, tal como: “Órgão de
Operação”, “Órgão de Projeto”, etc. Ao contrário do modelo original de Pilla, onde cada
organização deveria responder a apenas um perfil, para Cople as organizações podem
satisfazer a um conjunto de perfis. Este modelo pode ser observado no diagrama de classes da
Figura 18.
• Aumentos Salariais;
• Aumentos dos Custos de Matérias-Primas; e
• Estrutura de Mercado (monopólios e oligopólios).
83
Onde:
i = taxa de inflação estimada por período;
n = período em que ocorre o custo.
Outro aspecto que tem influência sobre a ACCV é o desconto. A técnica usada,
segundo Langford (1995), é a de valor presente, levando em conta uma taxa de desconto, a
qual representa a importância dada ao tempo pelo tomador de decisão no que diz respeito ao
recebimento do dinheiro.
Descontos são utilizados quando o gasto será efetuado em um prazo maior que a
disponibilidade efetiva do dinheiro, de forma que o mesmo poderá ser redirecionado para
outros tipos de investimento, levando a uma diminuição do valor relativo do custo.
Onde:
d = taxa de desconto por período;
n = período em que ocorre o custo.
Segundo Pilla (2003, p.100), o “modelo de tratamento financeiro” tem por objetivo
permitir que os valores dos custos estimados sejam ajustados considerando-se a técnica
financeira apropriada.
84
A soma de todos os custos ajustados irão definir a melhor projeção do gasto total com
o sistema ao longo de todo o seu ciclo de vida, além de permitir estimar o fluxo de caixa dos
gastos referentes ao mesmo.
Custos não ocorrem da mesma forma para todas as atividades, ou mesmo dentro da
própria atividade. Foi considerado neste modelo que os custos ocorrem segundo curvas de
distribuição ao longo do tempo para cada recurso consumido em termos de utilização,
enquanto a aquisição e os custos tabelados de transporte ocorrem de forma pontual, no início
da execução da atividade.
Estando todos os custos distribuídos ao longo do tempo, estes podem ser divididos nos
intervalos determinados para desconto, tendo seu valor recalculado e passando a determinar o
que foi denominado “Átomo de Custo”.
Os átomos de custo irão permitir definir o fluxo de caixa, cálculo de valor presente, e
outros, funcionando como fonte de informação para grande parte dos relatórios financeiros
obtidos a partir das simulações.
85
Segundo Blanchard e Fabricky (1986), uma CBS deve apresentar, pelo menos, as
seguintes características:
Outras formas de construção podem ser propostas, sem que seja desvirtuada a
finalidade principal da CBS, que é a de agrupar os custos e prover a visão estratégica dos
mesmos para todo o período considerado durante o ciclo de vida do sistema.
Para Kamauchi e Rausand (1999, p.12), a estrutura de custos deve ser definida a partir
de três eixos independentes, a saber: Fases do Ciclo de Vida, Categorias de Custo e Estrutura
de Decomposição de Hardware. Esta é uma construção particularmente interessante, pois
permite considerar a variação de um tipo específico de custo ao longo do tempo.
A visualização defendida pelos autores pode ser observada na Figura 22.
Estrutura de
Decomposição de
Hardware
Mão de Obra
Componente
Fases do Ciclo de
Vida Projeto e Exemplo de um elemento de
custo: “Custo de Mão de Obra
Desenvolvimento na fase de Projeto &
Desenvolvimento do
Componente X.
O Modelo de Pilla e Cople segue a organização proposta por Brick e Borges (2004),
mas leva em consideração o fato de que cada atividade está relacionada aos modelos de
cálculo. Além disto, considera que cada Atividade tem um órgão gerador da mesma e um
órgão executor, sendo que o solicitante sempre arca com os custos.
A Figura 23 apresenta uma CBS de exemplo, criada através da interface cadastral do
novo framework.
• Da distância percorrida;
• Do tipo de transporte utilizado;
• Das características do item transportado (peso, volume, valor, etc.); e
• Do tipo de recurso transportado.
• Os parâmetros gerais que devem ser considerados (por exemplo, “tempo de ciclo
de vida do projeto”, “data de início do projeto”, “taxa de inflação”, “taxa de
desconto”, etc.);
Ambas as estruturas podem ser observadas no modelo de classes da Figura 25, onde
são resumidas nos relacionamentos referentes a manutenção (mantém, é mantido) e
abastecimento (abastece, é abastecido).
91
atividades que podem ser geradas no órgão. As possibilidades de geração de atividades pelo
Orgao1 e execução das mesmas pelo Órgão2 serão expressas pela classe de relacionamento
“Atividade_Produto_Orgao1_Orgao2_Cenario”.
Segundo Pilla (2003), entende-se por “evento” uma ocorrência de execução de uma
“atividade”, relacionada a um “produto”, num determinado instante do tempo do ciclo de
vida. Um “modelo de geração de eventos” é utilizado na previsão dos instantes de tempo de
ocorrência dos diversos eventos relacionados a uma atividade ou, mais genericamente, da
quantidade de eventos a serem executados num determinado intervalo de tempo.
A Figura 28 exibe as classes básicas do modelo de geração de eventos.
Modelo de Eventos
Atividade Data Determinado Determinado Aleatório Aleatório Falha Operação
por Tempo por Uso por Uso por Tempo
Projeto Sim Sim Não Não Não Não Não
Aquisição Sim Sim Não Não Não Não Não
Manufatura Sim Sim Não Não Não Não Não
Instalação Sim Sim Não Não Não Não Não
Operação Não Não Não Não Não Não Sim
Treinamento Sim Sim Não Não Não Não Não
Atualização Sim Sim Não Não Não Não Não
Manutenção Não Sim Sim Sim Sim Não Não
Preventiva
Manutenção Não Não Não Não Não Sim Não
Corretiva
Descarte Sim Sim Não Não Não Sim Não
96
Para a execução de atividades, são consumidos recursos, como por exemplo, horas de
trabalho de técnicos durante a manutenção, documentação necessária às atividades de
desenvolvimento, ou a utilização de embalagens específicas no transporte de componentes.
Um “modelo de consumo de recursos” define a forma como os recursos serão
utilizados ao longo da execução das atividades. Segundo Pilla (2003, p. 98), este modelo é
utilizado na previsão da quantidade total a ser consumida de um determinado recurso na
execução de um evento. Essa quantidade é representada nos objetos da classe
“RecursoRequerido_AtividadeProduto”, como pode ser observado na Figura 31.
RecursoRequerido_AtividadeProduto
O único aprimoramento feito por Cople (2004) com relação ao “modelo de consumo
de recursos” foi a caracterização da utilização do recurso, sendo a mesma explicitada a seguir:
Para Pilla (2003 p.99), um “modelo de custo de recursos” é utilizado na previsão dos
valores relativos a um “rec_ativ_prod_org1_org2_cen” na execução de um evento, utilizando,
em geral, os resultados do “modelo de consumo de recursos” (ou seja, a quantidade de recurso
a ser consumida na execução de um evento) e os multiplicando pelo custo unitário de
aquisição (atributo do “recurso”), como pode ser observado na Figura 32.
Elementos de Custo
Os custos aferidos pelo “modelo de cálculo de custo” ocorrem, de uma maneira geral,
durante todo o intervalo de tempo de duração da atividade. Este custo é obtido pelo valor do
recurso multiplicado pelas horas de utilização, para recursos que dependem do tempo, ou
quantidade adquirida do recurso multiplicado pelo preço de compra, para recursos que são
gastos durante a atividade, independentemente do tempo.
Para o caso dos recursos que não dependem do tempo, estes têm seu custo
determinado no instante inicial da atividade, tratando-se de um gasto pontual, enquanto o
custo de recursos que dependem do tempo, como o caso de mão-de-obra, por exemplo, onde
ocorre um instante inicial e um período de utilização, o custo deve ser distribuído ao longo do
intervalo segundo uma curva de distribuição de custos.
102
A operação do sistema é apenas uma das atividades analisadas para cálculo de ACCV,
e refere-se ao período em que o sistema está disponível e produzindo algo. As demais
atividades e sua influência sobre a operação definirão a variação do custo original de
produção.
Segundo Pilla (2003), pode-se dividir as atividades relacionadas ao sistema em três
grandes grupos:
4.1 INTRODUÇÃO
Embora o Modelo de Pilla e Cople ainda seja a referência básica para a criação do
novo framework, foram efetuadas profundas mudanças em relação à versão original no que
tange ao estilo de programação, arquitetura de software e distribuição de processamento.
A mudança no estilo de programação, com a incorporação de elementos genéricos e
anotações, objetivando aumentar o nível de reuso, assim como a adoção de padrões de
desenvolvimento de forma pontual, trouxe a necessidade de uma completa reestruturação do
código original, mas os conceitos principais foram mantidos nesta nova abordagem.
O novo framework apresenta os mesmos níveis de abstração do original, bem como se
utiliza amplamente da reflexividade, porém uma novidade aqui é a utilização do padrão de
desenvolvimento Factory Method para o encapsulamento dos processos reflexivos, o que
proporciona a centralização destes processos, facilitando o uso e a manutenção.
Outra característica relevante é que, com a mudança na forma de programação da nova
versão, as classes nativas foram modificadas e, conseqüentemente, os arquivos XML não são
mais necessários para a adição de novas classes, passando a ser utilizadas anotações na
extensão do novo framework.
Em termos arquiteturais, houve grande preocupação em organizar as classes
internamente, dentro de uma arquitetura MSVC, bem como em oferecer meios que viabilizem
a interoperabilidade.
Ao contrário da versão antiga, onde existia apenas a interface cadastral criada em
Java, o novo framework está aberto para o desenvolvimento de interfaces cadastrais
customizáveis em qualquer linguagem, visando aumentar a interoperabilidade e o reuso da
ferramenta como gestora de dados e processos de cálculo. Este novo comportamento foi
obtido com o uso de Web Services.
106
Sentido de Utilização
Sentido de Utilização
Sentido de Utilização
Sentido de Utilização
Sentido de Utilização
Sentido de Utilização
É através desses metadados que as telas cadastrais são criadas de forma dinâmica,
possibilitando grandes avanços estruturais sem a necessidade de esforços computacionais
referentes às interfaces. É conveniente lembrar que a busca por ambientes com maior
usabilidade e qualidade gráfica acaba por demandar esforços computacionais para o design
que podem se sobrepor àqueles ligados ao negócio em si, e isto não é uma exceção.
114
1. Cliente ativa o módulo ouvinte, registra sua presença no servidor RMI e fica
disponível para receber solicitações de execução;
2. Um lote de simulações é iniciado e os clientes contatados;
3. Cada cliente contatado verifica sua versão das classes especializadas e atualiza o
que for necessário, fazendo download da versão mais atual de cada arquivo binário
cadastrado;
4. Estando atualizado, o cliente inicia o módulo de execução, o qual solicita o cenário
ao servidor;
5. Após o servidor enviar o cenário, passa a delegar tarefas para os clientes,
fornecendo apenas a semente de randomização e o identificador da tarefa para cada
simulação a ser executada;
6. Para cada semente recebida o cliente inicia uma tarefa para execução da simulação,
aproveitando o paralelismo da máquina;
7. O servidor é informado do andamento de cada tarefa, levando em consideração o
instante do evento simulado em comparação ao tempo total simulado, para cada
ponto percentual executado; e
8. Ao final de cada simulação executada os resultados são transferidos para o
servidor.
115
O último serviço (RRS) recebe os dados simulados após o término de cada simulação
individual, replicando-os na camada de persistência, de forma a permitir as análises
visualizadas na interface cadastral.
O serviço RRS inicialmente seria uma parte do CSE, mas foi verificado que isto
interferia no acompanhamento das execuções de forma negativa, causando muitos atrasos na
atualização do estado de cada simulação. Por este motivo foi criado um serviço independente
para esta finalidade.
O serviço GSR se comunica com o “UtilServer” para a recepção dos dados do cenário
da simulação desejada, bem como informações do grupo de simulações e registro de controle
para cada simulação individual, enquanto o RRS acessa este Web Service para a transmissão
dos dados obtidos ao término de cada simulação independente. Quanto ao CSE, este utiliza o
“UtilServer” apenas para atualizar a evolução de cada simulação individual, de forma a
permitir o acompanhamento pela interface cadastral.
Este acabou por ser um bom exemplo de uso da interoperabilidade promovida pelos
Web Services, desta vez não entre diferentes linguagens de programação, mas entre dois
ambientes Java distintos: Java Enterprise Edition (JEE) e Java Standard Edition (JSE).
Com relação à cópia das bibliotecas de extensão para o cliente (passo 3 da estratégia
inicial), esta ainda não foi implementada e consta como uma das futuras evoluções a serem
efetuadas para o módulo cliente, mas isto não impede a execução das simulações, devendo
apenas ser observada a necessidade de se copiar as bibliotecas para os clientes, o que pode ser
feito através de simples arquivos script para cada sistema operacional.
Estas bibliotecas de extensão são normalmente pequenas, contando apenas com as
classes de modelo especializadas, já que o pacote de classes nativas (EngineACCV.jar) não é
alterado sem a disponibilização de uma nova versão do framework.
A arquitetura de processamento distribuído desenhada ao final do desenvolvimento
pode ser observada Figura 40.
117
Sentido de Utilização
Uma possibilidade que não foi implementada no decorrer deste desenvolvimento foi a
utilização do PDEVS, que diferente do DEVS utiliza o paralelismo aplicado internamente ao
processo de simulação, pois foi descartado qualquer ganho nesta estratégia devido às
múltiplas necessidades de correções nos dados quando eventos ocorrem fora da ordem
cronológica esperada. Além disto, como o framework é muito aberto, permitindo criação de
novas classes para os mais diversos pontos de flexibilização, não foi encontrada ainda uma
forma de determinar um processo paralelo interno genérico que comporte todas as variações
possíveis. As simulações do tipo DEVS e PDEVS são discutidas na Seção 2.2 e no Anexo C.
120
Juntamente com a anotação de dados básicos, outras anotações devem ser utilizadas,
dependendo do ponto de extensão solicitado, como a anotação “AtividadeACCV”, exibida na
Figura 44, a qual requer o preenchimento de propriedades booleanas indicando se a atividade
pode ser executada sobre elementos virtuais ou instanciados, se trabalha com horas de
operação ou tempo corrido em calendário, entre outras informações.
Figura 48: Entradas criadas no banco para reconhecimento da atividade e suas propriedades.
124
Muitas das classes do framework antigo foram identificadas como sendo elementos
processuais, e sua modelagem mostrou-se inadequada aos novos padrões de mercado, onde
processos reutilizáveis devem ser modelados em termos de elementos genéricos.
Um exemplo é o processo de armazenamento de dados locais com uso de JPA, que
acabam por se tornar repetitivos e não precisam ser reprogramados sempre. Foi criada uma
denominada “GenericDAO”, a qual visa determinar um padrão de desenvolvimento DAO
reutilizável, e cujos métodos podem ser observados na Figura 49.
Figura 51: Classe para listas de objetos JPA com gravação em background.
128
Existem muitas outras partes do código que comportam esta mudança de estilo, o que
acaba por trazer um nível maior de complexidade no que tange à definição das classes
genéricas, mas grande simplicidade na utilização em desenvolvimentos posteriores, o que
pode ser visto claramente nos exemplos descritos. Maiores detalhes sobre o uso de elementos
genéricos podem ser obtidos na Seção 2.3 e no Anexo A.
Não é objetivo deste trabalho explicar todos os pontos das mais de trezentas mil linhas
de código do framework que utilizam elementos genéricos, mas tão somente justificar sua
utilização perante as facilidades promovidas no que tange ao reuso, como no exemplo
anteriormente descrito.
Este vocabulário comum também fornece meios para integração deste framework com
novas tecnologias envolvendo pouco esforço computacional, e permitindo que componentes
distintos utilizem frameworks externos e bibliotecas especializadas, sem a necessidade de
alterações nos demais trechos de código.
Entre os vários padrões a serem adotados, um que se destaca é o Proxy, na arquitetura
Broker, que será utilizado em dois pontos do framework: processamento distribuído via RMI
e comunicação com JEE no processo de persistência de dados.
Maiores detalhes sobre o uso de padrões de desenvolvimento podem ser obtidos na
Seção 2.3 e no Anexo A, enquanto as arquiteturas principais são discutidas na Seção 2.4 e no
Anexo B.
Com o uso da arquitetura MSVC no novo modelo do framework a responsabilidade de
armazenamento e concorrência no acesso ao banco de dados é delegada para o JPA,
utilizando-se de todas as facilidades transacionais, além do uso de JEE como fachada para a
camada de banco, segundo o padrão Session Facade, provendo um meio eficiente para a
manipulação de grandes quantidades de dados e número de acessos concorrentes. Como as
anotações não são serializáveis, o JPA provê automaticamente o padrão DAO, e o meio de
utilização dos componentes EJB segue o padrão Abstract Factory, além do que ambos os
frameworks trabalham com pools, segundo o padrão Fly Weight. Os frameworks JEE e JPA
são discutidos no Anexo B.
A grande vantagem de uma arquitetura MVC é a divisão de responsabilidades com
relação ao desenvolvimento, permitindo que a construção da camada de visualização seja
efetuada por designers, enquanto a lógica de negócios e intermediação com o banco fique sob
a responsabilidade dos programadores. A independência das camadas facilita também a
criação de Web Services, permitindo o aumento da interoperabilidade do sistema com outras
tecnologias, além de viabilizar a criação direta de uma arquitetura orientada a serviços.
Na arquitetura MSVC utilizada, acrescenta-se às vantagens apresentadas para o MVC
o fato de que o executor de simulação, ao ficar em uma camada separada, fica independente
dos demais processos executados pelo software.
Outros padrões aplicados foram o Factory Method para a construção de objetos
baseada em reflexividade, a partir do texto representativo do nome da classe, o Service
Locator, concentrando as chamadas para os componentes EJB e demais recursos
disponibilizados através de JNDI, Singleton para a gerência de tokens e demais gestores
globais do framework, além do State para a criação de processos de manutenção e demais
modelos de geração de eventos.
131
Por fim, muitos dos padrões adotados foram implementados via elementos genéricos,
aliando o vocabulário já conhecido pela maior parte dos desenvolvedores às facilidades de
criação das metodologias comportamentais.
Em termos da extensão do framework, o principal padrão a se considerar é o State,
utilizado na criação de novos modelos de geração de evento, particularmente do processo de
manutenção, o qual era um workflow fixo na primeira versão do framework e agora pode ser
criado livremente para se adequar aos mais diversos contextos.
O novo processo de manutenção encapsula uma máquina de estados genérica, segundo
o padrão State, sendo criadas as classes de base “AbstractManutencaoState” e
“AbstractProcessoManutencao”, as quais devem ser especializadas para definir um novo tipo
de processo de manutenção. Como deveria haver um processo padrão para o framework, foi
criada a classe “ProcessoManutencaoPadrao”, encapsulando o processo que é utilizado como
padrão para qualquer modo de falha, desde que o usuário do sistema não selecione outro.
Para fins de ilustração, uma visão esquemática do processo de manutenção antigo é
apresentado na Figura 55 enquanto o novo processo padrão é apresentado na Figura 56.
Com a definição destas máquinas de estado foi obtida uma funcionalidade que não
existia no framework original, ou seja, agora é possível criar processos genéricos de geração
de eventos que proporcionam o reuso do framework como um todo, fazendo com que tipos
completamente diferentes de problemas possam ser modelados e ainda assim tirem proveito
do processamento paralelo e das interfaces dinâmicas já existentes.
Os demais modelos de geração de eventos também são máquinas de estado, não tão
complexas, as quais devem ser implementadas como descendentes de “ModeloEvento” e
“AbstractEventoState”. O código interno destas classes de base foge ao escopo deste trabalho,
pois acrescentaria complexidade e não ajudaria a demonstrar a importância do reuso, porém a
especialização simplificada para novos contextos é um bom exemplo da importância dos
padrões de desenvolvimento na reutilização de processos.
O processo de geração de eventos padrão é o próprio “ModeloEvento”, que pode ser
especializado pra atividades específicas, como aquisição de produto, ma também pode ser
utilizado na sua forma original, ao contrário de “AbstractProcessoManutencao”, que é uma
classe abstrata. O esquema funcional do modelo de geração de eventos padrão é apresentado
na Figura 57.
Embora o código das classes de base seja muito extenso, não cabendo aqui o
detalhamento do mesmo, a implementação dos descendentes de “AbstractState” não é tão
complexa, devendo apenas ser implementados em cada classe de estado os métodos “gerar”,
referente à geração de um novo evento do tipo adequado ao estado, e “next”, que seleciona o
próximo estado a ser utilizado.
A implementação dos estados “Iniciado” e “Ativo”, presentes na máquina de estados
da Figura 57, pode ser observada respectivamente na Figura 58 e na Figura 59.
Embora não tenha sido possível implementar nesta fase do projeto, é um dos objetivos
futuros a criação de geradores automáticos de código com a concepção visual de máquinas de
estado, tanto para geração de eventos comuns quanto para processos de manutenção.
136
Esta seção visa ilustrar o processo de utilização do novo framework para a inclusão de
dados de catálogo, criação de cenários, execução de simulações e análise de resultados. Aqui
não são exploradas as técnicas de reuso e interoperabilidade descritas no decorrer de todo este
texto, mas simplesmente apresentar o framework como um sistema de simulação, utilizando
como fonte de dados o cenário do Anexo D.
Conforme pode ser observado na Figura 60, a interface cadastral divide-se em quatro
módulos:
1. Painel de Navegação;
2. Tabela de visualização e seleção de elementos;
3. Seletor de tipo;
4. Botão de inclusão;
5. Botões de alteração e exclusão; e
6. Tabela de exibição de propriedades para o elemento selecionado.
4
3
2 6
Terminadas as execuções das simulações, seus resultados podem ser obtidos através
do Web Service de fornecimento de resultados, podendo ser interpretado pelo Flex ou
qualquer outra tecnologia que interprete o SOAP.
A Figura 70 apresenta um exemplo de saída no formato SOAP, com a chamada direta
ao serviço de fornecimento de resultados do framework de ACCV.
144
Para a análise de custos, nenhum parâmetro em particular precisa ser fornecido, sendo
necessária apenas a escolha do escopo e periodicidade, como pode ser visto na Figura 71,
onde é apresentado um exemplo na exibição dos custos globais obtidos para o cenário de
testes com um determinado grupo de simulações, e na Figura 72, onde é apresentada a
exibição dos custos mensais para uma simulação individual.
Ao analisar os recursos consumidos, deve ser selecionado o recurso sob análise, como
pode ser observado na Figura 73, onde é apresentado o consumo de horas mensais de trabalho
para técnicos de nível um, dentro do cenário de testes, para um dado grupo de simulações.
6.1 INTRODUÇÃO
Os passos iniciais para a criação do extrator podem ser vistos na Figura 78.
No entanto estas informações podem ter diferentes interpretações de acordo com o tipo
de chamada efetuada, bem como cada chamada aceita diferentes parâmetros, sendo necessário
o mapeamento entre os tipos de solicitações disponíveis e o retorno obtido para cada uma.
A Tabela 9 apresenta o mapeamento das chamadas de interesse para o programa de
exemplo em C#.
151
Outros
Chamada Identificador Saída
Parâmetros
Consumo de Recursos
obterRecursosGrupoGraficoMensal idGrupo idRecurso
Mensal para o Grupo
Consumo de Recursos
obterRecursosIndividualGraficoMensal idServerCall idRecurso
Mensal Individual
idOrgaoCenario
Disponibilidade Total do
obterDisponibilidadeGrupoGraficoTotal idGrupo idSistema
Sistema para o Grupo
instancia
idOrgaoCenario
Disponibilidade Mensal do
obterDisponibilidadeGrupoGraficoMensal idGrupo idSistema
Sistema para o Grupo
instancia
idOrgaoCenario
Disponibilidade Total do
obterDisponibilidadeIndividualGraficoTotal idServerCall idSistema
Sistema Individual
instancia
idOrgaoCenario
Disponibilidade Mensal do
obterDisponibilidadeIndividualGraficoMensal idServerCall idSistema
Sistema Individual
instancia
Resolvida a etapa da obtenção dos dados, o passo seguinte refere-se à exportação dos
dados obtidos para o Microsoft Excel. O intercâmbio de dados com este software dentro da
tecnologia .Net é obtido com a utilização de um componente específico, denominado
Microsoft Excel Object Library.
O processo de utilização do componente é iniciado com a adição do mesmo ao extrator
através da adição da referência, da mesma forma que para os Web Services. Estando o
componente disponível ele pode ser utilizado diretamente na programação em C#.
Nesta etapa os resultados obtidos na chamada ao framework de ACCV foram
diretamente convertidos para células de uma nova planilha no Excel, permitindo a livre
manipulação destas células após a geração.
155
A adição do componente pode ser observada na Figura 83, e o código que veio a
utilizá-lo na Figura 84.
Esse foi todo o esforço necessário para a criação de uma ferramenta extratora,
demonstrando como a interoperabilidade facilitou muito o reuso do framework de ACCV em
ambientes heterogêneos.
156
• As máquinas deverão ser todas adquiridas na empresa que presta o serviço, ficando
disponíveis para o cliente apenas durante o período contratual;
• A venda ocorre em lotes de computadores com trinta, sessenta ou noventa
computadores, além dos respectivos servidores e equipamentos necessários para a
configuração das redes individualmente;
• Qualquer computador que apresenta falha no período contratual será substituída
por uma nova, de forma gratuita, sendo paga apenas a hora do técnico responsável
pela substituição; e
• Qualquer atendimento será iniciado em um prazo de duas a vinte e quatro horas,
sendo que a substituição de uma máquina é uma atividade que dura uma hora,
enquanto os serviços de manutenção de rede podem levar de duas a noventa e seis
horas.
Para o exemplo considerado, o custo de aquisição de cada tipo de rede pode ser
observado na Tabela 11.
Tabela 12: Duração das atividades e consumo de recursos para as redes do exemplo.
Finalmente, quanto às taxas de falha da infra-estrutura de rede, estas são de mil horas
de operação para as redes com trinta clientes, três mil horas de operação para as redes com
sessenta clientes e seis mil horas para as redes com noventa computadores.
Para dar suporte aos comportamentos aqui definidos, alguns pontos de extensão do
framework de ACCV foram explorados, de forma a direcionar a execução das simulações
para um modelo que apenas considere a avaliação do serviço terceirizado.
159
com a observação de que a duração desta nova atividade está relacionada diretamente ao
número de máquinas cliente na rede, como pode ser observado na Figura 87.
Considerando esses pontos, foi definido inicialmente um novo tipo de atividade que
considera o atraso, sendo denominada “AtividadeReparoAtraso”, e cujo código-fonte pode ser
observado na Figura 88.
Figura 88: Código da classe Java para Atividade de Reparo com atraso.
O modelo de geração de eventos para atividade de reparo com atraso, no caso em que
é gerada indisponibilidade, segue o diagrama exposto na Figura 89.
Figura 89: Modelo para Geração de Eventos no Processo de Manutenção com atraso
162
Quanto à programação dos estados desse gerador de eventos, estes não necessitam de
anotações, pois fazem parte do processamento interno do gerador, e não são disponibilizados
na interface cadastral.
A código de “ManutencaoAtrasoIniciadoState” pode ser observado na Figura 91,
sendo sua única responsabilidade apontar o próximo estado para o gerador de eventos, ou
seja, a classe “ManutencaoAtrasoReparoState”.
Isso teve de ser feito para todas as novas classes anotadas, sendo um exemplo de
solicitação do serviço exibido na Figura 93.
Estando todas as classes criadas e registradas, foi definido um cenário de análise para
testar a utilização dos novos elementos criados, considerando as cidades do Rio de Janeiro e
São Paulo, e tendo como início a data de 01/01/2010, com as configurações para as redes
detalhadas na Tabela 13.
A seguir, foram definidos os sistemas de rede, utilizando como base o novo tipo de
sistema criado, bem como as composições referentes ao maquinário utilizado, como pode ser
observado na Figura 94.
Definidos os aspectos estruturais dos produtos, o passo seguinte foi a configuração das
atividades e modos de falha necessários, com a utilização dos novos elementos adicionados ao
framework de ACCV.
As telas que apresentam os novos elementos referentes a atividades podem ser
observadas na Figura 95.
Deve-se considerar aqui os dois aspectos do aumento do reuso obtido, no que tange à
incorporação de técnicas comportamentais e padrões de desenvolvimento:
com exposição através de um padrão amplamente utilizado, o que viabiliza a integração com
outros simuladores e ferramentas de interesse em ambiente HLA.
Outro fato a ser considerado é o de que o Modelo de Pilla e Cople satisfaz às
necessidades destas novas formas de implementação, e a divisão dos objetos pelo framework
em três níveis de abstração, com armazenamento de metadados e dados de catálogo em banco
de dados, normalmente em formato texto, e definição do comportamento em termos de código
Java, garantiu alta portabilidade em termos de sistema operacional, enquanto o uso de JPA
trouxe a mesma portabilidade em termos de bancos de dados.
Estes três níveis de abstração, aliados à reflexividade nativa da linguagem Java e o uso
de Web Services, acabam por permitir a criação de telas dinâmicas para os elementos de
catálogo em praticamente qualquer plataforma de desenvolvimento, aumentando a
interoperabilidade do framework por utilizar formatos de exportação do tipo XML, o que
satisfaz a um dos objetivos iniciais do trabalho, que era a criação de interfaces customizadas
para o framework, independentes do uso de Java.
A exportação via Web Services também foi determinante para a melhoria da análise de
resultados, demonstrada aqui através da interface em Flex, e a interoperabilidade obtida foi o
que permitiu a rápida construção do extrator de dados para Microsoft Excel, demonstrando a
possibilidade de uso de ferramentas especializadas de análise.
Espera-se que o desenvolvimento deste novo framework sirva para demonstrar a
importância de conceitos como reuso e interoperabilidade nas estratégias de pesquisa
operacional relacionadas à modelagem de sistemas e simulação computacional, aproveitando
softwares existentes e permitindo a criação de soluções em diferentes plataformas, sempre
tirando proveito de técnicas como uso de elementos genéricos, anotações e padrões de
desenvolvimento, de forma a minimizar o tempo para criação de novas soluções e maximizar
a integração entre as ferramentas, o que é indicado como ideal pelos atuais estudos na área de
Engenharia de Sistemas.
173
8. REFERÊNCIAS BIBLIOGRÁFICAS
BLOCH, J. Effective Java (Second Edition). USA: Prentice Hall, 2008, 384 p.
BOOCH, G. Object-Oriented Analysis and Design with Applications. USA: The Benjamin
Cummings Publishing Co. Inc, 1994.
BORGES, R. C. Modelos para a Análise de Custo de Vida Útil. Brasil: UFF, Dissertação de
Mestrado, 2004.
CHANG, H; LEE, K. Applying Web Services and Design Patterns to Modeling and
Simulating Real-World Systems. Alemanha: Springer Berlin, Artificial Intelligence and
Simulation, Lecture Notes in Computer Science, 2005, p. 351-359.
CHEN, L; XU, B. Slicing Java generic programs using generic system dependence graph.
USA: Wuhan University e Springer, Wuhan University Journal of Natural Sciences, Vol 14,
No 4, 2009, p. 304-308.
CHEN, Y. Modeling and Simulation for and in Service-Oriented Computing paradigm. USA:
ACM, Simulation Transactions, vol. 83, No. 1, 2007, p. 3-6.
COPLE, D. G; BRICK, E. S. A simulation framework for technical systems life cycle cost
analysis. USA: Elsevier, Simulation Modelling Practice and Theory 18, 2010, p. 9-34.
DEUTSCH, M. Life Cycle Cost Disclosure, Consumer Behavior, and Business Implications.
USA: Wiley, Journal of Industrial Ecology, Vol. 14, No. 1, 2010, p. 103-120.
ERL, T. SOA: Princípios do design de serviços, versão traduzida. Brasil: Pearson, 2009.
FARLEY, J; CRAWFORD, W. Java Enterprise in a nutshell. USA: O’Reilly Media Inc, 3 ed,
2005, 896 p.
FRANÇOIS, A. R. J. Software Architecture for Computer Vision: Beyond Pipes and Filters.
USA: University of Southern California, 2003, 26 p.
FREEMAN, E; SIERRA, K; BATES, B. Head First design patterns. USA: O'Reilly Media,
Inc., 2004, 638 p.
HAMRI, M; BAATI, L. On using Design Patterns for DEVS Modeling and Simulation Tools.
USA: Proceeding SpringSim'10, Proceedings of the Spring Simulation Multiconference,
2010.
HAN, S; HUANG, K. Equivalent Semantic Translation from Parallel DEVS Models to Time
Automata. Alemanha: Springer Berlin, Computational Science – ICCS 2007, Lecture Notes in
Computer Science, 2007, p. 1246-1253.
HENNING, M. The Rise and Fall of CORBA . USA: ACM Queue, Vol. 4, No. 5, Component
Technologies, 2006, p. 28-34.
HEO, J. K. Distributed Cipher Services Using Object Activation. Coréia: AISS, Advances in
Information Sciences and Service Sciences, Vol. 2, No. 4, 2010, p. 115-122.
182
HEWETT, R; HEWETT M. Efficiency in pure blackboard systems. USA: IEEE, Tools with
Artificial Intelligence, 1992, p. 65-72.
HUANG, B; HE, L; BAO, Y; LI, Z; LI, R. PeerMD: A P2P molecular dynamics simulation
framework based on Web services. USA: Wuhan University e Springer, Wuhan University
Journal of Natural Sciences, Vol. 13, No. 4, 2008, p. 471-474.
JAIN, S. Simulation in the Next Millennium. USA: IEEE, In Proceedings of the Winter
Simulation Conference, 1999, p. 1478-1483.
183
JORDAN, M. A Comparative Study of Persistence Mechanisms for the Java Platform. USA:
Sun Microsystems, 2004, 45 p.
KRUEGER, C.W. Software reuse. USA: ACM, ACM Computing. Survey, Vol. 24, No. 2,
1992, p. 131-183.
LEE, J. K; CHI, S. D. Using Symbolic DEVS Simulation to Generate Optimal Traffic Signal
Timings. USA: SCS, SIMULATION, Vol. 81, No. 2, 2005, p. 153-170.
LOCK, D. Project Management. UK: Gower Publishing Limited, 9a edição, 2007, 523 p.
NELSON, J. Structured Programming Using Processes. USA: ACM, Proceedings of the 2004
ACM SIGPLAN workshop on Erlang, 2004, p. 54-64.
NTAIMO, L; ZEIGLER B. P. Expression of a forest cell model in parallel DEVS and Timed
Cell-DEVS formalisms. USA: Proceedings of the 2004 Summer Computer Simulation
Conference, 2004.
PANG, G. H. Elevator scheduling system using blackboard architecture. USA: IEEE, Control
Theory and Applications, Vol. 138, No. 4, 1991, p. 337-346.
POULIN, J.S.; CARUSO, J.M. Determining the value of a corporate reuse program. USA:
IEEE, Proceedings of the First IEEE Computer Society International Software Metrics
Symposium, 1993, p. 16-27.
SEO, H. S. Network security agent DEVS simulation modeling. USA: Elsevier, Simulation
Modelling Practice and Theory 14, 2006, p. 481-492.
SEO, H. S. Network security agent DEVS simulation modeling. USA: Elsevier, Simulation
Modelling Practice and Theory 14, 2006, p. 481-492.
STRASSBURGER, S. Overview about the High Level Architecture for Modelling and
Simulation and Recent Developments. Austria: ARGESIM / EUROSIM / ASIM, Simulation
News Europe (SNE), Vol. 16, No. 2, 2006, p. 5-14.
191
TYTULA, T. P. Design to Cost. USA: John Wiley & Sons, Cost Estimator’s Reference
Manual, 1995, p. 317-352.
VINOSKI, S. Where is Middleware? USA: IEEE, Internet Computing, Vol. 6, No. 2, 2002,
p. 83-85.
WAINER, G. A. Modeling and simulation of complex systems with Cell-DEVS. USA: IEEE
Press, Proceedings of the Winter Simulation Conference, 2004, p. 49-60.
WANG, K; YUAN, Y; LI, J. A Simulation System for Computational Cell Models Based on
Object-Oriented Design Patterns. Canada: Computer and Information Science, Vol. 3, No. 2,
2010, p. 106-115.
WANG, X; LU, C; GILL, C. FCS/nORB: A feedback control real-time scheduling service for
embedded ORB middleware. USA: Elsevier, Microprocessors and Microsystems 32, 2008,
p. 413-424.
YAO, H; ZHANG, H; DUAN, F. Research and design on distributed remote simulation based
on Web. USA: IEEE, Information Management and Engineering (ICIME), The 2nd IEEE
International Conference, 2010, p. 522-525.
YU, S; LI-LI, W. Research and development of message service based on JMS. USA: Journal
of Communication and Computer, Vol. 4, No. 5, 2007, p. 47-52.
A.1 INTRODUÇÃO
um sistema. O ganho com a reutilização será observado apenas quando a economia de esforço
cumulativa na criação de sucessivos sistemas e funcionalidades for menor que o esforço
adicional de se projetar os componentes iniciais pensando em reuso.
Segundo Nelson (2004 p.1), a programação estruturada surgiu com o intuito de guiar
os programadores na construção de códigos corretos e de melhor manutenção, sendo baseada
em três princípios fundamentais:
• Evolução incremental;
• Estruturas de dados localizadas; e
• Decomposição modular.
Para Rumbaugh, Jacobson e Booch (2000 p.11), não existe nenhuma grande
desvantagem nessa solução, com exceção da tendência a permitir sistemas instáveis. À
medida que os requisitos se modificam e o sistema cresce, será difícil fazer a manutenção de
sistemas construídos a partir do foco em algoritmos.
A modelagem contemporânea de sistemas baseia-se em personagens, com atributos e
comportamentos definidos, os quais interagem de diferentes formas, transformando o sistema
no resultado final destes relacionamentos. Estes personagens são os objetos, sendo que um
conjunto de objetos semelhantes levará à definição de uma classe, como citado por Korson e
McGregor (1990 p.42), ou sob outro ponto de vista, um objeto seria um personagem criado a
partir das regras definidas no “molde”, que é a classe.
Segundo Rumbaugh et al. (1991 p.1), partindo de uma análise superficial, esta
metodologia olha para o sistema como uma coleção de objetos discretos que incorporam tanto
a estrutura de dados quanto o comportamento. Isto está em contraste com a programação
convencional, onde as estruturas de dados e o comportamento, definido através de processos,
são fracamente ligados.
Oses, Pidd e Brooks (2004 p.503), destacam três grandes vantagens da abordagem
orientada a objetos. “Inicialmente, a implementação é segura, já que efeitos colaterais
inesperados podem ser contidos dentro do módulo específico. Por outro lado, facilita o
processo de desenvolvimento, ao dividir o modelo em unidades menores que podem, pelo
menos em princípio, ser testadas separadamente. Finalmente, as novas classes podem herdar
196
A.2.1 Herança
A herança é uma característica que permite criar novas estruturas baseadas nas
estruturas já existentes, ou seja, derivar novas classes das atuais, acrescentando outras
características, processo também chamado de especialização. Esta técnica deve ser utilizada
nos casos em que as classes já existentes satisfazem parte do problema, mas não todo,
necessitando uma adaptação maior ao contexto.
197
Para Rumbaugh et al. (1991 p.39), generalização é o relacionamento entre uma classe
e uma ou mais versões refinadas da mesma. A classe a ser refinada é denominada superclasse,
enquanto cada versão refinada é denominada subclasse. Ainda segundo o autor, este refino
pode ocorrer em um número arbitrário de níveis, denominando-se como ancestrais as classes
mais genéricas, e descendentes os refinos subseqüentes. Com o uso de herança é possível
implementar os relacionamentos do tipo generalização-especialização.
Segundo Deitel e Deitel (2001 p.386), os relacionamentos de herança formam
estruturas hieráquicas do tipo árvore. Uma superclasse existe em um relacionamento
hierárquico com suas subclasses. Uma classe certamente pode existir de forma isolada, mas,
quando é utilizada no mecanismo de herança, a mesma se torna uma superclasse, fornecendo
atributos e comportamentos para outras classes, as quais passam a ser suas subclasses.
Certamente o Modelo de Pilla e Cople tira muito proveito da técnica de herança, como
na definição de meios de transporte a serem utilizados na simulação. Como os meios de
transporte são muito diversos, e seu custo varia muito devido a distância percorrida e tipo de
combustível utilizado, custo da utilização do serviço, mão de obra especializada para a
operação do meio de transporte, entre muitos outros fatores, a utilização de herança permite o
acréscimo de um novo meio de transporte (como o ferroviário) de forma simples, sem
impactar nos demais já existentes, e podendo ser incorporado facilmente ao processo de
cálculo. O exemplo de herança aqui citado pode ser observado na Figura 98.
Outro elemento, que passa a fazer sentido junto com o polimorfismo, é o método
abstrato, cujo formato é definido, mas não sua funcionalidade. Sempre que uma classe tem
pelo menos um método abstrato, a mesma não pode gerar objetos e torna-se uma classe
abstrata. A vantagem de lidar com elementos abstratos é a possibilidade de definição de
tratamentos genéricos para personagens que sequer existem e regras comportamentais para
famílias de classes.
Segundo Rumbaugh et al. (1991 p.61), uma classe abstrata não pode instanciar
objetos, mas cujos descendentes podem ter instâncias diretas. A condição para que isto ocorra
é a de que os descendentes implementem os métodos abstratos definidos nas ancestrais
através do uso de polimorfismo. Na Figura 100, desde que não ocorressem elementos comuns
ao cálculo de custo nas classes base, o método “getFatorCusto” poderia ser definido de forma
abstrata em “MeioTransporte”, sendo implementado apenas nas classes concretas “Carro”,
“Avião”, “Navio” e “Submarino”.
Ainda pensando em termos de elementos abstratos, outra ferramenta computacional da
orientação a objetos é a interface, que trata de um conjunto de métodos abstratos, ou
201
assinaturas de métodos, que podem ser implementados pelas classes que se proponham a tal,
permitindo às mesmas participar dos processos onde esta interface é utilizada. Apesar de se
parecer com uma classe abstrata à primeira vista, uma interface não pode conter métodos
concretos ou propriedades.
Rumabaugh et al. (2000 p.155) define interface como uma coleção de operações
empregadas para especificar o serviço de uma classe ou componente. Declarando-se a
interface é estabelecido o comportamento desejado de uma abstração independente de
qualquer implementação dessa interface.
A independência promovida pelo uso de interfaces permite garantir um grande
desacoplamento já que pode ser utilizada qualquer implementação, independente de
fornecedor ou tecnologia, desde que esta implementação satisfaça às responsabilidades e ao
contrato denotado pela interface.
Uma característica interessante do uso de interfaces é a possibilidade de
implementação da mesma em diferentes famílias de classes, não mais dependendo de uma
hierarquia determinada por uma semântica específica. Novamente a modelagem inicial
especificada na Figura 100 poderia ser modificada para a que é apresentada na Figura 101,
onde são incorporadas outras famílias de classes, além da interface comum.
Karunanithi e Bieman (1993 p.4) citam em seu trabalho o fato de que, como as
linguagens orientadas a objeto são projetadas para suportar o reuso, programadores devem
utilizar boas práticas da Engenharia de Software para obter o máximo de reuso. Com o
objetivo de caminhar em direção ao reuso máximo, podem ser estabelecidas métricas que
auxiliem a caracterização do reaproveitamento dos componentes de um sistema, assim como o
monitoramento dos níveis de reuso de código atual, de forma a auxiliar na criação e utilização
de artefatos e normas que facilitem esta prática.
Os tipos mais imediatos de reuso na orientação a objetos são a criação de instâncias de
classes já existentes em novas classes e a especialização através da herança. Segundo Bieman
e Kang (1995 p. 261), as métricas de reuso referentes ao uso de instâncias estão relacionadas
ao número de instâncias criadas, enquanto a herança refere-se ao número de descendentes
diretos e indiretos da classe.
Bailey e Basili (1981) defendem a idéia de que a complexidade do desenvolvimento
está associada ao tamanho do código, e descrevem o reuso em termos da quantidade de
código reutilizada e a quantidade a ser criada ou reescrita em um determinado sistema
computacional. Outros autores aprovam esta afirmativa, tais como Fenton e Neil (2000),
Kemerer (1987) e Boehm (1981).
Estes autores acabam não levando em consideração os elementos relacionados à
qualidade do código gerado, em contraposição ao tamanho do mesmo. Abstrações com boa
qualidade sugerem facilidade de reuso e integração.
Segundo Booch (1994 p. 136) as seguintes métricas podem ser utilizadas para avaliar a
qualidade da abstração:
Abstrações com maior qualidade devem apresentar alta coesão e baixo acoplamento,
satisfazer ao problema de forma exaustiva e suficiente, além de apresentar a possibilidade de
utilização de elementos primitivos, menos complexos, na implementação das operações de
alto nível.
Considerando-se a maior complexidade de desenvolvimento de classes, em
comparação com a programação tradicional, devido ao maior nível de abstração, pode-se
dizer inicialmente que a concepção desta biblioteca de classes só trará benefícios quando a
quantidade de projetos que envolvam a mesma justifique o esforço de sua criação.
Esta afirmativa não leva em conta o fato de que os ambientes de desenvolvimento
atuais (IDE, do inglês Integrated Development Environment) e ferramentas CASE (computer-
aided software engineering), devido à forma natural de modelagem promovida pela
orientação a objetos, absorvem boa parte do esforço de concepção e modificação de sistemas,
inclusive automatizando a detecção e acerto de impactos referentes a mudanças (técnica
conhecida com refactoring).
Infelizmente as ferramentas computacionais de engenharia nem sempre permitem um
comportamento tão padronizado quanto ao das ferramentas cadastrais de uso comercial, e
como as ferramentas CASE obrigam a existência de código mais robusto para obter a
generalização necessária, qualquer adaptação deste código a uma nova realidade poderá
demandar um grande esforço por parte dos analistas e programadores, de forma a satisfazer
aos modelos utilizados.
204
O novo framework e sua interface cadastral de exemplo foram criados tirando proveito
das possibilidades oferecidas por duas ferramentas deste tipo: o NetBeans na construção de
toda a parte lógica e de cálculo, gestor de distribuição em rede e persistência, e o Flash
Builder (Flex) para a construção da interface cadastral.
Figura 106: Parte do código Java para a classe de lista genérica com suporte a concorrência.
210
A.5 ANOTAÇÕES
Anotações tratam de metadados que podem ser associados a uma classe, método ou
propriedade, sem interferir com o código-fonte, porém permitindo o reconhecimento das
mesmas pelos compiladores e frameworks. Isto permite a definição de processos complexos
que podem ser facilmente reutilizados pelas classes anotadas, tais como persistência de dados
automatizada, controle transacional, rotinas de teste de software, sincronização de processos
paralelos, entre muitas outras finalidades já observadas no mercado.
Segundo Gervasi e Galilei (2008 p.161), as anotações são uma funcionalidade recente
introduzida em linguagens como Java e C#, que permitem aos programadores anexar
arbitrariamente ao seu código metadados estruturados e tipificados.
Na linguagem Java as anotações são definidas através da criação de interfaces
específicas. Definida a anotação ela pode ser utilizada por uma classe qualquer, e
posteriormente reconhecida por algum sistema.
Um exemplo de anotação definida no framework de ACCV pode ser observado na
Figura 107, enquanto seu uso em uma classe é demonstrado na Figura 108. Neste exemplo a
utilização da anotação é reconhecida posteriormente pelo framework com o objetivo de
acrescentar no banco de dados as entradas necessárias para a definição de telas cadastrais
dinâmicas.
B.1 INTRODUÇÃO
Modelo de
Referência
Arquitetura de Arquitetura de
Referência Software
Padrão
Arquitetural
Objetos
Distribuídos
Referência: Arquitetura:
CORBA VisiBroker
Estilo:
Broker
Figura 110: Exemplo de Arquitetura com VisiBroker
Para entender uma arquitetura é necessário entender sua finalidade, o que pode ser
observado a partir do estilo arquitetural adotado. Vários autores sugerem diferentes
classificações para os estilos arquiteturais, sendo as mais relevantes definidas por Shaw e
Garlan (1996), e Buschmann et al. (1996).
215
Segundo Hewett e Hewett (1992 p.66), sistemas deste tipo apresentam quatro
componentes principais: blackboards, fontes de conhecimento (knowledge sources), uma
agenda e um escalonador. Ainda segundo os autores, blackboards são áreas de dados que
contêm objetos, as unidades básicas de representação, compreendendo o conhecimento do
domínio, elementos de controle e knowledge sources (KS), sendo usualmente divididos em
camadas.
Corkill (1991 p.5) defende a mesma divisão de Hewett e Hewett (1992 p.66), sendo
que a agenda e o escalonador são definidos simplesmente como unidade de controle. Segundo
Corkill, Gallagher e Johnson (1987 p.5), uma abordagem simplista para a construção de um
aplicativo Blackboard é a representação de cada nível do blackboard como uma lista
desestruturada de objetos que residem neste nível. Nesta arquitetura cada KS pode adicionar
objetos no blackboard, ou recuperar os objetos de interesse a partir do mesmo, como pode ser
observado na Figura 112.
Fluxo de Dados
Fluxo de Controle
Para Garlan e Shaw (1994 p.9), no que diz respeito às arquiteturas baseadas em
eventos (Event-Driven), a idéia por trás da invocação implícita, fundamento destas
arquiteturas, é que em vez de chamar um processo diretamente, um componente pode
anunciar um ou mais eventos. Outros componentes do sistema podem registrar interesse em
um evento e associar um procedimento com o evento. Quando o evento é anunciado o sistema
executa todos os procedimentos registrados para o evento. Assim, um anúncio de evento
“implicitamente” causa a invocação de procedimentos em outros módulos.
Um exemplo típico de arquitetura do tipo Event-Driven é a concepção de sistemas que
se utilizam de MOM (Message Oriented Middleware), onde as mensagens são enviadas do
cliente para o servidor através de filas de mensagens, levando a um processamento específico
no componente ouvinte quando ocorre um evento indicando a chegada de uma nova
mensagem. Como as mensagens independem de linguagem, os componentes tornam-se tão
independentes que podem ser criados em linguagens distintas.
Na linguagem Java, o JMS (Java Message Service) é a API responsável peso acesso
ao MOM, sendo compatível com os principais mecanismos de enfileiramento do mercado,
tais como MQ Series, JBoss MQ e MSMQ. Segundo Yu e Li-li (2007 p.48), Burke e Monson-
Haefel (2007 p.187), Eugster, Felber, Guerraoui e Kermarrec (2003 p.115), Farooq, Parsons e
Majumdar (2004 p.278), neste ambiente há dois tipos de sistemas de mensagens: o ponto-a-
ponto (point to point), que funciona de forma síncrona, sendo apoiado por filas de mensagens
entre cliente e servidor, e arquitetura de publicação e assinatura (publish/subscribe), o qual
trabalha de forma assíncrona, onde os publicadores enviam mensagens para a fila, neste caso
denominada tópico, e os assinantes que observam esta fila recebem a mensagem. Estes dois
tipos de sistemas de mensagens podem ser observados na Figura 113.
Assinante
Editor Tópico
Assinante
Publish/Subscribe
Point to Point
Área de Armazenamento
Tarefas de Interpretação
Estado
Saída Núcleo de
Interno do
Interpretação
Núcleo
No mercado atual a arquitetura MVC tem sido utilizada em larga escala, o que
permitiu aos desenvolvedores de ferramentas a criação de COTS voltadas para cada uma das
três camadas consideradas. Além disto, o uso de camadas especializadas permite a divisão da
equipe de desenvolvimento entre profissionais cujo perfil seja voltado para criação visual,
lógica de negócios ou banco de dados.
Em um ambiente Java para Internet, construído de forma simplificada, a camada de
visualização pode ser definida através de páginas JSP (Java Server Pages), e as camadas de
221
PAC01
A C P
PAC02 PAC03
A C P A C P
PAC04
A = Abstraction, C = Control, P = Presentation
A C P
Composição baseada em mensagens
Para Pereira (2003 p.20), este caráter introspectivo da reflexão computacional permite
a uma aplicação utilizar o conhecimento acerca do seu estado interno e do ambiente onde está
sendo executada de modo a modificar seu comportamento quando diante de novas situações.
A reflexividade é uma característica forte do Java, permitindo instanciar objetos
dinamicamente, sem nem ao menos determinar a classe, apenas pelo texto representativo do
nome da mesma, apoiado por elementos reflexivos, capazes de inferir nas estruturas internas
do objeto e descobrir as propriedades e métodos constituintes.
Inicialmente, uma instância do objeto é criada a partir do nome da mesma. Para isto
utiliza-se uma chamada ao método getInstance da classe Class. Este método, em conjunto
com o método forName, permite instanciar um objeto qualquer na memória.
Estando o objeto instanciado, é possível inferir em suas propriedades, com o auxílio de
objetos da classe Field, preenchendo com os valores armazenados da forma adequada no
banco de dados.
Após o objeto instanciado ser preenchido ele pode ser recebido por uma variável do
tipo correto através de uma conversão de tipo. Aqui vale a regra da orientação a objetos de
que qualquer filho pode ser instanciado no lugar de um pai. Logo, apesar do retorno aparentar
ser genérico, ele é do tipo especificado.
A utilização da técnica de reflexividade é ilustrada na Figura 117.
B.3 FRAMEWORKS
Um framework não tem por objetivo solucionar um problema específico, mas sim
agrupar ferramentas genéricas que podem ser utilizadas na resolução de problemas
semelhantes. Uma utilização típica de frameworks é encontrada na área de segurança de
dados, onde os mesmos fornecem serviços de criptografia, decriptografia, assinatura e
verificação de autenticidade, mas não se resumem a uma transação específica.
Segundo Fiorini (2001 p.26), os frameworks têm atraído a atenção de muitos
pesquisadores e engenheiros de software e são aplicados a uma grande variedade de
domínios. As principais vantagens de frameworks incluem reutilização e redução do tempo
para disponibilizar aplicações no mercado.
Fiorini também ressalta as características de frameworks de aplicação, os quais devem
apresentar uma parte que é comum entre as aplicações que foram utilizadas de base para criá-
lo. Uma importante característica é que eles devem ser flexíveis, ou seja, devem ser
adaptáveis de acordo com os requisitos específicos de um determinado domínio. Os aspectos
de um domínio de aplicação, que têm que se manter flexíveis para proporcionar a
especialização, atendendo às necessidades específicas das aplicações, são conhecidos como
pontos de flexibilização do framework (hot-spots). Escolher adequadamente os hot-spots
225
De acordo com sua política de utilização, frameworks podem ser classificados como
“caixa-preta” ou “caixa-branca”. Frameworks “caixa-branca” focam a extensibilidade de suas
estruturas internas, gerando instâncias especializadas das mesmas, como as definições de
processos derivados ou classes descendentes, enquanto o tipo “caixa-preta” se baseia na
criação de um protocolo de comunicação. Basicamente, todos os frameworks de aplicações
são deste segundo tipo.
Para Stritzinger (1991 p.35), frameworks de componentes são classificados como
“caixa-branca”, sendo mais flexíveis por permitir a modificação e extensão através do reuso,
sem tocar no código-fonte original, permitindo um nível de abstração muito maior que
simplesmente oferecer a gerência de serviços por funções de call-back.
processos, quem cria o framework. O engenheiro de processos por vezes pode desempenhar
os dois papéis. A instanciação do framework, quando se gera a instância de processo, é
realizada por outros engenheiros de processos.
Processos podem ser classificados em diversos tipos, segundo sua estrutura e
utilização. São definidas três grandes divisões:
1. Processo Padrão;
2. Processo Comum; e
3. Modelo de Processo.
Processo Padrão é aquele que têm função normativa. Refletem regras que precisam de
alguma interpretação, mas que podem ser mapeadas, de forma que seu conteúdo seja expresso
dentro de um modelo de processo. Exemplos típicos de processo padrão seriam aqueles
ligados ao controle de qualidade, como processos relacionados à ISO.
Modelos de Processo referem-se a soluções já exaustivamente testadas em uma gama
de problemas recorrentes que ocorrem em um determinado contexto. Confunde-se com o
próprio conceito de framework ao gerir soluções genéricas para problemas com o mesmo
perfil, mas mantém independência de ambiente, podendo ser utilizado em vários frameworks.
A idéia por trás dos Modelos de Processo é a de que, embora não possa ser utilizado
um mesmo processo para resolver um problema em diferentes ambientes, dentro de um
determinado contexto poderá ser criado um processo que sirva como guia na resolução de
problemas similares em ambientes distintos.
Processos comuns são aqueles utilizados dentro de um contexto menor, tratando-se de
um elemento mais operacional. Segundo Fiorini (2001 p.66) eles podem ser classificados, de
acordo com sua funcionalidade, como:
Outro conceito abordado por Fiorini (2001 p.56) é o de Guia de Reutilização, cujo
objetivo é o de auxiliar na reutilização e na instanciação do framework. Fiorini define dois
tipos de guias, o guia do framework e os guias de cada atividade macro. O guia do framework,
como um todo, provê uma visão das atividades macro e oferece suporte à instanciação destas
atividades. O guia de cada atividade macro fornece uma visão das respectivas atividades
detalhadas, mas funciona como referência, pois as mesmas são descritas no processo comum.
Esta estrutura é demonstrada na Figura 118, onde existe também a Linguagem de Modelagem
de Processos, que pode ser definida como uma notação formal para a modelagem dos
processos.
1. Análise;
2. Modelagem;
3. Implementação; e
4. Teste.
O framework JPA (do inglês Java Persistence Architecture) tem como finalidade
única efetuar o mapeamento objeto-relacional, provendo um meio orientado a objetos para
acesso aos dados, sem a necessidade de utilização de SQL, e servindo como base para a
definição da camada de modelo da arquitetura MVC.
As entidades no JPA são objetos simples, normalmente denominados POJOs (Plain
Old Java Objects), acrescidos de anotações que efetuam o mapeamento objeto-relacional,
provendo à classe capacidade de persistência em banco de dados. O uso destas anotações no
JPA foram um grande avanço em relação aos complexos arquivos XML utilizados em versões
antigas do Hibernate, ou nos Entity Beans do J2EE (Java 2 Enterprise Edition), pois
fornecem um meio robusto e prático para codificar o mapeamento.
Como as anotações não são serializáveis, permanecendo no contexto de persistência
envolvido, ao contrário do objeto em si, que pode ser transmitido para as várias camadas do
modelo MVC, pode-se dizer que estas anotações controlam o relacionamento com o banco de
dados em separado da classe, definindo um padrão DAO intrínseco.
O código-fonte para um bean de entidade pode ser observado na Figura 119. Neste
exemplo, a classe é persistida em uma tabela denominada “ALUGUEL”, formada pelos
campos “CODIGO”, “DT_ENTRADA”, “DT_SAIDA” e “PLACA”.
Segundo Burke e Monson-Haefel (2007 p.42), as entidades são objetos Java simples
que são alocados da mesma maneira que qualquer outro objeto Java, tornando-se persistentes
apenas depois de seu código interagir explicitamente com o EntityManager.
No framework JPA é utilizada uma linguagem própria para recuperação das entidades
anteriormente persistidas em banco de dados denominada Java Persistence Query
Language (JP-QL), a qual é muito semelhante ao SQL, porém trabalha com entidades
singulares e coleções de entidades. Qualquer consulta JP-QL é transformada em SQL
apropriada ao banco de dados, conversão esta efetuada a partir das configurações definidas no
arquivo persistence.xml, e o retorno da consulta ao banco pode ser capturado em objetos de
entidade ou coleções.
Um exemplo de consulta com uso de JP-QL pode ser observado na Figura 122.
O framework JPA permite a reutilização direta das entidades, mesmo com a troca do
servidor de banco de dados, possibilitando inclusive a criação automatizada das tabelas na
implantação do aplicativo.
trabalha com anotações, da mesma forma que o JPA, embora o mecanismo de criação e
gerência destes objetos não tenha efetivamente mudado entre as duas versões.
Enterprise Java Beans (EJBs) são os componentes criados no JEE, e definem um
modelo de referência para criação e gestão de objetos distribuídos, o qual é implementado por
diferentes servidores, tais como JBoss, GlassFish, BeA Web Logic, WebSpehre, entre muitos
outros, permitindo o reuso de componentes diretamente, mesmo que seja trocado o servidor.
Segundo Jordan (2004 p.11), em troca do uso de componentes EJB, os desenvolvedores
recebem suporte transparente para distribuição de objetos, persistência, transações e
segurança de acesso.
Os componentes EJB podem ser classificados, como citado por Mukhar, Zelenak,
Weaver e Crume (2006 p.407), Farley e Crawford (2005 p.133), Jordan (2004 p.11), em três
tipos: Session Bean, Entity Bean e Message-Driven Bean (MDB).
Segundo Farley e Crawford (2005 p.133), Session Beans são acessados por um cliente
em um determinado instante, não apresentando persistência, e sendo removidos do servidor
após o período de utilização (sessão). Servem para modelar regras de negócio e fluxos de
informação (workflows), como citado por Mukhar, Zelenak, Weaver e Crume (2006 p.408),
Roman, Sriganesh e Brose (2005 p. 79), Jordan (2004 p.11), podendo ser classificados em:
Por outro lado, enquanto Session Beans modelam os processos de negócio, EJBs do
tipo Entity Bean representam as entidades do aplicativo, ficando responsáveis pela camada de
persistência no modelo J2EE. Neste modelo, cada instância de Entity Bean representa uma
linha da tabela onde os dados daquele Entity Bean são persistidos.
Para Roman, Sriganesh e Brose (2005 p. 123), a grande diferença entre estes dois tipos
de EJBs é que Entity Beans têm uma identidade e um estado visível pelo cliente, além do que
seu ciclo de vida é completamente diferente dos Session Beans, garantindo a sua existência
enquanto os dados existirem no banco de dados, ao invés de simplesmente uma sessão do
236
cliente. Como estes EJBs possuem uma identidade, a qual é representada como uma chave
primária na tabela, eles podem ser distinguidos a partir da comparação destas identidades.
Segundo Mukhar, Zelenak, Weaver e Crume (2006 p.409), em um cenário EJB típico,
quando um Session Bean precisa de acesso aos dados do banco, ele o faz através de chamadas
aos métodos dos Entity Beans.
O modelo proposto pelo J2EE pode ser visualizado na Figura 123, compreendendo as
camadas Model e Control da arquitetura MVC.
O componente MDB não possui fábricas e interfaces de acesso, como os demais tipos
de EJBs, deixando de utilizar o protocolo RMI-IIOP e passando a estar sempre relacionado a
um MOM, de onde partem os dados a serem recebidos por este MDB e tratados em seu único
evento, denominado onMessage. Este tipo de EJB também não é capaz de guardar
informações de estado, atuando sempre no modo Stateless.
Segundo Roman, Sriganesh e Brose (2005 p. 218), são vários os fatores que motivam
a mudança de RMI-IIOP para um padrão assíncrono, baseado em mensagens, destacando-se:
B.4 INTEROPERABILIDADE
• Tradeoffs de engenharia, pois raramente existe apenas uma solução simples para
um problema complexo, o que faz com que diferentes pessoas na corporação
acabem por escolher diferentes soluções;
• Custo efetivo, já que fornecedores apresentam habilidades variadas para prover o
“melhor” sistema pelo menor preço; e
• Sistemas legados, os quais podem se encontrar em pleno funcionamento, sendo
muito difíceis de substituir por novas tecnologias. Neste caso, a decisão pela
mudança ocorre apenas quando o custo de manutenção torna-se muito maior que o
custo para desenvolvimento de uma nova solução.
Em outro trabalho de Vinoski (2002 p. 83), o autor cita que entre as muitas razões para
se utilizar um middleware, todas convergem para uma, que é justamente esta heterogeneidade.
Ainda segundo o autor, sistemas crescem ao longo do tempo, o que significa que hardware e
aplicativos comprados anos atrás devem trabalhar em conjunto com aqueles que foram
adquiridos ontem. Adicionam-se a isto fatores, tais como fusões, reorganizações, mudanças de
liderança, e e-business para a imagem, aumentando a heterogeneidade do sistema global de
forma acentuada.
Com a expansão da Internet e popularização do XML, a interoperabilidade entre as
diversas plataformas de desenvolvimento invariavelmente passou a ser baseada na utilização
de Web Services, os quais constituem serviços disponibilizados na rede e que se utilizam de
entrada e saída de dados em um formato padrão, no caso o XML, o qual pode ser gerado ou
interpretado por qualquer linguagem. Este tipo de estratégia para interoperabilidade é
discutida em detalhes na seção seguinte.
242
DTD XSD
Qualquer serviço criado deve ser registrado via UDDI, passando a fornecer a interface
de utilização deste serviço, envolvendo o formato das mensagens de chamada e de retorno,
através de um arquivo WSDL. Qualquer mensagem transitada entre o servidor e o usuário do
serviço deve ser envelopada segundo o formato do SOAP.
Dentro deste ambiente, os arquivos XSD têm o papel de definir estruturas complexas a
serem enviadas ou recebidas pelos serviços, sendo estes tipos utilizados na mensagem SOAP
para determinar o domínio de determinados atributos.
O processo completo para a definição e uso de Web Services envolve estes passos:
Figura 127: Exemplo de código Java anotado para criação de Web Services
De acordo com Chen (2007 p.3), SOC (Service Oriented Computing), incluindo SOA
(Service-Oriented Architecture), Web Services, e seus modelos de dados e processamento,
representam um novo paradigma computacional que muda a forma para o desenvolvimento de
sistemas e uso de software.
245
O framework de ACCV tem sua interface funcional o que envolve cadastro, adição de
classes, simulação e resultados, totalmente definida a partir de Web Services, o que faz com
que esteja plenamente adaptada às arquiteturas baseada em serviços, porém não foi necessário
utilizar BPEL devido à independência entre as chamadas efetuadas.
De qualquer forma, foi a adoção desta estratégia que permitiu um maior nível de
interoperabilidade e conseqüente uso de uma tecnologia robusta em termos de usabilidade e
construção visual como o Flex para a implementação da interface cadastral.
248
C.1 INTRODUÇÃO
Segundo Law e Kelton (2000 p. 3), um sistema é uma coleção de entidades, como
pessoas ou máquinas, que atuam em conjunto e interagem de forma a completar algum fim
lógico. Os autores também definem estado do sistema como o conjunto de variáveis
necessárias para descrever o sistema em um dado instante, caracterizando o mesmo frente aos
objetivos do estudo. Estas não são definições novas, pois tomam como base as caracterizações
efetuadas por Schmidt e Taylor (1970).
Na prática, a identificação do que é classificado como sistema, bem como das
variáveis que irão descrevê-lo ao longo do tempo, depende destes objetivos, já que um
sistema pode ser composto por outros sistemas, e da mesma forma que pode ser efetuado um
estudo do comportamento de uma turbina isoladamente, pode-se estudar o comportamento de
um avião que utilize esta turbina, classificando-a como um componente apenas, ou até mesmo
a logística de pousos e decolagens de uma frota de aviões.
Existem diversos tipos de modelos, aplicáveis aos mais diversos contextos, tais como
simulações matemáticas baseadas em dados estatísticos, criação de protótipos físicos de
menor porte que os projetos reais, uso de realidade virtual para simulações interativas, entre
muitos outros.
Enquanto modelos físicos envolvem custos com a construção de protótipos e
maquetes, muitas vezes não reutilizáveis após cada análise, os modelos matemáticos não
apresentam estes custos, sendo circunscritos ao custo do desenvolvimento de ferramentas
computacionais reutilizáveis.
Um modelo matemático pode representar o sistema de forma determinística, tratando
de representações estáticas, mesmo que obtidas com recursividade, sendo classificado como
modelo analítico. Estes modelos sempre apresentam um conjunto de variáveis de entrada e
249
um processo matemático que utiliza estas variáveis para obter os dados de saída desejados,
como na programação linear.
Para Wang e Chatwin (2005 p. 1254), modelos analíticos não apresentam as
características necessárias para a representação de sistemas de manufatura complexos, e as
principais deficiências apresentadas são:
Vale lembrar que o maior problema para a solução analítica é que o tempo de
execução na busca da solução pode aumentar exponencialmente frente ao acréscimo de um
grande número de variáveis de entrada, levando à situação em que a necessidade de poder de
processamento está muito acima dos padrões atuais. Nestes casos, métodos de inferência
devem ser utilizados na busca de soluções ótimas, ou próximas das mesmas.
Segundo Wang e Chatwin (2005 p. 1255), um sistema estocástico típico apresenta um
grande número de parâmetros de controle, os quais podem ter um impacto significativo sobre
o desempenho do o sistema. Um modelo que, explicitamente, tenta capturar os componentes
com comportamentos aleatórios mais importantes do sistema, é chamado de modelo aleatório
ou estocástico, onde a solução analítica não é viável.
Esse é o contexto onde a simulação computacional torna-se a melhor opção.
o fato de que seria inviável economicamente a manipulação do sistema físico, uma vez que
poderia trazer graves conseqüências para o funcionamento do mesmo.
Este fato é defendido por Maria (1997 p. 7), ao citar que uma simulação é utilizada
antes de um sistema existente ser alterado ou um novo sistema ser construído, de forma a
reduzir as chances de ocorrência de falhas no cumprimento das especificações, eliminar
gargalos não observados inicialmente, prever sobre ou subutilização de recursos, e otimizar o
desempenho do sistema.
Schmidt (1984 p.65) define modelo como uma representação da realidade sem a
presença da mesma, enquanto Alexander (2006 p.1929) define simulação como o processo de
criação de um modelo para um sistema real ou proposto, objetivando o estudo do desempenho
deste sistema sob condições específicas.
Baseado no modelo que representa o sistema real, para cada simulação executada são
efetuadas seqüências de operações sobre este modelo no sentido de expressar da melhor
maneira possível o funcionamento do sistema.
Para Law e Kelton (2000 p.3), assim como o defendido por Schmidt (1984 p.65), os
modelos criados podem ser classificados quanto à natureza do sistema como discretos, quando
as variáveis de estado têm seus valores alterados instantaneamente em pontos separados do
intervalo, ou contínuos, quando as variáveis de estado são modificadas continuamente ao
longo deste intervalo.
Máquinas industriais são típicos modelos discretos, pois a partir de comandos
eletrônicos ou mecânicos, como “ligar” e “desligar”, o estado muda instantaneamente,
enquanto fenômenos naturais, como a formação de ciclones, normalmente são analisados em
termos de variações contínuas dos estados do modelo.
Outra classificação a ser considerada é a divisão entre modelos determinísticos, ou
analíticos, onde não são considerados elementos probabilísticos, e modelos estocásticos, onde
as variáveis do modelo permitem variações aleatórias, segundo distribuições de probabilidade.
Exemplos de modelos determinísticos são a programação linear, a programação não-linear e a
programação dinâmica, enquanto entre os modelos estocásticos podem ser encontrados a
teoria das filas e a análise de confiabilidade. Esta divisão é defendida por Perros (2009 p.2),
Law e Kelton (2000 p.6), entre outros.
O processo de simulação computacional trata dos modelos estocásticos, ao contrário
dos modelos analíticos, experimentados a partir de processos determinísticos. Um conjunto de
simulações com os parâmetros adequados e distribuições escolhidas corretamente podem
levar a uma média comportamental que se aproxima da realidade com relação ao sistema,
251
1. Identificação do problema;
2. Especificação dos objetivos da análise;
3. Análise das características de funcionamento do sistema e coleta de dados que
descrevem o seu comportamento;
4. Formulação do modelo do sistema;
5. Estimativa dos valores dos parâmetros do modelo;
6. Validação preliminar do modelo;
7. Desenvolvimento dos sistemas computacionais necessários;
8. Validação do modelo final;
9. Especificação dos experimentos de simulação a ser realizado; e
10. A análise dos resultados.
Segundo Law e Kelton (2000 p.6), a simulação por eventos discretos permite a
modelagem de um sistema que evolui ao longo do tempo por uma representação na qual as
variáveis de estado se modificam instantaneamente em instantes pontuais no tempo. No
modelo aqui defendido, a alteração do estado destas variáveis é promovida como resultado da
execução de atividades iniciadas nestes instantes de tempo.
Entre os elementos principais de uma simulação baseada em eventos discretos
encontram-se as variáveis de estado que delineiam as entidades componentes do sistema, a
lista de eventos, o relógio interno da simulação, o gerador de números aleatórios e a
configuração do cenário de análise, incluindo distribuições utilizadas, estados iniciais e
eventos decorrentes de programação prévia (eventos de entrada ou de chegada).
Deve ser levado em conta o fato de que recursos são limitados, e para a execução de
uma determinada atividade todos os recursos necessários devem estar disponíveis no instante
t simulado. Em simulações onde os recursos são considerados na execução das atividades,
listas de espera por disponibilidade de recursos devem ser utilizadas no sentido de propiciar a
suspensão do processamento de um evento qualquer até que os recursos necessários sejam
liberados ou adquiridos ao término do processamento de outros eventos.
Com o avanço do relógio interno os eventos da lista são consumidos, podendo gerar
novos eventos a serem adicionados à lista, ordenada de acordo com o instante desejado para
ocorrência dentro do período simulado, dentro de um processo onde são geradas imagens do
sistema em instantes específicos, caracterizadas pelos valores assumidos pelo conjunto de
variáveis de estado, criando um histórico passível de ser analisado por ferramentas estatísticas
textuais ou gráficas.
257
Embora exista uma grande diversidade de domínios onde a simulação por eventos
pode ser aplicada, algum componentes comuns a todos os sistemas que implementam estes
modelos de simulação foram destacados por Law e Kelton (2000 p.9):
X = {“pedestre”}
S = {“vermelho”, “verde”, “intermitente”}
Y = {“Pedestre Bloqueado”}
S0 = (“vermelho”, 15): Estado inicial “vermelho” por 15s.
δint(“verde”) = (“intermitente”, 15): Transição de verde para intermitente.
δint(“intermitente”) = (“verde”, 15): Transição de intermitente para verde.
δint(“vermelho”) = (“verde”, 15): Transição de vermelho para verde.
δext((“verde”, e), “pedestre”) = (“vermelho”, 20): Chamada de pedestre.
λ(“vermelho”) = “Pedestre Bloqueado”
X = {“sinal”}
Y = {“Pedestre Bloqueado”}
D = {Sem1, Sem2}
{Mi} = {MSem1, MSem2}
{Ii} = {ISem1(“Pedestre Bloqueado”)}
{Zi,j} = {[MSem1(“Pedestre Bloqueado”), MSem2(“sinal”)]}
Existe uma grande discussão acerca do uso de paralelismo na simulação por eventos
discretos devido à natureza seqüencial deste tipo de simulação. A versão com execução de
tarefas em paralelo é formalizada pelo PDEVS (do inglês Parallel Discrete Event System
Specification), baseado em conjuntos de modelos menores seqüenciais acoplados, e as formas
de comunicação entre estes modelos. Com a divisão em unidades menores, as mesmas podem
ser executadas de forma independente, sujeitas apenas a processos de sincronização
determinados.
Segundo Ziegler e Sarjoughian (2003 p. 35), o modelo PDEVS pode ser descrito
formalmente como se segue:
Não houve uma formalização do Modelo de Pilla e Cople em termos das notações aqui
citadas, porém as características de um DEVS podem ser facilmente observadas, já que ocorre
o tratamento de forma seqüencial os eventos para cada simulação. No entanto, a nova
implementação apresentada aproveita-se dos recursos computacionais atuais, que permitem
processos paralelos para tarefas secundárias e distribuição de processamento.
Em outras palavras, apesar de processar os eventos de forma seqüencial, o framework
de ACCV efetua tarefas como persistência ou envio de dados em processos independentes,
retirando os atrasos de gravação e transmissão do tempo necessário ao cálculo, além de
utilizar um modelo cliente-servidor, com a execução de múltiplos clientes simultaneamente,
enquanto o servidor provê cenários de simulação e captura resultados.
262
0. Indisponível;
1. Disponível em Espera (Stand by); e
2. Disponível Operando
O histórico destes estados é armazenado em uma estrutura de lista definida por Cople
(2004), a qual foi denominada “Linha de Vida”, armazenando todo o histórico de cada
instância de produto no decorrer da simulação.
Como os produtos podem ser substituídos por sobressalentes, participar de operações e
sofrer manutenções de forma independente, cada instância de produto (sistema ou
componentes) tem sua própria “Linha de Vida” cada qual com resultados finais
completamente distintos, pois apenas haveria a equivalência de resultados em sistemas
perfeitos, onde nenhum componente estivesse sujeito a qualquer tipo de falha.
No Modelo de Pilla e Cople, a função de o avanço no tempo ta(s) é obtida a partir da
duração de cada atividade executada, as quais podem ser iniciadas por eventos internos ou
externos.
Nesse modelo a geração de eventos é determinada a partir do encapsulamento de uma
máquina de estados, segundo o padrão de desenvolvimento State, havendo sempre um estado
inicial, estados intermediários e um estado final. O estado inicial é determinado por
agendamentos ou modos de falha, elementos que determinam o conjunto X de eventos
externos.
As funções δext e λ(s) foram definidas no Modelo de Pilla e Cople a parir do estado
inicial para cada modelo de geração de eventos, enquanto a função δint(s) pode ser obtida a
partir da interpretação dos demais estados. Estes outros estados, além do inicial, acabam por
determinar o conjunto Y de eventos internos.
264
Estado
2
0
20 40 60 80 100 120 140 160 180 Tempo
Sob uma ótica inicial, os eventos podem ser expressos como pulsos efetuados em
determinados instantes da existência do sistema, com a amplitude dada pela duração total da
atividade executada. Pode haver um nível de aleatoriedade para cada uma das variáveis
consideradas.
A Figura 132 apresenta uma representação gráfica da ocorrência dos eventos e a
duração das atividades geradas.
Duração da Atividade
24
16
Duração da Atividade
24
16
Figura 133: Eventos causadores de indisponibilidade com distribuição definida e duração fixa
Estado
2
0
20 40 60 80 100 120 140 160 180 Tempo
Figura 134: Efeito sobre um sistema com operação agendada, com deslocamento
Estado
2
0
20 40 60 80 100 120 140 160 180 Tempo
Figura 135: Efeito sobre um sistema com operação agendada, sem deslocamento
266
Um simulador flexível deve ser capaz de efetuar algumas operações para lidar com a
complexidade da simulação em si, como por exemplo, possibilitar a mudança atributos e
variáveis, bem como de processos, permitir o uso de expressões matemáticas, e possibilitar a
criação de novos modelos, modificar os atuais e utilizar estes novos em modelos criados
posteriormente.
No que tange à facilidade de uso, os elementos principais a serem considerados são a
criação de um depurador, preocupação com velocidade de execução, criação de interfaces
amigáveis, uso de valores default, e interoperabilidade.
Mesmo com o poder dos atuais computadores e redes de computadores, simuladores
são sistemas muito complexos, que utilizam cálculos em larga escala, necessitando de
otimizações contínuas no sentido de melhorar a velocidade de execução. Neste ponto deve ser
decidido também entre o uso de uma plataforma portável, como o Java, ou uma linguagem
que irá gerar código para um sistema operacional específico, como o C++, que permite
acesso direto ao hardware voltado para aceleração de operações matemáticas.
Quanto ao uso de animações, estas podem ser em tempo de execução da simulação, o
que deve ser bem planejado, já que irá diminuir a velocidade de execução da mesma, ou
posterior à simulação, representando o histórico de estados observados durante a simulação.
No caso de simulações longas e distribuídas é necessário informar ao utilizador do
sistema qual o estágio atual de execução, informando qual o percentual completado para cada
simulação ativa, tanto na própria máquina quanto nas diversas máquinas utilizadas em
simulações distribuídas, consumo e disponibilidade de recursos de hardware, erros ocorridos
268
Item Preço Lote Peso Vol Qtd Qtd Percentual ∆$1 MTBF2 RIP
Unitário (Kg) (m³) Util Nec Uso (%) (%)3
S1 220.000,00 1 2000 500 1 1 100 22.000,00 - -
M1 5.000 -
E1 89.000,00 1 1300 250 1 1 100 6.000,00
M2 10.000 -
LRU11 83.000,00 1 1200 220 1 1 100 3.000,00 500 20
SRU111 50.000,00 10 600 100 1 1 100 50.000,00 5.000 0
SRU112 15.000,00 5 500 100 2 2 100 15.000,00 1.000 0
E2 109.000,00 1 650 150 1 1 50 7.000,00 10.000 -
LRU21 102.000,00 1 500 120 1 1 100 102.000,00 5.000 5
1
Custo incremental para produção do componente.
2
MTBF para o modo de falha especificado, sem influência do tempo de falha dos filhos.
3
Manutenção sobre Equipamentos tem de ser feita no local.
270
Uma observação a ser feita sobre os dados da tabela é a de que o equipamento “E1”
apresenta dois modos de falha distintos, denominados “M1” e “M2”. Outro ponto a ser
considerado é o fato de que os equipamentos analisados não poderão ser retirados, não sendo
aplicável o parâmetro RIP.
As cidades consideradas na simulação são Rio de Janeiro, São Paulo, Brasília, Belo
Horizonte, e Manaus, e o meio de transporte rodoviário é utilizado como padrão para todos os
percursos entre as cidades.
Em São Paulo e no Rio de Janeiro encontram-se os órgãos operacionais, sendo que
alguns reparos podem ser feitos pela equipe técnica alocada em São Paulo, enquanto no Rio
de Janeiro apenas a retirada de alguns componentes e a manutenção dos equipamentos “E1” e
“E2” (que não podem ser retirados) podem ser realizadas.
Belo Horizonte encontra-se como Órgão de Manutenção de primeiro nível e Brasília
efetua o segundo nível de manutenção, além de efetuar as atividades de desenvolvimento do
projeto. O último nível de manutenção é definido pelo fabricante, situado em Manaus.
O cenário inicia-se na data de 01/01/2001, simulando o funcionamento do sistema
durante um período de 20 anos. Os parâmetros globais utilizados para manutenção e
transporte são NFF de 5%, NRTS de 5% e percentual de valor para seguro (no caso de
transporte de componentes) no valor de 7% do preço unitário do componente.
Em se tratando dos fatores financeiros, também foi definido um intervalo de desconto
de dois meses, a uma taxa de 0,25%.
271
Quanto ao sistema utilizado, serão instaladas duas unidades no Rio de Janeiro e quatro
em São Paulo, operando de acordo com a Tabela 20.
Tabela 22: Tempo gasto por atividade em horas, para o caso de teste
Estas atividades geram custos, e ocorrem, muitas vezes, a partir de modelos de geração
aleatórios, ou agendados, além dos modos de falha. Os modelos de geração de eventos e
cálculo de custo são definidos na Tabela 23.
273
Tabela 25: Atividades de manutenção corretiva executadas por órgão no caso de testes
Produto/Atividade RJ SP MG DF MA
REPARO1 X X
E1 REPARO2 X X
RECOLOCAÇÃO X X
LRU11 REPARO X X X X
RETIRADA X X
RECOLOCAÇÃO X X X
SRU111 REPARO X X X
RETIRADA X X X
RECOLOCAÇÃO X X X
SRU112 REPARO X X X
RETIRADA X X X
E2 REPARO X X
RECOLOCAÇÃO / RETIRADA X X
LRU21 REPARO X X X X
275