Methods and Tools for Software Engineering - ECE650

This is a draft! This document will be finalized in the first week of the term.


ECE650: Methods and Tools for Software Engineering is an introductory graduate course. Its intent is to provide all students that are interested in software systems with a basic background that will help them succeed in subsequent endeavors (courses, research, and work in industry) related to software. The course is intended to be "hands-on" — there is a large project component that involves building a software system.


Lectures are held Thursdays from 17:30 to 20:20 in RCH 305. There are no lab or tutorial slots.

My office hours are by appointment and will be held in DC 2522. See contact details.

Course material, announcements, and submissions will be handled through Learn.

Begin all email subjects with [ECE650].

Try not to leave your questions until the last minute.

Teaching assistant

Parsa Pourali, ppourali

Office hour Mondays from 14:00 to 15:00; additional meetings by appointment.

Course content

The course is divided broadly into three components: software systems (~40%), mathematical logic (~15%), and data structures (~45%).

Under software systems, we will cover topics such as systems programming and operating systems, scripting, system calls, libraries, compilers and interpreters.

Under mathematical logic, we will cover topics such as propositional logic, syntax, semantics, entailment, deduction and the use of logic in software.

Under data structures, we will cover topics such as stacks, heaps, trees, and graphs, and algorithms to manipulate them.


Graduate standing in the ECE department at Waterloo.


Midterm: 15%, Project: 35%, Final exam: 50%.

You must pass the midterm, the project, and the final exam to pass the course.


All material will be (made) available online. There is no textbook that needs to be bought. Some of the sources from which material will be drawn:


Any lecture material is available through Learn.

This is a tentative schedule that will get adapted during the term.

Week   Date Class
1 Sep 17 Introduction; Unix basics, ssh, version control
2 Sep 24 Optional tutorial (instructor absent)
3 Oct 1 Python programming
4 Oct 8 C programming, system calls
5 Oct 15 Concurrency, shell scripts, Makefiles
6 Oct 22 Midterm; Math, logic
7 Oct 29 Misc. other tools (instructor absent)
8 Nov 5 CNF, complexity, SAT solving
9 Nov 12 Syntax & semantics, other programming languages
10 Nov 19 Data structures
11 Nov 26 Software development
12 Dec 3     Wrap-up


The project forms an integral part of this course. The project will comprise several stages that span the term. It will involve the use of various software tools and techniques to solve a problem. It will exercise skills involving systems programming, use of libraries, and use of third-party software. All programming is to be done in Python, C, and using bash scripts only. If you are unfamiliar with these or are weak at programming or scripting, you can do some extra work on your own in parallel with the course to strengthen those skills.

Assignments will be due on Tuesdays at 12:00 noon.

Assignments will be available at least two weeks before they are due.

The expected due dates are below. These dates are tentative and might change.

Week   Date Class
1 Sep 13
2 Sep 21
3 Sep 28
4 Oct 5
5 Oct 13 Assignment 1
6 Oct 19
7 Oct 27 Assignment 2
8 Nov 5
9 Nov 10 Assignment 3
10 Nov 17 Assignment 4
11 Nov 24 Assignment 5
12 Nov 30    


It is expected that students attend lectures and complete the required assignments. Lectures will often include a hands-on activity; participation in these exercises is essential to succeed in the class. Slides will be provided via Learn. Any material discussed in class or in the required readings will be testable unless otherwise noted.

Official outline

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

Software Systems - Systems programming and operating systems, scripting, system calls, libraries, compilers and interpreters. Mathematical logic - propositional & predicate logic, and some higher-order logics, syntax, semantics, entailment, deduction, use of logic in software. Data structures - lists, stacks, queues, heaps, trees, graphs, and algorithms to manipulate such data structures. Graduate students who have previously taken ECE 750 with the topic title Methods and Tools for Software Engineering are not eligible to take ECE 650.


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

  • Plagiarism detection software (Turnitin) will be used to screen assignments in this course. This is being done to verify that use of all materials and sources in assignments is documented. Students will be given an option if they do not want to have their assignment screened by Turnitin. In the first week of the term, details will be provided about arrangements and alternatives for the use of Turnitin in this course.

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

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

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

Note for Students with Disabilities
  • AccessAbility Services, located in Needles Hall, Room 1132, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with the AccessAbility Services at the beginning of each academic term.


Thanks to Mahesh V. Tripunitara for sharing his experience and materials from a previous iteration of this course.

PDF version for easier printing (if you absolutely have to) or if you prefer looking at PDFs.