ECSE 437: Software Delivery

McGill University, Montréal, Canada

Fall 2022

Course Syllabus

Design, development, and implementation of code integration processes, release pipelines, and deployment strategies.


Dr. Majid Babaei
Email address:,

Teaching Assistants

Course Textbook

I will be using a series of textbooks to teach this course:

  1. Learning DevOps: The complete guide to accelerate collaboration with Jenkins, Kubernetes, Terraform and Azure DevOps
  2. GitLab Cookbook
  4. Learning Gerrit Code Review
  5. Software Build Systems: Principles and Experience
  6. Static Program Analysis
  8. Introduction to Software Testing
  9. Continuous Delivery
  10. Learning Continuous Integration with Jenkins

Course Schedule

Weeks Dates Topics Slides Textbook Sections
1 Sept. 1

Course started in the 1st of Septmber, 2022

Course info: Introduction, DevOps Culture and Practices.
- When the term is introduced and how does it work!
- Test-Driven Desing
- Collecting feedback from users
- Three axes of the DevOps movement
- How do Continues Integration (CI) and Continuous delivery (CD) work?
- Implementing CI and CD
Learning DevOps:
Sections 1 and 2
2 Sept. 6, 8.

Lab1 [due Sept. 20th at 9:00AM]->Extended to Sept. 27th

Version Control Systems
- Centralized vs. distributed VCS
- What is Git ?
- Git vocabulary
- Git Repository Structure
- Using Git
- Why using command line
- Creating snapshot
- Basic Git workflow
- Git Data storage
- What are inside a git commit?
- Commit size matters!

- How to skip the Staging Area
- Removing a file both from WD and SA
- How to ignore files in git?
- Get short status in git and its output interpretation
- How to interpret the output of git diff
- Viewing history
- Unstaging files
- Discarding local changes
- Restoring a file to an earlier version



GitLab Cookbook:
Chapters: 1, 2
3 Sept. 13, 15 Git advanced concepts
- What is Branching?
- Branching in Git vs Branching in subversion
- Create, show and switch to a branch
- git log with two branches
- Comparing branches
- Stashing
- Merging
- Fast-Forward Mergers
- 3-way Mergers
- Why using no-fast-forward option
- Hot to view the merged branches?
- Merge conflicts
- Aborting a merge
- Undoing a faulty merge
- Removing a commit
- Reseting HEAD pointer
- Revert a merge
- Squash Merging

- Rebasing
- Cherry Picking
- Picking a file from another branch
- Collaboration on a project
- Centralized Workflow
- Integration Manager Workflow
Presentation Session 1 (2 TIME SLOTS)
[TAKEN] What are the best Git alternatives? (Briefly explain how they work and compare them) Presentation_01
[TAKEN] What are the most critical Git security issues? How can developers avoid a Git repository security risk? Presentation_02




GitLab Cookbook:
Chapters: 1, 2
4 Sept. 20, 22

Lab2 [due Oct. 4th at 9:00AM]

Quiz 1


Code Review
- Poor quality reviews
- Great Reviews
- Best practices for code review
- Some Examples


Code Review Guide:
Chapters: 1, 2, and 3

Gerrit Code Review:
Chapter: 1

5 Sept. 20, 22 Gerrit Code Review
- What is Gerrit?
- Build stability
- Gerrit Concepts
- Push for Code Review (3 cases)
- Review and vote

Gerrit more advanced topics
- Standard workflow
- Working with Change Series
- Conflict Resolution in Gerrit
- Working with Topics
- Working with Stable Branches




Code Review Guide:
Chapters: 1, 2, and 3

Gerrit Code Review:
Chapter: 1

6 Oct. 04, 06

Lab3 [due Oct. 25th at 9:00AM]

Build Systems
- Introduction
- Why do we need a build system?
- What is a build system
- Compiled vs Interpreted Languages
- Source and Object trees
- A Make-Based Build System
- Creating a Simple Makefile for the calculator

Build Systems
- Source Code in Multiple Directories
- Recursive Make over Multiple Directories
- The dependency graph
- Incremental Compilation
- Subtarget Builds
- The Problem with Bad Dependencies (Missing, Unwanted, and Circular Dependencies)




Software Build Systems:
Chapters: 1, 2, and 3

---  Oct. 11, 13
Fall Reading Break, No Class
7 Oct. 14

Quiz 2

8 Oct. 18, 20 Static Code Analysis
- What is it? Why do we need that? and how does it work?
- Manual Review
- Automated tools for performing static code analysis
- Examples (Buffer Overruns, Uninitialized variables, Memory Leaks, etc.)
- Features of advanced static analysis tools

Presentation Session 2 (2 TIME SLOTS)
[Taken] What is a docker container and its architecture? Where does it apply in DevOps? [A quick demo to show how it is used in a small project]
[Taken] What are Docker Based Build Systems? Compare them with traditional build systems. [A quick demo to show how they can be applied in a small project]


Static Program Analysis:
Chapter: 1

Advanced Static Analysis for C++

9 Oct. 25, 27

Course Project [due TBA at 9:00AM]

Software Testing
- What could happen when software goes bad?
- Goals of Testing Software?
- Model-Driven Test Design (MDTD)
- Test Desing, Automation, Execution, Evaluation
- High overview of a testing process

Software Testing
- Software testability
- Test case
- Executable test script
- A test automation framework
Presentation Session 2.5 (1 TIME SLOT)
[Taken] How to test Docker Images in the cloud? How it can be integrated it into a DevOps project? [with a short demo]



Introduction to Software Testing:
Parts: 1, 2, 3, and 4

10 Nov. 1, 3 Software Testing
- Why we should put testing first?
- Cost-of-Change curve
- agile software development methods
- System Tests in Agile Methods
- Coverage criteria
- Advantages of using coverage criteria

Presentation Session 3 (2 TIME SLOTS)
[Taken] What are the key challenges of testing distributed systems and how can we deal with these challenges?
[Taken] The Comparison of the best Agile Testing Tools: Worksoft, PractiTest, JunoOne, QMetry, Testiny, JIRA, Selenium WebDriver



Software Build Systems:
Chapters: 1, 2, and 3

11 Nov. 08, 10

Quiz 3


Continuous Integration / Continuous Delivery
- Reduce Risks
- Reduce Repetitive Processes
- Establish Greater Product Confidence
- What Prevents Teams from Using CI?
- When and How Should a Project Implement CI?
- How long does CI take to be set up?
- How to establish good day-to-day software development habits?
- Commit Code Frequently
- Do not Commit Broken Code
- Fix Broken Builds Immediately
- Write Automated Developer Tests
- Make Sure All Tests and Inspections Passed


Continuous Delivery:
Chapters: 1, 2, and 3

12 Nov. 15, 17 Continuous Integration / Continuous Delivery
- An example of CI
- Agile runs on CI
- How to use a CI tool
- Creating a self-triggered build
- Automate the packaging
- Automating the deployments
- Automating the testing
- Automating the code analysis
- Automating the deployments

Continuous Integration / Continuous Delivery
- What is Jenkins Pipeline?
- One continuous delivery scenario
- Declarative vs. scripted pipelines
- Scripted pipeline drawbacks
- Declarative Pipeline fundamentals
- Pipeline example
Presentation Session 3.5 (2 TIME SLOT)
[Taken] How does Kubernetes work? [with a short demo]
[Taken] How does Jenkins work? [with a short demo]
lecture slides textbook section
Learning Continuous Integration with Jenkins
Chapters: 4, 5, and 6


Labs general directions:TBA

Lab Instructions and Files:


Final Project

Students will work on their final project in the same teams that they have worked on labs assignment. The task of each group is to use the concepts and tools that they have learned through the course to design, develop, test, and deploy a software project and provide a demo of their project. The following points need to be addressed in the final presentation of your project.

Note: You are free to choose any programming languages that you are more familiar with.

Late Submission Policy

Grade distribution

The grade breakdown is as follows:

You can earn the Bonus point in two ways:

Selected Projects (and the final note!)

Dear Students,
The learning journey never ends!
First of all, I would like to express my gratitude and appreciation to everyone who has taken responsibility and participated in the activities of this course. I have received a long list of very interesting projects that shows your ability to utilize DevOps tools and techniques for managing code and collaborating with your teammate effectively. It is great! I am very proud of you!
It was a difficult task for me to come up with a short list of interesting, educational, and fun projects among all submissions. But here are my favorite ones you can check out their videos, and contact them even start a long-term collaboration on more serious projects based on what you have learned in this course (BTW, next time I should ask students to pick a name for their projects):