Resumo

Pachulski Camara, Bruno Henrique. Uma investigação sobre o uso de critérios de teste no desenvolvimento baseado em testes para o ensino de programação. 2016. 128. f. Dissertação (Programa de Pós-Graduação em Informática), Universidade Tecnológica Federal do Paraná. Cornélio Procópio, 2016.

Contexto: Estudantes de cursos da área de Ciência da Computação que estão iniciando em programação normalmente dificuldade de assimilar os conteúdos básicos. Alguns pesquisadores propõem a utilização do desenvolvimento baseado em testes (TDD) a fim de melhorar o ensino, mas sem o foco na qualidade do conjunto de casos de teste.

Objetivo: Este trabalho tem o objetivo de propor uma estratégia baseada no desenvolvimento baseado por testes em conjunto com técnicas de teste de software, guiando o acadêmico a desempenhar suas atividades de programação com mais qualidade e, desta forma, obter melhores resultados acadêmicos.

Método: Baseado em um mapeamento sistemático da literatura e na revisão de estudos que aplicam desenvolvimento baseado em testes (TDD) em âmbito educacional, foi definida uma estratégia para integrar critérios de teste ao TDD. Para avaliar os resultados, foram definidas medidas e instrumentos para a coleta de resultados. Foi executado um experimento científico com o público alvo para a obtenção das informações com a finalidade de avaliar a hipótese definida.

Resultados: Foi definida uma estratégia de utilização de técnicas de teste de software em conjunto com o TDD para alunos que estão iniciando em programação em cursos de Computação. A estratégia consiste na melhoria do conjunto de casos de teste durante a refatoração no TDD, considerando critérios estruturais baseado em fluxo de controle. Além disso, foram elaboradas ferramentas para a coleta de dados durante o desenvolvimento de programas e para análise dos dados. A estratégia permitiu a melhora do programa e dos casos de teste e foi avaliada pelos acadêmicos como um guia no desenvolvimento dos casos de teste e como um atalho para descoberta de defeitos.

Conclusões: Com a utilização da estratégia proposta, foi possível observar melhorias no conjunto de casos de teste e no software final. A estratégia definida pode ser replicada em outros contextos e com o emprego de outras técnicas e critérios de teste de software para a avaliação da hipótese definida e generalização dos resultados.

Palavras-chaves: desenvolvimento baseado em testes; TDD; teste de software; critério de teste; ensino; introdução a programação.

Estudo experimental

Com a finalidade de avaliar as hipóteses definidas foi proposto um estudo experimental que é composto pelas etapas: questionário de conhecimentos, divisão dos grupos, treinamento, desenvolvimento do software, questionário de avaliação e avaliação dos resultados. Tal como expostas na imagem abaixo, cada uma das etapas é executada sequencialmente.

Treinamento

Tal como apresentado na dissertação o treinamento é a primeira etapa da execução do estudo experimental. Inicialmente os todos os alunos foram treinados para desenvolver software utilizando o TDD. O primeiro contato deles com a técnica foi com uma apresentação (live coding) de como desenvolver um software utilizando TDD. Foi disponibilizado material de apoio para as atividades que foram desenvolvidas atividade extraclasse e posteriormente corrigidos em sala.

Após a divisão dos grupos, o Grupo B foi treinado utilizando os mesmos exercícios utilizados no primeiro treinamento. Entretanto, os alunos utilizaram o TDD com critérios de teste para a resolução dos exercícios. Foi disponibilizado o material de apoio da estratégia.

Ferramenta

Um conjunto de ferramentas foi proposto com a finalidade de suprir a necessidade de uma ferramenta que obtenha estas informações e as organize para que estes dados possam ser analisados posteriormente. A ferramenta dividida em três partes: plugin, servidor e ferramenta de análise. Como pode ser observado na imagem abaixo, cada um dos módulos da ferramenta captura ou fornece informações para a atividade subsequente.

Plugin

O software de captura das informações foi desenvolvido como um plugin (repositório) para o IDE Eclipse. Durante o desenvolvimento do software, ao seguir o fluxo do TDD, o aluno executa os casos de teste utilizando os botões que são dispostos pelo plugin no IDE do Eclipse, tal como pode ser observado na imagem abaixo. Estes plugins são referentes a cada uma das etapas do TDD, sendo eles: RED, GREEN e Refactor.

Ao acionar o botão, o plugin registra o estágio atual do TDD de acordo com o botão acionado, informações fornecidas pelo JUnit e Eclemma e ainda mostra para o indivíduo na IDE as ações padrão do Eclemma e JUnit. Neste mesmo momento são criados os arquivos de acompanhamento, os quais são:

  • Arquivo de acompanhamento do TDD: arquivo onde são registrados o estágio do TDD que o usuário está executando e o horário.
  • Relatório do JUnit: foi implementada uma estrutura do Eclipse que trabalha como um gatilho para o JUnit (Extension Point). Desta forma, ao final da execução dos casos de teste, o resultado é sumarizado em um objeto Java (TestSuiteSession) e este é transformado em XML.
  • Relatório do Eclemma: foi necessário modificar o plugin Eclemma para que, ao final da execução, o relatório no formato XML fosse persistido. Este relatório é padrão do plugin, entretanto não oferece o recurso de extensão tal como o do JUnit.

Servidor

O servidor (repositório) opera como um facilitador para a organização dos dados arquivos de acompanhamento gerados pelo plugin. O servidor fornece um serviço REST que recebe todos os arquivos gerados no decorrer da utilização do plugin. Todos os arquivos recebidos são armazenados conforme a classificação indicada pelo plugin, as quais são referentes a: participante (identificador único), nome do projeto, estágio do TDD, tipo do arquivo (JUnit, Eclemma) e informações sobre eventos.

Análise

Para utilizar a ferramenta de análise (repositório) o pesquisador terá apenas que selecionar o diretório base dos arquivos e executar a leitura dos arquivos. Após coletar os dados para análise, é necessário apenas selecionar a pasta base do projeto do Eclipse para que os dados sejam exibidos, tal como exemplificado na imagem.

Avaliação da proposta

A proposta da utilização de critérios de teste de software descrita na dissertação altera o ciclo tradicional de execução do TDD, estendendo a etapa de refactor com a finalidade de que o conjunto de casos de teste também seja melhorado.

Estratégia geral

A definição da estratégia é baseada em três perguntas, as quais colaboram na definição.

  1. Qual critério de teste de software será utilizado?
  2. Qual métrica deve ser atingida para caracterizar o final da iteração?
  3. Como o praticante avaliará a cobertura durante a prática do TDD?

Estratégia com critérios estruturais

Desta forma, definida uma estratégia baseada em critérios de teste de software estrutural que utilizam Grafo de Fluxo de Controle (GFC) para derivar os requisitos de teste. Seguindo o modelo previamente descrito, a estratégia se constitui tal como definido a seguir:

  1. Qual critério de teste de software será utilizado?
    • Serão utilizados os critérios de teste de software baseado em grafo de fluxo de controle: Todos-Nós e Todas-Arestas.
  2. Qual métrica deve ser atingida para caracterizar o nal da iteração?
    • Serão observadas as coberturas nos dois critérios. Todavia o acadêmico deve seguir uma ordem de cobertura. É necessário atingir 100% do critério Todos-Nós para então implementar casos de teste com o objetivo de atingir 100% de cobertura do critério Todas-Arestas.
  3. Como o praticante avaliará a cobertura durante a prática do TDD?
    • Durante o desenvolvimento da aplicação proposta o indivíduo deverá utilizar o IDE Eclipse em conjunto com os plugins JUnit e Eclemma, que fornecerão as informações necessárias sobre cobertura dos critérios definidos para o desenvolvimento utilizando o arcabouço proposto.

Com base nessa definição, foi desenvolvido um diagrama que demonstra como será o fluxo de desenvolvimento proposto.

Neste modelo, observa-se que durante a etapa de refatoração o aluno deverá trabalhar em paralelo com a atividade de refatoração de código e melhoria do conjunto de casos de teste derivados a partir dos critérios Todos-Nós e Todas-Arestas. Desta forma, no contexto da melhoria do conjunto de casos de teste é necessário inicialmente que 100% do critério Todos-Nós seja atingido. Após isso inicia-se o desenvolvimento dos casos de teste com o intuito de atingir 100% do critério Todas-Arestas.

Resultado detalhado por aluno

Os resultados da execução 04 apresentados na dissertação são dados resumidos com base na tabela que segue. Em virtude da quantidade de registros seria inviável apresentar tais valores no documento.

Esta tabela apresenta um resumo das execuções de cada uma das fases do TDD por aluno.

Grupo Interação Aluno   TEMPO C.T. C.T. P. C.T. F. DEF Branches C. Intructions C.
A 1 Aluno 01 Red 0.0 1.0 0.0 1.0 1.0 50.0 40.0
Green 9.0 2.0 1.0 1.0 0.0 75.0 73.7
Refactor 4.0 1.0 1.0 0.0 0.0 75.0 97.2
Aluno 02 Red 27.0 5.0 5.0 0.0 0.0 100.0 100.0
Green 11.0 5.0 5.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 05 Red 29.0 4.0 3.0 1.0 1.0 100.0 74.9
Green 25.0 5.0 5.0 0.0 0.0 100.0 100.0
Refactor 5.0 5.0 5.0 0.0 0.0 100.0 100.0
Aluno 07 Red 0.0 1.0 0.0 1.0 1.0 100.0 100.0
Green 0.0 1.0 0.0 1.0 1.0 75.0 66.7
Refactor 3.0 1.0 1.0 0.0 0.0 75.0 98.8
Aluno 10 Red 33.0 3.0 1.0 2.0 1.0 100.0 47.7
Green 9.0 2.0 2.0 0.0 0.0 100.0 100.0
Refactor 13.0 2.0 2.0 0.0 0.0 100.0 100.0
2 Aluno 01 Red 0.0 2.0 1.0 1.0 1.0 75.0 73.7
Green 0.0 2.0 2.0 0.0 0.0 100.0 100.0
Refactor 24.0 2.0 2.0 0.0 0.0 83.3 100.0
Aluno 02 Red 2.0 4.0 3.0 1.0 1.0 100.0 88.0
Green 59.0 4.0 4.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 05 Red 0.0 5.0 5.0 0.0 0.0 100.0 100.0
Green 4.0 5.0 5.0 0.0 4.0 93.8 99.6
Refactor 0.0 5.0 5.0 0.0 0.0 93.8 99.6
Aluno 07 Red 5.0 2.0 0.0 2.0 2.0 0.0 4.1
Green 0.0 2.0 0.0 2.0 2.0 0.0 4.1
Refactor 2.0 2.0 0.0 2.0 2.0 0.0 4.1
Aluno 10 Red 50.0 4.0 3.0 1.0 1.0 94.4 91.6
Green 40.0 4.0 4.0 0.0 1.0 94.4 100.0
Refactor 42.0 4.0 4.0 0.0 0.0 94.4 100.0
3 Aluno 01 Red 0.0       0.0 83.3 77.7
Green 33.0 3.0 3.0 0.0 0.0 87.5 100.0
Refactor 16.0 2.0 2.0 0.0 0.0 75.0 97.2
Aluno 02 Red 1.0 5.0 5.0 0.0 0.0 100.0 100.0
Green 12.0 5.0 5.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 05 Red 0.0 6.0 5.0 1.0 1.0 93.8 99.6
Green 42.0 8.0 7.0 1.0 3.0 90.0 85.5
Refactor 29.0 9.0 8.0 1.0 0.0 90.0 97.3
Aluno 07 Red 4.0 2.0 1.0 0.0 0.0 100.0 100.0
Green 0.0 3.0 3.0 0.0 0.0 90.0 100.0
Refactor 4.0 3.0 3.0 0.0 0.0 90.0 100.0
Aluno 10 Red 7.0 4.0 3.0 1.0 1.0 94.4 82.1
Green 3.0 4.0 3.0 1.0 1.0 77.8 78.0
Refactor 13.0 4.0 4.0 0.0 0.0 94.4 100.0
4 Aluno 01 Red 2.0 4.0 2.0 2.0 1.0 87.5 72.7
Green 3.0 3.0 2.0 1.0 1.0 87.5 82.7
Refactor  -  -  -  -  -  -  -
Aluno 02 Red 9.0 6.0 5.0 1.0 0.0 100.0 86.8
Green 15.0 6.0 4.0 2.0 1.0 100.0 77.2
Refactor  -  -  -  -  -  -  -
Aluno 05 Red 12.0 9.0 9.0 0.0 0.0 90.0 99.4
Green 16.0 8.0 8.0 0.0 0.0 90.0 99.3
Refactor 6.0 8.0 8.0 0.0 0.0 90.0 99.3
Aluno 07 Red 11.0 5.0 1.0 4.0 2.0 77.8 53.9
Green 0.0 5.0 1.0 4.0 4.0 87.5 58.1
Refactor 9.0 5.0 4.0 1.0 2.0 83.3 93.4
Aluno 10 Red 48.0 6.0 5.0 1.0 1.0 93.3 86.5
Green 0.0 6.0 5.0 1.0 1.0 93.3 93.1
Refactor 44.0 6.0 5.0 1.0 0.0 93.3 86.4
5 Aluno 01 Red 0.0 3.0 2.0 1.0 1.0 87.5 82.7
Green 10.0 3.0 3.0 0.0 3.0 80.0 98.9
Refactor  -  -  -  -  -  -  -
Aluno 02 Red 0.0 6.0 5.0 1.0 1.0 100.0 86.8
Green 7.0       0.0 100.0 78.0
Refactor 3.0 6.0 5.0 1.0 1.0 85.7 85.3
Aluno 05 Red 2.0 8.0 8.0 0.0 1.0 90.0 99.3
Green 53.0 8.0 8.0 0.0 0.0 90.0 99.1
Refactor 0.0 8.0 8.0 0.0 0.0 90.0 87.6
Aluno 07 Red 0.0 5.0 1.0 4.0 3.0 50.0 41.1
Green 0.0 5.0 2.0 3.0 3.0 61.1 75.0
Refactor 6.0 5.0 4.0 1.0 1.0 85.0 93.4
Aluno 10 Red  -  -  -  -  -  -  -
Green 18.0 6.0 6.0 0.0   73.7 83.5
Refactor 7.0 6.0 6.0 0.0 0.0 100.0 100.0
6 Aluno 01 Red 0.0 4.0 3.0 1.0 1.0 90.0 71.1
Green 3.0 5.0 5.0 0.0 2.0 68.2 96.1
Refactor  -  -  -  -  -  -  -
Aluno 02 Red 34.0 10.0 9.0 1.0 1.0 93.3 85.6
Green 19.0 10.0 10.0 0.0 0.0 96.9 100.0
Refactor  -  -  -  -  -  -  -
Aluno 05 Red 23.0 5.0 4.0 1.0 1.0 86.4 81.4
Green 29.0 6.0 6.0 0.0 0.0 95.5 100.0
Refactor 0.0 6.0 6.0 0.0 0.0 95.5 100.0
Aluno 07 Red 57.0       0.0 92.9 92.4
Green 0.0 5.0 4.0 1.0 1.0 85.0 94.7
Refactor 55.0 5.0 5.0 0.0 0.0 92.9 100.0
Aluno 10 Red 38.0 8.0 7.0 1.0 0.0 96.9 100.0
Green 42.0 8.0 7.0 1.0 0.0 94.4 84.5
Refactor 47.0 8.0 8.0 0.0 0.0 97.2 100.0
B 1 Aluno 11 Red 31.0 3.0 2.0 1.0 0.0 100.0 100.0
Green 28.0 2.0 2.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 14 Red 9.0 1.0 0.0 1.0 0.0 50.0 28.6
Green 18.0 1.0 1.0 0.0 0.0 50.0 90.4
Refactor 38.0 2.0 1.0 1.0 0.0 87.5 62.9
Aluno 15 Red 21.0 3.0 2.0 1.0 1.0 83.3 69.2
Green 19.0 3.0 3.0 0.0 0.0 83.3 100.0
Refactor 19.0 3.0 3.0 0.0 0.0 100.0 100.0
Aluno 17 Red 6.0 2.0 1.0 1.0 1.0 100.0 100.0
Green 8.0 2.0 2.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
2 Aluno 11 Red 3.0 7.0 7.0 0.0 0.0 95.0 100.0
Green 1.0 8.0 8.0 0.0 0.0 100.0 100.0
Refactor 0.0 3.0 3.0 0.0 0.0 91.7 99.3
Aluno 14 Red 1.0 2.0 2.0 0.0 0.0 90.0 77.3
Green 3.0 16.0 13.0 3.0 1.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 15 Red 14.0 5.0 4.0 1.0 1.0 100.0 77.0
Green 6.0 5.0 5.0 0.0 2.0 100.0 100.0
Refactor 0.0 5.0 5.0 0.0 0.0 100.0 100.0
Aluno 17 Red 0.0 3.0 2.0 1.0 1.0 75.0 88.9
Green 15.0 3.0 3.0 0.0 0.0 100.0 100.0
Refactor 0.0 3.0 3.0 0.0 0.0 100.0 100.0
3 Aluno 11 Red 18.0 9.0 8.0 1.0 1.0 100.0 80.4
Green 17.0 9.0 9.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 14 Red 41.0 3.0 1.0 2.0 0.0 100.0 54.6
Green 43.0 3.0 3.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 15 Red 0.0 6.0 5.0 1.0 1.0 85.7 93.4
Green 0.0 6.0 6.0 0.0 0.0 92.9 99.5
Refactor 4.0 7.0 7.0 0.0 1.0 100.0 100.0
Aluno 17 Red 0.0 4.0 3.0 1.0 1.0 100.0 83.7
Green 0.0 4.0 4.0 0.0 0.0 100.0 100.0
Refactor 0.0       0.0 100.0 100.0
4 Aluno 11 Red 38.0 10.0 9.0 1.0 0.0 100.0 95.0
Green 38.0 10.0 10.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 14 Red 4.0       0.0 92.3 69.7
Green 16.0 6.0 6.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 15 Red 3.0 9.0 8.0 1.0 0.0 93.3 89.3
Green 3.0 9.0 9.0 0.0 0.0 93.3 100.0
Refactor 27.0 9.0 9.0 0.0 0.0 96.9 100.0
Aluno 17 Red 0.0 5.0 4.0 1.0 1.0 100.0 89.3
Green 4.0 6.0 6.0 0.0 0.0 100.0 100.0
Refactor 0.0 5.0 5.0 0.0 0.0 100.0 100.0
5 Aluno 11 Red 56.0 11.0 11.0 0.0 1.0 100.0 100.0
Green 51.0 11.0 11.0 0.0 0.0 100.0 100.0
Refactor 9.0 11.0 11.0 0.0 0.0 100.0 100.0
Aluno 14 Red 0.0 6.0 6.0 0.0 0.0 100.0 100.0
Green 0.0 6.0 6.0 0.0 0.0 100.0 100.0
Refactor 0.0 6.0 6.0 0.0 0.0 100.0 100.0
Aluno 15 Red 4.0 10.0 9.0 1.0 1.0 97.1 94.1
Green 2.0 10.0 10.0 0.0 0.0 100.0 100.0
Refactor 14.0 10.0 10.0 0.0 3.0 100.0 100.0
Aluno 17 Red 0.0 7.0 6.0 1.0 1.0 100.0 92.0
Green 2.0 6.0 6.0 0.0 0.0 100.0 100.0
Refactor 0.0 6.0 6.0 0.0 0.0 100.0 100.0
6 Aluno 11 Red 23.0 12.0 11.0 1.0 0.0 100.0 83.6
Green 24.0 12.0 11.0 1.0 0.0 100.0 77.5
Refactor 13.0 12.0 12.0 0.0 0.0 100.0 100.0
Aluno 14 Red  -  -  -  -  -  -  -
Green 0.0 7.0 7.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -
Aluno 15 Red 6.0 13.0 12.0 1.0 1.0 97.4 97.4
Green 3.0 13.0 13.0 0.0 0.0 97.4 99.8
Refactor 6.0 13.0 13.0 0.0 0.0 100.0 100.0
Aluno 17 Red  -  -  -  -  -  -  -
Green 11.0 7.0 7.0 0.0 0.0 100.0 100.0
Refactor  -  -  -  -  -  -  -