SE2: Software Design and Architecture - CS 446, CS 646, ECE 452

Announcements

All Class announcements will be made here.

Winter 2021 (Term 1211)

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.

Lectures notes will be posted in Learn on Monday and Wednesday by 10 AM (I will strive to upload them even before but if you look into Learn by 10 AM on Mon/Wed you should be able to see them).
Anecdotal Spring 2020 feedback from students indicate that detailed lecture notes were more useful than long videos. That is what I will strive to do in this course. In places where I deem videos will be useful, I will make them available. Otherwise it will be detailed slides with possible annotation from me.

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.

  • Richard N. Taylor, Nenad Medvidovic, and Eric Dashofy. Software Architecture. Foundations, Theory, and Practice. Slides for this book are available online.
  • Ian Gorton. Essential Software Architecture.
  • Fred P. Brooks Jr. The Mythical Man Month.
  • Fred P. Brooks Jr. The Design of Design.

Contact

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 get a virtual meeting link that can be used. They have preferred times set up (below). Please try to schedule during these times as much as possible.

  • TA: Farshad Kazemi - farshad.kazemi@uwaterloo.ca. Virtual office hours on Mondays at 4:00pm-5:00pm EST.
  • TA: Mehran Meidani - mehran.meidani@uwaterloo.ca. Virtual office hours on Mondays at 11:00am-12:00pm EST.
  • TA: Shivasurya Sankarapandian - s5sankarapandian@uwaterloo.ca. Questions on Android development on Learn.
  • Instructor: Shane McIntosh - shane.mcintosh@uwaterloo.ca. Virtual office hours on Fridays at 10:00am-11:00am EST.

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.

Course Schedule (May be subject to change)

DateTopicsNotes
Jan. 11 Introduction to the Class, Expectations, Admin Slides, Video
Jan. 13 Introduction to Software Architecture Slides, Video
Jan. 18 Non-Functional Properties Slides & Video
Jan. 20 Intro to building Android apps - Part 1 Video #1, Video #2, Video #3, Video #4
Jan. 25 Intro to building Android apps - Part 2 Video #5, Video #6, Video #7, Video #8
Jan. 27 Intro to UML for Architecture and Design Slides, Video
Feb. 1 Architectural views & decomposition Slides, Video
Feb. 3 Project Scheduling Slides, Video
Feb. 8 Cost Estimation Slides, Video, Optional Reading
Feb. 10 Project Proposal Prep. No class.
Feb. 15 Reading week. No class.
Feb. 17 Reading week. No class.
Feb. 22 Architectural Styles Intro Slides, Video
Feb. 24 Architectural Styles - Part 1 Slides, Video
Mar. 1 Architectural Styles - Part 2 Slides, Video
Mar. 3 Design Patterns - Intro Slides, Video
Mar. 8 Design Patterns - Part 1 Slides, Video
Mar. 10 Design Patterns - Part 2 Slides, Video
Mar. 15 Scheduled pause due to COVID-19. No class.
Mar. 17 Design Patterns - Part 3 Slides, Video
Mar. 22 Release Engineering - Part 1 Slides, Video
Mar. 24 Release Engineering - Continuous Experimentation Slides, Video
Mar. 29 Project finalization. No class.
Mar. 31 Project finalization. No class.
Apr. 5 Final demos
Apr. 7 Final exam
Apr. 12 Final exam

Project

The project forms an integral part of this course. Here are some of the hard requirements:

  • The app must be implemented as a Native Android app (i.e., not built using an app builder or a framework like React/Node.js or HTML5).
  • The code must be hosted in a private repository on GitHub. You can choose to open-source it after the class is finished if you wish, but during the class it shall remain private. You will need to add the following user as a collaborator with full privileges: uw-cs446-w21. This GitHub account is shared between the instructor and TAs.
  • The app must use at least two architectural styles and at least two design patterns that have been discussed in class.

The two goals of the project are to

  • produce a mobile app that performs some useful function
  • create a design and architecture that can be presented explicitly and defended

There are only three restrictions on the app idea itself:

  • no database management apps will be accepted. For example, simple CRUD apps that do not make sense in a mobile context.
  • apps that require crowd buy-in are not acceptable. For example, apps that would require large numbers of people to contribute content to be viable.
  • apps that require complex server infrastructure are also not acceptable. If your app has any of these characteristics, then you are responsible to have the DB or server infrastructure set up so that you can demo the app and we can test it as well.

If after the proposal, we feel that the app idea is too simple or too easy, then we will provide the team with a basic idea. The teams will then have to implement our suggested idea. We highly encourage the teams to come up with their own creative ideas. See below for some ideas from past projects.

Pivot: After the prototype demo, we will provide a 'pivot' to each group; this will consist of a new or modified requirement for your app that you will have to include for the final demo (and write about in the architecture and design deliverable).

The projects will be completed in teams of six. If your team has fewer or more than six members, you must request permission from the instructor. You may form your own teams; if you do not have a team or your team has fewer than six members, please post on the appropriate Learn thread.

Project grades need not be the same for all team members. Each team member will get a score based on effort. Additionally, projects will have a difficulty scale applied to them by the instructor and TAs. The scale formula will be:

(total project score for the team member across all deliverables + bonus) * (scale/100) = final project grade
Scale will range between 0 and 100. The components of the scaling mark will be determined by:
  • 10: completeness (compared to proposal)
  • 10: utility
  • 10: polish
  • 10: difficulty
  • 10: pivot
  • 50: individual effort - will be based on peer evaluation and our assessment based on exam and GitHub logs
There will also be two sources of bonus marks during the term; which will be worth 2%:
  • Best final demo - To two teams
  • Accepted to the Google Play Store - To any team that gets through
NOTE: The expectation is that you will work approximately nine hours per week on this course; at least six of these hours should be on the project. Given that the course lasts twelve weeks, each team member is expected to work on the project at least 75 hours. As a team of six that will be 450 person hours. Allocating this much effort, your team should be able to accomplish something impressive. Make the most of this opportunity!

Installing Android Studio

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 30). As soon as installing 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. Expect to allocate roughly 20 GB of storage for Android Studio and SDK installations. A stable internet connection is needed to complete all of the installation steps.

Emulator vs. Android Phone: You may use an Android mobile device to test your apps by connecting it via USB for debugging. This should reduce the impact on your system's resources while building Android apps. Otherwise, you may install an x86 Google Play/Google API endorsed Android emulator for testing. Do not install ARM or other architecture types that are not optimized for cold startup/booting.

Reliable Network Connection: Ensure that you are connected to a reliable broadband network connection for downloading Android Studio and the SDK(s). Additional data will be required while using third party libraries to build an application or while syncing via Gradle.

Past Project Videos

This playlist is a selection of past project videos to provide insight into the expected scope of projects for this course.

Quizzes

In total, there will be ten quizzes.

The quizzes are to be completed individually and should take no more than 20 minutes if you have gone through the material.

Oral Exam Details

There will be no written finals in this course. Instead we will do an oral exam. Details are below:

  1. Sign up for meeting slot in the online sign up sheet (Link will be made available shortly). Make sure your whole team can attend.
  2. Meeting will be virtual and we will provide a meeting room here.
  3. The signup is first come, first served; please sign up using your team name.
  4. The slot is 60 minutes. You will start by giving a 10 minute oral description of your system’s architecture and design. You can use screen share any material (slides/previous documents)
  5. The remainder of the slot will be used to discuss your architecture and design.
  6. Some questions will be for the group, others will be for specific individuals.
  7. Being able to clearly and unambiguously justify your architectural and design decisions will be fundamental to success here.
  8. Be prepared to defend your system's design. We will also likely ask about how your design could adapt to specific given evolutionary constraints (e.g., ‘you must now support XYZ, how would you do that?’). This would involve knowing other similar styles or patterns.

Assessment Breakdown and Schedule

All deliverables are due at 5 PM EST on the respective Friday. Late submissions will be graded only on a case-by-case basis.
Deliverable Date Format Value
Quiz 1 Jan. 15 On Learn 3%
Project Team Selection Jan. 22 On Learn No Grade
Quiz 2 Jan. 22 On Learn 3%
Quiz 3 Jan. 29 On Learn 3%
Quiz 4 Feb. 5 On Learn 3%
Quiz 5 Feb. 12 On Learn 3%
D1: Proposal Document Feb. 19 Upload to Learn 5%
Quiz 6 Feb. 26 On Learn 3%
Quiz 7 Mar. 5 On Learn 3%
D2: Architecture Style Examples Mar. 12 Upload to Learn 10%
Quiz 8 Mar. 12 On Learn 3%
D3: Prototype Document + Demo Mar. 19 Upload to Learn 10%
Quiz 9 Mar. 19 On Learn 3%
Quiz 10 Mar. 26 On Learn 3%
D4: Design Pattern Examples Mar. 26 Upload to Learn 10%
D5: Arch + Design Document Apr. 2 Upload to Learn 10%
D6: Final Documentation + Video Apr. 7 (Note this is a Wed) Upload to Learn 5%
Oral Exam Apr 12 - 16 Virtually 20%

Graduate Student Project

For graduate students (CS 646), 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:

  1. Build a Software Tool:

    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 address a problem that has inhibited you in the past.

    The outcome of this project will be a short (5-6 page) paper describing the problem, your solution, a comparison to related approaches, and an evaluation of the soolution.

  2. Literature Survey:

    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.

  3. Use an Advanced Software Development Tool

    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:

  1. Project proposal. Before you undertake your project you will need to submit a proposal for approval. The proposal should be short (1-2 pages in ACM format). The proposal should include a problem statement, the motivation for the project, a set of objectives you aim to accomplish, and a set of milestones. I will read these and provide comments. The proposal is not for marks but must be completed in order to pass the course. This will be due on February 28 via email to the instructor.
  2. Written report. The required length of the written report varies from project to project; all reports must be formatted according to the ACM format and submitted as a PDF. This artifact will constitute 100% of the graduate project grade. This will be due on April 2 via email to the instructor.

Nominal Course Outline

This is the high-level outline provided by the department; while this is general guideline the course will be adjusted according to your feedback, interests, and experience.

Introduction (1h)

Why design? Input, output, and constraints of the design process. Types of design. Relationship to software quality and evolution. Design in more mature implementation technologies.

Software Design Process Models (3h)

Design as search. Design spaces. Design state, goal structure, generative design operations, early quantitative evaluations, control of design process. Basic models of design (transformational, plan/architecture driven). Relationship to other life-cycle activities.

Arch/Design Representations (8h)

What should be represented (structure, behaviour)? Informal representations of design, examples of design notations. Formal representation of design. Domain specific architecture descriptions. Role of standards, reference architectures. Design documentation.

Design Plans/Arch (8h)

Review of small/medium scale plans (data structures, programming language structures, concurrency). Plans/architectures for common types of software systems (translators, embedded, real-time, user interface).

Design Strategies and Methods (5h)

Design strategies. Selected methods: object modelling technique, structured design, real-time, user interfaces. Methods for design with off-the-shelf components.

Design Assessment (3h)

Assessment dimensions and factors affecting their relative importance. Design tradeoffs. Evolvability/understandability criteria. Design complexity metrics. Assessment strategies (analytical, simulation, rapid prototyping), example: response time/throughput estimation.

Design Verification (3h)

Design reviews, scenarios and test cases, testing of executable design representations. Verification of properties.

Release Engineering (3h)

Resiliency, continuous experimentation, blue-green deployment, A/B testing, canary releases, chaos engineering

Policies

Academic Integrity

  • In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. [See the academic integrity site for more information.]

Grievance

  • A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4.
  • When in doubt please be certain to contact the department’s administrative assistant who will provide further assistance.

Discipline

  • A student is expected to know what constitutes academic integrity to avoid committing an academic offence, and to take responsibility for his/her actions.
  • A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about “rules” for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean.
  • For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline.
  • For typical penalties check Guidelines for the Assessment of Penalties.

Appeals

  • A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground.
  • A student who believes he/she has a ground for an appeal should refer to Policy 72 (Student Appeals).
Toggle Menu