Reengenharia e Reestruturação do Sistema de Software LExVE Leo Altissimo Neto1, Lucas Kriesel Sperotto1 1 Curso de Ciência da Computação Faculdade de Letras, Ciências Sociais e Tecnológicas (FALECT) LAMSCAD - Laboratório de Modelagem e Simulação Computacional de Alto Desempenho Universidade do Estado de Mato Grosso (UNEMAT) – Alto Araguaia, MT – Brazil [email protected], [email protected] Abstract. This paper reports the reengineering of LExVE software system. The LExVE Software System is a Simulation software that solves problems one and two-dimensional governed by the Poisson equation. This reengineering is needed to increase the performance of LExVE software system to translate it from the Java language to C ++. This paper presents diagrams of the system calculation module in JAVA and diagrams of the new classes. Resumo. Este trabalho relata a reengenharia do sistema de software LExVE. O sistema de Software LExVE é um software de simulaçao que resolve problemas uni e bi-dimensionais governados pela equação de Poisson. Esta reengenharia é necessária para aumentar o desempenho do sistema de software LExVE ao traduzí-lo da linguagem JAVA para C++. Neste trabalho são apresentados diagramas do módulo de cálculo do sistema em JAVA e diagramas das novas classes. 1. Introdução Este trabalho contribui com o desenvolvimento do sistema de software de simulação, chamado de Laboratório para Experimentos Virtuais de Engenharia, e abreviado pela sigla LExVE. O sistema de software LExVE, totalmente desenvolvido em linguagem JAVA, é um software para simulação computacional de fenômenos estacionários governados pela equação de Poisson por meio do método MEFG [Belytschko 1994], o que abrange uma vasta gama de aplicações em diversas engenharias i.e. para a simulação de dispositivos eletrostáticos e eletromagnéticos [Louaï, Naït-Saïd and Drid 2007] e[Marques 2007]. O sistema de software LExVE está organizado em três módulos principais: o módulo de entrada de dados (pré-processamento) [Pereira et al. 2012], o módulo de cálculo (processamento) [Sperotto et al. 2012] e o de exploração (pós-processamento) [Almeida et al. 2012]. Dependendo do tipo de simulação o módulo de cálculo demanda muito tempo para processar as informações e gerar os resultados. Sabe-se que a linguagem JAVA, por ser interpretada, não alcança níveis de desempenho de uma linguagem compilada como a C/C++. Dessa forma, pode-se aumentar significativamente o tempo de resposta do sistema de software LExVE efetuando a tradução do módulo de cálculo para a linguagem C++ seguindo a estrutura de classe do software já codificado porém, com adequações. Com esta tradução será possível realizar não só cálculos em problemas de maior complexidade, mas também, incorporar ao sistema o suporte para processamento em placas gráficas via biblioteca CUDA e suporte a paralelismo com as bibliotecas OpenMP e MPI. O que alcançaria futuras pesquisas em processamento de alto desempenho. O sistema de software LExVE possui aplicação em diversos níveis da acadêmia, desde o ensino de fenômenos físicos para cursos de graduação, quanto para a pesquisa e desenvolvimento de dispositivos cujo princípio de funcionamento seja governado pela equação de Poisson. O objetivo deste trabalho é elaborar e documentar uma nova engenharia da estrutura de classes do módulo de cálculo do sistema de software LExVE de forma a atender a tradução para a linguagem C++ contemplando os padrões de projeto (design pattern). 2. Metodologia O desenvolvimento deste trabalho se iniciou com o estudo dos métodos numéricos envolvidos no processo de simulação, principalmente métodos de integração numérica, o método EFGM e suas técnicas auxiliares. Também foi necessário um estudo aprofundado das linguagens JAVA e C++, bem como dos conceitos de Orientação a Objetos. Em seguida foi estudado, com o auxílio de técnicas de engenharia reversa, o módulo de cálculo do sistema LExVE e os algoritmos já codificados para o tratamentos das geometrias e dos requisitos numéricos do sistema. Diante desse estudo foi projetada uma nova estrutura de classes seguindo a linguagem de modelagem UML (Unified Modelling Language) para o novo módulo de cálculo. A diversificada modelagem visual possibilitada pelos diferentes diagramas da linguagem UML permite ter-se uma visão mais concreta do software em desenvolvimento, auxiliando na avaliação do sistema sob diferentes óticas ou situações desde a fase de análise de requisitos, passando pela fase de projeto até sua implementação e implantação. A engenharia do novo módulo de cálculo foi guiada pelos novos requisitos do sistema, pelo diagrama oriundo da reengenharia e, na medida do possível, pelos padrões de projetos (Design Patterns). Os padrões de projeto documentam soluções gerais reutilizáveis para problemas recorrentes no desenvolvimento de sistemas de software Orientados a Objetos. Além de uma boa prática de programação, padrões de projeto facilitam: a reutilização de código; a comunicação, a documentação e o aprendizado dos sistemas de software. Tendo o projeto do novo módulo de cálculo concluído, partiu-se para a codificação. Nesta etapa, ainda em execução, está sendo documentada cada classe e cada método traduzido e, adicionalmente, está sendo projetado testes de unidade quando necessário. Estes testes garantirão qualidade, confiabilidade e segurança aos métodos codificados. 3. Resultados e Discussões Após realizarmos a engenharia reversa do sistema, notamos que a estrutura de classes do módulo de cálculo possuía uma enorme interdependência com as classes dos módulos de exploração e modelagem, dificultando ainda mais a tarefa de traduzir isoladamente algum pacote do solver, este fato justifica ainda mais a necessidade de uma nova ação de engenharia de software sobre o módulo de cálculo. Figura 1. a) diagrama de pacotes do sistema LExVE. b) diagrama de classes do pacote weightFunction reformulado com o padrão Strategy. Apresenta-se na figura 1 a) a representação gráfica dos pacotes do sistema LExVE, estas disposições dos pacotes ainda são referentes a estrutura original do software. Dentre todos os pacotes apresentados na imagem, apenas alguns precisaram ser modificados e ou traduzidos de Java para C++, isso deve-se porque parte dos pacotes são referentes a interface gráfica do software, e esta não há necessidade de ser traduzida a fim de ganho de desempenho. A Figura 1 b) ilustra o novo diagrama de classes para as classes “WeightFunction”. Neste diagrama podemos ver a aplicação do padrão de projetos strategy. Este padrão foi escolhido por poder encapsular diversos algoritmos que realizam operações semelhantes, porém com algumas sutilezas, além de poder intercambiar facilmente entre eles de modo que o cliente do método execute o algoritmo mais apropriado para determinado problema. Devido a utilização de algumas bibliotecas nativas Java pelo módulo de cálculo, algumas funcionalidades presentes nessas bibliotecas precisaram ser completamente desenvolvidas, já outras puderam ser substituídas pelo uso da STL(Standard Template Library). Bibliotecas adicionais, como por exemplo, a biblioteca para algebra linear, também teve que ser desenvolvida. Atualmente o projeto de reestruturação se encontra em final, com a grande maioria dos pacotes presentes do módulo de cálculo já traduzidos, contudo é necessária a tradução da totalidade do módulo de cálculo para que possamos obter dados concretos sobre mudanças de desempenho. 4. Conclusões Este trabalho contribuiu com o desenvolvimento de software científico do tipo CAD/CAE voltado a uma metodologia numérica recente e promissora (EFGM), alternativa a aplicação de métodos baseados em malha. Esperamos com a reestruturação do sistema LExVE, levantar dados que sejam capazes de evidenciar as diferenças de desempenho entre linguagens interpretadas e compiladas. Do ponto de vista científico, a tradução do módulo de cálculo abrirá as portas para o estudo de problemas mais complexos e ainda não abordados pela Literatura com esta abordagem numérica. Do ponto de vista prático, este trabalho servirá como referência para as futuras evoluções do sistema LExVE. Esperamos ainda, obter resultados satisfatórios com a otimização da arquitetura e a mudança de linguagem. Esperamos que com as modificações o software possa finalmente ser liberado para o uso acadêmico, com grande aproveitamento nas áreas da engenharia. Referencias Belytschko, T., Lu, Y. Y. and Gu, L. (1994), “ Element-free Galerkin methods”, International Journal for Numerical Methods in Engineering, Vol. 37, pp. 229-56. Almeida, D. D., Pereira, A. F., Marques, G. N., "Sistema LExVE - EXPLORER: Um módulo JAVA de pós-processamento CAD/CAE voltado ao método elementfree Galerkin", MOMAG Proceedings, 2012. Louaï, F.Z., Naït-Saïd, N. and Drid, S. (2007), “Implementation of an efficient element-free Galerkin method for electromagnetic computation”, Engineering Analysis with Boundary Elements, Vol. 31, No. 3, pp. 191-199. Marques, G. N., Machado, J. M., Verardi, S. L. L., Stephany, S. e Preto, A. J. (2007.b), “Interpolating EFGM for computing continuous and discontinuous electromagnetic fields”, International Journal for Computation and Mathematics in Electrical and Electronic Engineering (COMPEL). Pereira, A. F., Almeida, D. D., Marques, G. N., "Sistema LExVE - MODELER: Um módulo JAVA de pré-processamento CAD/CAE voltado ao método elementfree Galerkin", MOMAG Proceedings, 2012. Sperotto, L. K., Passaro, A., Marques, G. N., "Sistema LExVE - Solver: Módulo de processamento CAD/CAE em JAVA voltado ao método element-free Galerkin", MOMAG Proceedings, 2012.