{'fraction_non_alphanumeric': 0.020833333333333332, 'fraction_numerical': 0.0, 'mean_word_length': 4.685714285714286, '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}}
Program Tailoring: Slicing by Sequential Criteria

Protocol and typestate analyses often report some sequences of 
statements ending at a program point P that needs to be 
scrutinized, since P may be erroneous or imprecisely 
analyzed. Program slicing focuses only on the behavior at P by 
computing a slice of the program affecting the values at P. In 
this paper, we propose to restrict our attention to the subset of 
that behavior at P affected by one or several statement 
sequences, called a sequential criterion (SC). By leveraging the 
ordering information in a SC, e.g., the temporal order in a few 
valid/invalid API method invocation sequences, we introduce a 
new technique, program tailoring, to compute a tailored program 
that comprises the statements in all possible execution paths 
passing through at least one sequence in SC in the given 
order. With a prototyping implementation, Tailor, we show why 
tailoring is practically useful by conducting two case studies on 
seven large real-world Java applications. For program 
debugging and understanding, Tailor can complement program 
slicing by removing SC-irrelevant statements. For program 
analysis, Tailor can enable a pointer analysis, which is 
unscalable to a program, to perform a more focused and therefore 
potentially scalable analysis to its specific parts containing 
hard language features such as reflection.