CS 247
Software Engineering Principles

Course Philosophy

Course Announcements

Welcome to CS 247!

Welcome to the CS247 course homepage. Here you can find the latest announcements, as well as general information about the course. The current offering of CS247 is Spring 2024.

This is the in person delivery version of CS 247. Please read the information below as well as the course outline to help you get prepared.

If you have any question or concerns please contact the ISC (see the personnel page). Have a great summer everyone!


Log In

Access our Piazza here: CS 247 Piazza

What is Piazza?

Piazza is the discussion forum for CS 247

Being a student, you can

  • Ask course-related questions -- anonymously if you'd like
  • Collaborate to form a high-quality Wikipedia-style response
  • Have a traditional thread-style discussion


Of course, there are things to be kept in mind while using Piazza. Here are just a few rules that you perhaps already know:

  • Do not post solutions to assignments (Policy 71)
  • Do not post assignment or project related source code (Policy 71)
  • Be civilized; refrain from posting offensive, inappropriate, or irrelevant content

Above all, remember that the whole class, including the professor and the ISAs, are potential readers to the discussion board. Use your common sense to determine what constitutes acceptable content.

Assignment Policies


The latest assignment files can be found in the course repo.

Assignment and Project Due Dates

All due dates for unreleased assignments are tentative and subject to change


Assignments must be submitted using Marmoset.

After your solutions are submitted to the Marmoset automatic grading system available at https://marmoset.student.cs.uwaterloo.ca, Marmoset will run your solutions on a number of test inputs and grade them automatically. You may resubmit your solutions as many times as you wish prior to the submission deadline. The Marmoset portion of your mark is determined entirely by the number of test inputs for which your best submission generates the correct answer.


We will be using Measure of Software Similarity (MOSS) system from Berkley to compare this term's submissions with each other and with past terms' submissions of similar assignments.

Group Work Policy

No group work is permitted on assignments. Students may work on the course project in teams of size 2 or 3.

Collaboration Policy

Some degree of collaboration is beneficial:  you can learn a lot from others; you can avoid getting stuck; and teaching someone else can be the best way to cement your own understanding of a difficult concept. That said, your understanding of the course material will be deeper and more ingrained if you solve problems on your own. Thus, we permit and encourage discussion but not outright collaboration (except where explicitly permitted, such as teamwork on the course project).

Specifically, you are allowed (and even encouraged) to discuss course concepts, assignments, and projects with other CS247 students but only under the following restrictions. 

  • No materials you bring to or take away from such meetings may be incorporated into your solution. In particular, you may not bring any of your code or solutions to the meeting.
  • You may only bring away information in your long-term memory. You must destroy any materials that you and others create during the meeting. Then, you must spend 30 minutes without thinking about CS247 (e.g., watching a mindless TV show). After that, you can use whatever you still remember.
  • You must write up anything you submit on your own. Your code (which includes tests and documentation), problem answers, etc. must represent your own understanding, as explained solely by you.
  • You may not view other people's code or solutions. You may not share any of your own code (including, as always, tests and documentation) with others, including bringing it to a meeting with others. You may not allow anyone except the course staff access to your CS247 course directory, and you must restrict access to any Git repositories containing your CS247 work, or any other location where you keep CS247 solutions. Don't post large amounts of your code (more than about 5 lines) to a public forum (i.e., in a public Piazza post, to a Facebook group, to reddit, etc.)
  • You must give credit where credit is due. Within each assignment/project submission, list everyone with whom you've had substantive discussions. Likewise, if you obtained a key idea from some other resource, such as a textbook or a website, then you should credit it (e.g., in comments at the top of your program submission).
  • You may not view and/or use any substantive material or solutions from similar assignments this term or previous terms at UW or elsewhere, including anywhere on the Internet, transcribing solutions from any other source, etc.

Late Policy

Anything handed in after the due date without a pre-approved extension (see below) will receive a grade of 0.

If you have an illness, conflict, or absence, then you need to consult with the Instructional Support Coordinator (Scott Freeman King, sfking@uwaterloo.ca) as soon as possible in advance to make alternative arrangements for fulfilling the assignment/project deliverables of the course.

Return Policy

Assignments will be returned online, via MarkUs.

Remarking Policy

Email the ISA ( cs247@uwaterloo.ca ), clearly stating the questions you want to be remarked. Include any supporting evidence for your case. Requests that include code changes to fix failing test cases will be ignored. You have two weeks after handback to deliver the request to the ISA. All requests will be processed after the deadline to ensure fairness and consistency in marking.

Notes: We will examine your entire assignment/exam when remarking it. It is possible that you will receive a lower mark than your current mark.

Grades Breakdown and Exam Info

Assignment 1 10 Points
Assignment 2 10 Points
Assignment 3 10 Points
Project 1 0 Points
Project 2 5 Points
Project 3 15 Points
Midterm 15 Points
Final Exam 35 (if in person), 25 (if take home)

The grades are broken down by points instead of percentages. All points are the same if the element occurs. By default, the assumption is each element will be assessed and both the midterm and final exam will be in person, proctored and written on campus. If, for whatever reason, it becomes not possible to write the midterm, there is no replacement. If, for whatever reason, it becomes not possible to write the scheduled in person proctored final exam, there will be a take home final assessment worth 20 points instead of 30. The take home final assessment is only available if we are unable to run the in person proctored exam on campus. You must achieve a passing grade on the exam component of the course in order to pass the course. Otherwise, your final grade will be the minimum of the computed final grade and the exam component grade. If you have any grievances about an assignment's marking, please email cs247@uwaterloo.ca with your quest ID, the assignment, and the concern you have about the grading. Note that remarking for the final is handled by the instructor. If you would like an exam remarked, please use the form Remark Request Form.



For your convenience, we provide a facility to check your unofficial marks.

If you have questions about an assignment whose marking is in progress, please contact the ISA. See below for information on viewing the marks breakdown for an assignment.

CS 247 Mark Viewing Notes

  1. The overall mark on Assignments and Project Components can be found on the unofficial marks page.
  2. Automarking correctness tests and results can be found in Marmoset
  3. Handmarking results (including marker comments) are located on Markus with the following notes:
    • Use Firefox to access Markus. MarkUs does not work properly with other web browsers.
    • Viewing Marks and Marker Comments in MarkUs
      Choose the appropriate assignment. Then, for a detailed breakdown of the marking along with marker comments, click the "Results" link.

      On the right side is your mark breakdown:

      • Summary: Under this tab you can see the weight for each category and your deductions for components with subtractive marking and marks earned for the other components.
      • Marks: Under this tab you can see the level you received for each criterion, with a description of what the level means.

      On the left is the code for one of your files.

      • The ''Annot. Summary'' tab contains a list of all the comments a marker has made to your assignment files. Click on the link at the top left of each comment to go to the associated code.

If there are any errors in the marking of your assignment, please email cs247@uwaterloo.ca to let us know what the problem is.

Remarking Policy

Email the ISA, clearly stating the questions you want to be remarked. Include any supporting evidence for your case. Requests that include code changes to fix failing test cases will be ignored. You have two weeks after handback to deliver the request to the ISA. All requests will be processed after the deadline to ensure fairness and consistency in marking.

Notes: We will examine your entire assignment/exam when remarking it. It is possible that you will receive a lower mark than your current mark.


For questions related to course content, contact an instructor or an ISA. The best place to ask questions is on Piazza or email, but you can also send email or visit during office hours. For questions about marking, contact the Assistants first, who will consult with the Instructor if necessary.


Ross Evans
Email: rpevans@uwaterloo.ca
Office: DC 2128
Office Hours: Thursdays, 11:30-13:00

Instructional Support Assistant (ISA)

Awab Qureshi
Email: cs247@uwaterloo.ca
Office: Tutorial Centre MC 4065
Office Hours: Tue 11:30-12:30 (in-person), Wed 16:00-17:00 (in-person), Fri 15:30-16:30 (online on MS Teams), and by appointment

Instructional Support Coordinator (ISC)

Scott Freeman King
Email: sfking@uwaterloo.ca
Office: MC 4011 by appointment only

Teaching Assistants

Estifanos Getachew
Email: esgetach@uwaterloo.ca
Gareema Ranjan
Email: granjan@uwaterloo.ca
Zitao Wang
Email: z254wang@uwaterloo.ca
Alan Liwei Wu
Email: a92wu@uwaterloo.ca

General Information

General Information

Calendar Description - Official course description from academic calendar.

Handbook Description - Longer course description from Computer Science Undergraduate Handbook.

UW 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.

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, http://www.adm.uwaterloo.ca/infosec/Policies/policy70.htm

Discipline: A student is expected to know what constitutes academic integrity, to avoid committing academic offenses, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes any offense, or who needs help in learning how to avoid offenses (e.g., plagiarism, cheating) or about "rules" for group work/collaboration should seek guidance from the course professor, academic advisor, or the Undergraduate Associate Dean. When misconduct has been found to have occurred, disciplinary penalties will be imposed under Policy 71 - Student Dicipline. For information on categories of offenses and types of penalties, students should refer to Policy 71 - Student Discipline, http://www.adm.uwaterloo.ca/infosec/Policies/policy71.htm

Avoiding Academic Offenses: Most students are unaware of the line between acceptable and unacceptable academic behaviour, especially when discussing assignments with classmates and using the work of other students. For information on commonly misunderstood academic offenses and how to avoid them, students should refer to the Faculty of Mathematics Cheating and Student Academic Discipline Policy, http://www.math.uwaterloo.ca/navigation/Current/cheating_policy.shtml

Appeals: A student may appeal the finding and/or penalty in a decision made under Policy 70 - Student Petitions and Grievances (other than regarding a petition) or Policy 71 - Student Dicipline if grounds for an appeal can be established. Read Policy 72 - Student Appeals, https://uwaterloo.ca/secretariat-general-counsel/policies-procedures-guidelines/policy-72

General information concerning University policies on illnesses may be found at http://www.registrar.uwaterloo.ca/students/accom_illness.html




Thinking in C++, Volume 1
Bruce Eckel
2nd Edition
Prentice Hall, 2000

Thinking in C++, Volume 2
Bruce Eckel, Chuck Allison
Prentice Hall, 2003


Head First Design Patterns
Eric Freeman, Elizabeth Freeman, Bert Bates, Kathy Sierra
O'Reilly, 2004
(available online via the University's Library)

Programming: Principles and Practice Using C++ (Bjarne Stroustrup) (updated for C++11/C++14)
C++ Primer  (Stanley Lippman, Josée Lajoie, and Barbara E. Moo) (updated for C++11)
Effective C++ (Scott Meyers)
Effective Modern C++
(Scott Meyers) (focuses on C++11/C++14)
Effective STL
(Scott Meyers)


The C++ Programming Language (Bjarne Stroustrup) (updated for C++11)
C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (updated for C++11)

Design Patterns