{'fraction_non_alphanumeric': 0.017035775127768313, 'fraction_numerical': 0.0, 'mean_word_length': 5.550185873605948, '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}}
Locating Faults in AspectJ Programs

As Aspect-Oriented Programming (AOP) wins more and more popularity, there is increasing interest in using aspects to implement crosscutting concerns in object-oriented software. During software evolution, source code editing and testing are interleaved activities to assure code quality. When regression tests fail unexpectedly after a long session of editing, it may be difficult for programmers to find out the failure causes. Moreover, due to the extensive use of subtyping and dynamic dispatch in object-oriented programming language and the inherent semantic intricacies in aspectoriented features, the nontrivial combination of those likely nonlocal changes would also affect other parts of program accidentally and that may indicate potential faults in the updated version. In this paper, we propose a new fault locating technique for AspectJ programs. At the core of our approach is the source level atomic changerepresentation, which captures precisely the semantic differences between two program versions. If a test fails unexpectedly, a subset of affecting changes is identified and programmers are allowed to select (and apply) suspected atomic changes to the original program, constructing compliable intermediate versions. Then programmers can re-execute the failed test against these intermediate program versions to locate the exact failureinducing reasons by iteratively select, apply and narrow down the set of affecting changes. We implement our prototype Flota, a fault locating tool for AspectJ programs built on top Celadon . Our empirical study shows that Flota can help programmers effectively find a small set of failure-inducing changes and provide valuable debugging support for AspectJ programs.