The Cheriton School of Computer Science is looking for exceptional students currently enrolled in a Computer Science program or related areas who have a keen interest in research and in pursuing graduate studies.

Students will participate in a four-month, full time, research-based co-op term to work directly with a faculty supervisor in a particular research area (e.g., Computer Security, AI, Human-Computer Interaction, Theoretical Computer Science, etc.).

  • Learn the research methodology related to a particular field of interest (see available projects below)
  • Review existing literature and develop new research questions.
  • Work with a supervisor and a team of graduate students to address the research questions, which may involve developing systems, creating algorithms, solving mathematical problems, designing experiments, etc.
  • Work on publications to disseminate research findings to relevant academic conferences.

Meet Dmitry

Dmitry is a URF award recipient and spent the Fall 2020 term under the supervision of Professor Joanne Atlee and Michael Godfrey on the Rex project. The key in Rex lies in minimizing the information extracted from source code, thereby allowing for the analysis of very large systems. The analyses themselves involve discovering paths within the “fact based” graph extracted by Rex. Dmitry’s role revolved around improving the accuracy of these analyses by incorporating control-flow information into the extracted facts. Dmitry shares the highlight of his experience working on the Rex project and how it compared to past co-op positions.


“I think my favourite part about the internship was the amount I learned. Reflecting back to my previous co-ops, I think this was probably the most independence and ownership I was ever given on any project. As a result, I had to very quickly and very thoroughly learn my problem’s domain such that I could make progress. I learned a lot about the compiler tools involved in static analysis, such as ASTs and CFGs, and I came to realize that I really enjoy static analysis work. Apart from interesting technical knowledge, I also learned a great deal about abstract problem solving, since that was a huge component of my daily routine. I learned that open-ended problem solving is something that I find very fulfilling, and the new skills that I gained from it will definitely help me in future work.” Dmitry Koberts

View past URF award winners

Application Deadline

Term Deadline
Fall 2022 May 17, 2022 @ 9AM
Winter 2023 TBD
Spring 2023 TBD


Students will receive a minimum of $12,000/term:

  • The Cheriton School of Computer Science will contribute $7,500/student; and
  • NSERC USRA + the faculty supervisor is to top up the difference


  • Students who are currently in 3rd or 4th year are eligible to apply; exceptional students from earlier terms will also be considered.
  • A cumulative average of at least 80% is required.
  • Preference is given to students enrolled in the Computer Science major or related programs, with a strong interest in research and/or graduate studies.

A student can only do one URF/Co-op per term, and must be on a co-op term or otherwise not taking courses. Note that International Students need a SIN# and work permit to work in Canada. During the term, it is expected that students will be working remotely from a location within Canada.

How to apply

If you are eligible, prepare a single PDF file (titled YourFirstName_YourLastName.pdf) to be submitted to with the subject line "[Term] URF Application", which must contain the following information:

  1. An up-to-date CV/Resume;
  2. A recent transcript;
  3. A one-page personal/research statement, stating
    1. what your research interests are,
    2. what your future plans are and why you want to pursue the URF,
    3. indicate which research projects (in order of preference) you are interested in working on. You can either name a faculty supervisor in the “Potential Supervisors” list below, or name a faculty member that you have an existing connection with.
  4. A letter of recommendation from a professor at your university (optional, but encouraged).

Please note that incomplete applications (i.e., missing any of the items above) will not be considered.

Fall 2022 Projects

Democratizing Open Datasets
Supervisor: Semih Salihoglu

There is a plethora of publicly accessible open datasets that are being published primarily by governments and public institutions. Major examples include websites such as, or These datasets contain a wealth of information about many aspects of our societies, from how government distributes research funds to how much meat is exported and imported to how many trees and species there are in different city centers. These datasets can serve as a lens to look into many domains of our societies yet they are of value only if they can be easily put together, integrated, and made accessible to the general public. Currently the task of finding, collecting, and analyzing such datasets is very tedious and laborious task. We have started a long-term project to build a data gathering system that allows users to search, download, preview, clean, and integrate such datasets, so that a non-technical journalist, researcher, or an engaged citizen can extract value out of them. There are many research opportunities both at the front end and back-end of our system that can be of interest to students interested at topics at the intersection of HCI, databases, information retrieval, and graph learning. 

Operating system kernels - Theory vs. Practice
Supervisor: Martin Karsten
Operating system kernels are fairly big and very complicated software entities that address complex resource management challenges and typically support a massive set of hardware devices. Meaningful research into the structure and performance of operating systems is hampered by a significant barrier to entry: A research operating system must support a reasonable set of modern hardware devices to obtain useful performance measurements beyond simplistic benchmark tests. The overall goal of this project is lowering that barrier to entry by building a simple kernel nucleus and combining it with 3rd-party open-source software to support a large variety of device drivers. The critical next step is hollowing out an existing open-source operating system kernel and making the hardware support components independent of the core generic resource management services. This will result in a novel open-source research platform that enables subsequent studies on structural and algorithmic innovations for operating system kernels.
Using genetic algorithms in machine learning security and privacy
Supervisor: Florian Kerschbaum
There are several security and privacy attacks on machine learning models, e.g., membership inference attacks that violate the privacy of individuals in the training set or adversarial examples that cause models to miss-classify inputs in critical scenarios. In order to understand these threats, it is important to both attack the models to understand the risks and develop defences to protect against such attacks. Genetic algorithms use the principles of evolution in nature to efficiently solve difficult optimization problems such as non-differentiable objective functions. In this project, we will utilize genetic algorithms to develop new state-of-the-art attacks or defences to better protect machine learning models.
Record, Replay, and Reduce for Automated GUI Testing of Android Apps
Supervisor: Chengnian Sun
Automated GUI testing of Android apps is an active research direction, which takes advantage of the computing power of computers to automatically find bugs in Android apps by synthesizing GUI events (e.g., clicks, swipes and scrolls) to interact with the apps under test.  However, not much research has been done to debug Android apps once a bug is found. To this end, this URF project aims to design and implement a debugging technique to help developers reproduce and analyze bugs found by automated Android app testing tools. The URF will survey related work, design and implement the technique on top of the state-of-the-art Android app testing tool, Ape ( Specifically, when Ape finds a bug in an Android app, the expected delivery will be able to produce a sequence of GUI events, which leads the app to trigger the bug; given the sequence of GUI events, the delivery should also be able to automatically replay the GUI events in the buggy app to trigger the bug; and lastly the delivery should be able to automatically trim the sequence of the GUI events by removing the GUI events that are irrelevant to the bug, so as to provide a minimized sequence for developers to debug the app.