Gerador de testes automatizados utilizando programação por restrições.
Esta é a solução para um dos projetos da disciplina SIN5022 discipline.
Este projeto faz geração de testes automatizados utilizando de um código-fonte Java.
O código-fonte é analisado, parseado e então o programa cria um Gráfico de Fluxo de Controle (GFC) para cada método. Para cada GFC o gerador de caminhos lista todos os caminhos possíveis. Cara caminho possui um conjunto de expressões (ex. expressões aritiméticas ou lógicas). Estas expressões são convertidas em restrições e resolvidas pelo programa. Após as restrições serem resolvidas os parâmetros de entrada e retornos de cada GFC são estimados e utilizados geração de testes.
- Java (JDK11+)
- Maven
Faça o download do projeto e execute os comandos abaixo.
mvn clean install
mvn package
Este processo irá gerar um arquivo jar
com a aplicação.
O comando a seguir cria um teste para o arquivo informado.
java -jar target/java-test-generator-0.1.0-SNAPSHOT.jar <caminho do arquivo java>
O nome do arquivo gerado por padrão é o nome da classe, acrescido do sufixo "Test.java".
Você pode alterar o nome do arquivo gerado informando um segundo argumento na execução, como demonstrado no comando abaixo.
java -jar target/java-test-generator-0.1.0-SNAPSHOT.jar src/test/resources/If4Paths.java OutputFile.java
Neste vídeo são apresentados algumas entradas, resultados e como instalar e executar o programa. (Abre em uma nova aba)
Este projeto não avançou muito na criação de GFC para todas as instruções Java válidas.
Atualmente a aplicação permite o uso de declarações if
limitadas com:
- uma única expressão binária;
- sem block de
else
; - com operadores inteiros.
O programa também permite o uso de declarações de retorno com literais inteiros ou expressões aritméticas.
- uso de expressões binárias com outras expressões binárias dentro
- uso de expressões else
- uso de laços (for, while)
- implementar exceções melhores
- melhorar o uso geral de estruturas de dados
- implementar testes unitários mais assertivos
- utilizar melhor o padrão visitor nos nós da árvore sintática abstrata
- uso de tipos genéricos nos vértices e arestas da GFC
- javaparser - Utilizada para fazer parse da árvore sintática abstrata e para gera código de teste
- choco-solver - Utilizada para resolver restrições
- jgrapht - Utilizada para gerar caminhos válidos para a GFC
- JUnit 5 - Testes