PageSourceSearch

https://majidbabaei.com/pages/courses/ecse437fs22.html

html majidbabaei.com collected 2026-10-06 14:00:21 UTC 35,062 bytes, 769 lines download raw bytes

1<!DOCTYPE html">
2<html>
3<title>Fall'22 - ECSE 437: Software Delivery</title>
4<head>
5<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 5-6
5
6<script async src="https://www.googletagmanager.com/gtag/js?id=
6G-1YH193FZ7V
vendor: 12 bytes, line 6
6"></script>
7<script>
8  
vendor: 134 bytes, lines 8-12
8window.dataLayer = window.dataLayer || [];
9  function gtag(){dataLayer.push(arguments);}
10  gtag('js', new Date());
11
12  gtag('config', '
12G-1YH193FZ7V
vendor: 4 bytes, line 12
12');
13</script>
13
14<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono" rel="stylesheet">
15<style>
16h3
17{
18padding-top: 30px;
19padding-bottom: 30px;
20}
21</style>
22</head>
23
24
25<style type="text/css">
26<!--
27/* @group Blink */
28.blink {
29-webkit-animation: blink .75s linear infinite;
30-moz-animation: blink .75s linear infinite;
31-ms-animation: blink .75s linear infinite;
32-o-animation: blink .75s linear infinite;
33animation: blink .75s linear infinite;
34}
35@-webkit-keyframes blink {
360% { opacity: 1; }
3750% { opacity: 1; }
3850.01% { opacity: 0; }
39100% { opacity: 0; }
40}
41@-moz-keyframes blink {
420% { opacity: 1; }
4350% { opacity: 1; }
4450.01% { opacity: 0; }
45100% { opacity: 0; }
46}
47@-ms-keyframes blink {
480% { opacity: 1; }
4950% { opacity: 1; }
5050.01% { opacity: 0; }
51100% { opacity: 0; }
52}
53@-o-keyframes blink {
540% { opacity: 1; }
5550% { opacity: 1; }
5650.01% { opacity: 0; }
57100% { opacity: 0; }
58}
59@keyframes blink {
600% { opacity: 1; }
6150% { opacity: 1; }
6250.01% { opacity: 0; }
63100% { opacity: 0; }
64}
65/* @end */
66-->
67.subtitle-divider-5 {
68    width: 100%;
69    height: 5px;
70    background-color: #ffffff;
71    margin: 30px 0 50px 0
72}
73.subtitle-divider-2 {
74    width: 100%;
75    height: 2px;
76    background-color: #ffffff;
77    margin: 30px 0 50px 0
78}
79</style>
80
81
82<body style="
83padding: 10px;
84color:#000f00;
85font-family: 'IBM Plex Mono', monospace;
86background-color: #e0e0d8;"
87>
88<center><img src="../../images/home/mcgilllog.png" atl="mcgill logo" width="370" height="130"></center>
89<center><h1>ECSE 437: Software Delivery</h1></center>
90<center><h1>McGill University, Montréal, Canada</h1></center>
91<center><h1><font size="+2">Fall 2022</font></h1></center>
92<div class="subtitle-divider-5"></div>
93
94
95
96<h3>Course Syllabus</h3>
97<p style="text-align:justify;">
98    Design, development, and implementation of code integration processes, release pipelines, and deployment strategies. </p>
99
100<div class="subtitle-divider-2"></div>
101
102<h3>Instructor</h3>
103
104<p>
105<strong>Dr. Majid Babaei</strong></br>
106Email address: <a href="mailto:[email protected]">[email protected]</a>,</br>
107Personal website:<a href="http://www.majidbabaei.com">www.majidbabaei.com</a>,</br>
108<!-- Lab: Queen's Reliable Software Technology,</br>
109Office: Goodwin 631,</br>
110Department: School of Computing.
111</br> 
112<ul>
113Online live Sessions, over Microsoft Teams, are held on Mondays 12:30pm and Thursdays 1:30pm. These sessions, usually,
114run for an hour. However, they may also run for less than an hour in case there are no further questions or discussions.
115</br></br>
116Lecture slides will be posted over OnQ. If you have questions and need clarifications about the lecture slides, then the live sessions will be the perfect location to get your questions answered and
117clarified.
118</ul>
119-->
120</p>
121<div class="subtitle-divider-2"></div>
122
123<h3> Teaching Assistants </h3>
124<ul>
125    <li>
126        Kirollos Roufail <a href="mailto:[email protected]">[email protected]</a>
127        </br>
128        <ul>
129            <li>
130                Kirollos will be responsible for running tutorial sessions on Wednesdays and Fridays (12:30pm - 1:30pm) at Trottier Building 1100.
131            </li>
132        </ul>
133    </li>
134    <li>
135        Pavel Rumiantsev <a href="mailto:[email protected]">[email protected]</a>
136    </br>
137    <ul>
138        <li>
139            Pavel will be helping me with marking lab assigments, quizzes and the final exam.
140        </li>
141    </ul>
142    </li>
143</ul>
144<!--
145<p>The teaching assistants answer questions by email and/or during dedicated live sessions (upon request):
146</br>
147
148<p><strong>AAAA BBBB (Ph.D. student)</strong>, </br><a href="mailto:BBBB">BBBB</a>
149</br>
150-->
151<div class="subtitle-divider-2"></div>
152
153
154
155
156
157<h3>Course Textbook</h3>
158<p style="text-align:justify;">
159I will be using a series of textbooks to teach this course:
160<ol>
161    <li>
162        <a href="https://www.amazon.ca/Learning-DevOps-accelerate-collaboration-Kubernetes/dp/1838642730">Learning DevOps: The complete guide to accelerate collaboration with Jenkins, Kubernetes, Terraform and Azure DevOps</a>
163    </li>
164    <li>
165        <a href="https://www.amazon.ca/GitLab-Cookbook-Jeroen-van-Baarsen/dp/1783986840">GitLab Cookbook</a>
166    </li>
167    <li>
168        <a href="https://owasp.org/www-pdf-archive/OWASP_Code_Review_Guide_v2.pdf"> CODE REVIEW GUIDE - OWASP Foundation </a>
169    </li>
170    <li>
171        <a href="https://www.amazon.ca/Learning-Gerrit-Code-Review-Milanesio/dp/1783289473">Learning Gerrit Code Review</a>
172    </li>
173    <li>
174        <a href="https://www.amazon.ca/Software-Build-Systems-Principles-Experience/dp/013418596X">Software Build Systems: Principles and Experience</a>
175    </li>
176    <li>
177        <a href="https://cs.au.dk/~amoeller/spa/spa.pdf">Static Program Analysis</a>
178    </li>
179    <li>
180        <a href="https://valbrio.com/wp-content/uploads/AdvancedStaticAnalysisforCC_May2017.pdf">ADVANCED STATIC ANALYSIS FOR C/C++</a>
181    </li>
182    <li>
183        <a href="https://www.amazon.ca/Introduction-Software-Testing-Paul-Ammann/dp/0521880386">Introduction to Software Testing</a>
184    </li>
185    <li>
186        <a href="https://martinfowler.com/books/continuousDelivery.html">Continuous Delivery</a>
187    </li>
188    <li>
189        <a href="https://www.amazon.ca/Learning-Continuous-Integration-Jenkins-Second/dp/1788479351">Learning Continuous Integration with Jenkins</a>
190    </li>
191</ol>
192</p>
193<div class="subtitle-divider-2"></div>
194
195
196
197<h3><a id="table"></a>Course Schedule</h3>
198<table BORDER=0>
199
200<table border cellpadding = "5">
201<tr BGCOLOR="WHITE">
202<th width="10" halign="top" valign="top">Weeks
203<th width="150" valign="top">Dates
204<th width="1000" valign="top">Topics
205<th width="100" valign="top">Slides
206<th width="250" valign="top">Textbook Sections
207
208<!-- WEEK 1 =============================================================== -->
209<tr>
210<th BGCOLOR="WHITE">1
211<td BGCOLOR="WHITE">Sept. 1
212<td BGCOLOR="WHITE" rowspan="1">
213<p style="font-size:150%;color: #ffffff; background-color: #000000;text-align:center"><strong> Course started in the 1st of Septmber, 2022</strong></p>
214<strong>Course info: Introduction, DevOps Culture and Practices. </strong>
215
216</br> <!-- content -->
217- When the term is introduced and how does it work!</br>
218- Test-Driven Desing</br>
219- Collecting feedback from users </br>
220- Three axes of the DevOps movement </br>
221- How do Continues Integration (CI) and Continuous delivery (CD) work? 
221</br>
222- Implementing CI and CD </br>
223<td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
224<center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/Eb1s1LA8yjFEuR22xWqsYAsBWAWrzIDd3FzQawqdkcJyhQ?e=U8GwqZ">Lecture_01</a></br>
225        <a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EUJYx4ZB6UZCtWeKdqCBdAgBW1I-Q9N24W28THeqNmZ44A?e=VEsg4v"> Audio_01</a>
226</center>
227    
228
229<td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
230<center>Learning DevOps: </br> Sections 1 and 2</center>
231
232</tr>
233
234<!-- WEEK 2 =============================================================== -->
235
236<tr>
237<th BGCOLOR="WHITE">2
238<td BGCOLOR="WHITE">Sept. 6, 8.
239<td BGCOLOR="WHITE" rowspan="1">
240<center><p style="color: #ffffff; background-color: #ff0000"><strong>Lab1 [due Sept. 20th at 9:00AM]->Extended to Sept. 27th</strong></p></center>
241
242<strong>Version Control Systems </strong>
243
244</br> <!-- content -->
245- Centralized vs. distributed VCS</br>
246- What is Git ?</br>
247- Git vocabulary</br>
248- Git Repository Structure</br>
249- Using Git</br>
250- Why using command line</br>
251- Creating snapshot</br>
252- Basic Git workflow</br>
253- Git Data storage</br>
254- What are inside a git commit?</br>
255- Commit size matters!</br>
256<center>************</center></br>
257- How to skip the Staging Area</br>
258- Removing a file both from WD and SA</br>
259- How to ignore files in git?</br>
260- Get short status in git and its output interpretation</br>
261- How to interpret the output of git diff</br>
262- Viewing history </br>
263- Unstaging files </br>
264- Discarding local changes </br>
265- Restoring a file to an earlier version </br>
266<td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
267<center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/ERgeL2LTAHdGl90ldtsmEKUBufde1XBfEfYyHAGsrl3Z2Q?e=XWEHH5">Lecture_02</a><center></br>
268<center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/ETe2b0fSqSNAqHpVM7Gv7qMBwM0FxYnzm4JPdo8YEW4D1Q?e=78y63z">Lecture_03</a><center></br>
269<center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/ERlf-we4su9MtPi6LKa9ljIBQw52_VhfO0F6x8XuIzBjZw?e=P85Qdj"> Audio_03</a></center></br>
270</br>
271
272<td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
273<center>GitLab Cookbook:<br>Chapters: 1, 2</center>
274
275</tr>
276
277<!-- WEEK 3 =============================================================== -->
278<tr>
279<th BGCOLOR="WHITE">3
280<td BGCOLOR="WHITE">Sept. 13, 15
281<td BGCOLOR="WHITE" rowspan="1">
282<strong>Git advanced concepts </strong>
283</br> <!-- content -->
284- What is Branching? </br>
285- Branching in Git vs Branching in subversion</br>
286- Create, show and switch to a branch </br>
287- git log with two branches</br>
288- Comparing branches</br>
289- Stashing</br>
290- Merging</br>
291- Fast-Forward Mergers</br>
292- 3-way Mergers</br>
293- Why using no-fast-forward option</br>
294- Hot to view the merged branches?</br>
295- Merge conflicts</br>
296- Aborting a merge</br>
297- Undoing a faulty merge</br>
298- Removing a commit</br>
299- Reseting HEAD pointer</br>
300- Revert a merge</br>
301- Squash Merging</br>
302<center>************</center></br>
303- Rebasing</br>
304- Cherry Picking</br>
305- Picking a file from another branch</br>
306- Collaboration on a project</br>
307- Centralized Workflow</br>
308- Integration Manager Workflow</br>
309<strong>Presentation Session 1 (2 TIME SLOTS) </strong></br>
310[TAKEN] <del>What are the best Git alternatives? (Briefly explain how they work and compare them)</del>
311<a href="https://mcgill-my.sharepoint.com/:p:/g/personal/majid_babaei_mcgill_ca/EYV9AfdyRiRChCnGM81zwgMBDvtIrdE3G8C3f7cVoYzyFA?e=hqI8tm">Presentation_01</a></br>
312[TAKEN] <del>What are the most critical Git security issues? How can developers avoid a Git repository security risk?</del>
313<a href="https://mcgill-my.sharepoint.com/:p:/g/personal/majid_babaei_mcgill_ca/EVnTNEQm4t1CqBBY53nkct0B34tJlA8FH0JqgTLdD_vD1Q?e=z2Nvnp">Presentation_02</a></br>
314
315<td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
316<center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EUiv_Ra2nSpIqMixT82hZGgB8A-fX4FLGDMIK_fzagZ_xw?e=BxWkNe">Lecture_04</a><center></br>
317<center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EfDGYE0VrqlBgHtoBuWoOFcBkyCEiKaKRxZs_YoDjkRAng?e=fRtiab">Audio_04</a></center></br>
318<center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EVcLCV3JwnVJuzR9z53Rlp4BLDgZSbLlm3zKAsspar-z3Q?e=REvvjf">Lecture_05</a><center></br>
319<center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EZISBk4YfiJNobVDqdc5NYMBrgpD-vTkHhpmY6Cy2hEKag?e=dHlVoG">Audio_05</a></center></br>
320<td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
321<center>GitLab Cookbook:<br>Chapters: 1, 2</center>
322
323</tr>
324
325<!-- WEEK 4 =============================================================== -->
326
327<tr>
328    <th BGCOLOR="WHITE">4
329    <td BGCOLOR="WHITE">Sept. 20, 22
330    <td BGCOLOR="WHITE" rowspan="1">
331    <center><p style="color: #ffffff; background-color: #ff0000"><strong>Lab2 [due Oct. 4th at 9:00AM]</strong></p></center>
332    <center><p style="color: #ffffff; background-color: #0000FF"><strong>Quiz 1</strong></p></center>
333    <center>************</center></br>
334    <strong>Code Review </strong>
335    </br> <!-- content -->
336    - Poor quality reviews</br>
337    - Great Reviews</br>
338    - Best practices for code review</br>
339    - Some Examples</br>
340    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
341    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EUR251p4NsFAov_DBJLtg88BobcACbcD5qhHac_3VyVb3w?e=KPtoXH">Lecture_06</a><center></br>
342    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EfMy-4OIlOFPl0PpCb89-rwBHWv9g_dJQinmeKttbR4Upg?e=4fSNpf">Audio_06</a></center></br>
343    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
344    <center>Code Review Guide: <br>Chapters: 1, 2, and 3</center><br>
345    <center>
345Gerrit Code Review: <br>Chapter: 1</center><br>
346    </tr>
347
348
349<!-- WEEK 5 =============================================================== -->
350
351<tr>
352    <th BGCOLOR="WHITE">5
353    <td BGCOLOR="WHITE">Sept. 20, 22
354    <td BGCOLOR="WHITE" rowspan="1">    
355    <strong>Gerrit Code Review </strong></br>
356    - What is Gerrit?</br>
357    - Build stability</br>
358    - Gerrit Concepts</br>
359    - Push for Code Review (3 cases)</br>
360    - Review and vote</br>
361    <center>************</center></br>
362    <strong>Gerrit more advanced topics </strong></br>
363    - Standard workflow </br>
364    - Working with Change Series </br>
365    - Conflict Resolution in Gerrit </br>
366    - Working with Topics </br>
367    - Working with Stable Branches</br>
368    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
369    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EeVmJ_tgLStFt173QnYS15cBbLCyMWqYcBx7HQEBP0T5Cg?e=k5Y0Fj">Lecture_07</a><center></br>
370    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/ERcpgppQd75HvfJMvy181iIB_T9MiEAIOOHwi_7rv-EJEw?e=0KcV1R">Audio_07</a></center></br>
371    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EbRFGN8axIpHlf1yuIhK1TkBe9spHX0jwuoqFiMr6vFabg?e=lYSoJj">Lecture_08</a><center></br>
372    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EQrnh0rHSetLuC0vqHOx6MgBeEAcbEYHwKsf5Ao8d2_MMw?e=m3R3dM">Audio_08</a></center></br>
373    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
374    <center>Code Review Guide: <br>Chapters: 1, 2, and 3</center><br>
375    <center>Gerrit Code Review: <br>Chapter: 1</center><br>
376    </tr>
377<!-- WEEK 6 =============================================================== -->
378
379<tr>
380    <th BGCOLOR="WHITE">6
381    <td BGCOLOR="WHITE">Oct. 04, 06
382    <td BGCOLOR="WHITE" rowspan="1">    
383    <center><p style="color: #ffffff; background-color: #ff0000"><strong>Lab3 [due Oct. 25th at 9:00AM]</strong></p></center>
384
385    <strong>Build Systems </strong></br>
386    - Introduction</br>
387    - Why do we need a build system?</br>
388    - What is a build system</br>
389    - Compiled vs Interpreted Languages</br>
390    - Source and Object trees</br>
391    - A Make-Based Build System </br>
392    - Creating a Simple Makefile for the calculator </br>
393    <center>************</center></br> 
394    <strong>Build Systems </strong></br>
395    - Source Code in Multiple Directories</br>
396    - Recursive Make over Multiple Directories </br>
397    - The dependency graph</br>
398    - Incremental Compilation</br>
399    - Subtarget Builds</br>
400    - The Problem with Bad Dependencies (Missing, Unwanted, and Circular Dependencies)</br>
401    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
402    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EbhDgf_lcKBDmww69DAJ4J8B5GA2Z--CmFez_-Kd4XllUA?e=KMeEED">Lecture_09</a><center></br>
403    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EZ0MvU9yzjxGgyV7y0Qqo54Bj_KT_ksPgm8Ej5XaKNkVLA?e=86hr2n">Audio_09</a></center></br>
404    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EZ920lsD_utKr6jvvlNjcO8BPPn1ImqnL-wfIQwbwzetDw?e=wD5Gqg">Lecture_10</a><center></br>
405    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EdAmrZEnZFlMtk45LauENnYBhRZao9R_GlCUWdkaN1ZQig?e=96ZmGW">Audio_10</a></center></br>
406    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
407    <center>Software Build Systems: <br>Chapters: 1, 2, and 3</center><br>
408    </tr>
409
410<!-- READING WEEK =============================================================== -->
411<tr>
412<tr>
413<th BGCOLOR="ORANGE"> ---&nbsp;
414<td BGCOLOR="ORANGE">Oct. 11, 13
415<td BGCOLOR="ORANGE"><strong><center>Fall Reading Break, No Class</center></strong>
416
417<td BGCOLOR="ORANGE">
418&nbsp;
419<td BGCOLOR="ORANGE">
420&nbsp;
421</tr>
422<!-- Week 7 =============================================================== -->
423
424<tr>
425    <th BGCOLOR="WHITE">7
426    <td BGCOLOR="WHITE">Oct. 14
427    <td BGCOLOR="WHITE" rowspan="1">    
428    <center><p style="color: #ffffff; background-color: #0000ff"><strong>Quiz 2</strong></p></center>
429    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
430    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
431</tr>
432
433<!-- WEEK 8 =============================================================== -->
434
435<tr>
436    <th BGCOLOR="WHITE">8
437    <td BGCOLOR="WHITE">Oct. 18, 20
438    <td BGCOLOR="WHITE" rowspan="1">    
439    <strong>Static Code Analysis </strong></br>
440    - What is it? Why do we need that? and how does it work?</br>
441    - Manual Review</br>
442    - Automated tools for performing static code analysis</br>
443    - Examples (Buffer Overruns, Uninitialized variables, Memory Leaks, etc.) </br>
444    - Features of advanced static analysis tools</br>
445    <center>************</center></br>
446    <strong>Presentation Session 2 (2 TIME SLOTS) </strong></br>
447    [Taken] <del>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]</del></br>
448    [Taken] <del>What are <i>Docker Based Build Systems</i>? Compare them with traditional build systems. [A quick demo to show how they can be applied in a small project]</del></br>
449    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
450    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EXHeebZ2VsZKu1GdRO8zNTwBRr5Opp_ViDLvdIsMwfUJTg?e=xjociV">Lecture_11</a><center></br>
451    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EZRg36GrNppJj9QtIg1cTzQBKWq2NbAizQks-MECXHIo8Q?e=Wa3WX5">Audio_11</a></center></br>
452    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
453    <center>Static Program Analysis: <br>Chapter: 1</center><br>
454    <center>Advanced Static Analysis for C++</center><br>
455    </tr>
456
457<!-- WEEK 9 =============================================================== -->
458
459<tr>
460    <th BGCOLOR="WHITE">9
461    <td BGCOLOR="WHITE">Oct. 25, 27
462    <td BGCOLOR="WHITE" rowspan="1">    
463    <center><p style="color: #ffffff; background-color: #ff0000"><strong>Course Project [due TBA at 9:00AM]</strong></p></center>
464    <strong>Software Testing </strong></br>
465    - What could happen when software goes bad?</br>
466    - Goals of Testing Software?</br>
467    - Model-Driven Test Design (MDTD)</br>
468    - Test Desing, Automation, Execution, Evaluation</br>
469    - High overview of a testing process</br>
470    <center>************</center></br>
471    <strong>Software Testing </strong></br>
472    - Software testability</br>
473    - Test case</br>
474    - Executable test script</br>
475    - A test automation framework </br>
476    - JUNIT</br>
477    - CPPUNIT</br>
478    <strong>Presentation Session 2.5 (1 TIME SLOT) </strong></br>
479    [Taken] <del>How to test Docker Images in the cloud? How it can be integrated it into a DevOps project? [with a short demo]</del></br>
480    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
481    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/Ed2WvGW-Rv5CqY5eTmDyU3oBLSB-oqk-xNZUsZEgyJyTOg?e=no9wRG">Lecture_12</a><center></br>
482    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/ESXpUXx9CEZJn4cBRU8p5ZoBx-gqIVnaabfqApL9MGgyiw?e=2mYbGx">Audio_12.1</a></center></br>
483    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EfgjiLHcQvFFhlUY_QFs0KgBc-bOAX4I6W5BtkeVv4HDsg?e=v0a14J">Audio_12.2</a></center></br>
484    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
485    <center>Introduction to Software Testing: <br>Parts: 1, 2, 3, and 4</center><br>
486    </tr>
487
488<!-- WEEK 10 =============================================================== -->
489
490<tr>
491    <th BGCOLOR="WHITE">10
492    <td BGCOLOR="WHITE">Nov. 1, 3
493    <td BGCOLOR="WHITE" rowspan="1">    
494    <strong>Software Testing </strong></br>
495    - Why we should put testing first?</br>
496    - Cost-of-Change curve</br>
497    - <i>agile</i> software development methods</br>
498    - System Tests in Agile Methods</br>
499    - Coverage criteria</br>
500    - Advantages of using coverage criteria</br>
501    <center>************</center></br>
502    <strong>Presentation Session 3 (2 TIME SLOTS) </strong></br>
503    [Taken] <del>What are the key challenges of testing distributed systems and how can we deal with these challenges?</del></br>
504    [Taken] <del>The Comparison of the best Agile Testing Tools: <i>Worksoft</i>, <i>PractiTest</i>, <i>JunoOne</i>, <i>QMetry</i>, <i>Testiny</i>, <i>JIRA</i>, <i>Selenium WebDriver</i></del></br>
505    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
506    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EZaePdGvlMJLrtH0qm-Vg2EBAD09oKnrq6CIGQBQOwgPPw?e=VC4zTk">Lecture_13</a><center></br>
507    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EU69QBEabWVPk7GzLfuLptABqvyaCI37iHMbu8rduUQxgA?e=atYjiI">Audio_13.1</a><center></br>
508    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/ERICMQ84GRZGqUdHED91Dp0B9r0H6wJRiR7_lH5goeIZTg?e=G8LDgg">Audio_13.2</a><center></br>            
509    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
510    <center>Software Build Systems: <br>Chapters: 1, 2, and 3</center><br>
511    </tr>
512<!-- WEEK 11 =============================================================== -->
513
514<tr>
515    <th BGCOLOR="WHITE">11
516    <td BGCOLOR="WHITE">Nov. 08, 10
517    <td BGCOLOR="WHITE" rowspan="1">    
518    <center><p style="color: #ffffff; background-color: #0000ff"><strong>Quiz 3</strong></p></center>
519    <center>************</center></br>
520    <strong>Continuous Integration / Continuous Delivery </strong></br>
521    - Reduce Risks</br>
522    - Reduce Repetitive Processes</br>
523    - Establish Greater Product Confidence</br>
524    - What Prevents Teams from Using CI?</br>
525    - When and How Should a Project Implement CI?</br>
526    - How long does CI take to be set up?</br>
527    - How to establish <i>good</i> day-to-day software development habits?</br>
528    - Commit Code Frequently</br>
529    - Do not Commit Broken Code</br>
530    - Fix Broken Builds Immediately</br>
531    - Write Automated Developer Tests</br>
532    - Make Sure All Tests and Inspections Passed</br>
533    <td BGCOLOR="WHITE" rowspan="1"> <!-- lecture slides -->
534    <center><a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EWsVjPVu1WBMrSETGlUmaukBBXEEUUGoGt5wJcXgXROHjw?e=iHfReE">Lecture_14</a><center></br>
535    <center><a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/ESWTOzAXQeJIqFMtiSY_h1oBDEVV-Qr1OAaE3gakDXsgrw?e=I5sStZ">Audio_14</a><center></br>
536    <td BGCOLOR="WHITE" rowspan="1"> <!-- textbook section -->
537    <center>Continuous Delivery: <br>Chapters: 1, 2, and 3</center><br>
538    </tr>
539<!-- WEEK 12 =============================================================== -->
540
541<tr>
542    <th BGCOLOR="WHITE">12
543    <td BGCOLOR="WHITE">Nov. 15, 17
544    <td BGCOLOR="WHITE" rowspan="1">    
545    <strong>Continuous Integration / Continuous Delivery </strong></br>
546    - An example of CI</br>
547    - Agile runs on CI</br>
548    - How to use a CI tool </br>
549    - Creating a self-triggered build</br>
550    - Automate the packaging</br>
551    - Automating the deployments</br>
552    - Automating the testing</br>
553    - Automating the code analysis</br>
554    - Automating the deployments</br>
555    <center>************</center></br>
556    <strong>Continuous Integration / Continuous Delivery </strong></br>
557    - What is Jenkins Pipeline?</br>
558    - One continuous delivery scenario</br>
559    - Declarative vs. scripted pipelines</br>
560    - Scripted pipeline drawbacks</br>
561    - Declarative Pipeline fundamentals</br>
562    - Pipeline example</br>
563    <strong>Presentation Session 3.5 (2 TIME SLOT) </strong></br>
564    [Taken] <del>How does Kubernetes work? [with a short demo]</del></br>
565    [Taken] <del>How does Jenkins work? [with a short demo]</del></br>
566    <td BGCOLOR="WHITE" rowspan="1"> lecture slides
567    <!-- <center><a href="">Lecture_18</a><center></br> -->
568    <!-- <center><a href="">Lecture_19</a><center></br> -->
569    <td BGCOLOR="WHITE" rowspan="1"> textbook section
570    <center>Learning Continuous Integration with Jenkins<br>Chapters: 4, 5, and 6</center><br>
571    </tr>
572</table>
573
574
575<h3>Labs</h3>
576<p>Labs general directions:TBA</br>
577<!-- <ul>
578    When a Lab is released on this website the course instructure will let you know through email. You will get a posting-notification on OnQ anyways.</br></br>
579    You should submit (upload) your lab (Zipped file) onto OnQ before or by the due date. Depending on which group you belong to in the class, your lab (source codes and readme.txt file) will be reviewed and
580    marked by an assigned TA. Late work might not be accepted. See <a href="#LSP">late submission policy</a>.</br></br>
581    Labs are to be performed individually. Solutions are not released. Discussing your lab solution is wel
581come though.</br></br>
582    CISC324 does not have formally scheduled lab sections, so you may complete lab work anytime but not beyond the due dates. <strong>If you run into difficulty with a lab, contact a TA by email.</strong>
583</ul>
584-->
585
586<p>Lab Instructions and Files:
587<ul>
588    <li>
589        <strong>Lab 1</strong> (<a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EcPTYYU75ZpHkMuq01APGEcBvRBE4duS0J23DovvBp_m0A?e=eNpLEU">Lab_1.pdf</a>) [due Sep 20th]->extended to Sep 27th</br>In this lab, there are 12 (small) exercises. If you have never worked with any version control systems like <b>Git</b> the main challenge for you will be to understand the concepts, create an account and worke with the cloned repository. Your main task in this lab is to understand what kinds of benefits you will get by using a version control system rather than keep naming your file like: <b>final.cpp</b>, <b>final2.cpp</b>, <b>reallyFinal.cpp</b>, <b>finalyReallyFinal.cpp</b>, <b>OMGfinal.cpp</b>, etc. It is never ending! You never know which one is the actual final cpp file!
590    </li>
591</ul>
592</br>
593<ul>
594    <li>
595        <strong>Lab 2</strong> (<a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EfAhh39HD0RCv9TWFDD99c4BUM7y8GpukVyWINv_5xnKOg?e=2MfLUf">Lab_2.pdf</a>) [due Oct 04th]</br> In this lab, there is only three exercises. During this lab, you will be using <b>Gerrit</b>, <b>GitHub</b> and <b>GerritHub</b> to add a reviewer, make a change and ask the reviewer manually/automatically to check your changes. Then you will get a notification and try to address the feedback from the reviewer.</br> In one part of this lab you should add TA and professor as the reviewer of your co
595de! make sure you do that because if we don't get the message, you don't get the full mark!
596    </li>
597</ul>
598</br>
599<ul>
600    <li>
601        <strong>Lab 3</strong> (<a href="https://mcgill-my.sharepoint.com/:b:/g/personal/majid_babaei_mcgill_ca/EXh6PUfm2oNClVgB740wTlgBTkE5wQgd60Md9sT5upy39A?e=pJ8cxP">Lab_3.pdf</a>, <a href="https://mcgill-my.sharepoint.com/:u:/g/personal/majid_babaei_mcgill_ca/EXKWgnAxV6VIvsrM4nemp3gB0A3AourhCSjRrdulG4cKOg?e=0nI236">Lab_3.zip</a>) [due Oct 29th]</br> 
602        This lab is challenging because it is your first time writing Makefile. In the first part of this lab, we will be working on a simple compilation process with just one source file. We will learn three main elements of a Makefile and how we can use them towards our goal which is (usually) generating an executable file.
603        In the second part of this lab, we will consider a bit more complex scenario, where the source code is broken down into multiple files. It is more challenging because now we should first compile those files to object c
603ode, an intermediate compilation stage. Next we should compile multiple object files to assemble an executable file.
604    </li>
605</ul>
606
607<div class="subtitle-divider-2"></div>
608
609<h3><a id="Quizzes"></a>Quizzes</h3>
610<ul>
611    <li>
612        <strong>Quiz 1</strong> [on September 20th]</br>This quiz covers lectures from week 1 to week 3, i.e., DevOps Practices and Git.
613    </li>
614    <li>
615        <strong>Quiz 2</strong> [on October 14th]</br> This quiz covers lectures from week 4 to week 6, i.e., Code Review, Gerrit and build systems.
616    </li>
617    <li>
618        <strong>Quiz 3</strong> [on November 8th]</br> This quiz covers lectures from week 7 to week 10, i.e., Static Analysis and Testing.
619    </li>
620</ul>
621</br>
622
623<div class="subtitle-divider-2"></div>
624
625
626
627
628<h3>Final Project</h3>
629<p>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. </p>
630<ul>
631    <li>
632        The software has to have at least seven components (or classes) that are coded into different files.
633    </li>
634    <li>
635        To manage different version of the software a version control systems like git must be used
636    </li>
637    <li>
638        You should demonstrate that you code has multiple branches, e.g., main, bugfix/…,feature/…, etc. that are merged into your main line of development every couple of days.
639    </li>
640    <li>
641        One student mush act as a code reviewer and send his/her feedback to the other student using code review system like Gerrit or GerritHub
642    </li>
643    <li>
644        Each team must demonstrate how unitary and integration testing performed to ensure the software is free of bugs in each release. 
645    </li>
646    <li>
647        Each team must use an automatic build system.
648    </li>
649    <li>
650        Each team must use a static code analysis approach in their project.
651    </li>
652    <li>
653        Each team must use a continuous integration orchestration tool like Jenkins to build artifacts throughout the pipeline. 
654    </li>
655</ul>
656<p><i>Note: You are free to choose any programming languages that you are more familiar with.</p></i> 
657 
658
659<!-- <p>Points that you need to consider for preparing your final project: TBA</br></p> -->
660
661<div class="subtitle-divider-2"></div>
662
663<h3><a id="LSP"></a>Late Submission Policy</h3>
664<ul>
665    <li>
666        If you submit your work 15 minutes after the deadline, then you lose 5% of the total grade.</br>
667    </li>
668    <li>
669        If you submit your work 24 hours after the deadline, then you lose 10% of the total grade.</br>
670    </li>
671    <li>
672        If you submit your work 48 hours after the deadline, then you lose 20% of the total grade.</br>
673    </li>
674    <li>
675        If you submit your work 72 hours after the deadline, then your submission will not be considered.</br>
676    </li>
677</ul>
678</br>
679
680
681
682<h3>Grade distribution</h3>
683<footer id="bottom"></footer>
684
685The grade breakdown is as follows:</br></br>
686
687<ul>
688    <li>Lab 1 weights <strong>5.0%</strong></li>
689    <li>Lab 2 weights <strong>5.0%</strong></li>
690    <li>Lab 3 weights <strong>5.0%</strong></li>
691    <li>Quiz 1 weights <strong>10.0%</strong></li>
692    <li>Quiz 2 weights <strong>09.0%</strong></li>
693    <li>Quiz 3 weights <strong>11.0%</strong></li>
694    <li>Final Project weights <strong>15.0%</strong></li>
695    <li>Final Exam weights <strong>40.0%</strong></li>
696    <li><b>Bonus point</b> <strong>10.0%</strong></li>
697</br>
698</ul>
699
700<p>You can earn the Bonus point in two ways:</p> 
701<ul> 
702    <li>If you give a presentation (up to 5.0%)</li>
703    <li>If in your final project you add extra steps for continues deployment (up to 5.0%)</li>
704</ul>
705
706
707<div class="subtitle-divider-2"></div>
708
709<h3><a id="Projects"></a>Selected Projects (and the final note!)</h3>
710<p>
711Dear Students,</br>
712The learning journey never ends!</br>
713First 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!</br>
714It 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):
715</p>
716
717
718<ul>
719    <li>
720        <a href="https://www.youtube.com/watch?v=aeSBYr0hYXU&ab_channel=SaikouCeesay">Online Quiz Web Application(Zarif Ashraf and Saikou Ceesay)</a>
721    </li>
722    <li>
723        <a href="https://www.youtube.com/watch?v=DyvKouUHaX8&ab_channel=BrandonSovran">(Brandon Sovran and Hong Yi Meng)</a>
724    </li>
725    <li>
726        <a href="https://www.youtube.com/watch?v=J6yGjnUBASAhttps://www.youtube.com/watch?v=J6yGjnUBASA">Read-more-learn-more(Rodolphe Baladi and Michael Buchar)</a>
727    </li>
728    <li>
729        <a href="https://www.youtube.com/watch?v=DZgy-_7Nz8I">(Andrew Geday and Cesar Arnouk)</a>
730    </li>
731    <li>
732        <a href="https://www.youtube.com/watch?v=P3n9h_mc9PM">(Steven Luu and Nelson Zeng)</a>
733    </li>
734    <li>
735        <a href="https://youtu.be/R2ICxMRbt4c">(Ethan Cote and Christophe Simon)</a>
736    </li>
737    <li>
738        <a href="https://youtu.be/2JLpDOUPO94">(Hana Gustyn and Tyler Syme)</a>
739    </li>
740    <li>
741        <a href="https://youtu.be/Av8ghOaWGK0">(Nick Triantos and Tahseen Bin Taj)</a>
742    </li>
743    <li>
744        <a href="https://www.youtube.com/channel/UCcmgHYJK36TIH9gkMx8b8YQ">(Aly Mohamed and Robert Aprahamian)</a>
745    </li>
746    <li>
747        <a href="https://youtu.be/hi8rIqbIzFo">(Charles David and Kailong Li)</a>
748    </li>
749    <li>
750        <a href="https://www.youtube.com/watch?v=DyXb9Jrvd5c">(Thomas Alarcon and Yuta Youness Bellali)</a>
751    </li>
752    <li>
753        <a href="https://www.youtube.com/watch?v=hpaqDO6YLQY">(Anika Kabir and Maria Emilia Solaberrieta)</a>
754    </li>
755    <li>
756        <a href="https://www.youtube.com/watch?v=FE11RTi10sc">(Antoine Camusat and Zi Chao Zhang)</a>
757    </li>
758
759</ul>
760</br>
761
762
763</body>
764
765</html>
766
767
768
769

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.