ECE 650 - Methods and Tools for Software Engineering
Outline
This 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.
Content
The course is divided broadly into three components: software systems (approximately 40%), mathematical logic (approximately 15%), and data structures (approximately 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.
Instructor
Dr. Werner Dietl, website, email
Prerequisite
Graduate standing in the ECE department at Waterloo.
Grading
Midterm: 15%, Project: 35%, Final exam: 50%.
Project
The project will comprise 5 or 6 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 C and using bash scripts only. If you are unfamiliar with C 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.
Text books
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:
- Advanced Linux Programming
- Logic for Computer Scientists, Uwe Schoning
- Introduction to Algorithms, Cormen et al., second edition (Accessible online via the university library.)