Soft hang is an action that was expected to respond instantly but instead drives an application into a coma. While the application usually responds eventually, users cannot issue other requests while waiting. Such hang problems are widespread in productivity tools such as desktop applications; similar issues arise in server programs as well. Hang problems arise because the software contains blocking or time-consuming operations in graphical user interface (GUI) and other time-critical call paths that should not.
This paper proposes HANGWIZ to find hang bugs in source code, which are difficult to eliminate before release by testing, as they often depend on a user’s environment. HANGWIZ finds hang bugs by finding hang points: an invocation that is expected to complete quickly, such as a GUI action, but calls a blocking function. HANGWIZ collects hang patterns from runtime traces supplemented with expert knowledge, and feed these patterns into a static analysis framework that searches exhaustively for hang points that involve potential hang bugs.
Experiments with several large, real-world software packages (including a source control client, a graphics editor and a web server) show that there are several hang bugs in these applications, and that HANGWIZ is effective in finding them. The experiments also demonstrate that HANGWIZ is scalable and can analyze millions of lines of code. We further discuss related techniques and report our experience on fixing hang bugs.