January 4, 2018 -> April 5, 2018 (2017T2
). These are the official resources for both sections.
The world runs on software and CPSC 310 is all about taking the skills and knowledge you learned in CPSC 210 (Software Construction) and extending your abilities to design and build non-trivial software systems. The course will involve a significant challenging project that we will start working on in the first lecture and will continue to evolve until the last week of class; do not underestimate the engineering effort this project will require.
The lecture time slot will be highly interactive and will involve working with your project partner (and sometimes teaming up with other groups as well). Only the first and last lecture slots of the course will be 'traditional' lectures. Tuesday lectures will be activity-driven to reenforce the materials from each week's readings and videos. Thursdays lectures will focus on tying the lecture material to the course project. One important implication of this is that all course material will be fully covered in the videos, readings, and project. You can base your Tuesday attendance on your own assessment of your mastery of the material for that week. For Thursdays, your can decide if you need to come based on how the project is progressing. Your attendance in lecture has no bearing on your participation grade, as long as you submit your weekly reflection (which is submitted online).
Each module will have reading materials and videos posted online; no slides will be posted. In-class material will be designed to support the readings, not replace them, and will not be available electronically. We have chosen to take a reading-based approach for this course instead of a slide-based approach to enable more class time to be available for hands-on activities while still providing a comprehensive reference of the background materials for the course.
Some of the topics we will cover in 310 this term include:
- Software specifications
- Agile development
- High and low-level design (this is the primary course focus)
- Automated testing
- Refactoring
- Information Security
- REST
- Async development
Our primary goal in this course is to help you learn how to design and build non-trivial modern software systems. This requires deliberate practice and experience. Being able to effectively build real systems depends upon flexibility in domain, abstraction, tools, languages, frameworks, and environments. To this end, the project has been tightly integrated with the course materials and will involve a significant development effort.
The course project embodies an experiential learning environment: we have constrained several aspects to mimic the kinds of reasonable constraints you would likely encounter on a real team. As with real systems, requirements will seem clear at a high level, but will provide broad latitude for how you implement them. Your choices of languages and frameworks have also been fixed. It is expected you will not be familiar with these; being able to quickly learn and adapt to different toolsets is a fundamental skill in modern development. Finally, our use of AutoTest can be considered a form of acceptance testing, which is an industry norm used to validate that software performs as expected.
CPSC 310 will be a challenging course that we have designed to integrate many of the ideas and concepts from your prior courses in order to help you to learn how to apply them to engineering modern software systems.
Videos and practice problems for all course materials will be available through the edX Software Engineering course. You do NOT need to pay for this, all course materials are available in the free (non-verified) version of the course; these materials will be released on January 8.
- Nick Bradley (GTA)
- Arthur de Sousa Marques (GTA)
- Rodrigo Araujo (GTA)
- Xinhong (Sam) Liu (GTA)
- Felix Grund (GTA)
- Lucas Zamprogno
- Raghav Thakur
- Ena Krdzalic
- Arash Haj Shirmohammadi
- Chi Wei Chen
- Ruoyu Wang
Piazza has been configured for this term. Please see the instructor in person in class if you want to discuss course materials; only TAs will monitor Piazza. Please be mindful of the UBC Academic Misconduct Policy with respect to posting project solutions on Piazza. It is extremely helpful if your Piazza name corresponds to your name in the SSC in the advent we need to help you with a problem with your project, repositories, or grades.
When posting to Piazza please be sure to include your team number so the TAs can find your group's code in order to help you more effectively. Also, when asking TAs about failing tests in particular, the TAs will often want to see your own test for similar cases (usually this will take several tests) so you can demonstrate to them why you think your code is correct.
For project / language help, there will be at least 12 hours of labs and 12 hours of TA office hours per week. TA office hours closer to the deadline are likely to be much busier than others (which may not be attended at all); to accommodate this we have scheduled most of the office hours prior to deadlines, but seeking help at other times and in your lab will likely be less busy.
- 201: Tuesday/Thursday 1230-1400 in FSC 1005 (NOTE: NOT Dempster!)
This list is a week-by-week guide only. Readings and videos will be updated throughout the term, but will remain fixed in the week before the midterm and final. NOTE: only the free edX account is required to view the videos.
Week | Tuesday Topic & Readings | Tuesday Videos | Thursday |
---|---|---|---|
Jan 2 | No Class Jan 2 |
|
|
Jan 9 | Testing | Effective testing in practice | |
Jan 16 | Process & Agile | ||
Jan 23 | |||
Jan 30 | Testability & Assertions | Applying testability | |
Feb 6 | High Level Design: | Sprint 2 introduction | |
Feb 13 | High Level Design: | API design | |
Feb 20 | Reading Week
|
Reading Week | Reading Week |
Feb 27 | Midterm in Class | None | API design (no slides) |
Mar 6 | Low Level Design:
|
Sprint 3 introduction | |
Mar 13 | Information Security | Applying design patterns | |
Mar 20 | Dr. Baniassad:
|
REST security | |
Mar 27 | Dr. Baniassad: Construction (no reading) | Automated UI testing | |
Apr 3 | Wrap-Up | ||
April 24 | Final Exam @ 1200 (ESB 1013) | N/A |
If you are on the waitlist, please attend any lab that works for you until you are able to get in the course. Lab sections must be finalized by the add/drop date. If you have course conflicts in your schedule that prevent you taking labs with available seats, please talk to the CS advisors; unfortunately the course staff is not able to control who is in the lab or lecture.
Lab | Time | TAs |
---|---|---|
L2A | Tue 13:30-15:30 | Annie, Arash, Lucas |
L2C | Wed 10:00-12:00 | Arash, Lucas, Raghav |
L2E | Wed 16:00-18:00 | Colin, Ena, Raghav |
L2B | Thu 10:30-12:30 | Annie, Colin, Ena |
L2F | Thu 17:00-19:00 | Annie, Colin, Ena |
L2D | Fri 15:00-17:00 | Arash, Lucas, Raghav |
You will not have to specify your team until the week of Jan 16. Both team members will be required to attend each lab. During the week each deliverable is due, lab attendance will be verified by the TAs during the Oral Question process; absence will result in a grade of 0 for the deliverable.
There will not be any office hours during the first week of class. Also, these hours are all subject to change, always check back here!
In addition to the 12 hours of labs per week, there are also ~12 hours of TA office hours per week. These have been clustered later in the week, but some are available on each day, to better meet anticipated demands.
To simplify scheduling, all lectures, office hours, and labs will be kept up to date on the following:
The project is an integral part of this course. The project will be difficult and time consuming. Projects will be completed in pairs (everyone must have a partner, and you must work with the same parter for the duration of the term). Your partner needs to be in the same lab section as you. The project will proceed in 5 2-3 week sprints; the requirements for each sprint is detailed in a deliverable document. You should expect the project to take ~6 hours / week / person (13 weeks * 2 people * 6 hours = 156 hours). It is extremely important you not leave project deliverables until the last moment. It is impossible to stress strongly enough how important this is; 36h over three weeks is no problem, but over a weekend is impossible. These time estimates are based on effective effort, if you are multitasking or just randomly trying to cobble something together without a plan or tests, the project may take much longer.
The project will rely heavily on self-learning. The course content is necessarily broad to provide coverage that will be applicable to most software development projects. It is important to remember that the project is a single software project that will utilize only a subset of the in-class material; the lectures will not serve as a tutorial for the project, it is expected that you will have to use your own creativity to reason about the project requirements, design a solution, and build and validate it yourself.
The intent of this project is to give you the opportunity to concretely apply the course concepts on a real system, but with fewer constraints than were possible in CPSC 210. At the same time, the system does have some constraints to simulate a real system specified by real clients. A strong test emphasis reenforces the importance (and difficulty) of building high-quality software in practice.
Engineers use automated test suites to validate that their software is working as expected. We will evaluate your project deliverables similarly using AutoTest. In addition to AutoTest, each team member will be independently asked a small number of questions in the lab to assess their understanding of the solution. While it is reasonable for team members to be more knowledgable about different parts of the system, it is expected that you will understand your entire solution at a high level and be able to provide specific in-depth insight to some meaningful components of your solution.
See the full project description for complete details about the project, the lab, project grading, and finding partners.
Each deliverable has a deadline; we have also added a one week grace period for and final submissions if needed. Full TA support will be given to any group prior to the deadline; during the grace period, priority will be given to struggling teams or groups working on the next deliverable. (D0 is exempt from this schedule and has only one final deadline)
During the grace week, TAs will only help groups with AutoTest scores below 80%. In the three days prior to the final submission date, only groups with less than 50% AutoTest scores will be helped. We encourage all groups to submit by the deadline, the final submission date is really only for those groups who need a little more time for polish. Regardless of your grade, your TAs will always help you during your own lab section; this restriction applies only to Piazza, Office Hours, and labs other than your own.
Also, be aware that waiting until the last minute will greatly degrade AutoTest latency; while you can expect to receive results in < 5 minutes for the majority of the term, this has historically been much slower on the last day:
Note: Even when AutoTest is heavily loaded your requests are queued and processed in turn; the timestamps we use for the deadline comes from the GitHub push event, not when AutoTest is able to process the request or when the commit was made locally.
- January 15 @ 1800: (Deliverable 0) This will be an individual deliverable and will be graded before the Add/Drop date. You should aim to exceed 70% on this deliverable if you want to succeed at the project.
- January 29 (Feb 5 @ 1800 final sub): Sprint 1 The first project deliverable will be extremely challenging; it is important that you start working on this early.
-
February 26 (Mar 5 @ 1800 final sub): Sprint 2 An extra week has been added to this deliverable to help teams who fell behind in the first sprint recover.
-
February 27: Midterm (sample midterms are available through the CSSS)
-
March 19 (Mar 26 @ 1800 final sub): Sprint 3
-
Mar 26: Project Quality Check. There is nothing to hand in for this deliverable.
To pass the course and receive credit you must achieve a passing grade on both the project and the final exam. Sample exams are available through the CSSS.
Component | Proportion |
---|---|
Deliverable 0 (d0) | 10 % |
Project Sprint 1 (d1) | 10 % |
Project Sprint 2 (d2) | 10 % |
Project Sprint 3 (d3) | 10 % |
Project Quality Check (d4) | 10 % |
Participation | 5 % |
Midterm Exam | 10 % |
Final Exam | 35 % |
Participation marks are given for submitting timely status reports for the lecture component of the class. With the exception of Week 0, these reports MUST be submitted before class and will require watching the videos for that week. These reports are intended to be short; we will use them to tailor the activities during the week based on your comments. Each of the 10 reports is worth 0.5% (totalling 5% of your final grade if you submit all 10). We will not tally this grade until the end of the term so it is your responsibility to make sure you have done these by their deadlines (the forms will be deactivated afterwards) and to keep track of your own participation grade.
The three deliverable reports (Week 5, 8, and 11) are not part of your participation report but are instead required for your deliverable submissions (see the grade rubric in the deliverable description for more detail of those).
Week | Due | Link |
---|---|---|
Week 0 (Entrance Survey) | Jan 19 @ 1000 | Expired |
Week 1 | Jan 8 @ 1000 | Expired |
Week 2 | Jan 15 @ 1000 | Expired |
Week 3 | Jan 22 @ 1000 | Expired |
Week 4 | Jan 29 @ 1000 | Expired |
Week 5 (d1 survey) MANDATORY | Feb 6 @ 1000 | Expired |
Week 6 | Feb 12 @ 1000 | Expired |
Week 7 (Reading week) NO SURVEY | N/A | N/A |
Week 8 | Feb 26 @ 1000 | Expired |
Week 9 (d2 survey) MANDATORY | Mar 6 @ 1000 | Expired |
Week 10 | Mar 12 @ 1000 | Expired |
Week 11 | Mar 19 @ 1000 | Expired |
Week 12 (d3 survey) MANDATORY | Mar 27 @ 1000 | Expired |
Week 13 (Exit Survey) | Apr 2 @ 1000 | Expired |
Students will be moved off the waitlist and into the course incrementally until the add/drop deadline. After this date, the course composition will be fixed. If you are on the waitlist, you are strongly recommended to work on D0 as the deadline for that deliverable is fixed and the d0 score will not be waived. If you are unable to exceed 70% on D0, be aware that you are likely to find the project component extremely challenging.
The project late policy is described here. Only d1 and d2 can be submitted late.
Lab attendance is mandatory so you have time to meet with your partner. If you must miss a lab, please notify your TA directly If you are sick and unable to write the midterm, please contact Reid as soon as possible -- provide medical documentation. Students who miss the midterm or final exam due to illness should consult the Faculty of Science Policy on missed exams. Students who do not have sufficient standing during the term may not qualify for academic concession if they miss the final. Students who require dispensation based on their unique circumstances should refer to the UBC policy on Academic Concessions. Phones, tablets, calculators, translators, and all other electronic devices are prohibited on desks during exams. They must be turned off and placed in your bag or on the ground. Students who need exam accommodation must make an official request to the Access and Diversity Office.
Each student is responsible for understanding and abiding by the University and Departmental policies on academic conduct. Specifically:
Everyone involved with CPSC 310 is responsible for understanding and abiding by UBC's Respectful Environment Statement.
The Statement of Principle of UBC's Respectful Environment Statement is "The best possible environment for working, learning and living is one in which respect, civility, diversity, opportunity and inclusion are valued. Everyone at the University of British Columbia is expected to conduct themselves in a manner that upholds these principles in all communications and interactions with fellow UBC community members and the public in all University-related settings."
The readings for this course are licensed using CC-by-SA. However, it is important to note that the deliverable descriptions, code implementing the deliverables, exams, and exam solutions are considered private materials. We go to considerable lengths to make the project an interesting and useful learning experience for this course. This is a great deal of work, and while future students may be tempted by your solutions, posting them does not do them any real favours. Please be considerate with these private materials and not pass them along to others, make your repos public, or post them to other sites online.