|   Software Engineering (ECE 651K)Spring 2023-2024 (14 weeks, 35 hours)Course Period: January 8 - April 25, 2024	 
		
		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.eduLectures: Tuesday / Thursday @ 10:15-11:30 (Classroom: WDR 1003)Office Hours: Thursday @ 09:00-10:00 (Office: WDR 2106) 	                   
		Teaching Assistant (Duke U. / Remote): Jing Wang (Office: Zoom), jing.wang [at] duke.eduOffice Hours: Monday / Tuesday / Wednesday / Thursday @ 16:00-17:00 (IB2072-2B25) 		
		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.Office Hours: Monday / Tuesday / Wednesday / Thursday / Friday @ 21:00-22:00 (Zoom) 
 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 BooksThere is no official textbook for this course. Still, the following books can be used as references.
 Supplementary Books:
 	    
	
     
	
      	
		Java Programming:
		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 HallUML 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)
		
		A Concise Introduction to Software Engineering: With Open Source and GenAI, Pankaj Jalote (1st Edition), 2025, Springer
		
		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      
		 	
	
      		   
	Requirements Specifications / Engineering:Introduction to Java Programming and Data Structures, Y. Daniel Liang (12th Edition), 2020/2021, Pearson [ Lecture Videos ]Java - How to Program: Early Objects, Paul Deitel, Harvey Deitel (11th Edition), 2018, PearsonStarting Out with Java: From Control Structures through Objects, Tony Gaddis (7th Edition), 2019, PearsonEffective Java, Joshua Bloch (3rd Edition), 2017, Addison-WesleyJava: The Complete Reference, Herbert Schildt (12th Edition), 2021, McGraw HillJava Performance: In-Depth Advice for Tuning and Programming Java 8, 11, and Beyond, Scott Oaks (2nd Edition), 2020, O'ReillyCore Java - Volume 1: Fundamentals, Cay Horstmann (12th Edition), 2021, OracleCore Java - Volume 2: Advanced Features, Cay Horstmann (12th Edition), 2022, OracleCore Java for the Impatient, Cay Horstmann (3rd Edition), 2022, Addison-Wesley 	
      		   
	Design Patterns:
	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   
	 	
   
   
	Software Testing:
	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-WesleyApplying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Craig Larman  (3rd Edition), 2004, PearsonDesign 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
	 	
      		
	Refactoring & Technical Debt:Introduction to Software Testing, Paul Ammann, Jeff Offutt (2nd Edition), 2016, Cambridge UniversitySoftware Testing: A Craftsman's Approach, Paul C. Jorgensen, Byron DeVries (5th Edition), 2022, Auerbach / CRCEssentials of Software Testing, Ralf Bierig, Stephen Brown, Edgar Galvan, Joe Timoney (1st Edition), 2021, Cambridge UniversitySoftware 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, ManningxUnit Test Patterns: Refactoring Test Code, Gerard Meszaros (1st Edition), 2007, Addison-Wesley 	
	
	Agile Software Development:
	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     
	 	
	
	User Interface (UI) / User Experience (UX) Design:
	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
	 	
	      
	
  
	Software Architecture:User Interface Design: A Software Engineering Perspective, Soren Lauesen (1st Edition), 2004, Addison-WesleyDesigning with the Mind in Mind, Jeff Johnson (3rd Edition), 2020, Morgan KaufmanAbout Face: The Essentials of Interaction Design, Alan Cooper, Robert Reimann, David Cronin, Christopher Noessel	 (4th Edition), 2014, WileyThe Design Of Everyday Things, Don Norman (1st Edition), 2013, Basic BooksMeasuring the User Experience: Collecting, Analyzing, and Presenting UX Metrics, Bill Albert, Tom Tullis (3rd Edition), 2022, Interactive TechnologiesObserving the User Experience: A Practitioner's Guide to User Research, Elizabeth Goodman, Mike Kuniavsky, Andrea Moed (2nd Edition), 2012, Morgan KaufmannThe 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  	
	Microservices: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     
	 	
	
	Computer / Software Security:Microservices Patterns: With Examples in Java, Chris Richardson (1st Edition), 2018, ManningStrategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture, Vaughn Vernon, Tomasz Jaskula (1st Edition), 2021, Addison-WesleyBuilding Microservices: Designing Fine-Grained Systems, Sam Newman (2nd Edition), 2021, O'ReillyMonolith to Microservices, Sam Newman (1st Edition), 2019, O'Reilly 	
	
	
       
	Computer Security: Principles and Practice, William Stallings, Lawrie Brown (4th Edition), 2017, PearsonSecurity Engineering: A Guide to Building Dependable Distributed Systems, Ross Anderson (3rd Edition), 2020, WileySoftware Security: Building Security In, Gary McGraw (3rd Edition), 2006, Addison-WesleyBuilding Secure Software: How to Avoid Security Problems the Right Way, John Viega, Gary R. McGraw (1st Edition), 2001/2008, Addison-WesleyComputer Security, Dieter Gollmann (3rd Edition), 2011, WileyFuzzing: 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 HillHacking: The Art of Exploitation, Jon Erickson (2nd Edition), 2008, No StarchThe Tangled Web: A Guide to Securing Modern Web Applications, Michal Zalewski (1st Edition), 2011, No StarchBug 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 651KIntroduction 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 DefinitionSoftware Process Models: Waterfall vs. AgileTask 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 DeploymentCanary ReleaseScrum 
					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 PatternUser 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 ResourcesQuick / 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
 |