A structural testing tool for MPI programs with loops
Resumo
Há uma alta demanda por programas paralelos corretos, principalmente devido às arquiteturas paralelas atuais, como clusters e processadores multi/many cores. O teste estrutural permite identificar defeitos pela cobertura de estruturas internas de programas paralelos. O não determinismo em programas paralelos traz novos desafios ao teste estrutural. Ele requer ferramentas e modelos de teste especı́ficos, capazes de cobrir primitivas de comunicação e sincronização com comportamentos dinâmicos, tais como os presentes em loops. Este artigo propõe uma nova ferramenta de software para o teste estrutural, com o objetivo de auxiliar testadores na revelação de defeitos desconhecidos associados a comunicação e presentes em estruturas de repetição de programas paralelos em C/MPI. Baseando-se na cobertura obtida, testadores podem escolher casos de teste especı́ficos e avaliar o progresso da atividade de teste. A ferramenta de teste proposta é validada com a ingestão de defeitos no código de um programa, e com a análise do suporte dado pela ferramenta para a geração de elementos requeridos e seleção de casos de teste. A ferramenta proposta automatiza parte da atividade de teste, especificamente a geração de elementos requeridos e guia a execução dos testes, reduzindo o tempo para a aplicação da atividade de teste. Nossos resultados mostram que a ferramenta de teste é capaz de revelar defeitos desconhecidos em primitivas de comunicação presentes em iterações de loops. There is a growing demand for correct parallel programs, mainly due to nowadays parallel architectures, such as clusters and multi/many-core processors. Structural testing allows the identification of defects by covering internal structures of parallel programs. Nondeterminism in parallel programs brings new challenges to the structural testing. It requires specific test model and tools, capable to cover communication and synchronization primitives with dynamic behaviors, such as those present inside of loops. This paper proposes a novel software tool for the structural testing, aiming to help testers in revealing defects associated to communication present in repetition structures of C/MPI parallel programs. Based on the obtained coverage, testers can choose specific test cases and evaluate the progress of the testing activity. We validate the proposed testing software tool by injecting a defect in a program code, and analyzing the support for generation of required elements and selection of test cases. ValiMPI tool automates part of the test activity, specifically the generation of required elements to guide test case selection, reducing the application cost of the testing activity. Our results demonstrate that the testing tool is capable to reveal unknown defects from communication in different loop iterations.
Referências
Alghamdi, A. and Eassa, F. (2019). Software testing techniques for parallel systems: A survey. 19:176–186.
Ammann, P. and Offutt, J. (2008). Introduction to Software Testing.
C Hausen, A., Vergilio, S., and Souza, S. (2019). A tool for structural testing of mpi programs.
Ceolin Hausen, A. (2005). Valimpi : uma ferramenta de teste estrutural para programas paralelos em ambiente de passagem de mensagem. Master’s thesis, Universidade Federal do Paraná, page 92.
Chen, Q., Wang, L., Yang, Z., and Stoller, S. (2009). HAVE: Integrated Dynamic and Static Analysis for Atomicity Violations. 12th Int. Conf. on Fundamental Approaches to Software Engineering (FASE).
De Souza, S., Vergilio, S. R., De Souza, P. S. L., Da Silva Simão, A., Gonçalves, T. B., De Melo Lima, A., and Hausen, A. C. (2005). ValiPar: A testing tool for message-passing parallel programs. 17th Int. Conf. on Software Engineering and Knowledge Engineering, SEKE 2005, (November 2015):386–391.
Delamaro, M., Maldonado, J., and Jino, M. (2007). Introdução ao teste de software. CAMPUS - RJ.
DeSouza, J., Kuhn, B., de Supinski, B. R., Samofalov, V., Zheltov, S., and Bratanov, S. (2005). Automated, scalable debugging of mpi programs with intel®
Diaz Diaz, S. M. (2019). Structural testing criteria for concurrent programs considering loop executions. Master’s dissertation, Instituto de Ciências Matemáticas e de Computação da Universidade de São Paulo.
Dourado, G. G. M. (2015). Contribuindo para a Avaliação do Teste de Programas Concorrentes : uma abordagem usando benchmarks.
Master’s thesis, Instituto de Ciências Matemáticas e de Computação da Universidade de São Paulo.
Endo, A. T., d. S. Simão, A., d. R. S. d. Souza, S., and d. Souza, P. S. L. (2008). Web services composition testing: A strategy based on structural testing of parallel programs. In Testing: Academic Industrial Conference - Practice and Research Techniques (taic part), pages 3–12.
Machado, M. C. C. (2011). Estudo e definição de mecanismos para redução do custo de aplicação do teste de programas concorrentes. Master’s thesis, USP, page 92.
Oliveira, A., Lopes de Souza, P., and Souza, S. (2016). Valierlang: A structural testing tool for erlang programs. pages 1–10.
Prado, R. R., Souza, P. S. L., Dourado, G. G. M., Souza, S. R. S., Estrella, J. C., Bruschi, S. M., and Lourenco, J. (2015). Extracting static and dynamic structural information from java concurrent programs for coverage testing. In CLEI 2015, pages 1–8.
Sarmanho, F. S. (2009). Teste de programas concorrentes com memória compartilhada. Master’s thesis, USP, page 92.
Sarmanho, F. S., Souza, P. S. L., Souza, S. R. S., and Simão, A. S. (2008). Structural testing for semaphore-based multithread programs. In Bubak, M., van Albada, G. D., Dongarra, J., and Sloot, P. M. A., editors, Computational Science – ICCS 2008, pages 337–346, Berlin, Heidelberg. Springer Berlin Heidelberg.
Simão, A., Maldonado, J., Vincenzi, A., and Santana, A. (2003). A language for the description of program instrumentation and automatic generation of instrumenters. CLEI Electron. J., 6.
Souza, P. L., Sawabe, E. T., Silva Simão, A., Vergilio, S. R., and Rocio Senger De Souza, S. (2008a). Valipvm - a graphical tool for structural testing of pvm programs. In Proceedings of the 15th European PVM/MPI Users’ Group Meeting on Recent Advances in Parallel Virtual Machine and Message Passing Interface, pages 257–264, Berlin, Heidelberg. Springer-Verlag.
Souza, S. c., Vergilio, R., Souza, P., Simao, S., and Hausen, A. (2008b). Structural testing criteria for message-passing parallel programs. Concurrency Computation Practice and Experience, 20(16):1893–1916.
Terragni, V. and Cheung, S.-C. (2016). Coverage-driven Test Code Generation for Concurrent Classes. In Proceedings of the 38th Int. Conf. on Software Engineering, ICSE ’16, pages 1121–1132, New York, NY, USA. ACM.
Wildman, L., Long, B., and Strooper, P. (2004). Testing Java interrupts and timed waits. In Software Engineering Conference, 2004. 11th Asia-Pacific, pages 438–447.