Overview
Building, delivering and maintaining successful software products requires more than being good at programming. Software engineering encompasses the tools and processes that we use to design, construct and maintain programs over time in coordination with other people. Development processes that work well for a single developer do not scale to large or even medium-sized teams. Similarly, development processes that work well for quickly delivering a one-off program to a client will cause chaos when applied to a codebase that needs to be maintained and updated over months and years. This class will begin to explore these tradeoffs throughout the entire software development lifecycle, with a particular focus on how these decisions affect the quality of the resulting software.
This class will serve as an introduction to the field of software engineering, covering key topics such as:
- Requirements gathering and specification
How to make sure that you build the product that your customer really wants - Designing code for reuse, for readability, and for scale
How to avoid reinventing the wheel? What makes code readable? Where does performance fit into designs? When do we decide when to revisit old design decisions, and how do we replace them? Can we avoid the mistakes that past developers have made? - How to organize your development process to collaborate effectively
How do we communicate our designs with others? How do we structure and coordinate development activities? How do we measure the performance of these processes, and tweak them over time? - How to ensure that your code works, is secure, and broadly speaking, “does the right thing”
How do we measure different quality attributes like usability, scalability and performance? How do we minimize the cost of defects? How do we automatically test complex systems? Can we automatically prove the absence of some kinds of defects?
Course Outcomes
- Students will be able to define and describe the phases of the software engineering lifecycle (requirements, design, implementation, testing, deployment, maintenance)
- Students will demonstrate an ability to use key processes and technologies in modern software development and will be able to explain the purpose of those processes and technologies.
- Students will be able to apply instances of major tools used for elementary software engineering tasks in the context of web applications.
- Students will design and implement a portfolio-worthy software engineering project in a small team environment that can be showcased to recruiters.
Acknowledgements
This class and its contents were inspired by Software Engineering courses at various institutions, including:
- Columbia’s Software Engineering Course, COMS W4156
- CMU’s Software Engineering Course, 17-313
- GMU’s Web App Development Course, SWE 432
- NCSU’s Software Engineering Course, CSC 326 and its iTrust term project, also Chris Parnin’s DevOps course.
- Past iterations of CS4530 at Northeastern: Spring 2025, Fall 2024, Spring 2024, Fall 2023, Spring 2023, Fall 2022, Spring 2022, Spring 2021
- Past iterations of CS5500 at Northeastern, as prepared by Mike Weintraub, Mike Shah, Frank Tip and Joydeep Mitra (Spring 2024).
The design of this website is taken from Kevin Lin’s Just the Class Jekyll template.