Software Engineering (ECE 651K)
Spring 2023-2024 (14 weeks, 35 hours)
Course Period: January 8 - April 25, 2024
- Lectures: Tuesday / Thursday @ 10:15-11:30 (Classroom: WDR 1003)
- Office Hours: Thursday @ 09:00-10:00 (Office: WDR 2106)
Instructor: Mustafa MISIR (Office: WDR 2106), mustafa.misir [at] dukekunshan.edu.cn
Teaching Assistant (DKU / On-Campus): Zhibo Jia (Office/Desk: IB2072-2B25), zhibo.jia [at] duke.edu
- Office Hours: Monday / Tuesday / Wednesday / Thursday @ 16:00-17:00 (IB2072-2B25)
Teaching Assistant (Duke U. / Remote): Jing Wang (Office: Zoom), jing.wang [at] duke.edu
- Office Hours: Monday / Tuesday / Wednesday / Thursday / Friday @ 21:00-22:00 (Zoom)
Software refers to computer programs and associated documentation. There are many different types of software systems, ranging from simple embedded systems to complex, worldwide information systems.
Whether it resides within a mobile device, on the desktop, in the cloud, or within a mainframe computer or autonomous machine, software is an information transformer-producing, managing, acquiring, modifying, displaying, or transmitting information that can be as simple as a single bit or as complex as an augmented reality representation derived from data acquired from dozens of independent sources and then overlaid on the real world.
Software systems are abstract and intangible. They are not constrained by the properties of materials, nor are they governed by physical laws or by manufacturing processes. This simplifies software engineering, as there are no natural limits to the potential of software. However, because of the lack of physical constraints, software systems can quickly become extremely complex, difficult to understand, and expensive to change.
Software engineering is an engineering discipline that is concerned with all aspects of software production from initial conception to operation and maintenance. Software engineering is essential for the functioning of government, society, and national and international businesses and institutions.
This course 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.
The course is aligned with ECE 651 at Duke University [ Syllabus ]
Refer to the ECE 651: Development Environment Setup guide for effectively realizing your course related programming activities.
Follow Canvas for announcements and discussions
Reference Books
There is no official textbook for this course. Still, the following books can be used as references.
Supplementary Books:
-
Software Engineering, Ian Sommerville (10th Edition), 2015, Pearson
-
Software Engineering: A Practitioners Approach, Roger Pressman, Bruce Maxim (9th Edition), 2020, McGraw-Hill
-
Software Engineering: Theory and Practice, Shari Lawrence Pfleeger, Joanne M. Atlee (4th Edition), 2010, Pearson
-
Engineering Software Products: An Introduction to Modern Software Engineering, Ian Sommerville (1st Edition), 2019, Pearson
-
Modern Software Engineering: Doing What Works to Build Better Software Faster, David Farley (1st Edition), 2021, Addison-Wesley
-
Object-Oriented Software Engineering Using UML, Patterns, and Java, Bernd Bruegge, Allen H. Dutoit (3rd Edition), 2011/2014, Pearson
-
Object-Oriented Modeling and Design with UML, Michael R. Blaha, James Rumbaugh (2nd Edition), 2012, Pearson
-
Object-Oriented and Classical Software Engineering, Stephen Schach (8th Edition), 2010, McGraw Hill
-
Object-Oriented Software Construction, Bertrand Meyer (2nd Edition), 2002, Pearson
-
Domain-Driven Design: Tackling Complexity in the Heart of Software, Evans Eric (1st Edition), 2003, Addison-Wesley
-
Beginning Software Engineering, Rod Stephens (2nd Edition), 2022, Wiley
-
Clean Architecture: A Craftsman's Guide to Software Structure and Design, Robert C. Martin (1st Edition), 2017, Pearson / Prentice Hall
-
Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin (1st Edition), 2008, Pearson
-
Software Craftsman: Professionalism, Pragmatism, Pride, Sandro Mancuso (1st Edition), 2014, Pearson
-
Code Complete: A Practical Handbook of Software Construction, Steve McConnell (2nd Edition), 2004, Microsoft Press [ Online Course ]
- UML for Java Programmers, Robert C. Martin (1st Edition), 2003, Prentice Hall
- UML Distilled, Martin Fowler (3rd Edition), 2003, Addison-Wesley
-
PSP: A Self-Improvement Process for Software Engineers, Watts S. Humphrey(1st Edition), 2005, Addison-Wesley
-
The Pragmatic Programmer: Your Journey to Mastery, David Thomas, Andrew Hunt (2nd Edition), 2019, Addison-Wesley
-
Software Engineering Body of Knowledge (SWEBOK) V4.0, Hironori Washizaki (Ed.), 2024, IEEE Computer Society (Free Book)
-
Software Engineering Body of Knowledge (SWEBOK) V3.0, Pierre Bourque, Richard E. Fairley (Ed.), 2014, IEEE Computer Society (Free Book)
-
Making Software: What Really Works, and Why We Believe, Andy Oram, Greg Wilson (1st Edition), 2010, O'Reilly
-
A Philosophy of Software Design, John K. Ousterhout (2nd Edition), 2021
-
The Mythical Man-Month: Essays on Software Engineering, Frederick Brooks Jr. (Anniversary Edition), 1995, Addison-Wesley
-
Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring, John F. Dooley (2nd Edition), 2017, Apress
-
Write Great Code (Volume 1): Understanding the Machine, Randall Hyde (2nd Edition), 2020, No Starch Press
-
Write Great Code (Volume 2): Thinking Low-Level, Writing High-Level, Randall Hyde (2nd Edition), 2020, No Starch Press
-
Write Great Code (Volume 3): Engineering Software, Randall Hyde (1st Edition), 2020, No Starch Press
-
Deployment and Operations for Software Engineers: A DevOps Engineering Textbook, Len Bass, John Klein (2nd Edition), 2023 (Free Book) [ Lecture Videos / Slides (CMU: Syllabus) ]
-
The DevOps Handbook, Gene Kim, Jez Humble, Patrick Debois, John Willis, Nicole Forsgren (2nd Edition), 2021, IT Revolution
-
Software Engineering at Google: Lessons Learned from Programming Over Time, Titus Winters, Tom Manshreck, Hyrum Wright (1st Edition), 2020, O'Reilly
Java Programming:
- Java - How to Program: Early Objects, Paul Deitel, Harvey Deitel (11th Edition), 2018, Pearson
- Starting Out with Java: From Control Structures through Objects, Tony Gaddis (7th Edition), 2019, Pearson
- Effective Java, Joshua Bloch (3rd Edition), 2017, Addison-Wesley
- Java: The Complete Reference, Herbert Schildt (12th Edition), 2021, McGraw Hill
- Java Performance: In-Depth Advice for Tuning and Programming Java 8, 11, and Beyond, Scott Oaks (2nd Edition), 2020, O'Reilly
- Core Java - Volume 1: Fundamentals, Cay Horstmann (12th Edition), 2021, Oracle
- Core Java - Volume 2: Advanced Features, Cay Horstmann (12th Edition), 2022, Oracle
- Core Java for the Impatient, Cay Horstmann (3rd Edition), 2022, Addison-Wesley
Requirements Specifications / Engineering:
-
Requirements Engineering for Software and Systems, Phillip A. Laplante, Mohamad Kassab (4th Edition), 2022, Auerbach
-
Software Requirements (Developer Best Practices), Karl Wiegers, Joy Beatty (3rd Edition), 2013, Microsoft
-
Software Requirement Patterns (Developer Best Practices), Stephen Withall (1st Edition), 2013, Microsoft
-
Requirements Engineering: A Good Practice Guide, Ian Sommerville, Pete Sawyer (1st Edition), 1997, Wiley
Design Patterns:
-
Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1st Edition), 1994, Addison-Wesley
- Design Patterns Explained: A New Perspective on Object Oriented Design, Steven Alan Shalloway, James Trott (2nd Edition), 2004, Addison-Wesley
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Craig Larman (3rd Edition), 2004, Pearson
- Design Patterns in Java, Steven John Metsker, William C. Wake (2nd Edition), 2006, Addison-Wesley
-
Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software, Eric Freeman, Elisabeth Robson (2nd Edition), 2021, O'Reilly
Software Testing:
- Introduction to Software Testing, Paul Ammann, Jeff Offutt (2nd Edition), 2016, Cambridge University
- Software Testing: A Craftsman's Approach, Paul C. Jorgensen, Byron DeVries (5th Edition), 2022, Auerbach / CRC
- Essentials of Software Testing, Ralf Bierig, Stephen Brown, Edgar Galvan, Joe Timoney (1st Edition), 2021, Cambridge University
- Software Testing and Analysis: Process, Principles, and Techniques, Mauro Pezze, Michal Young (1st Edition), 2008, Wiley (Free Book)
-
The Art of Software Testing, Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas (2nd Edition), 2004, Wiley
- Unit Testing Principles, Practices, and Patterns, Vladimir Khorikov (1st Edition), 2020, Manning
- xUnit Test Patterns: Refactoring Test Code, Gerard Meszaros (1st Edition), 2007, Addison-Wesley
Refactoring & Technical Debt:
-
Refactoring: Improving the Design of Existing Code, Martin Fowler (2nd Edition), 2018, Addison-Wesley
-
Refactoring for Software Design Smells: Managing Technical Debt, Girish Suryanarayana, Ganesh Samarthyam, Tushar Sharma (1st Edition), 2014, Morgan Kaufmann
-
Technical Debt in Practice: How to Find It and Fix It, Neil Ernst, Rick Kazman, Julien Delange (1st Edition), 2021, MIT Press
-
Managing Technical Debt: Reducing Friction in Software Development, Philippe Kruchten, Robert Nord, Ipek Ozkaya (1st Edition), 2019, Addison-Wesley
Agile Software Development:
-
Clean Agile: Back to Basics, Robert C. Martin (1st Edition), 2008, Pearson
-
Agile Software Development, Principles, Patterns, and Practices, Robert C. Martin (1st/International Edition), 2002/2013, Pearson
-
The Project Manager's Guide to Mastering Agile, Charles G. Cobb (2nd Edition), 2023, Wiley
-
Agile Project Management: Creating Innovative Products, Jim Highsmith (2nd Edition), 2009, Addison-Wesley
-
Succeeding with Agile: Software Development Using Scrum, Mike Cohn (1st Edition), 2009, Addison-Wesley
-
User Stories Applied: For Agile Software Development, Mike Cohn (1st Edition), 2004, Addison-Wesley
-
Essential Scrum: A Practical Guide to the Most Popular Agile Process, Rubin Kenneth S. (1st Edition), 2012, Addison-Wesley
-
Agile Project Management For Dummies, Mark C. Layton, Steven J. Ostermiller, Dean J. Kynaston (3rd Edition), 2020, For Dummies
-
Extreme Programming Explained: Embrace Change, Kent Beck, Cynthia Andres (2nd Edition), 2004, Addison-Wesley
-
Implementing Lean Software Development: From Concept to Cash, Mary Poppendieck, Tom Poppendieck (1st Edition), 2006, Addison-Wesley
-
Agile Estimating and Planning, Mike Cohn (1st Edition), 2005, Pearson
-
Test Driven Development: By Example, Kent Beck (1st Edition), 2002, Addison-Wesley
-
Crystal Clear: A Human-Powered Methodology for Small Teams, Alistair Cockburn, Alistair Paul Becker, John Fuller (1st Edition), 2004, Addison-Wesley
User Interface (UI) / User Experience (UX) Design:
- User Interface Design: A Software Engineering Perspective, Soren Lauesen (1st Edition), 2004, Addison-Wesley
- Designing with the Mind in Mind, Jeff Johnson (3rd Edition), 2020, Morgan Kaufman
- About Face: The Essentials of Interaction Design, Alan Cooper, Robert Reimann, David Cronin, Christopher Noessel (4th Edition), 2014, Wiley
- The Design Of Everyday Things, Don Norman (1st Edition), 2013, Basic Books
- Measuring the User Experience: Collecting, Analyzing, and Presenting UX Metrics, Bill Albert, Tom Tullis (3rd Edition), 2022, Interactive Technologies
- Observing the User Experience: A Practitioner's Guide to User Research, Elizabeth Goodman, Mike Kuniavsky, Andrea Moed (2nd Edition), 2012, Morgan Kaufmann
- The User Experience Team of One: A Research and Design Survival Guide, Leah Buley (1st Edition), 2013, Rosenfeld
- Laws of UX: Using Psychology to Design Better Products and Services, Jon Yablonski (1st Edition), 2020, O'Reilly
Software Architecture:
- Software Architecture in Practice, Len Bass, Paul Clements, Rick Kazman (4th Edition), 2021/2022, Pearson
-
Fundamentals of Software Architecture: An Engineering Approach, Mark Richards, Neal Ford (1st Edition), 2020, O'Reilly
-
Software Architecture: Foundations, Theory, and Practice, R. N. Taylor, N. Medvidovic, E. M. Dashofy (1st Edition), 2009, Wiley
- Effective Software Architecture: Building Better Software Faster, Oliver Goldman (1st Edition), 2024, Addison-Wesley
-
Continuous Architecture in Practice: Software Architecture in the Age of Agility and DevOps, Murat Erder, Pierre Pureur, Eoin Woods (1st Edition), 2021, Addison-Wesley
-
Design It!: From Programmer to Software Architect, Michael Keeling (1st Edition), 2017, Programatic Bookshelf
-
Head First Software Architecture A Learner's Guide to Architectural Thinking, Raju Gandhi, Mark Richards, Neal Ford (3rd Edition), 2023, O'Reilly
Microservices:
- Microservices Patterns: With Examples in Java, Chris Richardson (1st Edition), 2018, Manning
- Strategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture, Vaughn Vernon, Tomasz Jaskula (1st Edition), 2021, Addison-Wesley
- Building Microservices: Designing Fine-Grained Systems, Sam Newman (2nd Edition), 2021, O'Reilly
- Monolith to Microservices, Sam Newman (1st Edition), 2019, O'Reilly
Computer / Software Security:
- Computer Security: Principles and Practice, William Stallings, Lawrie Brown (4th Edition), 2017, Pearson
- Security Engineering: A Guide to Building Dependable Distributed Systems, Ross Anderson (3rd Edition), 2020, Wiley
- Software Security: Building Security In, Gary McGraw (3rd Edition), 2006, Addison-Wesley
- Building Secure Software: How to Avoid Security Problems the Right Way, John Viega, Gary R. McGraw (1st Edition), 2001/2008, Addison-Wesley
- Computer Security, Dieter Gollmann (3rd Edition), 2011, Wiley
- Fuzzing: Brute Force Vulnerability Discovery, Michael Sutton, Adam Greene, Pedram Amini (1st Edition), 2007, Addison-Wesley (+ Testing)
- Gray Hat Hacking: The Ethical Hacker's Handbook, Allen Harper, Ryan Linn, Stephen Sims, Michael Baucom, et al. (6th Edition), 2022, McGraw Hill
- Hacking: The Art of Exploitation, Jon Erickson (2nd Edition), 2008, No Starch
- The Tangled Web: A Guide to Securing Modern Web Applications, Michal Zalewski (1st Edition), 2011, No Starch
- Bug Bounty Bootcamp: The Guide to Finding and Reporting Web Vulnerabilities, Vickie Li (1st Edition), 2021, No Starch
Lecture Notes / Slides
- Week 1 [08/01 - 11/01] (Keywords: Course Policies; History; Terminology and Basics; Introduction to Software Engineering; Design Principles)
- About ECE 651K
- Introduction to Sofware Engineering
- Book Chapter:
Software Engineering by Ian Sommerville (10th Ed., 2015), Chapter 1 - Introduction
- Book Chapter:
Software Engineering: A Practitioners Approach by Roger Pressman, Bruce Maxim (9th Ed., 2020), Chapter 1 - Software and Software Engineering
- Book Chapter:
Software Engineering: Theory and Practice by Shari Lawrence Pfleeger, Joanne M. Atlee (4th Ed., 2010), Chapter 1 - Why Software Engineering?
- Design Principles
- Book Chapter:
Software Engineering: A Practitioners Approach by Roger Pressman, Bruce Maxim (9th Ed., 2020)
- Book Chapter:
Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin (1st Ed., 2017), SOLID
- Book Chapter (Optional):
Code Complete: A Practical Handbook of Software Construction by Steve McConnell (2nd Ed., 2004), Chapter 2 - Creating High Quality Code
- Week 2 [15/01 - 18/01] (Keywords: Object-Oriented Programming (OOP), Java Programming, C++ vs. Java)
- Java Programming: From C++ to Java
- Book:
Core Java: Volume 1 - Fundamentals by Cay Horstmann (12th Ed., 2018)
- Object-Oriented (OO) Design Fundamentals (Review)
- Book Chapter:
Java - How to Program: Early Objects by Paul Deitel, Harvey Deitel (11th Ed., 2018), Chapter 8 - Classes and Objects
- Book Chapter:
Java - How to Program: Early Objects by Paul Deitel, Harvey Deitel (11th Ed., 2018), Chapter 9 - Inheritance
- Book Chapter:
Java - How to Program: Early Objects by Paul Deitel, Harvey Deitel (11th Ed., 2018), Chapter 10 - Polymorphism
- Week 3 [22/01 - 25/01] (Keywords: Software Design Process; Requirements Specification)
- Software Design Process
- Book Chapter:
Software Engineering by Ian Sommerville (10th Ed., 2015), Chapter 2 - Software Processes
- Requirements Definition
- Software Process Models: Waterfall vs. Agile
- Task Breakdown & Estimating Work
- Book Chapter:
Beginning Software Engineering by Rod Stephens (2nd Ed., 2022), Chapter 4 - Project Management
- Week 4 [29/01 - 01/02] (Keywords: Software Testing; Unified Modelling Language (UML); Class-Responsibility-Collaboration (CRC) Cards; Structural Patterns)
- Software Testing: Black-box
- Book Chapter:
Software Engineering by Ian Sommerville (10th Ed., 2015), Chapter 8.1 - Development Testing
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022)
- Software Testing: White-box
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022), Chapter 8 - Code-Based Testing
- Software Testing: Mutation
- Book Chapter:
Introduction to Software Testing by Paul Ammann, Jeff Offutt (2nd Ed., 2016), Chapter 9 - Syntax-Based Testing
- Unified Modeling Language (UML)
- Design Patterns
- Book Chapter:
Design Patterns: Elements of Reusable Object-Oriented Software by Gamma et al. (1st Ed., 1994), Chapter 4 - Structural Patterns
- Week 5 [05/02 - 08/02] (Keywords: Object-Oriented Design; Design Patterns; Creational Patterns; Behavioral Patterns)
- Design Patterns (cont.)
- Book Chapter:
Software Engineering: Theory and Practice by Shari Lawrence Pfleeger, Joanne M. Atlee (4th Ed., 2010), Chapter 6.5 - OO Design Patterns
- Book Chapter:
Object-Oriented Software Engineering Using UML, Patterns, and Java (3rd Ed., 2011/2014), Chapter 8 - Object Design: Reusing Pattern Solutions
- Book Chapter:
Design Patterns: Elements of Reusable Object-Oriented Software by Gamma et al. (1st Ed., 1994), Chapter 3 - Creational Patterns
HOLIDAY [09/02 - 18/02]: Spring Festival / Chinese New Year (NO CLASSES)
- Week 6 [19/02 - 22/02] (Keywords: Bad Design; Code Smells; Technical Debt; Refactoring; Regression Testing)
- Bad Design: Technical Debt
- Book Chapter:
Refactoring for Software Design Smells: Managing Technical Debt by Girish Suryanarayana, Ganesh Samarthyam, Tushar Sharma (1st Ed., 2014), Chapter 1 - Technical Debt
- External Source:
Martin Fowler - Technical Debt
- Bad Design: Code Smells
- Book Chapter:
Refactoring: Improving the Design of Existing Code by Martin Fowler (2nd Ed., 2018), Chapter 3 - Bad Smells in Code
- Book Chapter:
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin (1st Ed., 2008), Chapter 17 - Smells and Heuristics
- Bad Design: Fix - Refactoring
- Book Chapter:
Refactoring: Improving the Design of Existing Code by Martin Fowler (2nd Ed., 2018)
- External Source:
Refactoring.com (Martin Fowler) - Online Refactoring Catalog
- Bad Design: Detection - Regression Testing
- Week 7 [26/02 - 29/02] (Keywords: Team Development; DevOps; CI/CD; Blue/Green Development; Canary Release; Scrum)
- Team Development
- Book Chapter:
Beginning Software Engineering by Rod Stephens (2nd Ed., 2022), Chapter 3 - The Team
- Software Development (Dev) and IT Operations (Ops): DevOps
- Book Chapter:
Engineering Software Products: An Introduction to Modern Software Engineering by Ian Sommerville (1st Ed., 2019), Chapter 10 - DevOps and Code Management
- Book Chapter:
Deployment and Operations for Software Engineers, Len Bass, John Klein (2nd Ed., 2023)
- Continuous Integration (CI) / Continuous Delivery/Deployment (CD)
- Book Chapter:
Engineering Software Products: An Introduction to Modern Software Engineering by Ian Sommerville (1st Ed., 2019), Chapter 10.2 - DevOps Automation
- External Tutorial (Optional):
RedHat - What is CI/CD?
- Blue / Green Deployment
- Canary Release
- Scrum
- Book Chapter:
Software Engineering by Ian Sommerville (10th Ed., 2015), Chapter 3 - Agile Software Development
- Book Chapter:
Engineering Software Products: An Introduction to Modern Software Engineering by Ian Sommerville (1st Ed., 2019), Chapter 2.3 - Scrum
- Book Chapter (Optional):
Software Engineering: A Practitioners Approach by Roger Pressman, Bruce Maxim (9th Ed., 2020), Chapter 3.4 - Scrum
- Book Chapter (Optional):
Essential Scrum: A Practical Guide to the Most Popular Agile Process (1st Ed., 2012)
- Week 8 [04/03 - 07/03] Software Testing (Revisited) (Keywords: Stubs; Spikes; Mocking; Unit Testing; Integration Testing; System Testing)
- Stubs
- Book Chapter:
Introduction to Software Testing by Paul Ammann, Jeff Offutt (2nd Ed., 2016), Section 12.2 - Test Doubles
- Spies
- Book Chapter:
Unit Testing Principles, Practices, and Patterns by Vladimir Khorikov (1st Ed., 2020)
- Mocks
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022), Section 9.2 - Mock Objects and Automated Object Mocking
- Book Chapter:
Introduction to Software Testing by Paul Ammann, Jeff Offutt (2nd Ed., 2016), Section 12.2 - Test Doubles
- Unit Testing
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022), Part 2 - Unit Testing
- Integration Testing
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022), Chapter 12 - Integration Testing
- System Testing
- Book Chapter:
Software Testing: A Craftsman's Approach by Paul C. Jorgensen, Byron DeVries (5th Ed., 2022), Chapter 13 - System Testing
MIDTERM EXAM [07/03, Thursday] (NO LECTURE)
HOLIDAY [11/03 - 15/03]: Spring recess for graduate programs (NO CLASSES)
- Week 9 [18/03 - 21/03] (Keywords: Designing Modules; Interfaces; Model-View-Controller (MVC); User Interfaces (UIs))
- Designing Modules and Interfaces
- Book Chapter:
Domain-Driven Design: Tackling Complexity in the Heart of Software by Evans Eric (1st Ed., 2003), Chapter 5 - A Model Expressed in Software
- Model-View-Controller (MVC) Design Pattern
- User Interfaces (UIs)
- Book:
User Interface Design: A Software Engineering Perspective by Soren Lauesen (1st Ed., 2004)
- Book:
Designing with the Mind in Mind by Jeff Johnson (3rd Ed., 2020)
- Week 10 [25/03 - 28/03] (Keywords: User Interfaces (UIs); User Experience (UX))
- User Interfaces (UIs) (cont.)
- Book:
User Interface Design: A Software Engineering Perspective by Soren Lauesen (1st Ed., 2004)
- Book:
Designing with the Mind in Mind by Jeff Johnson (3rd Ed., 2020)
- User Experience (UX)
- Book:
Measuring the User Experience: Collecting, Analyzing, and Presenting UX Metrics by Bill Albert, Tom Tullis (3rd Ed., 2022)
- Book:
Observing the User Experience: A Practitioner's Guide to User Research by Elizabeth Goodman, Mike Kuniavsky, Andrea Moed (2nd Ed., 2012)
- Week 11 [01/04 - 04/04] System Architecture (Keywords: 3-Tier; Monolith; Event-Driven)
- User Interface (UI) / User Experience (UX) Testing
- Book Chapter:
Object-Oriented Software Engineering Using UML, Patterns, and Java by Bernd Bruegge, Allen H. Dutoit (3rd Ed., 2014), Section 11.4.2 - Usability Testing
- Book Chapter:
User Interface Design: A Software Engineering Perspective by Soren Lauesen (1st Ed., 2004)
- System Architecture: 3-Tier
- Book Chapter:
Fundamentals of Software Architecture: An Engineering Approach by Mark Richards, Neal Ford (1st Ed., 2020), Chapter 9 - Foundations
- System Architecture: Monolith
- Book Chapter:
Fundamentals of Software Architecture: An Engineering Approach by Mark Richards, Neal Ford (1st Ed., 2020), Chapter 9 - Foundations
- System Architecture: Event-Driven
- Book Chapter:
Fundamentals of Software Architecture: An Engineering Approach by Mark Richards, Neal Ford (1st Ed., 2020), Chapter 14 - Event-Driven Architecture Style
HOLIDAY [04/04]: Qing Ming - Tomb Sweeping Day (NO CLASSES) - Continue on Friday [05/04]
- Week 12 [08/04 - 11/04] System Components (Keywords: Frameworks; Object Relational Mappers (ORMs); Micro-services)
- Frameworks and Object Relational Mappers (ORMs)
- Software Architecture - Modern Architectures: Micro-services
- Book Chapter:
Microservices Patterns: With Examples in Java by Chris Richardson (1st Ed., 2018), 2018, Chapter 1 - Escaping Monolithic Hell
- Book Chapter:
Engineering Software Products: An Introduction to Modern Software Engineering by Ian Sommerville (1st Ed., 2019), Chapter 6 - Microservices Architecture
- Week 13 [15/04 - 18/04] (Keywords: Security; Confidentiality; Integrity; Accountability; Authenticity; Design Metrics; Maintenance Metrics)
- Software Security
- Book Chapter:
Software Engineering by Ian Sommerville (10th Ed., 2015), Chapter 13 - Security Engineering
- Book Chapter:
Computer Security: Principles and Practice by William Stallings, Lawrie Brown (4th Ed., 2017), Chapter 1 - Overview
- External Lecture Slides:
ECE 560: Computer and Information Security (Tyler Bletsch, Duke U) - Computer Security Overview
- Software Design & Maintenance Metrics
- Book Chapter:
Software Engineering: A Practitioners Approach by Roger Pressman, Bruce Maxim (9th Ed., 2020), Chapter 23 - Software Metrics and Analytics
- Week 14 [22/04 - 25/04]
PROJECT DEMOS [23-25/04, Tuesday + Thursday] (NO LECTURE)
FINAL EXAM [06-08/05, TBA (3 Hours)]
Grading
- Class Participation: 5%
- Assignments: 20%
- Assignment 1 - Programming: 10%
- Assignment 2 - Interviews: 10%
- Team Project: 40%
- Phase 1: 10%
- Phase 2: 10%
- Phase 3: 15%
- Presentation: 5%
- Midterm: 15%
- Final: 20%
Other Reading Resources
Quick / Easy Reads:
- Tidy First?: A Personal Exercise in Empirical Software Design, Kent Beck (1st Edition), 2023, O'Reilly
-
OO in One Sentence: Keep it Dry, Shy, and Tell the Other Guy. Hunt, A., Thomas, D., 2004. IEEE Software, 21(3)
-
Managing Technical Debt. Allman, E., 2012. Communications of the ACM, 55(5)
Other Materials / Resources
|