Creative Commons Attribution 3.0 Unported license
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.
@InProceedings{li_et_al:LIPIcs.ECOOP.2016.15,
author = {Li, Yue and Tan, Tian and Zhang, Yifei and Xue, Jingling},
title = {{Program Tailoring: Slicing by Sequential Criteria}},
booktitle = {30th European Conference on Object-Oriented Programming (ECOOP 2016)},
pages = {15:1--15:27},
series = {Leibniz International Proceedings in Informatics (LIPIcs)},
ISBN = {978-3-95977-014-9},
ISSN = {1868-8969},
year = {2016},
volume = {56},
editor = {Krishnamurthi, Shriram and Lerner, Benjamin S.},
publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
address = {Dagstuhl, Germany},
URL = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2016.15},
URN = {urn:nbn:de:0030-drops-61092},
doi = {10.4230/LIPIcs.ECOOP.2016.15},
annote = {Keywords: Program Slicing, Program Analysis, API Protocol Analysis}
}