63ª Reunião Anual da SBPC |
A. Ciências Exatas e da Terra - 2. Ciência da Computação - 4. Engenharia de Software |
Aplicação de Técnicas Avançadas de Programação, Engenharia de Software e Padrões de Programação em Software Científico para Análise e Visualização de Dados Geofísicos |
André Grahl Pereira 1 Adriano Petry 2 |
1. Curso de Ciência da Computação - UFSM 2. Dr./ Orientador - Centro Regional Sul de Pesquisas Espaciais – CRS/INPE |
INTRODUÇÃO: |
O desenvolvimento de software científico muitas vezes se dá em ciclos com grande foco em codificação, possuindo incerteza sobre eficiência algorítmica e constantes mudanças. Em geral não há qualquer esforço no sentido da utilização de um processo de desenvolvimento ou mesmo na realização de etapas fundamentais para a produção de software com qualidade. A utilização desse tipo de metodologia para produção de software científico normalmente resulta em softwares com grandes quantidades de erros, ausência de portabilidade, baixo desempenho e ainda torna a tarefa de continuação do desenvolvimento ou mesmo alterações tão ou mais complexa que o próprio esforço de desenvolvimento. O projeto de desenvolvimento do software científico chamado Data Assimilation and Visualization System (DAVS) possuiu como linhas centrais de trabalho a aplicação de padrões de programação, técnicas avançadas de programação e engenharia de software sendo a aplicação deste conjunto de práticas o foco deste trabalho. O software DAVS consiste em sistema capaz de carregar os dados de saída de um outro software que simula a dinâmica da ionosfera terrestre, chamado SUPIM(Sheffield University Plasmasphere-ionosphere Model). Além disso, o DAVS realiza uma interpolação nos dados carregados, produzindo uma malha multidimensional linearmente espaçada, e gera como saída um pacote de arquivos no formato utilizado por um sistema de visualização de dados geofísicos, chamado Grid Analysis and Display System(GrADS). |
METODOLOGIA: |
Com o grande volume de dados necessários a serem carregados e um imenso trabalho de processamento para a realização da interpolação multidimensional, características como baixo consumo de memória, velocidade no processamento dos dados e um ótimo gerenciamento de recursos são necessários ao bom funcionamento do sistema. Ao final do ciclo de desenvolvimento tem-se como objetivo dispor de uma ferramenta completa que, apesar de possuir características cientificas, possa ser usada de forma operacional. Considerando as características da produção de softwares científicos, o modelo de ciclo de desenvolvimento utilizado foi o de prototipação, pois no inicio do desenvolvimento não se possuía certeza sobre quais algoritmos de interpolação seriam suficientemente adequados e a escolha das estruturas de dados estava diretamente ligada ao algoritmo escolhido. Padrões de programação (Design Patterns) foram empregados por serem soluções clássicas e eficientes para problemas recorrentes em desenvolvimento de software. Dentre os padrões criacionais usados temos Builder e Singleton; como padrões comportamentais Iterator e TemplateMethod e por fim como padrão estrutural Facade. Além do uso de Orientação a Objetos, algumas técnicas e práticas largamente utilizadas no desenvolvimento do sistema foram implementadas para garantir altos níveis de desempenho e segurança. Dentre elas destaca-se RAII(ResourceAcquisition Is Initialization), Smart pointers e tratamento de exceções. |
RESULTADOS: |
Os resultados obtidos demonstram a eficiência do sistema desenvolvido, indo ao encontro dos objetivos propostos. Dentro do clico de prototipação, uma versão inicial foi desenvolvida. Após ser efetivamente testada e ser verificado que todas as escolhas feitas no desenvolvimento atendiam os objetivos estabelecidos, a versão inicial foi descartada e uma versão estável começou a ser desenvolvida. Comparando a versão estável com o protótipo, a versão estável necessita de dez vezes menos memória para o carregamento do mesmo conjunto de dados. Também houve um considerável ganho de velocidade de processamento, mesmo havendo um aumento de complexidade devido a estruturas adicionais para a garantia de segurança. Ainda foi produzida uma grande quantidade de documentação em forma de diagramas UML. Essa documentação, aliada aos padrões empregados, ajuda a garantir que futuras tarefas de expansão e de manutenção possam ser feitas de forma eficiente. |
CONCLUSÃO: |
O sistema desenvolvido cumpriu as metas estipuladas inicialmente em termos de funcionalidade. Em pontos críticos, como no desenvolvimento do algoritmo de interpolação, a utilização do ciclo de prototipação foi útil para a verificação de diferentes abordagens e os ganhos de cada uma, podendo assim ser realizadas escolhas consistentes. Outros objetivos estipulados em termos de eficiência computacional, segurança, baixo consumo de memória e gerenciamento de recursos foram alcançados pelo uso de padrões e técnicas avançadas de programação. O uso dessas práticas garantiu a produção de pacotes de documentação claros e diagramas UML com maior padronização. Em trabalho futuros os esforços de desenvolvimento concentrar-se-ão na produção do módulo de assimilação de dados. Neste segundo esforço pretende-se seguir linhas idênticas de desenvolvimento. |
Palavras-chave: técnicas avançadas de programação, padrões de programação, software científico. |