Especificação de Testes Funcionais usando Redes de Petri a Objetos para Softwares Orientados a Objetos

Tamanho: px
Começar a partir da página:

Download "Especificação de Testes Funcionais usando Redes de Petri a Objetos para Softwares Orientados a Objetos"

Transcrição

1 Especificação de Testes Funcionais usando Redes de Petri a Objetos para Softwares Orientados a Objetos Autor(a): Liliane do Nascimento Vale 1 Orientador: Stéphane Júlia 1 1 Universidade Federal de Uberlândia (UFU) Programa de Pós-Graduação em Ciência da Computação Uberlândia MG Brasil lili_malman@yahoo.com.br, stephane@netsite.com.br Data de ingresso no programa: 06 de Agosto de 2006 Previsão de defesa: Agosto de Resumo. Em virtude da crescente dependência da sociedade em relação aos sistemas baseados em computadores, torna-se de fundamental importância desenvolver sistemas que ofereçam altos níveis de qualidade e confiabilidade. Até o momento, verifica-se que a atividade de teste funcional se concentra em meios informais e manuais, possuindo pouca documentação disponível, o que impede de compreender como os procedimentos de teste acorrem. Neste trabalho é proposto, a formalização e automatização de testes funcionais através da especificação destes usando redes de Petri a objetos para softwares orientados a objetos. Palavras-Chave. Teste funcional, redes de Petri a objetos.

2 1 Caracterização do Problema Atualmente, verifica-se um enorme interesse por parte de equipes de desenvolvimento de softwares em produzir sistemas incluindo o quesito qualidade [Pressman, 2001]. Para isso, tem-se dado uma extrema importância à atividade de teste que contribui por construir sistemas com maior qualidade e confiabilidade sem, no entanto representar custos que tenham valor significativo para as empresas [Delamaro et alt, 2007]. Em resposta à essas necessidades, torna-se primordial que, durante o desenvolvimento de software, incluam-se métodos, ferramentas e técnicas que auxiliam a atividade de teste. O objetivo da atividade de teste é detectar erros no programa [Summerville, 2003]. Os testes de softwares são aplicados em várias fases e dependendo do contexto de desenvolvimento em que o software se encontra, os testes podem ter propósitos diferentes. Em geral, os testes podem ser classificados em: teste funcional, teste estrutural e teste de sistemas [Delamaro et al, 2007]. O teste funcional, também conhecido como teste de caixa preta, é um procedimento empregado para a projeção de casos de teste em que são verificadas as funcionalidades do software. Nesta etapa do teste, não são incluídas informações de codificação, sendo consideradas apenas a análise das entradas e saídas para a avaliação [Pressman, 2001], [Summerville, 2003]. É sabido que erros, quando detectados logo no início do desenvolvimento de sistema, são mais simples e mais fáceis de serem removidos, gerando um menor custo e contribuindo por produzir sistemas de maior qualidade e confiabilidade. Assim, a aplicação do teste funcional se torna crucial, uma vez que requisitos do sistema são alvos de testes auxiliados por linguagens de modelagens como, por exemplo, a UML. Muitas vezes, a atividade de teste funcional quando realizada em empresas de desenvolvimento de sistemas é feita de maneira informal, visto que na maioria dos casos não se tem documentos disponíveis sobre como este teste é realizado. Outro ponto importante a ser considerado é que na maioria dos casos, os testes funcionais são feitos de forma manual. Desse modo, o tipo de teste a ser realizado está mais direcionado aos interesses de quem vai executá-lo o que em alguns casos impede que todos os requisitos sejam testados. Observando essa deficiência, o objetivo deste trabalho é formalizar a atividade de teste funcional através da especificação destes testes usando um modelo de especificação formal que permita tanto a representação do fluxo de dados, quanto do fluxo de controle. O procedimento a ser realizado tem como intuito, suprir a carência destes modelos de teste e assim, promover a formalização dos testes de caixa-preta. Dessa forma, espera-se alcançar um maior grau de confiabilidade nas funcionalidades do sistema, uma vez que especificando e automatizando-se os testes funcionais, as funcionalidades dos softwares serão testadas com maior eficiência. 2 Fundamentação Teórica Testes de software classificam-se em vários tipos de acordo com as informações que se têm disponíveis do software. Assim, é necessário lançar mão de estratégias de teste, isto é, fazer um planejamento dos testes a serem realizados para isso, os testes apresentam algumas fases entre elas encontra-se o teste funcional. O teste funcional ou teste de caixa-preta utiliza as especificações de requisitos do software para garantir que a funcionalidade do mesmo esteja correta, ou seja, que a entrada e

3 conseqüentemente a saída estejam corretas e também que a integridade das informações sejam preservadas [PFleegerl, 1999] e [Summerville, 2003]. Para o seu efetivo funcionamento, o projeto de casos de teste também é importante, pois possibilita o exercício de várias maneiras das funções do software. Assim como para os demais tipos de teste, o teste funcional também utiliza alguns critérios que complementam o seu trabalho. Entre estes critérios, citam-se: Particionamento de Equivalência, a Análise do Valor Limite, Grafo Causa-Efeito e Error-Guessing [Delamaro at al, 2007], [Beizer, 1990], [Pressman, 2001]. É importante salientar também o uso de modelos como as Máquinas de Estados Finitos, Statecharts, Redes de Petri, etc. no teste funcional, pois aumenta o poder de compreensão do sistema e favorece que as informações e características mais relevantes sejam identificadas e utilizadas durante todo o processo de desenvolvimento [Delamaro, et al, 2007]. Dessa forma, a ênfase deste trabalho é dada ao teste funcional, no contexto da especificação destes testes utilizando redes de Petri a objetos devido ao fato desta notação oferecer o formalismo necessário para a especificação, além de oferecer suporte necessário a sistemas com características de concorrência e paralelismo. 3 Trabalhos Relacionados Há diversas pesquisas que abordam o trabalho de teste funcional. No contexto do teste de caixa-preta baseado em modelos por exemplo, no trabalho de Hong et al [Hong et al, 1995] as Máquinas de Estados Finitos foram usadas para especificar o comportamento de uma classe e apresenta uma técnica para a geração de casos de testes. Seguindo a mesma linha, em [Belli et al, 2005] sugere a geração de casos de teste baseado em Statecharts para a especificação de comportamento de um sistema, a estrutura hierárquica e mecanismos de comunicação de sistemas. Hartmann et al [Hartmann et al, 2000], apresenta uma metodologia de geração de casos de teste definindo um comportamento dinâmico de seus componentes usando UML via Statecharts. No contexto do teste funcional envolvendo a UML, em [Kim et al, 1999] classes de teste são geradas a partir da aplicação de diagramas de estados da UML. Um conjunto de critérios de cobertura é proposto baseando-se no fluxo de dados dos diagramas de estado da UML e mostra como gerar casos de teste satisfazendo esse critério. Em consideração ao teste funcional relacionado ao uso de redes de Petri, Wang et al [Wang et al, 1999] propõe a utilização de um modelo de rede de Petri simples (baixo nível) para a geração de classes de teste orientada a objeto. Já em [Zhu e He, 2002] uma metodologia de teste de redes de Petri de alto nível é proposto baseando-se sobre o teste de sistemas concorrentes e assim algumas estratégias de teste são investigadas e avaliadas. As redes de Petri coloridas são abordadas em Buchs et al [Buchs et al, 1998] para promover o uso de especificações formais estruturadas para gerar casos de teste em sistemas distribuídos para a avaliação dos componentes de software usando redes de Petri coloridas. Simão [Simão, 2000] em seu trabalho desenvolve a ferramenta Proteum-RS/PN, em que explora o critério do teste de mutação [Willians, 2000] no contexto do teste funcional em Sistemas Reativos, utilizando redes de Petri, outras ferramentas da mesma característica foram criadas utilizando no entanto, Máquina de Estados Finitos [Fabbri, 1996 ] e Statecharts [Sugeta, 1999]. De maneira semelhante ao contexto deste trabalho, Beizer [Beizer, 1990] explora o uso de grafos para especificar técnicas de teste funcional. Entretanto, neste trabalho em questão se concentra no desenvolvimento de modelos de teste de especificação formal usando

4 redes de Petri a objetos [Sibertin-Blank, 1994]. Assim, é possível manipular tanto fluxo de dados quanto o fluxo de controle e que podem ser aplicados a sistemas com paralelismo explícito fornecendo uma metodologia a mais para condução da atividade de teste. 4 Caracterização da Contribuição A contribuição deste trabalho se realizará no comprimento de uma série de atividades a serem executadas. O modelo em V ilustrado na Figura 1 é utilizado para melhor compreensão do problema, pois a partir dele, consegue-se visualizar todos os testes envolvidos em cada etapa do desenvolvimento de software. Analisando a Figura 1, o contexto deste trabalho se concentra na fase de especificação de requisitos. Este estágio corresponde à etapa inicial de desenvolvimento em que as informações sobre o sistema a ser desenvolvido são pouco detalhadas. Na fase de especificação de requisitos, são gerados documentos referentes ao planejamento dos testes de aceitação, que até então, pouco se sabe sobre como é realizado e que tipos de teste estão especificados nestes documentos. Análise de Requisitos e Viabilidade Testes de Sistema Instalação de Sistema e teste de sistema Epecificação Testes de Aceitação Teste de Aceitação Concepção Arquitetural Testes de Integração Integração e Teste de Integração Concepção Detalhada Testes Unitários Teste Unitário Programação Figura 1: Modelo de Desenvolvimento em V. A princípio, ainda na fase de especificação como afirmado antes, existem poucas informações a respeito do software. Desse modo, a modelagem dos requisitos neste estágio será fornecida por diagramas de casos de uso e de atividades da UML, bem como por diagramas de fluxo de dados (DFDs) e de controle (DFC), incluindo ainda as redes de Petri interpretadas. Percorrendo-se o modelo em V a partir da especificação de requisitos, passando pelas demais fases de desenvolvimento, alcança-se a etapa dos testes de aceitação, em que neste estágio o sistema já está completamente desenvolvido. Com um grau de detalhe de informações suficientemente grande sobre o sistema, nesta fase será possível derivando-se dos primeiros modelos da especificação de requisitos gerados, modelar casos de teste utilizando os diagramas de classe e de seqüência da UML e as redes de Petri a objetos. A escolha do uso das redes Petri a objetos neste trabalho se deve principalmente ao formalismo verificado nestas, permitindo a visualização do fluxo de dados e de controle que existem no sistema, além de dar suporte a modelagem de sistemas concorrentes e paralelos. Considerando as etapas de desenvolvimento da dissertação, no primeiro instante, foi disponibilizado o estado da arte relacionado à teste funcional, abordando os seus vários

5 conceitos referentes e também, teste de caixa-preta envolvendo redes de Petri, visando apresentar as principais contribuições desenvolvidas até o momento. Como etapa subseqüente, será realizada a especificação de testes de funcionais adotando uma abordagem multi-formalismo, incluindo diagramas semi-formais e formais. Entre os diagramas semi-formais a serem usados estão: Diagramas de Casos de Uso da UML para ver as funcionalidades que o software tem; Diagramas de Atividade também da UML, o qual mostra o fluxo de atividades em um processo; Diagramas de Fluxo de Dados (DFDs), onde aparecem as funcionalidades do software assim como os fluxos de dados; Diagrama SA-RT que é a combinação do DFD com DFC (Diagrama de Fluxo de Controle); Diagramas de Classe da UML para ver a arquitetura do sistema (com as classes principais que os testes vão acessar); Diagramas de Seqüência da UML que permitem visualizar a execução de cada caso de uso de acordo com os objetos da arquitetura proposta do sistema. Para os diagramas formais serão utilizadas: Redes de Petri Interpretadas a qual especificará o fluxo de controle; Redes de Petri a objeto que vão modelar cada caso de teste. Assim, especificação do teste funcional será realizada promovendo-se a geração de classes de teste que serão posteriormente implementadas em Java. Dessa forma, as classes funcionais de um software em Java abordado em estudo serão testadas. Como resultado, espera-se obter principalmente garantias de qualidade e de maior confiabilidade sobre as funcionalidades de sistemas orientados a objetos. 5 Estado Atual do Trabalho As atividades desempenhadas para a condução deste trabalho se caracterizam em: 1) Redação do levantamento bibliográfico referente a teste funcional; Teste funcional orientado a objetos; e Teste de caixa-preta em redes de Petri e outras linguagens de modelagem. 2) Modelagem do software orientado a objeto utilizando os diagramas semi-formais descritos na seção 3. 3) Definição e redação da arquitetura e metodologia para especificação de testes funcionais. 4) Definição e redação do modelo de testes funcionais usando redes de Petri a objetos. 5) Implementação de classes de teste em Java a partir do modelo de teste funcional obtido. 6) Aplicação das classes de teste para testar as funcionalidades do software orientado a objeto a ser usado. 7) Avaliação e redação de resultados. 8) Redação de artigos para submissão para a submissão em congressos científicos e periódicos. 9) Defesa da dissertação. A Tabela 1 a seguir ilustra a distribuição das atividades a serem executadas em meses, considerando que as atividades 1 e 2 foram concluídas. Tabela 1: Cronograma de Execução das Atividades. Atividade 8/07 9/07 10/07 11/07 12/07 1/08 2/08 Atividade 3/08 4/08 5/08 6/08 7/08 8/08 1 X X 6 X X 2 X X X 7 X X 3 X X X 8 X X 4 X X 9 X 5 X

6 6 Avaliação dos Resultados Como resultados, espera-se que a partir da introdução e execução da metodologia de desenvolvimento da especificação de testes funcionais a nível de requisitos, possibilite a verificação das funcionalidades de maneira automatizada. Os resultados serão avaliados mediante a execução de testes funcionais sobre as funcionalidades de softwares orientados a objetos. Dessa forma, a partir da especificação de testes funcionais usando redes de Petri a objetos, consiga-se de maneira eficiente testar as funcionalidades de sistemas, e dessa maneira obter uma sistematização da atividade de execução de testes funcionais, contribuindo por garantir a qualidade dos sistemas. 7 References [Beizer, 1990] Beizer, B.; (1990). Black-Box Teting: Techiques for Functional Testing for Software and Systems. [Buchs et al, 1998] Buchs, D.; Diagne, A.; Kordon, F.; (1998). Testing Prototypes Validity to Enhance Code Reuse. Rapid System Prototyping, Proceedings Ninth International Workshop. [Delamaro et al, 2007] Delamaro, M. E.; Maldonado, J. C.; Jino, M.; (2007). Introdução ao Teste de Software. Editora Campus. [Hartmann et al, 2000] Hartmann, J.; Imoberdof, C.; Meisenger, M.; (2000) UML Based Integration Testing, in ISSTA 2000 conference proceeding, Portland, Oregon, August 2000, pp [Hong et al, 1995] Hong, S.; Know, Y. R.; Cha, S. D.; (1995). Testing of Object-Oriented Programs Based on Finite States Machines. In Proceedings of 1995 Asia Pacific Software Egeneering Conference. IEEE Computer Society Press, Los Alamitos, California. [Kim et al, 1999] Kim Y.G..; Hong H.S.; Bae D.H.; Cha S.D.; (1999). Test cases generation from UML state diagrams IEE Proceedings online no [PFleegerl, 1999] PFleegerl, S. L.; (1999). Engenharia de Software. Teoria e Prática. Editora Prentice Hall. [Pressman, 2001] Pressman, R.; (2001). Engenahria de Software. Editora McGrawHill. [Sibertin-Blank, 1994] Sibertin-Blank, C.; (1994). Cooperative Nets. In: Valette, R. (Ed.), 15 th International Conference on Application and Theory of Petri Nets, Zaragosa, Lecture Notes in Computer Science, vol. 815, Springer, pp. 377±396. [Simão, 2000] Simão, A. S.; (2000). Proteum-RS/PN: Uma Ferramenta para Validação de Redes de Petri Baseada na Análise de Mutantes. Dissertação de Mestrado, Universidade de São Paulo, São Carlos, Brasil. [Sugeta, 1999] Sugeta, T. (1999). Proteum-RS/PN: Uma Ferramenta para Apoiar a Validação de Especificação de Statecharts na Análise de Mutantes. Dissertação de Mestrado. Universidade de São Paulo. São Carlos, São Paulo. [Summerville, 2003] Sommerville, I.; (2003). Engenharia de Software. Editora Addison Wesley. [Wang e Liu, 1993] Wang, C.J.; Liu, M.T.; (1993.) Generating Test Cases for EFSM with Given Fault Model. IEEE INFOCOM 93-12th Annual Joint Conference of the IEEE Computer and Communications Societies, Vol.2, pp [Willians, 2000] Willians, L.;(2000). Mutation Testing. New York, United Satates. [Zhu e He, 2002] Zhu, H.; He, X.; (2002). A Theory of Testing High Level Petri Nets. Technical Report, CMS-TR , School of Computing and Mathematical Sciences, Oxford Brookes University, Jan. (Submitted to IFIP World Computer Congress).