Abstract
Input-sensitive profiling is an automated analysis technique that calculates the resource usages (eg, the memory and the CPU usage) by methods during program execution for different combinations of input values. In addition to enabling developers to estimate the time and space complexities of a program, input-sensitive profiling also allows developers to automatically detect bottlenecks during performance testing, where the performance of a program suddenly worsens for a particular combination of input parameter values. One of the important advantages of this profiling technique is to identify what methods consume more resources (eg, CPU and memory usages) for specific combinations of input values and pinpoint why these methods are responsible for intensive execution time. Hence, developers can understand and optimize performance problems in a program, and they can predict how likely that a program might not scale with increasing the size of the input (eg, adding more users or a larger set of values for a given input parameter). Unfortunately, it is very difficult to identify specific input values from a large number of combinations that lead to performance degradation of programs. The aim of this survey is to explore the input-sensitive profiling problem and discuss its challenges. Some recent contributions of input-sensitive profiling algorithms that were developed to detect performance bottlenecks of a program are investigated and summarized.