• Nenhum resultado encontrado

Considerando as caracter´ısticas de teste funcional das abordagens de Di Bernardo et al. (2011) e Sales e Coelho (2011) possivelmente essas abordagens possam ser aplicadas de ma- neira complementar `a abordagem baseada em teste estrutural apoiada pela JaBUTi/AJ. Ent˜ao foi analisado a viabilidade de se integrar uma dessas ferramentas na JaBUTi/AJ atrav´es do estudo do c´odigo da JaBUTi/AJ referente `a manipula¸c˜ao dos casos de teste. Ap´os uma an´alise realizada para verificar qual das ferramentas seria mais interessante integrar a JaBUTi/AJ nessa an´alise, a JunitE foi descartada pois a vers˜ao atualmente dispon´ıvel ainda encontra-se muito inst´avel e optou-se por desenvolver a vers˜ao integrada com a VITTAE.

A vers˜ao da JaBUTi/AJ integrada `a VITTAE foi desenvolvida em uma colabora¸c˜ao entre os grupos de pesquisa em engenharia de software do ICMC-USP e DIMAp-UFRN durante uma visita t´ecnica do autor desta disserta¸c˜ao ao DIMAp-UFRN. A vers˜ao da Ja-

BUTi/AJ integrada `a VITTAE possui todas as funcionalidades da JaBUTi/AJ incluindo as altera¸c˜oes apresentadas neste capitulo. Como a VITTAE depende de um contrato de exce¸c˜oes essa vers˜ao da JaBUTi/AJ tamb´em requer um contrato de exce¸c˜oes para realizar o teste de integra¸c˜ao. Para o teste de unidade n˜ao ´e requerido o contrato de teste.

O funcionamento da VITTAE tamb´em n˜ao tem limita¸c˜oes nessa vers˜ao integrada das ferramentas. Por´em, o uso de algumas funcionalidades pode n˜ao ser indicado quando se deseja utilizar as duas abordagens, como no caso de uma funcionalidade que resulte numa altera¸c˜ao significativa da estrutura original do programa.

Uma funcionalidade que se recomenda cautela ao usar ´e a que permite for¸car o lan¸ca- mento de exce¸c˜ao em um m´etodo por meio da introdu¸c˜ao de uma exce¸c˜ao. Essa funcio- nalidade ´e implementada com um adendo do tipo around contendo apenas uma instru¸c˜ao com um comando throw lan¸cando uma exce¸c˜ao do tipo especificado. Com a aplica¸c˜ao do around implementado conforme descrito, o grafo do programa deixa de conter a estrutura original do m´etodo afetado e por essa raz˜ao se recomenda cautela no uso dessa funciona- lidade no contexto do teste estrutural. Uma poss´ıvel altera¸c˜ao nessa funcionalidade seria que ao inv´es do adendo usado ser do tipo around fosse do tipo after returning. Assim, o grafo continuaria tendo a estrutura inteira do m´etodo sendo adicionado apenas um n´o que s´o seria exercitado caso o m´etodo terminasse a execu¸c˜ao sem lan¸car nenhuma exce¸c˜ao e esse n´o estaria claramente identificado como um n´o referente `a VITTAE para que o testador pudesse visualizar o que n˜ao ´e referente `a estrutural original.

Um efeito colateral da integra¸c˜ao das duas ferramentas ´e que como a VITTAE uti- liza aspectos para fazer verifica¸c˜oes durante o teste, isso gera altera¸c˜oes no bytecode do programa original que reflete numa altera¸c˜ao no grafo gerado pela JaBUTi/AJ, j´a que ele ´e gerado a partir do bytecode. Se a JaBUTi/AJ gerasse o grafo a partir do c´odigo fonte isso n˜ao ocorreria. Na figura 4.15 apresenta um grafo gerado pela vers˜ao integrada da JaBUTi/AJ com a VITTAE do programa apresentado na figura 4.5. Comparando as duas figuras pode-se ver claramente o que ´e considerado como um efeito colateral: o n´o 33 na figura 4.5 representa o fluxo que na figura 4.15 come¸ca no n´o 28 e termina no n´o 79. Todo esse fluxo entre o n´o 28 e 79 representa a verifica¸c˜ao da VITTAE e n˜ao ´e refe- rente a estrutura original do programa em teste. No exemplo da figura 4.15 existe apenas um tratamento de exce¸c˜oes, mas supondo-se um m´etodo com mais de um tratamento de exce¸c˜oes em cada n´o referente a um tratamento de exce¸c˜oes ser´a adicionado um conjunto de n´os semelhante aos n´os entre n´o entre os n´os 28 e 79 na figura 4.15. Esse efeito co- lateral n˜ao impede o teste, mas pode aumentar a dificuldade de entendimento do grafo que normalmente j´a ´e complexo. Uma poss´ıvel altera¸c˜ao para minimizar esse efeito seria fazer um tratamento no grafo para que cada conjunto de n´os n´os referentes `a verifica¸c˜ao no tratamento de exce¸c˜oes adicionada pela VITTAE seja transformado em apenas um n´o,

pois esses n´os representam uma estrutura adiciona pela VITTAE apenas para teste que n˜ao estar´a incorporada no programa original quando ele for usado em produ¸c˜ao.

Figura 4.15: Exemplo de grafo de integra¸c˜ao da vers˜ao da JaBUTi/AJ integrada com a VITTAE.

Pensando nessa vers˜ao da ferramenta foi proposto um crit´erio de teste n˜ao estru- tural no qual foi dado o nome de todas-cl´ausulas-do-contrato-de-exce¸c˜oes. Esse cri- t´erio depende de um contrato de exce¸c˜oes: dado um contrato de exce¸c˜oes, o crit´erio todas-cl´ausulas-do-contrato-de-exce¸c˜oes requer que cada cl´ausula do contrato de exce¸c˜oes seja exercitada ao menos uma vez por algum caso de teste. A cobertura desse crit´erio ´e calculada pelo n´umero de clausulas exercitadas dividido pelo total n´umero de clausulas do contrato de exce¸c˜oes. Vale ressaltar que esse crit´erio n˜ao est´a implementado em ne- nhuma das ferramentas, mas foi utilizado no experimento descrito no capitulo 5, em que foi aplicado manualmente.

O uso complementar das abordagens pode trazer benef´ıcios para o testador que passa a ter mais op¸c˜oes para o teste, enquanto a VITTAE permite definir e testar regras de design para tratamento de exce¸c˜oes a JaBUTi/AJ permite examinar toda a estrutura do fluxo de exce¸c˜oes. Essas caracter´ısticas das abordagens intuitivamente parecem ser complementares. Utilizar em um mesmo ambiente as duas ferramentas de forma integrada pode facilitar e incentivar o testador a usar as abordagens de maneira complementar ao inv´es de optar por uma.