6.2 Avaliação quantitativa
6.2.3 Projeto do experimento
6.2.3.4 Operação do experimento
A execução do experimento foi realizada durante fases, como mostra a tabela Tabela 10 cada fase com uma duração de 1:30 h.
Dia 1 Dia 2 Dia 3
Apresentação das Ferramentas Treinamento nas ferramentas Execução do experimento e coleta dos dados
Tabela 10 Relação entre as fases do experimento e os dias em que elas foram executadas
A primeira fase constituiu-se de uma apresentação sobre a definição de regras de tratamento de exceção e sobre as duas ferramentas que seriam avaliadas, bem como seu funcionamento. Para permitir que os sujeitos tivessem maior proficiência com as ferramentas a segunda fase foi o treinamento na utilização da VITTAE e da JUnitE permitindo que os sujeitos treinassem o uso delas em uma aplicação toy program e também exercitassem a realização de teste de comportamento excepcional. A terceira fase foi a realização do experimento em si, separando as duplas de acordo com a distribuição do quadrado latino. Nesta fase, os sujeitos receberam uma regra de comportamento excepcional, em linguagem natural, para cada sistema, onde as seguintes atividades deveriam ser realizadas: 1) escrita da regra de comportamento excepcional no formato da ferramenta; 2) escrita e execução do teste de comportamento excepcional para a regra; 3) os sujeitos deveriam responder a um questionário informando os dados das atividades anteriores
(incluindo o tempo e a quantidade de erros) e uma pesquisa de satisfação, pesquisa essa cujos dados foram analisados na segunda etapa do experimento; 4) Envio dos arquivos contendo os projetos e os testes. A seguir detalhamos cada uma dessas atividades.
Atividade 1) Escrita da regra de comportamento excepcional no formato da ferramenta.
Para cada um dos sistemas foi descrita uma regra de design de comportamento excepcional em linguagem natural. Os sujeitos deveriam descrever essas regras de acordo com a sintaxe da ferramenta, e escrever e executar os testes que verificavam se as regras estavam sendo obedecidas. A Tabela 11 apresenta a regra para cada sistema.
Sistema Bancário “Quando uma exceção do tipo
OperadorNegativoException for lançada pelo método creditar da classe ContaBancaria, o método
creditarNaConta da
classe
AlterarSaldoBancarioControlador deve tratar essa exceção.”
Sistema de Fichas “Quando uma exceção do tipo
SaldoDeFichasNegativoException for lançada pelo método gastarFichas da classe UsuarioMaquina, o método
comprarProduto da classe
OperacoesFichaController
deve tratar essa exceção.”
Tabela 11: Regra de Design Excepcional de cada sistema
Como resultado, para cada um dos sistemas as regras deveriam ser descritas como mostrado na Tabela 12. O motivo pelo qual foi utilizada somente uma regra foi a pequena janela disponível para realização do experimento, o que
inviabilizou a realização de um experimento com mais contratos a serem verificados pelos sujeitos.
JUnitE VITTAE
Sistema Bancário
String trace[] = new String []{
raiseSite("br.ufrn.entities. ContaBancaria.creditar"), exception("br.ufrn.exception s.OperacaoValorNegativoExcep tion"),catchSite("br.ufrn.co ntroller.AlterarSaldoBancari oControlador.creditarNaConta ")}; <contract> <signaler signature="br.ufrn.entities.credit ar(..)"> <exception type="br.ufrn.exceptions.OperacaoV alorNegativoException"> <handler signature="br.ufrn.controller.Alte rarSaldoBancarioControlador.credit arNaConta(..)"/> </exception> </signaler> </contract> Sistema de Fichas
String trace [] = new String[]{raiseSite(" br.ufrn.entities.UsuarioMaqu ina.java.gastarFichas"),exce ption("br.ufrn.exceptions.Sa ldoDeFichasNegativoException "), catchSite("br.ufrn.controlle r.OperacoesFichaController.j ava.comprarProduto")}; <contract> <signaler signature="br.ufrn.entities.Usuari oMaquina.gastarFichas(..)"> <exception type="br.ufrn.exceptions.SaldoDeFi chasNegativoException"> <handler signature="br.ufrn.controller.Oper acoesFichaController.comprarProdut o(..)"/></exception> </signaler> </contract>
Tabela 12: Resultado esperado das regras de design descritas nas ferramentas
Atividade 2) Escrita e execução do teste de comportamento excepcional para a regra.
Após descrever a regra de comportamento excepcional, o próximo passo era a escrita e execução do teste que verificaria tal regra. No 1º e no 2º dia mostrou-se aos sujeitos que o teste envolvia executar os métodos que tratariam as exceções (handlers ou catchers) com parâmetros que fizessem com que os métodos que lançariam as exceções (signalers ou raisers) lançassem a exceção do tipo especificado.
Para permitir que os sujeitos focassem na definição destes parâmetros, no 3º dia foi fornecido aos sujeitos um trecho de código de exemplo que
inicializava os objetos cujos métodos teriam a função de tratadores para cada sistema. Dessa maneira, permitiu-se que os sujeitos focassem seu raciocínio na escrita do trecho em que os métodos tratadores de exceção eram chamados com parâmetros que lançariam as exceções.
O trecho de código a seguir apresenta o exemplo de um trecho de código
de inicialização de um objeto da classe
AlterarSaldoBancarioControlador que possui um método
(creditarNaConta) que captura a exceção
OperadorNegativoException.
1. ...
2. AlterarSaldoBancarioControlador controlador = new 3. AlterarSaldoBancarioControlador();
4. ContaBancaria conta = new ContaBancaria(); 5. Cliente c = new Cliente();
6. conta.setCliente(c);
7. controlador.setContaBancaria(conta); 8. ...
Após instanciar o objeto seria necessário então escrever o trecho de código que faria com que a exceção fosse lançada. O trecho de código a seguir mostra como o método creditarNaConta deveria ser chamado para que a exceção OperadorNegativoException fosse lançada pelo método
creditar da classe ContaBancaria.
1. ...
2. controlador.creditarNaConta("-1"); 3. ...
Neste caso, após a realização do teste o resultado deveria ser como o exibido na Figura 23 para a VITTAE e na Figura 24 na JUnitE.
Figura 23:Resultado do teste na VITTAE
Figura 24: Resultado do teste na JUnitE
Atividade 3) Contabilização dos erros e resposta aos questionários
Após a realização das atividades 1 e 2 os sujeitos deveriam responder a um questionário. Ele se constituía de perguntas sobre os dados coletados nas atividades 1 e 2 para cada sistema e uma pesquisa de satisfação sobre o uso das ferramentas. Nesta fase iremos detalhar apenas o questionário referente à coleta de dados das atividades. As questões relacionadas ao questionário de satisfação serão abordadas na seção sobre a avaliação qualitativa. A Tabela 13 apresenta as perguntas realizadas e a relação delas com as questões levantadas pela técnica GQM.
Código Pergunta Questão (GQM)
P1 Quanto tempo (em
segundos) você levou para definir a regra
neste sistema com esta ferramenta?
P2 Quanto tempo (em
segundos) você levou
para escrever e executar o teste (incluindo o tempo para analisar o resultado)? Q2,Q5
P3 Seu caso de teste
resultou numa falha do JUnit? Q3 P4 Você conseguiu através das informações fornecidas no log identificar a causa da falha? Q4
Tabela 13: Lista de perguntas do questionário e a relação delas com as questões levantadas para o experimento
Atividade 4) Envio dos arquivos de projeto e dos testes
A atividade final do experimento foi o envio dos arquivos dos projetos do eclipse e dos testes através do sistema acadêmico. O objetivo era comparar os dados obtidos no questionário com o que os sujeitos realmente haviam feito. Na próxima seção apresentamos a análise dos resultados dessa primeira fase.