Pós-Graduação em Ciência da Computação “AvComponent: Um Framework para Desenvolvimento de Componentes de Realidade Virtual em Infraestrutura de Compartilhamento de Componentes em Nuvem” Por Daniel Abella Cavalcante Mendonça de Souza Dissertação de Mestrado Universidade Federal de Pernambuco [email protected] www.cin.ufpe.br/~posgraduacao RECIFE 2014 UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DANIEL ABELLA CAVALCANTE MENDONÇA DE SOUZA “AvComponent: Um Framework para Desenvolvimento de Componentes de Realidade Virtual em Infraestrutura de Compartilhamento de Componentes em Nuvem” ESTE TRABALHO FOI APRESENTADO À PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO. ORIENTADOR: Prof. Dr. Fernando da Fonseca de Souza CO-ORIENTADOR: Prof. Dr. Marcus Salerno de Aquino RECIFE 2014 Catalogação na fonte Bibliotecária Jane Souto Maior, CRB4-571 S729a Souza, Daniel Abella Cavalcante Mendonça de AvComponent: um framework para desenvolvimento de componentes de realidade virtual em infraestrutura de compartilhamento de componentes em nuvem / Daniel Abella Cavalcante Mendonça de Souza. – Recife: O Autor, 2014. 86 f.: il., fig., quadro Orientador: Fernando da Fonseca de Souza. Dissertação (Mestrado) – Universidade Pernambuco. CIn, Ciência da computação, 2014. Inclui referências. Federal 1. Ciência da computação. 2. Engenharia de software. 3. Computação em nuvem. 4. Realidade virtual. I. Souza, Fernando da Fonseca de (orientador). II. Título. 004 CDD (23. ed.) UFPE- MEI 2015-50 de Dissertação de Mestrado apresentada por DANIEL ABELLA CAVALCANTE MENDONCA DE SOUZA à Pós-Graduação em Ciência da Computação do Centro de Informática da Universidade Federal de Pernambuco, sob o título “AvComponent: Um Framework para Desenvolvimento de Componentes de Realidade Virtual em Infraestrutura de Compartilhamento de Componentes em Nuvem” orientada pelo Prof. Fernando da Fonseca de Souza e aprovada pela Banca Examinadora formada pelos professores: ______________________________________________ Prof. André Luis de Medeiros Santos Centro de Informática/UFPE ______________________________________________ Prof. Gabriel de França Pereira e Silva Departamento de Estatística e Informática / UFRPE _______________________________________________ Prof. Fernando da Fonseca de Souza Centro de Informática / UFPE Visto e permitida a impressão. Recife, 27 de novembro de 2014. ___________________________________________________ Profa. Edna Natividade da Silva Barros Coordenadora da Pós-Graduação em Ciência da Computação do Centro de Informática da Universidade Federal de Pernambuco. AGRADECIMENTOS Ao professor Fernando da Fonseca de Souza, pela confiança e pela colaboração durante a execução deste trabalho e ao professor Marcus Salerno de Aquino, pela contribuição na minha inserção na área acadêmica, assim como acompanhamento durante todo este percurso. À Deus, por ter colocado na trajetória da minha vida, pessoas maravilhosas como minha esposa, Nathaly Abella, meus pais, Eurípedes Sebastião e Elisa Abella, e o meu irmão, Felipe Abella. Aos meus amigos professores e alunos da faculdade iDez (Estácio de Sá), em especial aos professores Jaildo Pequeno, Karoline Lira e Gerson Domingos. Por fim, aos meus amigos, Edvalson Ribeiro, Tibério Lúcio, Paulo André (Paulão), Max Davis, Eder Ferreira, Ryan Ribeiro, César Rocha e Rodrigo Fujioka. RESUMO Cenários tridimensionais construídos com técnicas de RV estão sendo usados em sistemas nas mais diversas áreas, em especial em educação. Entretanto, durante o processo de criação, os ambientes tridimensionais, assim como os componentes de software desenvolvidos estão destinados à plataforma criada. Com intuito de permitir o compartilhamento de componentes em RV, sejam ambientes tridimensionais ou componentes de software, é apresentado o framework AvComponent, que permite aos mais diversos sistemas na área compartilhar seus componentes, assim como obter outros componentes, podendo ainda aprimorá-los. Para contemplar esta necessidade, técnicas de Desenvolvimento Baseado em Componentes foram desenvolvidas, em associação com ferramentas de Computação nas Nuvens, em especial o Banco de Dados nas Nuvens. Palavras chaves: 1. Computação nas nuvens. 2. Engenharia de software. 3. Reuso de software. 4. Realidade virtual ABSTRACT Tridimensional scenarios built with Virtual Reality techniques are being used in systems in several areas, especially in education. However, during the creation process, tridimensional environments and developed software components are limited to the platform it was originally created. In order to allow sharing of components in Virtual Reality area (tridimensional environments or software components), is presented the AvComponent framework that allows several systems in the area share their components as well as obtain or improve other components. To address this need, Component-based Development techniques were developed in association with Cloud Computing tools, especially Cloud Databases. Keywords: 1. Cloud computing. 2. Software engineering. 3. Software reuse. 4. Virtual reality LISTA DE FIGURAS Figura 1: Apresentação do Jogo Second Life Figura 2: Camadas de Software no Java 3D Figura 3: Relação das Características Essenciais, Modelos de Serviço e Modelos de Implantação Figura 4: Características Essenciais de Cloud Computing Figura 5: Modelos de Serviço Figura 6: Exemplo de Aplicativos no Modelo Software as a Service (SaaS) Figura 7: Exemplo de Ambientes no Modelo Platform as a Service (PaaS) Figura 8: Relacionamento entre os Modelos de Implantação Figura 9: Estrutura Básica de um Banco de dados como Serviço Figura 10: Classificação de Banco de Dados nas Nuvens Figura 11: Disseminação das primeiras ideias sobre reuso de software Figura 12: Processo de Desenvolvimento de Software baseado em DBC proposto por Sommerville Figura 13: Arquitetura do NRVA Figura 14: Ambiente do TSS Figura 15: Ambiente do ViMeT Figura 16: Representação do Processo de Desenvolvimento Scrum Figura 17: Arquitetura do AvComponent Figura 18: Relação das Tecnologias e Frameworks envolvidos no Desenvolvimento Figura 19: Arquitetura Interna do Browser Figura 20: Processo de Associação de uma Task ao Browser Figura 21: Representação gráfica da estrutura do descritor de implantação Figura 22: Processo de Associação de uma Task ou Ambiente Tridimensional ao Browser Figura 23: Implementação Mínima para uma Task Figura 24: Resultado da associação de uma Task simples Figura 25: Processo de Solicitação de um Ambiente em Base Interna Figura 26: Arquitetura do VEPersonal Figura 27: Arquitetura do VEPersonal após integração com o AvComponent Figura 28: Processo de Solicitação de uma Task Figura 29: Apresentação de um Ambiente pelo VEPersonal Figura 30: Ambiente Apresentado pelo VEPersonal com TouchSensor Mapeado pelo AvComponent Figura 31: Apresentação de uma Task do AvComponent no VEPersonal Figura 32: Demonstração do Módulo de Modelagem Visual de Agentes com o AvComponent LISTA DE QUADROS Quadro 1: Obstáculos e Oportunidades em Cloud Computing Quadro 2: Requisitos chave para um SGBD nas nuvens Quadro 3: Benefícios e Dificuldades na Abordagem de Reuso de Software Quadro 4: Requisitos para Estruturação de um Repositório de Componentes Quadro 5: Comparativo entre as Ferramentas Analisadas Quadro 6: Relação dos Papéis e Responsabilidades no Processo Scrum Quadro 7: Exemplo válido de um descritor de implantação para o browser Quadro 8: Parte do Ambiente X3D para o Processo de Associação de uma Task ao Browser Quadro 9: Arquivo browser.xml para Processo de Associação de uma Task ao Browser Quadro 10: Descrição dos Testes realizados na Aplicação LISTA DE ABREVIAÇÕES AV: Ambientes Virtuais AVA: Ambiente Virtual Adaptativo API: Application Programming Interface BD: Banco de Dados CC: Cloud Computing DBC: Desenvolvimento Baseado em Componentes DSL: Domain Specific Languages DSVL: Domain Specific Visual Language EAD: Ensino a Distância EC2: Amazon Elastic Cloud Computing ES: Engenharia de Software GP: Gerência de Projetos IAAS: Infrastructure as a Service JPA: Java Persistence API MOR: Mapeamento Objeto-Relacional NIST: National Institute of Standards and Technology OTAN: Organização do Tratado do Atlântico Norte OO: Orientação a Objetos PAAS: Platform as a Service PMK: Project Management Knowledge RV: Realidade Virtual SL: Service Locator SAAS: Software as a Service SGBD: Sistemas de Gerenciamento de Banco de Dados SMA: Sistema Multi-Agente TI: Tecnologia da Informação TSS: Transformer Substation Simulation VEPERSONAL: Personalized Virtual Environment VPN: Virtual Private Network VRML: Virtual Reality Model Language X3D: Extensible 3d XML: eXtensible Markup Language XP: Extreme Programming SUMÁRIO 1 Introdução ................................................................................................. 14 1.1 1.2 1.3 2 Motivação ............................................................................................................. 15 Objetivos............................................................................................................... 16 Organização do Trabalho...................................................................................... 16 Referencial Teórico .................................................................................. 18 2.1 Realidade Virtual .................................................................................................. 18 2.1.1 Representação de Objetos Tridimensionais ...................................................... 21 2.1.2 Armazenamento de Objetos Tridimensionais .................................................. 22 2.2 Computação nas Nuvens (Cloud Computing) ...................................................... 24 2.2.1 Características Essenciais ................................................................................. 26 2.2.2 Modelos de Serviço .......................................................................................... 28 2.2.3 Modelos de Implantação ................................................................................... 31 2.2.4 Tendências da Cloud Computing...................................................................... 33 2.3 Banco de Dados nas Nuvens (Cloud Databases) ................................................. 33 2.3.1 Categorias ......................................................................................................... 35 2.4 Engenharia de Software ........................................................................................ 36 2.4.1 Reuso de Software ............................................................................................ 37 2.5 Trabalhos Relacionados ........................................................................................ 41 2.5.1 NRVA ............................................................................................................... 42 2.5.2 Java Adaptive Dynamic Environment .............................................................. 43 2.5.3 Transformer Substation Simulation (TSS) ........................................................ 44 2.5.4 Virtual Medical Training (ViMeT) ................................................................... 44 2.6 Conclusões ............................................................................................................ 45 3 AvComponent: Um Framework para Desenvolvimento de Componentes de Realidade Virtual em Infraestrutura de Compartilhamento de Componentes em Nuvem ........................................................................................................ 47 3.1 Metodologia de Desenvolvimento ........................................................................ 47 3.2 Arquitetura de Software ........................................................................................ 49 3.2.1 Tecnologias ....................................................................................................... 51 3.2.2 Módulo Cliente (Browser) ................................................................................ 52 3.2.3 Módulo Servidor ............................................................................................... 59 3.3 Testes .................................................................................................................... 60 3.4 Considerações Finais ............................................................................................ 62 4 Aplicação do Framework para Reuso de Ambientes na Ferramenta VEPersonal ....................................................................................................... 63 4.1 4.2 4.3 4.4 4.5 Ferramenta VEPersonal ........................................................................................ 63 Processo de Integração com o VEPersonal .......................................................... 64 Execução do Cenário do Estudo de Caso ............................................................. 66 Avaliação do Cenário do Estudo de Caso ............................................................ 68 Considerações Finais ............................................................................................ 70 5 Conclusões e Trabalhos Futuros............................................................... 71 5.1 Contribuições ........................................................................................................ 71 5.2 Limitações ............................................................................................................ 72 5.3 Trabalhos Futuros ................................................................................................. 72 5.3.1 Modelagem Visual de Agentes Inteligentes ..................................................... 72 5.3.2 Ferramenta Web de Gerenciamento de Componentes ..................................... 74 5.4 Produção Científica .............................................................................................. 74 Referências ....................................................................................................... 81 14 1 Introdução Buscando a redução do impacto na adoção de Ambientes de Ensino a Distância (EAD), Ambientes Virtuais (AV) estão sendo aplicados, pois eliminam as fronteiras físicas para o aprendizado, de maneira que o desenvolvimento de habilidades cognitivas seja realizado com uso da Internet. Nestes ambientes, a realidade pode ser descrita como ambientes interativos, compostos por objetos tridimensionais, com objetivo de simular ambientes reais ou imaginários, de maneira que os usuários interajam por meio da visualização e manipulação de objetos (Kirner e Siscoutto, 2007). Nos últimos anos, AV tornaram-se uma das ferramentas adotadas para a composição de ambientes de aprendizagem em diversas áreas do conhecimento (Aquino et al., 2007), como por exemplo os relacionados às áreas de Medicina e Engenharia de Software. Especificamente na área de medicina, pode-se citar como exemplo o MEDIDACTE Project (Soul et al., 2001), o qual dispõe de um ambiente adaptativo para o desenvolvimento de capacidades na referida área. Uma importante característica do projeto é a adaptatividade, que permite tratar de maneira individual as necessidades inerentes de cada usuário, considerando a sua capacidade cognitiva. Por outro lado, na área de Engenharia de Software, existe um ambiente de ensino a distância chamado Project Management Knowledge (PMK) Learning Environment (Torreão, 2005), que atua no ensino de conceitos na área de Gerência de Projetos (GP). Atuando na mesma área, o Honey (Souza et al., 2008) possui foco no ensino de metodologias ágeis, em especial a metodologia Extreme Programming (XP) (Beck, 2000; Martin, 2003). Apesar dessa evolução, as ferramentas que utilizam AV têm no processo de criação dos seus ambientes uma limitação. Uma vez que os artefatos são gerados pelas ferramentas ou frameworks estão limitados apenas à aquela plataforma. Entretanto, estes artefatos poderiam representar boas soluções na área e serem disseminados, ou ainda evoluídos em outras plataformas, o que é impossibilitado pela limitação supracitada. 15 Neste contexto, a introdução de técnicas de reuso poderia estimular a criação de AV melhores, independentemente de plataformas, visto que as boas soluções geradas pela comunidade poderiam ser reutilizadas e possivelmente aprimoradas. O Reuso de Software comumente é relacionado a aumento de produtividade e qualidade nos artefatos gerados, que podem ser reutilizados em vários projetos. Segundo Souza e Wills (1999), nesta área quando se cita o Reuso de Software não apenas se refere ao código fonte, mas também às interfaces de usuário, testes, entre diversos artefatos relacionados. Na área de Reuso de Software, existem diversas abordagens, entre elas o Desenvolvimento Baseado em Componentes (DBC) (Sametinger, 1997), Linguagens Específicas de Domínio, mais comumente conhecidas pela sua sigla DSL, referindo-se ao termo em inglês Domain Specific Languages (DSL) (Fowler, 2010; Mernik et al., 2005). Além dos citados, existem técnicas como Reengenharia de Software (Jacobson e Lindstrom, 1991), Designação de Frameworks (Johnson, 1997), entre outras abordagens menos populares. Entre as técnicas citadas anteriormente, o DBC tem destaque como uma abordagem promissora na área de Realidade Virtual (Oliveira et al., 2009), uma vez que componentes são reutilizáveis, intercambiáveis, de uso geral ou específicos, podendo interagir ainda com outros componentes. 1.1 Motivação Com objetivo de usufruir dos benefícios da abordagem do DBC em ambientes de RV, pode-se criar um serviço de repositório de Ambientes Virtuais, possibilitando o armazenamento, busca e recuperação destes ambientes (Guo e Luqui, 2000), o que possibilita a contribuição para a disseminação das soluções. Entretanto, verifica-se que, em alguns casos, tem-se a disponibilização de ambientes tridimensionais ou componentes de Software, porém, seguem a mesma limitação técnica, na qual os componentes estão destinados a apenas uma plataforma. Além disto, os repositórios não atuam de maneira distribuída, limitando a escalabilidade e disponibilidade do sistema. 16 1.2 Objetivos Esta dissertação tem como objetivo principal propor, construir e validar um framework que fornece uma infraestrutura para disponibilização de componentes em RV, seja componente de Software, ou de ambientes tridimensionais, como qualquer artefato que possa ser descrito por meio desta infraestrutura. A infraestrutura desenvolvida, denominada AvComponent framework disponibiliza estes componentes em um repositório baseado em Cloud Computing, que possibilita o compartilhamento dos componentes de maneira distribuída. 1.2.1 Objetivos Específicos Analisar as técnicas de Reuso de Software e suas aplicações em Ambientes Virtuais; Desenvolver um framework visando definir componentes na área de RV; Analisar as técnicas de Cloud Computing, em especial Cloud Databases; Desenvolver um repositório para os componentes integrado ao framework desenvolvido, disponibilizado em um ambiente de Cloud Computing; e Validar o framework desenvolvido em integração com a ferramenta VEPersonal. 1.3 Organização do Trabalho Além desta introdução, este trabalho está organizado em mais seis capítulos como se segue: Capítulo 2 – Referencial Teórico: Nesse capítulo, serão abordados inicialmente conceitos essenciais na área de Realidade Virtual (RV), Computação nas Nuvens (Cloud Computing - CC), com ênfase em Banco de Dados nas Nuvens (Cloud Databases). Além destes assuntos, ainda são abordados conceitos de Engenharia de Software, com foco 17 especial em DBC. Por fim, é realizada uma análise dos trabalhos relacionados e as considerações finais do capítulo. Capítulo 3 - Uma Infraestrutura para Reutilização de Ambientes Virtuais Tridimensionais com Técnicas de Reuso de Software e Cloud Computing: Nesse capítulo, será abordada a metodologia de desenvolvimento adotada para a construção do framework e os detalhes da sua arquitetura de software, incluindo as tecnologias utilizadas, e na sequencia descrevem-se os testes de software realizados. Capítulo 4 - Aplicação do Framework para Reuso de Ambientes na Ferramenta VEPersonal: Nesse capítulo, é abordada a ferramenta VEPersonal, que será usada como estudo de caso, detalhando todo o processo de integração. Na sequência, tem-se detalhes sobre a execução e avaliação do estudo de caso, seguido pelas considerações finais do capítulo. Capítulo 5 – Conclusões e Trabalhos Futuros: Neste capítulo é realizada a apresentação das contribuições do trabalho, seguida das suas limitações. Na sequência, serão apresentados alguns possíveis trabalhos futuros e a produção científica resultante deste trabalho. 18 2 Referencial Teórico Esta dissertação envolveu três abrangentes linhas de pesquisa, que são a Realidade Virtual, Computação nas Nuvens e Engenharia de Software. Com objetivo de esclarecer cada uma destas linhas de pesquisa, assim como os pontos relevantes para este trabalho, neste capítulo são descritos conceitos relacionados à Realidade Virtual, incluindo as formas de representação e armazenamento. Em seguida, é examinada a computação das nuvens e, em especial, o banco de dados nas nuvens. Por fim, são tratados conceitos de engenharia de software importantes para este trabalho, como Reuso de Software e a sua técnica chamada desenvolvimento baseado em componentes. 2.1 Realidade Virtual A área de RV é uma das subáreas da Computação Gráfica que permite a criação de ambientes gerados por computador que lidam com características como imersão, de maneira que a realidade é representada por meio de objetos tridimensionais (Machado, 2003; Kirner e Siscoutto, 2007). Segundo Braga (2001), o termo RV se refere a uma técnica avançada de interface, que prevê a interação do usuário por meio de ambientes tridimensionais. Complementarmente, o mesmo autor explicita que a RV é composta de três ideias básicas: interação, envolvimento e imersão. Os ambientes construídos com emprego de Realidade Virtual são também conhecidos por AV, e conforme Oliveira et al. (2009) pode ser definido como um ambiente na qual é incorporado algum avatar, ou seja, o usuário atua como um personagem, podendo interagir com o ambiente, o qual pode ser compostos por diversas entidades, a exemplo de casas, veículos ou pessoas (Singhal e Zyda, 1999). Desta maneira, torna-se possível a participação e interação de diversos usuários entre si e em tempo real, de maneira que estes passam estar conectados em locais geograficamente diferentes, colaborando e interagindo entre si (Kirner e Siscoutto, 2007). 19 Em sistemas de RV, a interatividade está relacionada às respostas do sistema em função das ações do usuário, envolvendo navegação e capacidade de manipular objetos do mundo virtual (Pessin et al., 2008). Entretanto, para que esta interatividade seja desempenhada de maneira mais realista é essencial que a geração de imagens seja em tempo real e direcionada às necessidades do usuário. Neste contexto, Braga (2001) também relaciona alguns benefícios na utilização de Realidade Virtual: Amplia a motivação dos usuários; Aprimora capacidade de representação de conceitos; Permite a análise do ambiente em diversos âmbitos; Possibilita a realização de novas experiências; Possibilita conhecer o seu próprio nível de aprendizado; e Facilita o manuseio de pessoas com deficiência de maneira a realizar tarefas antes não possíveis. De acordo com o modo de interação do usuário, os AV podem ser classificados em: Ambientes Imersivos: nestes ambientes, o usuário tem a sensação que as suas atividades produzem reações em ambientes virtuais. Para o desenvolvimento de ambientes imersivos, é necessária a aquisição de dispositivos que possibilitem a captura dos movimentos do usuário, como por exemplo, luvas e capacetes digitais (Kirner, 1996); e Ambientes Não-Imersivos: nestes ambientes, as interações com os ambientes tridimensionais serão realizadas com emprego de monitores de vídeo. Embora estes não necessitem de dispositivos de captura de movimentos, muitas vezes são os mais adotados, pois possuem menor custo envolvido, são independentes da localização geográfica do usuário, e, além disso, podem fazer uso das novas tecnologias para representação de ambientes tridimensionais existentes (Kirner, 1996). 20 Devido à inserção de ambientes tridimensionais que representam à realidade, assim como a associação de atributos como interação, envolvimento e imersão, os ambientes virtuais são frequentemente aplicados em sistemas de entretenimento e educação (Braga, 2014). No entanto, a aplicabilidade destes ambientes não se restringe aos citados anteriormente, podendo ser utilizados em sistemas de simulação, como por exemplo, o Second Life, mostrado na Figura 1, que conforme o nome se propõe, disponibiliza um ambiente tridimensional de maneira que você pode escolher o seu avatar, podendo interagir com outras pessoas, representando uma segunda vida, porém dentro deste ambiente. Figura 1: Apresentação do Jogo Second Life Fonte: http://www.secondlife.com No sentido de ampliar a discussão sobre o assunto, a Seção 2.1.1 apresenta as formas de representação de objetos tridimensionais geralmente empregadas para o desenvolvimento de ambientes virtuais, enquanto na Seção 2.1.2 serão discutidas as formas de armazenagem destes ambientes. 21 2.1.1 Representação de Objetos Tridimensionais Para o desenvolvimento de Ambientes Virtuais, tem-se a necessidade de utilização de uma linguagem que possibilite a definição de objetos tridimensionais, podendo descrever propriedades como cor, escala, dimensões, posicionamento e forma, de maneira que o usuário possa interagir e recuperar informações (Aquino et al., 2007). Atuando neste sentido, com relação a linguagens utilizadas para representação dos objetos tridimensionais, será relacionado neste trabalho o Java 3D (Sowizral et al., 1997), Virtual Reality Model Language (VRML) (Ames et al., 1997) e Extensible 3d (X3D) (X3D, 2014). O framework Java3D é escrito com a linguagem Java (Java, 2014), e possui um conjunto de classes que abstraem a complexidade na criação e manipulação de objetos geométricos, com objetivo de fornecer um framework que atue independentemente de plataforma, assim como é a linguagem Java e o VRML, que são discutidos na sequência (Barrilleaux, 2000). Conforme se pode verificar na Figura 2 abaixo, as aplicações que usam o framework Java 3D estão escritas em um nível mais alto de abstração, ocultando detalhes na geração de gráficos, informações de hardware, entre outras informações. Figura 2: Camadas de Software do framework Java 3D Fonte: Adaptado de http://www.inf.pucrs.br/~manssour/Publicacoes/TutorialSib2003.pdf 22 Na sequência, é abordada a linguagem VRML. Esta permite a construção de mundos virtuais com objetos persistidos no sistema de arquivos, devendo ao ambiente possuir todas as características necessárias para sua execução (Carey e Bell, 1997). Por fim, a linguagem X3D, provida pela Web3D Consortium, é uma evolução do VRML supracitado, caracterizado por uma padronização mais elaborada, que permite a manipulação de objetos em tempo real, desta maneira promovendo o reuso, além de ter integração com Serviços Web, o que dá a possibilidade de vincular recursos externos, além de permitir a integração entre sistemas (Brutzman, 2010). Após apresentação de como os ambientes tridimensionais podem ser representados, na Seção 2.1.2 apresenta como estes são armazenados. 2.1.2 Armazenamento de Objetos Tridimensionais As linguagens como a X3D permitem construir ambientes tridimensionais utilizando uma estrutura XML, atuando especificamente nesta linguagem, uma vez que este trabalho faz uso desta linguagem, nesta seção são identificadas as maneiras com que estes objetos tridimensionais que compõem estes ambientes podem ser armazenados visando a identificação de maneiras de promover a reutilização destes. a) Banco de Dados Relacional A origem do termo Banco de Dados (BD) surge da palavra em inglês databank, de maneira que os primeiros trabalhos usaram este termo. Porém, o termo passou a ser descontinuado, enquanto o termo database, que significa Base de Dados passou a ser usado amplamente até os dias atuais (Heuser, 2011). O modelo de BD Relacional foi introduzido pelo pesquisador inglês Edward Frank Codd (1970) no artigo A relational model for large shared data banks, na qual se baseia na teoria das relações para fornecer o gerenciamento de dados. O termo BD se refere ao mecanismo de armazenamento e recuperação de dados, de forma que o que torna relacional é o modo com que estes dados estão dispostos, em que neste caso, refere-se às tabelas, na qual os relacionamentos entre tabelas as tornam relacionais e atualmente é o tipo mais amplamente usado nos sistemas (Heuser, 2011). 23 Pode-se citar como exemplos de Sistemas de Gerenciamento de Banco de Dados (SGBD) relacionais amplamente usados o MySQL (MySQL, 2014), PostgresSQL (PostgreSQL, 2014), SQL Server (SQLServer, 2014) e o Oracle Database (Oracle, 2014). O uso deste tipo de SGBD em aplicações de RV acontece por meio da utilização de campos para armazenamento de texto, na qual são inseridos os arquivos X3D em formato XML, ou ainda, em formato binário (Aquino et al., 2007), entretanto ambas as abordagens hoje não são amplamente usadas devido às funcionalidades de manipulação de arquivos em formato XML descritas a seguir. b) Banco de Dados (XML nativo ou com suporte para XML) Para permitir um tratamento de documentos XML de maneira mais eficiente, surgiram os SGBD XML, que nativamente possuem modelo lógico baseado em documentos XML (Mello, 2002). Os SGBD XML, visando interagir com o XML persistido incorporam linguagens de consultas como o XPath (XPath, 2014) ou o XQuery (XQuery, 2014), que possibilitam consultar padrões em textos ou consultar por trechos do arquivo XML, obtendo como resposta fragmentos do arquivo ou ainda informações em específico. Neste contexto, tem-se SGBD que foram desenvolvidos especificamente para trabalhar com documentos XML, que são os SGBD XML nativos, a exemplo do Oracle Berkeley DB (Olson et al., 1999). Por outro lado, existem outros tipos de SGBD que podem adquirir tais funcionalidades com uso de extensões como é o caso do PostgreSQL (Kido et al., 2006). O uso deste tipo de SGBD em aplicações de RV acontece por meio da utilização de consultas em formato XML persistidas, podendo retornar trechos do ambiente, ou ainda informações específicas, entretanto com um desempenho superior aos de SGBD relacionais, visto que o tratamento do arquivo XML é realizado pelo SGBD, seja de maneira nativa ou customizada com uso de bibliotecas (Sousa et al, 2010). 24 c) Banco de Dados Nas Nuvens A Cloud Computing surge como uma possibilidade de expor suas aplicações, e neste caso o SGBD, em um ambiente de terceiros, que dispõe de toda a infraestrutura necessária (Abadi, 2009). Por se tratar de um tema emergente, o qual o framework proposto neste trabalho abordará, as Seções 2.2 e 2.3 tratam respectivamente dos temas Computação das Nuvens (Cloud Computing) e Banco de Dados nas Nuvens (Cloud Databases). 2.2 Computação nas Nuvens (Cloud Computing) O termo cloud se originou na área das telecomunicações, ao utilizarem os serviços de Virtual Private Network (VPN) para comunicação de dados (Jadeja e Modi, 2012). Posteriormente, este termo migrou para a área de Tecnologia da Informação (TI), movendo computação e dados para Data Centers. A definição de Cloud Computing mais disseminada foi provida pelo National Institute of Standards and Technology (NIST) informa que “Computação em Nuvem é um modelo que possibilita acesso, de modo conveniente e sob demanda, a um conjunto de recursos computacionais configuráveis que podem ser rapidamente adquiridos e liberados com mínimo esforço gerencial ou interação com o provedor de serviços” (Mell e Grance, 2011; Jansen e Grande, 2011). Na seqüência é mostrada na Figura 3, segundo a definição do NIST, quais seriam as características essenciais, modelos de serviço e implantação, que serão aprofundadas em seções posteriores. 25 Figura 3: Relação das Características Essenciais, Modelos de Serviço e Modelos de Implantação Fonte: Adaptado de Mell e Grance (2011) Segundo Jadeja e Modi (2012), o principal objetivo da Cloud Computing é fazer melhor uso de recursos distribuídos, combinando-os para obter maior rendimento e ser capaz de solucionar problemas de escalabilidade em computação. Armbrust et al. (2012), em seu trabalho A View of Cloud Computing, define Cloud Computing e se refere à aplicações entregues como serviços na Internet e Hardware e Software alocados em Data Centers, que provêem estes serviços. Nos últimos anos, o conceito de Cloud Computing se difundiu, de maneira que o pagamento é realizado da mesma maneira de uma conta de água, luz ou telefone, isto é, baseado no uso (Weinhardt, 2009). Desta maneira, a utilização de recursos de computação passam a ser disponilizados de maneira transparente com pagamento baseado na utilização. Armbrust et al. (2012) sintetiza no Quadro 1 abaixo os dez obstáculos para o crescimento deste tema e, para cada um dos obstáculos, as oportunidades existentes. Conforme o mesmo autor, os três primeiros afetam a adoção, os próximos cinco afetam o crescimento e os dois últimos são políticas e obstáculos no negócio. 26 Quadro 1: Obstáculos e Oportunidades em Cloud Computing Fonte: Lima (2014) Nas próximas seções, descrevem-se em maiores detalhes as características essenciais da Computação nas Nuvens, modelos de serviço e modelos de implantação, até que na sequencia discutiremos o tema Cloud Databases. 2.2.1 Características Essenciais Conforme discutido anteriormente, a definição de Cloud Computing proposta pelo NIST, sintetizada na Figura 3, elencava algumas de suas características, relacionada na Figura 4 a seguir e discutida em maiores detalhes na sequência. 27 Figura 4: Características Essenciais de Cloud Computing Fonte: Adaptado de http://engineeringmentor.com/cloud-computing-characteristics-the-essential-five-tounderstand/ a) Auto-atendimento sob demanda (On-demand Self-service) Neste caso, o cliente poderá adquirir recursos computacionais unilateralmente, na medida em que for necessário, sem interação humana. Por exemplo, o cliente possui um servidor nas nuvens de uma empresa e caso o tráfego esteja excedendo a quantidade adquirida, ou o processador ou espaço em disco estiver insuficiente, ou quaisquer outros recursos computacionais na mesma situação, pode-se adquirir mais recursos instantaneamente (Mell e Grance, 2011; Jansen e Grande, 2011; Sousa et al., 2010). b) Rápida Elasticidade (Rapid Elasticity) Neste caso, os recursos podem ser adquiridos e removidos com elasticidade, possibilitando escalabilidade de acordo com a demanda e a possibilidade de liberação de recursos quando há uma diminuição da demanda, ou seja, de acordo com o ponto de vista do usuário, os recursos parecem ilimitados (Mell e Grance, 2011; Sousa et al., 2010). Usando o exemplo descrito anteriormente, em que o cliente tinha necessidade de mais recursos (seja de armazenamento, processamento, tráfego, entre outros), o fator descrito aqui (Rápida Elasticidade) possibilita que os recursos solicitados estejam disponíveis instantaneamente (Sousa et al., 2010). 28 c) Amplo Acesso à Rede (Ubiquitous Network Access) Neste caso, os serviços disponibilizados na nuvem estão acessíveis de qualquer plataforma, sendo usadas em plataformas heterogêneas, por exemplo, para um computador pessoal ou um smartphone (Mell e Grance, 2011; Sousa et al., 2010). d) Pool de Recursos (Resource Pooling) Neste caso, os recursos computacionais são organizados em um pool para servir múltiplos usuários, ou seja, há uma virtualização de armazenamento de maneira que a localização física dos recursos é transparente para o usuário (Mell e Grance, 2011; Sousa et al., 2010). e) Serviços Mensuráveis (Measured Service) Neste caso, os recursos adquiridos são controlados e monitorados automaticamente, de maneira que há uma transparência entre o cliente e o fornecedor, informando os serviços adquiridos e a utilização em dado momento (Mell e Grance, 2011; Sousa et al., 2010). Além da transparência, permite ao cliente evitar a indisponibilidade do serviço por algum recurso computacional, de maneira que, em dado momento recursos complementares podem ser adquiridos para suprir uma possível falta. Após apresentação dos detalhes dos itens elencados pelo Nist (Mell e Grance, 2011; Jansen e Grande, 2011) como características essenciais da Computação nas Nuvens, na Seção 2.2.2 serão detalhados os modelos de serviço 2.2.2 Modelos de Serviço Seguindo a definição de Cloud Computing proposta pelo Nist, sintetizada na Figura 3, foram elencados três tipos de modelos de serviço, detalhados posteriormente e relacionados na Figura 5. 29 Figura 5: Modelos de Serviço Fonte: Adaptado de http://www.cloudreview.in a) Software as a Service (SaaS) Dentre os três modelos de serviço, o SaaS é o mais amplamente conhecido, visto que o foco principal são os usuários finais, conforme relacionado na Figura 5, fornecendo os serviços de uma aplicação sendo executada na infraestrutura nas nuvens. Pode-se citar como exemplos, o Google Drive e o Amazon S3, que oferecem serviços de armazenamento de dados nas nuvens (Cloud Storage), assim como o Gmail, que atua provendo serviços de correio eletrônico. Ainda podem-se citar como exemplos, os aplicativos apresentados na Figura 6. Nota-se que muitas destas aplicações são amplamente utilizadas e os usuários desconhecem a infraestrutura subjacente que provê o serviço. 30 Figura 6: Exemplo de Aplicativos no Modelo Software as a Service (SaaS) Fonte: Adaptado de http://www.cloudreview.in b) Platform as a Service (PaaS) Provê ao consumidor a capacidade de implantar aplicações criadas pelo próprio usuário ou desenvolvidas pelo provedor em uma infraestrutura na Cloud Computing (Mell e Grance, 2011). Por este motivo, conforme relacionado na Figura 5, o foco principal são os desenvolvedores. Pode-se citar como exemplos, os aplicativos apresentados na Figura 7, entre os quais se pode destacar o Windows Azure, no qual qualquer desenvolvedor cadastrado pode enviar os seus aplicativos e a infraestrutura é controlada pela Microsoft. Figura 7: Exemplo de Ambientes no Modelo Platform as a Service (PaaS) Fonte: http://www.cloudreview.in 31 Complementarmente, Sousa et al (2010) informam que um PaaS fornece sistema operacional, linguagens de programação e ambiente de desenvolvimento para aplicações, auxiliando a implementação de sistemas de software. c) Infrastructure as a Service (IaaS) Neste caso se tem acesso transparente aos servidores, as redes e ao armazenamento ou outros recursos computacionais, podendo desta forma executar qualquer software, incluindo sistemas operacionais (Mell e Grance, 2011). Seguindo a mesma ideia dos anteriores, a infraestrutura é controlada e monitorada pelo provedor, como é o exemplo do Amazon Elastic Cloud Computing (EC2), que provê acesso a máquinas virtuais hospedadas no Data Center da Amazon (Sousa et al., 2010). Com a designação do modelo de serviço é necessário selecionar o modelo de implantação, que conforme se discute na Seção 2.2.3, depende principalmente da necessidade, assim como do objetivo do negócio a ser implantado. 2.2.3 Modelos de Implantação Após selecionar o modelo de serviço, que pode ser IaaS, PaaS ou SaaS, há a necessidade de definir qual o modelo de implantação necessária, uma vez que tem-se a necessidade de ambientes mais restritos, pois dependendo da área de negócio, a exposição dos dados nas nuvens pode se tornar uma vulnerabilidade. De acordo com Sousa et al. (2010), a escolha do modelo de implantação está baseada nos seguintes itens: Restrição ou Abertura de Acesso; Área de Atuação; Tipo de Informação; e Nível de Visão. 32 Neste contexto, os Modelos de Implantação segundo a definição de Cloud Computing proposta pelo Nist, são detalhados posteriormente e relacionados na Figura 8. Figura 8: Relacionamento entre os Modelos de Implantação Fonte: Sousa et al. (2010) a) Nuvem Pública A infraestrutura da Cloud é provisionada para uso geral e amplamente disponível e está sob as premissas do provedor da Cloud, fazendo com que tenha perspectiva de redução na sua utilização, devido a segurança dos dados, o que impulsionou a Nuvem Híbrida, que é detalhada na sequência (Sousa et al., 2010). b) Nuvem Privada A infraestrutura da Cloud é provisionada para uso exclusivo para apenas uma organização (Sousa et al., 2010). c) Nuvem Comunidade A infraestrutura da Cloud é provisionada para uso exclusivo por uma comunidade de consumidores de organizações que possuem interesses comuns, a exemplo de requisitos de segurança, política, entre outros requisitos (Sousa et al., 2010). 33 d) Nuvem Híbrida A infraestrutura da Cloud é a composição de dois ou mais distintas infraestruturas nas nuvens (privada, pública ou comunidade), de forma que permanecem entidades únicas, ou seja, virtualizadas como uma única entidade, porém unidas por tecnologia, permitindo, por exemplo, balanceamento de carga entre nuvens (Sousa et al., 2010). 2.2.4 Tendências da Cloud Computing De acordo com Morrissey (2014), o tema Cloud Computing seguirá transformando a maneira como as organizações fazem negócios e pode-se esperar um aprimoramento nos mecanismos de segurança e controle corporativo, de maneira que as empresas possam mover processos importantes para a nuvem. Skok (2014) assinalou que a Nuvem Híbrida passará a ser a mais utilizada nos próximos 5 anos, enquanto que a Nuvem Pública diminuirá substancialmente devido a preocupações com segurança. Com apresentação das características essenciais da Computação nas Nuvens, seus modelos de serviço e implantação, na Seção 2.3 será detalhado uma tendência de aplicações em Cloud Computing, que é o Banco de Dados nas Nuvens (Cloud Databases). 2.3 Banco de Dados nas Nuvens (Cloud Databases) Nos últimos anos, com o crescimento de ferramentas baseadas na Cloud Computing, surge a possibilidade de disponibilizar banco de dados, como uma opção para redução de custo através do medição da utilização dos serviços, disponibilizando a infraestrutura e o sistema para terceiros (Abadi, 2009). Outro fato que torna o banco de dados candidatos potenciais para implantação na nuvem é a manutenção de um banco de dados em sua infraestrutura temos uma instalação complexa e o alto custo de hardware, assim como licenciamento (Sousa et al., 2010). Em seu artigo Relational Cloud: The Case for Database Service, Curino et al. (2010), após discussão com pesquisadores na área e potenciais usuários, elencou quais 34 seriam os requisitos chave para um SGBD atuar como um serviço, apresentado no Quadro 2. Desta forma, os clientes podem ter maior previsibilidade, custos inferiores e redução de complexidade técnica (Curino et al., 2010). Quadro 2: Requisitos chave para um SGBD nas nuvens Fonte: Sousa et al. (2010) Baseado nos requisitos expostos anteriormente, Sousa et al. (2010) apresentaram como seria uma estrutura básica de um Banco de Dados atuando como Serviço, mostrada na Figura 9. Cada inquilino contrata o provedor de serviços e a responsabilidade de disponibilidade e confiabilidade são transferidos ao provedor, mantendo a transparência da infraestrutura ao usuário . 35 Figura 9: Estrutura Básica de um Banco de dados como Serviço Fonte: Sousa et al. (2010) Após apresentar a estrutura básica de um Banco de Dados como Serviço, na Seção 2.3.1 apresentam-se as categorias de Banco de Dados na Cloud Computing. 2.3.1 Categorias O Banco de Dados na Cloud Computing, conforme apresentado na Figura 10, podem ser classificados em Relacionais e Não-Relacionais, estes últimos podendo ser considerados como Nativos ou Não-Nativos, de forma que: No primeiro quadrante, tem-se SGBD relacionais construídos para operar nas nuvens, incluindo funcionalidades de administração de dados adequadas; No segundo quadrante, tem-se SGBD que não foram concebidos para a nuvem, entretanto podem ser utilizados neste sentido; No terceiro quadrante, tem-se SGBD que foram concebidos para a nuvem e não são relacionais, utilizando o par chave-valor, tendo-se como exemplos o Amazon S3, HBase, Cassandra e o Voldermont. 36 No quarto e último quadrante, tem-se SGBD que não são relacionais e não foram concebidos para as nuvens, como é o caso do Neo4j, Orient DB, Couch DB e o Mongo DB. Figura 10: Classificação de Banco de Dados nas Nuvens Fonte: Adaptado de Sousa et al. (2010) Na Seção 2.4 descreve-se a Engenharia de Software, destacando técnicas de Reuso de Software e uma das suas principais técnicas que é o Desenvolvimento Baseado em Componentes. 2.4 Engenharia de Software Engenharia de Software (ES) é o estabelecimento e o emprego de sólidos princípios de engenharia para obtenção de software de forma econômica, que seja confiável e eficiente em máquinas reais (Mahoney, 2004). Em outra visão, Musa (1975), define ES como a aplicação da abordagem sistemática, disciplinada e quantificável no desenvolvimento, na operação e na manutenção do Software. 37 Em 1968, diante da crise do software, em uma conferência na Organização do Tratado do Atlântico Norte (OTAN), Mc Ilroy, conforme mostrado na Figura 11 apresenta as primeiras ideias e os benefícios referentes ao conceito que existe de reuso de software. Figura 11: Disseminação das primeiras ideias sobre reuso de software Fonte: http://homepages.cs.ncl.ac.uk/brian.randell/NATO/N1968 Complementarmente, Krueger (1992) relata que durante esta conferência foi apresentada uma definição simples, porém poderosa de reuso de software, momento em que, segundo sua opinião, deveria ter se tornado um padrão em Engenharia de Software. 2.4.1 Reuso de Software Entre as técnicas de programação, o Reuso de Software é uma das menos evidenciadas, pela sua complexidade e ao baixo conhecimento do corpo técnico a respeito do assunto. Com a utilização desta técnica, para um código desenvolvido, testado e disponibilizado em ambiente de produção, este poderia ser reutilizado em outros cenários similares. No ano de 1992, Charles Krueger relatou um cenário em que as empresas buscavam melhorias em seu processo de criação de software, principalmente no que diz respeito a 38 qualidade e produtividade. Neste contexto, Krueger (1992) define Reuso de Software como o processo de criar novos aplicativos a partir de já existentes ao invés de construí-los desde o início. O reuso de software possibilita, de acordo com Freeman (1987), o uso destes artefatos em outro cenário para o qual não foi produzido inicialmente. Em visão complementar, Werner e Braga (2000), relatam que o reuso necessita de uma sistemática ampla e formal para realizá-la, podendo obter os benefícios e dificuldades descritos no Quadro 3. Quadro 3: Benefícios e Dificuldades na Abordagem de Reuso de Software Benefícios - Qualidade - Produtividade - Redução de Custos - Redução de Tempo - Flexibilidade Dificuldades - Identificação, recuperação, compreensão - Modificação, composição - Qualidade de componentes - Barreiras psicológicas, legais e econômicas - Necessidade de incentivos Fonte: Werner e Braga (2000) 39 Para determinar boas propriedades para reuso de software, Krueger (1992) define cinco dimensões: Abstração - Identificar unidades de conhecimento reutilizáveis e representálos de forma abstrata; Classificação - Armazenar o conhecimento reutilizável em uma base de conhecimento classificada e indexada; Seleção - Consultar o conhecimento reutilizável em forma parametrizada; Especialização - Modificar o conhecimento reutilizável para atender novas situações; e Integração - Combinar o conhecimento reutilizável com seu projeto. Pode-se citar como exemplos clássicos de reuso de software: as linguagens de programação de alto nível, como a linguagem Java (Gosling, 2000), frameworks, como o Swing (Ekstein et al., 1998) que atua na construção de interfaces gráficas. Nesta área, existem diversas abordagens, entre elas o DBC (Sametinger, 1997), Linguagens Específicas de Domínio, mais comumente conhecidas pela sua sigla DLS, referindo-se ao termo em inglês Domain Specific Languages (DSL) (Fowler, 2010). Além das abordagens citadas, existem técnicas como Reengenharia de Software (Jacobson e Lindström, 1991), frameworks de aplicação (Camargo e Masiero, 2005), padrões de projeto (Gamma et al., 1994), desenvolvimento de software orientado a aspectos (Elrad e Bader, 2001), entre outras abordagens menos populares. Na Seção 2.4.1.1 serão detalhados os conceitos de DBC, que possui abordagens bem sucedidas em integração com aplicações na área de RV (Oliveira et al, 2009), uma vez que componentes são reutilizáveis, intercambiáveis, de uso geral ou específicos, podendo interagir ainda com outros componentes. 40 2.4.1.1 Desenvolvimento Baseado em Componentes Segundo Werner e Braga (2000), componentes de software são artefatos autocontidos, identificáveis, possuindo função específica com interfaces bem definidas, de forma a propiciar a sua reutilização em outros ambientes. Uma visão complementar, Singhal e Zyda (1999) definem componentes como uma unidade que possui interfaces especificadas previamente definidas, por meio de contratos e dependências de contexto explícitas. Nesta abordagem, um aplicativo é criado a partir da integração entre diversos componentes, fazendo com que, após serem desenvolvidos possam ser reutilizados integralmente em outros aplicativos, viabilizando o aumento de produtividade (Sommerville, 2003). Morisio (2000) relata que é necessária a introdução de processos de software específicos ao invés de adaptar os processos tradicionais ao paradigma DBC, que é uma das principais causas para fracasso na adoção do DBC. Complementarmente, Sommerville (2003) propõe um fluxo de atividades para o processo de desenvolvimento de sistemas baseados no paradigma DBC, mostrado na Figura 12. Figura 12: Processo de Desenvolvimento de software baseado em DBC proposto por Sommerville Fonte: Sommerville (2013) 41 Segundo Henninger (1997), um ponto chave para obtenção de melhores resultados com DBC é a estruturação de um repositório para acesso e disponibilização dos componentes. Para a estruturação de um repositório, Guo e Luqui (2000) elencaram no Quadro 4 os requisitos para estruturação de um repositório de componentes, que conforme Werner e Braga (2000) podem ser classificados em: locais, específicos a um domínio e de referência. Quadro 4: Requisitos para Estruturação de um Repositório de Componentes Interface para as operações básicas no manuseio de componentes (uso, pesquisa e disponibilização). Disponibilização de documentação sobre cada componente. Estrutura padrão para os componentes. Esquema para classificação nos mais diversos domínios. Fonte: Guo e Luqui, 2000 Compartilhando a mesma visão, Werner e Braga (2000) identificam que a chance de um desenvolvedor reutilizar um dado componente está diretamente relacionada a disponibilidade com que um componente possa ser localizado e recuperado. Na Seção 2.5 serão relacionadas as ferramentas que trabalham com aplicação de DBC na área de RV, que é o foco deste trabalho, considerando ambientes nas nuvens, assim como ambientes que não estão nas nuvens. 2.5 Trabalhos Relacionados O levantamento bibliográfico realizado teve como principal objetivo identificar os sistemas que possuem suporte ao desenvolvimento de aplicações envolvendo conceitos de RV, DBC e Cloud Computing. 42 Neste contexto, para descrever os trabalhos relacionados, foram definidos critérios de inclusão e exclusão, que foram: - Critérios de Inclusão: Plataformas/Aplicações/Frameworks que possuem suporte ao suporte ao desenvolvimento de aplicações na área de RV; Plataformas/Aplicações/Frameworks que possuem desenvolvimento de aplicações na área de RV com base no DBC; e Plataformas/Aplicações/Frameworks que possuem suporte ao desenvolvimento de aplicações na área de RV com infraestrutura nas Nuvens. - Critério de Exclusão: Plataformas/Aplicações/Frameworks que não possuem suporte ao desenvolvimento de aplicações na área de RV. 2.5.1 NRVA . Relacionando o conceito de DBC na área de RV e RA em um ambiente na nuvem, o NRVA (Freiberger, 2013) apresenta um modelo arquitetural de uma plataforma de produção, compartilhamento e execução de aplicações de realidade virtual e aumentada, apresentado na Figura 13. A plataforma NRVA conta com dois níveis de abstração, o módulo Serviços de Plataforma, que são os serviços básicos ofertados aos clientes, enquanto que o módulo Subsistemas de Plataforma concentra os serviços de baixo nível, como controle de acesso e recursos, produção, execução e renderização de mundos 3D (Freiberger, 2013). 43 Figura 13: Arquitetura do NRVA Fonte: Freiberger (2013) 2.5.2 Java Adaptive Dynamic Environment . Em uma perspectiva diferente do NRVA, o Java Adaptive Dynamic Environment (Oliveira et al., 2003) disponibiliza um framework para o desenvolvimento de aplicações de RV na linguagem Java (Goesling, 2000), de forma a unificar e padronizar este processo. Entretanto, não há uma clara definição dos componentes, assim como estes poderiam ser reutilizados em outras plataformas. 44 2.5.3 Transformer Substation Simulation (TSS) A ferramenta TSS (Li et al., 2010) possui similaridades com o NRVA, para criar uma infraestrutura para desenvolvimento de aplicações de RV, de forma que nesta aplicação é definido um ambiente de simulação de transformação em estações de energia elétrica, como os apresentados na Figura 14. Também é evidenciada neste trabalho a redução de custo, assim como aumento na qualidade de software, uma vez que todos os componentes são gerados e montados por meio da ferramenta. Figura 14: Ambiente do TSS Fonte: Li et al. (2010) 2.5.4 Virtual Medical Training (ViMeT) Com atuação na produção de aplicações para simulação de exames de biópsia, como os da Figura 15, o Virtual Medical Training (ViMeT) possui grandes contribuições para a área, possibilitando a criação de ambientes amparados por uma metodologia, de forma que os ambientes criados de forma customizada podem ser reutilizados dentro da infraestrutura criada (Nunes, 2010). 45 Figura 15: Ambiente do ViMeT Fonte: Nunes (2010) 2.6 Conclusões Neste capítulo, foram apresentados conceitos fundamentais sobre RV, como a representação de objetos tridimensionais, além das formas de armazenamento, entre os quais o Banco de Dados nas Nuvens se destaca, devido as suas características de escalabilidade e disponibilidade, que em aplicações na área de RV são um diferencial. Neste capítulo foram tratados ao leitor os conceitos fundamentais sobre Engenharia de Software, em especial o tema de Reuso de Software com a abordagem de DBC, que com a correta aplicação, possibilita o compartilhamento de soluções para aplicações futuras. Sobre os trabalhos relacionados (Seção 2.5), foram apresentados quatro trabalhos que conforme os critérios apresentados estão sintetizados no Quadro 5. Verificou-se que o trabalho mais recente, o NRVA (Freiberger, 2013), reúne a maior parte das abordagens estabelecidas em nossos critérios, em comparação aos outros sistemas elencados. 46 Quadro 5: Comparativo entre as Ferramentas Analisadas Realidade Virtual Realidade Aumentada Infraestrutura nas Nuvens Desenvolvimento Baseado em Componentes NRVA (Freiberger, 2013) Sim Sim Não Sim Java Adaptive Dynamic Environment (Oliveira et al., 2003) Sim Não Não Não TSS (Li et al., 2010) Sim Não Não Sim ViMeT (Nunes, 2010) Sim Não Não Não Fonte: O Autor Aliando aplicações na área de RV em um de Banco de Dados nas Nuvens, com estrutura de reuso de componentes desenvolvidos, no próximo capítulo será descrito o framework proposto neste trabalho. 47 3 AvComponent: Um Framework para Desenvolvimento de Componentes de Realidade Virtual em Infraestrutura de Compartilhamento de Componentes em Nuvem Em decorrência do avanço da RV e dos recursos computacionais relacionados, AV com cenários de RV mais realistas podem ser desenvolvidos. Entretanto, durante o processo de criação destes ambientes, muitas vezes existe a limitação das soluções desenvolvidas para a plataforma em que foi concebida, inviabilizando o compartilhamento de artefatos que poderiam ser utilizados, ou ainda possivelmente aprimorados, em outras plataformas. De forma a contribuir para solucionar esta limitação, é apresentado neste capítulo detalhes de um framework intitulado AvComponent, que busca promover o reuso de componentes de RV, que podem ser componentes de Software ou de ambientes tridimensionais. Basicamente, este framework cria uma estrutura para definição de componentes na qual podem-se ser disponibilizados pelo repositório em uma infraestrutura de banco de dados nas nuvens. Desta forma, os usuários podem obter componentes de terceiros, assim como compartilhar os seus componentes. Este capítulo está organizado da seguinte forma. A Seção 3.1 apresenta a metodologia adotada para o desenvolvimento da aplicação. Na Seção 3.2 são apresentados detalhes sobre a arquitetura da ferramenta, enquanto na Seção 3.3, é descrito como foi realizada a fase de testes durante o desenvolvimento da ferramenta. Por fim, a Seção 3.4 aborda as considerações finais. 3.1 Metodologia de Desenvolvimento A adoção de uma metodologia é fundamental para guiar o processo de desenvolvimento de software, permitindo não somente definir quais etapas serão realizados no projeto, assim como controlar todas as atividades, pessoal e artefatos gerados durante a construção do sistema de software. 48 Neste sentido, a metodologia de desenvolvimento utilizada para a criação desta ferramenta foi a Scrum (Rubin, 2012), que é um processo de desenvolvimento ágil baseado em ciclos de aproximadamente trinta dias, conhecidos por Sprints. Este processo relaciona três papéis (roles): Equipe (Team), Product Owner e o Scrum Master (Sutherland et al., 2007), cujas responsabilidades são apresentadas no Quadro 6. Quadro 6: Relação dos Papéis e Responsabilidades no Processo Scrum Role (Papel) Responsabilidade Equipe (Team) Disponibilizar as soluções. Product Owner Assegurar se a Team está desenvolvendo o solicitado. Geralmente, isto é realizado pelo cliente ou alguém que possua a perspectiva do negócio. Scrum Master Assegurar que as práticas do Scrum estão realmente sendo executadas Fonte: Sutherland et al. (2007) Para o alcançe desta metodologia, são definidas as etapas apresentadas na Figura 16. Inicialmente o Product Owner indica quais as funcionalidades desejadas por meio do Product Backlog, que é um documento que descreve todos os objetivos daquele Sprint. Posteriormente, as funcionalidades que serão implementadas no Sprint, tornam-se o chamado Sprint Backlog, que reflete as necessidades do cliente naquele Sprint. Por fim, este Sprint Backlog deve ser implementado pela Equipe (Team) dentro de um Sprint, que possui variante de duas a quatro semanas. Durante este período, o Scrum Master fará reuniões diárias (chamadas de Daily Scrum Meeting) sempre no mesmo horário com a equipe, visando o conhecimento do andamento do projeto, assim como as necessidades envolvidas e as atividades planejadas. Além disto, o papel Scrum Master também supervisionará as atividades para assegurar se as práticas deste processo estão sendo colocadas em sequência. 49 Figura 16: Representação do Processo de Desenvolvimento Scrum Fonte: Adaptado de Rubin (2012) A metodologia de desenvolvimento descrita anteriormente, utilizado para o desenvolvimento do framework apresentado, foi usada devido a sua objetividade, com a associação de apenas três papéis e a imposição de boas práticas no desenvolvimento (Rubin, 2012). Após a apresentação da metodologia de desenvolvimento usada para a definição deste framework, na próxima seção inicia-se o detalhamento técnico sobre a arquitetura de software para construção do AvComponent. 3.2 Arquitetura de Software O termo Arquitetura de Software, conforme Garlan e Perry (1994), é a estrutura de componentes do programa/sistema, suas inter-relações, princípios e diretrizes que regem sua concepção e evolução ao longo do tempo. Complementarmente, Bass (2007) define Arquitetura de Software como a(s) estrutura(s) do sistema, que são compostos por componentes de software, as interfaces destes componentes e suas respectivas relações. Em uma visão mais recente, Barbosa (2009) descreve Arquitetura de Software como a organização do sistema, por meio de seus componentes, considerando os princípios de design e evolução. 50 A arquitetura do framework é apresentada na Figura 17, e está organizada em dois módulos, que são o módulo cliente e o módulo servidor, estruturados de maneira que os componentes sejam reutilizados, seguindo a técnica de reuso de software DBC. Figura 17: Arquitetura do AvComponent Fonte: O Autor 51 O primeiro módulo é o cliente, que representa a diversidade de sistemas que podem usufruir dos componentes de RV providos pelo servidor, usando este framework. Por outro lado, os componentes que são consumidos pelos clientes são gerenciados pelo módulo servidor, que possui o serviço Service Locator (SL), que verifica se o componente de RV requisitado está na infraestrutura de banco de dados nas nuvens. Após a apresentação da arquitetura de software, na Seção 3.2.1 serão detalhadas as tecnologias envolvidas, enquanto os módulos que compõem a arquitetura são detalhados nas Seções 3.2.2 e 3.2.3. 3.2.1 Tecnologias Para construção do framework AvComponent, a relação das ferramentas e frameworks estão descritas na Figura 18. Figura 18: Relação das Tecnologias e Frameworks envolvidos no Desenvolvimento Fonte: O Autor 52 No módulo cliente (browser), foi aplicado o toolkit Xj3d, que permite a importação de ambientes escritos na X3D (Daly e Brutzman, 2010), que foi construída com base na linguagem VRML (Carey e Bell, 1997). Esta linguagem dispõe de recursos avançados de áudio, vídeo, navegação e interação com o usuário, que facilitaram a sua adoção. Para prover uma infraestrutura de banco de dados nas nuvens, adotou-se a solução chamada NuoDB (Brynko, 2012), que possui foco em ambientes de dados geo-distribuídos, sendo considerado um Cloud Database, contando com cache distribuída e durável, baseada em replicação sob demanda (Lemos, 2014; Brynko, 2012). Desta maneira, pode-se ter um ambiente como representado na arquitetura (Figura 16), na qual pode-se ter diversas instâncias públicas e privadas com componentes à disposição do framework. Por fim, para realizar o acesso do NuoDB, foi utilizado a Java Persistence API (JPA), que é uma Application Programming Interface (API) e que atua no mapeamento objeto-relacional (MOR). Esta API permite a representação de conceitos em Banco de Dados para conceitos de Orientação a Objetos (OO), facilitando a manipulação dos dados, na qual as consultas são facilitadas pela API por meio da manipulação de objetos (Keith et al., 2013). 3.2.2 Módulo Cliente (Browser) Conforme abordado anteriormente, o cliente (browser) representa a diversidade de sistemas na área de RV que podem consumir os recursos dos componentes disponibilizados pelo servidor, na qual tem-se o repositório dos componentes. No entanto, para que o browser consiga incorporar as funcionalidades dos componentes, definimos este framework de forma a fornecer uma estrutura padrão para consumo dos componentes. Apresentada na Figura 19 a arquitetura interna do browser. 53 Figura 19: Arquitetura Interna do Browser Fonte: O Autor As funcionalidades relativas ao gerenciamento dos ambientes tridimensionais estão presentes no módulo principal, ou seja, representa a implementação dos browsers que usarão o AvComponent. Para validar o funcionamento da arquitetura, foi utilizado o toolkit Xj3d (Hudson et al., 2002), que trabalha com ambientes descritos na linguagem X3D, entretanto quaisquer outros toolkits para gerenciamento de ambientes tridimensionais escritos na linguagem Java (Gosling, 2000) podem ser usados. No módulo Task estão relacionados todos os recursos que permitem a associação dinâmica de componentes de RV, que durante este trabalho foram nomeados de tasks, que podem ser componentes de software, assim como de ambientes tridimensionais. Este módulo é composto pelo componente chamado Task Manager, que após a leitura de um descritor de implantação (i.e. browser.xml) que é implementado na linguagem XML, efetuará uma associação adequada das tasks ao browser com base em regras previamente definidas. Este processo de associação é apresentado na Figura 20. 54 Figura 20: Processo de Associação de uma Task ao Browser Fonte: O Autor Em linhas gerais, após o browser ser iniciado pelo usuário, o módulo Task busca pelo descritor de implantação, que é o arquivo browser.xml. Caso este descritor seja definido, este é lido e as tasks são configuradas e associadas com as informações contidas neste mesmo descritor. Com o objetivo de associar dinamicamente as tasks ao browser, o descritor de implantação faz o mapeamento das funcionalidades por meio de touchSensors, que são regiões interativas para o usuário, para descrever o momento em que um determinado componente deve ser associado. Entretanto, não são todos os touchSensors que necessitam possuir tasks associadas. Desta forma, torna-se necessário realizar a categorização destes touchSensors, permitindo diferenciar os touchSensors que possuem tasks associadas e quais não possuem. De acordo com a sua aplicabilidade, o touchSensor pode ser classificado como: ENVIRONMENT - solicita o carregamento de uma task que representa um novo ambiente tridimensional, localizado pelo AvComponent na infraestrutura de banco de dados nas nuvens; WINDOW - sinaliza ao Task Manager que a ação desempenhada com o touchSensor associado com este tipo desencadeará a associação de uma task que representa um componente de software em tempo de execução; 55 NONE - nenhuma ação é desempenhada. Este é o padrão para todos os touchSensors que não foram associados no descritor de implantação. Caso o descritor de implantação não seja definido, este é o padrão para todos os touchSensors. O descritor de implantação deste browser é descrito por meio da linguagem XML, cuja estrutura deste documento está descrita por meio de um Schema (Harold et al., 2004). É apresentada, na Figura 21, a representação gráfica da estrutura deste documento, enquanto que, na Quadro 7, há um exemplo válido de um descritor de implantação para o browser. Figura 21: Representação gráfica da estrutura do descritor de implantação Fonte: O Autor De forma a complementar a representação gráfica da estrutura do descritor de implantação apresentada, as seguintes informações devem ser relacionadas: a tag browser relaciona todos os touchSensors mapeados por meio da tag touchSensor que é categorizado, indicado com o atributo type, que pode assumir os valores ENVIRONMENT, WINDOWS ou NONE; a tag touchSensor possui as tags name, description, x3d e task, que descrevem respectivamente o nome do touchSensor, descrição do mesmo, nome do ambiente tridimensional e o nome qualificado da classe que contém a funcionalidade (task) que será associada dinamicamente. 56 a tag x3d é opcional, devendo apenas ser associada às tags touchSensor que possuam o atributo type configurado com ENVIRONMENT, informado o nome do arquivo X3D que será localizado pelo framework. a tag task é opcional, devendo apenas ser associada às tags touchSensor que possuam o atributo type configurado com WINDOW. o atributo class da tag task conterá o nome qualificado da classe que provê a implementação da interface Task. Nesta classe, têm-se todas as funcionalidades da tarefa que será associada ao browser. Quadro 7: Exemplo válido de um descritor de implantação para o browser <browser xmlns="http://www.abella.com.br/schema/browser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://abella.com.br/schema/browser http://abella.com.br/schema/browser/browser.xsd"> <touchSensor type="WINDOW"> <name>TouchExecutar</name> <description>Execute an experiment</description> <task class="com.abella.browser.TaskImplementation"/> </touchSensor> <touchSensor type="ENVIRONMENT"> <name>TestDrivenDevelopmentExperiment</name> <description>TDDLearning Resources</description> <x3d>tddLearningEnvironment.x3d</x3d> </touchSensor> </browser> Fonte: O Autor A forma com que a funcionalidade é adicionada dinamicamente em função do mapeamento estabelecido pelo descritor de implantação é apresentada na Figura 22 por meio do emprego de um diagrama de atividades (activity diagram). Para o completo entendimento destas fases, um exemplo será empregado. 57 Figura 22: Processo de Associação de uma Task ou Ambiente Tridimensional ao Browser Fonte: O Autor Na preparação do ambiente que demonstra a associação dinâmica da Task, deve-se definir o ambiente que será apresentado, isto é, o descritor de implantação e a classe que deterá as funcionalidades desta Task. Inicialmente, parte do ambiente que será apresentado ao usuário é descrita no Quadro 8. Quadro 8: Parte do Ambiente X3D para o Processo de Associação de uma Task ao Browser <?xml version="1.0" encoding="UTF-8"?> <X3D profile="Immersive" version="3.0"> <Scene> <Transform DEF="NomeSalaTestDrivenDevelopment" rotation="0.0 -1.0 0.0 1.5707964" translation="-10.5 2.3 -1.75"> ... <TouchSensor DEF="InformacoesTestDrivenDevelopment" description="Iniciar Task com Atividades de Teste"/> </Transform> ... </Scene> </X3D> Fonte: O Autor 58 Em destaque tem-se o touchSensor chamado InformacoesTestDrivenDevelopment, que por sua vez é corretamente mapeado no descritor ao tipo WINDOW, conforme apresentado no Quadro 9. Note que, a este touchSensor também está associada uma classe que conterá a funcionalidade da Task, cujo nome totalmente qualificado é com.abella.browser.TaskImplementation. Quadro 9: Arquivo browser.xml para Processo de Associação de uma Task ao Browser <browser xmlns="http://www.abella.com.br/schema/browser" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://abella.com.br/schema/browser http://abella.com.br/schema/browser/browser.xsd"> <touchSensor type="WINDOW"> <name>InformacoesTestDrivenDevelopment</name> <description>Task com Atividades de Teste</description> <task class="com.abella.browser.TaskImplementation"/> </touchSensor> </browser> Fonte: O Autor A implementação mínima para esta classe, isto é, sem nenhuma funcionalidade, é apresentada na Figura 23. No método registerTask deve ser inserida toda a implementação da Task, usando-se das referências à uma instância de JFrame e BrowserOperations. Estas referências representam respectivamente uma referência à janela utilizada pelo browser e uma referência a uma classe utilitária que possibilita o manuseio a partir da Task dos ambientes apresentados. Figura 23: Implementação Mínima para uma Task Fonte: O Autor 59 Após a definição do ambiente do exemplo apresentado, os testes no browser podem ser realizados. Com a autenticação do usuário, indiferente à definição de descritor de implantação válido, um ambiente é apresentado ao usuário. Caso o usuário interaja em algum objeto (i.e., efetue um clique) com um touchSensor mapeado no descritor de implantação (se definido), a funcionalidade é adiciona. Esta funcionalidade representa uma instância da classe com.abella.browser.TaskImplementation. O resultado da associação de uma task é apresentado na Figura 24. Figura 24: Resultado da associação de uma Task simples Fonte: O Autor Esta funcionalidade descrita anteriormente será mostrada em integração com a ferramenta VEPersonal (Aquino, 2007) no próximo capítulo. 3.2.3 Módulo Servidor Conforme apresentado anteriormente, o browser atua especificamente na recepção de eventos realizados, além de exibir os ambientes e os componentes. Em contrapartida, o servidor atua especificamente na disponibilização das tasks em tempo de execução para os clientes, contando com um repositório em uma infraestrutura de banco de dados nas nuvens. 60 Para compreensão do processo que ocorre no servidor, serão apresentados na Figura 25 os possíveis cenários de recuperação de tasks, contando com uma infraestrutura de banco de dados nas nuvens com instância local e públicas. Figura 25: Processo de Solicitação de um Ambiente em Base Interna Fonte: O Autor Na próxima seção serão detalhados os testes realizados para validar a qualidade do framework desenvolvido. 3.3 Testes De acordo com Pressman (2005), o Teste de Software busca avaliar a qualidade do software, identificando possíveis problemas e defeitos que possam afetar o funcionamento 61 deste, contribuindo para o processo de garantia da qualidade durante a construção do sistema. Metodologias ágeis como a Extreme Programming e Scrum, popularizam o conceito de automação de testes. Nesta aplicação, foram realizados testes de unidade e funcionalidade. Cada tipo de teste é descrito no Quadro 10 (Beust e Suleiman, 2008). Na sequência, o ferramental utilizado em cada um destes testes é apresentado. Quadro 10: Descrição dos Testes realizados na Aplicação Tipo de Teste Descrição Teste de Unidade Menor unidade do sistema é testada (e.g. classes) Teste de Stress Determinar o comportamento do sistema em condições anormais de carga Fonte: Beust e Suleiman (2008) Teste de Unidade Para o desenvolvimento de testes de unidade, a ferramenta JUnit 4.0 (Gamma e Beck, 1999) foi utilizada. Devido à necessidade de isolar a classe testada, Mocks podem ser usados em substituição às dependências da unidade testada. Mocks são objetos substitutos (surrogate objects) que são usados para finalidade de testes, atuando no lugar de outra classe, que é a dependência da unidade testada (Fowler, 2014). Com o objetivo de facilitar o desenvolvimento de mocks, diversos frameworks podem ser empregados. Dentre os frameworks mais conhecidos para esta finalidade, existem os frameworks EasyMock (EasyMock, 2014) e o JMock (JMock, 2014). A escolha do framework EasyMock deve-se ao fato da vasta quantidade de documentação encontrada, como também da facilidade na definição de mocks, uma vez que os métodos são autoexplicativos. 62 Teste de Stress O Teste de Stress possui o objetivo principal de avaliar o desempenho e o comportamento do Software, quando submetido à condições anormais de carga, permitindo revelar e antecipar falhas no sistema nestas condições. No Capítulo 4, será detalhado como os testes supracitados foram realizados em conjunto com a plataforma, assim como os resultados obtidos. 3.4 Considerações Finais Com a adoção da técnica de reuso de software chamada Desenvolvimento Baseada em Componentes, pode-se estruturar uma arquitetura de software que proporcionasse o reuso de componentes de RV, nomeadas como Tasks neste framework. Por outro lado, aliar o compartilhamento das Tasks em infraestrutura de banco de dados nas nuvens, com o uso do NuoDB, possibilitou a definição de um repositório de componentes em um ambiente escalável, de alta disponibilidade e atuando de maneira geodistribuída. Para avaliar o funcionamento deste ambiente, será apresentado no próximo capítulo um estudo de caso do framework AvComponent integrado com a ferramenta VEPersonal, que é um Ambiente Virtual Adaptativo (AVA). 63 4 Aplicação do Framework para Reuso de Ambientes na Ferramenta VEPersonal Inicialmente, na Seção 4.1, serão apresentados detalhes sobre a ferramenta VEPersonal, seguido pelos detalhes da modelagem do ambiente para um caso de uso na Seção 4.2. Posteriormente na Seção 4.3 será apresentada a execução e avaliação das duas ferramentas integradas, enquanto na Seção 4.4 têm-se as considerações finais. 4.1 Ferramenta VEPersonal O VEPersonal (Personalized Virtual Environment) é responsável pela criação e manutenção de um ambiente virtual, acessível na Web, para navegação e interação com objetos dinâmicos. Neste ambiente, é dado suporte ao usuário para explorar o mundo, visualizando, aproximando ou tocando nos objetos. Como resposta, o ambiente modifica o mundo em função da evolução do perfil cognitivo do usuário que, por sua vez, são inferidas a partir das suas ações. Como benefício do VEPersonal, cuja arquitetura é apresentada na Figura 26, tem-se a possibilidade de gerar AV compostos de objetos com diversos níveis de complexidade, devido ao fato que a interação com o ambiente tridimensional é monitorada por um sistema multi-agentes, que consegue adaptar o ambiente ao nível cognitivo do usuário (Aquino et al, 2007). 64 Figura 26: Arquitetura do VEPersonal Fonte: Aquino (2007) Complementarmente, no cliente, a interface gráfica é composta por um applet Java e pelo browser Xj3D, um toolkit open source construído em Java para a linguagem X3D, que permite aos usuários navegar em ambiente tridimensional (Aquino, 2007). A justificativa da escolha do VEPersonal como ferramenta a ser integrada, se dá ao fato de ser uma ferramenta que reúne funções de adaptatividade em tempo real, além de possuírem internamente um banco de dados relacional com suporte a XML, o que possibilitaria avaliar o funcionamento do framework nestas condições. 4.2 Processo de Integração com o VEPersonal A integração entre as duas ferramentas é apresentada na Figura 27, na qual pode-se verificar que, a arquitetura original do VEPersonal é mantida, ocorrendo integração apenas com o módulo principal do cliente. 65 Figura 27: Arquitetura do VEPersonal após integração com o AvComponent Fonte: O Autor Basicamente, conforme apresentado na Figura 28, a interação do usuário ocorrerá com os ambientes tridimensionais disponibilizados pelo VEPersonal, entretanto quando algum touchSensor mapeado para algum componente (Task), for clicado serão desencadeadas todas as ações de maneira usual, descritas na Seção 3.2.3. 66 Figura 28: Processo de Solicitação de uma Task Fonte: O Autor Após apresentação da integração do VEPersonal com o AvComponent, será apresentada na sequência um experimento envolvendo as duas ferramentas. 4.3 Execução do Cenário do Estudo de Caso Com intuito de avaliar o funcionamento dos sistemas VEPersonal e AvComponent, será apresentado um experimento, na qual inicialmente a aplicação VEPersonal é inicializada com apresentação de um ambiente tridimensional de um corredor (hall de entrada) com diversas portas, conforme ilustrado na Figura 29. 67 Figura 29: Apresentação de um Ambiente pelo VEPersonal Fonte: O Autor Em cada uma destas portas é garantido acesso a outra sala. Neste sentido, foi mapeado o touchSensor de cada uma destas portas para um componente gerenciado pelo AvComponent nas nuvens, de maneira que o ambiente da Figura 30 é carregado. Figura 30: Ambiente Apresentado pelo VEPersonal com TouchSensor Mapeado pelo AvComponent Fonte: O Autor 68 A consequência de um clique sobre o computador apresentado anteriormente, desencadeia o carregamento de uma Task apresentado na Figura 31. Neste componente, é aberto uma tela complementar na qual sugere ao usuário criar um código de unidade para um determinado código fonte, ou seja, fornece uma simples interface de desenvolvimento dentro do VEPersonal. Figura 31: Apresentação de uma Task do AvComponent no VEPersonal Fonte: O Autor 4.4 Avaliação do Cenário do Estudo de Caso Para avaliar o AvComponent em integração com a ferramenta do estudo de caso, o VEPersonal, foram realizados dois tipos de testes, que são o de unidade e de stress, descritos na Seção 3.3. 69 a) Testes de Unidade Para a realização dos Testes de Unidade, foi utilizado o framework JUnit (Tahchiev, 2010), que possibilita a realização de testes de maneira automatizada para cada uma das unidades (i.e., classes), além de verificar se o comportamento dos métodos está de maneira esperada, exibindo possíveis erros ou falhas. Após a utilização do JUnit, foi aplicado o JUnitPerf (JUnitPerf, 2014), que possibilitou a análise da performance dos testes realizados na fase anterior, o que permitiu aprimorar este requisito durante o desenvolvimento do AvComponent. Como resultado da aplicação dos frameworks JUnit e JUnitPerf, foram realizadas testes de unidade em todas as clases do sistema, de maneira a antecipar eventuais problemas durante a sua utilização. b) Testes de Stress Nos Testes de Stress, é considerado condições anormais de carga, visando antecipar falhas antes da sua implantação. Para a discriminação e execução destes testes, foi utilizada a ferramenta JMeter (Halili, 2008), que possibilitou submeter o NuoDB em condições adversas, verificando que em condições extremas, este possui capacidade de resposta em relação à demanda dos recursos exigidos. Como o objetivo deste testes era inicialmente avaliar a capacidade do AvComponent disponibilizar componentes a ferramenta integrada, neste caso o VEPersonal, foram submetidos cinquenta solicitações simultâneas de 150 componentes, totalizando 7500 requisições simultâneas. Devido ao fato do AvComponent utilizar uma Infraestrutura de Banco de Dados nas Nuvens, a escalabilidade é possibilitada através da associação de mais instâncias ao NuoDB, de acordo com a demanda naquele momento. 70 4.5 Considerações Finais Neste capítulo foi abordada a ferramenta VEPersonal, que possibilita a criação de ambientes virtuais adaptáveis baseado em um ambiente com tecnologia X3D com banco de dados relacional com suporte XML. Devido a este motivo, esta ferramenta foi escolhida como estudo de caso. O processo de integração da ferramenta VEPersonal com o AvComponent, conforme relatado na Seção 4.2 mostrou que este processo é bem simplificado pelo AvComponent, uma vez que não há mudanças na arquitetura da ferramenta a ser integrada, neste estudo de caso, o VEPersonal. Por fim, com intuito de avaliar o funcionamento prático das duas ferramentas, foi apresentado um experimento na Seção 4.3, que o framework AvComponent pode amparar o desenvolvimento e aprimoramento de diversas ferramentas, como é o caso do VEPersonal, que pode incorporar diversos componentes desenvolvidos em outros sistemas e compartilhar os desenvolvidos pela ferramenta. 71 5 Conclusões e Trabalhos Futuros Neste trabalho foi apresentado um framework que disponibiliza uma infraestrutura de reuso de componentes para Ambientes Virtuais, em especial ambientes tridimensionais e componentes de software. Este trabalho viabilizou técnicas que possibilitaram a disponibilização de repositórios públicos com a inserção de ambientes tridimensionais e componentes de software a serem reutilizados pela comunidade, contribuindo para o desenvolvimento de AV ainda melhores. Na Seção 5.1 serão apresentadas as contribuições deste trabalho, enquanto a Seção 5.2 relata as suas respectivas limitações. Por fim, têm-se na Seção 5.3 os trabalhos futuros, seguido pela produção acadêmica resultante deste trabalho. 5.1 Contribuições As propostas existentes para reuso de componentes em AV, até o momento, não se preocupam com independência de plataforma, assim como não se preocupam com ambiente de escalabilidade e disponibilidade para os repositórios destes componentes. A estrutura do AVComponent foi desenvolvida considerando a necessidade de se realizar o desenvolvimento de componentes reutilizáveis entre plataformas diferentes, implantada em um ambiente nas nuvens, que possibilita escalabilidade e disponibilidade. Para atingir esse objetivo, algumas soluções foram utilizadas a fim de realizar a implantação do AvComponent, como: Criação de uma infraestrutura para desenvolvimento baseada em componentes de RV que possam ser reutilizáveis entre plataformas; O uso de uma infraestrutura de Banco de Dados nas Nuvens que possibilitou o desenvolvimento de um repositório de componentes de RV de forma geodistribuída; e Definição de arquitetura extensível, de forma que novas funcionalidades possam ser desenvolvidas e integradas em tempo de execução. 72 5.2 Limitações O AvComponent foi desenvolvido para se integrar com qualquer tecnologia na área de RV, porém a integração desenvolvida foi realizada inicialmente com o framework Xj3d, que atua em ambientes descritos na linguagem X3D. Neste sentido, há a necessidade de integrar com diversas outras tecnologias para analisar os resultados. Como outra limitação, tem-se que o framework desenvolvido não possui integração com sistemas de Realidade Aumentada (RA), como acontece no sistema NRVA, abordado na Seção 2.5.1. 5.3 Trabalhos Futuros Embora a especificação e a implementação do AvComponent apresente resultados satisfatórios em relação a ferramenta VEPersonal, novos trabalhos podem ser explorados, possibilitando a geração de novas pesquisas, como é o caso dos trabalhos relacionados nas Seções 5.3.1 e 5.3.2. 5.3.1 Modelagem Visual de Agentes Inteligentes Agentes Inteligentes estão sendo integrados a ambientes de EAD (Soula et al., 2001; Aquino et al., 2007), especialmente em aplicações de e-Learning, visando tornar o processo de aprendizado mais adaptável. Neste sentido, os agentes podem ser aplicados para realizar uma avaliação contínua do usuário. Segundo Agarwal et al. (2004), por meio da utilização de agentes inteligentes em aplicações de e-Learning e RV, torna-se possível a adaptação do conteúdo apresentado ao usuário, baseado no seu conhecimento e em suas respectivas habilidades. Além disto, o mesmo autor indica que isto atuará como um fator revolucionário no mundo educacional, tornando o processo de aprendizado mais dinâmico. 73 Entre os frameworks que facilitam o desenvolvimento de sistemas com agentes, o framework open source Java Agent Development Framework (JADE) (Bellifemine et al., 2001), que adere às especificações da Foundation for Intelligent Physical Agents, possui ampla utilização. O framework JADE facilita o desenvolvimento de sistemas multi-agente, pois o ambiente de execução e comunicação já estão disponíveis, deixando a cargo do desenvolvedor apenas a implementação da funcionalidade dos agentes. De maneira a abstrair a complexidade no desenvolvimento, tem-se a aplicação da técnica de reuso Domain-Specific Visual Language (DSVL), que é uma variante da DSL descrita neste trabalho que permite o rápido desenvolvimento do comportamento e/ou estrutura das aplicações em domínios bem definidos (Sprinkle e Karsabai, 2004). No contexto de desenvolvimento de sistemas multi-agentes, a aplicação de DSVL possibilitará a definição dos agentes, assim como as suas interações de maneira visual. Atuando neste sentido, propõe-se o aprimoramento do framework AvComponent por meio da inclusão de uma ferramenta para modelagem visual dos Agentes Inteligentes, de maneira a compor um Sistema Multi-Agentes, que são utilizados em aplicações que usam AV. A proposta de aprimoramento está em desenvolvimento, apresentando uma versão preliminar disponibilizada, conforme se pode verificar na Figura 32. Esta ferramenta teve as atividades iniciadas na disciplina de Tópicos Avançados em Reuso de Software, da Universidade Federal de Pernambuco, contando com a parceria de projetos de pesquisa e de iniciação científica realizados por alunos do curso superior em Análise e Desenvolvimento de Sistemas da Faculdade iDEZ (Estácio de Sá) em João Pessoa, Paraíba. 74 Figura 32: Demonstração do Módulo de Modelagem Visual de Agentes com o AvComponent Fonte: O Autor 5.3.2 Ferramenta Web de Gerenciamento de Componentes Com intuito de facilitar o gerenciamento dos componentes desenvolvidos e/ou disponibilizados, propõe-se o desenvolvimento de uma ferramenta web, que possibilitaria ao desenvolvedor: Identificar repositórios disponíveis para determinado componente; Compartilhar documentação sobre os componentes; e Gerar uma base de conhecimento sobre o AvComponent. 5.4 Produção Científica A produção científica desenvolvida durante esta dissertação pode ser aferida com publicações de artigos em eventos científicos, tais como: 75 Título: Uma Infraestrutura para Reutilização de Ambientes Virtuais de Aprendizagem com Banco de Dados em Cloud Computing o Artigo publicado no evento Workshop de Realidade Virtual e Aumentada (WRVA), no ano de 2013 (Anexo A). Título: Desenvolvendo Ambientes Virtuais de Aprendizagem Aplicados à Engenharia de Software o Artigo publicado no evento Workshop de Ambientes Virtuais Aplicados a Educação (WAVE), que é um evento satélite do Congresso Brasileiro de Informática na Educação (CBIE), no ano de 2013. 76 Apêndice A: Artigo Aprovado no WRVA 2013 77 78 79 80 81 Referências Abadi, D. J. Data Management in the Cloud: Limitations and Opportunities. IEEE Data Eng. Bull., pp. 3-12, 2009. Ames, A. L., Nadeau, D. R., & Moreland, J. VRML 2.0 sourcebook. Wiley, 1997. Aquino, M. S. VEPersonal – Uma Infraestrutura para Geração e Manutenção de Ambientes Virtuais Adaptativos. Tese (Tese de Doutorado) Recife: Pós-Graduação em Ciência da Computação do CIn/UFPE, 2007. Aquino, M. S. et al. Supporting Adaptive Virtual Environments with Intelligent Agents. 7th International Conference on Intelligent Systems Design and Applications, ISDA’07, Publisher: IEEE Computer Society, Washington, DC, USA. Rio de Janeiro-RJ, Brazil, October, 22-24, pp.217-222, 2007. Agarwal, Rakesh, Amrita Deo, and Swati Das. Intelligent agents in E-learning. ACM SIGSOFT Software Engineering Notes 29, no. 2, pp.1-1, 2004. Armbrust, M.; Fox, A.; Griffith, R.; Joseph, D. A., Katz, R. A view of cloud computing. Communications of the ACM 53, no. 4, pp.50-58, 2010. Barbosa, G. M.G. Um Livro-texto para o Ensino de Projeto de Arquitetura de Software. (Dissertação de Mestrado) Campina Grande: Pós-Graduação em Ciência da Computação da UFCG, 2009. Barrilleaux, J. 3D user interfaces with Java 3D. Manning Publications, 2000. Bass, L. Software architecture in practice. Pearson Education India, 2007. Beck, K. Extreme programming explained: embrace change. Addison-Wesley Professional, 2000. Bellifemine, F.; Poggi, A.; Rimassa, G. Developing multi-agent systems with a FIPAcompliant agent framework. Software-Practice and Experience, pp.103-128, 2001. Beust, C; Suleiman, H. Next Generation Java Testing – TestNG and Advanced Concepts, Addison-Wesley, 2008. Braga, M. Realidade Virtual e Educação. Revista de Biologia e Ciências da Terra, nº 1, 2001. Braga, M. Realidade Virtual e Educação. Disponível em < http://eduep.uepb.edu.br/rbct/seminarios/pdf/realidadevirtual.pdf >. Acessado em agosto de 2014. Brutzman, D.; Daly, L. X3D: extensible 3D graphics for Web authors. Morgan Kaufmann, 2010. 82 Brynko, B. NuoDB: Reinventing the Database, Information Today, pp. 9-9, 2012. Camargo, V. V.; Masiero, P. C. Frameworks orientados a aspectos. Anais do 19º Simpósio Brasileiro de Engenharia de Software (SBES2005), pp. 200-215, 2005. Carey, R.; Bell, G. The annotated VRML 2.0 reference manual. Addison-Wesley Longman Ltd, 1997. Codd, E. F. A relational model of data for large shared data banks. Communications of the ACM, pp. 377-387, 1970. Curino, C. et al. Relational cloud: The case for a database servisse, New England Database Summit, 2010. Daly, L.; Brutzman, D. X3D: extensible 3D graphics standard, 2007. Fowler, M. Mocks aren’t Stubs. Disponível em < http://www.martinfowler.com/articles/mocksArentStubs.html >. Acesso em janeiro de 2014. Fowler, M. Domain-specific languages. Pearson Education, 2010. Freeman, P., & Prieto-Diaz, R. Classifying software for reusability.Software, IEEE, pp. 616, 1987. JMocl, Disponível em < http://jmock.org/ >. Acesso em fevereiro de 2014. EasyMock 0.8, Disponível em < www.easymock.org >. Acesso em fevereiro de 2014. Gamma, E.; Beck, K. JUnit: A cook’s tour. Java Report, 4(5), pp. 27-38, 1999. Gamma, E. et al. Design patterns: elements of reusable object-oriented software. Pearson Education, 1994. Garlan, D., & Perry, D. Software architecture: practice, potential, and pitfalls. In Software Engineering, 1994. Proceedings. ICSE-16., 16th International Conference on, pp. 363-364, IEEE, 1994. Gosling, J. The Java language specification. Addison-Wesley Professional, 2000. Guo, J.; Luqi, A. A survey of software reuse repositories. In: Proceedings of the 7th IEEE International Conference and Workshop on the Engineering of Computer Based Systems. Edinburgh, Scotland, UK, pp. 92-100, 2000. Halili, E. H. Apache JMeter: A practical beginner's guide to automated testing and performance measurement for your websites. Packt Publishing Ltd, 2008. Harold, E. R.; Means, W. S.; Udemadu, K. XML in a Nutshell, Editora O'reilly, 2004. Henninger, S. An Evolutionary Approach to Construction Effective Software Reuse Repositories. ACM Transactions on Software Engineering and Methodologies, v.16, n.2, pp. 111-138, 1997. 83 Heuser, Carlos Alberto. Projeto de banco de dados. Sagra Luzzatto, 2011. Hudson, A. D., Couch, J., & Matsuba, S. N. The Xj3D browser: community-based 3D software development. Em: ACM SIGGRAPH 2002 conference abstracts and applications, pp. 327-327, ACM, 2002. Jacobson, I.; Lindström, F. Reengineering of old systems to an object-oriented architecture. In ACM Sigplan Notices,Vol. 26, No. 11, pp. 340-350, ACM, 1991. Jadeja, Y.; Modi, K. Cloud computing-concepts, architecture and challenges. In Computing, Electronics and Electrical Technologies (ICCEET), 2012 International Conference on (pp. 877-880). IEEE, 2012. Java Language. Disponível em < http://java.oracle.com/developer/ >. Acesso em janeiro de 2014. Jansen, W.; Grande, T. Guidelines on security and privacy in public cloud computing. NIST special publication, pp. 800-144, 2011. Johnson, R. E. Frameworks=(components+ patterns). Communications of the ACM, 40(10), 39-42, 1997. JUnitPerf. Disponível em < http://www.clarkware.com/software/JUnitPerf.html >. Acesso em abril de 2014. Kido, K.; Amagasa, T.; Kitagawa, H. Processing XPath queries in PC-clusters using XML data partitioning. In Data Engineering Workshops, 2006. Proceedings. 22nd International Conference on (pp. x114-x114). IEEE, 2006. Kirner, Claudio. "Sistemas de realidade virtual. Apostila do ciclo de palestras de realidade virtual, UFSCar, 1996. Kirner, C.; Siscoutto, R. Fundamentos de Realidade Virtual e Aumentada. In: Realidade Virtual e Aumentada: Conceitos, Projeto e Aplicações. Eds. Cláudio Kirner e Robson Siscoutto. Livro do Pré-Simpósio, IX Symposium on Virtual And Augmented Reality, Petrópolis – RJ, 2007. Krueger, C. W. Software reuse. ACM Computing Surveys (CSUR), pp.131-183, 1992. Lemos, P.H.S. Uma Análise dos Novos Sistemas de Bancos de Dados Relacionais Escaláveis. Tese (Tese de Doutorado) Rio de Janeiro: Pós-Graduação em Ciência da Computação da Universidade Federal do Rio de Janeiro – UFRJ, 2014. Li, M.; Wang, S.; He, T. A transformer substation simulation engine based on virtual reality. In Computer, Mechatronics, Control and Electronic Engineering (CMCE), 2010 International Conference on, vol. 2, pp. 41-44, 2010. 84 Lima, G. D. O. ARQDEP: arquitetura de computação em nuvem com dependabilidade, Dissertação (Dissertação de mestrado) Uberlândia: Pós-Graduação em Ciência da Computação da Universidade Federal de Minas Gerais – UFMG, 2014. Machado, L. S. A Realidade Virtual no Modelamento e Simulação de Procedimentos Invasivos em Oncologia Pediátrica: Um Estudo de Caso no Transplante de Medula Óssea. Tese (Tese de Doutorado) São Carlos: Pós-Graduação em Ciência da Computação da Escola Politécnica da Universidade de São Paulo – USP, 2003. Mahoney, M. S. Finding a history for software engineering. Annals of the History of Computing, IEEE, pp. 8-19, 2004. Martin, R. C. Agile software development: principles, patterns, and practices. Prentice Hall PTR, 2003. Mell, P.; Grance, T. The NIST definition of cloud computing. NIST Special Publication, 2011. Mello, R. S. Uma Abordagem Bottom-Up para a Integracao Semanticade Esquemas XML, Tese (Tese de doutorado) Porto Alegre: Pós-Graduação em Ciência da Computação da Universidade Federal do Rio Grande do Sul - UFRS, 2002. Mernik, M.; Heering, J.; Sloane, A. M. When and how to develop domain-specific languages. ACM computing surveys, pp. 316-344, 2005. Musa, J. D. A theory of software reliability and its application. Software Engineering, IEEE Transactions, pp.312-327, 1975. MySQL Documentation. Disponível em < http://dev.mysql.com/doc/ >. Último acesso em janeiro de 2014. Nunes, F. D. L., “Building a open source framework for virtual medical training.” Journal of digital imaging : the official journal of the Society for Computer Applications in Radiology, vol. 23, no. 6, pp. 706-7020, 2010. Olan, M. Unit testing: test early, test often. Journal of Computing Sciences in Colleges, 19(2), 319-328, 2003. Olson, M. A. et al. InUSENIX Annual Technical Conference, FREENIX Track, pp. 183191, 1999. Oliveira, M.; Crowcroft, J.; Slater, M. An innovative design approach to build virtual environment systems. In Proceedings of the workshop on Virtual environments 2003, pp. 143-151, 2003. Oliveira, M. J.; Sabbadini, F.; Chamovitz, I. Uma plataforma de simulação visual em 3D orientada para o ciclo de vida das entidades. Revista Produção Online, 9(2), 2009. 85 Oracle. Disponível em < https://docs.oracle.com/cd/B28359_01/index.htm >. Último acesso em fevereiro de 2014. PostgreSQL. Disponível em < http://www.postgresql.org/ >. Último acesso em janeiro de 2014. Pressman, R.S. Software engineering: a practitioner’s approach. McGrow-Hill International Edition, 2005. Rubin, K. S. Essential scrum: a practical guide to the most popular agile process. AddisonWesley, 2012. Sametinger, J. Software engineering with reusable components. Springer, 1997. Segrini, B. M. Definição de processos baseados em componentes. Dissertação (Dissertação de Mestrado) Vitória: Pós-Graduação em Ciência da Computação da Universidade Federal do Espírito Santo – UFES, 2009. Singhal, S; Zyda, M. Networked Virtual Environment: Design and Implementation. ACM Press, pp.331, Siggraph Series, New York, 1999. Sommerville, I. Engenharia de software. Vol. 6. Addison Wesley, 2003. Soula, G.; Pagesy et al. An adaptive medical e-learning environment: the MEDIDACTE project. Studies in health technology and informatics, (2), 1076-1080, 2001. Sousa, F. R. et al. Gerenciamento de dados em nuvem: Conceitos, sistemas e desafios. Topicos em sistemas colaborativos, interativos, multimidia, web e bancos de dados, Sociedade Brasileira de Computacao, pp.101-130, 2010. Souza, D. A. C. M. et al. Um Ambiente Virtual Baseado em Agentes para Apoiar o Ensino de Engenharia de Software. XIX Simpósio Brasileiro de Informática na Educação, 2008. Sowizral, K., Rushforth, K.;Sowizral, H. The Java 3D API Specification. Addison-Wesley Longman Publishing Co., Inc., 1997. Sprinkle, J.; Karsai, G. A domain-specific visual language for domain model evolution. Journal of Visual Languages & Computing, pp.291-307, 2004. Survey of Cloud Computing 2013. Disponivel em < http://www.northbridge.com/2013cloud-computing-survey >. Último acesso em abril de 2014. Sutherland, J. et al. The scrum papers: Nuts, bolts, and origins of an agile process, 2007. Tahchiev, P. et al. JUnit in action. Manning Publications Co, 2010. The Future of Cloud Computing. Disponível em < http://perspecsys.com/future-cloudcomputing/ >. Último acesso em janeiro de 2014. Torreão, P. G. B. C. Project Management Knowledge Learning Environment: Ambiente Inteligente de Aprendizado para Educação em Gerenciamento de Projetos. Dissertação 86 (Dissertação de Mestrado) Recife: Pós-Graduação em Ciência da Computação do CIn/UFPE, 2005. Weinhardt, C. et al. Cloud computing–a classification, business models, and research directions. Business & Information Systems Engineering, 1(5), pp.391-399, 2009. Werner, C. M. L.; Braga, R. M. M. Desenvolvimento Baseado em componentes. Anais do XIV Simpósio Brasileiro de Engenharia de Software, pp.35-44, 2000. XPath. XML Functions. Disponível http://www.postgresql.org/docs/9.1/static/functions-xml.html >. fevereiro de 2014. em Último acesso XQuery. Oracle: Using XQuery with Oracle XML DB. Disponível http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_xquery.htm >. acesso em fevereiro de 2014. < em em < Último X3D. Disponível em < http://www.web3d.org/x3d/specifications/x3d_specification.html >. Último acesso em janeiro de 2014.