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. The overall goal of my research is to design tools and techniques that can help software developers perform their tasks more efficiently and effectively. My research heavily relies on the idea of mining software repositories, where I extract and analyze data from existing software repositories (e.g., version control systems, issue tracking systems, crowd-sourced question/answer websites) to infer insights that can help developers perform their tasks. The following are some examples of the kind of problems I currently work on. For more information about my research, please check SMR's projects and publications pages.
- Library Selection: As a developer trying to perform a specific task, which library should I use? With the abundance of library choices available, it is not always clear which library may best serve the developer’s application. At SMR, we design techniques that empower developers with the information they need to make a decision.
- API misuse detection: Due to factors such as poor documentation, incorrect usage (or misuses) of a library's Application Programming Interface (API) is a frequent problem which often leads to costly bugs and security vulnerabilities. At SMR, we design automated analyses that can warn developers when they incorrectly use an API.
- Software merging: Modern collaborative software development relies on using version-control systems such as git, where multiple versions of the system may simultaneously evolve. At one point, team members need to integrate their independent changes. This integration process is often time consuming and developers may need to deal with conflicting changes. At SMR, we conduct empirical studies to understand the integration challenges developers face and also design effective merge-conflict resolution strategies to save their time.
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.