“…The most common type of functional improvement is APR [13], [14], [25], in which a faulty program is modified until the failing test suite passes. In non-functional GI however, the goal is to improve the software's memory usage [8], [9], execution time [5]- [7], energy consumption [10]- [12], and other non-functional properties, whilst maintaining the functional properties of the software, measured with the use of the program's test suite, i.e., test cases should pass after the program transformation. Either way, the GI process is guided by a fitness function that measures the level of functional or non-functional improvement.…”