CPSC 410 201 2023W2 Advanced Software Engineering

CPSC 410: Advanced Software Engineering

Specification, design, construction and validation of multi-version software systems.

3 credit course. Prerequisites: 
Either (a) CPSC 310 or (b) one of EECE 310, CPEN 321 and one of EECE 315, CPEN 331.

Contact Information and Helpful Links
Instructor Information
Student Resources Course Time Clock

Name: Caroline Lemieux (she/her/hers)
Alex Summers (he/him/his)

Email: cpsc410-instructors@cs.ubc.ca

Office Hours: Please see Piazza for details

Lecture Recordings: available from this link

UBC Guide to Canvas

Canvas Student Guide

Student IT Helpdesk

UBC Student Resources

Course Schedule

Pacific Daylight Time
(Vancouver, Canada)


Welcome to 410! We are Caroline Lemieux and Alex Summers, and we've prepared this CPSC 410 course for live, in-person teaching this semester.

Caroline joined UBC as an Assistant Professor in July 2022 (after a PhD at UC Berkeley and Postdoc at Microsoft Research, NYC). Her research interests are in building developer tools that help improve the correctness, performance, and security of software. She is particularly interested in methods that scale to large code bases, including automated testing techniques such as fuzz testing. 

Alex joined UBC as an Associate Professor in March 2020 (having worked previously at Imperial College London and ETH Zurich). His general research interests are in approaches for guaranteeing software correctness in a broad sense, and particularly on the challenges of bug-free modular development in concurrent, imperative programming settings.

This course is primarily concerned with imperative object-oriented programming (Java-style), but its Learning Objectives are not at all specific to Java, and many of the high-level topics apply analogously also to other programming paradigms.

We're looking forward to exploring the course together!

Course Overview

This course builds on your existing software engineering knowledge and experience with a hands-on approach to collaborative software engineering. The course is project-heavy and requires you to plan, coordinate and work with a team of your colleagues. You will design, build and evaluate two moderate-sized team projects throughout the course of the term, and we will use these as vehicles for exploring what it takes to work with a team break down a software project, and coordinate with other team members in 

The topics of the projects will also provide a grounding in programming language design and implementation, and tools and techniques to aid programmers in understanding and analysing their code. In particular, we will explore two main focus areas (one for each project): 

  1. Domain Specific Languages (what they are for, how to design and build them to be useful to your users)
  2. Program Analysis (extracting, analysing and presenting rich information to programmers about their code's potential behaviours)

Interwoven with these focus areas, we will discuss empirical evaluation methods appropriate to software engineering projects in general, as well as relevant object-oriented programming techniques for implementing languages and program analyses. You will exercise good practices in development and teamwork via the team projects throughout the term, while regular exercises will cover both specific techniques and encourage you to problem-solve, exploring and evaluating alternative designs and implementation choices.

Course-Level Learning Objectives 

Upon successful completion of this course, students will be able to:

  1. Manage and evaluate a development strategy and timeline for a project built in parallel by a team of programmers.
  2. Decompose a software design into modular components and development tasks, enabling separate testing, smooth adaptation to changes and easier final integration.
  3. Collaborate as a responsible and effective team and course member, taking shared responsibility for their team successfully delivering on their project goals, and personal responsibility for keeping to deadlines in a timely fashion.
  4. Design and implement Domain Specific Languages tailored to a given task and group of users, incorporating early feedback and design revisions into your process.
  5. Differentiate static and dynamic techniques for program analysis, contrasting their strengths and weaknesses.
  6. Create simple program analyses to help programmers understand their own programming challenges and software engineering processes.
  7. Evaluate software engineering research questions and projects via rigorous empirical studies.

How it will go

This will be a practical course: during the term you will complete two group projects (one on each of the focus areas above), as well as roughly-bi-weekly individual exercises which will form a continuous assessment of your progress throughout the term. Plan to spend at least 6 hours a week on average on this course in addition to the contact time, and be sure to plan your individual and team activities carefully from the beginning to avoid falling behind. Note that this is an average: some weeks may be more or less intensive and your mileage may vary; you will definitely benefit from spreading the work for each deadline out, especially for the projects. Make sure to agree clearly with your project groups what your expectations are of each other, communicate regularly and revise your plans as needed; a key purpose of the projects is learning to work together as an effective development team, and you and your team members are collectively responsible for ensuring your team’s success and the wellbeing of your other team members.

You can see a provisional plan for the topics we will cover in the Course Schedule (subject to change during the term).

Waitlist Policy/Drops: Please note firstly that we do not manage the waitlists or which students get a place in the course; this is handled by the department in the usual way. If you are keen to take this course you are more than welcome from our perspective, and we’re delighted to have you if you get a place. However, if you’re considering dropping the course (whether you are registered or on the waitlist), please try to do so in the first week (if at all possible before the project registration deadline), to allow other students the chance to take the course – there are many students still on the waitlist. Because of the importance of the projects, course registrations will be finalised by the end of Friday 12th January. If you do not have a place on the course by this time, unfortunately it will not be possible to join us this term. Dropping the course during a project would naturally also cause difficulties for your project teammates - please aim to avoid this!

Project Registration (very important!): to participate in each project, you must (by the appropriate deadline) explicitly register your intention to do so by email, including names, CWLs, preferred email addresses and a team preference (see list below).

For Project 1, the deadline to register is Friday 12th January by 5pm. You should email Yanze ( yanzeli@cs.ubc.ca ) and your email should also specify one choice from these three options:

  1. Emailing individually asking to be placed in a project group by us.
  2. Registering a team of 5 students (these cannot be students on the waitlist). In this case, you only need to send a single email, but should cc all teammates.
  3. Registering a team of 4 students (these cannot be students on the waitlist). In this case, you only need to send a single email, but should cc all teammates. Depending on course registration numbers, your team may be assigned a 5th member.

We must receive an appropriate email by the deadlines for each project; if not, you may not be able to participate in the respective project (scoring a 0 for that course component).

Team Collaboration: Note that in group projects, many things can and often do not go according to plan, and it's very important to identify and address any problems in your team as as early as possible. In order to do this, it is important tot check-in with your team regularly, and plan to make regular progress throughout the project time so that you can identify any issues early. You may often be able to resolve issues by discussions within your team, but we or the TAs are happy to advise and intervene if you need help with a difficult situation. If you can make the instruction team aware of concerns you have about your group while the project is ongoing, we will be able to suggest ways of resolving issues and steering the team back on course. There will be regular, compulsory short surveys for you to check in about how you think your team is doing. In case any team members' contributions are falling behind, do reach out early and let us know. Of course, this requires that you plan the projects to make early progress, too!

If you do have a problem that requires our intervention, that's OK: we will meet with the team and make expectations clear for the remainder of the project; usually this is sufficient to get teams back on track. In exceptional cases, if there are further problems during the project after we have intervened, we may consider adjusting the grades of members who are not cooperating with their team. However, by default (and in particular, if we don't hear about problems until close to the deadline) all team members will receive the same grade for each project. Make sure to work and check-in in a way that guarantees you will be able to identify problems substantially before the end of the project.

Course Support and Participation

This course has been designed to be taught in person, and the content and in-class exercises in the lectures, the individual exercises and the group projects are meant to complement one another to help you succeed; you are expected to attend the lectures in person for this course.

We will offer you support during the course in a variety of ways: you will be assigned a main TA as a standard point of contact throughout the course, and both the instructors (Caroline and Alex) and the TAs will offer weekly office hours.

Discussions about the course material will take place via a Piazza group (linked on the left); TA office hours will also be kept up-to-date there. It's possible to post on Piazza anonymously (other students cannot see your identity, although the instruction team still can) but you are encouraged to interact publicly where possible, to get the maximum benefit for the whole class. If you have more of a personal concern, you are very welcome to email Caroline/Alex and/or your TA about it. You're strongly encouraged to ask questions during the lectures, too - this always helps and also makes the lectures more enjoyable!

BC provides resources to support student learning and to maintain healthy lifestyles but recognizes that sometimes crises arise and so there are additional resources to access including those for survivors of sexual violence. UBC values respect for the person and ideas of all members of the academic community. Harassment and discrimination are not tolerated nor is suppression of academic freedom. UBC provides appropriate accommodation for students with disabilities and for religious, spiritual and cultural observances. UBC values academic honesty and students are expected to acknowledge the ideas generated by others and to uphold the highest academic standards in all of their actions. Details of the policies and how to access support are available here.

Covid Safety in the Classroom 

Masks: Masks are no-longer required at UBC, but you are of course welcome to wear them if you want to reduce the risk of infections in either direction. Please do not eat in class. If you need to drink water/coffee/tea/etc, that's totally fine.

Vaccination: If you have not yet had a chance to get vaccinated against Covid-19, vaccines are available to you, free, and on campus (see, for example, http://www.vch.ca/covid-19/covid-19-vaccine). If you can and have not already done so, we strongly encourage you to get vaccinated/boosted according to the recommendations of our health professionals. This is for the protection and comfort of everyone: the higher the rate of vaccination in our community overall, the lower the chance of spreading this virus.  You are an important part of the UBC community. Please arrange to get vaccinated if you are able to and have not already done so.

Your personal health

If you’re sick, it’s strongly advised that you stay home – no matter what you think you may be sick with (e.g. cold, flu, other).

  • If in doubt, a self-health assessment is strongly recommended before attending campus using this tool: https://bc.thrive.health/covid19/en
  • Please do not come to class if you have COVID symptoms, have recently tested positive for COVID, etc. Your precautions will help reduce risk and keep everyone safer. In case you have any concerns, please feel free to reach out to Caroline/Alex at any time; we want to find comfortable and safe ways to work together so that you can prioritize your health and those of our community and still be able to participate and succeed.

If you do miss class because of illness: 

  • Make a connection early in the term to another student or a group of students in the class. You can help each other by sharing notes (but be careful not to share work on the exercise sheets). If you don’t yet know anyone in the class, post on the discussion forum to connect with other students; shortly into the course you will naturally need to be in regular contact with your project team, so this will be a good potential support.
  • Consult the class resources on Canvas and Piazza. We will post links to all of the slides, assessments and any other materials regularly; there will also be recordings available. You are encouraged to post questions on Piazza (and to answer others' questions or make suggestions there).
  • Come to virtual office hours.
  • If you are concerned that you will need to miss a particular key activity due to illness, contact Caroline/Alex or one of the TAs to discuss your situation as soon as possible.

If you are sick on a final exam day, you should consider not attending the exam. In this case, you would need to apply for deferred standing (an academic concession) through Science Advising no later than 48 hours after the missed final exam. Students who are granted deferred standing write the final exam/assignment at a later date. Learn more and find the application online: https://science.ubc.ca/students/advising/concession    

For additional information about academic concessions, see the UBC policy here: http://www.calendar.ubc.ca/vancouver/index.cfm?tree=3,329,0,0 

Instructor health

If one of us (the instructors) are sick: We are fully vaccinated and will do our best to stay well, but if we are ill, develop COVID symptoms, or test positive for COVID, then for the safety of our community we will not come to class. If that happens, here’s what you can expect:

  • Usually, since we are two instructors, the other will be able to cover the lecture with no effect.
  • If this is not possible, but we are well enough to teach, we may have a synchronous online session or two. If this happens, you will receive an email as well as an announcement on Piazza telling you how to join the class via Zoom. You can anticipate that this may possibly have to be a last minute email. Our classroom will still be available for you to sit in and attend an online session, in this (very unlikely) situation. 

Learning Activities and Expectations

Lectures are the only fixed contact hours: on Tuesdays and Thursdays during Winter Term 2, from 5pm - 6:30pm (note that there is no teaching on the week starting 19th February due to mid-term break). Lectures will be in person, and will include a mixture of Caroline/Alex presenting new content and the course participants trying out exercises (often in small groups). Unless you are isolating due to COVID you are expected to attend and participate in the lectures and these live exercises, which have been designed to help you succeed in the other course components. You are also very welcome and strongly encouraged to ask questions at any time. If you do have to miss a lecture then please use the slides, Piazza group, discussions with your course colleagues and office hours to catch up. If in doubt, please reach out and ask for help.

The course will be assessed in three complementary ways:

  • There will be six roughly-bi-weekly individual exercise sheets. The first will contain only ungraded exercises. The remaining five will contain a mixture of some graded questions and some ungraded. You are allowed and encouraged to submit all exercises (graded or ungraded); you will receive high-level feedback for the ungraded exercises too, which should help you chart your own progress and prepare for the final. Of the graded exercises, your top four marks (out of five) will count towards this component of your grade. Each is worth 5% (so 20% for exercises in total). For fairness to yourself and the class, be sure to work on all exercises individually, and not to share your approach or solutions. While we of course hope this will not happen, cases of collaboration on the exercises will be treated as academic misconduct, scoring 0s and requiring referral to the Dean of Science.
  • Two group projects (these will take a large slice of the time you spend on 410). In both cases you'll work in groups of 4-5 and build something to show to the class. Each project is worth 20% (40% in total).
  • A final exam, worth the remaining 40% of your grade. I'll provide some examples of the kind of questions you can expect; if there is interest we will also arrange an exam Q&A session near the end of term.

You'll find the schedule for exercises and projects on Canvas (under Assignments); you'll get feedback on the exercises throughout the course. The project descriptions will include descriptions of what we will be looking for when we grade them. Late submissions of exercises and projects will not be accepted; all deadlines in the course are firm. Apart from being for fairness to all of the class participants, this will allow us to freely discuss and present solutions once the deadlines have passed.

As a general rule, you're expected to make sure to keep up with these activities and the lecture, participate reliably in your groups, and take advantage of the course support available. If you do feel you might be getting behind, you should catch up using the various forms of course support (e.g. Piazza, office hours, recordings). The combination of lecture, exercise and project work (intended to complement one another) means we all need to stick to the timetable, since we'll quickly move on to building on what we've learned and worked on so far. All of that being said, we're aware that some course participants may be in unusual situations which are subject to change right now - if a situation arises and you are worried then reach out as soon as possible (preferably in advance of any relevant deadline) and let Caroline/Alex know.

Collaboration and Assessment

Be extremely careful to work individually on the exercises, and within your groups for the projects. If you draw on external sources or discussions, you must cite these (where appropriate, that may even impress the person grading!). As usual, these sources must not be the work of other course participants. For your group projects, you are encouraged by default to write all code yourselves; if you choose to make use of any parts of the code we develop in class then you must clearly explain this when you submit. Using someone else's uncredited work in your assessments is serious (and unfair on your colleagues), and will result in no marks for that assessment and a referral for academic misconduct according to UBC's policies; this has happened regularly in previous iterations of the course. In particular, be sure not to discuss or share solutions to the assessed exercises until (at least) the day after their submission deadlines; you are better off (and will get more useful feedback) submitting your own best efforts at the exercise sheets, even if they are incomplete. Hopefully none of the above paragraph will need mentioning ever again!

Some links to UBC policies and other sources of support can be found here.

Generative AI Policies: You will be programming a fair bit in this course, especially for the projects, and might wonder whether/when usage of generative AI tools such as ChatGPT, Copilot etc. is acceptable. Using such tools for assessments is discouraged in this course, but is not forbidden if (and only if) you explicitly mark generated code with comments as follows:

/** Start Code Generated by [TOOLNAME] on [DATE] */

/** End Code Generated by [TOOLNAME] on [DATE] */

The course is designed to be an opportunity to practice developing reliable code in a collaborative environment, and having a clear understanding of the code you produce is an essential part of that role; this is why we encourage you to write all code yourself. The instructors and TAs will not help you to debug/understand code which was generated by a tool, and you must make sure that your project teammates don't end up in this situation: the code you produce as a software engineer is your own responsibility!

Required Materials

No textbooks etc., but to participate in the lecture exercises you should have a computer ready for Java development (from Lecture 2 onwards). You may want to set up an IDE/editor that you're comfortable with in advance. For example, Caroline and Alex will use Intelli-J Community Edition for the Java examples shown in the lectures.


Well done for making it to the end of a long syllabus. This term will be a busy one, but with good communication, considerate and careful practice and teamwork we will make it successful (and hopefully fun) together. Do please reach out for support whenever you are worried and we will help wherever we can!

Acknowledgement: UBC’s Point Grey Campus is located on the traditional, ancestral, and unceded territory of the xwməθkwəy̓əm (Musqueam) people. The land it is situated on has always been a place of learning for the Musqueam people, who for millennia have passed on in their culture, history, and traditions from one generation to the next on this site.

CC Attribution This course content is offered under a CC Attribution license. Content in this course can be considered under this license unless otherwise noted.