CPEN 321: Software Engineering (Fall 2018)



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:



Julia Rubin
Lectures: Mon. 3-4:30pm, MCLD 228
                Wed. 5-6:30pm, MCLD 228
Office hours: Mon. 4:30-5:30pm, KAIS 4053 (or by appointment)


Harsha Kadiyala, Duling Lai, Sahar Badihi, Michael Cao, Zeyad Tamimi

Mon. 10am-12pm, MCLD 348 (Michael and Sahar)
Tue. 3-5pm, MCLD 348 (Harsha)
Wed. 10am-12pm, MCLD 348 (Zeyad and Sahar)

Office Hours:
Mon. 12-1pm, KAIS 4095 (Michael, Sahar)
Wed. 2-3pm, KAIS 4095 (Harsha, Zeyad)


Course Prerequisites

One of EECE 210, CPEN 221, CPSC 210, EECE 309.

Course Format

The class meets two times a week for lectures and once a week for a lab section. Lectures will include in-class quizzes. Please bring your I-Clicker to every lecture.

Lab sections are reserved for group meetings. Each group should meet with a TA for 40 minutes a week, preferably during the lab time. In exceptional cases, an alternative time can be arranged in coordination with your TA.

Classroom material will be enhanced with assigned reading. The grading will be based on the group project, in-class quizzes and 2 mid-term exams. There is no final exam.


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; the client side of the system must be a native mobile application that runs on a mobile device (i.e., not in a web browser). The server component must run in a cloud. A limited number of Microsoft Azure credits are available upon request, as described below. An example of a reasonably-scoped project is here.

Projects are performed by groups of 3-4 students, which are further paired to form communities. A community consists of two groups, A and B, with 3-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.

Technology: You have full freedom to choose both client and server technology (i.e., you can use Android, iOS, or a cross-platform mobile framework such as React Native or Xamarin). Your mobile app must run on some mobile device, but it does not have to run on arbitrary mobile devices.

You can host the backend components on a cloud infrastructure of your choice. Most vendors, such as Amazon, Microsoft, Google, and IBM, provide free subscriptions. The course stuff can also make a paid subscription to Microsoft Azure available. If interested, send a request to the instructor and list you Microsoft Azure account names.

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 if you are not familiar with Git. A shorter, less formal, guide is also available.

Logistics: All students in the same community must meet during the same lab section; if you want to work with someone who is in another section, one of you will have to transfer lab sections. In exceptional cases, meetings outside the lab hours can be arranged in coordination with the TAs. However, all meetings must be held during the same week.

Groups must be formed by the end of the second week, namely, by September 14. Please choose your team members carefully, as 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; otherwise, we will assign you randomly to a team. Everyone should have partners by the end of the second week of the course. Use this link to submit your project description and team members.

Communities must be formed by the end of the third week, namely, by September 21; no changes will be permitted. Use this link to submit your choices. If you cannot find a peer group, we will randomly assign you one.

Communities are required to have regular weekly meetings to synchronize and to report on the work progress. Meetings will take around 40 minutes (20 minutes for each “customer” in the community), and will be facilitated and evaluated by the TAs. A staff member will contact your community to set up a meeting during your lab section.

Structure of weekly reports: Each meeting must be summarized in a 1-page report and submitted to the course staff. Weekly status reports help to keep the staff and yourselves informed about your progress. The team status must include (a) a high-level description of the progress for the week, (b) the plans for next week, (c) major decisions and changes in the scope of the project, and (d) the contributions of individual team members. The weekly deliverable, when required, should not be part of a 1-page report, but should be attached to it. One weekly report per team should be submitted in a pdf format via Canvas. Please use this link to submit your reports.

Late deliverables will be subject to the following penalties:

Project milestones

The exact requirements and expectations for each milestone will be provided in lectures. The structure of the report is described above.


Grading for this course is based on three components:


Topics and Schedule

Note that this is a tentative week-by-week guide and thus is subject to change.

  Date Topic Project Milestones Reading Material / Other Comments
W1 Wed, Sept 5, 2018 Intro, what is SE
W2 Mon, Sept 10, 2018 Software Lifecycle, Development Processes Tutorials on Mobile
Reading: Git Introduction and Guide
Wed, Sept 12, 2018 UML Groups formed;
project descriptions due
W3 Mon, Sept 17, 2018 Project pitches Tutorials on Backend
Reading: Component diagrams and Activity diagrams
Wed, Sept 19, 2018 Project pitches Communities formed  
W4 Mon, Sept 24, 2018 Requirements Requirements discussed Reading on Design Patterns: Factory Method, Abstract Factory, Decorator, Proxy, and Visitor.
Wed, Sept 26, 2018 More on Requiremets
W5 Mon, Oct 1, 2018 Arcitecture and Design M1: Requirements Reading: Microservices by James Lewis and Martin Fowler
Wed, Oct 3, 2018 REST, Microservices
W6 Mon, Oct 8, 2018 Thanksgiving Day M2: Design  
Wed, Oct 10, 2018 Mid-term 1
W7 Mon, Oct 15, 2018 Verification and Validation, Analysis   Last day to withdraw
Wed, Oct 17, 2018 Code Reviews, Anti-patterns
W8 Mon, Oct 22, 2018 Testing M3: MVP Reading: Coding Horror "Code Smells",
A Taxonomy for Bad Code Smells
Wed, Oct 24, 2018 More on Testing and Analysis
W9 Mon, Oct 29, 2018 Guest Lecture M4: Code Review Reading: Articles on Continous Integration by the Agile Alliance and Martin Fowler
Wed, Oct 31, 2018 Guest Lecture  
W10 Mon, Nov 5, 2018 Continuous Integration, DevOps M5: Test plan  
Wed, Nov 7, 2018 Teamwork, Advanced Version Control  
W11 Mon, Nov 12, 2018 Remembrance Day M6: Refined specifications  
Wed, Nov 14, 2018 Recap, mid-term preparation
W12 Mon, Nov 19, 2018 Mid-term 2 M7: Test results, including customer acceptance test  
Wed, Nov 21, 2018 Q/A, preparation for final project presentation
W13 Mon, Nov 26, 2018 Final project presentations in the lecture and lab time M8: Final product + presentation
Wed, Nov 28, 2018 Top project presentations and awards


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), and CS 169 (UC Berkley).