Foundations of Software Engineering

"Plan, implement, iterate" -- Your Instructor

Course Information

  • Course Number: Foundations of Software Engineering
  • Semester: Fall 20
  • Piazza: Forum Board
      Use piazza instead of e-mail for all course related matters
    • This way all course staff can answer questions
    • Class as a whole can participate and learn in discussions
    • Code also formats better nicely pasted in
    • (Linking your github is also easy for private posts)
  • Section 1: CS 5500
    • Schedule: Module Released: Monday(Lecture Review && office hours) and Wednesday (Lab Review && Office hours)
    • Location: NuFlex
    • Teams Link for Live Classes at 2:50-4:30pm EST: Microsoft Teams Link


  • Instructor: Mike Shah
  • E-mail: mikeshah( a t )Northeastern{dot}edu
    • Use e-mail primarily for personal matters
    • e.g. I have a co-op interview and need to reschedule XYZ
    • e.g. I am away for a conference on date X to date Y
    • e.g. I am away for a doctors visit.
    • (Read How to send an e-mail)
  • Office: Nightingale 132A
  • Student Hours: In Location Online
    • Review course material with me and ask questions
    • Date/Time: By appointment
    • Sign up for a 15-30 minute appointments arranged by e-mail on Google Hangouts here
Teaching Assistant(s)
Rahul Toppur toppur.r (a t) northeastern . edu
  • Hours/Location listed on piazza under Resources/Staff
Amit Mulay (a t) northeastern . edu
  • Hours/Location listed on piazza under Resources/Staff

Schedule/Road Map

The following is our tentative syllabus for the course, some changes should be expected throughout the semester. I will announce in class lecture, piazza, or through e-mail any major changes.

  • To get all of the assignments/activities for the course, you must first click the following link: Course Monorepo Do not do a 'git pull' until class starts (Occasionally I make changes/spelling corrections)
Lecture and Readings Assignments Note(s)
1 Monday - September 07, 2020
  • Lecture outline
    • The C++ Language
    • Why C++ for this Course?
    • The advantage of C++
    • The disadvantage of C++
    • How to Learn C++
    • Begin Module!
A1 Released (Due Sept. 16 Anywhere on Earth(AOE))

Lab 1 Out(Due. Sept 16 AOE)
First week of classes, welcome back!
2 Monday - September 14, 2020
  • Lecture outline
    • Programming Paradigms
    • Object-Oriented Programming
    • C++ Project Structure
    • Make
    • Third Party Libraries
    • Begin Module!
A2 Out (Due Sept. 25)

Lab 2 out (Due Sept. 23 AOE)
-- --
3 Monday - September 21, 2020
  • Lecture outline
    • Object Oriented Programming
    • Inheritance vs Composition
    • Decoupling
    • Unified Modeling Language (UML)
    • Design Patterns
    • Creational Design Pattern - Singleton
    • Structural Design Pattern - Adapter
    • Behavioral Design Pattern - Iterator
    • Begin Module!
Lab 3 out (Due. Sept. 30 AOE)
-- --
4 Monday - September 28, 2020
  • Lecture outline
    • Software Development Life Cycle
    • Waterfall and Agile
    • Begin Module!
A3 Released (Due Oct. 9 Anywhere on Earth(AOE))

Lab 4 out (Due Oct. 7 AOE)
-- --
5 Monday - October 05, 2020
  • Lecture outline
Lab 5 out (Due. Oct. 14 AOE)
-- --
6 Monday - October 12, 2020
  • Lecture outline
    • Testing in C++
    • Writing a Good Test
    • Test-Driven Development
    • Structural Testing
    • Black Box Testing
    • Functional Testing
    • White Box Testing
    • RAII
    • Smart Pointers
    • Code Coverage
    • C++ Testing Frameworks
    • Begin Module!
A4 Released (Due Oct. 26)

Lab 6 out (Due Oct. 21 AOE)
No Monday class (Oct. 12 is holiday)
7 Monday - October 19, 2020
  • Lecture outline
    • Program Analysis
    • Static Analysis
    • Dynamic Analysis
    • Code Refactoring
    • cppcheck
    • clang-tidy
    • Project Overview
    • Begin Module!
Lab 7 out (Due Oct. 28 AOE) Exam Study Guide
8 Monday - October 26, 2020
  • Lecture outline
    • Exam -- Opens the 25th, closes the 30th
    • Exam is short answer and multiple choice
    • Exam is open book, open notes, but you must complete it individually
    • (i.e. no human resource, forum board, etc. can be used)
    • You will have 180 minutes to complete the exam once you start.
    • Log onto Canvas to take the exam, there is nothing in this module.
    • Begin Module!
Complete your exam! No large group discussion, but there will be office hours
9 Monday - November 02, 2020
  • Lecture outline
    • Networking
    • Client Server Model
    • UDP and TCP
    • Sockets
    • Begin Module!
Lab 8 out(Due Nov. 11)

Project repository out!
-- --
10 Monday - November 09, 2020
Lab 9 out(Due Nov. 18) No Live session on Monday--Holiday (Veteran's day)
11 Monday - November 16, 2020
  • Lecture outline
    • Creational Design Patterns
    • Structural Design Patterns
    • Begin Module!
Lab 10 out(Due Nov. 25)
-- --
12 Monday - November 23, 2020
Lab 11 out (Due Dec. 2) No Wednesday Live Session (Holiday--Thanksgiving)
13 Monday - November 30, 2020
Lab 12 out (Due. Dec. 9)
-- --
14 Monday - December 07, 2020
  • Lecture outline
    • Code Review
    • Course Wrap up
    • Trace Evaluation
    • Remaining Logistics
    • Begin Module!
-- --
Last day of class :(

Course Description

In short, this is a project-based class where we will spend the first few weeks of the semester learning software engineering best practices. Then you will work as a group to develop a large project.

Registrar Description: Covers the foundations of software engineering, including software development life cycle models (e.g., waterfall, spiral, agile); requirements analysis; user-centered design; software design principles and patterns; testing (functional testing, structural testing, testing strategies); code refactoring and debugging; software architecture and design; and integration and deployment. Includes a course project where some of the software engineering methods (from requirements analysis to testing) are applied in a team-based setting. Requires admission to MS program or completion of all transition courses.

Course Objectives

By the end of this course, you will:

  • Learn about the Software Development Lifecycle.
  • Learn about effective design patterns (and antipatterns).
  • Gain experience building larger software.
  • Gain experience writing tests.
  • Learn a few specific tools(e.g. git) that will be relevant to your professional career.


There will be no required textbook for this course. However, these resources are recommended.

Open Source Applications Software Testing and Analysis API Design for C++ The Pragmatic Programmer


  • Undergraduate level CS 5010 Minimum Grade of D or Graduate level CS 5004 Minimum Grade of C
  • or Graduate level CS 5010 Minimum Grade of C

Academic Integrity and Non-Discrimination

Students and instructors are to follow the Northeastern policies on these important issues.

  • Northeastern Non-Discrimination Policy - This classroom is a safe space for the instructor and students to talk about ideas, share viewpoints, and learn.
  • Northeastern Academic Integrity Policy - You only cheat yourself if you are not honest. Most often cheating occurs when an individual falls behind or perhaps has other circumstances occurring in their life. Please consult the instructor before ever considering cheating.
    • If you are caught cheating I have to report the violation. My official policy is you receive a 0 in the course. Always remember, if you use any external sources, you must cite them.
  • Student Code of Conduct: Students and instructors will follow the following guide for how we conduct ourselves. This is to create a respectful environment where everyone can learn.

Make-Up Policy

  • Students participating in varsity athletics(this does not include club sports or intramurals) or other University sanctioned events may have the need for a make-up. Please contact me in advance of such events, so that appropriate accommodations can be made.
  • Occasionally, other life events and circumstances occur that were not planned. If this is the case, please e-mail me privately.
  • E-mailing me asking for extensions just because is unfortunately not fair to your classmates. The 10% penalty for each day late has to be enforced so I do not get taken advantage of.


Part of what makes Northeastern University unique, is our diverse cohort of students, faculty, and staff. In order to support this, Northeastern is committed to providing equal access and support to all qualified students through the provision of reasonable accommodations so that each student may fully participate in the University experience.

  • If you have a disability that requires accommodations, please contact the Student Accessibility Services office at or (617) 373-2675 to make an appointment with the Disability Resource Center representatives in 20 Dodge Hall to determine appropriate accommodations.
  • We Care is another university resource for helping tackle challenges you may be facing. Asking for help is okay!

Lateness and Attendance Policy

Students who do well in this course tend to show up to the course consistently, participate, and engage with their peers. Come to class, come on time, and build good habits! In-Class activities that are not attended are a zero.


Northeastern Univerity provides resources for student healthcare and general wellness. Please visit Northeastern Health and Counseling Services for your needs. While university can be difficult at times, please do take care of yourself. It is okay to seek help and take a break. Please communicate with your instructor, advisor, and officials at the university if you just need a mental break.

Assessment/Course Polices

Please find below the grading distribution that will be used for this course. You will find the grade you earn in this course on blackboard.

  • In-Class Activity: (5%)
  • In-Class Labs:     (20%)(Each equally weighted)
    • Labs are due before class of the following week.
  • Exam(s):           (15%)
  • Assignments:       (20%)(Each equally weighted)
  • Final Project:     (40%)

  • The grade system follows the University Grading System.
    • A  = 95 – 100
    • A- = 91 – 94.99
    • B+ = 87 – 90.99
    • B  = 83 – 86.99
    • B- = 80 – 82.99
    • C+ = 77 – 79.99
    • C  = 73 – 76.99
    • C- = 70 – 72.99
    • D+ = 67 – 69.99
    • D  = 63 – 66.99
    • D- = 60 – 62.99
    • F  =  0 – 59.99
  • In the event of a sick/snow day (i.e. we miss a lab or in-class activity) the weight of each assignment increases (There may also be shuffling of course material if we are interrupted).
  • The expectation is that the assignments are fair but difficult, so you should start early!
  • Late Submissions of Assignments receive 10% off per day submitted late (up to 3 days max, then 0% received)
    • Unfortunately, with large classes I cannot make individual exceptions (i.e. "special deals") fairly to your classmates who are likely making other personal sacrifices to complete work on time.
    • Come speak to me about your wellness if something is otherwise impeding your progress so we can provide you available resources to succeed.
  • Assignments that do not compile/open receive no credit Simply put, programs that do not compile do not do anything.
  • There are no "re-grades" or points awarded one week after your grade is posted. "re-grades" may result in a higher, equal, or lower score.
    • There are no "re-grades" after the semester is over.
    • Do not ask multiple members of the course staff for "re-grades"
  • If you are currently waitlisted, you must submit your homework on time. That is the gamble! If you do not have blackboard access, you will submit by e-mail or other course mechanism (e.g. github).
  • There are no extra credit assignments just for you. I reserve the right to add points to assignments that do go above and beyond however. I reserve the right to give an extra credit assignment to the entire class, though this is highly unlikely.
  • I reserve the right to modify the grading scale in your favor if you show exemplary proficiency in any of the catagories. I will never modify the scale to lower a students grade.
  • In class work cannot be made up at a later date unless otherwise arranged with the instructor well in advance.
    • Course work completed after the date cannot be graded, as solutions will have been discussed (this includes if taking this course for an Incomplete).
    • Once again, "in-class" work must be completed in-class unless there is a documented emergency or you have prearranged with the instructor a make-up well in advance.
  • Lab time is meant for helping students with the lab, not completing homework. I have to prioritize lab first, then can answer homework questions.
  • No Facebook, no cell phones. Not only does it distract you, it distracts others!
  • Everyone needs to come see me in office hours (or by appointment) at least one time during the semester to introduce yourself. The purpose is so that you:
    • Know where my office is.
    • Get used to coming to office hours.
    • Let me know how I can help you achieve your goals.

Please do not redistribute or host any materials without e-mailing me first. I generally am happy to share the latest .pdf or slide presentation with those who ask. Thank you for your time!