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.
By the end of the course, students will learn several fundamental skills in modern software development:
One of EECE 210, CPEN 221, CPSC 210, EECE 309.
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:
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:
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).