CPEN 321: Software Engineering (Fall 2019)
1. Overview
The course explores engineering principles for building non-trivial software-intensive systems: requirement specification,
design, implementation, verification, and maintenance. The course uses a group project as the basic learning vehicle,
providing students with an environment for applying the learned principles in practice while coping with constraints
encountered when working on a real team: uncertain requirements, tight deadlines, etc. Students are evaluated based
on their understanding of the software engineering principles and their ability to apply these principles in practice.
Learning Objectives
By the end of the course, students will learn several fundamental skills in modern software development:
- software engineering principles: requirements specification, design, implementation, verification, and maintenance
of software;
- client-server application development paradigms, including mobile and cloud-based development;
- teamwork, inter- and intra-team communication;
- management of uncertainty in customer demands;
- ability to adapt quickly to new toolsets;
- efficient technical communication and presentation.
Course Format
- The class meets two times a week for lectures (2x1.5h) and once a week for a lab section (2h).
- Lectures will include in-class quizzes. Please bring your I-Clicker to every lecture.
- Lab sessions during the second and third weeks of the course will hold tutorials on Android and Node.JS
- The remaining lab sections are reserved for group meetings. Each group should meet with a TA for 30 minutes approximately every second week during their lab time. In exceptional cases, an alternative time can be arranged in coordination with your TA.
- The grading will be based on the group project, in-class quizzes, and 2 mid-term exams. There is no final exam.
Course Prerequisites
One of EECE 210, CPEN 221, CPSC 210, EECE 309.
2. Staff
Instructor |
Prof. Julia Rubin
Lectures:
Mon. 3-4:30pm, MCLD 202
Wed. 5-6:30pm, MCLD 202
Office hours:
Mon. 4:30-5:30pm, KAIS 4053
(or by appointment) |
TAs |
Harsha Kadiyala,
Sahar Badihi,
Michael Cao,
Khaled Ahmed,
Bang Chi Duong
Labs:
Mon. 10am-12pm, MCLD 358
Tue. 3-5pm, MCLD 358
Wed. 10am-12pm, MCLD 348
Office Hours:
Mon. 12-1pm, KAIS 4095 (or by appointment)
|
3. Communication and Important Links
- Most course communication (questions, discussions, announcements, etc.) will be done via Piazza. Please enroll
yourself!
Like most online services, Piazza is hosted outside Canada. Please come and talk to the instructor if you are uncomfortable using Piazza.
- Grades for the assignments will be posted throughout the term on Canvas. Students
are encouraged to check it frequently and let the staff know of any mistakes and inconsistencies.
- September 11, 11:59pm: group members and proposals are submitted here.
Please choose your team members carefully as they contribute to the success of your team; no changes will be permitted. If you do not have a team organized after the first lecture, please go to Piazza and find your partners there; on September 12, we will assign you to a team randomly.
- September 15, 12:00pm (M0): project presentations are uploaded on Canvas.
- September 20, 11:59pm: communities, project Git repositories, and preferred meeting times are submitted here.
Please choose your communities carefully; no changes will be permitted. If you cannot find a peer group by the deadline, we will assign you one at random.
All students in the same community must be able to meet during the same lab section. In exceptional cases, meetings outside the lab hours can be arranged in coordination with the TAs. Lab meetings for all groups must be held during the same week.
- M1-M5, 3:00pm on the day before the meetings: the report is uploaded on Canvas.
4. Project
A major part of the course is the group project. The project simulates real development settings, where development teams communicate with customers to implement software that satisfies the customers’ requirements. The intent of this project is to give you the opportunity to apply the course concepts to a real system.
- Scope: You are required to develop a client-server software system with the client (front-end) running on a mobile device and the back-end running on the cloud.
Several examples of reasonably-scoped projects can be found here.
- Front-end Technology: The client mobile app should be written natively for either Android (Java) or iOS (Swift), or using a cross-platform mobile frameworks, such as React Native or Xamarin. The app should run on at least one mobile device (i.e., not in a web browser); it does not have to run on any arbitrary mobile device.
- Back-end Technology: The back-end must be implemented in Node.js. If your backend uses a database, you can choose between MySQL and MongoDB.
You can host your back-end on a cloud infrastructure of your choice. Most vendors, such as Amazon, Microsoft, Google, and IBM, provide free student subscriptions. The course staff can also provide you with a paid subscription to Microsoft Azure. If interested, send a request to the instructor and list you Microsoft account names, if available, or emails that will become your account names.
- Code Management: All development artifacts must be stored in Git - a popular version control system. You will need a GitHub or Bitbucket account, but feel free to create a throw-away or anonymous account for this course, if that makes you more comfortable. Being familiar with Git is essential; please take a look at the 'getting started' part of the Atlassian Git Introduction to get you started. A shorter, less formal, guide is also available.
- Groups: Projects are performed in groups of 4 students (2 for front-end and 2 for back-end), which are further paired to form communities. A community consists of two groups, A and B, with 4 students in each group. Groups A and B act as customer and development teams to each other. That is, group A acts as a customer of group B, while group B acts as the customer for group A. The project grade is composed from a number of assignments, performed in both customer and developer roles.
Milestones and Reports
- Meeting times: Communities must meet for the M0-M6 milestones during the allocated lab times (30 mins per community). The meetings will be facilitated and evaluated by the TAs. A staff member will contact your community to set up a meeting during your lab section.
- Milestones:
- M0: Project proposal
- M1: Requirements
- M2: Design
- M3: MVP
- M4: Code Review
- M5: Testing
- M6: Final product
- Deliverables: Each group must submit a report for milestones M1-M5 by 3pm on the day before the meeting on Canvas. A report must contain two parts:
- A 1-page status update that must include (a) a high-level description of the progress since the last report, (b) the plans until the next report, (c) major decisions and changes in the scope of the project, and (d) the contributions of individual team members. The status updates help keep the staff and yourselves informed about your progress.
- The milestone deliverable itself (requirement doc, design doc, etc.). The exact requirements for each deliverable will be posted in Canvas.
Both parts of the report should be submitted in one pdf file. Only one report per team is to be submitted.
- Late deliverables will be subject to the following penalties:
- 1st deliverable late: 20% off for every 24 hours of delay.
- 2nd deliverable late: 40% off for every 24 hours of delay.
- 3rd deliverable late: 80% off for every 24 hours of delay.
- 4 or more deliverables late: no points given.
5. Course Schedule
Note that this is a tentative week-by-week guide and thus is subject to change.
|
Date |
Topic |
Project Milestones |
W1 |
Wed, Sept 4, 2019 |
Intro, what is SE |
|
W2 |
Mon, Sept 9, 2019 |
Software Lifecycle, Development Processes
Tutorials: Intro to Android |
|
|
Wed, Sept 11, 2019 |
UML |
September 11, 11:59pm: groups are formed. Each group proposes an idea that they would like to implement.
|
W3 |
Mon, Sept 16, 2019 |
Groups: project pitches
Tutorials: Intro to back-end development |
September 15, 12pm (M0): Project presentations due.
Proposed ideas are pitched in class and voted by other teams. |
|
Wed, Sept 18, 2019 |
Groups: project pitches |
September 20, 11:59pm: communities are formed.
|
W4 |
Mon, Sept 23, 2019 |
Requirements |
M0 (refined): Meet and greet your community and TA. Finalize the scope of the project |
|
Wed, Sept 25, 2019 |
Requirements |
|
W5 |
Mon, Sept 30, 2019 |
Architecture, Design |
M1: Requirements |
|
Wed, Oct 2, 2019 |
REST, Microservices, Recap |
|
W6 |
Mon, Oct 7, 2019 |
Mid-term 1 |
M2: Design |
|
Wed, Oct 9, 2019 |
Teamwork, Advanced Version Control |
|
W7 |
Mon, Oct 14, 2019 |
Thanksgiving Day |
|
|
Wed, Oct 16, 2019 |
Continuous Integration, DevOps |
|
W8 |
Mon, Oct 21, 2019 |
Code Reviews, Anti-patterns |
M3: MVP |
|
Wed, Oct 23, 2019 |
Verification and Validation, Analysis |
|
W9 |
Mon, Oct 28, 2019 |
Analysis |
|
|
Wed, Oct 30, 2019 |
Testing |
|
W10 |
Mon, Nov 4, 2019 |
Testing |
M4: Code Review |
|
Wed, Nov 6, 2019 |
Mid-term 2 |
|
W11 |
Mon, Nov 11, 2019 |
Remembrance Day |
|
|
Wed, Nov 13, 2019 |
Guest Lecture |
|
W12 |
Mon, Nov 18, 2019 |
Recap, Q/A, and preparation for final project presentation |
M5: Testing + Customer acceptance test (both customer and development teams). |
|
Wed, Nov 20, 2019 |
Guest Lecture - Technical Debt |
|
W13 |
Mon, Nov 25, 2019 |
Final project presentations in the lecture and lab times |
M6: Final product + presentation |
|
Wed, Nov 27, 2019 |
Top project presentations and awards |
|
6. Grading
Grading for this course is based on three components:
- Project - 55%
- M0 (Proposal): 5% (assessed based on clarity and depths of the idea)
- M1-M5: 7% each (35% in total)
- M6: 15% (5% for the presentation quality, 5% for the project quality, and 5% for the quality of the SE process followed)
- Quizzes - 40%
- In-class quizzes: 15%
- Mid-term 1: 10%
- Mid-term 2: 15%
- Participation - 5%
- Acting as a responsible customer by providing constructive feedback to the “development” team
- Noticing and addressing concerns of your “customer” team and TAs
- Project contribution
- Asking and answering questions in class and on Piazza
7. Absence
- Project milestone meetings with TAs starting W4 are mandatory. You can miss one weekly meeting. If your work is listed in the weekly report for that meeting, you will be graded with your group. No points will be credited starting from the 2nd absence.
- You can miss up to 1 in-class graded activity. Only your top n-1 grades, excluding the one with the lowest mark, will be considered for the final grade.
- If you miss more than 1 in-class graded activity, miss a mid-term, or have other special circumstances and would like to request a make-up for a missed grade,
you should submit a request for academic concession here
.
8. Acknowledgements
We gratefully acknowledge the inspiration we drew and part of the material that we adapted from the previous editions
of CPEN 321 and CPSC 310 (University of British Columbia), as well as from CSE 403 (University of Washington), CSC C01 (University of Toronto),
CS 169 (UC Berkley), and CS428 (University of Illinois at Urbana-Champaign).
9. University Policies
UBC 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.