Android software is widely used in smartphones, tablets, and various other devices. In devices with limited resources, an application that consumes too many resources can lead to slowdowns, crashes, and negative user experience. Software defects related to leaking of resources are widespread and varied, but there does not exist a comprehensive strategy for testing and debugging of such leaks. Another common problem in Android software is when an application takes too long to respond to a user action, in which case it is perceived as sluggish and of low quality. There do not exist testing techniques or tools for exposing the underlying software defects leading to poor responsiveness.
Resource leaks and poor responsiveness can have severe effects on software reliability, performance, and marketplace success. This project develops LeakDroid, a novel approach and toolset for testing and debugging of such defects. Static code analyses are used to extract precise GUI models of Android applications; such analyses are essential for many algorithms for program understanding, optimization, testing, and debugging. Next, GUI tests are generated based on common leak patterns, through sequences of GUI events that should not lead to increases in resource usage. Poor responsiveness is exposed with tests that introduce delays at chosen code locations. Debugging techniques are then employed to find leaking data structures and poor responsiveness operations, as well as the corresponding defective code. These contributions advance the state of the art in the important area of analysis, testing, and debugging for Android software. When these advances and tools become part of software development practices, they would result in lower costs and increased quality applications for millions of users of mobile devices. The educational efforts of the project develop the skills of the next generation of creators of mobile software