The University of Chicago
Department of Computer Science

MCPS 51205 Course Syllabus

Topics in Software Engineering

Fall 2018

EVERYONE:  Sign up on Piazza here

Instructor:        Mark Shacklette
Office:              Young 208A
Office Hours:   3:30 PM - 5:30 PM & by appt.

email:    mark@cs.uchicago.edu (read hourly or so)
               mshack@post.harvard.edu (read hourly or so)

 Teaching staff:

TA John Hadidian-Baugher (jhadidianbaugher-at-gmail-dot-com)

TA Office Hours: See Piazza
 
SUBJECT COURSE TITLE TIME BUILDING
324 51205 Topics in Software Engineering Tuesday, 5:30pm Ryerson 277

I. TEXT AND MATERIALS

Texts: Required (Basic Knowledge of Java OR C++ is assumed)

Applying UML and Patters:  An Introduction to Object-Oriented Analysis and Design and Iterative Development, 3rd ed., Craig Larman, Prentice Hall, 2005, ISBN:  0131489062

Disciplined Agile Delivery:  A Practitioner's Guide to Agile Software Delivery in the Enterprise, Ambler & Lines, IBM, 2012, ISBN:  0132810131

Texts: Optional Text (Reading will be assigned and is highly recommended but optional)

Software Architecture in Practice, 3rd ed., Bass, Clements, Kazman, Addison Wesley, 2013, ISBN:  0321815734

Design Patterns, Gamma, et. al., Addison Wesley, 1995, ISBN: 0201633612

Texts: Highly Recommended 

UML Distilled, 3rd ed.,  Martin Fowler, Addison Wesley, 2003, ISBN: 0321193687

Code Complete, 2nd ed.,  Steve McConnell, Microsoft Press, 2004, ISBN: 9780735619678

Object Oriented Analysis and Design, 3rd ed., Grady Booch, Addison Wesley, 2007, ISBN:  020189551X

Software Architecture:  Perspectives on an Emerging Discipline, Shaw & Garlan, Prentice Hall, 1996, ISBN: 0131829572

Refactoring to Patterns, Kerievsky, Addison Wesley, 2004, ISBN: 0321213351

Texts: Recommended

Pattern-Oriented Software Architecture:  A System of Patterns, Buschmann, Meunier, et. al., Wiley, 1996, ISBN: 0471958697

Developing Software with UML, Bernd Oesterich, Addison-Wesley, 1999, ISBN: 0201398265

Building Enterprise Information Architectures, Melissa Cook, Prentice Hall, 1994, ISBN: 0134402561

Enterprise Service Oriented Architectures, McGovern, Sims, et. al., Springer 2006 ISBN: 140203704X

Developing Object Oriented Software, OOTC, Prentice Hall, 1996, ISBN: 0137372485

Object-Oriented Software Engineering, Ivar Jacobson, Addison Wesley, 1992, ISBN: 0201544350

The Unified Modeling Language Reference Manual , James Rumbaugh et. al., Addison Wesley, 1991, ISBN: 020130998X

The Unified Software Development Process , Ivar Jacobson et. al., Addison Wesley, 1999, ISBN: 0201571692

The Unified Modeling Language User Guide, 2nd ed , Grady Booch, et. al., Addison Wesley, 1999, ISBN: 0321267974

The Patterns Handbook,  Linda Rising, ed., Cambridge, Cambridge University Press, 1998

Refactoring:  Improving the Design of Existing Code, Martin Fowler, et. al., Addison Wesley, 1999, ISBN: 0201485672

Pattern Languages of Program Design, Vol. 1, James Coplien,  DougSchmidt, Reading, Mass: Addison-Wesley, 1995

AntiPatterns:  Refactoring Software, Architectures, and Projects in Crisis, Brown, et. al., Wiley, 1998, ISBN: 0471197130

Object-Oriented Software Construction, Second Edition , Bertrand Meyer, Prentice Hall, 1997, ISBN: 0136291554

The Timeless Way of Building, Christopher Alexander, New York: Oxford, 1979

A Pattern Language, Christopher Alexander, et. al., New York: Oxford, 1977

Software Architecture:  Perspectives on an Emerging Discipline, Shaw & Garlan, Prentice Hall, 1996, ISBN: 0131829572

Use Case Driven Object Modeling with UML , Doug Rosenberg, et. al., BAddison Wesley, 1999, ISBN: 0201432897
 

Language Related Texts:

JAVA:

Beginning Java 2 , Horton, Wrox Press, 1999, ISBN:  1861002238

Thinking in Java , Bruce Eckel, Prentice Hall, 1998, ISBN:  0136597238

Java I/O , Harold, O'Reilly, 1999, ISBN: 1565924851

The Well-Grounded Java Developer, Evans et. al., Manning, 2012, ISBN: 1617290068


C++

Modern C++ Design:  Generic Programming and Design Patterns Applied, Alexandrescu, Addison-Wesley, 2001, ISBN:  0201704315

Accelerated C++, Koenig & Moo, Addison-Wesley, 2000, ISBN:  020170353X

Programming:  Principles and Practice Using C++,  Stroustrup, Addison-Wesley, 2009 (beginner's introduction to C++ programming by l'homme lui-mÍme)

Modern C++ Design: Generic Programming and Design Patterns Applied, Andrei Alexandrescu, Addison-Wesley, 2001

Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference, Langer and  Kreft, Addison-Wesley, 2000

C++ Cookbook, Stephens et. al., O'Reilly, 2006

II. PREREQUISITE:

Solid familiarity with either Java or C++ will be assumed.   

III. COURSE DESCRIPTION

This course provides hands-on experience in the architecture and design of object-oriented software systems and a review of best practices for the communication of that design.  Issues in the landscape of software design, including complexity, constraints, progressive discovery, and limitations in communication will be explored.  Specific topics and projects will modulate year by year, but generally, our discussion of software design will be understood to operate within the object-oriented paradigm.

In this course, students will be organized into teams and each team will be provided with a set of (partial) requirements and will be responsible for the analysis, design, design documentation, and implementation in source code of a project that constitutes a complex software system.  Each team of students will work through requirements analysis, documentation of design using UML, and implementation, and techniques and tools will be provided in order to facilitate the delivery.  The description of the current project may be found here.

The progression of design will be peer-reviewed by the student teams.  We will work within an "Agile" design and implementation framework and adopt agile approaches to lean design.  One of our efforts will be to dispel the myth that design is not performed within an agile environment.

During the course and lectures, we will cover the following topics:

Why is design important, even in an agile environment?
Attributes of good design: coupling, cohesion, law of Demeter, generic solutions vs. specific solutions
What is the role of modeling in software development?
Documenting and communicating software design using the Unified Modeling Language notation (UML)
Lean thinking and lean modeling
Design guidelines for quality, interoperability, modifiability, performance, security, testability, and maintainability
The role of patterns in designing software and design refactoring
Abstract data types, classes, objects, inheritance & composition
Decomposing systems into recognizable patterns

IV. LEARNING OBJECTIVES

This course will enable students to understand:

A. Develop a full command of the UML and object-oriented design
B. Object abstraction and design: objects, classes, inheritance and composition
C. Unit testing and Test Driven Design
D.  Design and develop a non-trivial system using best practices in software design and development
E. Understand the benefits of object-oriented analysis and design, concepts and processes
F. Become familiar with formal design tools for object orientated analysis and design

V. ACADEMIC INTEGRITY

Students are expected to have read and understood the University's policy on Academic Integrity. This policy is detailed in the Student Manual of University Policies and Regulations, available online at http://www.uchicago.edu/student/manual/academic_honesty.html.
 

VI. METHOD OF INSTRUCTION

Methods include lecture and project-related assignments. Your team work should be stored using a version-control system that allows us to easily view files and folders that you create.  One possibility is to use Subversion.
 

VII. OTHER COURSE INFORMATION

Attendance:

No formal attendance taken. There may be information presented in class that is not in the texts. You will find the lectures helpful in doing the laboratory exercises.

Make-up Work:

Students are expected to read the assigned texts before class in order to be able to full participate in the discussions and course activities.
 

VIII. METHOD OF EVALUATING STUDENT PROGRESS

Assigned work evaluated as follows:

4 Iteration Deliverables (5 points each)
20%
Project Faculty Evaluation
35%
Project Peer Evaluation (Instructions here)
25%
1 Final Exam
20%
Total:
100%    

Grading scale:
95-100:  A
90-94:    A-
87.6-89:    B+
83-87.5:    B
80-82.9:    B-
76-79:    C+

Iteration Deliverables will be graded on a 5-point basis.  Deliverable due dates are noted on the syllabus schedule in RED.  All deliverables are due by 5:00 pm on the due date.

All assignments are due as specified on this syllabus.  Each team will be evaluated on the basis of the presentation of iteration deliverables and the final deliverable.  Lateness will suffer a penalty of one point per day for all deliverables.

The course project will be due for graduating students on December 4th, 2018, on December 11th, 2018 for non-graduating students.

NB:  The end of the quarter is the time at which the final grade you have earned through your work in the quarter is recorded with the registrar.  There is no extra credit offered in this course, either at the beginning or at the end.  If you are dissatisfied with the grade you have earned at the end of the quarter, your only options will be to retake the course the next time it is offered, or accept the grade you earned.

NB: The instructor reserves the right to alter the course contents, dates, times or percentage of credit based on time allowed and class progress through the course material. The instructor also reserves the right to curve grades if he deems it in the best interest of the majority of students.

IX. COURSE SCHEDULE

The following abbreviations reference the following works:
 
Abbreviation Text
Fowler UML Distilled
Gamma Design Patterns
Larman
Applying UML and Patterns
Bass
Bass et. al. Software Architecture in Practice
(This text is optional and in italics to so indicate)
Ambler
Disciplined Agile Delivery

*Articles starred may be found on the cluster under my pub directory (/stage/classes/archive/2018/fall/51205-1/required.reading)
 
Class/Date Lecture Topics Required Reading Schedule Activities and Deliverables
Class 1
October 2

Course Introduction
Team Orientation
Whatever happened to Design?
Design Thinking

Brooks, No Silver Bullet*
Ambler:  1
Team Formation & Role Assignments
Class 2
Class Rescheduled
Saturday, October 13
(SATURDAY 1:15 - 4:00 PM, Crerar 298)
Zachman Architecture Framework:  Perspectives & Convergence and Divergence
Introduction to UML
Requirements Analysis in the 21st Century
Use Cases and User Stories
Beyond Scrum*
Boehm.Turner.pdf*
Bass: 1, 2, 3, 16
Larman: 1-7
Ambler:  2-3, 6

Class 3
October 16
Review of OO Fundamentals: 
Abstraction, Inheritance,
Composition
Classes and Objects
CRC Cards
Bass:  13, 15, 17
Larman: 8-14, 16
Ambler:  5-6, 8-10, 12
Standish Group Chaos Report*
Iteration I:  Initial Requirements Landscape
Class 4
October 23
Classification
UML Static Modeling
Test Driven Development

UML Dynamic Modeling
Bass:  4-6
Larman:  17-22
Ambler:  13-15, 17
Standish Group Chaos Update 2009*
Iteration II
High Level Architecture and Initial Domain Model
Class 5
October 30

Topics 1:  Introduction to Enterprise Architecture
Larman 33-35
Ambler:  20

Class 6
November 6
Topics 2:  Distributed Architectures:
Asynchronous Communication



Bass 7-9
Ambler:  16, 18-19

Iteration III:  Team Delivered
Team Scrums/Progress Reports
Class 7
November 13
Topics 3:  Distributed Architectures:
Synchronous Communication
Bass 10-12
Larman:  15, 23-26
Team Scrums/Progress Reports
Class 8
November 20
Topics 4:  Microservices:  Concepts and Design
Larman 36-39
Ambler 21
Iteration IV:  Team Delivered
Team Scrums/Progress Reports
Class 9
November 27
Topics 5:  Concurrency
Multi-threading

Best Practices in Database Design

Refactoring Design

Team Scrums/Progress Reports
Class 10
December 4
Student Project Presentations

Iteration V: Final Deliverable Team Delivered (All Teams)
Class 11
December 11
Final Exam
Study Guide



Final Presentation Schedule

EVERYONE:  Sign up on Piazza here