Graduate Courses
SPL faculty teach a variety of graduate-level courses relevant to Software Engineering and Programming Languages. While these vary from year-to-year, the most common offerings over recent years have included:
- CPSC 507: Human Aspects of Software Engineering
Developers are intrinsic to software development; as systems scale in size and complexity, the challenges that developers must overcome rapidly increase. The theme of this Advanced Software Engineering is the 'Human Aspects of Software Engineering'. We will examine why creating software is a hard problem and how these problems have been addressed and evaluated both in research and practice. The increased importance of AI-based development tools cannot be ignored as they are increasingly impacting how we build software systems. The course will be seminar-based and will involve weekly reading and discussion. A large-scale course project will involve building a software development tool to address a problem you have faced writing software yourself; this will likely involve a relatively heavy amount of programming.
- CPSC 509: Programming Language Principles
- CPSC 511: Implementation of Programming Languages
- CPSC 539B: Dependent Types
This course covers a variety of research topics related to type theory, program verification, and compiler verification.
- CPSC 539L: Automated Testing, Bug Detection, and Program Analysis
While human-written tests are a prevailing method for assuring the quality of software in practice, they are still subject to human error, and allowing bugs to slip through the cracks that the human tester did not consider. This class explores topics in the field of automated testing, which aims, at a high-level, to reduce the developer burden in discovering bugs and writing test cases. Recent advances in this field leverage static and dynamic information from the program under test in order to effectively explore the space of behaviors of the program under test, enabling the quick discovery of potentially severe security bugs.
- CPSC 539S: Program Verifiers and Program Verification
Undergraduate Courses
The UBC Calendar contains descriptions of all of the department's undergraduate courses, the main courses taught by faculty in the SPL are:
- CPSC 310: Introduction to Software Engineering
- CPSC 311: Definition of Programming Languages
- CPSC 410: Advanced Software Engineering
- CPSC 411: Introduction to Compiler Construction