Our dynamic analysis approach combines several techniques,
from automatic test case and event generation tools
to log file analysis. In Figure 2 we provide an overview.
Starting from an application’s source code, we first use JUnit
[15], a Java test case generation tool, to generate test
cases. Since most applications in the Android Market are
GUI-based, for each test case, we may need to add some
events (simulating user interaction) to make the application
move from one state to another. Therefore, we use Monkey
[16], an automatic event generation tool, to produce
events in both random and deterministic ways and feed these
events to the application. Once a test case is running, we
record detailed information about the application in the system
log file; after each test case run, we perform a log file
analysis to detect potential bugs.