  Genetic Algorithms are a popular set of optimization algorithms often used to
aid software testing. However, no work has been done to apply systematic
software testing techniques to genetic algorithms because of the stochasticity
and the lack of known outputs for genetic algorithms. Statistical metamorphic
testing is a useful technique for testing programs when the output is unknown
or when the program has random elements. In this paper, we identify 17
metamorphic relations for testing a genetic algorithm and show, through
mutation testing, that these relations are more effective at finding defects
than traditional unit tests based on known outputs. We examined the failure
rates of the system-level relations when initialized with various fitness
functions. We found three relations failed excessively and we then modified
these relations so that they failed less often. We also identified some
metamorphic relations for genetic algorithms that are generalizable across
different types of evolutionary algorithms and showed that our relations had
similar mutation scores between two implementations. This is the first time
statistical metamorphic testing has been applied for testing genetic
algorithms.
