MPCS 51205 Topics in Software Engineering (Autumn 2018)

Section 1
Instructor(s) Shacklette, Mark (jmshackl)
Location Ryerson 277
Meeting Times Tuesday 5:30pm - 8:30pm
Website: https://www.classes.cs.uchicago.edu/archive/2018/fall/51205-1/syllabus.html
Fulfills Elective Specialization - Software Engineering (SE-2)

Syllabus

This course is an intermediate approach to applied software design and development methods for use in creating efficient, reusable, and modular software.  This course is offered annually but content and focus change from year to year.  Methods we investigate include: distributed systems, architectures including microservices, event-driven architecture, Hybrid Transactional/Analytical Processing; software frameworks and container-based software development; and advanced techniques including multi-threading and data design.  A heavy focus is on design and creativity and what constitutes creative design.

This course provides hands-on experience in the architecture and design of 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.  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, expression of design using a modeling language, and implementation, and techniques and tools will be provided in order to facilitate the delivery.  
 
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
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
Decomposing systems into recognizable patterns

Course Prerequisites

Core Programming

Other Prerequisites

Knowledge of Java and/or C++

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 53001-2 -- Databases
  • MPCS 52011-2 -- Introduction to Computer Systems
  • MPCS 52011-1 -- Introduction to Computer Systems