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 three directions:
- Code recommenders: 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 merging: I work on providing software integration support for consolidating changes from multiple versions of the same reused system as they evolve over time. This includes studying merge conflicts and designing new conflict-resolution strategies.
- Software Product Lines (SPLs): I develop variability analysis strategies to help developers reason about and maintain their SPLs, or highly configurable systems (e.g., find configuration-related bugs).
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. You can also find more information in my CV.