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.
- We will use Piazza for questions and answers
- Emacs quick reference for the new Java-related commands.
- The course syllabus.
- 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 "mac-paste.sh" 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|
|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)|