This class focuses on software skills required to move to larger scale projects: design, testing, and teamwork. The class is built around learning fundamental 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.
Preparation
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.
Resources
- Emacs quick reference for the new Java-related commands.
- The course syllabus.
Tutorials/Walkthroughs
- 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.
- CI/CD on Duke's GitLab
- Forge: Emacs's integration with Gitlab Issues+Pull Requests
- JavaFX: Graphical User Interfaces in Java
Assignments
- 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 placed in a git repository AFTER we complete them.
Thursday Jan 21 | Overview and Course Policies |
Tuesday Jan 26 | Design Principles |
Thursday Jan 28 | From C++ to Java |
Tuesday Feb 2 | Object Oriented Design Fundamentals |
Thursday Feb 4 | Software Design Process and Requirements Definition |
Tuesday Feb 9 | Wateverfall vs Agile, Task Breakdown, Estimating Work |
Thursday Feb 11 | Testing 1: Blackbox, Whitebox, Mutation |
Tuesday Feb 16 | UML, Design Patterns 1 |
Thursday Feb 18 | Design Patterns 2 |
Tuesday Feb 23 | Bad Code, Smells, Refactoring, Technical Debt |
Thursday Feb 25 | Apply recent ideas to problems |
Tuesday March 2 | Teamwork, Feature Branches, Code Review |
Thursday March 4 | DevOps, CI/CD, Blue/Green, Canary, Scrum |
Tuesday March 9 | (no class) |
Thursday March 11 | Testing 2: Stubs, Spies, Mocks, Unit, Integration, and System Test |
Tuesday March 16 | User Interface and User Experience |
Thursday March 18 | User Interface and User Experience (cont'd) |
Tuesday March 23 | Midterm Exam |
Thursday March 25 | User Interface and User Experience (cont'd) |
Tuesday March 30 | Designing Modules and Interfaces |
Thursday April 1 | TBD |
Tuesday April 6 | System Architecture |
Thursday April 8 | System Architecture (cont'd) |
Tuesday April 13 | System Architecture: Micro-services |
Thursday April 15 | Security |
Tuesday April 20 | TBD |
Thursday April 22 | Review for Final |
As stated by registrar | Final Exam |