Code Analysis, Testing and Learning

What are code analysis, testing and learning? While they seem to be jargons to many, the related technologies are making impacts on how software changes the world. In highly competitive software markets, companies need to ship reliable software products that their clients can trust. As such, software quality is one of their top concerns.

What if you are told that a bot will learn your program and write tests for you? What if you are further told that the bot will learn from test execution results and locate where the faults in your program reside? What if the bot can even fix the faults for you when you are crossing your fingers? CASTLE is research team led by Prof Shing-Chi Cheung to study the state-of-the-arts technologies on code analysis, testing and learning. Besides pursuing the advancement in automated test generation, fault localization and program repair, CASTLE is solving the challenging problem of automated program synthesis. Techniques developed are supported by tools that can be applied by users on their software applications. The following are the overviews of two CASTLE research projects that automatically locate program faults for enterprise and mobile applications by blending state-of-the-arts software engineering, big data and artificial intelligence technologies.

Locating Crash-inducing Changes

Software crashes are severe manifestation of software bugs that result in poor user experiences. To facilitate the diagnosis of crashing bugs, crash reporting systems (e.g., Microsoft Windows Error Reporting) have been deployed to collect crash reports automatically. Nevertheless, developers still require much manual effort in debugging crashes. Although there are many crash analysis techniques proposed to help diagnose crashes, we still have very limited understanding on existing crash diagnosis practice. CASTLE found that crash-inducing changes are one critical piece of debugging information and thereby proposed efficient techniques with support tools to automatically locate crash-inducing changes. Upon crash diagnosis, developers can integrate these tools into existing crash reporting systems, such as Microsoft Crash Reporting. The tools can be incorporated into products, deploying a crash reporting system.

Taming Android Fragmentation

Android ecosystem is heavily fragmented. The numerous combinations of different device models and operating system versions make it difficult for Android app developers to assure the compatibility of their software across these models and system versions. CASTLE developed analysis techniques and support tools to automatically mine and detect Android compatibility issues. The tools report actionable debugging information when it detects potential issues. Android app developers can deploy the tools to their code and detect potential incompatibility issues that may arise across device models and system versions. For each reported issue, app developers may validate the issue by running their app on the concerned device models or system versions. Android device vendors may also follow the methodology to address compatibility problems in their products arising from the fragmentation in their OS releases, library versions and hardware configurations.