By Kel Hahn
In 2017, Yu received a CAREER Award from the National Science Foundation. The CAREER Award is one of the “most prestigious awards in support of the early career-development activities of those teacher-scholars who most effectively integrate research and education within the context of the mission of their organization,” according to NSF.
Recently, we asked Yu what creating better software looks like.
How does your research area connect with everyday life?
We use software every day. Nearly everything depends upon software, ranging from consumer electronics like smart mobile devices to avionics, smart city, cloud—all these things are running software. But software can have defects and security problems. When you use a mobile device, sometimes the app crashes or doesn’t work in the way you expect it to work. There are also security holes that allow hackers to attack. Our research is trying to design algorithms and tools to help developers discover and fix such problems as quickly as possible.
In November, Rockstar Games apologized to players who complained about technical problems within its Red Dead Redemption 2 release. Journalists described the game as “buggy.” What does that really mean?
Buggy means the product doesn’t behave as the users expect it to. It doesn’t meet the users’ requirements. If a user frequently encounters a bug when using an app or playing a game, pretty soon they will abandon that product and go to a different provider. That causes the company to lose money.
How are you trying to decrease the number of bugs in a piece of software?
We are creating techniques to automatically generate test cases that have some of the users’ real-world scenarios while the software is still in production. We can simulate those cases before they release the software. Traditionally, companies have used techniques that manually or randomly generate tests, which can be time-consuming and ineffective. But the tools we’re developing automatically do program analysis to build code models, from which test cases are generated and prioritized in terms of their likelihood of exposing bugs.
We also leverage machine learning and data mining techniques to learn from the bug’s history and predict what will happen on a new piece of code. This way, we can find potential bugs without the need for exercising the code, which can save developers’ time.
What happens when the product has been released and users complain about bugs?
When users report a bug, developers want to validate it, and if it is a true bug, they want to fix it as soon as possible. My research group is developing methods to help developers automatically validate the reported bug by reproducing it and localize the bug in the code so developers can fix it. We use natural language processing to analyze the textual description in users’ bug reports in order to extract the information that is necessary for reproducing a reported bug. The extracted information is then mapped to the user interfaces of the program, from where test cases are automatically generated to simulate the user inputs that have caused the bug to happen in production. Developers can use such test cases to reproduce and validate the bug. Then, we leverage the artificial intelligence algorithms to search the code space and narrow down the exact location of the bug. Developers do not have to manually examine the code to discover the problem.
How can developers effectively make sense of the variety of user experience to improve their products?
Developers don’t have time to read all of the reviews that users write. There might be a lot of them. But the tools we’re developing use natural language processing. If you look at mobile app reviews where users report bugs, people communicate using their natural language. Natural language processing programs analyze those reviews and summarize the categories of those problems generally. People say things differently, which is why we use natural language processing to analyze the language to make semantic comparisons and see the relation of different words and then summarize. That way, developers can better understand what they can improve in the next release.
What is the biggest benefit your research conveys to developers and their companies?
We are trying to improve the productivity of developers by reducing their manual effort as much as possible while speeding up the development process through automated testing and debugging. In the ideal case, developers would just push a button that generates test cases or pinpoints the presence of bugs in released products. They can quickly get the results back and make decisions. The developers can do what they do best and not be as consumed on the testing and debugging side. The company is more productive and saves money through more efficient software development. It’s a better process on all sides.