{'fraction_non_alphanumeric': 0.0195, 'fraction_numerical': 0.004, 'mean_word_length': 4.833819241982507, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Evaluating Fitness Functions for Automated Code Transformations

Software engineering is a very broad field, where numerous disciplines focus on software maintenance and evolution. They are important due to the problem of today’s need for constant changes in software. In the early days of computer science and technology, the need for change was not so frequent, with mostly major releases and significant improvements, but now it seems like the need for changing never stops, and the deadlines are a matter of days and weeks, rather than months and years. Software quality is the key element a piece of software should have. Nowadays, software is present everywhere, new software is also being produced and it needs to be constantly maintained in order to preserve its quality. Maintenance can emerge in perfective, adaptive and corrective form, based on what kind of changes it focuses on. However, despite the effort to develop software that conforms to the requirements, some errors show when the software goes into operation. It is possible that some errors were not discovered in time and software has to evolve in the sense of functionalities, environment and scale, in order to have a long life. These changes have to be performed quickly and because of tight schedules, the cost can be quite high. Sometimes, when software systems need significant changes, or have been changed too many times, they need to be reengineered. Software evolution is often defined as repeated reengineering, or as a single cycle of a possibly infinite process of creating a better system. The process of evolution in a dynamic system is never completely finished and every step of it has to be done in as fast as possible. When a need for reengineering emerges, the main thing is to fully understand the software and its functionalities, so that the modifications do not cause any new defects, but rather cause improvement and that they are done in a logical manner [Yang and Ward 2003; Tripathy and Naik 2014].