ECE 651

This class focuses on software skills required to move to larger scale projects: design, testing, and teamwork.   The class is built around learning fundemental design principles, and then seeing how they appear at different scales.  The class begins with the small scale, i.e., a few classes, and we explore design patterns and revisit testing.   We move to larger and larger scales, until we are considering system architecture, and revisit similar principles throughout.


Students are expected to have successfully completed ECE 551 prior to taking this course.   Students who did not take 551 but believe they have an equivalent course that adequately prepares them for this may ask the instructor for permission to take this course.  As we get many requests from students who do not have adequate preparation, please consider the following basic questions about object oriented programming as a quick check of whether or not you should ask.  If you cannot answer these easily, you are not ready for this course:

  • What is parametric polymorphism?  How do you use it in the OO language with which you are familiar?
  • What is sub-type polymorphism?  What is dynamic dispatch?  How are the two related? 
  • Explain the four standard levels of exception safety (also called "exception guarntees").
  • What is an abstract class? Why are they useful?
  • Write a method (or member function) for a BinarySearchTree class that holds integers, which will negate all of the values in the tree, while maintaining proper BST ordering.



  • Development environment setup
    • Note that if you are a Mac user, you may need to alter some security settings to install VirtualBox.  See here  for details and instructions.
    • The trackpad on a mac does not naturally support middle-click (paste in Linux).  If you have an external mouse, great.  However, if you only have the track pad, this can be a pain.  We included "" which will re-bind "right option" (next to arrow keys) to be middle click, so it will paste. 
    • If you have problems, post on Piazza and/or come to Drew's office hours.


  • First individual programming assignment: Coming January 24! (Due February 6).
  • Second individual programming assignment: Coming February 7! (Due February 20).
  • Team project evolution 1: Coming February 21! (Due March 19).
  • Team project evolution 2: Coming March 20! (Due April 2).
  • Team project evolution 3: Coming April 3! (Due April 22).


Schedule and Topics

The following is a preliminary list of topics and when they are going to be covered.  This is subject to change as the semester progresses.  Slides will be posted AFTER both section's have completed the corresponding deck.

Section 1 Date

Section 2 Date


Thu: 1/9 Fri: 1/10 Overview, course policies, etc
Tues: 1/14 Wed: 1/15 Design principles
Thu: 1/16 Fri: 1/17 From C++ to Java
Tues: 1/21 Wed: 1/22 Software Design Process, Requirements Definition
Thu: 1/23 Fri: 1/24 Waterfall v Agile, Task Breakdown, Estimating Work
Tues: 1/28 Wed: 1/29 Testing 1: Blackbox, Whitebox, Mutation
Thu: 1/30 Fri: 1/31 UML, Design Activity, Design Patterns.
Tues: 2/4 Wed: 2/5 More Design Patterns.
Thu: 2/6 Fri: 2/7 Bad design, technical debt, code smells, refactoring, regression testing
Tues: 2/11 Wed: 2/12 Teamwork, Feature Branch Development, Code review
Thu: 2/13 Fri: 2/14 Continuous Integration/Deployment, Blue/Green and Canary deployment 
Tues: 2/18 Wed: 2/19 Testing 2: Stubs/Spies/Mocks, Unit/Integration/System
Thu: 2/20 Fri: 2/21 Designing modules and the interfaces between them
Tues: 2/25 Wed: 2/26 Midterm Exam
Thu: 2/27 Fri: 2/28 Model View Controller, and User Interfaces
Tues: 3/3 Wed: 3/4 User Interfaces continued
Thu: 3/5 Fri: 3/6 UI/UX Testing
     Spring Break
Tues: 3/17 Wed: 3/18 (Catch up/padding for snow days, etc)
Thu: 3/19 Fri: 3/20 System Architecture
Tues: 3/24 Wed: 3/25 System Architecture (continued)
Thu: 3/26 Fri: 3/27 System Architecture (continued)
Tues: 3/31 Wed: 4/1 Security
Thu: 4/2 Fri: 4/3 Other topics in software engineering
Tues: 4/7 Wed: 4/8 Project Demos
Thu: 4/9 Fri: 4/10 Project Demos
Tues: 4/14 Wed: 4/15 Project Demos
Thurs April 30, 9AM-Noon Sat May 2, 2-5 PM Final Exam (as determined by registrar)