“Using what you learn in class is more important than the grades you get on tests, mid-terms, and finals,” said Rice University alumnus Qi Xin (M.C.S. ’12), who is now a postdoc at Georgia Tech.
He arrived at Rice in August 2011 and started taking courses in Computer Science. “The main task for me was to just take courses,” he said. “But in the courses, the professors would talk about the most interesting things – problems they were working on, their research areas.”
“Then I met some of the CS Ph.D. students. As we became friends, they also talked about their lives as grad students, the kinds of problems they were working on. It piqued my curiosity and I wanted to try research, to solve problems I really cared about, to do something beyond just learning.”
Research is not required for students in the professional master’s program, but Computer Science professors are usually open to including both M.C.S. students and undergraduates in their teams. Professor Swarat Chaudhuri’s research appealed to Xin, so he approached the CS faculty member about working with him.
“I felt really fortunate to work with him for about a year,” said Xin. “I did not have much research experience before and he taught me many things about research. Swarat provided the right level of guidance for where I was at the time, and I appreciate the chance he gave me — to learn what it is like to dive into research. Working with him, being led into it through his style of mentoring, that experience made me decide to pursue a Ph.D.”
Xin completed his Ph.D. in Computer Science at Brown University in 2018. Brown was one of several offers he considered, and Xin chose Brown in part because he longed for a cooler climate –similar to that of his hometown in China– and he preferred a school with a small feel.
“The faculty/student ratio at Brown was high and the faculty here have more time for their students than in the larger universities,” said Xin. “Face time with professors is important to me, and it is equally important in the Computer Science departments at both Rice and Brown. My advisor at Brown did some interesting work, and I finally chose to work with him doing software engineering research.”
Xin believes his two Rice compiler courses helped strengthen his graduate school application. They also gave him new insight into how computer science courses could be taught. He said the professor was both knowledgeable and zealous about his subject, but it was Keith Cooper’s passion for presenting the material in ways that appealed to his students that most impressed Xin.
“I really liked both of Keith Cooper’s compilers courses, COMP 412 and 512. He wrote the textbook used in the courses, and his slides were beautifully and powerfully designed. I’d never had a professor who cared that much about how his course was perceived by the students. And the interaction was high.”
“Professor Cooper doesn’t stand in front of the classroom, he walks around to talk with us and answer questions. He gives the background on why the compiler was designed in a certain way rather than just showing us how it works. He said he enjoys teaching, and it shows. It’s wonderful.”
Helping others understand a program and its behaviors continues to inspire Xin’s best work. His current research focuses on supporting software developers by identifying features, or functionalities, of a program and presenting them in a meaningful way. Xin said developers need to have a good understanding of the program to perform software engineering tasks like refactoring, debugging, testing, and generating documentation.
“If you can identify individual features — that represent different functionalities of a program — you can more effectively test the functionalities, debug them, and write documentation about them. So we’ve introduced a technique that targets mobile apps, analyzes their execution, and identifies features as related user events exercised in the execution, to help developers better understand their apps.”
“When a user tries to log in to a mobile app, she clicks the username textbox, types her username, clicks the password textbox, inputs her information, then clicks the login button. Those are five separate user events. When you glue them together, you have the login feature. Our technique identifies those five related user events as a feature and shows them to the developer to provide better guidance.”
“Now that we’ve developed the basic technique, we’re extending it to make our tool more helpful by providing better visualization. Take that same login feature, we might have the login part in the execution highlighted with human-readable labels provided. If you want to look into the feature, you can see the five user events. If you want to know more, you can see more information like what methods are executed and their code.”
His current research has its roots in his Ph.D. thesis, where Xin explored ways to make automated program repair more effective. He said his study of debugging and program repair revealed the difficulty of debugging programs that include multiple features.
“Let’s say I’m using my phone app to do something and it isn’t working properly. I know there is a bug, but I don’t know where it is in the code and how to fix it. Running our tool on the program and isolating the features allows me to more easily identify which functionalities the execution exercises. If I know the login functionality has the problem, I could just look into that part highlighted by the tool for debugging.”
“Software engineering tasks like testing and debugging are usually challenging and time-consuming, but they are critical to building solid software, so I care about them. I know they are difficult, and if I can automate it or build a semi-automated tool to make it easier for engineers and users, then I will feel satisfied. Doing research is hard work, but if my work helps make programming easier for others, then that’s effort well spent.”