CS4530, Spring 2023: Fundamentals of Software Engineering
Information about Project Final Deliverables and Posters/Demos Now Available
The final project deliverables are now published. These include details regarding submission of the final project (i.e., code/testing, report, posters and demos). Canvas assignments for these are now available too.
We have also provided a tutorial on course website with details about how to setup your continuous integration and continuous deployment pipeline for the project.
Each instructor will also provide detailed list of expectations for the final demos. Those can be viewed on piazza.
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. Software engineering has been said to consider the “multi person development of multi version programs.” 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 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 be able to explain the role of key processes and technologies in modern software development.
- Students will be able to productively apply instances of major tools used in elementary SE tasks.
- Students will design and implement a portfolio-worthy software engineering project in a small team environment that can be publicly showcased to recruiters.
Course Delivery
The course will be delivered in a “traditional” lecture style. Prof Wand’s section will be entirely virtual, and the other sections will be entirely on-the-ground, with no virtual participation option. You must attend the section for which you have registered, and you may not partner with students in other sections for the term project.
Section | Instructor | Meeting Time | Meeting Place |
---|---|---|---|
1 | Prof Bhutta | MR 11:45 am - 1:25 pm | Knowles Center 010 |
2 | Prof Bhutta | T 11:45 am - 1:25 pm & R 2:50 pm - 4:30pm | Robinson Hall 409 |
3 | Prof Bhutta | MW 2:50 pm - 4:30 pm | West Village H 108 |
4 | Prof Vitek | TF 1:35 pm - 3:15 pm | West Village G 106 |
5 | Prof Vitek | TF 3:25 pm - 5:05 pm | Robinson Hall 109 |
6 | Prof Wand | W 6:00 pm - 9:20 pm | Online |
7 | Prof Bhutta | TF 9:50 am - 11:30 am | Robinson Hall 109 |
Course Project
The assignments and project for this class are designed to mirror the experiences of a software engineer joining a new development team: you will be “onboarded” to our codebase, make several individual contributions, and then form a team to propose, develop and implement a new feature. The codebase that we’ll be developing on is a remote collaboration tool called Covey.Town. Covey.Town provides a virtual meeting space where different groups of people can have simultaneous video calls, allowing participants to drift between different conversations, just like in real life. Covey.Town is inspired by existing products like Gather.Town, Sococo, and Gatherly.IO — but it is an open source effort, and the features will be proposed and implemented by you! All implementation will take place in the TypeScript programming language, using React for the user interface.
At the end of the semester, the instructors and TAs will evaluate all of the student projects, and select the best (in terms of usability, code quality, test suite quality, and overall design) to merge into the open source Covey.Town codebase on GitHub repository. No additional course credit will be awarded to these teams, but these students will have the opportunity to receive public recognition for their project (in the form of a pull request merged into our repository and acknowledgements in the project’s contributors list).
The project will provide hands-on experience to complement the skills taught in this class, requiring students to be able to:
- Work effectively in a small team
- Enumerate and prioritize development tasks
- Propose, design, implement and test a new feature in an existing non-toy software application
- Write code that their team members can read and review
- Review teammates’ code
- Analyze a proposed software architecture
- Use relevant software tools, such as:
- TypeScript
- Visual Studio Code (or similar IDE)
- Git
- Mocha and Jest
- Twilio’s Programmable Video API
- Postman
Select projects from Spring 2022 are hosted in our project showcase.
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: Fall 2022, Spring 2022, Spring 2021
- Past iterations of CS5500 at Northeastern, as prepared by Mike Weintraub, Mike Shah and Frank Tip.
This website is built using Kevin Lin’s Just the Class Jekyll template. The term project, Covey.Town, is built using code from the Clowdr open source project.