Meet GaSubtle

Higher Order Mutation using Genetic Algorithm

It is easy to use, cross platform, fast, well documented, open source

What is GaSubtle?

GaSubtle is a tool based on Java that uses genetic algorithm to generate subtle higher order mutants.

Easy integration

You can easily integerate your application with GaSubtle's easy to use API.

Open source

GaSubtle is open source! Check the source code on GitHub.

Customizable

With layered architecture, you can easily customize GaSubtle to meet your needs.

Documented

With highly documented code, you can easily reuse GaSubtle's components.

How to use the API?

You can use the API to integrate GaSubtle with your application.

copy

GeneticAlgorithm
	.builder()
	.mutationPercentage(10) // the mutation percentage
	.maxOrder(5) // max order of the HOMs not to be exceeded
	.runRepeat(1) // how many time to run the algorithm [for benchmarking]
        // stopping conditions, at least one should be provided
	.requiredSubtleHoms(1000) // stopping condition: minimum subtle HOMs needed
	.maxHoms(1500) // stopping condition: maximum HOMs to generate
	.maxGeneration(300) // stopping condition: maximum generation to reach
	.timeout(1000) // stopping condition: timeout in seconds
	.originalFile("/some/.java/file") // path to the original file
	.testCasesPath("/some/.class/test/path") // path to test cases
	.resultPath("/some/path") // path to store the results in
	.mutantsPath("/some/path") // path to store the mutants in
	.evaluation(new EvaluationDefaultImpl())
	.crossover(new CrossoverDefaultImpl())
	.mutation(new MutationDefaultImpl())
	.selection(new TournamentSelection())
	.messageListener(new MessageListener() {

		@Override
		public void info(String value) {
                        System.out.println("Info message from the GA is: "+ value);
		}

		@Override
		public void error(String value) {
		    System.out.println("There was an error:" + value);
		}

		@Override
		public void debug(String value) {
		    System.out.println("Debugging: "+ value);
		}
	})
	.geneticAlgorithmListener((int generation, int populationSize, int liveMutants, int subtleMutants)
			-> LOG.info(String.format("Generation [%s] Population [%s] Live Mutants [%s] Subtle Mutants [%s]",
					generation, populationSize, liveMutants, subtleMutants)))
			.build()
	.run();

See GaSubtle in action

Whether you are a developer or a researcher, you can use Gasubtle.

Got a minute? Message us

If you have any suggestions do not hesitate to email us on abdullah.asendarz@gmail.com.

Original Idea

GaSubtle is originally a thesis project inspired by Dr. Fadi Al Widyan from the Hashemite University in Jordan