I am an Assistant Professor in the Department of Computing Science at the University of Alberta, where I lead the Software Maintenance and Reuse (SMR) Lab. I also hold a Canada Research Chair in Software Reuse. My research focuses on software maintenance and reuse in two directions:
- Application Programming Interfaces (APIs): My goal is to improve software reuse by helping developers use existing software libraries more effectively. I conduct empirical studies to understand the problems developers have when using APIs and the kind of information that helps them make better decisions. I then design automated techniques to solve these problems, such as recommending relevant code snippets or detecting API misuses.
- Software Product Lines (SPLs): I develop techniques to help developers maintain their SPLs, or highly configurable systems (e.g., find configuration-related bugs). I also develop techniques to help developers migrate similar existing systems into an SPL.
Brief Bio: I obtained my BSc in Computer Science from The American University in Cairo in 2007. I then worked as a software developer for around 8 months at ITWorx before moving to Waterloo. I obtained both my Master's degree (2010) and PhD degree (2014) from the The University of Waterloo under the supervision of Ric Holt. I then worked as a post-doctoral researcher in Mira Mezini's group at TU Darmstadt for about 2 years before joining the University of Alberta in 2016.