8º Congresso de Pós-Graduação GERAÇÃO AUTOMÁTICA DE CASOS DE TESTE A PARTIR DE CASOS DE USO Autor(es) JOSE EDIELSON MOREIRA MENDES Orientador(es) PLÍNIO ROBERTO SOUZA VILELA 1. Introdução Atualmente quase todos os países fazem uso de sistemas de computadores para realizar suas tarefas diárias (Myers, Sandler et al., 2004; Ammann e Offutt, 2008). Os canais de comunicação nacionais, até mesmo, industriais e educacionais dependem de sistemas computacionais (Myers, Sandler et al., 2004; Ammann e Offutt, 2008). As indústrias utilizam softwares nos processos de fabricação de seus produtos, empresas de telecomunicações dependem quase que integralmente de sistemas computacionais e os órgãos públicos estão cada vez mais dependentes de sistemas informatizados. Prova disso aconteceu recentemente quando uma pane no sistema de uma grande empresa de redes de computadores de longa distância provocou a paralisação de serviços de órgãos públicos e de empresas privadas, tais como bancos, lotéricas, entre outras. Os serviços que não ficaram totalmente paralisados tiveram uma grande queda de desempenho, devido a pane provocada na rede. Os sistemas de computação estão cada vez mais presentes no dia a dia das empresas e das pessoas, tornando-as assim cada vez mais dependentes de tais sistemas. Uma falha em um software pode trazer diversas conseqüências para empresas e pessoas como um todo, desde pequenos problemas de ordem organizacional e/ou pessoal a prejuízos financeiros(Myers, Sandler et al., 2004). Sendo assim, torna-se necessário os sistemas serem confiáveis, livres de falhas e com um alto nível de qualidade. Uma das peças chaves no processo da garantia da qualidade e confiabilidade do software é o teste de software (Tian, 2005). O teste de software tem por objetivo principal detectar o maior número de defeitos possíveis, a fim de garantir a qualidade e confiabilidade do software (Myers, Sandler et al., 2004). O teste de software realizado de maneira bem estruturada, embasada em métodos e técnicas consolidadas, tende a trazer inúmeros benefícios às empresas e às pessoas. Mas, infelizmente, a prática de teste de software é comumente negligenciada(Myers, Sandler et al., 2004), devido ao custo gerado pela atividade de teste de software(Bertolino, 2007). Entretanto maior ainda é o custo da não realização da atividade de teste de software. 2. Objetivos O principal objetivo do projeto foi apoiar o processo de teste de software, com intuito de minimizar custo e tempo na elaboração de casos de testes e estabelecer uma técnica de especificação de casos de uso com anotações. Para atingir o objetivo, foi criado um modelo baseado em um meta modelo de caso de uso extraído de (Williams, 2001), que serviu como base para a geração dos casos de teste executáveis a partir de casos de uso. Para dar suporte ao processo de geração dos casos de testes executáveis foi desenvolvida uma ferramenta de software com interface Web, que permitiu de maneira prática e eficiente extrair os dados a partir dos casos de uso anotados. A ferramenta desenvolvida permite-nos gerar casos de testes executáveis, em formato JUnit, a partir da leitura de casos de usos escritos em uma linguagem natural e complementados por anotações. 3. Desenvolvimento Casos de Uso O caso de uso foi introduzido por Jacobson em 1987 (Jacobson, 2004) e entre 1995 e 1997 foi introduzido na UML (Linguagem de Modelo Unificado) (Alhir, 2003). Atualmente é uma das técnicas mais utilizadas para especificação de funcionalidades de sistemas (Alhir, 2003) (Berg van den, Mehmet et al. 1999) (Rumbaugh, Jacobson et al. 2004). Fundamentalmente o caso de uso é descrito em um formato textual e um diagrama gráfico que é uma espécie de “tabela de conteúdo” das funcionalidades de um sistema e descreve as relações entre as funcionalidades e entre estas com os usuários externos do sistema (Rumbaugh, Jacobson et al. 2004). Geração de Casos de Testes a partir de Casos de Uso A utilização de diagramas de casos de uso é uma técnica amplamente utilizada na definição dos requisitos funcionais de sistema e sua correta implementação tem influência direta na qualidade do software(Gutiérrez, Escalona et al., 2008). Sendo assim, é de suma importância que os casos de uso sejam verificados, a fim de identificar possíveis defeitos inseridos no sistema. A utilização de casos de uso para geração de casos de testes é um tema que vem crescendo consideravelmente no meio acadêmico, prova disso é numero artigos que vêm sendo publicado sobre o tema nos últimos anos, a relação de alguns artigos publicados pode ser obtida em(Gutiérrez, Escalona et al., 2004; Neto, Subramanyan et al., 2007). Uma maneira de reduzir o esforço e o custo na fase de teste de software, mas ainda assim preservando a sua eficácia, é a geração automática de casos de teste a partir de artefatos utilizados nas fases iniciais de desenvolvimento de software, tal como o caso de uso (Somé e Cheng 2008). Trabalhos Correlatos Diferentes abordagens têm sido propostas para geração de casos de testes a partir de casos de uso. Dentre as várias abordagens, podemos destacar duas: (Nebut e Fleurey, 2006) e (Gutiérrez, Escalona, Mejías, Torres et al., 2007), pois são abordagens que geram scripts de testes executáveis. A abordagem de Nebut e Fleury (Nebut e Fleurey, 2006), gera casos de testes executáveis, a partir de casos de uso, onde, casos de uso são descritos no formato de diagramas de atividades e auxiliados por contrato, que são as pré e pós-condições do caso de uso. Um modelo comportamental é criado no formato de diagramas de seqüência, que é utilizado para a geração dos scripts de testes executáveis no formato JUnit. Em Gutiérrez, Escalona, Mejías e Torres (2007), os casos de uso são escritos em um formato textual, utilizando-se de um template, que serve como base na geração dos possíveis cenários do caso de uso que serão os objetivos de testes. Com o uso do método de particionamento de classes de equivalência as variáveis de testes são definidas e os testes são então gerados com o uso de uma arquitetura baseada no JUnit. Limitações no uso de casos de uso Alguns autores concordam que um caso de uso pode ser utilizado para derivar casos de testes (Fröhlich e Link 2000; Williams 2001; Dranidis, Tigka et al. 2003), e que casos de testes gerados a partir de casos de uso podem assegurar que os requisitos do sistema sejam atendidos (Dranidis, Tigka et al. 2003; Somé e Cheng 2008). Entretanto, o uso de casos de uso para geração de casos de testes tem as suas limitações, entre elas, estão: Casos de uso são escritos em uma linguagem natural informal, podendo gerar diferentes interpretações, propensas a erros e incompletude(Dranidis, Tigka et al. 2003; Somé e Cheng 2008). Uma segunda limitação é garantir uma cobertura adequada para as seqüências de ações de um caso de uso, ou seja, garantir com que os casos de testes gerados a partir das seqüências de ações do caso de uso tenham um alto grau de probabilidade de encontrar defeitos no sistema(Somé e Cheng 2008). Uma terceira dificuldade é que importantes restrições que definem a seqüencia entre um caso de uso e outro são expressas implicitamente, ou seja, elas são anotadas informalmente nos casos de uso(Somé e Cheng 2008), o que dificulta a automação e seleção de um conjunto adequado de casos de teste. 4. Resultado e Discussão A ferramenta desenvolvida em C Sharp, ASP .Net e SQL Server na plataforma Webe implementou a arquitetura proposta pelo projeto, que é composta por quatro módulos, o módulo caso de uso, onde ficam as informações dos casos de uso, o módulo parâmetro, onde são definidas as classes de dados utilizadas nos casos de uso, o módulo dados, onde são definidas as partições de dados que serão utilizadas na execução dos testes e o módulo teste que agrupa as informações dos outros módulos para asim gerar os scripts de testes executáveis. Para testar as funcionalidades da ferramenta, um exemplo de caso de uso com operações básicas de manutenção foi utilizado, o qual continha as operações de inclusão, exclusão, alteração e consulta. Na realização dos testes a ferramenta se mostrou funcional e prática, atingindo o objetivo proposto, ou seja, a geração dos scripts de testes executáveis no formato JUnit. 5. Considerações Finais Como dito anteriormente o uso de caso para geração de casos de testes possuem algumas limitações e tais limitações são encontradas nas ferramentas citadas na literatura. Neste projeto a ferramenta desenvolvida apesar de ter sido testada e considerada funcional, carece de um estudo empírico, que avalie de maneira mais completa e eficaz as suas funcionalidades. Referências Bibliográficas Mayers, G. et al (2004). The Art of Software Testing. Wiley. ISBN 0471469122. Tian, J. (2005). Software Quality Engineering: Testing, Quality Assurance, and Quantifiable Improvement. Ammann, P. and J. Offutt (2008). Introduction to Software Testing. New York, Cambridge University Press. Williams, C. E. (2001). Towards a Test-Ready Meta-model for Use Cases. Workshop of the pUML-Group held together with the UML. 2001, on Practical UML-Based Rigorous Development Methods - Countering or Integrating the eXtremists, GI. Bertolino, A. (2007). Software Testing Research: Achievements, Challenges, Dreams. 2007 Future of Software Engineering, IEEE Computer Society. Alhir, S. S. (2003). Learning UML, O'Reilly & Amp; Associates, Inc. Jacobson, I. (2004). "Use cases - Yesterday, today, and tomorrow." Software and System Modeling 3(3): 210-220. Berg van den, K., Mehmet, et al. (1999). Use Cases in Object-Oriented Software Development. Enschede, Universiteit Twente, AMIDST/CTIT. Somé, S. S. and X. Cheng (2008). An approach for supporting system-level test scenarios generation from textual use cases. Proceedings of the 2008 ACM symposium on Applied computing. Fortaleza, Ceara, Brazil, ACM. Fröhlich, P. and J. Link (2000). Automated Test Case Generation from Dynamic Models. Proceedings of the 14th European Conference on Object-Oriented Programming, Springer-Verlag. Nebut, C. and F. Fleurey (2006). "Automatic Test Generation: A Use Case Driven Approach." IEEE Trans. Softw. Eng. 32(3): 140-155. Dranidis, D., K. Tigka, et al. (2003). Formal modelling of use cases with X-machines. SEEFM'03 - 1st South-East European Workshop on Formal Methods, Thessaloniki, Greece. Anexos