Devices like cell phones and appliances usually operate hassle-free, but when the software in them malfunctions it is often an added expense and headache. Similar software is now present in cars, airplanes, and spacecrafts, but if the software components in those vehicles are not reliable, the result can be devastating—the potential loss of millions of dollars or, more tragically, human life.
Suraj C. Kothari, professor of electrical and computer engineering, has spent the last 14 years conducting research to ensure software, both large and small, functions reliably. He created a solution called code analytics—a technology for developing powerful tools to analyze and transform large software.
His work in the area began in 1996, when a regional weather forecast model called MM5 needed to be converted for use on parallel computers. For years, the MM5 had operated on monolithic Japanese supercomputers, but a change in government regulations meant it would need to operate on American-made parallel computers instead.
To work on the new hardware, the 150,000 lines of code comprising the MM5 needed to be modified. At the time, the modification could only be done manually, and it took two programmers three years to complete. When Kothari and his team used code analytics to build an interactive compiler they called ParAgent, it took just two weeks to do the same modification.
Because of the complexity of modifying code for use on new hardware, the process cannot be fully automated, so ParAgent converts code using a combination of human intelligence and mechanization. Kothari likens the combination to how doctors use machines to help diagnose illness—humans are a necessary part of the process, but their knowledge is amplified by technology. ParAgent’s unique blend became a new and efficient way to modify software, while also cutting costs for companies.
Kothari was not satisfied with just modifying software—he wanted a more effective way to ensure its reliability. Testing for reliability can be successful on small, individual pieces of software, but the larger the software is, the more time-consuming and ineffective it becomes to do the overall testing. “The problem with testing is that there are so many different inputs, it is impossible to test all the ways the software could respond,” says Kothari.
To address this problem, he and his team created a way, not to test large software, but to analyze the internal structure of it. Large software can now be effectively analyzed in only minutes, an impossible feat before Kothari’s research. He founded EnSoft in 2002 and began specializing in commercial products and services focused on safety-critical control systems software, like those in cars and airplanes. Over 150 companies worldwide, including NASA, Rockwell Collins, Boeing, and Honeywell, now use EnSoft’s products.
Kothari and his team—PhD student Kang Gul and Jon Mathews from EnSoft—recently took up a new challenge to further show the power of code analytics. With investments from the Grow Iowa Value Fund, they are developing a programmable analyzer that will scrutinize, customize, and optimize operating systems ranging from smart devices to large servers for cloud computing. Kothari’s inspiration for the project stems from research by Sony engineer Juichi Takahashi.
Takahashi has shown that ubiquitous software, such as the Linux kernel—an open source software with one million lines of code—can be an immense challenge to test for reliability because a small mismatch in its synchronization primitives can lead to a system crash. As a part of his research on the Linus kernel, Takahashi has shown that the number of test cases increase exponentially. The current Linux kernel, which has 1,446 threads, will have 2.2 x 10991 test cases—a number larger than the estimated number of atoms in the universe.
The team has already devised a way to split the analysis of the Linux kernel into macro and micro phases, as well as perform a macro analysis using a prototype tool developed by EnSoft. Although the research is not yet complete, it has already produced a type of analysis of the kernel that has never been done before.
Kothari credits his experiences with students for most impacting his research.
“I saw students struggle when they had to modify large software for class and I thought there had to be a better way,” says Kothari. “I think code analytics will continue to change software engineering practices as well as what students learn in the classroom.”