All Class announcements will be made on Learn.
SE2: Software Design and Architecture is the second course of the three software engineering capstone project courses, offered jointly by the David R. Cheriton School of Computer Science and the Department of Electrical and Computer Engineering at the University of Waterloo.
Class will be in-person on Monday & Wednesday at MC 2017 8:30-9:50 or at MC 2017 10:00am-11:20am unless the university decides to move to virtual. If we go virtual, at the same times we will meet in a zoom room whose link I will email all of you.
This will be a flipped classroom. I will post slides with scripts and the corresponding video recordings on Learn at least two days before class. I will strive to get them on earlier.
In class we will do exercises and quiz type questions and group discussions. Note that these are not evaluated. You are welcome and encouraged to attend at they will certainly make the material covered in the slides and recordings more concrete and meaningful. But you are not required to.
Official administrative entry and outline.
Important dates and information will be posted here on this website. The official syllabus is also the contents on this website. You can reach this website from the corresponding entry in learn.uwaterloo.ca.
While the course does not have a required textbook, the following are good readings on this subject.
This term we will be using Learn for class discussion. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Learn.
If you need to ask a question regarding the grades or something personal then please email the instructor. Prefix the subject line with CS446/ECE452/CS646 for a prompt reply.
All TAs will be answering questions mostly only on Learn. If there is a specific need to actually talk to a TA, please email them to set up a time.
The class will use the Learn system for all submissions and grades. Once you are registered, you will be able to access learn and check the dropboxes for submissions and view your grades.
Date | Topics | Instructor |
---|---|---|
May 06 | Introduction to the Class, Expectations, Admin | Christina Wang, Nasif Ahmed |
May 08 | Introduction to Software Architecture | Nasif Ahmed |
May 13 | Non-Functional Properties | Nasif Ahmed |
May 15 | Human Values in Software Engineering | Nasif Ahmed |
May 20 | Victoria Day - No Class. Makeup on May 21 | |
May 21 | UML Intro | Christina Wang |
May 22 | Architectural views & decomposition | Christina Wang |
May 27 | Project Proposal Presentation | Christina Wang |
May 29 | Project Proposal Presentation | Christina Wang |
June 03 | Intro to building Android apps - Part 1 | Christina Wang |
June 05 | Intro to building Android apps - Part 2 | Christina Wang |
June 10 | Arch Styles Intro | Christina Wang |
June 12 | Arch Styles - Part 1 | Christina Wang |
June 17 | Arch Styles - Part 2 | Christina Wang |
June 19 | Arch Styles - Part 3 | Christina Wang |
June 24 | Project Prototype Demo | Nasif Ahmed |
June 26 | Project Prototype Demo | Nasif Ahmed |
July 01 | Canada Day - No Class | |
July 03 | Design Patterns Introduction | Nasif Ahmed |
July 08 | Design Patterns - Part 1 | Nasif Ahmed |
July 10 | Design Patterns - Part 2 | Nasif Ahmed |
July 15 | Design Patterns - Part 3 | Nasif Ahmed |
July 17 | Release Engineering | Nasif Ahmed |
July 22 | Final Project Presentation | Christina Wang, Nasif Ahmed |
July 24 | Final Project Presentation | Christina Wang, Nasif Ahmed |
July 29 | Final Exam Review | Christina Wang, Nasif Ahmed |
August 14 | Final Exam |
The project forms an integral part of this course. Here are some of the hard requirements:
The three goals of the project is to
When coming up with your own app there are only two hard and soft restrictions on the app idea itself:
Hard Restrictions
Human values: In the proposal, you will detail the functional requirements, non-functional properties, and human values that your app addresses. You will also state who some of your stakeholders are and which population of users that your app is useful for.
Buddy team evaluation: You will receive the proposal of another team. Your goal is to look at the proposal and find out which populations could be harmed and what harm could be created by the features of the app. You are expected to think critically and come up with an exhaustive list. The instructor and TAs will also come up with a list. You are evaluated on how similar you are to our list.
Pivot: The lists of harm that exist in the app created by the instructor team and the buddy team will be shared with the team that proposed the project by the prototype demo stage. When you receive your list, you are expected to make changes in the project so that the harm is mitigated. This change has to be documented by the final demo and written deliverable.
The projects will be completed in teams of six. If it has less than six or more than six, you will need to explicitly get permission from the instructor. You should select your own team; if you do not have a team or your team has less than six members, please post on the appropriate Learn discussion thread.
All project grades taken together (D1, D2, D3, D6, D7) need not be the same for all team members. Each team member will get a score based on effort. Please only commit your personal contribution to the repository. Do not commit for another team member. Commits to the repo are an important signal to us. Additionally, projects will have a difficulty scale applied to them by the instructor and TAs. The scale formula will be:
(total score for the team member across all project deliverables D1, D2, D3, D6, D7 + bonus) * (scale/100) = final project gradeScale will range between 0 and 100. The components of the scaling mark will be determined by:
https://developer.android.com/studio/install
Use the above link to start installing Android Studio in Linux/Win/Mac Machines beforehand. The download size may vary based on the operating system/region and locale ( 800 MB ) for Android Studio alone. Always choose the latest version of Android Studio and corresponding Gradle plugin to build APK files, which helps in reviewing code and evaluation.
SDK Installation: Use the latest Stable Android Version for SDK Compilation rather than the beta version. The preferable version can be from Android M ( API 23 ) to Android R ( API 33 ). As soon as you install the Android Studio, start selecting the preferred android version ( at least 1 ) and download the corresponding emulator, SDK Library, SDK Build Tools, and other utilities. Kindly allocate around 20 GB physical space for Android Studio and SDK Installation and a stable internet connection to complete all the installation setup in advance.
Emulator vs. Android Phone: Kindly use Android Mobile phone for testing by connecting it via USB for debugging, which will have a low impact on system resources while building Android apps. Otherwise, kindly install x86 Google Play/Google API Supported Android emulator for instant access and testing. Do not install ARM or other arch types that are not optimized for cold startup/booting.
Reliable Network Connection: Kindly ensure about reliable network connection for downloading Android Studio and SDK Libraries. Additional data will be required while using third party libraries to build an application or while syncing via Gradle.
A selection of project videos from 2017 are included in this playlist to help you get an idea of the scope of projects suitable for the course.
Deliverable | Date | Format | Value |
---|---|---|---|
Project Team Selection | May 17 | On Learn and Github | No Grade |
D1: Proposal Document | May 31 | Upload to Learn | 5% |
D2: Buddy team's evaluation | June 14 | Upload to Learn | 5% |
D3: Prototype Demo | June 24/26 | Present in Class/Upload to Learn | 5% |
D3: Prototype Document | June 28 | Upload to Learn | 5% |
D4: Architecture Style Examples | July 12 | Upload to Learn | 10% |
D5: Design Pattern Examples | July 19 | Upload to Learn | 10% |
D6: Final Presentation | July 22/24 | Present in Class | 5% |
D6: Arch + Design Document | July 26 | Upload to Learn | 15% |
D7: Final Status Report | July 30 (Last Day, Tuesday) | Upload to Learn | 5% |
Final Exam | August 14, 9-11:30 AM, PAC 7 and 8 | 35% |
For graduate students only: in addition to the project and other assessments above, you will perform an individual graduate project. The graduate project is worth 25% of your grade; your final grade will be calculated by scaling down the above assessments from 100% to 75%.
Three types of graduate projects are possible:
The goal of this style of project is to identify some problem developers encounter in practice, find some solution, and validate that the solution helps with the initial problem. I would recommend drawing upon your experience as you write code to identify some problem that has inhibited you in the past and fix it.
The outcome of this project will be a short (5-6 page) paper describing the problem, your solution, a comparison to related approaches, and some form of validation.
The goal of this kind of project is to gain a more complete understanding of a topic relevant to this course. The outcome of this project will be a critical summary of the state-of-the-art on your selected topic; this summary should be 8-10 pages. It is essential that this summary synthesizes the surveyed literature to identify important themes, findings, and open questions.
The goal of this project is to provide a validation of some previously-existing development tool from the research community. The tool you validate must be related to the course material. The outcome of this project will be a 6-8 page paper describing your experience with the tool outlining its strengths, weaknesses, and avenues for future improvement.
There are two deliverables for the graduate project:
The Faculty of Math encourages students to seek out mental health support if needed. On-campus Resources: