MPCS 51200 Introduction to Software Engineering (Winter 2023)

Section 1
Instructor(s) Almhana, Rafi (ralmhana)
Location JCL 011
Meeting Times Friday 2:30pm - 5:20pm
Fulfills Elective Specialization - Software Engineering (SE-1) Specialization - Software Engineering (SE-2)

Syllabus

Course Description

Writing first-class software requires top-notch architecture, design, and coding skills, but successful software project execution--from identifying the need to providing support--depends on many factors besides technical prowess.   This course surveys the key practices and processes that help ensure successful projects. It provides an introduction to central activities of software engineering other than just coding, such as planning, requirements, testing, and management. It balances this discussion of typical engineering activities against the development process models in which they take place -- specifically, it addresses the tension between traditional plan-driven approaches and adaptive agile techniques. By examining the underlying principles of major development models, it shows how those principles to address (or fail to address) the various problems encountered by project teams.  Students who complete this course will gain a solid understanding of both plan-driven and agile software development principles and how to negotiate between them in different contexts.

 

The project planning topic of the course begins with project inception and interpretation of the business case and proceeds through project deployment and support. The chief emphasis is on understanding the many interrelated dimensions of a project. It addresses the bread-and-butter planning topics, such as estimation and scheduling, and surveys the dominant models for these tasks. It explains the key metrics necessary for successful project control and the means of collecting and interpreting them. Significant time is spent on the topic of risk and risk management.  The requirements topic introduces a structured framework for thinking about software requirements. It teaches not only how to elicit and capture requirements (an art in itself), but also how to assign appropriate attributes to requirements to enable effective prioritization, management, and validation. The quality topic discusses practices that have been shown to reduce software defects. It examines requirements validation and the traceability of project decisions from user needs, through requirements, to design decisions, implementation, and testing. It shows how key architectural decisions affect product quality and offers guidelines to determine which decisions must be made upfront and which are better deferred. Formal quality verification processes, such as reviews and inspections are explained, as are best practices for designing and administering tests. Finally, change control and configuration management practices are reviewed.

 

Course Contents

    Lean software development principles

    The seven wastes of software development

    Agile methods: Scrum, XP, Kanban, Feature-Driven Development

    Estimation of size and effort

    Requirements management, elicitation, analysis, specification, verification and validation

    Software testing (dynamic)

    Software inspection

    Iterative and incrementation strategies

    Risk management

    Software capability maturity

    Software project metrics

    Change management

    Software development life cycles

    When -- and when not -- to use various approaches and techniques

    Software process management and improvement

    Transforming software organizations

 

Coursework

  • Final Exam                                                 
  • Mid-term Exam                                            
  • Assignments                                              
  • Participating                                      

Course Textbooks

  • Software Engineering 10th Edition by Ian Sommerville
  • Software Engineering: A Practitioner's Approach, 9th Edition by Roger Pressman, Bruce Maxim

Course Prerequisites

Core Programming

Other Prerequisites

This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/.

Overlapping Classes

This class is scheduled at a time that does not conflict with any other classes this quarter.

Eligible Programs

Masters Program in Computer Science MS in Computational Analysis in Public Policy (Year 2) MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 1: Research-Oriented) Bx/MS in Computer Science (Option 2: Professionally-oriented - CS Majors) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors)