Tan115 commited on
Commit
f99add3
·
verified ·
1 Parent(s): 24fed34

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +5 -0
  2. 05 - Operators and Operations with primitive types/001 Operators in Java.mp4 +3 -0
  3. 05 - Operators and Operations with primitive types/002 Operations with integers and floating-point numbers, BigDecimal type.mp4 +3 -0
  4. 05 - Operators and Operations with primitive types/003 Math class, NaN, Infinity.mp4 +3 -0
  5. 05 - Operators and Operations with primitive types/004 Type of the expression in Java.mp4 +3 -0
  6. 05 - Operators and Operations with primitive types/006 Read user input from console.mp4 +3 -0
  7. 106 - Structural Diagrams/external-links.txt +21 -0
  8. 107 - Code Review Fundamentals/001 Introduction to Code Reviews_en.srt +660 -0
  9. 107 - Code Review Fundamentals/002 Basics of Code Review Process_en.srt +1236 -0
  10. 108 - Tools, Automation, and Industry Best Practices/001 Tools for Code Review and Code Analysis_en.srt +1244 -0
  11. 108 - Tools, Automation, and Industry Best Practices/002 All-resources-and-links-for-the-lesson.url +2 -0
  12. 108 - Tools, Automation, and Industry Best Practices/002 Part 1 - Checkstyle Adhering Coding Standards_en.srt +772 -0
  13. 108 - Tools, Automation, and Industry Best Practices/003 All-resources-and-links-for-the-lesson.url +2 -0
  14. 108 - Tools, Automation, and Industry Best Practices/003 Part 2 - Checkstyle Adhering Coding Standards_en.srt +780 -0
  15. 108 - Tools, Automation, and Industry Best Practices/004 All-resources-and-links-for-the-lesson.url +2 -0
  16. 108 - Tools, Automation, and Industry Best Practices/004 PMD Static Code Analysis_en.srt +1144 -0
  17. 108 - Tools, Automation, and Industry Best Practices/external-links.txt +9 -0
  18. 109 - Advanced Code Review Strategies/001 All-documents-shared-in-the-lesson.url +2 -0
  19. 109 - Advanced Code Review Strategies/002 Coding Standards, Code Quality & Consistency_en.srt +1280 -0
  20. 109 - Advanced Code Review Strategies/002 Coding-Standards-and-Guidelines.url +2 -0
  21. 109 - Advanced Code Review Strategies/003 Provide Feedback like a Pro_en.srt +1032 -0
  22. 109 - Advanced Code Review Strategies/004 Security Considerations During Code Review_en.srt +824 -0
  23. 109 - Advanced Code Review Strategies/005 Scalability Principles in Code_en.srt +748 -0
  24. 109 - Advanced Code Review Strategies/external-links.txt +6 -0
  25. 11 - Enumerations in Java/001 Enumerations in Java_en.srt +495 -0
  26. 11 - Enumerations in Java/001 Homework.url +2 -0
  27. 11 - Enumerations in Java/001 Solution-Message-type-priority.url +2 -0
  28. 11 - Enumerations in Java/001 Source-code-of-the-example-used-in-the-lesson.url +2 -0
  29. 11 - Enumerations in Java/external-links.txt +9 -0
  30. 110 - Metrics & KPIs to Monitor and Control Software Development Process/001 Why this section is in this course and why it is important.html +69 -0
  31. 110 - Metrics & KPIs to Monitor and Control Software Development Process/002 Metric, KPI & OKR_en.srt +1224 -0
  32. 110 - Metrics & KPIs to Monitor and Control Software Development Process/003 RAG Status to Present KPI.html +69 -0
  33. 110 - Metrics & KPIs to Monitor and Control Software Development Process/004 Introduction to Engineering Excellence Metrics & KPIs_en.srt +240 -0
  34. 110 - Metrics & KPIs to Monitor and Control Software Development Process/005 Development Metrics & KPIs Tech Debt Ratio & Index, Cyclomatic Complexity_en.srt +1276 -0
  35. 110 - Metrics & KPIs to Monitor and Control Software Development Process/006 Development Metrics & KPIs Unit Test Related Metrics - Part 1_en.srt +772 -0
  36. 110 - Metrics & KPIs to Monitor and Control Software Development Process/007 Development Metrics & KPIs Unit Test Related Metrics - Part 2_en.srt +0 -0
  37. 110 - Metrics & KPIs to Monitor and Control Software Development Process/008 Development Metrics & KPIs Duplicate Code & Commented Code Index_en.srt +0 -0
  38. 110 - Metrics & KPIs to Monitor and Control Software Development Process/009 Development Metrics & KPIs Code Review Feedback Loop Time & Code Reviews_en.srt +0 -0
  39. 110 - Metrics & KPIs to Monitor and Control Software Development Process/010 Development Metrics & KPIs Rules Compliance Index (RCI) & Violations_en.srt +0 -0
  40. 110 - Metrics & KPIs to Monitor and Control Software Development Process/011 Development Metrics & KPIs Integration Test Coverage & End-to-End Test Coverage_en.srt +0 -0
  41. 111 - Extreme Programming - Agile & Lean Development Techniques/001 Introduction to Extreme Programming (XP) - Part 1_en.srt +0 -0
  42. 111 - Extreme Programming - Agile & Lean Development Techniques/002 Introduction to Extreme Programming (XP) - Part 2_en.srt +0 -0
  43. 111 - Extreme Programming - Agile & Lean Development Techniques/003 Pair Programming - Part 1_en.srt +0 -0
  44. 111 - Extreme Programming - Agile & Lean Development Techniques/004 Pair Programming - Part 2_en.srt +0 -0
  45. 111 - Extreme Programming - Agile & Lean Development Techniques/005 Planning Game - Part 1_en.srt +0 -0
  46. 111 - Extreme Programming - Agile & Lean Development Techniques/006 Planning Game - Part 2_en.srt +0 -0
  47. 111 - Extreme Programming - Agile & Lean Development Techniques/007 Test-Driven Development (TDD).html +69 -0
  48. 111 - Extreme Programming - Agile & Lean Development Techniques/008 Whole Team - Part 1_en.srt +0 -0
  49. 111 - Extreme Programming - Agile & Lean Development Techniques/009 Whole Team - Part 2_en.srt +0 -0
  50. 111 - Extreme Programming - Agile & Lean Development Techniques/010 Continuous Integration (CI) - Part 1_en.srt +0 -0
.gitattributes CHANGED
@@ -47,3 +47,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
47
  04[[:space:]]-[[:space:]]Eclipse[[:space:]]Tips[[:space:]]and[[:space:]]Tricks/002[[:space:]]Plugins[[:space:]]how[[:space:]]to[[:space:]]install[[:space:]]free[[:space:]]plugins,[[:space:]]eclipse[[:space:]]marketplace,[[:space:]]workspace[[:space:]]styles.mp4 filter=lfs diff=lfs merge=lfs -text
48
  03[[:space:]]-[[:space:]]Primitive[[:space:]]Data[[:space:]]Types,[[:space:]]Variables[[:space:]]and[[:space:]]Arrays/003[[:space:]]Arrays.mp4 filter=lfs diff=lfs merge=lfs -text
49
  04[[:space:]]-[[:space:]]Eclipse[[:space:]]Tips[[:space:]]and[[:space:]]Tricks/003[[:space:]]Code[[:space:]]Refactoring[[:space:]]in[[:space:]]Eclipse.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
47
  04[[:space:]]-[[:space:]]Eclipse[[:space:]]Tips[[:space:]]and[[:space:]]Tricks/002[[:space:]]Plugins[[:space:]]how[[:space:]]to[[:space:]]install[[:space:]]free[[:space:]]plugins,[[:space:]]eclipse[[:space:]]marketplace,[[:space:]]workspace[[:space:]]styles.mp4 filter=lfs diff=lfs merge=lfs -text
48
  03[[:space:]]-[[:space:]]Primitive[[:space:]]Data[[:space:]]Types,[[:space:]]Variables[[:space:]]and[[:space:]]Arrays/003[[:space:]]Arrays.mp4 filter=lfs diff=lfs merge=lfs -text
49
  04[[:space:]]-[[:space:]]Eclipse[[:space:]]Tips[[:space:]]and[[:space:]]Tricks/003[[:space:]]Code[[:space:]]Refactoring[[:space:]]in[[:space:]]Eclipse.mp4 filter=lfs diff=lfs merge=lfs -text
50
+ 05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/002[[:space:]]Operations[[:space:]]with[[:space:]]integers[[:space:]]and[[:space:]]floating-point[[:space:]]numbers,[[:space:]]BigDecimal[[:space:]]type.mp4 filter=lfs diff=lfs merge=lfs -text
51
+ 05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/003[[:space:]]Math[[:space:]]class,[[:space:]]NaN,[[:space:]]Infinity.mp4 filter=lfs diff=lfs merge=lfs -text
52
+ 05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/004[[:space:]]Type[[:space:]]of[[:space:]]the[[:space:]]expression[[:space:]]in[[:space:]]Java.mp4 filter=lfs diff=lfs merge=lfs -text
53
+ 05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/001[[:space:]]Operators[[:space:]]in[[:space:]]Java.mp4 filter=lfs diff=lfs merge=lfs -text
54
+ 05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/006[[:space:]]Read[[:space:]]user[[:space:]]input[[:space:]]from[[:space:]]console.mp4 filter=lfs diff=lfs merge=lfs -text
05 - Operators and Operations with primitive types/001 Operators in Java.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f4f590c0a1cef3a663c7e47acc3bdb9f4433e9594d17b8a60969f28985610bc8
3
+ size 443480344
05 - Operators and Operations with primitive types/002 Operations with integers and floating-point numbers, BigDecimal type.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ff154a87708debfc3d3bd1219445ba52d6679788517d1860270a43b706de251a
3
+ size 106957149
05 - Operators and Operations with primitive types/003 Math class, NaN, Infinity.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:977dbe3b832ac29174cfaa5738bf15314f402b9bdc8550ea446c993ec7cc27bd
3
+ size 121953508
05 - Operators and Operations with primitive types/004 Type of the expression in Java.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cb979b611a72506a4e2af39975c5eee8efa141c774561746c965dd85277fca16
3
+ size 90273337
05 - Operators and Operations with primitive types/006 Read user input from console.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fa46d266a16e87f26969d42b3ad9e896b6e652adf9a0b7cfd6df779145bf6cd6
3
+ size 44832403
106 - Structural Diagrams/external-links.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ 001 Class-Diagram-Order-Processing
3
+ https://drive.google.com/file/d/1JT9iraGj_-ETCLGK9TCFfOb4E8qf6LSh/view?usp=sharing
4
+
5
+ 002 Object-Diagram-Company-Structure
6
+ https://drive.google.com/file/d/1hBULzktjLu634lIz7dA7GNp0RXOnScay/view?usp=sharing
7
+
8
+ 003 Component-Diagram-Order-Processing
9
+ https://drive.google.com/file/d/1c-RAD_hDU4hWXL3KjB-7dq2hG5xJfkMH/view?usp=sharing
10
+
11
+ 004 Package-Diagram-Order-Processing
12
+ https://drive.google.com/file/d/1gLNN0cdloKqcx_afh7Vdy3EIC5T-wry6/view?usp=sharing
13
+
14
+ 005 Deployment-Diagram-Example
15
+ https://drive.google.com/file/d/1Q2sS_Dkp9I9vRXWVkqsEwoEKkmQYajwm/view?usp=sharing
16
+
17
+ 006 Composite-Structure-Diagram-PC
18
+ https://drive.google.com/file/d/1N3akUJToBbzFRTZk3l4OVQRAdPXL7AQC/view?usp=sharing
19
+
20
+ 007 Profile-Diagram-EJB-Profile
21
+ https://drive.google.com/file/d/1qBpP6aG6xDtsIFgTUpCnLi7SNbslQ8zn/view?usp=sharing
107 - Code Review Fundamentals/001 Introduction to Code Reviews_en.srt ADDED
@@ -0,0 +1,660 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:11,000
3
+ Hello dear students, in this lesson we are going to have Introduction to Code review process.
4
+
5
+ 2
6
+ 00:00:11,000 --> 00:00:18,000
7
+ We are going to hold an overview of what we are going to learn in this course about code review process
8
+
9
+ 3
10
+ 00:00:18,000 --> 00:00:21,000
11
+ and what are objectives of this course.
12
+
13
+ 4
14
+ 00:00:22,000 --> 00:00:27,000
15
+ I will explain you why secure, clean and scalable code is so important.
16
+
17
+ 5
18
+ 00:00:27,000 --> 00:00:29,000
19
+ And what is the role of code reviews?
20
+
21
+ 6
22
+ 00:00:29,000 --> 00:00:36,000
23
+ I will make an introduction to effective code review and we will discuss its impact on code quality
24
+
25
+ 7
26
+ 00:00:36,000 --> 00:00:37,000
27
+ and team collaboration.
28
+
29
+ 8
30
+ 00:00:37,000 --> 00:00:39,000
31
+ Let's start our lesson.
32
+
33
+ 9
34
+ 00:00:39,000 --> 00:00:42,000
35
+ Let's make an overview of this course.
36
+
37
+ 10
38
+ 00:00:42,000 --> 00:00:43,000
39
+ Objectives.
40
+
41
+ 11
42
+ 00:00:43,000 --> 00:00:50,000
43
+ This course aims to provide participants with a comprehensive understanding of code reviews for creating
44
+
45
+ 12
46
+ 00:00:50,000 --> 00:00:55,000
47
+ secure, clean and scalable code while fostering effective teamwork.
48
+
49
+ 13
50
+ 00:00:55,000 --> 00:00:57,000
51
+ The key objectives include.
52
+
53
+ 14
54
+ 00:00:58,000 --> 00:01:02,000
55
+ Explore the importance of code reviews in software development.
56
+
57
+ 15
58
+ 00:01:02,000 --> 00:01:06,000
59
+ Understand the impact of code quality and team collaboration.
60
+
61
+ 16
62
+ 00:01:07,000 --> 00:01:11,000
63
+ I will help you to grasp the basic principles and goals of code reviews.
64
+
65
+ 17
66
+ 00:01:11,000 --> 00:01:14,000
67
+ Differentiate between various types of code reviews.
68
+
69
+ 18
70
+ 00:01:14,000 --> 00:01:17,000
71
+ Defines the roles of code reviewer and author.
72
+
73
+ 19
74
+ 00:01:17,000 --> 00:01:21,000
75
+ Together will develop a mindset for efficient code reviews.
76
+
77
+ 20
78
+ 00:01:22,000 --> 00:01:28,000
79
+ Also during the course we will talk about code review tools and their significance using of automated
80
+
81
+ 21
82
+ 00:01:28,000 --> 00:01:30,000
83
+ tools for code analysis.
84
+
85
+ 22
86
+ 00:01:30,000 --> 00:01:35,000
87
+ I will share with you how you can integrate tools into the development process.
88
+
89
+ 23
90
+ 00:01:35,000 --> 00:01:40,000
91
+ In the course, we will explore best practices for writing secure and scalable code.
92
+
93
+ 24
94
+ 00:01:41,000 --> 00:01:47,000
95
+ I will share with you my experience to help you establish review guidelines and expectations in your
96
+
97
+ 25
98
+ 00:01:47,000 --> 00:01:48,000
99
+ team.
100
+
101
+ 26
102
+ 00:01:48,000 --> 00:01:53,000
103
+ Also, I will teach you how to provide fair and objective feedback and a separate lesson.
104
+
105
+ 27
106
+ 00:01:53,000 --> 00:01:56,000
107
+ We will talk about using constructive criticism techniques.
108
+
109
+ 28
110
+ 00:01:57,000 --> 00:02:01,000
111
+ We will learn how to communicate effectively during code reviews.
112
+
113
+ 29
114
+ 00:02:01,000 --> 00:02:06,000
115
+ And of course we will hold an overview of coding standards and best practices.
116
+
117
+ 30
118
+ 00:02:07,000 --> 00:02:12,000
119
+ Another important objective of this course is to learn how to create a positive code, review culture,
120
+
121
+ 31
122
+ 00:02:12,000 --> 00:02:20,000
123
+ build trust among team members, engage in collaborative code reviews, and participate in team based
124
+
125
+ 32
126
+ 00:02:20,000 --> 00:02:22,000
127
+ code review simulations.
128
+
129
+ 33
130
+ 00:02:22,000 --> 00:02:28,000
131
+ In the separate section of the course, I will explain you how to set and enforce coding standards,
132
+
133
+ 34
134
+ 00:02:29,000 --> 00:02:35,000
135
+ ensure code quality and consistency, develop code standards specific to different programming languages,
136
+
137
+ 35
138
+ 00:02:35,000 --> 00:02:38,000
139
+ and create a code standards checklist.
140
+
141
+ 36
142
+ 00:02:39,000 --> 00:02:45,000
143
+ Taking into account one of the goals of our course is to ensure creation of scalable code.
144
+
145
+ 37
146
+ 00:02:45,000 --> 00:02:50,000
147
+ In the separate section, we will understand what scalability and software development is.
148
+
149
+ 38
150
+ 00:02:51,000 --> 00:02:57,000
151
+ We will explore our best practices for scalable code, identify and address scalability challenges,
152
+
153
+ 39
154
+ 00:02:57,000 --> 00:02:59,000
155
+ analyze code for scalability issues.
156
+
157
+ 40
158
+ 00:03:00,000 --> 00:03:06,000
159
+ And of course, one of the most important objectives of this course is to learn how to ensure creation
160
+
161
+ 41
162
+ 00:03:06,000 --> 00:03:07,000
163
+ of secure code.
164
+
165
+ 42
166
+ 00:03:07,000 --> 00:03:13,000
167
+ Through the code review process, we will talk about importance of security in software development.
168
+
169
+ 43
170
+ 00:03:13,000 --> 00:03:18,000
171
+ We will also identify common security vulnerabilities, integrate security best practices into code
172
+
173
+ 44
174
+ 00:03:18,000 --> 00:03:23,000
175
+ reviews, and we will learn how to address and mitigate security flaws in code.
176
+
177
+ 45
178
+ 00:03:24,000 --> 00:03:30,000
179
+ And besides all this, we will learn lots more things on our way to course objectives.
180
+
181
+ 46
182
+ 00:03:30,000 --> 00:03:36,000
183
+ By the end of the course, all students should have the knowledge and skills to conduct effective,
184
+
185
+ 47
186
+ 00:03:36,000 --> 00:03:42,000
187
+ secure and collaborative code reviews contributing to the development of high quality software.
188
+
189
+ 48
190
+ 00:03:43,000 --> 00:03:47,000
191
+ Let me now explain the importance of writing secure, clean and scalable code.
192
+
193
+ 49
194
+ 00:03:48,000 --> 00:03:55,000
195
+ The significance of developing secure, clean, and scalable code lies in its profound impact on the
196
+
197
+ 50
198
+ 00:03:55,000 --> 00:03:59,000
199
+ overall success and sustainability of software projects.
200
+
201
+ 51
202
+ 00:04:00,000 --> 00:04:07,000
203
+ Regarding security, writing secure code is essential to safeguard software from potential vulnerabilities
204
+
205
+ 52
206
+ 00:04:07,000 --> 00:04:08,000
207
+ and cyber threats.
208
+
209
+ 53
210
+ 00:04:09,000 --> 00:04:16,000
211
+ Secure code ensures the confidentiality and integrity of sensitive data, preventing unauthorized access
212
+
213
+ 54
214
+ 00:04:16,000 --> 00:04:17,000
215
+ or manipulation.
216
+
217
+ 55
218
+ 00:04:18,000 --> 00:04:20,000
219
+ Regarding clean code.
220
+
221
+ 56
222
+ 00:04:20,000 --> 00:04:26,000
223
+ Clean code is easily readable and understandable, facilitating collaboration among team members and
224
+
225
+ 57
226
+ 00:04:26,000 --> 00:04:28,000
227
+ making maintenance more efficient.
228
+
229
+ 58
230
+ 00:04:29,000 --> 00:04:35,000
231
+ Well organized and clear code reduces the likelihood of introducing bugs and errors contributing to
232
+
233
+ 59
234
+ 00:04:35,000 --> 00:04:37,000
235
+ overall software stability.
236
+
237
+ 60
238
+ 00:04:38,000 --> 00:04:40,000
239
+ And regarding scalability aspect.
240
+
241
+ 61
242
+ 00:04:41,000 --> 00:04:50,000
243
+ Scalable code allows software to adapt to increased demands, accommodating growth in users data features
244
+
245
+ 62
246
+ 00:04:50,000 --> 00:04:53,000
247
+ without a significant drop in performance.
248
+
249
+ 63
250
+ 00:04:54,000 --> 00:05:02,000
251
+ Scalable code minimizes the need for extensive rewrites or redesigns as a software expands, leading
252
+
253
+ 64
254
+ 00:05:02,000 --> 00:05:04,000
255
+ to cost effective long tum development.
256
+
257
+ 65
258
+ 00:05:05,000 --> 00:05:12,000
259
+ So prioritizing secure, clean, and scalable code is not only a best practice for maintaining the integrity
260
+
261
+ 66
262
+ 00:05:12,000 --> 00:05:18,000
263
+ of software, but also contributes to collaboration, efficiency, and the long tum success of development
264
+
265
+ 67
266
+ 00:05:18,000 --> 00:05:19,000
267
+ projects.
268
+
269
+ 68
270
+ 00:05:20,000 --> 00:05:21,000
271
+ And why?
272
+
273
+ 69
274
+ 00:05:21,000 --> 00:05:23,000
275
+ This course is about code review process.
276
+
277
+ 70
278
+ 00:05:23,000 --> 00:05:29,000
279
+ What is the role of code review in production of secure, clean and scalable code?
280
+
281
+ 71
282
+ 00:05:30,000 --> 00:05:36,000
283
+ Code reviews play a crucial role in ensuring the quality, maintainability and collaborative success
284
+
285
+ 72
286
+ 00:05:36,000 --> 00:05:38,000
287
+ of software development projects.
288
+
289
+ 73
290
+ 00:05:39,000 --> 00:05:43,000
291
+ Let me share with you a few important points and considerations.
292
+
293
+ 74
294
+ 00:05:44,000 --> 00:05:50,000
295
+ Code reviews help identify and fix bugs, errors, and potential issues early in the development process,
296
+
297
+ 75
298
+ 00:05:50,000 --> 00:05:53,000
299
+ improving overall software quality.
300
+
301
+ 76
302
+ 00:05:53,000 --> 00:06:00,000
303
+ Reviewing code ensures adherence to coding standards, promoting consistency in the code base.
304
+
305
+ 77
306
+ 00:06:00,000 --> 00:06:06,000
307
+ Code reviews provide a platform for team members to collaborate, share knowledge, and learn from each
308
+
309
+ 78
310
+ 00:06:06,000 --> 00:06:08,000
311
+ other's expertise.
312
+
313
+ 79
314
+ 00:06:08,000 --> 00:06:13,000
315
+ Senior team members can guide and mentor junior developers through code reviews.
316
+
317
+ 80
318
+ 00:06:13,000 --> 00:06:15,000
319
+ Fostering skill development.
320
+
321
+ 81
322
+ 00:06:16,000 --> 00:06:23,000
323
+ Reviews help ensure that code is clear, well documented and easy to understand, making it more maintainable
324
+
325
+ 82
326
+ 00:06:23,000 --> 00:06:24,000
327
+ in the long run.
328
+
329
+ 83
330
+ 00:06:25,000 --> 00:06:31,000
331
+ Regular reviews contribute to addressing technical debt by catching and fixing issues before they accumulate.
332
+
333
+ 84
334
+ 00:06:32,000 --> 00:06:38,000
335
+ Code reviews offer opportunities for developers to learn new techniques, best practices, and coding
336
+
337
+ 85
338
+ 00:06:38,000 --> 00:06:40,000
339
+ patterns from their peers.
340
+
341
+ 86
342
+ 00:06:41,000 --> 00:06:47,000
343
+ Constructive feedback from code reviews allows developers to improve their skills and grow professionally.
344
+
345
+ 87
346
+ 00:06:48,000 --> 00:06:54,000
347
+ Code reviews help in identifying and mitigating security vulnerabilities, ensuring that the software
348
+
349
+ 88
350
+ 00:06:54,000 --> 00:06:57,000
351
+ is resilient to potential threats.
352
+
353
+ 89
354
+ 00:06:58,000 --> 00:07:04,000
355
+ Regular reviews contribute to code stability by catching potential issues that could lead to system
356
+
357
+ 90
358
+ 00:07:04,000 --> 00:07:06,000
359
+ failures or crashes.
360
+
361
+ 91
362
+ 00:07:07,000 --> 00:07:12,000
363
+ Issues identified during code reviews can be addressed promptly, preventing them from escalating and
364
+
365
+ 92
366
+ 00:07:12,000 --> 00:07:14,000
367
+ delaying the development process.
368
+
369
+ 93
370
+ 00:07:15,000 --> 00:07:21,000
371
+ Efficient code reviews contribute to a smoother development workflow, reducing the likelihood of post-release
372
+
373
+ 94
374
+ 00:07:21,000 --> 00:07:22,000
375
+ issues.
376
+
377
+ 95
378
+ 00:07:22,000 --> 00:07:28,000
379
+ Code reviews ensures that the development team adheres to coding standards, industry best practices,
380
+
381
+ 96
382
+ 00:07:28,000 --> 00:07:30,000
383
+ and project specific guidelines.
384
+
385
+ 97
386
+ 00:07:30,000 --> 00:07:37,000
387
+ In essence, code reviews serve as a cornerstone in maintaining code quality, fostering collaboration,
388
+
389
+ 98
390
+ 00:07:37,000 --> 00:07:43,000
391
+ and continuously improving the development process, ultimately contributing to the success of software
392
+
393
+ 99
394
+ 00:07:43,000 --> 00:07:44,000
395
+ projects.
396
+
397
+ 100
398
+ 00:07:44,000 --> 00:07:49,000
399
+ How we can make code review process effective and why it is important.
400
+
401
+ 101
402
+ 00:07:49,000 --> 00:07:55,000
403
+ Effective code review is a critical practice in software development, contributing to the creation
404
+
405
+ 102
406
+ 00:07:55,000 --> 00:08:00,000
407
+ of high quality, maintainable code and fostering collaboration within a development team.
408
+
409
+ 103
410
+ 00:08:01,000 --> 00:08:05,000
411
+ Let me introduce key aspects of effective code review.
412
+
413
+ 104
414
+ 00:08:05,000 --> 00:08:11,000
415
+ Effective code review aims to ensure the quality and reliability of the code base by catching bugs,
416
+
417
+ 105
418
+ 00:08:11,000 --> 00:08:15,000
419
+ errors, and potential issues before they impact the software.
420
+
421
+ 106
422
+ 00:08:16,000 --> 00:08:22,000
423
+ It serves as a mechanism for continuous improvement, allowing developers to learn from one another,
424
+
425
+ 107
426
+ 00:08:22,000 --> 00:08:25,000
427
+ share knowledge, and refine their coding skills.
428
+
429
+ 108
430
+ 00:08:26,000 --> 00:08:31,000
431
+ Code review provides an opportunity for team members to share their expertise, fostering a collaborative
432
+
433
+ 109
434
+ 00:08:31,000 --> 00:08:34,000
435
+ environment where developers learn from each other.
436
+
437
+ 110
438
+ 00:08:34,000 --> 00:08:40,000
439
+ Like we already mentioned before, senior developers can mentor junior team members through constructive
440
+
441
+ 111
442
+ 00:08:40,000 --> 00:08:43,000
443
+ feedback and guidance during code review.
444
+
445
+ 112
446
+ 00:08:43,000 --> 00:08:50,000
447
+ Effective code reviews involve providing constructive criticism, rather than merely pointing out flaws
448
+
449
+ 113
450
+ 00:08:50,000 --> 00:08:54,000
451
+ and encouraging a positive and growth oriented atmosphere.
452
+
453
+ 114
454
+ 00:08:54,000 --> 00:09:01,000
455
+ Reviewers focus on ensuring that the code is clear, well documented, and adheres to coding standards,
456
+
457
+ 115
458
+ 00:09:01,000 --> 00:09:04,000
459
+ promoting readability and maintainability.
460
+
461
+ 116
462
+ 00:09:04,000 --> 00:09:12,000
463
+ The reviewer plays a crucial role in evaluating the code for quality correctness and adherence to coding
464
+
465
+ 117
466
+ 00:09:12,000 --> 00:09:12,000
467
+ standards.
468
+
469
+ 118
470
+ 00:09:13,000 --> 00:09:16,000
471
+ They provide feedback and guidance to improve the code.
472
+
473
+ 119
474
+ 00:09:16,000 --> 00:09:22,000
475
+ The author is responsible for presenting their code concisely, addressing commands, and learning from
476
+
477
+ 120
478
+ 00:09:22,000 --> 00:09:26,000
479
+ the feedback provided during the review process.
480
+
481
+ 121
482
+ 00:09:26,000 --> 00:09:32,000
483
+ Communication during code review should be clear, specific, and respectful, focusing on the improvement
484
+
485
+ 122
486
+ 00:09:32,000 --> 00:09:35,000
487
+ of the code rather than personal criticism.
488
+
489
+ 123
490
+ 00:09:36,000 --> 00:09:43,000
491
+ Both reviewers and authors should aim for timely responses to ensure a smooth and efficient review process.
492
+
493
+ 124
494
+ 00:09:44,000 --> 00:09:49,000
495
+ Code review establishes a feedback loop where developers receive input on their work, facilitating
496
+
497
+ 125
498
+ 00:09:49,000 --> 00:09:53,000
499
+ continuous learning and improvement through code review.
500
+
501
+ 126
502
+ 00:09:53,000 --> 00:10:00,000
503
+ Teams can adopt and reinforce best practices, aligning their coding standards with industry norms.
504
+
505
+ 127
506
+ 00:10:01,000 --> 00:10:07,000
507
+ Incorporating code review early in the development process helps identify and address issues at the
508
+
509
+ 128
510
+ 00:10:07,000 --> 00:10:12,000
511
+ initial stages, reducing the likelihood of downstream problems.
512
+
513
+ 129
514
+ 00:10:12,000 --> 00:10:19,000
515
+ Effective code review often involves the use of tools and automation to streamline the process and ensure
516
+
517
+ 130
518
+ 00:10:19,000 --> 00:10:20,000
519
+ consistency.
520
+
521
+ 131
522
+ 00:10:21,000 --> 00:10:27,000
523
+ As you can see, effective code review is a collaborative and continuous process that not only enhances
524
+
525
+ 132
526
+ 00:10:27,000 --> 00:10:34,000
527
+ the quality of the code, but also cultivates a positive and knowledge sharing culture within the development
528
+
529
+ 133
530
+ 00:10:34,000 --> 00:10:34,000
531
+ team.
532
+
533
+ 134
534
+ 00:10:35,000 --> 00:10:42,000
535
+ Code reviews have a deep impact on both code quality and team collaboration and software development.
536
+
537
+ 135
538
+ 00:10:43,000 --> 00:10:50,000
539
+ We already learned a lot, but let's make a summary to understand how code review process impacts on
540
+
541
+ 136
542
+ 00:10:50,000 --> 00:10:52,000
543
+ code quality and team collaboration.
544
+
545
+ 137
546
+ 00:10:53,000 --> 00:10:59,000
547
+ Code reviews serve as an additional layer of research, helping to detect and address bugs, errors,
548
+
549
+ 138
550
+ 00:10:59,000 --> 00:11:03,000
551
+ and potential issues early in the development process.
552
+
553
+ 139
554
+ 00:11:03,000 --> 00:11:11,000
555
+ Code reviews ensures that code follows established coding standards, promoting consistency and readability
556
+
557
+ 140
558
+ 00:11:11,000 --> 00:11:16,000
559
+ throughout the code base by catching and addressing issues promptly.
560
+
561
+ 141
562
+ 00:11:16,000 --> 00:11:22,000
563
+ Code reviews contribute to reducing technical debt, preventing the accumulation of unresolved problems.
564
+
565
+ 142
566
+ 00:11:23,000 --> 00:11:29,000
567
+ Code reviews provide a platform for team members to share their knowledge, expertise, and best practices,
568
+
569
+ 143
570
+ 00:11:29,000 --> 00:11:31,000
571
+ fostering a culture of continuous learning.
572
+
573
+ 144
574
+ 00:11:32,000 --> 00:11:40,000
575
+ During the code review, a reviewers can seek clarification on code intent, ensuring that the purpose
576
+
577
+ 145
578
+ 00:11:40,000 --> 00:11:46,000
579
+ and functionality are well understood, leading to more robust implementations.
580
+
581
+ 146
582
+ 00:11:46,000 --> 00:11:51,000
583
+ Code review process may also have a positive impact on team morale.
584
+
585
+ 147
586
+ 00:11:51,000 --> 00:11:57,000
587
+ Positive feedback during code reviews acknowledges the efforts and skills of individual team members,
588
+
589
+ 148
590
+ 00:11:57,000 --> 00:12:01,000
591
+ boosting morale and creating a positive work environment.
592
+
593
+ 149
594
+ 00:12:01,000 --> 00:12:07,000
595
+ Very often, code reviewers forgot about providing positive feedback to.
596
+
597
+ 150
598
+ 00:12:07,000 --> 00:12:14,000
599
+ Code reviews facilitate the timely resolution of issues, ensuring a smoother development workflow with
600
+
601
+ 151
602
+ 00:12:14,000 --> 00:12:15,000
603
+ fewer disruptions.
604
+
605
+ 152
606
+ 00:12:16,000 --> 00:12:22,000
607
+ With a focus on quality assurance, code reviews contribute to increase productivity by minimizing the
608
+
609
+ 153
610
+ 00:12:22,000 --> 00:12:25,000
611
+ likelihood of post-release issues.
612
+
613
+ 154
614
+ 00:12:25,000 --> 00:12:32,000
615
+ In essence, effective code reviews are a cornerstone of achieving high code quality promoting collaboration,
616
+
617
+ 155
618
+ 00:12:32,000 --> 00:12:37,000
619
+ and cultivating a culture of continuous improvement within a software development team.
620
+
621
+ 156
622
+ 00:12:38,000 --> 00:12:40,000
623
+ That's all what I wanted to share with you in this lesson.
624
+
625
+ 157
626
+ 00:12:40,000 --> 00:12:46,000
627
+ We still have lots more to learn, but let's recap what we have learned today.
628
+
629
+ 158
630
+ 00:12:47,000 --> 00:12:50,000
631
+ Today we did an overview of objectives of the course.
632
+
633
+ 159
634
+ 00:12:50,000 --> 00:12:55,000
635
+ I explained the importance of secure, clean and scalable code.
636
+
637
+ 160
638
+ 00:12:55,000 --> 00:12:59,000
639
+ Also, we discussed why code review process is important.
640
+
641
+ 161
642
+ 00:12:59,000 --> 00:13:05,000
643
+ We talked about effective code review and what can be considered as effective code review.
644
+
645
+ 162
646
+ 00:13:05,000 --> 00:13:12,000
647
+ And also we made a summary of how effective code review impacts on code quality and team collaboration.
648
+
649
+ 163
650
+ 00:13:13,000 --> 00:13:14,000
651
+ That's all for this lesson.
652
+
653
+ 164
654
+ 00:13:14,000 --> 00:13:16,000
655
+ Thanks a lot for your attention.
656
+
657
+ 165
658
+ 00:13:16,000 --> 00:13:19,000
659
+ Have a great day and see you in the next lesson.
660
+
107 - Code Review Fundamentals/002 Basics of Code Review Process_en.srt ADDED
@@ -0,0 +1,1236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:09,000
7
+ In this lesson we'll learn basics of code review process.
8
+
9
+ 3
10
+ 00:00:09,000 --> 00:00:14,000
11
+ We'll start the lesson from learning the basic principles and goals of code reviews.
12
+
13
+ 4
14
+ 00:00:14,000 --> 00:00:20,000
15
+ I will explain you what different types of code reviews exist and which type is recommended for you
16
+
17
+ 5
18
+ 00:00:20,000 --> 00:00:22,000
19
+ under which circumstances.
20
+
21
+ 6
22
+ 00:00:23,000 --> 00:00:29,000
23
+ Today we'll review in details such fundamentals as rules of code, reviewer and author.
24
+
25
+ 7
26
+ 00:00:29,000 --> 00:00:34,000
27
+ I will also explain you what the reviewer mindset is and how to develop it.
28
+
29
+ 8
30
+ 00:00:34,000 --> 00:00:38,000
31
+ And by the end of the lesson, we'll talk about strategies for efficient code review.
32
+
33
+ 9
34
+ 00:00:39,000 --> 00:00:40,000
35
+ Let's start our lesson.
36
+
37
+ 10
38
+ 00:00:41,000 --> 00:00:46,000
39
+ And as I mentioned in agenda of the lesson, let's start from learning basic principles of code review
40
+
41
+ 11
42
+ 00:00:46,000 --> 00:00:46,000
43
+ process.
44
+
45
+ 12
46
+ 00:00:47,000 --> 00:00:51,000
47
+ On this stage, it is super important to create solid basement for our future learning.
48
+
49
+ 13
50
+ 00:00:52,000 --> 00:00:54,000
51
+ Basic principles are.
52
+
53
+ 14
54
+ 00:00:54,000 --> 00:00:55,000
55
+ Collaboration.
56
+
57
+ 15
58
+ 00:00:55,000 --> 00:00:56,000
59
+ Feedback.
60
+
61
+ 16
62
+ 00:00:56,000 --> 00:00:57,000
63
+ Continuous improvement.
64
+
65
+ 17
66
+ 00:00:57,000 --> 00:00:58,000
67
+ Focus on objectives.
68
+
69
+ 18
70
+ 00:00:58,000 --> 00:01:00,000
71
+ Code standards.
72
+
73
+ 19
74
+ 00:01:00,000 --> 00:01:01,000
75
+ Code ownership.
76
+
77
+ 20
78
+ 00:01:01,000 --> 00:01:02,000
79
+ Automation.
80
+
81
+ 21
82
+ 00:01:02,000 --> 00:01:03,000
83
+ Timeliness.
84
+
85
+ 22
86
+ 00:01:03,000 --> 00:01:04,000
87
+ Documentation.
88
+
89
+ 23
90
+ 00:01:05,000 --> 00:01:06,000
91
+ Let's review them one by one.
92
+
93
+ 24
94
+ 00:01:07,000 --> 00:01:12,000
95
+ Code review involves multiple team members collaborating to review each other's code.
96
+
97
+ 25
98
+ 00:01:12,000 --> 00:01:17,000
99
+ It promotes knowledge sharing and spreads best practices.
100
+
101
+ 26
102
+ 00:01:17,000 --> 00:01:24,000
103
+ Code review encourages discussions about design decisions, code structure, and potential improvements,
104
+
105
+ 27
106
+ 00:01:24,000 --> 00:01:28,000
107
+ leading to better informed decisions and more effective teamwork.
108
+
109
+ 28
110
+ 00:01:28,000 --> 00:01:33,000
111
+ Provide constructive feedback that helps the author improve their code.
112
+
113
+ 29
114
+ 00:01:33,000 --> 00:01:37,000
115
+ Feedback should be specific, actionable, and respectful.
116
+
117
+ 30
118
+ 00:01:37,000 --> 00:01:43,000
119
+ Code review is an iterative process aimed at continuously improving code quality.
120
+
121
+ 31
122
+ 00:01:43,000 --> 00:01:46,000
123
+ It is about learning and growing as a team.
124
+
125
+ 32
126
+ 00:01:46,000 --> 00:01:52,000
127
+ Code review encourages developers to reflect on their coding practices and seek opportunities for optimization
128
+
129
+ 33
130
+ 00:01:52,000 --> 00:01:54,000
131
+ and refinement.
132
+
133
+ 34
134
+ 00:01:54,000 --> 00:02:01,000
135
+ Reviewers should focus on the objectives of the code change, such as solving a particular problem or
136
+
137
+ 35
138
+ 00:02:01,000 --> 00:02:06,000
139
+ implementing a new feature, rather than nitpicking on tribal issues.
140
+
141
+ 36
142
+ 00:02:06,000 --> 00:02:14,000
143
+ This is important ensures that code adheres to the team's coding standards, style guidelines, and
144
+
145
+ 37
146
+ 00:02:14,000 --> 00:02:15,000
147
+ best practices.
148
+
149
+ 38
150
+ 00:02:15,000 --> 00:02:19,000
151
+ Consistency is crucial for maintainability and readability.
152
+
153
+ 39
154
+ 00:02:19,000 --> 00:02:26,000
155
+ Respect the authors ownership of their code while also promoting collective code ownership.
156
+
157
+ 40
158
+ 00:02:27,000 --> 00:02:32,000
159
+ Encourage authors to take responsibility for their code and address feedback accordingly.
160
+
161
+ 41
162
+ 00:02:32,000 --> 00:02:40,000
163
+ Use automated tools such as linters and static code analysis tools to catch common issues and enforce
164
+
165
+ 42
166
+ 00:02:40,000 --> 00:02:41,000
167
+ coding standards.
168
+
169
+ 43
170
+ 00:02:41,000 --> 00:02:46,000
171
+ This helps streamline the review process and ensures consistency.
172
+
173
+ 44
174
+ 00:02:47,000 --> 00:02:52,000
175
+ Conduct code reviews in a timely manner to avoid delays in the development process.
176
+
177
+ 45
178
+ 00:02:52,000 --> 00:02:59,000
179
+ Set clear expectations for review turnaround times, and prioritize critical changes.
180
+
181
+ 46
182
+ 00:02:59,000 --> 00:03:06,000
183
+ Document decisions made during the review process, especially regarding design choices, architectural
184
+
185
+ 47
186
+ 00:03:06,000 --> 00:03:08,000
187
+ decisions, and lessons learned.
188
+
189
+ 48
190
+ 00:03:09,000 --> 00:03:15,000
191
+ This helps maintain a record of discussions and facilitates onboarding of new team members.
192
+
193
+ 49
194
+ 00:03:15,000 --> 00:03:18,000
195
+ The basic principles of code review process.
196
+
197
+ 50
198
+ 00:03:19,000 --> 00:03:20,000
199
+ Let's review now.
200
+
201
+ 51
202
+ 00:03:20,000 --> 00:03:22,000
203
+ Goals of code review process.
204
+
205
+ 52
206
+ 00:03:23,000 --> 00:03:27,000
207
+ There are following goals of code review process quality assurance.
208
+
209
+ 53
210
+ 00:03:27,000 --> 00:03:35,000
211
+ Knowledge sharing, consistency, risk reduction, code ownership, onboarding and mentoring.
212
+
213
+ 54
214
+ 00:03:35,000 --> 00:03:38,000
215
+ Let me explain you each of these.
216
+
217
+ 55
218
+ 00:03:38,000 --> 00:03:45,000
219
+ Ensure the quality of the code base by identifying and fixing defects, bugs, and potential issues
220
+
221
+ 56
222
+ 00:03:45,000 --> 00:03:48,000
223
+ before you find them in production.
224
+
225
+ 57
226
+ 00:03:48,000 --> 00:03:56,000
227
+ Code review helps in maintaining a high level of code quality, which ultimately leads to better software
228
+
229
+ 58
230
+ 00:03:56,000 --> 00:03:58,000
231
+ reliability and user satisfaction.
232
+
233
+ 59
234
+ 00:03:59,000 --> 00:04:05,000
235
+ Facilitate knowledge sharing among team members by providing an opportunity for developers to learn
236
+
237
+ 60
238
+ 00:04:05,000 --> 00:04:07,000
239
+ from each other through code review.
240
+
241
+ 61
242
+ 00:04:07,000 --> 00:04:14,000
243
+ Team members can gain insights into different coding styles, techniques, and approaches, thus improving
244
+
245
+ 62
246
+ 00:04:14,000 --> 00:04:18,000
247
+ their own skills and understanding of the code base.
248
+
249
+ 63
250
+ 00:04:19,000 --> 00:04:26,000
251
+ Enforce coding standards, best practices, and design patterns across the code base by reviewing code
252
+
253
+ 64
254
+ 00:04:26,000 --> 00:04:27,000
255
+ changes.
256
+
257
+ 65
258
+ 00:04:27,000 --> 00:04:33,000
259
+ Teams can ensure consistency in coding style architecture and implementation, making the code base
260
+
261
+ 66
262
+ 00:04:33,000 --> 00:04:37,000
263
+ more maintainable and easier to understand for everyone.
264
+
265
+ 67
266
+ 00:04:38,000 --> 00:04:45,000
267
+ Mitigate the risk of introducing defects and vulnerabilities into the code base by having multiple sets
268
+
269
+ 68
270
+ 00:04:45,000 --> 00:04:45,000
271
+ of eyes.
272
+
273
+ 69
274
+ 00:04:45,000 --> 00:04:47,000
275
+ Reviewing code changes.
276
+
277
+ 70
278
+ 00:04:47,000 --> 00:04:53,000
279
+ Teams can catch potential issues early in the development process, reducing the likelihood of costly
280
+
281
+ 71
282
+ 00:04:53,000 --> 00:04:55,000
283
+ bugs slipping into the production.
284
+
285
+ 72
286
+ 00:04:56,000 --> 00:05:03,000
287
+ Foster a sense of ownership and accountability among team members by participating in code review.
288
+
289
+ 73
290
+ 00:05:03,000 --> 00:05:10,000
291
+ Developers take responsibility for the quality and integrity of their code, leading to a more empowered
292
+
293
+ 74
294
+ 00:05:10,000 --> 00:05:11,000
295
+ and motivated team.
296
+
297
+ 75
298
+ 00:05:12,000 --> 00:05:18,000
299
+ Facilitate the onboarding process for new team members by exposing them to the code base and development
300
+
301
+ 76
302
+ 00:05:18,000 --> 00:05:20,000
303
+ practices through code review.
304
+
305
+ 77
306
+ 00:05:21,000 --> 00:05:27,000
307
+ Additionally, Code Review serves as a platform for more experienced developers to mentor junior members,
308
+
309
+ 78
310
+ 00:05:27,000 --> 00:05:30,000
311
+ helping them grow and develop their skills.
312
+
313
+ 79
314
+ 00:05:30,000 --> 00:05:37,000
315
+ Overall, the primary goals of the code review process are to improve code quality, foster collaboration
316
+
317
+ 80
318
+ 00:05:37,000 --> 00:05:42,000
319
+ and learning, mitigate risks, and ultimately deliver better software products to users.
320
+
321
+ 81
322
+ 00:05:43,000 --> 00:05:47,000
323
+ And now let's review different types of code reviews.
324
+
325
+ 82
326
+ 00:05:47,000 --> 00:05:53,000
327
+ There are several types of code reviews, each with its own characteristics and objectives.
328
+
329
+ 83
330
+ 00:05:53,000 --> 00:05:55,000
331
+ Here are some common types.
332
+
333
+ 84
334
+ 00:05:56,000 --> 00:05:57,000
335
+ Pair programming.
336
+
337
+ 85
338
+ 00:05:57,000 --> 00:05:59,000
339
+ In pair programming.
340
+
341
+ 86
342
+ 00:05:59,000 --> 00:06:01,000
343
+ Two developers work together at the same workstation.
344
+
345
+ 87
346
+ 00:06:01,000 --> 00:06:09,000
347
+ They collaboratively write and review code in real time, discussing design decisions and implementation
348
+
349
+ 88
350
+ 00:06:09,000 --> 00:06:10,000
351
+ details as they go.
352
+
353
+ 89
354
+ 00:06:11,000 --> 00:06:16,000
355
+ Pair programming fosters close collaboration and immediate feedback, leading to higher code quality
356
+
357
+ 90
358
+ 00:06:16,000 --> 00:06:18,000
359
+ and knowledge sharing.
360
+
361
+ 91
362
+ 00:06:18,000 --> 00:06:21,000
363
+ I used to work using pair programming technique.
364
+
365
+ 92
366
+ 00:06:22,000 --> 00:06:31,000
367
+ My personal feedback is this is simply amazing, but sometimes better quality is not instantly visible,
368
+
369
+ 93
370
+ 00:06:31,000 --> 00:06:38,000
371
+ and sometimes it is challenging to explain business stakeholders why two people are working on the same
372
+
373
+ 94
374
+ 00:06:38,000 --> 00:06:38,000
375
+ task.
376
+
377
+ 95
378
+ 00:06:39,000 --> 00:06:43,000
379
+ Because usually business stakeholders think in a straightforward way.
380
+
381
+ 96
382
+ 00:06:43,000 --> 00:06:49,000
383
+ If there are two developers, they can produce twice as much code, so no sense for them to work in
384
+
385
+ 97
386
+ 00:06:49,000 --> 00:06:50,000
387
+ pairs.
388
+
389
+ 98
390
+ 00:06:50,000 --> 00:06:53,000
391
+ So, you know pros and cons.
392
+
393
+ 99
394
+ 00:06:53,000 --> 00:06:59,000
395
+ And it is only matter of your decision now and how you will explain this to business stakeholders.
396
+
397
+ 100
398
+ 00:07:00,000 --> 00:07:05,000
399
+ If you would have any questions, please do not hesitate to post your questions below the video and
400
+
401
+ 101
402
+ 00:07:05,000 --> 00:07:07,000
403
+ I will be happy to answer.
404
+
405
+ 102
406
+ 00:07:07,000 --> 00:07:11,000
407
+ Another type of code review is ad hoc reviews.
408
+
409
+ 103
410
+ 00:07:12,000 --> 00:07:18,000
411
+ AD hoc reviews are informal and spontaneous code reviews that occur on an as needed basis.
412
+
413
+ 104
414
+ 00:07:18,000 --> 00:07:24,000
415
+ Developers may request feedback from their colleagues or spontaneously review each other's code without
416
+
417
+ 105
418
+ 00:07:24,000 --> 00:07:26,000
419
+ following a structured process.
420
+
421
+ 106
422
+ 00:07:27,000 --> 00:07:33,000
423
+ While less formal, ad hoc reviews can still provide valuable insights and help identify issues early
424
+
425
+ 107
426
+ 00:07:33,000 --> 00:07:34,000
427
+ in the development process.
428
+
429
+ 108
430
+ 00:07:35,000 --> 00:07:37,000
431
+ Over the shoulder reviews.
432
+
433
+ 109
434
+ 00:07:38,000 --> 00:07:43,000
435
+ Over the shoulder reviews involve one developer physically sitting with another and reviewing their
436
+
437
+ 110
438
+ 00:07:43,000 --> 00:07:44,000
439
+ code.
440
+
441
+ 111
442
+ 00:07:44,000 --> 00:07:50,000
443
+ The reviewer provides feedback and suggestions in real time as they examine the code together.
444
+
445
+ 112
446
+ 00:07:51,000 --> 00:07:56,000
447
+ Over the shoulder reviews are beneficial for immediate feedback and knowledge transfer, but may not
448
+
449
+ 113
450
+ 00:07:56,000 --> 00:07:59,000
451
+ be practical for remote or distributed teams.
452
+
453
+ 114
454
+ 00:08:00,000 --> 00:08:02,000
455
+ Tool assisted reviews.
456
+
457
+ 115
458
+ 00:08:03,000 --> 00:08:09,000
459
+ Tool assisted reviews utilize specialized code review tools or platforms to facilitate the review process.
460
+
461
+ 116
462
+ 00:08:10,000 --> 00:08:18,000
463
+ These tools offer features such as code diffing to highlight all differences instantly, inline commenting,
464
+
465
+ 117
466
+ 00:08:18,000 --> 00:08:25,000
467
+ issue tracking, and workflow management to streamline the review process and enhance collaboration.
468
+
469
+ 118
470
+ 00:08:25,000 --> 00:08:31,000
471
+ Example of code review tools include GitHub, GitLab, Bitbucket, and others.
472
+
473
+ 119
474
+ 00:08:32,000 --> 00:08:34,000
475
+ Formal inspections.
476
+
477
+ 120
478
+ 00:08:34,000 --> 00:08:43,000
479
+ Formal inspections, also known as peer reviews or walkthroughs, are structured and thorough code review
480
+
481
+ 121
482
+ 00:08:43,000 --> 00:08:48,000
483
+ processes conducted according to predefined guidelines and checklists.
484
+
485
+ 122
486
+ 00:08:48,000 --> 00:08:55,000
487
+ Participants typically include developers, testers, and other stakeholders who systematically examine
488
+
489
+ 123
490
+ 00:08:55,000 --> 00:09:00,000
491
+ the code for defects, compliance with standards, and adherence to requirements.
492
+
493
+ 124
494
+ 00:09:01,000 --> 00:09:08,000
495
+ Formal inspections are more time consuming, but can be highly effective for identifying complex issues
496
+
497
+ 125
498
+ 00:09:08,000 --> 00:09:11,000
499
+ and ensuring high quality code.
500
+
501
+ 126
502
+ 00:09:12,000 --> 00:09:13,000
503
+ Synchronous code review.
504
+
505
+ 127
506
+ 00:09:13,000 --> 00:09:21,000
507
+ In this type, the coder produces the code independently and then reviews it immediately, with the
508
+
509
+ 128
510
+ 00:09:21,000 --> 00:09:24,000
511
+ reviewer discussing and improving the code together.
512
+
513
+ 129
514
+ 00:09:24,000 --> 00:09:30,000
515
+ It is useful when the reviewer lacks knowledge about the task goals or when extensive code improvements
516
+
517
+ 130
518
+ 00:09:30,000 --> 00:09:31,000
519
+ are expected.
520
+
521
+ 131
522
+ 00:09:32,000 --> 00:09:34,000
523
+ Asynchronous code review.
524
+
525
+ 132
526
+ 00:09:34,000 --> 00:09:39,000
527
+ Here, the coder completes the code and makes it available for review.
528
+
529
+ 133
530
+ 00:09:39,000 --> 00:09:47,000
531
+ The reviewer then reviews the code at their own pace, providing commands and suggestions asynchronously.
532
+
533
+ 134
534
+ 00:09:47,000 --> 00:09:54,000
535
+ This type is beneficial when there is no direct dependency between the code and the reviewer, and allows
536
+
537
+ 135
538
+ 00:09:54,000 --> 00:09:56,000
539
+ for flexibility in scheduling.
540
+
541
+ 136
542
+ 00:09:56,000 --> 00:10:01,000
543
+ Asynchronous code review can be done with assistance of different tools for code review.
544
+
545
+ 137
546
+ 00:10:03,000 --> 00:10:03,000
547
+ Code review.
548
+
549
+ 138
550
+ 00:10:03,000 --> 00:10:10,000
551
+ Once in a while, this method involves periodic code review sessions conducted by the entire team,
552
+
553
+ 139
554
+ 00:10:10,000 --> 00:10:17,000
555
+ where one developer presents a piece of code they have been working on, and the team collectively reviews
556
+
557
+ 140
558
+ 00:10:17,000 --> 00:10:18,000
559
+ and discusses it.
560
+
561
+ 141
562
+ 00:10:19,000 --> 00:10:24,000
563
+ While not a permanent option, it can be useful for teams new to code reviews.
564
+
565
+ 142
566
+ 00:10:25,000 --> 00:10:31,000
567
+ Each type of code review has its own strengths and weaknesses, and the choice of which to use depends
568
+
569
+ 143
570
+ 00:10:31,000 --> 00:10:38,000
571
+ on factors such as team size, project complexity, development methodology, and organizational culture.
572
+
573
+ 144
574
+ 00:10:38,000 --> 00:10:44,000
575
+ Combining different types of code, reviews can provide a comprehensive approach to code quality assurance
576
+
577
+ 145
578
+ 00:10:44,000 --> 00:10:47,000
579
+ and collaboration within software development teams.
580
+
581
+ 146
582
+ 00:10:47,000 --> 00:10:53,000
583
+ When selecting the type of code review to use, several factors should be considered to ensure that
584
+
585
+ 147
586
+ 00:10:53,000 --> 00:10:58,000
587
+ it aligns the team's goals, workflow, and project requirements.
588
+
589
+ 148
590
+ 00:10:58,000 --> 00:11:02,000
591
+ So, how to select the type of code reviews that will suit your team's best?
592
+
593
+ 149
594
+ 00:11:03,000 --> 00:11:08,000
595
+ Let me provide you with a more detailed explanation of when to choose each type.
596
+
597
+ 150
598
+ 00:11:08,000 --> 00:11:10,000
599
+ Asynchronous code reviews.
600
+
601
+ 151
602
+ 00:11:10,000 --> 00:11:16,000
603
+ Asynchronous code reviews are suitable as a default option for professional development teams due to
604
+
605
+ 152
606
+ 00:11:16,000 --> 00:11:18,000
607
+ their flexibility and efficiency.
608
+
609
+ 153
610
+ 00:11:19,000 --> 00:11:25,000
611
+ They allow developers to review code at their own pace without being tied to synchronous collaboration.
612
+
613
+ 154
614
+ 00:11:26,000 --> 00:11:32,000
615
+ Asynchronous reviews prevent the need for force context switching, where developers are interrupted
616
+
617
+ 155
618
+ 00:11:32,000 --> 00:11:35,000
619
+ from their current tasks to participate in a review session.
620
+
621
+ 156
622
+ 00:11:36,000 --> 00:11:39,000
623
+ This helps maintain focus and productivity.
624
+
625
+ 157
626
+ 00:11:40,000 --> 00:11:46,000
627
+ Asynchronous reviews are effective for most common use cases, where developers can review code independently
628
+
629
+ 158
630
+ 00:11:46,000 --> 00:11:48,000
631
+ and provide feedback asynchronously.
632
+
633
+ 159
634
+ 00:11:48,000 --> 00:11:54,000
635
+ This type is ideal for teams with diverse schedules and distributed members.
636
+
637
+ 160
638
+ 00:11:54,000 --> 00:12:00,000
639
+ Synchronous code reviews are appropriate when the reviewer lacks understanding of the changes made by
640
+
641
+ 161
642
+ 00:12:00,000 --> 00:12:01,000
643
+ the coder.
644
+
645
+ 162
646
+ 00:12:01,000 --> 00:12:08,000
647
+ In such cases, immediate collaboration and explanation can help clarify the code and ensure that feedback
648
+
649
+ 163
650
+ 00:12:08,000 --> 00:12:10,000
651
+ is relevant and accurate.
652
+
653
+ 164
654
+ 00:12:10,000 --> 00:12:17,000
655
+ If extensive code improvements are expected due to the coders lack of experience or familiarity with
656
+
657
+ 165
658
+ 00:12:17,000 --> 00:12:18,000
659
+ the task.
660
+
661
+ 166
662
+ 00:12:18,000 --> 00:12:22,000
663
+ Synchronous reviews allow for real time discussion and iteration on the code.
664
+
665
+ 167
666
+ 00:12:23,000 --> 00:12:28,000
667
+ This can accelerate the review process and ensures that improvements are made efficiently.
668
+
669
+ 168
670
+ 00:12:29,000 --> 00:12:37,000
671
+ Pair programming or instant code review is beneficial when solving complex business problems that require
672
+
673
+ 169
674
+ 00:12:37,000 --> 00:12:40,000
675
+ close collaboration and immediate feedback to developers.
676
+
677
+ 170
678
+ 00:12:40,000 --> 00:12:47,000
679
+ Working together can brainstorm solutions, discuss edge cases, and ensure that all scenarios are properly
680
+
681
+ 171
682
+ 00:12:47,000 --> 00:12:48,000
683
+ handled in the code.
684
+
685
+ 172
686
+ 00:12:49,000 --> 00:12:55,000
687
+ Pair programming works best when both developers have similar levels of expertise, allowing them to
688
+
689
+ 173
690
+ 00:12:55,000 --> 00:13:00,000
691
+ work at a consistent pace and effectively collaborate on problem solving.
692
+
693
+ 174
694
+ 00:13:00,000 --> 00:13:07,000
695
+ It fosters mutual learning and motivation, leading to higher productivity and code quality.
696
+
697
+ 175
698
+ 00:13:08,000 --> 00:13:14,000
699
+ So asynchronous code reviews are the recommended default option for professional development teams due
700
+
701
+ 176
702
+ 00:13:14,000 --> 00:13:17,000
703
+ to their flexibility and efficiency.
704
+
705
+ 177
706
+ 00:13:17,000 --> 00:13:19,000
707
+ Synchronous reviews are.
708
+
709
+ 178
710
+ 00:13:19,000 --> 00:13:24,000
711
+ Pair programming can be utilized when necessary, such as when immediate collaboration is required,
712
+
713
+ 179
714
+ 00:13:24,000 --> 00:13:27,000
715
+ or for solving complex business problems.
716
+
717
+ 180
718
+ 00:13:27,000 --> 00:13:33,000
719
+ Ultimately, the choice of code review type should be based on the specific needs and circumstances
720
+
721
+ 181
722
+ 00:13:33,000 --> 00:13:35,000
723
+ of the team and the project.
724
+
725
+ 182
726
+ 00:13:36,000 --> 00:13:42,000
727
+ Understanding the roles of both the code reviewer and the code author is crucial for an effective code
728
+
729
+ 183
730
+ 00:13:42,000 --> 00:13:43,000
731
+ review process.
732
+
733
+ 184
734
+ 00:13:43,000 --> 00:13:46,000
735
+ Here is an explanation of each role.
736
+
737
+ 185
738
+ 00:13:47,000 --> 00:13:48,000
739
+ Code reviewer.
740
+
741
+ 186
742
+ 00:13:48,000 --> 00:13:54,000
743
+ The code reviewer is responsible for evaluating the code changes submitted by the author.
744
+
745
+ 187
746
+ 00:13:54,000 --> 00:14:02,000
747
+ This involves examining the code for errors, bugs, readability issues, and adherence to coding standards.
748
+
749
+ 188
750
+ 00:14:02,000 --> 00:14:08,000
751
+ The reviewer provides constructive feedback to the author based on their evaluation of the code.
752
+
753
+ 189
754
+ 00:14:08,000 --> 00:14:14,000
755
+ Feedback should be specific, actionable, and respectful, aimed at helping the author improve the
756
+
757
+ 190
758
+ 00:14:14,000 --> 00:14:15,000
759
+ quality of their code.
760
+
761
+ 191
762
+ 00:14:16,000 --> 00:14:21,000
763
+ Reviewers often share their expertise and knowledge with the author during the review process.
764
+
765
+ 192
766
+ 00:14:22,000 --> 00:14:28,000
767
+ They may suggest alternative solutions, best practices, or improvements based on their experience
768
+
769
+ 193
770
+ 00:14:28,000 --> 00:14:30,000
771
+ and understanding of the code base.
772
+
773
+ 194
774
+ 00:14:30,000 --> 00:14:37,000
775
+ In some cases, the reviewer acts as a gatekeeper insurance that only high quality code is merged into
776
+
777
+ 195
778
+ 00:14:37,000 --> 00:14:38,000
779
+ the code base.
780
+
781
+ 196
782
+ 00:14:38,000 --> 00:14:45,000
783
+ They may reject code changes that do not meet the required standards, or pose risks to the stability
784
+
785
+ 197
786
+ 00:14:45,000 --> 00:14:47,000
787
+ and integrity of the software.
788
+
789
+ 198
790
+ 00:14:47,000 --> 00:14:53,000
791
+ Reviewers collaborate with the author to discuss and address issues identified during the review.
792
+
793
+ 199
794
+ 00:14:53,000 --> 00:14:59,000
795
+ This collaboration fosters communication, teamwork, and collective ownership of the code base.
796
+
797
+ 200
798
+ 00:14:59,000 --> 00:15:03,000
799
+ Let's now talk about code author role.
800
+
801
+ 201
802
+ 00:15:03,000 --> 00:15:08,000
803
+ The code author is a developer who wrote the code changes being reviewed.
804
+
805
+ 202
806
+ 00:15:09,000 --> 00:15:14,000
807
+ They are responsible for implementing the requested feature, fixing bugs, or making improvements to
808
+
809
+ 203
810
+ 00:15:14,000 --> 00:15:15,000
811
+ the code base.
812
+
813
+ 204
814
+ 00:15:16,000 --> 00:15:21,000
815
+ The author presents the code changes to the reviewer for evaluation and feedback.
816
+
817
+ 205
818
+ 00:15:21,000 --> 00:15:28,000
819
+ They may provide context, explanations, or documentation to help the reviewer understand the purpose
820
+
821
+ 206
822
+ 00:15:28,000 --> 00:15:30,000
823
+ and intent of the changes.
824
+
825
+ 207
826
+ 00:15:31,000 --> 00:15:37,000
827
+ Authors receive feedback from the reviewer and are expected to consider it seriously.
828
+
829
+ 208
830
+ 00:15:37,000 --> 00:15:43,000
831
+ They should be open to constructive criticism and willing to make necessary revisions to improve the
832
+
833
+ 209
834
+ 00:15:43,000 --> 00:15:45,000
835
+ quality of their code.
836
+
837
+ 210
838
+ 00:15:46,000 --> 00:15:50,000
839
+ Authors use code reviews as an opportunity to learn and grow.
840
+
841
+ 211
842
+ 00:15:50,000 --> 00:15:57,000
843
+ As developers, they gain insights into the best practices, coding standards, and areas for improvement
844
+
845
+ 212
846
+ 00:15:57,000 --> 00:15:59,000
847
+ through feedback provided by reviewers.
848
+
849
+ 213
850
+ 00:16:00,000 --> 00:16:07,000
851
+ Ultimately, the author is responsible for addressing issues identified during the review and ensuring
852
+
853
+ 214
854
+ 00:16:07,000 --> 00:16:11,000
855
+ that their code meets the required standards and quality criteria.
856
+
857
+ 215
858
+ 00:16:11,000 --> 00:16:18,000
859
+ They may need to make revisions, clarify requirements, or seek assistance from other team members
860
+
861
+ 216
862
+ 00:16:18,000 --> 00:16:19,000
863
+ as needed.
864
+
865
+ 217
866
+ 00:16:19,000 --> 00:16:23,000
867
+ Let's now talk about development of a reviewer mindset.
868
+
869
+ 218
870
+ 00:16:24,000 --> 00:16:29,000
871
+ Developing a reviewer mindset is essential for conducting effective code reviews.
872
+
873
+ 219
874
+ 00:16:29,000 --> 00:16:34,000
875
+ Let's review some key aspects to consider when growing this mindset.
876
+
877
+ 220
878
+ 00:16:34,000 --> 00:16:38,000
879
+ Pay close attention to the details of the code being reviewed.
880
+
881
+ 221
882
+ 00:16:38,000 --> 00:16:45,000
883
+ Look for syntax errors, logic flaws, performance issues, and adherence to coding standards.
884
+
885
+ 222
886
+ 00:16:46,000 --> 00:16:52,000
887
+ A keen eye for detail helps ensure that no potential issues go unnoticed.
888
+
889
+ 223
890
+ 00:16:53,000 --> 00:16:56,000
891
+ Approach the review process with a critical mindset.
892
+
893
+ 224
894
+ 00:16:56,000 --> 00:17:02,000
895
+ Question assumptions, challenge design decisions, and look for alternative solutions.
896
+
897
+ 225
898
+ 00:17:03,000 --> 00:17:10,000
899
+ Critical thinking helps identify weaknesses in the code and suggests improvements that enhance its quality
900
+
901
+ 226
902
+ 00:17:10,000 --> 00:17:11,000
903
+ and robustness.
904
+
905
+ 227
906
+ 00:17:12,000 --> 00:17:17,000
907
+ Put yourself in the shoes of the code author and consider their perspective.
908
+
909
+ 228
910
+ 00:17:18,000 --> 00:17:25,000
911
+ Understand the challenges they faced, the constraints they worked under, and the reasons behind their
912
+
913
+ 229
914
+ 00:17:25,000 --> 00:17:26,000
915
+ decisions.
916
+
917
+ 230
918
+ 00:17:26,000 --> 00:17:32,000
919
+ Empathy fosters constructive feedback and promotes a supportive and collaborative review environment.
920
+
921
+ 231
922
+ 00:17:33,000 --> 00:17:36,000
923
+ Effectively communicate your feedback to the code author.
924
+
925
+ 232
926
+ 00:17:36,000 --> 00:17:43,000
927
+ Clearly articulate your thoughts, suggestions, and concerns in a respectful and professional manner.
928
+
929
+ 233
930
+ 00:17:43,000 --> 00:17:45,000
931
+ Use descriptive language.
932
+
933
+ 234
934
+ 00:17:45,000 --> 00:17:51,000
935
+ Provide examples, and offer explanations to ensure that your feedback is understood and actionable.
936
+
937
+ 235
938
+ 00:17:52,000 --> 00:17:58,000
939
+ Be open to different ideas, approaches and solutions presented in the code being reviewed.
940
+
941
+ 236
942
+ 00:17:58,000 --> 00:18:03,000
943
+ Avoid being overly attached to your own preferences or biases.
944
+
945
+ 237
946
+ 00:18:04,000 --> 00:18:11,000
947
+ Embrace diversity of thought and welcome feedback from others, even if it challenges your own perspective.
948
+
949
+ 238
950
+ 00:18:12,000 --> 00:18:17,000
951
+ Approach each code review as an opportunity to learn and grow as a developer.
952
+
953
+ 239
954
+ 00:18:17,000 --> 00:18:23,000
955
+ Stay curious, ask questions, and seek to expand your knowledge and understanding of different programming
956
+
957
+ 240
958
+ 00:18:23,000 --> 00:18:26,000
959
+ languages, frameworks, and design patterns.
960
+
961
+ 241
962
+ 00:18:27,000 --> 00:18:32,000
963
+ Embrace feedback from others as a means of personal and professional development.
964
+
965
+ 242
966
+ 00:18:32,000 --> 00:18:36,000
967
+ Advocate for code quality and best practices within the team.
968
+
969
+ 243
970
+ 00:18:37,000 --> 00:18:39,000
971
+ Encourage adherence to coding standards.
972
+
973
+ 244
974
+ 00:18:39,000 --> 00:18:44,000
975
+ Consistency in coding style and adoption of software engineering principles.
976
+
977
+ 245
978
+ 00:18:45,000 --> 00:18:51,000
979
+ Support initiatives that promote code quality such as code refactoring, automated testing, and code
980
+
981
+ 246
982
+ 00:18:51,000 --> 00:18:52,000
983
+ reviews.
984
+
985
+ 247
986
+ 00:18:52,000 --> 00:18:57,000
987
+ Be patient and respectful towards the code author during the review process.
988
+
989
+ 248
990
+ 00:18:57,000 --> 00:19:04,000
991
+ Recognize that everyone makes mistakes and that code reviews are meant to improve, not criticize.
992
+
993
+ 249
994
+ 00:19:05,000 --> 00:19:11,000
995
+ Offer feedback in a constructive and supportive manner, focusing on the code rather than the individual.
996
+
997
+ 250
998
+ 00:19:11,000 --> 00:19:18,000
999
+ By embracing these principles and adopting a reviewer mindset, you can become an effective code reviewer
1000
+
1001
+ 251
1002
+ 00:19:18,000 --> 00:19:23,000
1003
+ who contributes to the overall quality and success of the software development process.
1004
+
1005
+ 252
1006
+ 00:19:23,000 --> 00:19:29,000
1007
+ And now it is time to review code review strategies in order to make a code review process even more
1008
+
1009
+ 253
1010
+ 00:19:29,000 --> 00:19:30,000
1011
+ efficient.
1012
+
1013
+ 254
1014
+ 00:19:31,000 --> 00:19:37,000
1015
+ Efficient code review requires careful planning, effective communication, and streamlined processes.
1016
+
1017
+ 255
1018
+ 00:19:37,000 --> 00:19:42,000
1019
+ Let's review some strategies to conduct efficient code reviews.
1020
+
1021
+ 256
1022
+ 00:19:42,000 --> 00:19:46,000
1023
+ Define the goals and expectations of the code review process up front.
1024
+
1025
+ 257
1026
+ 00:19:47,000 --> 00:19:54,000
1027
+ Clarify what aspects of the code need to be reviewed, such as functionality, readability, performance,
1028
+
1029
+ 258
1030
+ 00:19:54,000 --> 00:19:55,000
1031
+ and adherence to coding standards.
1032
+
1033
+ 259
1034
+ 00:19:56,000 --> 00:20:03,000
1035
+ Develop and communicate clear guidelines for code reviews, including criteria for evaluating code quality,
1036
+
1037
+ 260
1038
+ 00:20:03,000 --> 00:20:09,000
1039
+ standards for coding style and formatting, and expectations for reviewer and author behavior.
1040
+
1041
+ 261
1042
+ 00:20:10,000 --> 00:20:14,000
1043
+ Consistent guidelines help ensure that reviews are focused and productive.
1044
+
1045
+ 262
1046
+ 00:20:15,000 --> 00:20:20,000
1047
+ Take advantage of automated tools and utilities to streamline the review process.
1048
+
1049
+ 263
1050
+ 00:20:20,000 --> 00:20:27,000
1051
+ Use code Linters, static analyzers and continuous integration systems to catch common issues and provide
1052
+
1053
+ 264
1054
+ 00:20:27,000 --> 00:20:28,000
1055
+ feedback automatically.
1056
+
1057
+ 265
1058
+ 00:20:29,000 --> 00:20:35,000
1059
+ This reduces the manual effort required for review and ensures consistency in code quality.
1060
+
1061
+ 266
1062
+ 00:20:35,000 --> 00:20:42,000
1063
+ Break down large code changes into smaller, manageable chunks that can be reviewed independently.
1064
+
1065
+ 267
1066
+ 00:20:42,000 --> 00:20:49,000
1067
+ This makes it easier for reviewers to focus on specific aspects of the code and provides more granular
1068
+
1069
+ 268
1070
+ 00:20:49,000 --> 00:20:50,000
1071
+ feedback.
1072
+
1073
+ 269
1074
+ 00:20:50,000 --> 00:20:56,000
1075
+ It also reduces the risk of overwhelming reviewers with too much information at once.
1076
+
1077
+ 270
1078
+ 00:20:57,000 --> 00:21:04,000
1079
+ Prioritize code reviews based on factors such as impact of the change, the urgency of the task, and
1080
+
1081
+ 271
1082
+ 00:21:04,000 --> 00:21:06,000
1083
+ the expertise of the reviewers.
1084
+
1085
+ 272
1086
+ 00:21:07,000 --> 00:21:13,000
1087
+ Focus on reviewing critical or high risk changes first to minimize the potential for bugs and issues
1088
+
1089
+ 273
1090
+ 00:21:13,000 --> 00:21:14,000
1091
+ to slip through.
1092
+
1093
+ 274
1094
+ 00:21:15,000 --> 00:21:20,000
1095
+ Set limits on the size and scope of code changes to be reviewed in each session.
1096
+
1097
+ 275
1098
+ 00:21:20,000 --> 00:21:27,000
1099
+ Aim for reviews that can be completed within a reasonable amount of time, such as 30 minutes to an
1100
+
1101
+ 276
1102
+ 00:21:27,000 --> 00:21:27,000
1103
+ hour.
1104
+
1105
+ 277
1106
+ 00:21:28,000 --> 00:21:33,000
1107
+ This helps maintain focus and prevents fatigue and burnout among reviewers.
1108
+
1109
+ 278
1110
+ 00:21:34,000 --> 00:21:39,000
1111
+ Encourage developers to perform self reviews of their code before submitting it for review.
1112
+
1113
+ 279
1114
+ 00:21:40,000 --> 00:21:46,000
1115
+ This allows authors to catch and address common issues and mistakes on their own, reducing the burden
1116
+
1117
+ 280
1118
+ 00:21:46,000 --> 00:21:50,000
1119
+ on reviewers and accelerating the review process.
1120
+
1121
+ 281
1122
+ 00:21:51,000 --> 00:21:54,000
1123
+ Provide timely feedback to authors during the review process.
1124
+
1125
+ 282
1126
+ 00:21:54,000 --> 00:22:01,000
1127
+ Avoid unnecessary delays in reviewing code changes, as this can lead to bottlenecks and prolong the
1128
+
1129
+ 283
1130
+ 00:22:01,000 --> 00:22:02,000
1131
+ development cycle.
1132
+
1133
+ 284
1134
+ 00:22:02,000 --> 00:22:07,000
1135
+ Aim to review code changes promptly and provide feedback within a reasonable time frame.
1136
+
1137
+ 285
1138
+ 00:22:08,000 --> 00:22:15,000
1139
+ Foster a collaborative environment where reviewers and authors can discuss code changes openly and constructively.
1140
+
1141
+ 286
1142
+ 00:22:16,000 --> 00:22:22,000
1143
+ Encourage open communication, active participation, and mutual respect among team members.
1144
+
1145
+ 287
1146
+ 00:22:22,000 --> 00:22:28,000
1147
+ Collaboration leads to better understanding, alignment, and ultimately higher quality code.
1148
+
1149
+ 288
1150
+ 00:22:28,000 --> 00:22:34,000
1151
+ Continuously validate and refine the code review process based on feedback and lessons learned.
1152
+
1153
+ 289
1154
+ 00:22:35,000 --> 00:22:42,000
1155
+ Ask for an input from team members on ways to improve efficiency, effectiveness, and overall satisfaction
1156
+
1157
+ 290
1158
+ 00:22:42,000 --> 00:22:43,000
1159
+ with the review process.
1160
+
1161
+ 291
1162
+ 00:22:44,000 --> 00:22:50,000
1163
+ Adapt and iterate on your strategies to ensure that code reviews remain valuable and productive over
1164
+
1165
+ 292
1166
+ 00:22:50,000 --> 00:22:50,000
1167
+ time.
1168
+
1169
+ 293
1170
+ 00:22:51,000 --> 00:22:57,000
1171
+ By implementing these strategies, teams can conduct efficient and effective code reviews that improve
1172
+
1173
+ 294
1174
+ 00:22:57,000 --> 00:23:02,000
1175
+ code quality, promote knowledge sharing, and foster collaboration within the development team.
1176
+
1177
+ 295
1178
+ 00:23:03,000 --> 00:23:04,000
1179
+ That's all.
1180
+
1181
+ 296
1182
+ 00:23:04,000 --> 00:23:06,000
1183
+ What I wanted to share with you today.
1184
+
1185
+ 297
1186
+ 00:23:06,000 --> 00:23:09,000
1187
+ Let's recap what we have learned in the lesson.
1188
+
1189
+ 298
1190
+ 00:23:09,000 --> 00:23:11,000
1191
+ In this lesson, we have learned a lot.
1192
+
1193
+ 299
1194
+ 00:23:12,000 --> 00:23:15,000
1195
+ We learned basic principles and goals of code review.
1196
+
1197
+ 300
1198
+ 00:23:15,000 --> 00:23:22,000
1199
+ I explained you different types of code review, and I explained what types of code review are applicable
1200
+
1201
+ 301
1202
+ 00:23:22,000 --> 00:23:23,000
1203
+ in which case.
1204
+
1205
+ 302
1206
+ 00:23:23,000 --> 00:23:26,000
1207
+ We learned role of code reviewer and author.
1208
+
1209
+ 303
1210
+ 00:23:26,000 --> 00:23:31,000
1211
+ I shared with you guidelines that will help you to develop reviewer mindset.
1212
+
1213
+ 304
1214
+ 00:23:31,000 --> 00:23:36,000
1215
+ And at the end of the lesson we learned strategies for efficient code review.
1216
+
1217
+ 305
1218
+ 00:23:36,000 --> 00:23:42,000
1219
+ And just to remind you that in case you have any questions, please do not hesitate to post your questions
1220
+
1221
+ 306
1222
+ 00:23:42,000 --> 00:23:45,000
1223
+ below the video and I will be happy to answer.
1224
+
1225
+ 307
1226
+ 00:23:45,000 --> 00:23:47,000
1227
+ That's it for this lesson.
1228
+
1229
+ 308
1230
+ 00:23:47,000 --> 00:23:49,000
1231
+ Thanks a lot for your attention.
1232
+
1233
+ 309
1234
+ 00:23:49,000 --> 00:23:52,000
1235
+ Have a great day and see you in the next lesson.
1236
+
108 - Tools, Automation, and Industry Best Practices/001 Tools for Code Review and Code Analysis_en.srt ADDED
@@ -0,0 +1,1244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:10,000
7
+ In this lesson we'll talk about code review tools.
8
+
9
+ 3
10
+ 00:00:10,000 --> 00:00:15,000
11
+ We are going to start our lesson from learning tools for code reviews that can facilitate the code review
12
+
13
+ 4
14
+ 00:00:15,000 --> 00:00:16,000
15
+ process.
16
+
17
+ 5
18
+ 00:00:16,000 --> 00:00:21,000
19
+ After that, we will talk about tools for code analysis, when we will learn tools and understand their
20
+
21
+ 6
22
+ 00:00:21,000 --> 00:00:22,000
23
+ benefits.
24
+
25
+ 7
26
+ 00:00:22,000 --> 00:00:27,000
27
+ I will explain how you can integrate these tools into software development process.
28
+
29
+ 8
30
+ 00:00:27,000 --> 00:00:33,000
31
+ And at the end of the lesson, we will talk about best practices for secure and scalable code, because
32
+
33
+ 9
34
+ 00:00:33,000 --> 00:00:39,000
35
+ using of tools for code monitoring and code analysis opens the stage for improving your code and making
36
+
37
+ 10
38
+ 00:00:39,000 --> 00:00:41,000
39
+ it more secure and scalable.
40
+
41
+ 11
42
+ 00:00:41,000 --> 00:00:43,000
43
+ So let's start our lesson.
44
+
45
+ 12
46
+ 00:00:44,000 --> 00:00:50,000
47
+ As I told you in agenda of the lesson, I suggest to start from the short overview of code review tools.
48
+
49
+ 13
50
+ 00:00:50,000 --> 00:00:56,000
51
+ Code review tools are software applications designed to facilitate the process of reviewing code within
52
+
53
+ 14
54
+ 00:00:56,000 --> 00:00:57,000
55
+ a development team.
56
+
57
+ 15
58
+ 00:00:57,000 --> 00:01:04,000
59
+ These tools help developers collaborate more efficiently, ensuring that code is of high quality, adheres
60
+
61
+ 16
62
+ 00:01:04,000 --> 00:01:09,000
63
+ to coding standards, and is free of errors or vulnerabilities.
64
+
65
+ 17
66
+ 00:01:09,000 --> 00:01:13,000
67
+ Let's review some common code review tools.
68
+
69
+ 18
70
+ 00:01:13,000 --> 00:01:20,000
71
+ GitLab GitLab offers built in code review features as part of its version control platform.
72
+
73
+ 19
74
+ 00:01:20,000 --> 00:01:27,000
75
+ It allows for inline comments and discussions and merge requests, enabling seamless collaboration among
76
+
77
+ 20
78
+ 00:01:27,000 --> 00:01:28,000
79
+ team members.
80
+
81
+ 21
82
+ 00:01:29,000 --> 00:01:30,000
83
+ GitHub.
84
+
85
+ 22
86
+ 00:01:30,000 --> 00:01:36,000
87
+ GitHub provides a similar set of features to GitLab, including pull requests, inline comments, and
88
+
89
+ 23
90
+ 00:01:36,000 --> 00:01:37,000
91
+ code discussions.
92
+
93
+ 24
94
+ 00:01:37,000 --> 00:01:42,000
95
+ It's widely used in open source community and by many development teams for code review.
96
+
97
+ 25
98
+ 00:01:43,000 --> 00:01:50,000
99
+ Bitbucket, another popular version control platform, offers code review capabilities similar to GitLab
100
+
101
+ 26
102
+ 00:01:50,000 --> 00:01:51,000
103
+ and GitHub.
104
+
105
+ 27
106
+ 00:01:51,000 --> 00:01:57,000
107
+ It supports pull requests, inline commenting and integration with issue tracking systems.
108
+
109
+ 28
110
+ 00:01:57,000 --> 00:02:03,000
111
+ Has native integration with all Atlassian products like Jira, for example.
112
+
113
+ 29
114
+ 00:02:04,000 --> 00:02:10,000
115
+ Fabricator is an open source suite of development tools that includes a code review tool.
116
+
117
+ 30
118
+ 00:02:10,000 --> 00:02:18,000
119
+ It provides features like differential revisions similar to pull requests, inline comments, and automated
120
+
121
+ 31
122
+ 00:02:18,000 --> 00:02:19,000
123
+ code analysis.
124
+
125
+ 32
126
+ 00:02:20,000 --> 00:02:27,000
127
+ Reviewboard is an open source, web based code review tool that supports various version control systems
128
+
129
+ 33
130
+ 00:02:27,000 --> 00:02:30,000
131
+ like git, subversion, and Mercurial.
132
+
133
+ 34
134
+ 00:02:31,000 --> 00:02:36,000
135
+ It allows for reviewing code changes, commenting, and integrating with issue trackers.
136
+
137
+ 35
138
+ 00:02:37,000 --> 00:02:40,000
139
+ It can be considered as an alternative to Garrett.
140
+
141
+ 36
142
+ 00:02:40,000 --> 00:02:45,000
143
+ Garrett is a code review tool specifically designed for teams using git.
144
+
145
+ 37
146
+ 00:02:45,000 --> 00:02:52,000
147
+ It provides a web based interface for reviewing code changes, along with features like access control,
148
+
149
+ 38
150
+ 00:02:52,000 --> 00:02:56,000
151
+ code search, and integration with continuous integration systems.
152
+
153
+ 39
154
+ 00:02:57,000 --> 00:03:03,000
155
+ Crucible, developed by Atlassian, is a code review tool that integrates with Jira and Bitbucket.
156
+
157
+ 40
158
+ 00:03:03,000 --> 00:03:10,000
159
+ It supports Pre-commit and post commit reviews, code discussions and metrics to track code review activity.
160
+
161
+ 41
162
+ 00:03:11,000 --> 00:03:12,000
163
+ Collaborator.
164
+
165
+ 42
166
+ 00:03:12,000 --> 00:03:18,000
167
+ Collaborator is a code review tools that supports reviewing code changes in various version control
168
+
169
+ 43
170
+ 00:03:18,000 --> 00:03:22,000
171
+ systems, including git, subversion, and Perforce.
172
+
173
+ 44
174
+ 00:03:22,000 --> 00:03:28,000
175
+ It offers features like side by side, gives commands, and reporting.
176
+
177
+ 45
178
+ 00:03:29,000 --> 00:03:36,000
179
+ These code review tools helps teams maintain code quality, catch bugs early, and ensure consistency
180
+
181
+ 46
182
+ 00:03:36,000 --> 00:03:37,000
183
+ in coding standards.
184
+
185
+ 47
186
+ 00:03:37,000 --> 00:03:43,000
187
+ By enabling efficient collaboration and communication among team members, they contribute to the overall
188
+
189
+ 48
190
+ 00:03:43,000 --> 00:03:46,000
191
+ success of software development projects.
192
+
193
+ 49
194
+ 00:03:46,000 --> 00:03:52,000
195
+ So now you know the list of tools that are designed to facilitate the process of reviewing the code.
196
+
197
+ 50
198
+ 00:03:52,000 --> 00:03:56,000
199
+ In what other ways we can improve the code review process?
200
+
201
+ 51
202
+ 00:03:56,000 --> 00:04:00,000
203
+ What other tools can come in handy to improve code analysis?
204
+
205
+ 52
206
+ 00:04:00,000 --> 00:04:05,000
207
+ Let's answer these questions and talk about using of automated tools for code analysis.
208
+
209
+ 53
210
+ 00:04:06,000 --> 00:04:12,000
211
+ Automated tools for code analysis play a crucial role in modern software development by helping developers
212
+
213
+ 54
214
+ 00:04:12,000 --> 00:04:17,000
215
+ identify potential issues, enforce coding standards, and improve overall code quality.
216
+
217
+ 55
218
+ 00:04:18,000 --> 00:04:21,000
219
+ Let's review automated tools for code analysis.
220
+
221
+ 56
222
+ 00:04:21,000 --> 00:04:27,000
223
+ During the review, I will list few examples of tools, but taking into account they have similar features
224
+
225
+ 57
226
+ 00:04:27,000 --> 00:04:28,000
227
+ and functionality.
228
+
229
+ 58
230
+ 00:04:28,000 --> 00:04:32,000
231
+ I will just provide you with detailed explanation for just one tool from the list.
232
+
233
+ 59
234
+ 00:04:33,000 --> 00:04:38,000
235
+ Static code analysis tools analyze source code without executing it.
236
+
237
+ 60
238
+ 00:04:38,000 --> 00:04:45,000
239
+ They can detect various issues such as syntax errors, potential bugs, code smells, and adherence
240
+
241
+ 61
242
+ 00:04:45,000 --> 00:04:47,000
243
+ to coding standards.
244
+
245
+ 62
246
+ 00:04:47,000 --> 00:04:48,000
247
+ Tools.
248
+
249
+ 63
250
+ 00:04:48,000 --> 00:04:52,000
251
+ Examples are Findbugs for Java.
252
+
253
+ 64
254
+ 00:04:52,000 --> 00:04:53,000
255
+ Rubocop for Ruby.
256
+
257
+ 65
258
+ 00:04:54,000 --> 00:04:55,000
259
+ Sonarqube.
260
+
261
+ 66
262
+ 00:04:56,000 --> 00:05:02,000
263
+ For example, Sonar Cube is an open source platform that performs static code analysis to identify bugs,
264
+
265
+ 67
266
+ 00:05:02,000 --> 00:05:04,000
267
+ vulnerabilities, and code smells.
268
+
269
+ 68
270
+ 00:05:04,000 --> 00:05:10,000
271
+ It supports various programming languages and provide detailed reports on code quality.
272
+
273
+ 69
274
+ 00:05:11,000 --> 00:05:18,000
275
+ Linters are a type of static code analysis tool that focus on identifying code style issues and potential
276
+
277
+ 70
278
+ 00:05:18,000 --> 00:05:19,000
279
+ errors.
280
+
281
+ 71
282
+ 00:05:19,000 --> 00:05:25,000
283
+ They enforce coding conventions and can be configured to flag deviations from best practices.
284
+
285
+ 72
286
+ 00:05:26,000 --> 00:05:35,000
287
+ The tools examples are flake8 for Python, stylecop for C sharp, es, lint for JavaScript.
288
+
289
+ 73
290
+ 00:05:36,000 --> 00:05:42,000
291
+ And if we're talking about ES lint, it's worth to mention that it is popular linter for JavaScript
292
+
293
+ 74
294
+ 00:05:42,000 --> 00:05:48,000
295
+ that helps enforce coding standards, detect errors, and highlight potential issues in the code.
296
+
297
+ 75
298
+ 00:05:48,000 --> 00:05:55,000
299
+ It offers a wide range of configurable rules and integrates seamlessly with build systems and Ides.
300
+
301
+ 76
302
+ 00:05:56,000 --> 00:05:57,000
303
+ Code quality metrics.
304
+
305
+ 77
306
+ 00:05:58,000 --> 00:06:04,000
307
+ Automated tools can measure code quality metrics such as cyclomatic complexity, code duplication,
308
+
309
+ 78
310
+ 00:06:04,000 --> 00:06:06,000
311
+ and code coverage.
312
+
313
+ 79
314
+ 00:06:06,000 --> 00:06:12,000
315
+ These metrics provide insights into the maintainability, readability, and testability of the code
316
+
317
+ 80
318
+ 00:06:12,000 --> 00:06:13,000
319
+ base.
320
+
321
+ 81
322
+ 00:06:14,000 --> 00:06:15,000
323
+ Recommended tools are.
324
+
325
+ 82
326
+ 00:06:16,000 --> 00:06:17,000
327
+ Secret sonar.
328
+
329
+ 83
330
+ 00:06:17,000 --> 00:06:19,000
331
+ Cloud code.
332
+
333
+ 84
334
+ 00:06:19,000 --> 00:06:20,000
335
+ Climate.
336
+
337
+ 85
338
+ 00:06:20,000 --> 00:06:27,000
339
+ For example, if we talk about cold climate, it works to mention that it analyzes code quality metrics
340
+
341
+ 86
342
+ 00:06:27,000 --> 00:06:31,000
343
+ such as code duplication, complexity, and test coverage.
344
+
345
+ 87
346
+ 00:06:31,000 --> 00:06:38,000
347
+ It provides insights into code maintainability and helps teams prioritize improvements to enhance overall
348
+
349
+ 88
350
+ 00:06:38,000 --> 00:06:40,000
351
+ code quality.
352
+
353
+ 89
354
+ 00:06:40,000 --> 00:06:43,000
355
+ Let's now talk about security scanners.
356
+
357
+ 90
358
+ 00:06:43,000 --> 00:06:49,000
359
+ Security focused code analysis tools identify vulnerabilities and security weaknesses in the code,
360
+
361
+ 91
362
+ 00:06:49,000 --> 00:06:57,000
363
+ such as injection flaws, cross-site scripting vulnerabilities, and insecure configuration settings.
364
+
365
+ 92
366
+ 00:06:57,000 --> 00:07:02,000
367
+ They help developers address security risks before deploying the software.
368
+
369
+ 93
370
+ 00:07:03,000 --> 00:07:06,000
371
+ Let's review some examples of tools.
372
+
373
+ 94
374
+ 00:07:06,000 --> 00:07:09,000
375
+ Sneak Whitesource bolt.
376
+
377
+ 95
378
+ 00:07:09,000 --> 00:07:12,000
379
+ Black duck by Synopsys.
380
+
381
+ 96
382
+ 00:07:12,000 --> 00:07:14,000
383
+ Avast dependency check.
384
+
385
+ 97
386
+ 00:07:14,000 --> 00:07:20,000
387
+ Avast Dependency Check is a security scanner that identifies known vulnerabilities in a project.
388
+
389
+ 98
390
+ 00:07:20,000 --> 00:07:21,000
391
+ Dependencies.
392
+
393
+ 99
394
+ 00:07:21,000 --> 00:07:28,000
395
+ It scans dependencies for outdated or vulnerable components and provides actionable insights to mitigate
396
+
397
+ 100
398
+ 00:07:28,000 --> 00:07:30,000
399
+ security risks.
400
+
401
+ 101
402
+ 00:07:31,000 --> 00:07:33,000
403
+ Continuous integration pipelines.
404
+
405
+ 102
406
+ 00:07:33,000 --> 00:07:40,000
407
+ CI pipelines often include automated code analysis steps that run whenever code changes are pushed to
408
+
409
+ 103
410
+ 00:07:40,000 --> 00:07:42,000
411
+ the version control system.
412
+
413
+ 104
414
+ 00:07:42,000 --> 00:07:49,000
415
+ This ensures that code quality checks are performed regularly and integrated seamlessly into the development
416
+
417
+ 105
418
+ 00:07:49,000 --> 00:07:50,000
419
+ workflow.
420
+
421
+ 106
422
+ 00:07:50,000 --> 00:07:53,000
423
+ Among CI tools, it worth to mention the following ones.
424
+
425
+ 107
426
+ 00:07:53,000 --> 00:07:58,000
427
+ Circleci Travis CI Jenkins.
428
+
429
+ 108
430
+ 00:07:58,000 --> 00:08:05,000
431
+ Jenkins is a widely used CI CD tools that allows developers to automate code analysis as part of their
432
+
433
+ 109
434
+ 00:08:05,000 --> 00:08:06,000
435
+ build pipelines.
436
+
437
+ 110
438
+ 00:08:06,000 --> 00:08:13,000
439
+ It integrates with various code analysis tools and version control systems, enabling continuous feedback
440
+
441
+ 111
442
+ 00:08:13,000 --> 00:08:14,000
443
+ on code quality.
444
+
445
+ 112
446
+ 00:08:15,000 --> 00:08:17,000
447
+ Integration with version control systems.
448
+
449
+ 113
450
+ 00:08:18,000 --> 00:08:24,000
451
+ Automated code analysis tools can integrate with version control systems like git, allowing them to
452
+
453
+ 114
454
+ 00:08:24,000 --> 00:08:28,000
455
+ analyze code changes as they are committed or pushed.
456
+
457
+ 115
458
+ 00:08:28,000 --> 00:08:35,000
459
+ This enables early detection and resolution of issues before they are merged into the main code base.
460
+
461
+ 116
462
+ 00:08:35,000 --> 00:08:39,000
463
+ I am talking about such tools as GitLab CI, CD.
464
+
465
+ 117
466
+ 00:08:39,000 --> 00:08:41,000
467
+ Cut cough.
468
+
469
+ 118
470
+ 00:08:41,000 --> 00:08:48,000
471
+ Cut cough integrates with version control systems like GitHub and GitLab to provide code coverage reports
472
+
473
+ 119
474
+ 00:08:48,000 --> 00:08:49,000
475
+ for automated tests.
476
+
477
+ 120
478
+ 00:08:49,000 --> 00:08:57,000
479
+ It helps developers track code coverage trends and identify errors of the code base that require additional
480
+
481
+ 121
482
+ 00:08:57,000 --> 00:08:58,000
483
+ testing.
484
+
485
+ 122
486
+ 00:08:59,000 --> 00:09:01,000
487
+ Custom rules and configurations.
488
+
489
+ 123
490
+ 00:09:01,000 --> 00:09:08,000
491
+ Many code analysis tools allow developers to define custom rules and configurations tailored to their
492
+
493
+ 124
494
+ 00:09:08,000 --> 00:09:10,000
495
+ project specific requirements.
496
+
497
+ 125
498
+ 00:09:10,000 --> 00:09:17,000
499
+ This flexibility ensures that analysis is aligned with the team's coding standards and practices.
500
+
501
+ 126
502
+ 00:09:17,000 --> 00:09:22,000
503
+ The examples of tools are PHP code sniffer for PHP.
504
+
505
+ 127
506
+ 00:09:22,000 --> 00:09:25,000
507
+ Tslint for TypeScript.
508
+
509
+ 128
510
+ 00:09:25,000 --> 00:09:27,000
511
+ Checkstyle for Java.
512
+
513
+ 129
514
+ 00:09:27,000 --> 00:09:33,000
515
+ Checkstyle is a customizable static code analysis tool for Java that enforces coding standards and best
516
+
517
+ 130
518
+ 00:09:33,000 --> 00:09:34,000
519
+ practices.
520
+
521
+ 131
522
+ 00:09:34,000 --> 00:09:41,000
523
+ It allows developers to define custom rules and configurations to ensure a consistent code quality across
524
+
525
+ 132
526
+ 00:09:41,000 --> 00:09:41,000
527
+ projects.
528
+
529
+ 133
530
+ 00:09:42,000 --> 00:09:44,000
531
+ Feedback mechanisms.
532
+
533
+ 134
534
+ 00:09:44,000 --> 00:09:50,000
535
+ Automated code analysis tools provide feedback to developers in various forms, such as reports, notifications,
536
+
537
+ 135
538
+ 00:09:50,000 --> 00:09:53,000
539
+ and integrations with issue tracking systems.
540
+
541
+ 136
542
+ 00:09:54,000 --> 00:10:00,000
543
+ This feedback loop helps developers address issues promptly and continuously improve code quality.
544
+
545
+ 137
546
+ 00:10:00,000 --> 00:10:09,000
547
+ Examples of automated tools in this group are Bitbucket pipelines GitHub actions GitHub actions is a
548
+
549
+ 138
550
+ 00:10:09,000 --> 00:10:16,000
551
+ CI CD service provided by GitHub that allows developers to automate workflows, including code analysis.
552
+
553
+ 139
554
+ 00:10:16,000 --> 00:10:22,000
555
+ It provides feedback on code quality directly within pull requests, enabling quick review and resolution
556
+
557
+ 140
558
+ 00:10:22,000 --> 00:10:23,000
559
+ of issues.
560
+
561
+ 141
562
+ 00:10:23,000 --> 00:10:30,000
563
+ By leveraging automated tools for code analysis, development teams can enhance productivity, reduce
564
+
565
+ 142
566
+ 00:10:30,000 --> 00:10:35,000
567
+ bugs and vulnerabilities, and deliver high quality software more efficiently.
568
+
569
+ 143
570
+ 00:10:36,000 --> 00:10:43,000
571
+ These tools complement manual code reviews and testing efforts, contributing to a robust software development
572
+
573
+ 144
574
+ 00:10:43,000 --> 00:10:43,000
575
+ process.
576
+
577
+ 145
578
+ 00:10:44,000 --> 00:10:50,000
579
+ Integrating tools into the development process is crucial for ensuring the effectiveness and maximizing
580
+
581
+ 146
582
+ 00:10:50,000 --> 00:10:55,000
583
+ their impact on code quality, productivity, and overall project success.
584
+
585
+ 147
586
+ 00:10:56,000 --> 00:11:01,000
587
+ So far, we learned tools that facilitate code review process and tools for code analysis.
588
+
589
+ 148
590
+ 00:11:02,000 --> 00:11:06,000
591
+ Let's review even more tools that can be useful during the development.
592
+
593
+ 149
594
+ 00:11:06,000 --> 00:11:13,000
595
+ But first, let's answer how we will integrate tools that we reviewed into the development process.
596
+
597
+ 150
598
+ 00:11:14,000 --> 00:11:16,000
599
+ Static code analysis.
600
+
601
+ 151
602
+ 00:11:16,000 --> 00:11:24,000
603
+ Integrate Pylint, Findbugs or Rubocop into the development process by configuring them to run as part
604
+
605
+ 152
606
+ 00:11:24,000 --> 00:11:26,000
607
+ of the CI pipeline.
608
+
609
+ 153
610
+ 00:11:26,000 --> 00:11:31,000
611
+ Developers push their code changes to the version control system.
612
+
613
+ 154
614
+ 00:11:31,000 --> 00:11:37,000
615
+ The CI pipeline triggers static code analysis using the configured tools, providing feedback on code
616
+
617
+ 155
618
+ 00:11:37,000 --> 00:11:39,000
619
+ quality and potential issues.
620
+
621
+ 156
622
+ 00:11:39,000 --> 00:11:47,000
623
+ Integrate Flake8, ESLint, or Stylecop into the development process by configuring them to run locally
624
+
625
+ 157
626
+ 00:11:47,000 --> 00:11:50,000
627
+ during the development and as part of the CI pipeline.
628
+
629
+ 158
630
+ 00:11:51,000 --> 00:11:57,000
631
+ Developers use Linters during local development to ensure adherence to coding standards.
632
+
633
+ 159
634
+ 00:11:57,000 --> 00:12:03,000
635
+ Linters are also configured to run automatically in the CI pipeline, providing consistent code quality
636
+
637
+ 160
638
+ 00:12:03,000 --> 00:12:05,000
639
+ checks across all code changes.
640
+
641
+ 161
642
+ 00:12:06,000 --> 00:12:07,000
643
+ Integrate code climate.
644
+
645
+ 162
646
+ 00:12:07,000 --> 00:12:13,000
647
+ Better Code Hub or sooner cloud into the CI pipeline to analyze code quality metrics.
648
+
649
+ 163
650
+ 00:12:13,000 --> 00:12:20,000
651
+ After each code change is pushed to the version control system, the CI pipeline triggers code quality
652
+
653
+ 164
654
+ 00:12:20,000 --> 00:12:22,000
655
+ analysis using the selected tools.
656
+
657
+ 165
658
+ 00:12:22,000 --> 00:12:29,000
659
+ Developers review the generated reports to identify areas for improvement and prioritize refactoring
660
+
661
+ 166
662
+ 00:12:29,000 --> 00:12:29,000
663
+ efforts.
664
+
665
+ 167
666
+ 00:12:30,000 --> 00:12:37,000
667
+ Security scanners integrate sneak, Whitesource, bolt or Black Dog into the CI pipeline to scan for
668
+
669
+ 168
670
+ 00:12:37,000 --> 00:12:41,000
671
+ security vulnerabilities in dependencies and code.
672
+
673
+ 169
674
+ 00:12:41,000 --> 00:12:47,000
675
+ Security scans are automatically performed as part of the CI pipeline upon code changes.
676
+
677
+ 170
678
+ 00:12:47,000 --> 00:12:53,000
679
+ Developers receive alerts for any identified vulnerabilities and take appropriate action to remediate
680
+
681
+ 171
682
+ 00:12:53,000 --> 00:12:54,000
683
+ them.
684
+
685
+ 172
686
+ 00:12:55,000 --> 00:13:04,000
687
+ Continuous integration pipelines use Jenkins Circleci or Travis CI to set up CI pipelines that automate
688
+
689
+ 173
690
+ 00:13:04,000 --> 00:13:07,000
691
+ building, testing, and deploying code changes.
692
+
693
+ 174
694
+ 00:13:07,000 --> 00:13:13,000
695
+ Developers push code changes to the version control system, triggering the CI pipeline.
696
+
697
+ 175
698
+ 00:13:13,000 --> 00:13:19,000
699
+ The pipeline performs automated tasks such as building the code, running tests, and executing code
700
+
701
+ 176
702
+ 00:13:19,000 --> 00:13:22,000
703
+ analysis tools before deploying changes to production.
704
+
705
+ 177
706
+ 00:13:23,000 --> 00:13:26,000
707
+ Integration with version control systems.
708
+
709
+ 178
710
+ 00:13:26,000 --> 00:13:33,000
711
+ Integrate Codecov on GitLab CI CD with version control system to provide code coverage, reports and
712
+
713
+ 179
714
+ 00:13:33,000 --> 00:13:34,000
715
+ other insights.
716
+
717
+ 180
718
+ 00:13:35,000 --> 00:13:39,000
719
+ Code coverage reports are generated automatically as part of the CI pipeline.
720
+
721
+ 181
722
+ 00:13:40,000 --> 00:13:46,000
723
+ Developers use these reports to assess test coverage and identify areas of the code base that require
724
+
725
+ 182
726
+ 00:13:46,000 --> 00:13:47,000
727
+ additional testing.
728
+
729
+ 183
730
+ 00:13:48,000 --> 00:13:50,000
731
+ Custom rules and configurations.
732
+
733
+ 184
734
+ 00:13:50,000 --> 00:13:58,000
735
+ Integrate Checkstyle PHP code sniffer or Tslint into the CI pipeline to enforce custom coding standards
736
+
737
+ 185
738
+ 00:13:58,000 --> 00:13:59,000
739
+ and configurations.
740
+
741
+ 186
742
+ 00:13:59,000 --> 00:14:04,000
743
+ Custom rules and configurations are applied during code analysis in the CI pipeline.
744
+
745
+ 187
746
+ 00:14:05,000 --> 00:14:11,000
747
+ Developers receive feedback on code adherence to coding standards and make necessary adjustments accordingly.
748
+
749
+ 188
750
+ 00:14:12,000 --> 00:14:14,000
751
+ Feedback mechanisms.
752
+
753
+ 189
754
+ 00:14:14,000 --> 00:14:22,000
755
+ Use GitHub actions GitLab, CI, CD or Bitbucket pipelines to automate feedback mechanisms such as notifications
756
+
757
+ 190
758
+ 00:14:22,000 --> 00:14:23,000
759
+ and alerts.
760
+
761
+ 191
762
+ 00:14:24,000 --> 00:14:30,000
763
+ Automated notifications are sent to developers via their preferred communication channels, for example
764
+
765
+ 192
766
+ 00:14:30,000 --> 00:14:37,000
767
+ slack or email for events like build failures, test errors, or security vulnerabilities, enabling
768
+
769
+ 193
770
+ 00:14:37,000 --> 00:14:39,000
771
+ quick response and resolution.
772
+
773
+ 194
774
+ 00:14:40,000 --> 00:14:42,000
775
+ Version control system.
776
+
777
+ 195
778
+ 00:14:42,000 --> 00:14:49,000
779
+ Integration tools like git, mercurial, or SVN serve as a backbone of version control for most projects.
780
+
781
+ 196
782
+ 00:14:50,000 --> 00:14:56,000
783
+ Integration with version control systems allows for seamless code review, automated testing and deployment
784
+
785
+ 197
786
+ 00:14:56,000 --> 00:14:57,000
787
+ processes.
788
+
789
+ 198
790
+ 00:14:57,000 --> 00:15:04,000
791
+ Developers commit their changes to the version control system, triggering automated processes such
792
+
793
+ 199
794
+ 00:15:04,000 --> 00:15:07,000
795
+ as code analysis and continuous integration.
796
+
797
+ 200
798
+ 00:15:08,000 --> 00:15:08,000
799
+ Code review.
800
+
801
+ 201
802
+ 00:15:08,000 --> 00:15:10,000
803
+ Tools integration.
804
+
805
+ 202
806
+ 00:15:10,000 --> 00:15:17,000
807
+ Code review tools like GitHub, GitLab, or Bitbucket provide features for peer code review, including
808
+
809
+ 203
810
+ 00:15:17,000 --> 00:15:20,000
811
+ pull requests, code commenting, and discussions.
812
+
813
+ 204
814
+ 00:15:20,000 --> 00:15:27,000
815
+ Developers create pull requests or merge requests for proposed changes which trigger code review processes.
816
+
817
+ 205
818
+ 00:15:28,000 --> 00:15:33,000
819
+ Integrating code review tools with version control systems ensures that code changes are thoroughly
820
+
821
+ 206
822
+ 00:15:33,000 --> 00:15:37,000
823
+ reviewed before being merged into the main code base.
824
+
825
+ 207
826
+ 00:15:38,000 --> 00:15:38,000
827
+ Issue tracking.
828
+
829
+ 208
830
+ 00:15:38,000 --> 00:15:40,000
831
+ System integration.
832
+
833
+ 209
834
+ 00:15:40,000 --> 00:15:48,000
835
+ Issue tracking systems like Jira, Trello, or Asana help manage and prioritize tasks, bugs, and feature
836
+
837
+ 210
838
+ 00:15:48,000 --> 00:15:49,000
839
+ requests.
840
+
841
+ 211
842
+ 00:15:49,000 --> 00:15:55,000
843
+ Integration with version control and CI tools allows for automatic linkage between code changes and
844
+
845
+ 212
846
+ 00:15:55,000 --> 00:15:57,000
847
+ corresponding issues.
848
+
849
+ 213
850
+ 00:15:57,000 --> 00:16:03,000
851
+ Developers can reference issues in commit messages or pull requests, facilitating traceability and
852
+
853
+ 214
854
+ 00:16:03,000 --> 00:16:05,000
855
+ collaboration across teams.
856
+
857
+ 215
858
+ 00:16:06,000 --> 00:16:07,000
859
+ Documentation tools.
860
+
861
+ 216
862
+ 00:16:07,000 --> 00:16:08,000
863
+ Integration.
864
+
865
+ 217
866
+ 00:16:08,000 --> 00:16:17,000
867
+ Documentation tools like Sphinx, Doxygen or IMCa docs assist in creating and maintaining project documentation.
868
+
869
+ 218
870
+ 00:16:17,000 --> 00:16:25,000
871
+ Integration with version control systems ensures that the communication is versioned and updated alongside
872
+
873
+ 219
874
+ 00:16:25,000 --> 00:16:26,000
875
+ code changes.
876
+
877
+ 220
878
+ 00:16:26,000 --> 00:16:33,000
879
+ Automated processes can be set up to generate and publish documentation as part of CI CD pipelines,
880
+
881
+ 221
882
+ 00:16:33,000 --> 00:16:36,000
883
+ ensuring that it remains up to date and accessible.
884
+
885
+ 222
886
+ 00:16:37,000 --> 00:16:40,000
887
+ Alerting and notification integration.
888
+
889
+ 223
890
+ 00:16:40,000 --> 00:16:47,000
891
+ Alerting and notification systems such as slack, email, or SMS provide real time feedback on critical
892
+
893
+ 224
894
+ 00:16:47,000 --> 00:16:48,000
895
+ events or issues.
896
+
897
+ 225
898
+ 00:16:49,000 --> 00:16:55,000
899
+ Integration with CI CD tools allows for immediate notification of build failures, test errors, or
900
+
901
+ 226
902
+ 00:16:55,000 --> 00:16:57,000
903
+ security vulnerabilities.
904
+
905
+ 227
906
+ 00:16:57,000 --> 00:17:03,000
907
+ Developers can receive alerts and take prompt action to address issues, preventing them from escalating
908
+
909
+ 228
910
+ 00:17:03,000 --> 00:17:05,000
911
+ and impacting the project.
912
+
913
+ 229
914
+ 00:17:05,000 --> 00:17:12,000
915
+ By integrating these tools into the development process, teams can streamline workflows, improve collaboration,
916
+
917
+ 230
918
+ 00:17:12,000 --> 00:17:18,000
919
+ and maintain high standards of code quality, reliability, and efficiencies throughout the software
920
+
921
+ 231
922
+ 00:17:18,000 --> 00:17:20,000
923
+ development life cycle.
924
+
925
+ 232
926
+ 00:17:20,000 --> 00:17:26,000
927
+ Understanding how code review tools and automated analysis enhance development processes.
928
+
929
+ 233
930
+ 00:17:26,000 --> 00:17:32,000
931
+ Sets the stage for implementing best practices in writing secure and scalable code.
932
+
933
+ 234
934
+ 00:17:33,000 --> 00:17:39,000
935
+ By effectively leveraging these tools, developers can detect potential security vulnerabilities and
936
+
937
+ 235
938
+ 00:17:39,000 --> 00:17:41,000
939
+ scalability issues early on.
940
+
941
+ 236
942
+ 00:17:41,000 --> 00:17:48,000
943
+ Integrating them seamlessly into workflows enables continuous monitoring and adherence to coding standards,
944
+
945
+ 237
946
+ 00:17:48,000 --> 00:17:54,000
947
+ fostering the adoption of secure coding practices and scalability considerations.
948
+
949
+ 238
950
+ 00:17:54,000 --> 00:18:02,000
951
+ Thus, proficiency in utilizing these tools empowers developers to prioritize security and scalability,
952
+
953
+ 239
954
+ 00:18:02,000 --> 00:18:07,000
955
+ ensuring resilient software in the face of evolving demands and threats.
956
+
957
+ 240
958
+ 00:18:08,000 --> 00:18:12,000
959
+ So let me share with you best practices for secure and scalable code.
960
+
961
+ 241
962
+ 00:18:12,000 --> 00:18:18,000
963
+ Of course, this is not a topic for a few minutes, and I have a few courses on this topic like Secure
964
+
965
+ 242
966
+ 00:18:18,000 --> 00:18:21,000
967
+ coding, Clean code, and other courses.
968
+
969
+ 243
970
+ 00:18:22,000 --> 00:18:25,000
971
+ Feel free to check the details on my instructor's page.
972
+
973
+ 244
974
+ 00:18:25,000 --> 00:18:31,000
975
+ But in scope of this lesson, let me just make a summary of the most important points to consider.
976
+
977
+ 245
978
+ 00:18:32,000 --> 00:18:33,000
979
+ Input validation.
980
+
981
+ 246
982
+ 00:18:34,000 --> 00:18:40,000
983
+ Always validate input from external sources such as user input APIs or files.
984
+
985
+ 247
986
+ 00:18:41,000 --> 00:18:49,000
987
+ This helps prevent security vulnerabilities such as injection attacks like SQL injection or cross-site
988
+
989
+ 248
990
+ 00:18:49,000 --> 00:18:52,000
991
+ scripting, and ensures data integrity.
992
+
993
+ 249
994
+ 00:18:52,000 --> 00:18:55,000
995
+ Secure authentication and authorization.
996
+
997
+ 250
998
+ 00:18:56,000 --> 00:19:05,000
999
+ Use secure authentication mechanisms, for example like AWS or JWT, and implement proper authorization
1000
+
1001
+ 251
1002
+ 00:19:05,000 --> 00:19:08,000
1003
+ checks to control access to sensitive resources.
1004
+
1005
+ 252
1006
+ 00:19:09,000 --> 00:19:15,000
1007
+ Avoid hardcoding credentials and always hash passwords using strong cryptographic algorithms.
1008
+
1009
+ 253
1010
+ 00:19:16,000 --> 00:19:19,000
1011
+ Data sanitization and encoding.
1012
+
1013
+ 254
1014
+ 00:19:20,000 --> 00:19:28,000
1015
+ Sanitize and encode user supplied data before processing or displaying it to prevent cross-site scripting
1016
+
1017
+ 255
1018
+ 00:19:28,000 --> 00:19:30,000
1019
+ and other injection attacks.
1020
+
1021
+ 256
1022
+ 00:19:30,000 --> 00:19:34,000
1023
+ Use proper encoding methods based on the context.
1024
+
1025
+ 257
1026
+ 00:19:34,000 --> 00:19:37,000
1027
+ For example HTML entity encoding.
1028
+
1029
+ 258
1030
+ 00:19:37,000 --> 00:19:38,000
1031
+ URL encoding.
1032
+
1033
+ 259
1034
+ 00:19:40,000 --> 00:19:47,000
1035
+ Least privilege principle follows the principle of least privilege by granting only the minimum permissions
1036
+
1037
+ 260
1038
+ 00:19:47,000 --> 00:19:51,000
1039
+ necessary for users or processes to perform their tasks.
1040
+
1041
+ 261
1042
+ 00:19:52,000 --> 00:19:57,000
1043
+ Limit access to sensitive data and functionality to authorized users only.
1044
+
1045
+ 262
1046
+ 00:19:58,000 --> 00:20:05,000
1047
+ Secure configuration ensures that your application and server configurations are secure by disabling
1048
+
1049
+ 263
1050
+ 00:20:05,000 --> 00:20:06,000
1051
+ unnecessary services.
1052
+
1053
+ 264
1054
+ 00:20:06,000 --> 00:20:14,000
1055
+ Using strong encryption for data in transit and at rest, and keeping software dependencies up to date
1056
+
1057
+ 265
1058
+ 00:20:14,000 --> 00:20:15,000
1059
+ with security patches.
1060
+
1061
+ 266
1062
+ 00:20:16,000 --> 00:20:18,000
1063
+ Error handling and logging.
1064
+
1065
+ 267
1066
+ 00:20:19,000 --> 00:20:25,000
1067
+ Implement robust error handling mechanisms to gracefully handle unexpected errors and prevent information
1068
+
1069
+ 268
1070
+ 00:20:25,000 --> 00:20:26,000
1071
+ disclosure.
1072
+
1073
+ 269
1074
+ 00:20:27,000 --> 00:20:34,000
1075
+ Log security, relevant events and errors with sufficient details for debugging and auditing purposes.
1076
+
1077
+ 270
1078
+ 00:20:35,000 --> 00:20:37,000
1079
+ Secure coding practices.
1080
+
1081
+ 271
1082
+ 00:20:37,000 --> 00:20:44,000
1083
+ Follow secure coding practices such as avoiding hard coded secrets, using parameterized queries for
1084
+
1085
+ 272
1086
+ 00:20:44,000 --> 00:20:49,000
1087
+ database access, and escaping output to prevent injection attacks.
1088
+
1089
+ 273
1090
+ 00:20:49,000 --> 00:20:54,000
1091
+ Adhere to industry standard security guidelines and coding standards.
1092
+
1093
+ 274
1094
+ 00:20:55,000 --> 00:20:56,000
1095
+ Secure communication.
1096
+
1097
+ 275
1098
+ 00:20:57,000 --> 00:21:05,000
1099
+ Use https tls for secure communication between client and server to protect data confidentiality and
1100
+
1101
+ 276
1102
+ 00:21:05,000 --> 00:21:05,000
1103
+ integrity.
1104
+
1105
+ 277
1106
+ 00:21:06,000 --> 00:21:13,000
1107
+ Avoid transmitting sensitive information over insecure channels and implement proper certificate management
1108
+
1109
+ 278
1110
+ 00:21:13,000 --> 00:21:13,000
1111
+ practices.
1112
+
1113
+ 279
1114
+ 00:21:14,000 --> 00:21:22,000
1115
+ In my course Java From zero to first job, we learned with students how to configure https tls connection
1116
+
1117
+ 280
1118
+ 00:21:22,000 --> 00:21:24,000
1119
+ for your web application.
1120
+
1121
+ 281
1122
+ 00:21:24,000 --> 00:21:31,000
1123
+ In case you will have any related questions, please do not hesitate to post your questions below the
1124
+
1125
+ 282
1126
+ 00:21:31,000 --> 00:21:33,000
1127
+ video and I will be happy to answer.
1128
+
1129
+ 283
1130
+ 00:21:34,000 --> 00:21:41,000
1131
+ Security testing, conduct regular security assessments, penetration testing, and code reviews to
1132
+
1133
+ 284
1134
+ 00:21:41,000 --> 00:21:46,000
1135
+ identify and remediate security vulnerabilities early in the development life cycle.
1136
+
1137
+ 285
1138
+ 00:21:46,000 --> 00:21:51,000
1139
+ Use automated security scanning tools to augment manual testing efforts.
1140
+
1141
+ 286
1142
+ 00:21:52,000 --> 00:21:54,000
1143
+ Scalability considerations.
1144
+
1145
+ 287
1146
+ 00:21:54,000 --> 00:22:01,000
1147
+ Design your code with scalability in mind by following architectural patterns such as microservices,
1148
+
1149
+ 288
1150
+ 00:22:01,000 --> 00:22:05,000
1151
+ asynchronous processing, and horizontal scaling.
1152
+
1153
+ 289
1154
+ 00:22:05,000 --> 00:22:13,000
1155
+ Use caching mechanisms, load balancing, and database sharding to distribute workload efficiently.
1156
+
1157
+ 290
1158
+ 00:22:14,000 --> 00:22:15,000
1159
+ Performance optimization.
1160
+
1161
+ 291
1162
+ 00:22:16,000 --> 00:22:21,000
1163
+ Optimize code performance to ensure scalability by minimizing resource usage.
1164
+
1165
+ 292
1166
+ 00:22:21,000 --> 00:22:27,000
1167
+ Optimizing database queries and implementing efficient algorithms and data structures.
1168
+
1169
+ 293
1170
+ 00:22:28,000 --> 00:22:34,000
1171
+ Monitor application performance and scalability metrics to identify bottlenecks and areas for improvement.
1172
+
1173
+ 294
1174
+ 00:22:35,000 --> 00:22:37,000
1175
+ Documentation and knowledge sharing.
1176
+
1177
+ 295
1178
+ 00:22:37,000 --> 00:22:44,000
1179
+ Document security best practices, design decisions and threat models to educate developers and promote
1180
+
1181
+ 296
1182
+ 00:22:44,000 --> 00:22:46,000
1183
+ security awareness within the team.
1184
+
1185
+ 297
1186
+ 00:22:47,000 --> 00:22:53,000
1187
+ Encourage knowledge sharing and collaboration on security related topics to foster a security conscious
1188
+
1189
+ 298
1190
+ 00:22:53,000 --> 00:22:54,000
1191
+ culture.
1192
+
1193
+ 299
1194
+ 00:22:54,000 --> 00:23:01,000
1195
+ By following these best practices, you can develop code that is not only secure but also scalable,
1196
+
1197
+ 300
1198
+ 00:23:01,000 --> 00:23:05,000
1199
+ reliable and maintainable throughout its life cycle.
1200
+
1201
+ 301
1202
+ 00:23:06,000 --> 00:23:12,000
1203
+ Regularly update and improve your security practices to adapt to evolving threats and technology trends.
1204
+
1205
+ 302
1206
+ 00:23:13,000 --> 00:23:14,000
1207
+ That's all.
1208
+
1209
+ 303
1210
+ 00:23:14,000 --> 00:23:16,000
1211
+ What I wanted to share with you in this lesson.
1212
+
1213
+ 304
1214
+ 00:23:16,000 --> 00:23:19,000
1215
+ Let's recap what we have learned today.
1216
+
1217
+ 305
1218
+ 00:23:20,000 --> 00:23:22,000
1219
+ Today we learned tools for code review.
1220
+
1221
+ 306
1222
+ 00:23:22,000 --> 00:23:25,000
1223
+ I also shared with you tools for code analysis.
1224
+
1225
+ 307
1226
+ 00:23:25,000 --> 00:23:31,000
1227
+ Then we learned how to integrate these tools into the development process and take advantage of them.
1228
+
1229
+ 308
1230
+ 00:23:31,000 --> 00:23:36,000
1231
+ And at the end of the lesson, we learned best practices for secure and scalable code.
1232
+
1233
+ 309
1234
+ 00:23:37,000 --> 00:23:38,000
1235
+ That's it.
1236
+
1237
+ 310
1238
+ 00:23:38,000 --> 00:23:40,000
1239
+ Thanks a lot for your attention.
1240
+
1241
+ 311
1242
+ 00:23:40,000 --> 00:23:43,000
1243
+ Have a great day and see you in the next lesson.
1244
+
108 - Tools, Automation, and Industry Best Practices/002 All-resources-and-links-for-the-lesson.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://docs.google.com/document/d/1q9dNmR60DlQLoNVxxzjNy9VJS6WxOFKsOfW8c2jb5x0/edit?usp=sharing
108 - Tools, Automation, and Industry Best Practices/002 Part 1 - Checkstyle Adhering Coding Standards_en.srt ADDED
@@ -0,0 +1,772 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Jim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:10,000
7
+ In this session we will learn more about such tool as Checkstyle.
8
+
9
+ 3
10
+ 00:00:10,000 --> 00:00:16,000
11
+ We are going to start the lesson from learning some general information about Checkstyle tool, what
12
+
13
+ 4
14
+ 00:00:16,000 --> 00:00:22,000
15
+ it is, its features, use cases, when to use and how it can help us during the development.
16
+
17
+ 5
18
+ 00:00:23,000 --> 00:00:30,000
19
+ You will understand the purpose of this tool and then we are going to have a lot of demo and examples.
20
+
21
+ 6
22
+ 00:00:30,000 --> 00:00:37,000
23
+ Today I will show you how to install Checkstyle plugin, how you can configure Checkstyle rules.
24
+
25
+ 7
26
+ 00:00:37,000 --> 00:00:45,000
27
+ We'll try to fix all violations that our Checkstyle plugin will find, and you will understand how Checkstyle
28
+
29
+ 8
30
+ 00:00:45,000 --> 00:00:48,000
31
+ can be integrated into the development workflow.
32
+
33
+ 9
34
+ 00:00:49,000 --> 00:00:54,000
35
+ And then we'll integrate Checkstyle Maven plugin into the build process.
36
+
37
+ 10
38
+ 00:00:54,000 --> 00:01:02,000
39
+ And we will generate Checkstyle report, and we'll learn how to analyze Checkstyle report and believe
40
+
41
+ 11
42
+ 00:01:02,000 --> 00:01:07,000
43
+ this knowledge will help to increase code quality and consistency in your team.
44
+
45
+ 12
46
+ 00:01:08,000 --> 00:01:10,000
47
+ So let's start our lesson.
48
+
49
+ 13
50
+ 00:01:11,000 --> 00:01:17,000
51
+ I already mentioned such tool as Checkstyle and some previous lessons, so it is time to learn what
52
+
53
+ 14
54
+ 00:01:17,000 --> 00:01:18,000
55
+ this tool is all about.
56
+
57
+ 15
58
+ 00:01:18,000 --> 00:01:21,000
59
+ Let me start with introduction to Checkstyle.
60
+
61
+ 16
62
+ 00:01:22,000 --> 00:01:29,000
63
+ Checkstyle is a static code analysis tool used in software development to ensure that code adheres to
64
+
65
+ 17
66
+ 00:01:29,000 --> 00:01:34,000
67
+ a defined set of coding standards, conventions, and best practices.
68
+
69
+ 18
70
+ 00:01:34,000 --> 00:01:38,000
71
+ High quality code is essential for several reasons.
72
+
73
+ 19
74
+ 00:01:38,000 --> 00:01:43,000
75
+ It enhances readability, maintainability, and scalability of the code base.
76
+
77
+ 20
78
+ 00:01:43,000 --> 00:01:50,000
79
+ Moreover, it reduces the likelihood of bugs and errors, leading to more robust and reliable software.
80
+
81
+ 21
82
+ 00:01:51,000 --> 00:01:57,000
83
+ Checkstyle plays a crucial role in maintaining code quality throughout the software development life
84
+
85
+ 22
86
+ 00:01:57,000 --> 00:01:57,000
87
+ cycle.
88
+
89
+ 23
90
+ 00:01:58,000 --> 00:02:05,000
91
+ It acts as a gatekeeper, enforcing coding standards and best practices, thereby helping teams produce
92
+
93
+ 24
94
+ 00:02:05,000 --> 00:02:08,000
95
+ cleaner, more consistent code.
96
+
97
+ 25
98
+ 00:02:08,000 --> 00:02:16,000
99
+ The standard Checkstyle checks are applicable to general Java coding style and require no external libraries.
100
+
101
+ 26
102
+ 00:02:16,000 --> 00:02:20,000
103
+ The standard checks are included in the base distribution.
104
+
105
+ 27
106
+ 00:02:20,000 --> 00:02:27,000
107
+ It is helpful and important to ask developers to run checkstyle checks before they merge their code,
108
+
109
+ 28
110
+ 00:02:27,000 --> 00:02:35,000
111
+ because fixing sinks on local environment is always faster comparing to creation of code review, fixing
112
+
113
+ 29
114
+ 00:02:35,000 --> 00:02:41,000
115
+ updating branch with most recent change again, then again making code review.
116
+
117
+ 30
118
+ 00:02:41,000 --> 00:02:47,000
119
+ So basically using checkstyle locally should boost teams productivity and increase code quality.
120
+
121
+ 31
122
+ 00:02:47,000 --> 00:02:55,000
123
+ Checkstyle offers a wide range of features and capabilities, including checking code against coding
124
+
125
+ 32
126
+ 00:02:55,000 --> 00:03:03,000
127
+ standards, indentation, naming conventions, etc., identifying potential code smells and anti-patterns.
128
+
129
+ 33
130
+ 00:03:04,000 --> 00:03:08,000
131
+ Customizable configuration to suit specific project requirements.
132
+
133
+ 34
134
+ 00:03:08,000 --> 00:03:12,000
135
+ Integration with popular development tools and build systems.
136
+
137
+ 35
138
+ 00:03:12,000 --> 00:03:19,000
139
+ Checkstyle is widely used across various industries and organizations for multiple purposes, including
140
+
141
+ 36
142
+ 00:03:19,000 --> 00:03:23,000
143
+ ensuring compliance with coding standards and style guides.
144
+
145
+ 37
146
+ 00:03:23,000 --> 00:03:30,000
147
+ Facilitating code reviews by highlighting potential issues early in the development process, and forcing
148
+
149
+ 38
150
+ 00:03:30,000 --> 00:03:34,000
151
+ consistent coding practices across development teams and projects.
152
+
153
+ 39
154
+ 00:03:34,000 --> 00:03:41,000
155
+ Checkstyle is a tool used in software development to make sure code follows certain style guidelines.
156
+
157
+ 40
158
+ 00:03:41,000 --> 00:03:49,000
159
+ Its purpose is to help keep code consistent and readable, making it easier to maintain and understand
160
+
161
+ 41
162
+ 00:03:49,000 --> 00:03:50,000
163
+ for developers.
164
+
165
+ 42
166
+ 00:03:50,000 --> 00:03:57,000
167
+ By using Checkstyle, teams can enforce coding standards, catch common mistakes, and promote good
168
+
169
+ 43
170
+ 00:03:57,000 --> 00:03:58,000
171
+ coding practices.
172
+
173
+ 44
174
+ 00:03:59,000 --> 00:04:06,000
175
+ This can lead to improved code quality, reused blocks, and enhanced collaboration among team members.
176
+
177
+ 45
178
+ 00:04:06,000 --> 00:04:12,000
179
+ Overall, the benefits of using Checkstyle include better code consistency, increased productivity,
180
+
181
+ 46
182
+ 00:04:12,000 --> 00:04:14,000
183
+ and higher quality software.
184
+
185
+ 47
186
+ 00:04:15,000 --> 00:04:19,000
187
+ And in this lesson, we are going to have a lot of practical examples and demo.
188
+
189
+ 48
190
+ 00:04:19,000 --> 00:04:25,000
191
+ So let me start screen sharing and we will cover all practical aspects of using Checkstyle, starting
192
+
193
+ 49
194
+ 00:04:25,000 --> 00:04:32,000
195
+ from its installation to configuration of Checkstyle rules and reading Checkstyle reports.
196
+
197
+ 50
198
+ 00:04:32,000 --> 00:04:35,000
199
+ Let's start from installation of Checkstyle.
200
+
201
+ 51
202
+ 00:04:36,000 --> 00:04:40,000
203
+ Taking into account Checkstyle is used primarily for Java.
204
+
205
+ 52
206
+ 00:04:40,000 --> 00:04:46,000
207
+ It is well integrated with Java oriented integrated development environments like eclipse and IntelliJ
208
+
209
+ 53
210
+ 00:04:46,000 --> 00:04:47,000
211
+ Idea.
212
+
213
+ 54
214
+ 00:04:48,000 --> 00:04:53,000
215
+ I use eclipse, so today I will show how Checkstyle can be installed in eclipse.
216
+
217
+ 55
218
+ 00:04:54,000 --> 00:04:57,000
219
+ There are different ways of how you can install Checkstyle.
220
+
221
+ 56
222
+ 00:04:57,000 --> 00:05:04,000
223
+ You can install Eclipse marketplace link where Eclipse Marketplace client and from the update site.
224
+
225
+ 57
226
+ 00:05:05,000 --> 00:05:11,000
227
+ I will leave a link to official website and attachments to the video, where you can find detailed description
228
+
229
+ 58
230
+ 00:05:11,000 --> 00:05:13,000
231
+ of each of these options.
232
+
233
+ 59
234
+ 00:05:13,000 --> 00:05:18,000
235
+ Right now I will show you how we can install Checkstyle using Eclipse Marketplace.
236
+
237
+ 60
238
+ 00:05:19,000 --> 00:05:23,000
239
+ So in eclipse click on Help Eclipse Marketplace.
240
+
241
+ 61
242
+ 00:05:24,000 --> 00:05:29,000
243
+ In the search bar, type Checkstyle and find it in the list.
244
+
245
+ 62
246
+ 00:05:30,000 --> 00:05:37,000
247
+ As you can see, I have it already installed here and it is shown that the plugin is installed.
248
+
249
+ 63
250
+ 00:05:37,000 --> 00:05:42,000
251
+ But for you just click the install button and that's it.
252
+
253
+ 64
254
+ 00:05:42,000 --> 00:05:45,000
255
+ Just follow hints from the screen.
256
+
257
+ 65
258
+ 00:05:45,000 --> 00:05:52,000
259
+ You would need to read and accept license agreements and after installation you will be asked to reload
260
+
261
+ 66
262
+ 00:05:52,000 --> 00:05:56,000
263
+ eclipse and you are done with installation.
264
+
265
+ 67
266
+ 00:05:57,000 --> 00:06:01,000
267
+ So congratulations, you have just installed Checkstyle plugin.
268
+
269
+ 68
270
+ 00:06:01,000 --> 00:06:05,000
271
+ Let me show you how it works and some basic use cases.
272
+
273
+ 69
274
+ 00:06:05,000 --> 00:06:10,000
275
+ First of all, let me show you where a configuration for Checkstyle is stored.
276
+
277
+ 70
278
+ 00:06:11,000 --> 00:06:16,000
279
+ Click on Window Preferences and then find Check Style.
280
+
281
+ 71
282
+ 00:06:19,000 --> 00:06:22,000
283
+ Here you can change the language of rule message.
284
+
285
+ 72
286
+ 00:06:22,000 --> 00:06:28,000
287
+ And what is also very important here is the section with the global chat configurations.
288
+
289
+ 73
290
+ 00:06:29,000 --> 00:06:31,000
291
+ Here you can select Check Configuration.
292
+
293
+ 74
294
+ 00:06:31,000 --> 00:06:35,000
295
+ By default these are only two check configurations exist.
296
+
297
+ 75
298
+ 00:06:35,000 --> 00:06:37,000
299
+ Google check and Sun check.
300
+
301
+ 76
302
+ 00:06:38,000 --> 00:06:39,000
303
+ Why do we need this?
304
+
305
+ 77
306
+ 00:06:39,000 --> 00:06:45,000
307
+ Let's imagine you are a team lead and you want to create a configuration for your team.
308
+
309
+ 78
310
+ 00:06:45,000 --> 00:06:50,000
311
+ Or you received configuration from your team lead and you need to import it.
312
+
313
+ 79
314
+ 00:06:51,000 --> 00:06:56,000
315
+ This is done to have similar code style on the project, and to make everyone follow the same rules
316
+
317
+ 80
318
+ 00:06:56,000 --> 00:06:59,000
319
+ during the code formatting.
320
+
321
+ 81
322
+ 00:06:59,000 --> 00:07:04,000
323
+ For example, as you can see, I have some copies of the sun checks.
324
+
325
+ 82
326
+ 00:07:04,000 --> 00:07:06,000
327
+ You can select it and click configure.
328
+
329
+ 83
330
+ 00:07:07,000 --> 00:07:11,000
331
+ Then you can adjust existing rules, enable or disable them.
332
+
333
+ 84
334
+ 00:07:12,000 --> 00:07:14,000
335
+ Here is the annotations module.
336
+
337
+ 85
338
+ 00:07:14,000 --> 00:07:22,000
339
+ If I expand it I can see multiple checks rules or any other modules that you would expand.
340
+
341
+ 86
342
+ 00:07:22,000 --> 00:07:27,000
343
+ You can find different rules expand regular expressions module.
344
+
345
+ 87
346
+ 00:07:27,000 --> 00:07:32,000
347
+ And now let's say that you want to use regular expression multi-line check.
348
+
349
+ 88
350
+ 00:07:32,000 --> 00:07:35,000
351
+ You can check the description in the window below.
352
+
353
+ 89
354
+ 00:07:35,000 --> 00:07:41,000
355
+ Or you can check the description of each rule in the official documentation that you can find on the
356
+
357
+ 90
358
+ 00:07:41,000 --> 00:07:43,000
359
+ Checkstyle website.
360
+
361
+ 91
362
+ 00:07:43,000 --> 00:07:50,000
363
+ I select Regular Expression and click add and here I have configuration of Regular Expression module.
364
+
365
+ 92
366
+ 00:07:51,000 --> 00:07:56,000
367
+ As you can see, there are some different configurable properties that I can adjust.
368
+
369
+ 93
370
+ 00:07:56,000 --> 00:08:02,000
371
+ My recommendation for you would be to spend just some time by reviewing available modules and reading
372
+
373
+ 94
374
+ 00:08:02,000 --> 00:08:04,000
375
+ descriptions.
376
+
377
+ 95
378
+ 00:08:04,000 --> 00:08:10,000
379
+ This will help you to get better understanding of the tool itself and about available modules.
380
+
381
+ 96
382
+ 00:08:10,000 --> 00:08:18,000
383
+ Once you add some check, you enable or disable it as you wish, and in this way you can build your
384
+
385
+ 97
386
+ 00:08:18,000 --> 00:08:19,000
387
+ own configuration.
388
+
389
+ 98
390
+ 00:08:19,000 --> 00:08:22,000
391
+ Once you configure it some checks.
392
+
393
+ 99
394
+ 00:08:22,000 --> 00:08:23,000
395
+ Click a key button here.
396
+
397
+ 100
398
+ 00:08:23,000 --> 00:08:27,000
399
+ And now you can export this configuration if you wish.
400
+
401
+ 101
402
+ 00:08:27,000 --> 00:08:34,000
403
+ It will be exported as a file that you can share with your team and ask them to import it.
404
+
405
+ 102
406
+ 00:08:34,000 --> 00:08:39,000
407
+ If you received this file and you need to import it, click on new.
408
+
409
+ 103
410
+ 00:08:39,000 --> 00:08:42,000
411
+ Set the name and click import button.
412
+
413
+ 104
414
+ 00:08:42,000 --> 00:08:47,000
415
+ File explorer will be opened and you can find the files that you need to import.
416
+
417
+ 105
418
+ 00:08:47,000 --> 00:08:49,000
419
+ Everything is simple.
420
+
421
+ 106
422
+ 00:08:50,000 --> 00:08:56,000
423
+ Kim, just remind you that in case you face any difficulties or something is still not clear for you,
424
+
425
+ 107
426
+ 00:08:56,000 --> 00:08:59,000
427
+ I am staying available for you in Q&A section.
428
+
429
+ 108
430
+ 00:08:59,000 --> 00:09:02,000
431
+ Just post your question below the video.
432
+
433
+ 109
434
+ 00:09:02,000 --> 00:09:09,000
435
+ I will check and provide you with detailed response, so don't hesitate to ask your questions please.
436
+
437
+ 110
438
+ 00:09:10,000 --> 00:09:17,000
439
+ So that was, in short, how you can work with configurations, how you can adjust configuration, export
440
+
441
+ 111
442
+ 00:09:17,000 --> 00:09:18,000
443
+ and import it.
444
+
445
+ 112
446
+ 00:09:18,000 --> 00:09:22,000
447
+ For the sake of our today's demo, let me select some checks.
448
+
449
+ 113
450
+ 00:09:22,000 --> 00:09:23,000
451
+ Configuration.
452
+
453
+ 114
454
+ 00:09:23,000 --> 00:09:29,000
455
+ Even despite it is a default configuration, I still find it very useful.
456
+
457
+ 115
458
+ 00:09:29,000 --> 00:09:36,000
459
+ So just click on it, then click set as default button and tick will be set next to the selected check
460
+
461
+ 116
462
+ 00:09:36,000 --> 00:09:37,000
463
+ configuration.
464
+
465
+ 117
466
+ 00:09:38,000 --> 00:09:41,000
467
+ After that click apply and close.
468
+
469
+ 118
470
+ 00:09:41,000 --> 00:09:47,000
471
+ Specially for this lesson, I created a simple Java file to demo you how to work with Checkstyle.
472
+
473
+ 119
474
+ 00:09:47,000 --> 00:09:51,000
475
+ You can find the reference to this file in attachments to the lesson.
476
+
477
+ 120
478
+ 00:09:52,000 --> 00:09:54,000
479
+ In order to check file was checked style.
480
+
481
+ 121
482
+ 00:09:54,000 --> 00:10:01,000
483
+ Make mouse right click and select Check Style and then check code with check style.
484
+
485
+ 122
486
+ 00:10:01,000 --> 00:10:07,000
487
+ And now all violations according to selected checks configuration are highlighted.
488
+
489
+ 123
490
+ 00:10:07,000 --> 00:10:10,000
491
+ You can do this in the scope of the single file.
492
+
493
+ 124
494
+ 00:10:10,000 --> 00:10:14,000
495
+ Or you can run check style on the whole package or project.
496
+
497
+ 125
498
+ 00:10:15,000 --> 00:10:21,000
499
+ To do this, find and select same option while selecting package or the whole project.
500
+
501
+ 126
502
+ 00:10:22,000 --> 00:10:24,000
503
+ And we see a lot of errors.
504
+
505
+ 127
506
+ 00:10:24,000 --> 00:10:26,000
507
+ Let's try to fix them one by one.
508
+
509
+ 128
510
+ 00:10:27,000 --> 00:10:29,000
511
+ Let's start from the top.
512
+
513
+ 129
514
+ 00:10:29,000 --> 00:10:35,000
515
+ When you hover mouse over notes, you can read what is wrong here.
516
+
517
+ 130
518
+ 00:10:35,000 --> 00:10:39,000
519
+ For example, here we can see missing package info Java file.
520
+
521
+ 131
522
+ 00:10:40,000 --> 00:10:43,000
523
+ Let me explain you what it is and why we will not fix it.
524
+
525
+ 132
526
+ 00:10:44,000 --> 00:10:48,000
527
+ Because not all errors should be fixed if you have fragmentation.
528
+
529
+ 133
530
+ 00:10:48,000 --> 00:10:54,000
531
+ Just a reminder, you can configure checks for your needs to avoid redundant errors.
532
+
533
+ 134
534
+ 00:10:55,000 --> 00:11:02,000
535
+ The package Info Java file is a special file in Java that can be used to provide package level documentation.
536
+
537
+ 135
538
+ 00:11:02,000 --> 00:11:10,000
539
+ This file, if present, typically contains commands that describe the purpose and usage of the package.
540
+
541
+ 136
542
+ 00:11:10,000 --> 00:11:16,000
543
+ We will not fix this error because package info file is not necessary for small projects.
544
+
545
+ 137
546
+ 00:11:17,000 --> 00:11:23,000
547
+ I believe that this is maintenance overhead because according to our approach clarity through code,
548
+
549
+ 138
550
+ 00:11:23,000 --> 00:11:27,000
551
+ you should name your package and entities in such way.
552
+
553
+ 139
554
+ 00:11:27,000 --> 00:11:32,000
555
+ They wouldn't need additional text file to explain what it is about.
556
+
557
+ 140
558
+ 00:11:32,000 --> 00:11:38,000
559
+ So for the sake of the demo, let's keep this one and continue with the next one.
560
+
561
+ 141
562
+ 00:11:38,000 --> 00:11:42,000
563
+ We can see errors next to import statement.
564
+
565
+ 142
566
+ 00:11:42,000 --> 00:11:45,000
567
+ Multiple markers are at this line.
568
+
569
+ 143
570
+ 00:11:45,000 --> 00:11:52,000
571
+ The import java.util is never used, and using the asterisks form of import should be avoided.
572
+
573
+ 144
574
+ 00:11:52,000 --> 00:11:56,000
575
+ So it is always recommended to optimize imports.
576
+
577
+ 145
578
+ 00:11:57,000 --> 00:12:00,000
579
+ Optimized imports improve readability.
580
+
581
+ 146
582
+ 00:12:00,000 --> 00:12:06,000
583
+ Prevent name clashes, may also reduce compilation time and brings other benefits.
584
+
585
+ 147
586
+ 00:12:07,000 --> 00:12:15,000
587
+ And thanks to Checkstyle were also received a flag that this import is not used in eclipse.
588
+
589
+ 148
590
+ 00:12:15,000 --> 00:12:18,000
591
+ There is a shortcut to optimize all import statements.
592
+
593
+ 149
594
+ 00:12:19,000 --> 00:12:28,000
595
+ Just press Ctrl shift O simultaneously one more time, Ctrl shift all simultaneously.
596
+
597
+ 150
598
+ 00:12:29,000 --> 00:12:35,000
599
+ And all import statements will be optimized taking into account we don't use this import statement at
600
+
601
+ 151
602
+ 00:12:35,000 --> 00:12:38,000
603
+ all, it is simply removed.
604
+
605
+ 152
606
+ 00:12:38,000 --> 00:12:41,000
607
+ Let's continue in this line.
608
+
609
+ 153
610
+ 00:12:41,000 --> 00:12:43,000
611
+ We also have multiple rules violated.
612
+
613
+ 154
614
+ 00:12:43,000 --> 00:12:48,000
615
+ They are missing a Javadoc command parameter.
616
+
617
+ 155
618
+ 00:12:48,000 --> 00:12:54,000
619
+ A should be final parameter, B should be final parameter should be final.
620
+
621
+ 156
622
+ 00:12:54,000 --> 00:12:57,000
623
+ By the way, I really like this rule.
624
+
625
+ 157
626
+ 00:12:57,000 --> 00:13:02,000
627
+ Final modifier on method parameters will prevent reassignment.
628
+
629
+ 158
630
+ 00:13:02,000 --> 00:13:05,000
631
+ Will help compiler to optimize the code.
632
+
633
+ 159
634
+ 00:13:05,000 --> 00:13:08,000
635
+ Prevent potential defects and side effects.
636
+
637
+ 160
638
+ 00:13:09,000 --> 00:13:16,000
639
+ Immutable nature of method parameters may contribute to the thread safety of your program in case you
640
+
641
+ 161
642
+ 00:13:16,000 --> 00:13:17,000
643
+ use multi-threading techniques.
644
+
645
+ 162
646
+ 00:13:18,000 --> 00:13:24,000
647
+ If you want to learn more about final modifier in Java, check my course Java from zero to first job
648
+
649
+ 163
650
+ 00:13:24,000 --> 00:13:27,000
651
+ where we learn in details final modifier.
652
+
653
+ 164
654
+ 00:13:27,000 --> 00:13:34,000
655
+ So I would say that having final method parameters is a good style and I like it personally.
656
+
657
+ 165
658
+ 00:13:34,000 --> 00:13:38,000
659
+ So let's add final keyword to method parameters.
660
+
661
+ 166
662
+ 00:13:38,000 --> 00:13:45,000
663
+ After modifications, if you want to recheck everything, you need to rerun checkstyle scanning one
664
+
665
+ 167
666
+ 00:13:45,000 --> 00:13:46,000
667
+ more time.
668
+
669
+ 168
670
+ 00:13:46,000 --> 00:13:49,000
671
+ Let me rerun it again and you see.
672
+
673
+ 169
674
+ 00:13:50,000 --> 00:13:53,000
675
+ So only missing a Java doc rule violation is left.
676
+
677
+ 170
678
+ 00:13:54,000 --> 00:14:01,000
679
+ And with regards to Java Doc, you need to know one thing in case you didn't customize rules.
680
+
681
+ 171
682
+ 00:14:01,000 --> 00:14:09,000
683
+ And in case you use default sound checks, it will also show you rules violation for tab character and
684
+
685
+ 172
686
+ 00:14:09,000 --> 00:14:13,000
687
+ by default eclipse uses stops when creating Java Doc.
688
+
689
+ 173
690
+ 00:14:13,000 --> 00:14:21,000
691
+ You can easily configure and adjust rule or tell eclipse to not use stop, but instead use spaces.
692
+
693
+ 174
694
+ 00:14:21,000 --> 00:14:23,000
695
+ Let me show you how to do this.
696
+
697
+ 175
698
+ 00:14:24,000 --> 00:14:26,000
699
+ Click on Window Preferences.
700
+
701
+ 176
702
+ 00:14:26,000 --> 00:14:33,000
703
+ Find text editors here and check the Insert Spaces for tabs checkbox.
704
+
705
+ 177
706
+ 00:14:33,000 --> 00:14:36,000
707
+ Then click apply and close.
708
+
709
+ 178
710
+ 00:14:36,000 --> 00:14:39,000
711
+ Now we are good and we can continue.
712
+
713
+ 179
714
+ 00:14:39,000 --> 00:14:43,000
715
+ So let's generate Javadoc here.
716
+
717
+ 180
718
+ 00:14:43,000 --> 00:14:45,000
719
+ I will save your time a bit.
720
+
721
+ 181
722
+ 00:14:46,000 --> 00:14:53,000
723
+ There is also a rule that Javadoc should contain sentence, as it is started with a capital letter and
724
+
725
+ 182
726
+ 00:14:53,000 --> 00:14:54,000
727
+ finished with period.
728
+
729
+ 183
730
+ 00:14:55,000 --> 00:15:01,000
731
+ Of course, there are always ways to find the workaround, and Checkstyle won't be able to check the
732
+
733
+ 184
734
+ 00:15:01,000 --> 00:15:03,000
735
+ content of this sentence.
736
+
737
+ 185
738
+ 00:15:03,000 --> 00:15:09,000
739
+ But still, these rules help to make developers think about code style.
740
+
741
+ 186
742
+ 00:15:09,000 --> 00:15:17,000
743
+ I can type something like this, calculate some method period and that would be totally fine for the
744
+
745
+ 187
746
+ 00:15:17,000 --> 00:15:18,000
747
+ check style.
748
+
749
+ 188
750
+ 00:15:18,000 --> 00:15:23,000
751
+ Let's just make sure we remove tab character from the first line.
752
+
753
+ 189
754
+ 00:15:23,000 --> 00:15:28,000
755
+ Otherwise there will be rule violation according to current configuration.
756
+
757
+ 190
758
+ 00:15:29,000 --> 00:15:32,000
759
+ Why this rule is important for Checkstyle.
760
+
761
+ 191
762
+ 00:15:32,000 --> 00:15:35,000
763
+ It is about portable formatting.
764
+
765
+ 192
766
+ 00:15:35,000 --> 00:15:42,000
767
+ Different text editors and environments may interpret tab character differently in terms of spacing
768
+
769
+ 193
770
+ 00:15:42,000 --> 00:15:43,000
771
+ and alignment.
772
+
108 - Tools, Automation, and Industry Best Practices/003 All-resources-and-links-for-the-lesson.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://docs.google.com/document/d/1q9dNmR60DlQLoNVxxzjNy9VJS6WxOFKsOfW8c2jb5x0/edit?usp=sharing
108 - Tools, Automation, and Industry Best Practices/003 Part 2 - Checkstyle Adhering Coding Standards_en.srt ADDED
@@ -0,0 +1,780 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:04,000 --> 00:00:06,000
3
+ Let's rerun checks again now.
4
+
5
+ 2
6
+ 00:00:07,000 --> 00:00:09,000
7
+ And we have the new error.
8
+
9
+ 3
10
+ 00:00:09,000 --> 00:00:16,000
11
+ Now the line has trailing spaces in Checkstyle the line has trailing spaces.
12
+
13
+ 4
14
+ 00:00:16,000 --> 00:00:22,000
15
+ Error indicates that there are extra spaces at the end of the lines in your source code files.
16
+
17
+ 5
18
+ 00:00:23,000 --> 00:00:29,000
19
+ Trailing spaces are spaces that appear after the last visible character on a line, and before the new
20
+
21
+ 6
22
+ 00:00:29,000 --> 00:00:30,000
23
+ line.
24
+
25
+ 7
26
+ 00:00:30,000 --> 00:00:38,000
27
+ Character Checkstyle asks us to not keep trailing spaces in order to achieve consistent code style and
28
+
29
+ 8
30
+ 00:00:38,000 --> 00:00:47,000
31
+ avoid unexpected version control differences in the file, let's manually remove spaces and rerun Checkstyle
32
+
33
+ 9
34
+ 00:00:47,000 --> 00:00:47,000
35
+ again.
36
+
37
+ 10
38
+ 00:00:50,000 --> 00:00:51,000
39
+ And we are almost good.
40
+
41
+ 11
42
+ 00:00:52,000 --> 00:00:55,000
43
+ But now we have another rule violation.
44
+
45
+ 12
46
+ 00:00:55,000 --> 00:00:59,000
47
+ Return tag should be present and have description.
48
+
49
+ 13
50
+ 00:00:59,000 --> 00:01:03,000
51
+ We have returned tag but it doesn't have a description.
52
+
53
+ 14
54
+ 00:01:03,000 --> 00:01:05,000
55
+ Let's add some description.
56
+
57
+ 15
58
+ 00:01:05,000 --> 00:01:09,000
59
+ For example, return sum of two int parameters.
60
+
61
+ 16
62
+ 00:01:11,000 --> 00:01:12,000
63
+ Rerun check style again.
64
+
65
+ 17
66
+ 00:01:15,000 --> 00:01:16,000
67
+ And voila!
68
+
69
+ 18
70
+ 00:01:16,000 --> 00:01:17,000
71
+ We did it.
72
+
73
+ 19
74
+ 00:01:18,000 --> 00:01:21,000
75
+ The same things we need to do for our second message.
76
+
77
+ 20
78
+ 00:01:22,000 --> 00:01:27,000
79
+ Let me just copy and paste the same Javadoc, just for the sake of example.
80
+
81
+ 21
82
+ 00:01:27,000 --> 00:01:33,000
83
+ And to save your time, let's also make parameter variables final.
84
+
85
+ 22
86
+ 00:01:34,000 --> 00:01:37,000
87
+ We can do the same for the main market.
88
+
89
+ 23
90
+ 00:01:37,000 --> 00:01:46,000
91
+ Make args parameter final, but we need to adjust javadoc this time because in case I would rerun Checkstyle
92
+
93
+ 24
94
+ 00:01:46,000 --> 00:01:54,000
95
+ with the same javadoc, Checkstyle will be able to recognize that I don't have A and B parameters here,
96
+
97
+ 25
98
+ 00:01:54,000 --> 00:01:58,000
99
+ and I don't have any value returned from the method.
100
+
101
+ 26
102
+ 00:01:58,000 --> 00:02:02,000
103
+ So this type of sinks Checkstyle can recognize.
104
+
105
+ 27
106
+ 00:02:03,000 --> 00:02:11,000
107
+ So let's remove rows about return statement and be argument and make sure that we have param args in
108
+
109
+ 28
110
+ 00:02:11,000 --> 00:02:12,000
111
+ Javadoc.
112
+
113
+ 29
114
+ 00:02:13,000 --> 00:02:16,000
115
+ Let's rerun Checkstyle one more time.
116
+
117
+ 30
118
+ 00:02:17,000 --> 00:02:18,000
119
+ Great.
120
+
121
+ 31
122
+ 00:02:18,000 --> 00:02:18,000
123
+ Well.
124
+
125
+ 32
126
+ 00:02:18,000 --> 00:02:19,000
127
+ Almost done.
128
+
129
+ 33
130
+ 00:02:19,000 --> 00:02:22,000
131
+ Only few comments left here.
132
+
133
+ 34
134
+ 00:02:23,000 --> 00:02:26,000
135
+ There is again mentioned about top character.
136
+
137
+ 35
138
+ 00:02:27,000 --> 00:02:35,000
139
+ As I explained, many integrated development environments and code analysis tools default to using spaces
140
+
141
+ 36
142
+ 00:02:35,000 --> 00:02:37,000
143
+ over tabs for consistency.
144
+
145
+ 37
146
+ 00:02:38,000 --> 00:02:43,000
147
+ Adhering to this convention helps ensure compatibility with common development tools.
148
+
149
+ 38
150
+ 00:02:44,000 --> 00:02:48,000
151
+ Let's rerun Checkstyle to make sure that everything is fixed.
152
+
153
+ 39
154
+ 00:02:48,000 --> 00:02:57,000
155
+ And now we have only ten and five highlighted because this is anti-pattern that is called magic numbers.
156
+
157
+ 40
158
+ 00:02:57,000 --> 00:03:05,000
159
+ The term magic numbers refers to hard coded numerical values that appear directly in code, without
160
+
161
+ 41
162
+ 00:03:05,000 --> 00:03:06,000
163
+ explanation or context.
164
+
165
+ 42
166
+ 00:03:07,000 --> 00:03:14,000
167
+ These numbers are often considered magic because their meaning or significance is not immediately apparent
168
+
169
+ 43
170
+ 00:03:14,000 --> 00:03:16,000
171
+ for someone reading the code.
172
+
173
+ 44
174
+ 00:03:17,000 --> 00:03:19,000
175
+ How to solve magic number Antipattern.
176
+
177
+ 45
178
+ 00:03:20,000 --> 00:03:27,000
179
+ To address the issues associated with magic numbers, developers are encouraged to use constants to
180
+
181
+ 46
182
+ 00:03:27,000 --> 00:03:29,000
183
+ represent these values.
184
+
185
+ 47
186
+ 00:03:30,000 --> 00:03:38,000
187
+ By giving meaningful names to constants, the code becomes self-documenting and easier to understand.
188
+
189
+ 48
190
+ 00:03:39,000 --> 00:03:47,000
191
+ This practice improves code quality, reduces errors, and enhances collaboration among developers working
192
+
193
+ 49
194
+ 00:03:47,000 --> 00:03:48,000
195
+ on the same code base.
196
+
197
+ 50
198
+ 00:03:49,000 --> 00:03:56,000
199
+ Therefore, avoiding magic numbers contributes to writing cleaner, more maintainable, and more comprehensible
200
+
201
+ 51
202
+ 00:03:56,000 --> 00:03:57,000
203
+ code.
204
+
205
+ 52
206
+ 00:03:58,000 --> 00:04:01,000
207
+ That's why let's create two constants now.
208
+
209
+ 53
210
+ 00:04:01,000 --> 00:04:09,000
211
+ You can select the value mouse, right click refactor and then click Extract Constant.
212
+
213
+ 54
214
+ 00:04:09,000 --> 00:04:16,000
215
+ For access modifier, select public and with regards to the name and the most important to give meaningful
216
+
217
+ 55
218
+ 00:04:16,000 --> 00:04:18,000
219
+ names for constants.
220
+
221
+ 56
222
+ 00:04:19,000 --> 00:04:23,000
223
+ In our particular case we have demo of sum and difference masses.
224
+
225
+ 57
226
+ 00:04:24,000 --> 00:04:27,000
227
+ And we just need two parameters for demo.
228
+
229
+ 58
230
+ 00:04:28,000 --> 00:04:32,000
231
+ So let's call the first constant as a demo variable.
232
+
233
+ 59
234
+ 00:04:32,000 --> 00:04:35,000
235
+ And let's call the second constant B demo variable.
236
+
237
+ 60
238
+ 00:04:44,000 --> 00:04:46,000
239
+ That's it.
240
+
241
+ 61
242
+ 00:04:46,000 --> 00:04:51,000
243
+ Now we just need to substitute method arguments in our demo method calls.
244
+
245
+ 62
246
+ 00:05:05,000 --> 00:05:07,000
247
+ Let's rerun Checkstyle again.
248
+
249
+ 63
250
+ 00:05:09,000 --> 00:05:14,000
251
+ Now we see another rules violation for two long line.
252
+
253
+ 64
254
+ 00:05:15,000 --> 00:05:22,000
255
+ This is also important rule to align formatting, but nowadays all developers usually have big monitors,
256
+
257
+ 65
258
+ 00:05:22,000 --> 00:05:26,000
259
+ so 120 characters per line should be fine too.
260
+
261
+ 66
262
+ 00:05:27,000 --> 00:05:31,000
263
+ Sometimes developers prefer to keep their monitor vertical.
264
+
265
+ 67
266
+ 00:05:31,000 --> 00:05:36,000
267
+ In this case, it is better to have lines up to 80 characters.
268
+
269
+ 68
270
+ 00:05:36,000 --> 00:05:42,000
271
+ So in this case, following the rules that exist by default in Checkstyle makes sense.
272
+
273
+ 69
274
+ 00:05:43,000 --> 00:05:47,000
275
+ And I showed you you can configure these rules.
276
+
277
+ 70
278
+ 00:05:47,000 --> 00:05:54,000
279
+ In case you don't see other characters because of weird colored combination, you can clear a checkstyle
280
+
281
+ 71
282
+ 00:05:54,000 --> 00:05:56,000
283
+ violations in the same menu.
284
+
285
+ 72
286
+ 00:05:57,000 --> 00:06:04,000
287
+ So just do mouse right click Checkstyle and select clear Checkstyle violations.
288
+
289
+ 73
290
+ 00:06:05,000 --> 00:06:07,000
291
+ Now I have better visibility.
292
+
293
+ 74
294
+ 00:06:07,000 --> 00:06:09,000
295
+ Where to put new line characters.
296
+
297
+ 75
298
+ 00:06:10,000 --> 00:06:17,000
299
+ Also, there is another rule for Java when it is recommended to keep a plus sign during string concatenation
300
+
301
+ 76
302
+ 00:06:17,000 --> 00:06:18,000
303
+ on the new line.
304
+
305
+ 77
306
+ 00:06:19,000 --> 00:06:24,000
307
+ And also in case of calculate difference method, I still see a long line.
308
+
309
+ 78
310
+ 00:06:24,000 --> 00:06:28,000
311
+ So let's also put the new line be demo variable.
312
+
313
+ 79
314
+ 00:06:29,000 --> 00:06:34,000
315
+ Let's also check that each line doesn't have trailing spaces.
316
+
317
+ 80
318
+ 00:06:34,000 --> 00:06:36,000
319
+ So we formatted it.
320
+
321
+ 81
322
+ 00:06:37,000 --> 00:06:41,000
323
+ And now let's run checkstyle checks again.
324
+
325
+ 82
326
+ 00:06:44,000 --> 00:06:48,000
327
+ Some variations are around our generated constants.
328
+
329
+ 83
330
+ 00:06:49,000 --> 00:06:56,000
331
+ We need to make sure that we don't use trailing spaces tab character, and that we have Javadoc for
332
+
333
+ 84
334
+ 00:06:56,000 --> 00:06:57,000
335
+ these constants.
336
+
337
+ 85
338
+ 00:06:58,000 --> 00:07:01,000
339
+ For the sake of the demo, let's keep it simple.
340
+
341
+ 86
342
+ 00:07:01,000 --> 00:07:07,000
343
+ In Javadoc, I will just specify that this is demo variable A, and this is demo variable B.
344
+
345
+ 87
346
+ 00:07:12,000 --> 00:07:14,000
347
+ We're on Checkstyle again.
348
+
349
+ 88
350
+ 00:07:17,000 --> 00:07:23,000
351
+ Let me make just a few more iterations of Checkstyle checks, because I need to follow up on some errors
352
+
353
+ 89
354
+ 00:07:23,000 --> 00:07:30,000
355
+ that we have already talked about, the ones related to formatting, basically related to tab character
356
+
357
+ 90
358
+ 00:07:30,000 --> 00:07:32,000
359
+ and trailing spaces.
360
+
361
+ 91
362
+ 00:07:32,000 --> 00:07:38,000
363
+ Just need to check one more time, everything carefully to make sure that I didn't miss anything.
364
+
365
+ 92
366
+ 00:07:38,000 --> 00:07:44,000
367
+ You already familiar with this type of errors so there is nothing new for you.
368
+
369
+ 93
370
+ 00:07:44,000 --> 00:07:52,000
371
+ Once I fixed everything, I run check style again and I hope that this is the last time I run it for
372
+
373
+ 94
374
+ 00:07:52,000 --> 00:07:53,000
375
+ today for this file.
376
+
377
+ 95
378
+ 00:07:55,000 --> 00:07:58,000
379
+ And there are no more rules violation.
380
+
381
+ 96
382
+ 00:07:58,000 --> 00:07:59,000
383
+ We did a great job.
384
+
385
+ 97
386
+ 00:08:00,000 --> 00:08:04,000
387
+ Now we are ready to commit our changes and make a pull request.
388
+
389
+ 98
390
+ 00:08:04,000 --> 00:08:11,000
391
+ Now you can understand how Checkstyle can ensure consistency in code style across all your development
392
+
393
+ 99
394
+ 00:08:11,000 --> 00:08:11,000
395
+ team.
396
+
397
+ 100
398
+ 00:08:12,000 --> 00:08:20,000
399
+ Now let me show you one more amazing thing how you can integrate Checkstyle plugin into the build process
400
+
401
+ 101
402
+ 00:08:20,000 --> 00:08:22,000
403
+ and generate cool reports.
404
+
405
+ 102
406
+ 00:08:22,000 --> 00:08:26,000
407
+ In this case we have simple Maven Multi-module project.
408
+
409
+ 103
410
+ 00:08:27,000 --> 00:08:29,000
411
+ This is not a lesson about Maven.
412
+
413
+ 104
414
+ 00:08:29,000 --> 00:08:34,000
415
+ So we would keep maven project configuration outside of this lesson.
416
+
417
+ 105
418
+ 00:08:34,000 --> 00:08:40,000
419
+ If we want to learn more about Maven, feel free to check my course Java from zero to First job.
420
+
421
+ 106
422
+ 00:08:41,000 --> 00:08:48,000
423
+ We have learned in details about Maven build system, but in short, Maven is a build tool that helps
424
+
425
+ 107
426
+ 00:08:48,000 --> 00:08:54,000
427
+ to compile your sources and pack your Java program and prepare it for deployment.
428
+
429
+ 108
430
+ 00:08:54,000 --> 00:08:59,000
431
+ You can extend Maven functionality by adding so called plugins.
432
+
433
+ 109
434
+ 00:08:59,000 --> 00:09:02,000
435
+ One of such plugins is called Checkstyle.
436
+
437
+ 110
438
+ 00:09:03,000 --> 00:09:08,000
439
+ Don't worry, I will share with you the link to the source code of this example two and you will be
440
+
441
+ 111
442
+ 00:09:08,000 --> 00:09:12,000
443
+ able to repeat this example on your local computer.
444
+
445
+ 112
446
+ 00:09:12,000 --> 00:09:19,000
447
+ And in case something will remain unclear, don't hesitate to post your questions below the video and
448
+
449
+ 113
450
+ 00:09:19,000 --> 00:09:20,000
451
+ I will be happy to answer.
452
+
453
+ 114
454
+ 00:09:21,000 --> 00:09:27,000
455
+ Com XML is a main configuration file where all configuration for Maven is stored.
456
+
457
+ 115
458
+ 00:09:27,000 --> 00:09:34,000
459
+ So in order to configure Checkstyle reporting and the plugin, you need to open this file and add some
460
+
461
+ 116
462
+ 00:09:34,000 --> 00:09:36,000
463
+ lines of configuration.
464
+
465
+ 117
466
+ 00:09:36,000 --> 00:09:39,000
467
+ I will show you now what you need to add.
468
+
469
+ 118
470
+ 00:09:39,000 --> 00:09:45,000
471
+ First of all, you need couple of built plugins that are required to generate reports.
472
+
473
+ 119
474
+ 00:09:46,000 --> 00:09:51,000
475
+ They are called Maven site plugin and Maven project info reports plugin.
476
+
477
+ 120
478
+ 00:09:52,000 --> 00:09:58,000
479
+ The Maven site plugin is responsible for generating a website or documentation for your Maven project.
480
+
481
+ 121
482
+ 00:09:59,000 --> 00:10:06,000
483
+ It is highly customizable and integrates with various content generation tools to produce HTML based
484
+
485
+ 122
486
+ 00:10:06,000 --> 00:10:08,000
487
+ project documentation.
488
+
489
+ 123
490
+ 00:10:09,000 --> 00:10:15,000
491
+ The Maven Project Info Reports plugin is used to generate various informational reports about your Maven
492
+
493
+ 124
494
+ 00:10:15,000 --> 00:10:16,000
495
+ project.
496
+
497
+ 125
498
+ 00:10:17,000 --> 00:10:23,000
499
+ These reports provide details about project metadata, dependencies, source control information and
500
+
501
+ 126
502
+ 00:10:23,000 --> 00:10:24,000
503
+ more.
504
+
505
+ 127
506
+ 00:10:24,000 --> 00:10:29,000
507
+ So to generate Checkstyle report we need these two build plugins.
508
+
509
+ 128
510
+ 00:10:29,000 --> 00:10:37,000
511
+ And now we need to add Maven Checkstyle plugin to reporting part of the pom XML file.
512
+
513
+ 129
514
+ 00:10:37,000 --> 00:10:41,000
515
+ The different versions of this Maven Checkstyle plugin.
516
+
517
+ 130
518
+ 00:10:41,000 --> 00:10:47,000
519
+ By the moment you watch this lesson, there can be new version of plugin already, so just feel free
520
+
521
+ 131
522
+ 00:10:47,000 --> 00:10:49,000
523
+ to check on the official website.
524
+
525
+ 132
526
+ 00:10:49,000 --> 00:10:50,000
527
+ The latest version.
528
+
529
+ 133
530
+ 00:10:52,000 --> 00:10:59,000
531
+ Another important thing is that by default, Maven Checkstyle plugin uses soundchecks configuration,
532
+
533
+ 134
534
+ 00:10:59,000 --> 00:11:07,000
535
+ and if you want to use your own configuration, you can use configuration location property inside configuration
536
+
537
+ 135
538
+ 00:11:07,000 --> 00:11:13,000
539
+ XML tag and specify pass to XML file with Checkstyle configuration.
540
+
541
+ 136
542
+ 00:11:14,000 --> 00:11:16,000
543
+ I'll leave these lines commented.
544
+
545
+ 137
546
+ 00:11:16,000 --> 00:11:21,000
547
+ So just in case you wouldn't forget about this configuration when you will check source code.
548
+
549
+ 138
550
+ 00:11:23,000 --> 00:11:30,000
551
+ Also you can configure plugin in such way to fail build process in case the errors reported by Checkstyle
552
+
553
+ 139
554
+ 00:11:30,000 --> 00:11:31,000
555
+ plugin.
556
+
557
+ 140
558
+ 00:11:31,000 --> 00:11:39,000
559
+ But to be honest, I always stand for clean code design, but probably Checkstyle is not that plugin
560
+
561
+ 141
562
+ 00:11:39,000 --> 00:11:44,000
563
+ or violations that can be considered as a reasonable thing to fail build.
564
+
565
+ 142
566
+ 00:11:44,000 --> 00:11:52,000
567
+ But again, it will depend on your project specifics, team maturity, and many other different factors.
568
+
569
+ 143
570
+ 00:11:53,000 --> 00:12:00,000
571
+ Being a team lead, I just keep an eye on this report and create related tag that items to address them
572
+
573
+ 144
574
+ 00:12:00,000 --> 00:12:02,000
575
+ if they are not critical.
576
+
577
+ 145
578
+ 00:12:03,000 --> 00:12:09,000
579
+ Like this I tried to achieve smart balance between pace of development and quality of the code.
580
+
581
+ 146
582
+ 00:12:10,000 --> 00:12:15,000
583
+ So we are good to run a checkstyle checks and to generate report.
584
+
585
+ 147
586
+ 00:12:15,000 --> 00:12:18,000
587
+ Let me open terminal window here.
588
+
589
+ 148
590
+ 00:12:18,000 --> 00:12:23,000
591
+ I will execute Maven command with two Maven goals clean and side.
592
+
593
+ 149
594
+ 00:12:24,000 --> 00:12:31,000
595
+ The clean goal is a standard maven life cycle goal that is used to clean the project by removing the
596
+
597
+ 150
598
+ 00:12:31,000 --> 00:12:32,000
599
+ build directory.
600
+
601
+ 151
602
+ 00:12:32,000 --> 00:12:37,000
603
+ Target directory and any generated artifacts.
604
+
605
+ 152
606
+ 00:12:37,000 --> 00:12:44,000
607
+ When you execute the clean goal, Maven deletes the contents of the target directory, including compiled
608
+
609
+ 153
610
+ 00:12:44,000 --> 00:12:49,000
611
+ classes, generated resources, and other build artifacts.
612
+
613
+ 154
614
+ 00:12:49,000 --> 00:12:54,000
615
+ I call it just to make sure that new report will be generated with such configuration.
616
+
617
+ 155
618
+ 00:12:55,000 --> 00:13:02,000
619
+ The side goal is a part of the Maven site plugin, and is used to generate project documentation in
620
+
621
+ 156
622
+ 00:13:02,000 --> 00:13:04,000
623
+ the form of a website.
624
+
625
+ 157
626
+ 00:13:04,000 --> 00:13:13,000
627
+ This goal generates HTML based documentation and reports based on configuring plugins and content sources.
628
+
629
+ 158
630
+ 00:13:13,000 --> 00:13:20,000
631
+ This goal will detect Checkstyle plugin and will add the report Checkstyle checks report.
632
+
633
+ 159
634
+ 00:13:20,000 --> 00:13:24,000
635
+ Let's give it some time to complete the report generation.
636
+
637
+ 160
638
+ 00:13:25,000 --> 00:13:26,000
639
+ Rate.
640
+
641
+ 161
642
+ 00:13:26,000 --> 00:13:27,000
643
+ It is done now.
644
+
645
+ 162
646
+ 00:13:27,000 --> 00:13:35,000
647
+ And now you can find target folder inside your root folder of the project and inside target folder you
648
+
649
+ 163
650
+ 00:13:35,000 --> 00:13:42,000
651
+ can see site directory and inside it there are a lot of different HTML files.
652
+
653
+ 164
654
+ 00:13:42,000 --> 00:13:49,000
655
+ I recommend you to spend some time exploring them and opening different ones, but in scope of this
656
+
657
+ 165
658
+ 00:13:49,000 --> 00:13:54,000
659
+ demo, let me open file that is named Checkstyle aggregate HTML.
660
+
661
+ 166
662
+ 00:13:55,000 --> 00:14:01,000
663
+ This is a built in web browser in eclipse, so just make mouse right click on the file.
664
+
665
+ 167
666
+ 00:14:01,000 --> 00:14:03,000
667
+ Open this web browser.
668
+
669
+ 168
670
+ 00:14:04,000 --> 00:14:07,000
671
+ And here you can see brief summary of check.
672
+
673
+ 169
674
+ 00:14:08,000 --> 00:14:12,000
675
+ This is a demo project with only three default files.
676
+
677
+ 170
678
+ 00:14:12,000 --> 00:14:18,000
679
+ You can see there are different level of alerts, info, messages, warnings and errors.
680
+
681
+ 171
682
+ 00:14:18,000 --> 00:14:21,000
683
+ And analysis is done per file.
684
+
685
+ 172
686
+ 00:14:21,000 --> 00:14:25,000
687
+ Here you can see how much checkstyle errors you have per file.
688
+
689
+ 173
690
+ 00:14:26,000 --> 00:14:31,000
691
+ In rules section you have summary of how much different rules were violated.
692
+
693
+ 174
694
+ 00:14:32,000 --> 00:14:38,000
695
+ And in the details section you can see detailed breakdown of rules violated with message and with reference
696
+
697
+ 175
698
+ 00:14:38,000 --> 00:14:41,000
699
+ to the specific line in the file.
700
+
701
+ 176
702
+ 00:14:41,000 --> 00:14:44,000
703
+ And such analysis is done per each file.
704
+
705
+ 177
706
+ 00:14:45,000 --> 00:14:48,000
707
+ So take your time to explore this report.
708
+
709
+ 178
710
+ 00:14:48,000 --> 00:14:51,000
711
+ Try to create a report for your project.
712
+
713
+ 179
714
+ 00:14:51,000 --> 00:14:57,000
715
+ And of course, in case you would have any questions, let me know in the comments below the video and
716
+
717
+ 180
718
+ 00:14:57,000 --> 00:14:59,000
719
+ I will be happy to answer.
720
+
721
+ 181
722
+ 00:15:00,000 --> 00:15:02,000
723
+ And also in attachments to the lesson.
724
+
725
+ 182
726
+ 00:15:02,000 --> 00:15:08,000
727
+ I am going to leave a link to description of all checks that checkstyle provide.
728
+
729
+ 183
730
+ 00:15:09,000 --> 00:15:15,000
731
+ This is a link to the official website where you can discover official documentation.
732
+
733
+ 184
734
+ 00:15:15,000 --> 00:15:19,000
735
+ So take your time to get familiar with this site to.
736
+
737
+ 185
738
+ 00:15:19,000 --> 00:15:22,000
739
+ That's all what I wanted to share with you in this lesson.
740
+
741
+ 186
742
+ 00:15:22,000 --> 00:15:25,000
743
+ Let's recap what we have learned today.
744
+
745
+ 187
746
+ 00:15:26,000 --> 00:15:33,000
747
+ So the day we learned what a Czech style tool is, we learned features, purpose and use cases.
748
+
749
+ 188
750
+ 00:15:33,000 --> 00:15:35,000
751
+ When to use Czech style.
752
+
753
+ 189
754
+ 00:15:36,000 --> 00:15:40,000
755
+ Now you know how to install Czech style plugin in your IDE.
756
+
757
+ 190
758
+ 00:15:41,000 --> 00:15:43,000
759
+ How to configure Czech style rules.
760
+
761
+ 191
762
+ 00:15:43,000 --> 00:15:46,000
763
+ How to use this plugin during the local development.
764
+
765
+ 192
766
+ 00:15:46,000 --> 00:15:53,000
767
+ How to generate Czech style report via maven plugin and how to analyze Czech style report.
768
+
769
+ 193
770
+ 00:15:54,000 --> 00:15:56,000
771
+ That's all for this lesson.
772
+
773
+ 194
774
+ 00:15:56,000 --> 00:15:59,000
775
+ Thanks a lot for your attention.
776
+
777
+ 195
778
+ 00:15:59,000 --> 00:16:02,000
779
+ Have a great day and see you in the next lesson.
780
+
108 - Tools, Automation, and Industry Best Practices/004 All-resources-and-links-for-the-lesson.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://docs.google.com/document/d/1v6hhz-Lfk0R4XhyJqXT0GjUfhWiJGf1ZDsUZwdVP3nY/edit?usp=sharing
108 - Tools, Automation, and Industry Best Practices/004 PMD Static Code Analysis_en.srt ADDED
@@ -0,0 +1,1144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ In this lesson we are going to learn how to use such tool for static code analysis as PMD.
8
+
9
+ 3
10
+ 00:00:12,000 --> 00:00:17,000
11
+ We will start the lesson from learning general definitions to understand what PMD is.
12
+
13
+ 4
14
+ 00:00:17,000 --> 00:00:22,000
15
+ I will explain the key features of PMD and what benefits you will get by using it.
16
+
17
+ 5
18
+ 00:00:23,000 --> 00:00:29,000
19
+ Also, we will talk about role of PMD tool in the development process and after learning some theory,
20
+
21
+ 6
22
+ 00:00:29,000 --> 00:00:32,000
23
+ we are going to have some practical exercise.
24
+
25
+ 7
26
+ 00:00:32,000 --> 00:00:39,000
27
+ We will learn how to install PMD into integrated development environment, how to execute code check
28
+
29
+ 8
30
+ 00:00:39,000 --> 00:00:42,000
31
+ how to analyze PMD report.
32
+
33
+ 9
34
+ 00:00:42,000 --> 00:00:45,000
35
+ I will show you how to configure rules and rule sets for PMD.
36
+
37
+ 10
38
+ 00:00:46,000 --> 00:00:52,000
39
+ Then I will show you on the real example how you can integrate PMD into the project, build process
40
+
41
+ 11
42
+ 00:00:52,000 --> 00:00:55,000
43
+ and generate PMD reports during Project Build.
44
+
45
+ 12
46
+ 00:00:55,000 --> 00:00:57,000
47
+ Let's start our lesson.
48
+
49
+ 13
50
+ 00:00:57,000 --> 00:01:04,000
51
+ Let's start from learning the general information about PMD and understanding of what it is.
52
+
53
+ 14
54
+ 00:01:04,000 --> 00:01:10,000
55
+ PMD tool is a software tool used in software development to perform static code analysis.
56
+
57
+ 15
58
+ 00:01:10,000 --> 00:01:15,000
59
+ Its main purpose is to identify potential issues in Java and other programming languages.
60
+
61
+ 16
62
+ 00:01:15,000 --> 00:01:23,000
63
+ Source code PMD checks the code against a set of predefined rules that detect common programming flaws,
64
+
65
+ 17
66
+ 00:01:23,000 --> 00:01:26,000
67
+ bad practices, or inefficiencies.
68
+
69
+ 18
70
+ 00:01:26,000 --> 00:01:33,000
71
+ The tool helps developers by pointing out errors of code that could be problematic, such as code style
72
+
73
+ 19
74
+ 00:01:33,000 --> 00:01:34,000
75
+ issues.
76
+
77
+ 20
78
+ 00:01:34,000 --> 00:01:40,000
79
+ PMD can detect deviations from coding conventions like naming conventions or formatting rules.
80
+
81
+ 21
82
+ 00:01:41,000 --> 00:01:42,000
83
+ Potential bugs.
84
+
85
+ 22
86
+ 00:01:42,000 --> 00:01:49,000
87
+ It identifies code patterns that are likely to be errors, such as null pointer references, unused
88
+
89
+ 23
90
+ 00:01:49,000 --> 00:01:52,000
91
+ variables, or empty catch blocks.
92
+
93
+ 24
94
+ 00:01:52,000 --> 00:01:59,000
95
+ Performance problems PMD can highlight inefficient code constructs that may impact performance like
96
+
97
+ 25
98
+ 00:01:59,000 --> 00:02:03,000
99
+ an efficient string concatenation or unnecessary object creation.
100
+
101
+ 26
102
+ 00:02:03,000 --> 00:02:10,000
103
+ Developers can configure PMD to use a specific set of rules tailored to their project's needs.
104
+
105
+ 27
106
+ 00:02:10,000 --> 00:02:16,000
107
+ The tool can be integrated into the development process, typically running as part of a continuous
108
+
109
+ 28
110
+ 00:02:16,000 --> 00:02:21,000
111
+ integration pipeline or directly within an integrated development environment.
112
+
113
+ 29
114
+ 00:02:22,000 --> 00:02:29,000
115
+ By using PMD regularly, developers can catch issues early in the development life cycle, leading to
116
+
117
+ 30
118
+ 00:02:29,000 --> 00:02:31,000
119
+ cleaner, more reliable code.
120
+
121
+ 31
122
+ 00:02:31,000 --> 00:02:34,000
123
+ PMD is not limited to Java.
124
+
125
+ 32
126
+ 00:02:34,000 --> 00:02:42,000
127
+ It supports several other languages, including JavaScript, Salesforce, apex, XML, and more, and
128
+
129
+ 33
130
+ 00:02:42,000 --> 00:02:45,000
131
+ supports more than 400 built in roles.
132
+
133
+ 34
134
+ 00:02:45,000 --> 00:02:51,000
135
+ Overall, it is a valuable tool for code quality assurance and can contribute significantly to producing
136
+
137
+ 35
138
+ 00:02:51,000 --> 00:02:53,000
139
+ better software.
140
+
141
+ 36
142
+ 00:02:53,000 --> 00:03:00,000
143
+ Now let's review features of PMD in more details to understand what it actually can do and how it can
144
+
145
+ 37
146
+ 00:03:00,000 --> 00:03:01,000
147
+ help us.
148
+
149
+ 38
150
+ 00:03:02,000 --> 00:03:08,000
151
+ PMD offers several powerful features that contribute to improving code quality and identifying potential
152
+
153
+ 39
154
+ 00:03:08,000 --> 00:03:10,000
155
+ issues in software projects.
156
+
157
+ 40
158
+ 00:03:10,000 --> 00:03:17,000
159
+ Code style violations detection PMD checks, source code against predefined coding conventions and style
160
+
161
+ 41
162
+ 00:03:17,000 --> 00:03:17,000
163
+ guidelines.
164
+
165
+ 42
166
+ 00:03:17,000 --> 00:03:23,000
167
+ Like I already mentioned, it detects and reports violations related to naming conventions for Martin
168
+
169
+ 43
170
+ 00:03:23,000 --> 00:03:27,000
171
+ indentation and other stylistic preferences.
172
+
173
+ 44
174
+ 00:03:27,000 --> 00:03:33,000
175
+ I already mentioned potential bug identification and performance inefficiency analysis.
176
+
177
+ 45
178
+ 00:03:34,000 --> 00:03:38,000
179
+ On top of that, I would like to mention a few more features.
180
+
181
+ 46
182
+ 00:03:38,000 --> 00:03:46,000
183
+ Customizable rule sets PMD allows users to define and customize rule configurations based on project
184
+
185
+ 47
186
+ 00:03:46,000 --> 00:03:47,000
187
+ specific requirements.
188
+
189
+ 48
190
+ 00:03:48,000 --> 00:03:55,000
191
+ Developers can enable disable rules, adjust severity levels, and create custom rule sets tailored
192
+
193
+ 49
194
+ 00:03:55,000 --> 00:03:57,000
195
+ to their coding standards.
196
+
197
+ 50
198
+ 00:03:58,000 --> 00:04:01,000
199
+ Integration with Ides and CI CD pipelines.
200
+
201
+ 51
202
+ 00:04:02,000 --> 00:04:08,000
203
+ PMG integrates seamlessly with popular integrated development environments like IntelliJ Idea, Eclipse,
204
+
205
+ 52
206
+ 00:04:08,000 --> 00:04:10,000
207
+ and Visual Studio Code.
208
+
209
+ 53
210
+ 00:04:10,000 --> 00:04:16,000
211
+ It can be incorporated into continuous integration continuous deployment pipelines to automate code
212
+
213
+ 54
214
+ 00:04:16,000 --> 00:04:19,000
215
+ analysis and enforce quality gates.
216
+
217
+ 55
218
+ 00:04:20,000 --> 00:04:25,000
219
+ So what are the benefits of Pmwg and why you need to consider using it in the development?
220
+
221
+ 56
222
+ 00:04:26,000 --> 00:04:33,000
223
+ First of all, early detection PMD catches issues early in the development process, reducing the likelihood
224
+
225
+ 57
226
+ 00:04:33,000 --> 00:04:36,000
227
+ of bugs reaching production.
228
+
229
+ 58
230
+ 00:04:36,000 --> 00:04:37,000
231
+ Consistency.
232
+
233
+ 59
234
+ 00:04:37,000 --> 00:04:44,000
235
+ It helps maintain consistency in code style and adherence to coding standards across a project or team.
236
+
237
+ 60
238
+ 00:04:45,000 --> 00:04:48,000
239
+ Efficiency by automating code analysis.
240
+
241
+ 61
242
+ 00:04:48,000 --> 00:04:53,000
243
+ PMD saves developers time and effort in manual code reviews.
244
+
245
+ 62
246
+ 00:04:53,000 --> 00:04:55,000
247
+ Continuous improvement.
248
+
249
+ 63
250
+ 00:04:55,000 --> 00:05:01,000
251
+ PMD facilitates continuous improvement by promoting best practices and code refactoring.
252
+
253
+ 64
254
+ 00:05:01,000 --> 00:05:07,000
255
+ And if we want to sum up the role of PMD tools in the software development process, then we need to
256
+
257
+ 65
258
+ 00:05:07,000 --> 00:05:09,000
259
+ mention the following objectives of PMD.
260
+
261
+ 66
262
+ 00:05:09,000 --> 00:05:17,000
263
+ To identify and code issues PMD scans source code to detect common programming mistakes, antipatterns
264
+
265
+ 67
266
+ 00:05:17,000 --> 00:05:20,000
267
+ and inefficient code constructs.
268
+
269
+ 68
270
+ 00:05:20,000 --> 00:05:22,000
271
+ Enforcing coding standards.
272
+
273
+ 69
274
+ 00:05:22,000 --> 00:05:29,000
275
+ It ensures that developers adhere to predefined coding standards and best practices within a project.
276
+
277
+ 70
278
+ 00:05:30,000 --> 00:05:33,000
279
+ Improving code quality by catching issues earlier.
280
+
281
+ 71
282
+ 00:05:34,000 --> 00:05:39,000
283
+ PMD assists in producing cleaner, more reliable and maintainable code.
284
+
285
+ 72
286
+ 00:05:39,000 --> 00:05:40,000
287
+ Supporting.
288
+
289
+ 73
290
+ 00:05:40,000 --> 00:05:41,000
291
+ Refactoring.
292
+
293
+ 74
294
+ 00:05:42,000 --> 00:05:48,000
295
+ PMD highlights areas of code that can be refactored for better readability, performance, and robustness.
296
+
297
+ 75
298
+ 00:05:49,000 --> 00:05:53,000
299
+ And now it is time to learn how to work with PMD on real examples.
300
+
301
+ 76
302
+ 00:05:53,000 --> 00:05:56,000
303
+ Let me show you on live demo how to install PMD.
304
+
305
+ 77
306
+ 00:05:56,000 --> 00:05:58,000
307
+ How to use it in the project.
308
+
309
+ 78
310
+ 00:05:58,000 --> 00:06:00,000
311
+ How to customize PMD rules.
312
+
313
+ 79
314
+ 00:06:00,000 --> 00:06:04,000
315
+ And remember, if you have any question, don't wait.
316
+
317
+ 80
318
+ 00:06:04,000 --> 00:06:10,000
319
+ Just pause the video and post your question below the video and I will be happy to answer.
320
+
321
+ 81
322
+ 00:06:10,000 --> 00:06:12,000
323
+ Let me start screen sharing.
324
+
325
+ 82
326
+ 00:06:13,000 --> 00:06:19,000
327
+ In this lesson, I will show you how to work with PMD on the example of Java Project and Eclipse IDE.
328
+
329
+ 83
330
+ 00:06:21,000 --> 00:06:28,000
331
+ Like I already mentioned before, PMG is not related only to Java or only to eclipse IDE, but we need
332
+
333
+ 84
334
+ 00:06:28,000 --> 00:06:30,000
335
+ to start from something, right?
336
+
337
+ 85
338
+ 00:06:30,000 --> 00:06:35,000
339
+ Anyway, the principles of interaction with PMG will be the similar no matter with what programming
340
+
341
+ 86
342
+ 00:06:35,000 --> 00:06:37,000
343
+ language you work with.
344
+
345
+ 87
346
+ 00:06:38,000 --> 00:06:44,000
347
+ So to install PMG into eclipse you need to open Eclipse Marketplace and find PMG there.
348
+
349
+ 88
350
+ 00:06:45,000 --> 00:06:49,000
351
+ Just click on help, select Eclipse Marketplace.
352
+
353
+ 89
354
+ 00:06:51,000 --> 00:06:53,000
355
+ Type BMG in the search bar.
356
+
357
+ 90
358
+ 00:06:55,000 --> 00:07:01,000
359
+ Find Pink Eclipse plugin with search logger and click install button.
360
+
361
+ 91
362
+ 00:07:02,000 --> 00:07:09,000
363
+ I have it already installed, so I won't be able to show you what is going to happen next, but I am
364
+
365
+ 92
366
+ 00:07:09,000 --> 00:07:12,000
367
+ sure you will handle next steps.
368
+
369
+ 93
370
+ 00:07:12,000 --> 00:07:13,000
371
+ They're easy.
372
+
373
+ 94
374
+ 00:07:14,000 --> 00:07:19,000
375
+ Just follow advices that you will see on the screen and complete installation.
376
+
377
+ 95
378
+ 00:07:20,000 --> 00:07:26,000
379
+ Accept license agreement and agree to reload IDE to complete PMD configuration in eclipse.
380
+
381
+ 96
382
+ 00:07:26,000 --> 00:07:30,000
383
+ Everything is pretty simple and straightforward with the installation.
384
+
385
+ 97
386
+ 00:07:30,000 --> 00:07:35,000
387
+ And in case you would have any questions or challenges during the installation, please let me know
388
+
389
+ 98
390
+ 00:07:35,000 --> 00:07:37,000
391
+ and I will be happy to answer you.
392
+
393
+ 99
394
+ 00:07:38,000 --> 00:07:44,000
395
+ Specially for this lesson, I prepared an example that can demonstrate violation of different rules.
396
+
397
+ 100
398
+ 00:07:45,000 --> 00:07:51,000
399
+ You will find the link to the source code in attachments to the lesson, and you will be able to check
400
+
401
+ 101
402
+ 00:07:51,000 --> 00:07:54,000
403
+ the same example at your local computer.
404
+
405
+ 102
406
+ 00:07:54,000 --> 00:07:59,000
407
+ So let's check this code with PMD and understand what is wrong here.
408
+
409
+ 103
410
+ 00:08:00,000 --> 00:08:08,000
411
+ Once you installed PMD plugin, you can make mouse right click and find PMD menu here, select it and
412
+
413
+ 104
414
+ 00:08:08,000 --> 00:08:11,000
415
+ then click Check Code.
416
+
417
+ 105
418
+ 00:08:12,000 --> 00:08:17,000
419
+ Once scanning is performed, new perspective is opened in eclipse.
420
+
421
+ 106
422
+ 00:08:17,000 --> 00:08:23,000
423
+ Here in the top right corner, you can see that PMD perspective is opened.
424
+
425
+ 107
426
+ 00:08:24,000 --> 00:08:31,000
427
+ On this perspective, you can find different views that can help you to work with rules violation.
428
+
429
+ 108
430
+ 00:08:32,000 --> 00:08:33,000
431
+ Violations.
432
+
433
+ 109
434
+ 00:08:33,000 --> 00:08:39,000
435
+ Outline contains the list of all rules violations that are discovered in the file.
436
+
437
+ 110
438
+ 00:08:40,000 --> 00:08:42,000
439
+ The columns are self-descriptive.
440
+
441
+ 111
442
+ 00:08:42,000 --> 00:08:47,000
443
+ The first column is called priority to indicate priority of rule violation.
444
+
445
+ 112
446
+ 00:08:47,000 --> 00:08:53,000
447
+ By the way, if you would click on three dots here, you can filter violations by priorities.
448
+
449
+ 113
450
+ 00:08:54,000 --> 00:09:02,000
451
+ As you can see, there are five priorities where blocker is the most dangerous one then goes critical,
452
+
453
+ 114
454
+ 00:09:02,000 --> 00:09:04,000
455
+ urgent, important and warning.
456
+
457
+ 115
458
+ 00:09:05,000 --> 00:09:09,000
459
+ So feel free to filter only those violations that you are most interested in.
460
+
461
+ 116
462
+ 00:09:10,000 --> 00:09:17,000
463
+ In the rule column, it is set which rule was violated and the error message gives you more context
464
+
465
+ 117
466
+ 00:09:17,000 --> 00:09:19,000
467
+ about the rule violation.
468
+
469
+ 118
470
+ 00:09:20,000 --> 00:09:24,000
471
+ The second view that you can find here is called violations.
472
+
473
+ 119
474
+ 00:09:24,000 --> 00:09:25,000
475
+ Overview.
476
+
477
+ 120
478
+ 00:09:25,000 --> 00:09:32,000
479
+ This view is important when you scan the whole package or the whole project, because you basically
480
+
481
+ 121
482
+ 00:09:32,000 --> 00:09:38,000
483
+ can run PMG scanning on a group of files in the same way like we did with one single file.
484
+
485
+ 122
486
+ 00:09:39,000 --> 00:09:46,000
487
+ As you can see when I click on the package, I also see PMU option available and can check all code
488
+
489
+ 123
490
+ 00:09:46,000 --> 00:09:47,000
491
+ in child packages.
492
+
493
+ 124
494
+ 00:09:48,000 --> 00:09:53,000
495
+ So when you scan multiple files, it is easier for you to use this violations.
496
+
497
+ 125
498
+ 00:09:53,000 --> 00:09:58,000
499
+ Overview view to navigate between different files in different packages.
500
+
501
+ 126
502
+ 00:09:58,000 --> 00:10:02,000
503
+ Also, you can use this bar to filter violations.
504
+
505
+ 127
506
+ 00:10:03,000 --> 00:10:11,000
507
+ If you want to clear all rules violation, just make mouse right click select PMG and click on Clear
508
+
509
+ 128
510
+ 00:10:11,000 --> 00:10:12,000
511
+ Violations.
512
+
513
+ 129
514
+ 00:10:13,000 --> 00:10:20,000
515
+ After this, notifications about all violations in views that we have just reviewed and on the side
516
+
517
+ 130
518
+ 00:10:20,000 --> 00:10:23,000
519
+ of code editor will disappear.
520
+
521
+ 131
522
+ 00:10:24,000 --> 00:10:30,000
523
+ I want you to run this check on your local computer and get more familiar with the type of violations.
524
+
525
+ 132
526
+ 00:10:30,000 --> 00:10:37,000
527
+ Believe me, if your team would follow the standard rules configured, you will see how your code base
528
+
529
+ 133
530
+ 00:10:37,000 --> 00:10:43,000
531
+ has changed, how it become more clean, more consistent, and more robust.
532
+
533
+ 134
534
+ 00:10:43,000 --> 00:10:50,000
535
+ Among typical violations that you can see here is declaring local variables final when it is possible.
536
+
537
+ 135
538
+ 00:10:51,000 --> 00:11:00,000
539
+ So Pmwg analyzes the whole file, and in this case it sees the h variable can be final and name variable
540
+
541
+ 136
542
+ 00:11:00,000 --> 00:11:02,000
543
+ can't be final.
544
+
545
+ 137
546
+ 00:11:02,000 --> 00:11:07,000
547
+ That's why Pmwg race alert telling me that h variable can be final.
548
+
549
+ 138
550
+ 00:11:08,000 --> 00:11:15,000
551
+ Also, you can work with rules violations by paying attention to small flags that you can find on the
552
+
553
+ 139
554
+ 00:11:15,000 --> 00:11:17,000
555
+ side of code editor.
556
+
557
+ 140
558
+ 00:11:18,000 --> 00:11:24,000
559
+ For example, you can see that using of System.out.println is discouraged because it is better to use
560
+
561
+ 141
562
+ 00:11:24,000 --> 00:11:30,000
563
+ logger to log some messages instead of just posting those to console.
564
+
565
+ 142
566
+ 00:11:30,000 --> 00:11:37,000
567
+ Another interesting and in my opinion important note is not to use literals in if condition.
568
+
569
+ 143
570
+ 00:11:38,000 --> 00:11:41,000
571
+ In general, using of magic numbers is discouraged.
572
+
573
+ 144
574
+ 00:11:41,000 --> 00:11:48,000
575
+ If you watched my lesson about Checkstyle, then you should remember what magic numbers are and why
576
+
577
+ 145
578
+ 00:11:48,000 --> 00:11:51,000
579
+ it is not good tone to use magic numbers in code.
580
+
581
+ 146
582
+ 00:11:52,000 --> 00:11:56,000
583
+ Also there is such rule violation as short variable name.
584
+
585
+ 147
586
+ 00:11:57,000 --> 00:12:03,000
587
+ Basically, naming value like x or y doesn't bring a lot of sense.
588
+
589
+ 148
590
+ 00:12:04,000 --> 00:12:07,000
591
+ You should name variables with meaningful names.
592
+
593
+ 149
594
+ 00:12:07,000 --> 00:12:12,000
595
+ In case the variable is never used, another rule will be violated.
596
+
597
+ 150
598
+ 00:12:12,000 --> 00:12:13,000
599
+ Unused local variable.
600
+
601
+ 151
602
+ 00:12:14,000 --> 00:12:19,000
603
+ Another important thing is to understand what PMG can't do.
604
+
605
+ 152
606
+ 00:12:20,000 --> 00:12:27,000
607
+ Taking into account this is a static code analysis tool it can't find for us runtime exceptions.
608
+
609
+ 153
610
+ 00:12:28,000 --> 00:12:36,000
611
+ For example, in this for loop you can see that there is potential runtime exception array index out
612
+
613
+ 154
614
+ 00:12:36,000 --> 00:12:37,000
615
+ of bound exception.
616
+
617
+ 155
618
+ 00:12:37,000 --> 00:12:40,000
619
+ But PMD doesn't see this.
620
+
621
+ 156
622
+ 00:12:40,000 --> 00:12:47,000
623
+ So just be aware about this that PMD will not protect you from runtime exceptions.
624
+
625
+ 157
626
+ 00:12:47,000 --> 00:12:50,000
627
+ With regards to the next steps.
628
+
629
+ 158
630
+ 00:12:50,000 --> 00:12:55,000
631
+ Follow the steps that I showed in the demo and check your project.
632
+
633
+ 159
634
+ 00:12:55,000 --> 00:12:59,000
635
+ Try to understand which rules are violated and try to fix them.
636
+
637
+ 160
638
+ 00:13:00,000 --> 00:13:05,000
639
+ And in case something will be not clear for you, please do not hesitate to let me know in the comments
640
+
641
+ 161
642
+ 00:13:05,000 --> 00:13:08,000
643
+ below the video and I will be happy to answer.
644
+
645
+ 162
646
+ 00:13:08,000 --> 00:13:12,000
647
+ And now let me show you how you can configure PMG.
648
+
649
+ 163
650
+ 00:13:13,000 --> 00:13:18,000
651
+ Click on window, select preferences and search for PMG.
652
+
653
+ 164
654
+ 00:13:19,000 --> 00:13:22,000
655
+ Here you can find rule configuration.
656
+
657
+ 165
658
+ 00:13:23,000 --> 00:13:25,000
659
+ You can enable or disable rules.
660
+
661
+ 166
662
+ 00:13:26,000 --> 00:13:29,000
663
+ Select how to group rules.
664
+
665
+ 167
666
+ 00:13:29,000 --> 00:13:32,000
667
+ You can export or import rule set.
668
+
669
+ 168
670
+ 00:13:32,000 --> 00:13:34,000
671
+ This is needed when you need to align.
672
+
673
+ 169
674
+ 00:13:34,000 --> 00:13:40,000
675
+ Approach inside a big team to make sure that all team members have the same rule set.
676
+
677
+ 170
678
+ 00:13:41,000 --> 00:13:44,000
679
+ If you want, you can add your own rule.
680
+
681
+ 171
682
+ 00:13:44,000 --> 00:13:46,000
683
+ Just click on the plus sign.
684
+
685
+ 172
686
+ 00:13:47,000 --> 00:13:50,000
687
+ Then fill out the data in the pop up.
688
+
689
+ 173
690
+ 00:13:51,000 --> 00:13:52,000
691
+ It includes rule name.
692
+
693
+ 174
694
+ 00:13:52,000 --> 00:13:53,000
695
+ Rule set.
696
+
697
+ 175
698
+ 00:13:54,000 --> 00:13:58,000
699
+ Implemented by Java class or XPath script.
700
+
701
+ 176
702
+ 00:13:58,000 --> 00:14:00,000
703
+ Implementation class.
704
+
705
+ 177
706
+ 00:14:00,000 --> 00:14:01,000
707
+ Target language.
708
+
709
+ 178
710
+ 00:14:01,000 --> 00:14:05,000
711
+ Minimum and maximum version and priority.
712
+
713
+ 179
714
+ 00:14:05,000 --> 00:14:11,000
715
+ So as you may understand, based on the description, your rule should be implemented somewhere in Java
716
+
717
+ 180
718
+ 00:14:11,000 --> 00:14:12,000
719
+ class.
720
+
721
+ 181
722
+ 00:14:12,000 --> 00:14:17,000
723
+ One of the ways to implement custom rule is to create your own class.
724
+
725
+ 182
726
+ 00:14:17,000 --> 00:14:25,000
727
+ That extends abstract Java rule from PMG library that you can add as a dependency to your project.
728
+
729
+ 183
730
+ 00:14:26,000 --> 00:14:33,000
731
+ Basically, you would need to override wizard method and add violation when it will be discovered.
732
+
733
+ 184
734
+ 00:14:34,000 --> 00:14:40,000
735
+ In attachments to the lesson, you will be able to find the detailed guide from the official website
736
+
737
+ 185
738
+ 00:14:40,000 --> 00:14:42,000
739
+ with all PMD documentation.
740
+
741
+ 186
742
+ 00:14:43,000 --> 00:14:48,000
743
+ I checked that guide and I can confirm that this is really a good guide.
744
+
745
+ 187
746
+ 00:14:48,000 --> 00:14:53,000
747
+ Check step by step guide and try to create your own rule if you are interested.
748
+
749
+ 188
750
+ 00:14:54,000 --> 00:14:58,000
751
+ This is a more complex topic that lies beyond the current lesson.
752
+
753
+ 189
754
+ 00:14:58,000 --> 00:15:03,000
755
+ In case you would like to learn more about this, let me know in the comments below the video and I
756
+
757
+ 190
758
+ 00:15:03,000 --> 00:15:09,000
759
+ will help you, because it would require a separate lesson to explain how to create separate PMU rule.
760
+
761
+ 191
762
+ 00:15:09,000 --> 00:15:15,000
763
+ But at least now you know that this is possible and you received direction.
764
+
765
+ 192
766
+ 00:15:15,000 --> 00:15:19,000
767
+ And one more important thing that I want to show you on example.
768
+
769
+ 193
770
+ 00:15:20,000 --> 00:15:28,000
771
+ You can create PMG report in the form of HTML pages, and you can integrate PMG into your build process.
772
+
773
+ 194
774
+ 00:15:29,000 --> 00:15:35,000
775
+ In this example, I will show you how you can integrate PMG into your build process when using Maven.
776
+
777
+ 195
778
+ 00:15:36,000 --> 00:15:38,000
779
+ This is not a lesson about Maven.
780
+
781
+ 196
782
+ 00:15:38,000 --> 00:15:41,000
783
+ That's why I wouldn't stop too much on this topic.
784
+
785
+ 197
786
+ 00:15:41,000 --> 00:15:48,000
787
+ But in short, Maven is one of the most popular build tools that is used for Java applications.
788
+
789
+ 198
790
+ 00:15:48,000 --> 00:15:55,000
791
+ Please watch the previous lesson about Checkstyle, because in that lesson I also shared some details
792
+
793
+ 199
794
+ 00:15:55,000 --> 00:15:57,000
795
+ about Maven configuration.
796
+
797
+ 200
798
+ 00:15:58,000 --> 00:16:02,000
799
+ So we'll use Maven template project that is called Maven Multi.
800
+
801
+ 201
802
+ 00:16:03,000 --> 00:16:05,000
803
+ It has multiple maven modules.
804
+
805
+ 202
806
+ 00:16:05,000 --> 00:16:07,000
807
+ I open Pom.xml.
808
+
809
+ 203
810
+ 00:16:08,000 --> 00:16:11,000
811
+ This is the main configuration file for Maven.
812
+
813
+ 204
814
+ 00:16:11,000 --> 00:16:18,000
815
+ So basically Maven will read configurations from this file and will work per instructions described
816
+
817
+ 205
818
+ 00:16:18,000 --> 00:16:19,000
819
+ in this file.
820
+
821
+ 206
822
+ 00:16:20,000 --> 00:16:27,000
823
+ In order to be able to generate HTML reports, we need to add a few plugins that we already added in
824
+
825
+ 207
826
+ 00:16:27,000 --> 00:16:30,000
827
+ the previous lesson when we learned Checkstyle.
828
+
829
+ 208
830
+ 00:16:30,000 --> 00:16:39,000
831
+ But still, let me remind you, we need to add Maven site plugin and Maven Project Info reports plugin.
832
+
833
+ 209
834
+ 00:16:40,000 --> 00:16:46,000
835
+ As I already mentioned, I explained what these plugins are in the previous lesson.
836
+
837
+ 210
838
+ 00:16:46,000 --> 00:16:49,000
839
+ That's why I will not repeat myself.
840
+
841
+ 211
842
+ 00:16:49,000 --> 00:16:54,000
843
+ And in the reporting tag you need to add Cpmv plugin.
844
+
845
+ 212
846
+ 00:16:54,000 --> 00:16:56,000
847
+ It is called Maven PMD plugin.
848
+
849
+ 213
850
+ 00:16:57,000 --> 00:17:04,000
851
+ And now important thing you need to configure which rule sets to apply during the code analysis.
852
+
853
+ 214
854
+ 00:17:05,000 --> 00:17:11,000
855
+ In PMG, rule sets are configurations that define which specific rules should be applied during the
856
+
857
+ 215
858
+ 00:17:11,000 --> 00:17:13,000
859
+ static code analysis process.
860
+
861
+ 216
862
+ 00:17:14,000 --> 00:17:20,000
863
+ A rule set essentially contains a collection of rules that PMC will use to check your code for potential
864
+
865
+ 217
866
+ 00:17:20,000 --> 00:17:27,000
867
+ issues, violations, or patterns that do not conform to best practices or coding standards.
868
+
869
+ 218
870
+ 00:17:28,000 --> 00:17:31,000
871
+ You can check all rules in the official PMD documentation.
872
+
873
+ 219
874
+ 00:17:32,000 --> 00:17:38,000
875
+ Don't worry, I will add this link to attachments of the lesson and you will be able to investigate
876
+
877
+ 220
878
+ 00:17:38,000 --> 00:17:40,000
879
+ this link after the lesson.
880
+
881
+ 221
882
+ 00:17:40,000 --> 00:17:47,000
883
+ So in this case, Best practices is a rule set that consists of the following rules.
884
+
885
+ 222
886
+ 00:17:47,000 --> 00:17:54,000
887
+ There is also code style rule set that consists of the following rules and so on.
888
+
889
+ 223
890
+ 00:17:54,000 --> 00:18:00,000
891
+ So in case you want to learn more about rules and rule sets, you can check them on this page.
892
+
893
+ 224
894
+ 00:18:00,000 --> 00:18:03,000
895
+ You can click on each rule to learn more.
896
+
897
+ 225
898
+ 00:18:03,000 --> 00:18:09,000
899
+ In the Maven PMD plugin there are predefined rule sets in PMD.
900
+
901
+ 226
902
+ 00:18:09,000 --> 00:18:17,000
903
+ Default rule sets are predefined sets of rules that come bundled with the PMD tool, and in order to
904
+
905
+ 227
906
+ 00:18:17,000 --> 00:18:24,000
907
+ use them, you need to specify rule sets inside the rule sets tag like you can see in this example.
908
+
909
+ 228
910
+ 00:18:24,000 --> 00:18:28,000
911
+ Category Java Best Practices dot XML.
912
+
913
+ 229
914
+ 00:18:29,000 --> 00:18:35,000
915
+ You already saw a Best practices rule set in the official documentation, and you can check the which
916
+
917
+ 230
918
+ 00:18:35,000 --> 00:18:37,000
919
+ rules are inside this rule set.
920
+
921
+ 231
922
+ 00:18:38,000 --> 00:18:43,000
923
+ Based on this example, let's understand how this line is formed.
924
+
925
+ 232
926
+ 00:18:43,000 --> 00:18:51,000
927
+ So the POS slash category slash Java slash best practices dot XML refers to a specific rule configuration
928
+
929
+ 233
930
+ 00:18:51,000 --> 00:18:58,000
931
+ file within the PMU rule set Iraqi that focuses on best practices for Java programming.
932
+
933
+ 234
934
+ 00:18:59,000 --> 00:19:01,000
935
+ Let's break down this POS.
936
+
937
+ 235
938
+ 00:19:02,000 --> 00:19:03,000
939
+ Category.
940
+
941
+ 236
942
+ 00:19:03,000 --> 00:19:08,000
943
+ This represents the top level category or group of rules within PMD.
944
+
945
+ 237
946
+ 00:19:09,000 --> 00:19:16,000
947
+ Categories organized rules into logical groupings based on the aspect of code quality they address,
948
+
949
+ 238
950
+ 00:19:17,000 --> 00:19:18,000
951
+ for example best practices.
952
+
953
+ 239
954
+ 00:19:18,000 --> 00:19:20,000
955
+ Performance design.
956
+
957
+ 240
958
+ 00:19:21,000 --> 00:19:21,000
959
+ Java.
960
+
961
+ 241
962
+ 00:19:22,000 --> 00:19:27,000
963
+ This specifies the programming language for which the ruleset is intended.
964
+
965
+ 242
966
+ 00:19:27,000 --> 00:19:31,000
967
+ In this case, the ruleset applies specifically to Java code.
968
+
969
+ 243
970
+ 00:19:31,000 --> 00:19:33,000
971
+ Best practices XML.
972
+
973
+ 244
974
+ 00:19:34,000 --> 00:19:41,000
975
+ This indicates the specific rule set file that contains rules related to best practices for Java programming.
976
+
977
+ 245
978
+ 00:19:41,000 --> 00:19:43,000
979
+ The best practices.
980
+
981
+ 246
982
+ 00:19:43,000 --> 00:19:50,000
983
+ XML file contains a collection of rules that are considered to promote good coding practices and maintainability
984
+
985
+ 247
986
+ 00:19:50,000 --> 00:19:56,000
987
+ in Java code, and in the similar way I added multiple other rule sets.
988
+
989
+ 248
990
+ 00:19:56,000 --> 00:19:58,000
991
+ So that's the key thing.
992
+
993
+ 249
994
+ 00:19:59,000 --> 00:20:05,000
995
+ Just in case, I will leave a link to the official documentation of PMD plugin where you can find even
996
+
997
+ 250
998
+ 00:20:05,000 --> 00:20:07,000
999
+ more details.
1000
+
1001
+ 251
1002
+ 00:20:07,000 --> 00:20:14,000
1003
+ And remember, in case you want to clarify something or in case something is not clear, please let
1004
+
1005
+ 252
1006
+ 00:20:14,000 --> 00:20:18,000
1007
+ me know in the comments below the video and I will be happy to answer.
1008
+
1009
+ 253
1010
+ 00:20:19,000 --> 00:20:25,000
1011
+ So now everything is configured and we are ready to generate PMG report.
1012
+
1013
+ 254
1014
+ 00:20:25,000 --> 00:20:31,000
1015
+ I open terminal window in the root folder of my project and I execute the following command.
1016
+
1017
+ 255
1018
+ 00:20:32,000 --> 00:20:34,000
1019
+ And then clean site.
1020
+
1021
+ 256
1022
+ 00:20:35,000 --> 00:20:41,000
1023
+ Clean is the default Maven goal that would clean all artifacts created during the previous build.
1024
+
1025
+ 257
1026
+ 00:20:41,000 --> 00:20:46,000
1027
+ Basically, the target folder will be removed like this.
1028
+
1029
+ 258
1030
+ 00:20:46,000 --> 00:20:53,000
1031
+ We will be able to become sure that our configuration works properly, because all new reports will
1032
+
1033
+ 259
1034
+ 00:20:53,000 --> 00:20:55,000
1035
+ be generated from scratch.
1036
+
1037
+ 260
1038
+ 00:20:55,000 --> 00:21:01,000
1039
+ And sight is a goal that is used to generate project reports in a standardized format.
1040
+
1041
+ 261
1042
+ 00:21:02,000 --> 00:21:09,000
1043
+ After execution of this command, we need to give some time to Maven to complete all operations.
1044
+
1045
+ 262
1046
+ 00:21:09,000 --> 00:21:17,000
1047
+ When you can see information that build was successful, you can check target folder, inside target
1048
+
1049
+ 263
1050
+ 00:21:17,000 --> 00:21:23,000
1051
+ folder and inside side folder you will find PMG HTML file.
1052
+
1053
+ 264
1054
+ 00:21:24,000 --> 00:21:24,000
1055
+ Open it.
1056
+
1057
+ 265
1058
+ 00:21:25,000 --> 00:21:32,000
1059
+ You can open it in your web browser on your local computer, or you can use built in browser in eclipse.
1060
+
1061
+ 266
1062
+ 00:21:33,000 --> 00:21:39,000
1063
+ Just make mouse right click on the file, select open with and click on web browser.
1064
+
1065
+ 267
1066
+ 00:21:40,000 --> 00:21:41,000
1067
+ And here it is.
1068
+
1069
+ 268
1070
+ 00:21:42,000 --> 00:21:44,000
1071
+ This is our PMD report for this project.
1072
+
1073
+ 269
1074
+ 00:21:44,000 --> 00:21:52,000
1075
+ As you can see, all rules violations are grouped by priority violations with priority two are located
1076
+
1077
+ 270
1078
+ 00:21:52,000 --> 00:21:56,000
1079
+ in the following files main, core, main, persistence and app.
1080
+
1081
+ 271
1082
+ 00:21:57,000 --> 00:22:00,000
1083
+ Taking into account this is a simple demo project.
1084
+
1085
+ 272
1086
+ 00:22:00,000 --> 00:22:07,000
1087
+ I don't have too many files here that goes violations with priority three and priority four, and the
1088
+
1089
+ 273
1090
+ 00:22:07,000 --> 00:22:14,000
1091
+ similar way you can generate reports for all your projects and keep track of quality of your code.
1092
+
1093
+ 274
1094
+ 00:22:15,000 --> 00:22:18,000
1095
+ That's all what I wanted to share with you in this lesson.
1096
+
1097
+ 275
1098
+ 00:22:18,000 --> 00:22:24,000
1099
+ But in case you still have any questions regarding PMD, you are welcome to ask them in comments below
1100
+
1101
+ 276
1102
+ 00:22:24,000 --> 00:22:25,000
1103
+ this video.
1104
+
1105
+ 277
1106
+ 00:22:25,000 --> 00:22:29,000
1107
+ And in the meantime, let's recap what we have learned today.
1108
+
1109
+ 278
1110
+ 00:22:30,000 --> 00:22:33,000
1111
+ We learned what PMD is now you know.
1112
+
1113
+ 279
1114
+ 00:22:33,000 --> 00:22:36,000
1115
+ Features and benefits of using PMA.
1116
+
1117
+ 280
1118
+ 00:22:36,000 --> 00:22:43,000
1119
+ I explained you the role of PMD tool in the development process, and then we had a lot of practical
1120
+
1121
+ 281
1122
+ 00:22:43,000 --> 00:22:45,000
1123
+ activity on practical examples.
1124
+
1125
+ 282
1126
+ 00:22:45,000 --> 00:22:53,000
1127
+ We learned how to install PMD, how to check code with PMD, how to analyze PMD reports, and how to
1128
+
1129
+ 283
1130
+ 00:22:53,000 --> 00:22:55,000
1131
+ integrate PMD into build process.
1132
+
1133
+ 284
1134
+ 00:22:56,000 --> 00:22:58,000
1135
+ That's all for this lesson.
1136
+
1137
+ 285
1138
+ 00:22:58,000 --> 00:23:00,000
1139
+ Thanks a lot for your attention.
1140
+
1141
+ 286
1142
+ 00:23:00,000 --> 00:23:03,000
1143
+ Have a great day and see you in the next lesson.
1144
+
108 - Tools, Automation, and Industry Best Practices/external-links.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+
2
+ 002 All-resources-and-links-for-the-lesson
3
+ https://docs.google.com/document/d/1q9dNmR60DlQLoNVxxzjNy9VJS6WxOFKsOfW8c2jb5x0/edit?usp=sharing
4
+
5
+ 003 All-resources-and-links-for-the-lesson
6
+ https://docs.google.com/document/d/1q9dNmR60DlQLoNVxxzjNy9VJS6WxOFKsOfW8c2jb5x0/edit?usp=sharing
7
+
8
+ 004 All-resources-and-links-for-the-lesson
9
+ https://docs.google.com/document/d/1v6hhz-Lfk0R4XhyJqXT0GjUfhWiJGf1ZDsUZwdVP3nY/edit?usp=sharing
109 - Advanced Code Review Strategies/001 All-documents-shared-in-the-lesson.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://drive.google.com/drive/folders/174RXHMxjVbVNg4DSQ7nxOQAK4I5StLdp?usp=sharing
109 - Advanced Code Review Strategies/002 Coding Standards, Code Quality & Consistency_en.srt ADDED
@@ -0,0 +1,1280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ In this lesson we are going to talk about coding standards, code quality and consistency.
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:17,000
11
+ We will start the lesson from understanding of what coding standards are, what they consist of and
12
+
13
+ 4
14
+ 00:00:17,000 --> 00:00:18,000
15
+ why we need them.
16
+
17
+ 5
18
+ 00:00:19,000 --> 00:00:24,000
19
+ Then we'll review examples of coding standards that I prepared specially for this lesson.
20
+
21
+ 6
22
+ 00:00:24,000 --> 00:00:30,000
23
+ You will be able to reuse the template provided for your own project by adding your project specific
24
+
25
+ 7
26
+ 00:00:30,000 --> 00:00:30,000
27
+ details.
28
+
29
+ 8
30
+ 00:00:31,000 --> 00:00:36,000
31
+ After learning all this, we will discuss how to enforce coding standards in your team.
32
+
33
+ 9
34
+ 00:00:37,000 --> 00:00:40,000
35
+ We will review key strategies that are supposed to help you.
36
+
37
+ 10
38
+ 00:00:40,000 --> 00:00:45,000
39
+ Then we will talk about ensuring code quality and consistency on the project.
40
+
41
+ 11
42
+ 00:00:45,000 --> 00:00:51,000
43
+ And at the end of the lesson, we will make overview of coding standards for different programming languages.
44
+
45
+ 12
46
+ 00:00:51,000 --> 00:00:53,000
47
+ So let's start our lesson.
48
+
49
+ 13
50
+ 00:00:53,000 --> 00:00:58,000
51
+ Let's understand what coding standards are and what they usually include.
52
+
53
+ 14
54
+ 00:00:59,000 --> 00:01:05,000
55
+ Coding standards are guidelines or rules that dictate how code should be written and formatted in a
56
+
57
+ 15
58
+ 00:01:05,000 --> 00:01:07,000
59
+ consistent and readable manner.
60
+
61
+ 16
62
+ 00:01:07,000 --> 00:01:15,000
63
+ These standards help ensure that code is easier to understand, maintain, and debug by both the original
64
+
65
+ 17
66
+ 00:01:15,000 --> 00:01:19,000
67
+ coder and others who may work with the code in the future.
68
+
69
+ 18
70
+ 00:01:19,000 --> 00:01:21,000
71
+ Here is a basic overview.
72
+
73
+ 19
74
+ 00:01:21,000 --> 00:01:25,000
75
+ Let me make a basic overview of what coding standards may include.
76
+
77
+ 20
78
+ 00:01:26,000 --> 00:01:28,000
79
+ Naming conventions.
80
+
81
+ 21
82
+ 00:01:28,000 --> 00:01:34,000
83
+ Standards for naming variables, functions, methods, classes, and other elements should be clear
84
+
85
+ 22
86
+ 00:01:34,000 --> 00:01:35,000
87
+ and descriptive.
88
+
89
+ 23
90
+ 00:01:35,000 --> 00:01:40,000
91
+ This helps in understanding the purpose and functionality of each element.
92
+
93
+ 24
94
+ 00:01:40,000 --> 00:01:42,000
95
+ Formatting.
96
+
97
+ 25
98
+ 00:01:42,000 --> 00:01:47,000
99
+ Consistent indentation, spacing and line breaks improve code readability.
100
+
101
+ 26
102
+ 00:01:48,000 --> 00:01:55,000
103
+ Common formatting styles include tabs versus spaces, line lengths, limits, and placement of braces
104
+
105
+ 27
106
+ 00:01:55,000 --> 00:01:56,000
107
+ and parentheses.
108
+
109
+ 28
110
+ 00:01:57,000 --> 00:01:58,000
111
+ Comments.
112
+
113
+ 29
114
+ 00:01:58,000 --> 00:02:05,000
115
+ Guidelines for adding comments to explain complex logic, assumptions or intentions behind the code.
116
+
117
+ 30
118
+ 00:02:05,000 --> 00:02:09,000
119
+ Comments should be clear and concise, avoiding unnecessary confusion.
120
+
121
+ 31
122
+ 00:02:10,000 --> 00:02:17,000
123
+ Documentation standards for documenting code, including the purpose of modules, classes, functions
124
+
125
+ 32
126
+ 00:02:17,000 --> 00:02:18,000
127
+ and parameters.
128
+
129
+ 33
130
+ 00:02:18,000 --> 00:02:24,000
131
+ Documentation may include usage examples and explanations of return values and exceptions.
132
+
133
+ 34
134
+ 00:02:25,000 --> 00:02:32,000
135
+ Error handling guidelines for handling errors and exceptions, including when to use try catch blocks,
136
+
137
+ 35
138
+ 00:02:32,000 --> 00:02:37,000
139
+ how to report errors, and how to handle unexpected situations gracefully.
140
+
141
+ 36
142
+ 00:02:38,000 --> 00:02:45,000
143
+ Code structure standards for organizing code into logical units such as modules, classes, and functions.
144
+
145
+ 37
146
+ 00:02:46,000 --> 00:02:52,000
147
+ This includes principles such as separation of concerns and single responsibility, which help keep
148
+
149
+ 38
150
+ 00:02:52,000 --> 00:02:54,000
151
+ code modular and maintainable.
152
+
153
+ 39
154
+ 00:02:55,000 --> 00:03:02,000
155
+ Performance guidelines for writing efficient code, such as avoiding unnecessary computations, minimizing
156
+
157
+ 40
158
+ 00:03:02,000 --> 00:03:07,000
159
+ memory usage, and optimizing algorithms when it is possible.
160
+
161
+ 41
162
+ 00:03:07,000 --> 00:03:15,000
163
+ Security standards for writing secure code, including best practices for input validation, data sanitization,
164
+
165
+ 42
166
+ 00:03:15,000 --> 00:03:17,000
167
+ authentication, and encryption.
168
+
169
+ 43
170
+ 00:03:18,000 --> 00:03:24,000
171
+ Testing guidelines for writing testable code and creating unit tests to verify functionality.
172
+
173
+ 44
174
+ 00:03:25,000 --> 00:03:30,000
175
+ This may include standards for test coverage, test naming conventions and assertions.
176
+
177
+ 45
178
+ 00:03:31,000 --> 00:03:37,000
179
+ Version control standards for using version control systems such as git, including commit message conventions,
180
+
181
+ 46
182
+ 00:03:37,000 --> 00:03:40,000
183
+ branching strategies, and code review processes.
184
+
185
+ 47
186
+ 00:03:41,000 --> 00:03:47,000
187
+ Overall coding standards promote consistency, reliability, maintainability, and collaboration among
188
+
189
+ 48
190
+ 00:03:47,000 --> 00:03:49,000
191
+ developers working on a project.
192
+
193
+ 49
194
+ 00:03:49,000 --> 00:03:56,000
195
+ They help ensure that code is of high quality and can be easily understood and maintained over time.
196
+
197
+ 50
198
+ 00:03:57,000 --> 00:04:03,000
199
+ So in order to understand what coding standards are and how they look like, let's review example.
200
+
201
+ 51
202
+ 00:04:04,000 --> 00:04:06,000
203
+ Let's pretend that we have a web application.
204
+
205
+ 52
206
+ 00:04:06,000 --> 00:04:11,000
207
+ And Kim, who uses Java stack for web development of the application.
208
+
209
+ 53
210
+ 00:04:11,000 --> 00:04:19,000
211
+ We also have test automation framework that is written on Java using selenium WebDriver and cucumber
212
+
213
+ 54
214
+ 00:04:19,000 --> 00:04:20,000
215
+ library for BDD.
216
+
217
+ 55
218
+ 00:04:20,000 --> 00:04:21,000
219
+ Scenario description.
220
+
221
+ 56
222
+ 00:04:22,000 --> 00:04:23,000
223
+ This is just an example.
224
+
225
+ 57
226
+ 00:04:23,000 --> 00:04:29,000
227
+ Of course there can be different combination of technology stack and applications under development,
228
+
229
+ 58
230
+ 00:04:29,000 --> 00:04:33,000
231
+ and it is only up to you how you would like to tailor the recommended template.
232
+
233
+ 59
234
+ 00:04:34,000 --> 00:04:38,000
235
+ So let me walk you through this example and I will give you my comments.
236
+
237
+ 60
238
+ 00:04:38,000 --> 00:04:44,000
239
+ As we go in the document you will find explanation and example on Java programming language.
240
+
241
+ 61
242
+ 00:04:45,000 --> 00:04:51,000
243
+ Just to remind you that this is just an example, and you need to tailor this document to your project
244
+
245
+ 62
246
+ 00:04:51,000 --> 00:04:55,000
247
+ needs and your project requirements.
248
+
249
+ 63
250
+ 00:04:55,000 --> 00:05:01,000
251
+ If your project doesn't use Java, then obviously there is no sense in having Java examples.
252
+
253
+ 64
254
+ 00:05:02,000 --> 00:05:07,000
255
+ Regarding naming conventions, you can see that for class names we use Pascal case.
256
+
257
+ 65
258
+ 00:05:07,000 --> 00:05:15,000
259
+ For variables and methods we use camel case constants should be in uppercase with underscore separating
260
+
261
+ 66
262
+ 00:05:15,000 --> 00:05:16,000
263
+ words.
264
+
265
+ 67
266
+ 00:05:16,000 --> 00:05:21,000
267
+ Packages should be in lower case and follow a reverse domain name convention.
268
+
269
+ 68
270
+ 00:05:22,000 --> 00:05:26,000
271
+ This reflects standards that are described in Java naming conventions.
272
+
273
+ 69
274
+ 00:05:27,000 --> 00:05:32,000
275
+ If you have any other specifics for naming, you can describe them here.
276
+
277
+ 70
278
+ 00:05:32,000 --> 00:05:36,000
279
+ And here is an example of naming convention applied in code.
280
+
281
+ 71
282
+ 00:05:36,000 --> 00:05:39,000
283
+ I bet you already heard about camel case.
284
+
285
+ 72
286
+ 00:05:39,000 --> 00:05:46,000
287
+ That describes a case when you don't use spaces between words, but instead you start with lowercase
288
+
289
+ 73
290
+ 00:05:46,000 --> 00:05:48,000
291
+ and then capitalize each new word.
292
+
293
+ 74
294
+ 00:05:49,000 --> 00:05:56,000
295
+ If you didn't hear before about Pascal case, it is a variable naming convention in programming in which
296
+
297
+ 75
298
+ 00:05:56,000 --> 00:06:03,000
299
+ the first letter of each word is uppercase and the remaining letters are lowercase with no spaces or
300
+
301
+ 76
302
+ 00:06:03,000 --> 00:06:05,000
303
+ other separators between words.
304
+
305
+ 77
306
+ 00:06:05,000 --> 00:06:09,000
307
+ But each new word is started with uppercase.
308
+
309
+ 78
310
+ 00:06:10,000 --> 00:06:14,000
311
+ But anyway, these are specific terms and concepts.
312
+
313
+ 79
314
+ 00:06:14,000 --> 00:06:20,000
315
+ I will make just a brief overview of them, because the main focus is on the structure of the document.
316
+
317
+ 80
318
+ 00:06:20,000 --> 00:06:27,000
319
+ Like I mentioned, all this content will be project specific, but in case you would have any questions,
320
+
321
+ 81
322
+ 00:06:27,000 --> 00:06:33,000
323
+ please do not hesitate to post your questions below the video and I will be happy to answer.
324
+
325
+ 82
326
+ 00:06:33,000 --> 00:06:36,000
327
+ The next section is about formatting.
328
+
329
+ 83
330
+ 00:06:36,000 --> 00:06:42,000
331
+ Usually, team agrees on some code formatting in order to make sure code is readable.
332
+
333
+ 84
334
+ 00:06:42,000 --> 00:06:49,000
335
+ For example, you can set the limit on the line length about position of braces because there are different
336
+
337
+ 85
338
+ 00:06:49,000 --> 00:06:51,000
339
+ styles of where to put braces.
340
+
341
+ 86
342
+ 00:06:51,000 --> 00:06:58,000
343
+ And in case you are not consistent within one code repository, this might look confusing.
344
+
345
+ 87
346
+ 00:06:58,000 --> 00:07:04,000
347
+ These rules can be used for configuration, spatial extensions and plugins in the integrated development
348
+
349
+ 88
350
+ 00:07:04,000 --> 00:07:05,000
351
+ environments.
352
+
353
+ 89
354
+ 00:07:05,000 --> 00:07:08,000
355
+ So how this is happening on practice.
356
+
357
+ 90
358
+ 00:07:09,000 --> 00:07:13,000
359
+ Tech lead configures these rules and share configuration file with team members.
360
+
361
+ 91
362
+ 00:07:14,000 --> 00:07:22,000
363
+ Team members just import it into IDE and when they apply auto formatting code is formatted according
364
+
365
+ 92
366
+ 00:07:22,000 --> 00:07:24,000
367
+ to the defined rules.
368
+
369
+ 93
370
+ 00:07:24,000 --> 00:07:29,000
371
+ This is just a hint for you how to scale and how to ensure consistency.
372
+
373
+ 94
374
+ 00:07:29,000 --> 00:07:35,000
375
+ For example, such feature is available in Eclipse Integrated Development Environment for Java developers.
376
+
377
+ 95
378
+ 00:07:36,000 --> 00:07:39,000
379
+ And here you can see just some examples of the formatting.
380
+
381
+ 96
382
+ 00:07:40,000 --> 00:07:44,000
383
+ The next section is about comments and documentation.
384
+
385
+ 97
386
+ 00:07:44,000 --> 00:07:47,000
387
+ In real life there are different approaches for comment and code.
388
+
389
+ 98
390
+ 00:07:47,000 --> 00:07:55,000
391
+ For example, in case you have extensive suite of unit tests, they can serve as your project documentation
392
+
393
+ 99
394
+ 00:07:55,000 --> 00:07:57,000
395
+ and you don't need to have comments.
396
+
397
+ 100
398
+ 00:07:58,000 --> 00:08:05,000
399
+ But still in comments you can describe algorithms, reasoning for decisions made, and lots more.
400
+
401
+ 101
402
+ 00:08:05,000 --> 00:08:12,000
403
+ So I believe it is important to describe coding standards for comments two in this particular case I
404
+
405
+ 102
406
+ 00:08:12,000 --> 00:08:14,000
407
+ use the reference to the Java doc format.
408
+
409
+ 103
410
+ 00:08:15,000 --> 00:08:21,000
411
+ So in case some standard already exists and you just need to reuse it, feel free just to put statement
412
+
413
+ 104
414
+ 00:08:21,000 --> 00:08:26,000
415
+ that will follow this standard and desirably specify hyper reference.
416
+
417
+ 105
418
+ 00:08:26,000 --> 00:08:27,000
419
+ This will be enough.
420
+
421
+ 106
422
+ 00:08:28,000 --> 00:08:30,000
423
+ Error handling section.
424
+
425
+ 107
426
+ 00:08:30,000 --> 00:08:33,000
427
+ There are always different styles of error handling.
428
+
429
+ 108
430
+ 00:08:33,000 --> 00:08:37,000
431
+ Sometimes we just let specific thread of execution to fail.
432
+
433
+ 109
434
+ 00:08:37,000 --> 00:08:40,000
435
+ Sometimes we have global error handlers.
436
+
437
+ 110
438
+ 00:08:40,000 --> 00:08:43,000
439
+ As I already said before, there are different styles.
440
+
441
+ 111
442
+ 00:08:43,000 --> 00:08:50,000
443
+ In my opinion, it is mandatory to lock all exceptions with available logger, and I prefer to have
444
+
445
+ 112
446
+ 00:08:50,000 --> 00:08:56,000
447
+ this rule written in all, the team members wouldn't forget about it during the code review process.
448
+
449
+ 113
450
+ 00:08:56,000 --> 00:09:03,000
451
+ As you can see, that's why it is so important to have mature leader in your teams.
452
+
453
+ 114
454
+ 00:09:03,000 --> 00:09:09,000
455
+ No matter whether it is a mature project manager with technical background and technical experience
456
+
457
+ 115
458
+ 00:09:09,000 --> 00:09:15,000
459
+ or mature technical leader, somebody should execute this role to foster best practices of software
460
+
461
+ 116
462
+ 00:09:15,000 --> 00:09:17,000
463
+ development on the project.
464
+
465
+ 117
466
+ 00:09:18,000 --> 00:09:24,000
467
+ Regarding testing, you can highlight on naming conventions and describe how you name tests.
468
+
469
+ 118
470
+ 00:09:25,000 --> 00:09:32,000
471
+ In this particular case, I define that we use format where I start each test with shoot and then put
472
+
473
+ 119
474
+ 00:09:32,000 --> 00:09:36,000
475
+ verbs focusing on the behavior of the module or system.
476
+
477
+ 120
478
+ 00:09:37,000 --> 00:09:44,000
479
+ And when we are dealing with tests, I bet we shouldn't feel shy to write long method names even extra
480
+
481
+ 121
482
+ 00:09:44,000 --> 00:09:52,000
483
+ long, because sometimes test method name is the only thing that we have to understand the expected
484
+
485
+ 122
486
+ 00:09:52,000 --> 00:10:00,000
487
+ behavior in a natural human language, without delving into the details of the code or test structure.
488
+
489
+ 123
490
+ 00:10:00,000 --> 00:10:03,000
491
+ In the Version Control System standards.
492
+
493
+ 124
494
+ 00:10:03,000 --> 00:10:06,000
495
+ I also made a reference to git flow branching model.
496
+
497
+ 125
498
+ 00:10:07,000 --> 00:10:12,000
499
+ This is a popular branching model, so no need to describe it in details.
500
+
501
+ 126
502
+ 00:10:12,000 --> 00:10:16,000
503
+ It would be enough to make a reference on it in this particular case.
504
+
505
+ 127
506
+ 00:10:17,000 --> 00:10:23,000
507
+ Very important in my opinion is to highlight that on the project we try to achieve clean git history.
508
+
509
+ 128
510
+ 00:10:23,000 --> 00:10:30,000
511
+ That's why before creating pull requests, we have to do git rebase on the development branch but not
512
+
513
+ 129
514
+ 00:10:30,000 --> 00:10:32,000
515
+ git pull command.
516
+
517
+ 130
518
+ 00:10:32,000 --> 00:10:35,000
519
+ Just a quick technical note here.
520
+
521
+ 131
522
+ 00:10:35,000 --> 00:10:41,000
523
+ Git pull may create a separate commit when merging changes from two different branches.
524
+
525
+ 132
526
+ 00:10:41,000 --> 00:10:42,000
527
+ Git rebase.
528
+
529
+ 133
530
+ 00:10:42,000 --> 00:10:49,000
531
+ Just put your commit on top of all other changes made before yours in different branches.
532
+
533
+ 134
534
+ 00:10:49,000 --> 00:10:53,000
535
+ Anyway, this is not a topic of this specific lesson.
536
+
537
+ 135
538
+ 00:10:53,000 --> 00:10:59,000
539
+ If you are interested to learn more about how to use git, feel free to check my course about git from
540
+
541
+ 136
542
+ 00:10:59,000 --> 00:11:01,000
543
+ Basics to advance.
544
+
545
+ 137
546
+ 00:11:02,000 --> 00:11:09,000
547
+ You can use Swan on your project, but not yet as SVN is just another system for code version control,
548
+
549
+ 138
550
+ 00:11:09,000 --> 00:11:14,000
551
+ so feel free to describe in this section any project specific rules.
552
+
553
+ 139
554
+ 00:11:14,000 --> 00:11:21,000
555
+ In the Code Structure section, you can describe any specifics related to structuring of your code of
556
+
557
+ 140
558
+ 00:11:21,000 --> 00:11:21,000
559
+ the program.
560
+
561
+ 141
562
+ 00:11:22,000 --> 00:11:28,000
563
+ For example, if you have modular structure, then highlight that each code should be placed in the
564
+
565
+ 142
566
+ 00:11:28,000 --> 00:11:31,000
567
+ specific module because you follow modular structure.
568
+
569
+ 143
570
+ 00:11:32,000 --> 00:11:38,000
571
+ In case there is some code that is going to be reused by multiple modules, it should be placed in the
572
+
573
+ 144
574
+ 00:11:38,000 --> 00:11:39,000
575
+ core module.
576
+
577
+ 145
578
+ 00:11:39,000 --> 00:11:46,000
579
+ In case there is a code related only to the web application and front end part, then it should be placed
580
+
581
+ 146
582
+ 00:11:46,000 --> 00:11:47,000
583
+ into the web module.
584
+
585
+ 147
586
+ 00:11:47,000 --> 00:11:55,000
587
+ And it is also never hurts to mention to follow the principle of separation of concerns and solid principles.
588
+
589
+ 148
590
+ 00:11:56,000 --> 00:12:01,000
591
+ Solid is an abbreviation of five principles of code design in object oriented programming.
592
+
593
+ 149
594
+ 00:12:02,000 --> 00:12:04,000
595
+ This is bigger topic for discussion.
596
+
597
+ 150
598
+ 00:12:04,000 --> 00:12:09,000
599
+ If you are interested in the object oriented programming, you can check my course.
600
+
601
+ 151
602
+ 00:12:09,000 --> 00:12:12,000
603
+ Object oriented programming from basics to advanced level.
604
+
605
+ 152
606
+ 00:12:12,000 --> 00:12:19,000
607
+ In case in your project you use functional programming approach, then solid principles are not applicable
608
+
609
+ 153
610
+ 00:12:19,000 --> 00:12:20,000
611
+ to your code base.
612
+
613
+ 154
614
+ 00:12:21,000 --> 00:12:28,000
615
+ In performance section, it is useful to describe key principles and approaches to follow performance
616
+
617
+ 155
618
+ 00:12:28,000 --> 00:12:29,000
619
+ standards in your code.
620
+
621
+ 156
622
+ 00:12:30,000 --> 00:12:38,000
623
+ In this case, it is just a formal mention that each developer should always keep in mind, namely the
624
+
625
+ 157
626
+ 00:12:38,000 --> 00:12:41,000
627
+ with unnecessary computations and minimize memory usage.
628
+
629
+ 158
630
+ 00:12:41,000 --> 00:12:46,000
631
+ And of course to optimize algorithms when it is possible to improve performance.
632
+
633
+ 159
634
+ 00:12:47,000 --> 00:12:52,000
635
+ For example, to reduce amount of loops iterations if you see how to apply improvements.
636
+
637
+ 160
638
+ 00:12:53,000 --> 00:12:54,000
639
+ Security.
640
+
641
+ 161
642
+ 00:12:54,000 --> 00:12:55,000
643
+ Samsung.
644
+
645
+ 162
646
+ 00:12:55,000 --> 00:12:59,000
647
+ What engineers use to postpone on the very last moment.
648
+
649
+ 163
650
+ 00:12:59,000 --> 00:13:07,000
651
+ My recommendation never postpone work on security items and never create technical debt items from security
652
+
653
+ 164
654
+ 00:13:07,000 --> 00:13:07,000
655
+ requirements.
656
+
657
+ 165
658
+ 00:13:08,000 --> 00:13:13,000
659
+ Treat security requirements with the same level of attention as functional requirements.
660
+
661
+ 166
662
+ 00:13:14,000 --> 00:13:20,000
663
+ Regarding coding standards, you can see there is a mansion to write secure code by implementing best
664
+
665
+ 167
666
+ 00:13:20,000 --> 00:13:27,000
667
+ practices for input validation, data sanitization, authentication, and encryption.
668
+
669
+ 168
670
+ 00:13:27,000 --> 00:13:34,000
671
+ Also this important to consider a vast top ten list of risks and vulnerabilities in web applications
672
+
673
+ 169
674
+ 00:13:34,000 --> 00:13:36,000
675
+ during the development.
676
+
677
+ 170
678
+ 00:13:36,000 --> 00:13:41,000
679
+ In scope of this lesson, we will not have enough time to cover requirements of Avast.
680
+
681
+ 171
682
+ 00:13:41,000 --> 00:13:41,000
683
+ Top ten.
684
+
685
+ 172
686
+ 00:13:41,000 --> 00:13:48,000
687
+ But I have a separate course about OWASp top ten with Java examples, so if you are interested in the
688
+
689
+ 173
690
+ 00:13:48,000 --> 00:13:51,000
691
+ topic, you can refer to the separate course.
692
+
693
+ 174
694
+ 00:13:52,000 --> 00:13:53,000
695
+ That's it.
696
+
697
+ 175
698
+ 00:13:53,000 --> 00:13:54,000
699
+ Regarding this template.
700
+
701
+ 176
702
+ 00:13:55,000 --> 00:14:01,000
703
+ Of course you can add any other sections, but I believe that this template covers a lot of potential
704
+
705
+ 177
706
+ 00:14:01,000 --> 00:14:05,000
707
+ sections that you would like to keep in coding standards of your project.
708
+
709
+ 178
710
+ 00:14:06,000 --> 00:14:12,000
711
+ In case you will have any questions regarding this template, please do not hesitate to post your questions
712
+
713
+ 179
714
+ 00:14:12,000 --> 00:14:15,000
715
+ below the video and I will be happy to answer.
716
+
717
+ 180
718
+ 00:14:16,000 --> 00:14:17,000
719
+ Let's continue.
720
+
721
+ 181
722
+ 00:14:18,000 --> 00:14:22,000
723
+ Okay, so at this point of the lesson, we already know what coding standards are.
724
+
725
+ 182
726
+ 00:14:22,000 --> 00:14:25,000
727
+ We saw coding standards document example.
728
+
729
+ 183
730
+ 00:14:25,000 --> 00:14:32,000
731
+ And now let's discuss how we can enforce coding standards on our project and where to start with introduction
732
+
733
+ 184
734
+ 00:14:32,000 --> 00:14:34,000
735
+ of coding standards.
736
+
737
+ 185
738
+ 00:14:34,000 --> 00:14:41,000
739
+ Like we already discussed before, setting and enforcing coding standards is crucial for maintaining
740
+
741
+ 186
742
+ 00:14:41,000 --> 00:14:45,000
743
+ consistency, reliability, and maintainability across a software project.
744
+
745
+ 187
746
+ 00:14:46,000 --> 00:14:51,000
747
+ Let's review approach to establish and uphold coding standards efficiently.
748
+
749
+ 188
750
+ 00:14:51,000 --> 00:14:55,000
751
+ Step number one define coding standards.
752
+
753
+ 189
754
+ 00:14:55,000 --> 00:15:01,000
755
+ Begin by defining clear and comprehensive coding standards tailored to your project's requirements,
756
+
757
+ 190
758
+ 00:15:01,000 --> 00:15:04,000
759
+ technologies, and team preferences.
760
+
761
+ 191
762
+ 00:15:04,000 --> 00:15:10,000
763
+ Consider aspects such as naming conventions, formatting guidelines, comments, documentation, error
764
+
765
+ 192
766
+ 00:15:10,000 --> 00:15:16,000
767
+ handling, testing practices, code structure, performance considerations, security measures, and
768
+
769
+ 193
770
+ 00:15:16,000 --> 00:15:18,000
771
+ version control practices.
772
+
773
+ 194
774
+ 00:15:18,000 --> 00:15:21,000
775
+ At least everything what we have reviewed in my example.
776
+
777
+ 195
778
+ 00:15:22,000 --> 00:15:29,000
779
+ Step number two document Standards documents the coding standards in a centralized location such as
780
+
781
+ 196
782
+ 00:15:29,000 --> 00:15:35,000
783
+ conference page, a Readme file in your version control repository, or a dedicated document in your
784
+
785
+ 197
786
+ 00:15:35,000 --> 00:15:36,000
787
+ project management system.
788
+
789
+ 198
790
+ 00:15:36,000 --> 00:15:42,000
791
+ Ensure that all team members have access to and are familiar with the coding standards.
792
+
793
+ 199
794
+ 00:15:42,000 --> 00:15:43,000
795
+ Documentation.
796
+
797
+ 200
798
+ 00:15:44,000 --> 00:15:48,000
799
+ Step number three training and onboarding.
800
+
801
+ 201
802
+ 00:15:48,000 --> 00:15:55,000
803
+ Provide training and onboarding sessions for new team members to familiarize them with the coding standards.
804
+
805
+ 202
806
+ 00:15:56,000 --> 00:16:03,000
807
+ Emphasize the importance of adhering to the standards to maintain code quality and facilitate collaboration.
808
+
809
+ 203
810
+ 00:16:04,000 --> 00:16:07,000
811
+ The next step is called reviews.
812
+
813
+ 204
814
+ 00:16:07,000 --> 00:16:15,000
815
+ Incorporate code reviews into your development process as a means of enforcing coding standards require
816
+
817
+ 205
818
+ 00:16:15,000 --> 00:16:24,000
819
+ all changes to undergo peer review before being merged into the main code base during code reviews ensures
820
+
821
+ 206
822
+ 00:16:24,000 --> 00:16:30,000
823
+ that reviewers check for adherence to coding standards, in addition to functional correctness and efficiency.
824
+
825
+ 207
826
+ 00:16:31,000 --> 00:16:38,000
827
+ That's why it is super important to make code reviewers be aware about all the details of coding standards
828
+
829
+ 208
830
+ 00:16:39,000 --> 00:16:40,000
831
+ that would be easy to make.
832
+
833
+ 209
834
+ 00:16:40,000 --> 00:16:46,000
835
+ If potential code reviewers are involved in the development of coding standards on your project.
836
+
837
+ 210
838
+ 00:16:46,000 --> 00:16:54,000
839
+ In this way, you can be sure that your expectations are aligned and you are all on the same page regarding
840
+
841
+ 211
842
+ 00:16:54,000 --> 00:16:55,000
843
+ coding standards.
844
+
845
+ 212
846
+ 00:16:56,000 --> 00:17:04,000
847
+ The next thing to remember is automated tools utilize automated tools and linters to enforce coding
848
+
849
+ 213
850
+ 00:17:04,000 --> 00:17:04,000
851
+ standards.
852
+
853
+ 214
854
+ 00:17:04,000 --> 00:17:13,000
855
+ Consistently integrate tools such as Checkstyle, PMD, find box, ESLint or Pylint into your build
856
+
857
+ 215
858
+ 00:17:13,000 --> 00:17:19,000
859
+ process or IDE to automatically detect and flag violations of coding standards.
860
+
861
+ 216
862
+ 00:17:20,000 --> 00:17:25,000
863
+ Configure these tools according to your defined coding standards to ensure alignment.
864
+
865
+ 217
866
+ 00:17:26,000 --> 00:17:28,000
867
+ Continuous integration.
868
+
869
+ 218
870
+ 00:17:28,000 --> 00:17:35,000
871
+ Integrate coding standards checks into your CI CD pipeline to enforce standards automatically with each
872
+
873
+ 219
874
+ 00:17:35,000 --> 00:17:36,000
875
+ code change.
876
+
877
+ 220
878
+ 00:17:37,000 --> 00:17:43,000
879
+ Set up CI jobs to run static code analysis and linting tools as part of the build process.
880
+
881
+ 221
882
+ 00:17:44,000 --> 00:17:48,000
883
+ Fails the build if any coding standards violations are detected.
884
+
885
+ 222
886
+ 00:17:48,000 --> 00:17:51,000
887
+ Encouraging developers to address them promptly.
888
+
889
+ 223
890
+ 00:17:52,000 --> 00:17:54,000
891
+ Feedback and iteration.
892
+
893
+ 224
894
+ 00:17:54,000 --> 00:18:00,000
895
+ Gather feedback from team members on the effectiveness of the coding standards and their enforcement
896
+
897
+ 225
898
+ 00:18:00,000 --> 00:18:01,000
899
+ mechanisms.
900
+
901
+ 226
902
+ 00:18:01,000 --> 00:18:07,000
903
+ Regularly review and update the coding standards documentation based on lessons learned.
904
+
905
+ 227
906
+ 00:18:07,000 --> 00:18:10,000
907
+ Changes in technology or evolving best practices.
908
+
909
+ 228
910
+ 00:18:11,000 --> 00:18:17,000
911
+ Continuously refine the enforcement process to strike the right balance between maintaining code quality
912
+
913
+ 229
914
+ 00:18:17,000 --> 00:18:19,000
915
+ and developer productivity.
916
+
917
+ 230
918
+ 00:18:20,000 --> 00:18:22,000
919
+ Lead by example.
920
+
921
+ 231
922
+ 00:18:22,000 --> 00:18:23,000
923
+ Lead by example.
924
+
925
+ 232
926
+ 00:18:23,000 --> 00:18:25,000
927
+ As a senior developer or team.
928
+
929
+ 233
930
+ 00:18:25,000 --> 00:18:31,000
931
+ Lead by consistently adhering to coding standards in your own code contributions.
932
+
933
+ 234
934
+ 00:18:31,000 --> 00:18:38,000
935
+ Encourage and mentor junior developers to follow coding standards, reinforcing the importance of coding
936
+
937
+ 235
938
+ 00:18:38,000 --> 00:18:41,000
939
+ standards through your actions.
940
+
941
+ 236
942
+ 00:18:42,000 --> 00:18:48,000
943
+ By following these steps and integrating coding standards into your development workflow, you can ensure
944
+
945
+ 237
946
+ 00:18:48,000 --> 00:18:56,000
947
+ that your team produces high quality code that is consistent, maintainable, and conducive to collaboration.
948
+
949
+ 238
950
+ 00:18:56,000 --> 00:19:00,000
951
+ What you can do to ensure code quality and consistency.
952
+
953
+ 239
954
+ 00:19:00,000 --> 00:19:06,000
955
+ Ensuring code quality and consistency is essential for long term maintainability and reliability of
956
+
957
+ 240
958
+ 00:19:06,000 --> 00:19:08,000
959
+ a software project.
960
+
961
+ 241
962
+ 00:19:08,000 --> 00:19:12,000
963
+ Some of the key strategies to achieve this we already reviewed.
964
+
965
+ 242
966
+ 00:19:12,000 --> 00:19:13,000
967
+ They are.
968
+
969
+ 243
970
+ 00:19:13,000 --> 00:19:14,000
971
+ Code reviews.
972
+
973
+ 244
974
+ 00:19:14,000 --> 00:19:15,000
975
+ Automated testing.
976
+
977
+ 245
978
+ 00:19:15,000 --> 00:19:22,000
979
+ Static code analysis tools, code linters, continuous integration documentation, introduction of coding
980
+
981
+ 246
982
+ 00:19:22,000 --> 00:19:23,000
983
+ standards and trainings.
984
+
985
+ 247
986
+ 00:19:24,000 --> 00:19:29,000
987
+ We review these practices and all of them will help you to ensure code quality and consistency.
988
+
989
+ 248
990
+ 00:19:29,000 --> 00:19:33,000
991
+ But besides them, I would like to mention two more strategies.
992
+
993
+ 249
994
+ 00:19:33,000 --> 00:19:37,000
995
+ They are refactoring and peer collaboration.
996
+
997
+ 250
998
+ 00:19:37,000 --> 00:19:39,000
999
+ Refactoring.
1000
+
1001
+ 251
1002
+ 00:19:39,000 --> 00:19:44,000
1003
+ Regularly refactor the code to improve readability, maintainability and performance.
1004
+
1005
+ 252
1006
+ 00:19:44,000 --> 00:19:51,000
1007
+ Refactoring eliminates code smells, reduces technical debt, and aligns code with a woven requirements
1008
+
1009
+ 253
1010
+ 00:19:51,000 --> 00:19:52,000
1011
+ and best practices.
1012
+
1013
+ 254
1014
+ 00:19:53,000 --> 00:20:00,000
1015
+ Peer collaboration foster a culture of collaboration and knowledge sharing among team members.
1016
+
1017
+ 255
1018
+ 00:20:00,000 --> 00:20:06,000
1019
+ Encourage open communication, pair programming, and mentoring to leverage collective expertise and
1020
+
1021
+ 256
1022
+ 00:20:06,000 --> 00:20:09,000
1023
+ ensure that code quality and consistency are upheld.
1024
+
1025
+ 257
1026
+ 00:20:10,000 --> 00:20:16,000
1027
+ By incorporating these practices into your development process, you can maintain high code quality,
1028
+
1029
+ 258
1030
+ 00:20:16,000 --> 00:20:22,000
1031
+ consistency, and reliability throughout the life cycle of your software project.
1032
+
1033
+ 259
1034
+ 00:20:22,000 --> 00:20:24,000
1035
+ For different programming languages.
1036
+
1037
+ 260
1038
+ 00:20:24,000 --> 00:20:26,000
1039
+ There are different coding standards.
1040
+
1041
+ 261
1042
+ 00:20:27,000 --> 00:20:33,000
1043
+ Of course, it is not possible to cover all coding standards for all programming languages in scope
1044
+
1045
+ 262
1046
+ 00:20:33,000 --> 00:20:39,000
1047
+ of one lesson, but let's try to cover at least some heat points for some programming languages.
1048
+
1049
+ 263
1050
+ 00:20:40,000 --> 00:20:45,000
1051
+ This will help you to have general awareness about coding standards in different programming languages.
1052
+
1053
+ 264
1054
+ 00:20:46,000 --> 00:20:52,000
1055
+ And in case you would have any questions or clarifications regarding other programming languages, please
1056
+
1057
+ 265
1058
+ 00:20:52,000 --> 00:20:55,000
1059
+ Asking Questions section below the video.
1060
+
1061
+ 266
1062
+ 00:20:55,000 --> 00:21:00,000
1063
+ Here are some common coding standards and best practices for different programming languages.
1064
+
1065
+ 267
1066
+ 00:21:01,000 --> 00:21:07,000
1067
+ For Java follows the Java naming conventions for classes, methods, variables, and packages.
1068
+
1069
+ 268
1070
+ 00:21:08,000 --> 00:21:13,000
1071
+ Use camel case for method names and variables, and Pascal case for class names.
1072
+
1073
+ 269
1074
+ 00:21:14,000 --> 00:21:17,000
1075
+ Limit line lengths to 120 characters.
1076
+
1077
+ 270
1078
+ 00:21:18,000 --> 00:21:22,000
1079
+ Use Javadoc commands to document classes, methods, and variables.
1080
+
1081
+ 271
1082
+ 00:21:22,000 --> 00:21:27,000
1083
+ Use try catch blocks for error handling and provide meaningful error messages.
1084
+
1085
+ 272
1086
+ 00:21:28,000 --> 00:21:34,000
1087
+ Follow the principles of object oriented programming such as encapsulation, inheritance, and polymorphism.
1088
+
1089
+ 273
1090
+ 00:21:35,000 --> 00:21:39,000
1091
+ Use enums for representing fixed sets of constants.
1092
+
1093
+ 274
1094
+ 00:21:39,000 --> 00:21:46,000
1095
+ Python programming language follows a pep8 style guide for Python code.
1096
+
1097
+ 275
1098
+ 00:21:47,000 --> 00:21:51,000
1099
+ Use snake case for variable names and function names.
1100
+
1101
+ 276
1102
+ 00:21:52,000 --> 00:21:55,000
1103
+ Limit line lengths to 79 characters.
1104
+
1105
+ 277
1106
+ 00:21:55,000 --> 00:22:00,000
1107
+ Use docstrings to document modules, classes, functions and methods.
1108
+
1109
+ 278
1110
+ 00:22:00,000 --> 00:22:07,000
1111
+ Use list comprehensions and generator expressions for concise and readable code.
1112
+
1113
+ 279
1114
+ 00:22:08,000 --> 00:22:12,000
1115
+ Prefer built in functions and modules over custom implementations.
1116
+
1117
+ 280
1118
+ 00:22:13,000 --> 00:22:20,000
1119
+ Use virtual environments like for example, virtualenv or venv for dependency management.
1120
+
1121
+ 281
1122
+ 00:22:21,000 --> 00:22:22,000
1123
+ For JavaScript language.
1124
+
1125
+ 282
1126
+ 00:22:23,000 --> 00:22:28,000
1127
+ Follow the Airbnb JavaScript Style Guide or the Google JavaScript Style Guide.
1128
+
1129
+ 283
1130
+ 00:22:28,000 --> 00:22:32,000
1131
+ Use camel Case for variable names and function names.
1132
+
1133
+ 284
1134
+ 00:22:32,000 --> 00:22:34,000
1135
+ Use Pascalcase for class names.
1136
+
1137
+ 285
1138
+ 00:22:35,000 --> 00:22:41,000
1139
+ Use ESLint or Jshint for static code analysis and enforcing coding standards.
1140
+
1141
+ 286
1142
+ 00:22:42,000 --> 00:22:47,000
1143
+ Use async await for asynchronous programming instead of callbacks or promises.
1144
+
1145
+ 287
1146
+ 00:22:48,000 --> 00:22:53,000
1147
+ Minimize the use of global variables and avoid polluting the global namespace.
1148
+
1149
+ 288
1150
+ 00:22:54,000 --> 00:22:58,000
1151
+ Use strict mode to enforce stricter parsing and error handling.
1152
+
1153
+ 289
1154
+ 00:22:59,000 --> 00:23:08,000
1155
+ For C sharp language follows a Microsoft C sharp coding conventions use Pascal case for class names,
1156
+
1157
+ 290
1158
+ 00:23:08,000 --> 00:23:10,000
1159
+ method names and property names.
1160
+
1161
+ 291
1162
+ 00:23:10,000 --> 00:23:14,000
1163
+ Use camel case for parameter names and local variable names.
1164
+
1165
+ 292
1166
+ 00:23:14,000 --> 00:23:17,000
1167
+ Limit line length to 100 characters.
1168
+
1169
+ 293
1170
+ 00:23:18,000 --> 00:23:24,000
1171
+ Use XML documentation comments to document classes, methods and properties.
1172
+
1173
+ 294
1174
+ 00:23:24,000 --> 00:23:29,000
1175
+ Use try catch blocks for error handling and provide meaningful error messages.
1176
+
1177
+ 295
1178
+ 00:23:29,000 --> 00:23:33,000
1179
+ Prefer Linq for querying collections instead of loops.
1180
+
1181
+ 296
1182
+ 00:23:34,000 --> 00:23:36,000
1183
+ For rabbit programming language.
1184
+
1185
+ 297
1186
+ 00:23:36,000 --> 00:23:38,000
1187
+ Follow the rabbit style guide.
1188
+
1189
+ 298
1190
+ 00:23:38,000 --> 00:23:41,000
1191
+ Use snake Case for method names and variable names.
1192
+
1193
+ 299
1194
+ 00:23:41,000 --> 00:23:44,000
1195
+ Use camel case for class names and module names.
1196
+
1197
+ 300
1198
+ 00:23:44,000 --> 00:23:47,000
1199
+ Limit the line lengths to 80 characters.
1200
+
1201
+ 301
1202
+ 00:23:47,000 --> 00:23:53,000
1203
+ Use frozen string literal true to ensure that string literals are immutable.
1204
+
1205
+ 302
1206
+ 00:23:54,000 --> 00:23:57,000
1207
+ Use Rubygems for dependency management.
1208
+
1209
+ 303
1210
+ 00:23:58,000 --> 00:24:04,000
1211
+ Follow the principle of least surprise and write code that is easy to understand and predictable.
1212
+
1213
+ 304
1214
+ 00:24:04,000 --> 00:24:08,000
1215
+ These are just some general guidelines for each programming language.
1216
+
1217
+ 305
1218
+ 00:24:09,000 --> 00:24:15,000
1219
+ It's essential to consult the official documentation and community standards for each language and framework
1220
+
1221
+ 306
1222
+ 00:24:15,000 --> 00:24:17,000
1223
+ you use in your project.
1224
+
1225
+ 307
1226
+ 00:24:17,000 --> 00:24:23,000
1227
+ Additionally, coding standards may vary depending on the specific requirements and conventions of your
1228
+
1229
+ 308
1230
+ 00:24:23,000 --> 00:24:25,000
1231
+ organization or team.
1232
+
1233
+ 309
1234
+ 00:24:26,000 --> 00:24:27,000
1235
+ That's all.
1236
+
1237
+ 310
1238
+ 00:24:27,000 --> 00:24:32,000
1239
+ What I wanted to share with you in this lesson, let's recap what we have learned today.
1240
+
1241
+ 311
1242
+ 00:24:32,000 --> 00:24:36,000
1243
+ Today we learned what coding standards are and why we need them.
1244
+
1245
+ 312
1246
+ 00:24:36,000 --> 00:24:43,000
1247
+ We reviewed the example of coding standards that potentially you can reuse on your project, and tailor
1248
+
1249
+ 313
1250
+ 00:24:43,000 --> 00:24:45,000
1251
+ template provided to your project needs.
1252
+
1253
+ 314
1254
+ 00:24:46,000 --> 00:24:50,000
1255
+ After that, we discussed how to enforce coding standards in your team.
1256
+
1257
+ 315
1258
+ 00:24:50,000 --> 00:24:54,000
1259
+ We reviewed key strategies that are supposed to help you.
1260
+
1261
+ 316
1262
+ 00:24:55,000 --> 00:24:59,000
1263
+ Also, we learned how to ensure code quality and consistency.
1264
+
1265
+ 317
1266
+ 00:24:59,000 --> 00:25:04,000
1267
+ And at the end of the lesson we reviewed coding standards for different programming languages.
1268
+
1269
+ 318
1270
+ 00:25:05,000 --> 00:25:06,000
1271
+ That's it for this lesson.
1272
+
1273
+ 319
1274
+ 00:25:06,000 --> 00:25:08,000
1275
+ Thanks a lot for your attention.
1276
+
1277
+ 320
1278
+ 00:25:08,000 --> 00:25:11,000
1279
+ Have a great day and see you in the next lesson.
1280
+
109 - Advanced Code Review Strategies/002 Coding-Standards-and-Guidelines.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://drive.google.com/file/d/1q0-V9_574YNKpCB9W_UZm9F8Vk5sYZuR/view?usp=sharing
109 - Advanced Code Review Strategies/003 Provide Feedback like a Pro_en.srt ADDED
@@ -0,0 +1,1032 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello team!
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ In this lesson I will teach you how to provide feedback as a true professional.
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:17,000
11
+ After today's lesson, you will improve your soft skills and you will find techniques that will help
12
+
13
+ 4
14
+ 00:00:17,000 --> 00:00:22,000
15
+ you to build more efficient code review process and better collaboration inside the team.
16
+
17
+ 5
18
+ 00:00:23,000 --> 00:00:29,000
19
+ We will start from learning what constructive criticism is, why it is important and what constructive
20
+
21
+ 6
22
+ 00:00:29,000 --> 00:00:31,000
23
+ criticism techniques are.
24
+
25
+ 7
26
+ 00:00:32,000 --> 00:00:38,000
27
+ I will share with you advices about how to build effective communication during code review process.
28
+
29
+ 8
30
+ 00:00:38,000 --> 00:00:43,000
31
+ I will teach you how to provide fair and objective feedback and to not gain new enemies.
32
+
33
+ 9
34
+ 00:00:44,000 --> 00:00:50,000
35
+ We will talk about creation of a positive code review, culture building trust among team members and
36
+
37
+ 10
38
+ 00:00:50,000 --> 00:00:52,000
39
+ creation of collaborative code review process.
40
+
41
+ 11
42
+ 00:00:53,000 --> 00:00:54,000
43
+ Let's start our lesson.
44
+
45
+ 12
46
+ 00:00:55,000 --> 00:00:59,000
47
+ Let's start the lesson from learning constructive criticism techniques.
48
+
49
+ 13
50
+ 00:00:59,000 --> 00:01:01,000
51
+ What is constructive criticism?
52
+
53
+ 14
54
+ 00:01:02,000 --> 00:01:08,000
55
+ Constructive criticism is a process of providing feedback in a helpful and supportive manner, with
56
+
57
+ 15
58
+ 00:01:08,000 --> 00:01:13,000
59
+ the intention of helping someone in improving their performance, behavior or work.
60
+
61
+ 16
62
+ 00:01:14,000 --> 00:01:21,000
63
+ It involves identifying areas for improvement, while also offering practical suggestions or solutions
64
+
65
+ 17
66
+ 00:01:21,000 --> 00:01:26,000
67
+ for how the individual can enhance their skills or address any shortcomings.
68
+
69
+ 18
70
+ 00:01:27,000 --> 00:01:33,000
71
+ The goal of constructive criticism is to facilitate the growth and development, rather than simply
72
+
73
+ 19
74
+ 00:01:33,000 --> 00:01:35,000
75
+ pointing out faults or shortcomings.
76
+
77
+ 20
78
+ 00:01:35,000 --> 00:01:42,000
79
+ It typically involves a respectful and empathetic approach, focusing on specific behaviors or actions,
80
+
81
+ 21
82
+ 00:01:42,000 --> 00:01:46,000
83
+ rather than attacking the individual's character or personality.
84
+
85
+ 22
86
+ 00:01:47,000 --> 00:01:54,000
87
+ Overall, constructive criticism aims to empower individuals to recognize their strengths and weaknesses
88
+
89
+ 23
90
+ 00:01:54,000 --> 00:01:58,000
91
+ and take steps to enhance their performance or achieve their goals.
92
+
93
+ 24
94
+ 00:01:58,000 --> 00:02:02,000
95
+ While learning constructive criticism techniques is important.
96
+
97
+ 25
98
+ 00:02:02,000 --> 00:02:08,000
99
+ This is super important because being a code reviewer, you need to help your team to stay efficient.
100
+
101
+ 26
102
+ 00:02:08,000 --> 00:02:11,000
103
+ I mean, you need to be able to support code quality level.
104
+
105
+ 27
106
+ 00:02:11,000 --> 00:02:18,000
107
+ On the defined level, you need to be able to foster coding standards and best practices of code design,
108
+
109
+ 28
110
+ 00:02:18,000 --> 00:02:22,000
111
+ and at the same time, keep your team members motivated.
112
+
113
+ 29
114
+ 00:02:22,000 --> 00:02:29,000
115
+ Because we are all people and sometimes we can take some comments as a personal thing, and this can
116
+
117
+ 30
118
+ 00:02:29,000 --> 00:02:33,000
119
+ decrease our motivation to do our work faster and better.
120
+
121
+ 31
122
+ 00:02:33,000 --> 00:02:37,000
123
+ That's why learning constructive criticism techniques is super important.
124
+
125
+ 32
126
+ 00:02:38,000 --> 00:02:42,000
127
+ Now we know what constructive criticism is and why it is important.
128
+
129
+ 33
130
+ 00:02:43,000 --> 00:02:47,000
131
+ Let's now learn constructive criticism techniques itself.
132
+
133
+ 34
134
+ 00:02:47,000 --> 00:02:50,000
135
+ The first point to remember be specific.
136
+
137
+ 35
138
+ 00:02:50,000 --> 00:02:56,000
139
+ Instead of making vague statements, provide specific examples to illustrate your points.
140
+
141
+ 36
142
+ 00:02:57,000 --> 00:03:00,000
143
+ Focus on behavior, not personality.
144
+
145
+ 37
146
+ 00:03:00,000 --> 00:03:06,000
147
+ Critical actions or behaviors, rather than attacking someone's character or personality.
148
+
149
+ 38
150
+ 00:03:07,000 --> 00:03:09,000
151
+ Offer suggestions for improvement.
152
+
153
+ 39
154
+ 00:03:09,000 --> 00:03:11,000
155
+ Don't just point out flaws.
156
+
157
+ 40
158
+ 00:03:11,000 --> 00:03:14,000
159
+ Provide a constructive suggestions on how to improve.
160
+
161
+ 41
162
+ 00:03:14,000 --> 00:03:18,000
163
+ Always remember that you are not here to blame someone.
164
+
165
+ 42
166
+ 00:03:18,000 --> 00:03:21,000
167
+ You are here to help someone to become better.
168
+
169
+ 43
170
+ 00:03:21,000 --> 00:03:24,000
171
+ You are not the person who claiming a problem.
172
+
173
+ 44
174
+ 00:03:24,000 --> 00:03:27,000
175
+ You are part of the solution of the problem.
176
+
177
+ 45
178
+ 00:03:27,000 --> 00:03:29,000
179
+ Use I statements.
180
+
181
+ 46
182
+ 00:03:30,000 --> 00:03:36,000
183
+ Express your thoughts and feelings using I statements to take ownership of your perspective.
184
+
185
+ 47
186
+ 00:03:36,000 --> 00:03:40,000
187
+ For example, I feel that or I think that.
188
+
189
+ 48
190
+ 00:03:41,000 --> 00:03:44,000
191
+ Balanced, positive and negative feedback.
192
+
193
+ 49
194
+ 00:03:44,000 --> 00:03:50,000
195
+ Highlight strengths along with areas for improvement to maintain a balanced perspective.
196
+
197
+ 50
198
+ 00:03:51,000 --> 00:03:58,000
199
+ Be timely, provide feedback in a timely manner so that it is relevant to the situation and can be acted
200
+
201
+ 51
202
+ 00:03:58,000 --> 00:04:00,000
203
+ upon promptly.
204
+
205
+ 52
206
+ 00:04:00,000 --> 00:04:02,000
207
+ Maintain a supportive tone.
208
+
209
+ 53
210
+ 00:04:02,000 --> 00:04:10,000
211
+ Use a supportive and encouraging tone to show that your intention is to help rather than criticise.
212
+
213
+ 54
214
+ 00:04:10,000 --> 00:04:12,000
215
+ Listen actively.
216
+
217
+ 55
218
+ 00:04:12,000 --> 00:04:19,000
219
+ Allow the other person to express their thoughts and feelings and listen actively to understand their
220
+
221
+ 56
222
+ 00:04:19,000 --> 00:04:20,000
223
+ perspective.
224
+
225
+ 57
226
+ 00:04:21,000 --> 00:04:23,000
227
+ Focus on the issue, not the person.
228
+
229
+ 58
230
+ 00:04:24,000 --> 00:04:30,000
231
+ Keep the discussion centered on the specific issue at hand, rather than making personal attacks.
232
+
233
+ 59
234
+ 00:04:30,000 --> 00:04:32,000
235
+ Encourage dialogue.
236
+
237
+ 60
238
+ 00:04:32,000 --> 00:04:39,000
239
+ Create an open and constructive dialogue where both parties can share their perspectives and work towards
240
+
241
+ 61
242
+ 00:04:39,000 --> 00:04:41,000
243
+ a solution collaboratively.
244
+
245
+ 62
246
+ 00:04:42,000 --> 00:04:47,000
247
+ Remember, the goal of constructive criticism is to help the individual grow and improve.
248
+
249
+ 63
250
+ 00:04:47,000 --> 00:04:54,000
251
+ So approach the conversation with empathy and the desire to support their development.
252
+
253
+ 64
254
+ 00:04:54,000 --> 00:05:00,000
255
+ And now let me share with you some advices of effective communication during code reviews.
256
+
257
+ 65
258
+ 00:05:00,000 --> 00:05:06,000
259
+ Effective communication during code reviews is crucial for ensuring high quality code and fostering
260
+
261
+ 66
262
+ 00:05:06,000 --> 00:05:09,000
263
+ collaboration within a development team.
264
+
265
+ 67
266
+ 00:05:09,000 --> 00:05:13,000
267
+ Let's review some tips for effective communication during code reviews.
268
+
269
+ 68
270
+ 00:05:14,000 --> 00:05:15,000
271
+ Be respectful.
272
+
273
+ 69
274
+ 00:05:15,000 --> 00:05:21,000
275
+ Approach code reviews with a respectful attitude towards your colleague's work and efforts.
276
+
277
+ 70
278
+ 00:05:21,000 --> 00:05:23,000
279
+ Provide clear feedback.
280
+
281
+ 71
282
+ 00:05:23,000 --> 00:05:29,000
283
+ Clearly articulate your feedback, focusing on specific issues or areas for improvement.
284
+
285
+ 72
286
+ 00:05:30,000 --> 00:05:31,000
287
+ Use a positive tone.
288
+
289
+ 73
290
+ 00:05:32,000 --> 00:05:37,000
291
+ Use constructive language and a positive tone to encourage collaboration and avoid demotivating team
292
+
293
+ 74
294
+ 00:05:37,000 --> 00:05:38,000
295
+ members.
296
+
297
+ 75
298
+ 00:05:39,000 --> 00:05:41,000
299
+ As I already mentioned, be specific.
300
+
301
+ 76
302
+ 00:05:41,000 --> 00:05:48,000
303
+ Provide specific commands and suggestions referencing relevant lines of code or sections of the code
304
+
305
+ 77
306
+ 00:05:48,000 --> 00:05:48,000
307
+ base.
308
+
309
+ 78
310
+ 00:05:49,000 --> 00:05:52,000
311
+ Focus on the code, not the person.
312
+
313
+ 79
314
+ 00:05:52,000 --> 00:05:57,000
315
+ Keep feedback focused on the code itself rather than criticizing the developer personally.
316
+
317
+ 80
318
+ 00:05:58,000 --> 00:05:59,000
319
+ Encourage discussion.
320
+
321
+ 81
322
+ 00:05:59,000 --> 00:06:04,000
323
+ Invite the developer to discuss any questions or concerns they have about the feedback.
324
+
325
+ 82
326
+ 00:06:04,000 --> 00:06:07,000
327
+ Fostering open communication and collaboration.
328
+
329
+ 83
330
+ 00:06:08,000 --> 00:06:11,000
331
+ Offer solutions instead of just pointing out problems.
332
+
333
+ 84
334
+ 00:06:11,000 --> 00:06:15,000
335
+ Offer suggestions or alternative approaches for addressing them.
336
+
337
+ 85
338
+ 00:06:16,000 --> 00:06:20,000
339
+ Do not force other people to guess your thoughts.
340
+
341
+ 86
342
+ 00:06:20,000 --> 00:06:22,000
343
+ This is not constructive approach.
344
+
345
+ 87
346
+ 00:06:23,000 --> 00:06:24,000
347
+ Prioritize feedback.
348
+
349
+ 88
350
+ 00:06:24,000 --> 00:06:30,000
351
+ Focus on the most critical issues first, addressing them before moving on to the less significant concerns.
352
+
353
+ 89
354
+ 00:06:31,000 --> 00:06:33,000
355
+ Acknowledge good work.
356
+
357
+ 90
358
+ 00:06:33,000 --> 00:06:39,000
359
+ Don't forget to acknowledge well written code or good practices that you observe during the review.
360
+
361
+ 91
362
+ 00:06:40,000 --> 00:06:41,000
363
+ Follow up.
364
+
365
+ 92
366
+ 00:06:42,000 --> 00:06:47,000
367
+ After providing feedback, follow up with the developer to ensure that they understand the comments
368
+
369
+ 93
370
+ 00:06:47,000 --> 00:06:51,000
371
+ and suggestions and to see if they need any further assistance.
372
+
373
+ 94
374
+ 00:06:52,000 --> 00:06:58,000
375
+ By following these steps, you can ensure that code reviews are conducted effectively, leading to improved
376
+
377
+ 95
378
+ 00:06:58,000 --> 00:07:02,000
379
+ code quality, enhance collaboration, and a positive team dynamic.
380
+
381
+ 96
382
+ 00:07:03,000 --> 00:07:11,000
383
+ So now in these rules, let's try to make a summary of how to provide fair and objective feedback and
384
+
385
+ 97
386
+ 00:07:11,000 --> 00:07:12,000
387
+ to not gain new enemies.
388
+
389
+ 98
390
+ 00:07:13,000 --> 00:07:19,000
391
+ Providing fair and objective feedback is essential for fostering trust, growth and improvement within
392
+
393
+ 99
394
+ 00:07:19,000 --> 00:07:21,000
395
+ a team or organization.
396
+
397
+ 100
398
+ 00:07:22,000 --> 00:07:26,000
399
+ Let's review some tips for delivering feedback in a fair and objective manner.
400
+
401
+ 101
402
+ 00:07:27,000 --> 00:07:29,000
403
+ Focus on observations.
404
+
405
+ 102
406
+ 00:07:29,000 --> 00:07:35,000
407
+ Base your feedback on specific observations and facts rather than assumptions or personal opinions.
408
+
409
+ 103
410
+ 00:07:36,000 --> 00:07:37,000
411
+ Stay neutral.
412
+
413
+ 104
414
+ 00:07:37,000 --> 00:07:44,000
415
+ Maintain a neutral tone and avoid letting personal biases or emotions influence your feedback.
416
+
417
+ 105
418
+ 00:07:45,000 --> 00:07:47,000
419
+ Use quantifiable metrics.
420
+
421
+ 106
422
+ 00:07:47,000 --> 00:07:54,000
423
+ Where possible, use quantifiable metrics or data to support your feedback and make it more objective.
424
+
425
+ 107
426
+ 00:07:54,000 --> 00:08:02,000
427
+ Instead of putting comments and the pull requests something like why you don't write unit tests at all?
428
+
429
+ 108
430
+ 00:08:02,000 --> 00:08:05,000
431
+ Be specific and leave such comments.
432
+
433
+ 109
434
+ 00:08:05,000 --> 00:08:11,000
435
+ For example, after your pull request, our line test code coverage dropped by 2%.
436
+
437
+ 110
438
+ 00:08:11,000 --> 00:08:13,000
439
+ We need to improve this.
440
+
441
+ 111
442
+ 00:08:13,000 --> 00:08:16,000
443
+ As you can see, this is completely different approach.
444
+
445
+ 112
446
+ 00:08:17,000 --> 00:08:18,000
447
+ Provide context.
448
+
449
+ 113
450
+ 00:08:18,000 --> 00:08:25,000
451
+ Offer context of your feedback by explaining why certain behaviors or outcomes are important and how
452
+
453
+ 114
454
+ 00:08:25,000 --> 00:08:28,000
455
+ they align with organizational goals or standards.
456
+
457
+ 115
458
+ 00:08:29,000 --> 00:08:37,000
459
+ Be consistent applies the same standards and criteria to all team members when providing feedback to
460
+
461
+ 116
462
+ 00:08:37,000 --> 00:08:39,000
463
+ ensure fairness and consistency.
464
+
465
+ 117
466
+ 00:08:40,000 --> 00:08:42,000
467
+ Acknowledge effort and improvement.
468
+
469
+ 118
470
+ 00:08:42,000 --> 00:08:50,000
471
+ Recognize and acknowledge the efforts made by individuals, even if the outcomes are not yet perfect.
472
+
473
+ 119
474
+ 00:08:50,000 --> 00:08:54,000
475
+ Encourage continued improvement by highlighting progress over time.
476
+
477
+ 120
478
+ 00:08:55,000 --> 00:08:57,000
479
+ Offer specific examples.
480
+
481
+ 121
482
+ 00:08:57,000 --> 00:09:05,000
483
+ Support your feedback with specific examples or instances to illustrate your points and make them more
484
+
485
+ 122
486
+ 00:09:05,000 --> 00:09:06,000
487
+ tangible.
488
+
489
+ 123
490
+ 00:09:06,000 --> 00:09:09,000
491
+ Encourage self-reflection.
492
+
493
+ 124
494
+ 00:09:09,000 --> 00:09:16,000
495
+ Encourage individuals to reflect on their own performance and seek feedback from others to foster self-awareness
496
+
497
+ 125
498
+ 00:09:16,000 --> 00:09:18,000
499
+ and continuous learning.
500
+
501
+ 126
502
+ 00:09:19,000 --> 00:09:25,000
503
+ Focus on behavior, not personality, as this is the rules that I repeated multiple of times already
504
+
505
+ 127
506
+ 00:09:25,000 --> 00:09:32,000
507
+ during this lesson because it is important when providing feedback, focus on specific behaviors or
508
+
509
+ 128
510
+ 00:09:32,000 --> 00:09:37,000
511
+ actions rather than making judgments about a person's character or personality.
512
+
513
+ 129
514
+ 00:09:38,000 --> 00:09:40,000
515
+ Seek feedback yourself.
516
+
517
+ 130
518
+ 00:09:41,000 --> 00:09:47,000
519
+ Be open to receiving feedback from others, and use it to improve your own ability to provide fair and
520
+
521
+ 131
522
+ 00:09:47,000 --> 00:09:48,000
523
+ objective feedback.
524
+
525
+ 132
526
+ 00:09:49,000 --> 00:09:55,000
527
+ By following these tips, you can ensure that your feedback is fair, objective and constructive, helping
528
+
529
+ 133
530
+ 00:09:55,000 --> 00:10:01,000
531
+ individuals to grow and develop professionally while also contributing to a positive and supportive
532
+
533
+ 134
534
+ 00:10:01,000 --> 00:10:02,000
535
+ team environment.
536
+
537
+ 135
538
+ 00:10:03,000 --> 00:10:09,000
539
+ And now, let me share with you some recommendations about how to create a positive code review culture
540
+
541
+ 136
542
+ 00:10:09,000 --> 00:10:10,000
543
+ in your team.
544
+
545
+ 137
546
+ 00:10:11,000 --> 00:10:12,000
547
+ Creating a positive code review.
548
+
549
+ 138
550
+ 00:10:12,000 --> 00:10:19,000
551
+ Culture is essential for fostering collaboration, learning and continuous improvement within the development
552
+
553
+ 139
554
+ 00:10:19,000 --> 00:10:19,000
555
+ team.
556
+
557
+ 140
558
+ 00:10:20,000 --> 00:10:25,000
559
+ Let's review some strategies for building and maintaining a positive code review culture.
560
+
561
+ 141
562
+ 00:10:26,000 --> 00:10:28,000
563
+ Set clear expectations.
564
+
565
+ 142
566
+ 00:10:28,000 --> 00:10:35,000
567
+ Establish clear guidelines and expectations for code reviews, including the goals, process, and standards
568
+
569
+ 143
570
+ 00:10:35,000 --> 00:10:36,000
571
+ to be followed.
572
+
573
+ 144
574
+ 00:10:36,000 --> 00:10:38,000
575
+ Promote a growth mindset.
576
+
577
+ 145
578
+ 00:10:38,000 --> 00:10:45,000
579
+ Encourage a growth mindset within the team where feedback is viewed as an opportunity for learning and
580
+
581
+ 146
582
+ 00:10:45,000 --> 00:10:47,000
583
+ improvement rather than criticism.
584
+
585
+ 147
586
+ 00:10:48,000 --> 00:10:50,000
587
+ Lead by example.
588
+
589
+ 148
590
+ 00:10:50,000 --> 00:10:57,000
591
+ Set a positive example by providing constructive feedback, being open to receiving feedback and demonstrating
592
+
593
+ 149
594
+ 00:10:57,000 --> 00:10:59,000
595
+ a willingness to learn and grow.
596
+
597
+ 150
598
+ 00:11:00,000 --> 00:11:01,000
599
+ Create a safe environment.
600
+
601
+ 151
602
+ 00:11:02,000 --> 00:11:08,000
603
+ Foster a safe and supportive environment where team members feel comfortable sharing their code, asking
604
+
605
+ 152
606
+ 00:11:08,000 --> 00:11:12,000
607
+ questions and providing feedback without fear of judgement.
608
+
609
+ 153
610
+ 00:11:13,000 --> 00:11:14,000
611
+ Encourage collaboration.
612
+
613
+ 154
614
+ 00:11:15,000 --> 00:11:19,000
615
+ Emphasize the importance of collaboration and teamwork in code reviews.
616
+
617
+ 155
618
+ 00:11:19,000 --> 00:11:24,000
619
+ Encouraging developers to work together to solve problems and share knowledge.
620
+
621
+ 156
622
+ 00:11:25,000 --> 00:11:27,000
623
+ Provide training and support.
624
+
625
+ 157
626
+ 00:11:27,000 --> 00:11:34,000
627
+ Offer training and support to help team members develop their code review skills, including providing
628
+
629
+ 158
630
+ 00:11:34,000 --> 00:11:37,000
631
+ guidance on how to give and receive feedback effectively.
632
+
633
+ 159
634
+ 00:11:38,000 --> 00:11:40,000
635
+ Celebrate success.
636
+
637
+ 160
638
+ 00:11:40,000 --> 00:11:46,000
639
+ Recognize and celebrate the achievements and contributions of team members, including successful code
640
+
641
+ 161
642
+ 00:11:46,000 --> 00:11:48,000
643
+ reviews and improvements to the code base.
644
+
645
+ 162
646
+ 00:11:49,000 --> 00:11:56,000
647
+ In some companies, there can be motivational badges that you can send online to colleagues or any other
648
+
649
+ 163
650
+ 00:11:56,000 --> 00:11:57,000
651
+ form of appraisal.
652
+
653
+ 164
654
+ 00:11:58,000 --> 00:12:01,000
655
+ Regularly review and update processes.
656
+
657
+ 165
658
+ 00:12:02,000 --> 00:12:04,000
659
+ Regularly review and update your code.
660
+
661
+ 166
662
+ 00:12:04,000 --> 00:12:11,000
663
+ Review processes and guidelines based on feedback and lessons learned to ensure they remain effective
664
+
665
+ 167
666
+ 00:12:11,000 --> 00:12:12,000
667
+ and relevant.
668
+
669
+ 168
670
+ 00:12:12,000 --> 00:12:15,000
671
+ Encourage diverse perspectives.
672
+
673
+ 169
674
+ 00:12:15,000 --> 00:12:20,000
675
+ Encourage team members to offer diverse perspectives and viewpoints during code reviews.
676
+
677
+ 170
678
+ 00:12:20,000 --> 00:12:26,000
679
+ Recognizing the value of different experiences and backgrounds in improving code quality.
680
+
681
+ 171
682
+ 00:12:27,000 --> 00:12:29,000
683
+ Provide feedback channels.
684
+
685
+ 172
686
+ 00:12:29,000 --> 00:12:35,000
687
+ Establish clear channels for providing feedback on the code review process itself, allowing team members
688
+
689
+ 173
690
+ 00:12:35,000 --> 00:12:39,000
691
+ to share their thoughts, suggestions, and concerns openly.
692
+
693
+ 174
694
+ 00:12:40,000 --> 00:12:45,000
695
+ By implementing these strategies, you can create a positive code review culture where team members
696
+
697
+ 175
698
+ 00:12:45,000 --> 00:12:50,000
699
+ feel valued, supported and motivated to collaborate and improve continuously.
700
+
701
+ 176
702
+ 00:12:51,000 --> 00:12:57,000
703
+ Another important aspect of building an efficient team and fruitful collaboration during the code review
704
+
705
+ 177
706
+ 00:12:57,000 --> 00:13:00,000
707
+ process is a trust among team members.
708
+
709
+ 178
710
+ 00:13:00,000 --> 00:13:06,000
711
+ If you have this trust between people, then a lot of challenges will not even appear.
712
+
713
+ 179
714
+ 00:13:06,000 --> 00:13:11,000
715
+ Let me share with you my experience of how to build a trust among team members.
716
+
717
+ 180
718
+ 00:13:12,000 --> 00:13:18,000
719
+ Building trust among team members is essential for fostering collaboration, productivity and a positive
720
+
721
+ 181
722
+ 00:13:18,000 --> 00:13:19,000
723
+ work environment.
724
+
725
+ 182
726
+ 00:13:20,000 --> 00:13:23,000
727
+ Let's review some strategies for building trust within a team.
728
+
729
+ 183
730
+ 00:13:24,000 --> 00:13:27,000
731
+ Communicate openly and transparently.
732
+
733
+ 184
734
+ 00:13:27,000 --> 00:13:34,000
735
+ Foster open and transparent communication by sharing information, updates and feedback openly with
736
+
737
+ 185
738
+ 00:13:34,000 --> 00:13:35,000
739
+ team members.
740
+
741
+ 186
742
+ 00:13:35,000 --> 00:13:40,000
743
+ As I already mentioned, and this is very efficient rule lead by example.
744
+
745
+ 187
746
+ 00:13:40,000 --> 00:13:48,000
747
+ Demonstrate reliability through your actions and behavior such as keeping commitments, being honest,
748
+
749
+ 188
750
+ 00:13:48,000 --> 00:13:50,000
751
+ and respecting confidentiality.
752
+
753
+ 189
754
+ 00:13:51,000 --> 00:13:53,000
755
+ Show empathy and understanding.
756
+
757
+ 190
758
+ 00:13:54,000 --> 00:13:57,000
759
+ Take the time to listen actively to your team members.
760
+
761
+ 191
762
+ 00:13:57,000 --> 00:14:02,000
763
+ Show empathy and understand their perspectives, feelings, and concerns.
764
+
765
+ 192
766
+ 00:14:03,000 --> 00:14:03,000
767
+ Delegates.
768
+
769
+ 193
770
+ 00:14:03,000 --> 00:14:05,000
771
+ Responsibility.
772
+
773
+ 194
774
+ 00:14:05,000 --> 00:14:11,000
775
+ Delegate tasks and responsibilities to team members, empowering them to take ownership and demonstrate
776
+
777
+ 195
778
+ 00:14:11,000 --> 00:14:12,000
779
+ their capabilities.
780
+
781
+ 196
782
+ 00:14:13,000 --> 00:14:20,000
783
+ Encourage collaboration, create opportunities for collaboration and teamwork where team members can
784
+
785
+ 197
786
+ 00:14:20,000 --> 00:14:25,000
787
+ work together to solve problems, share ideas, and achieve common goals.
788
+
789
+ 198
790
+ 00:14:26,000 --> 00:14:27,000
791
+ Be reliable.
792
+
793
+ 199
794
+ 00:14:28,000 --> 00:14:34,000
795
+ Consistently deliver high quality work, meet deadlines, and fulfill your commitments to build trust
796
+
797
+ 200
798
+ 00:14:34,000 --> 00:14:36,000
799
+ and confidence among team members.
800
+
801
+ 201
802
+ 00:14:37,000 --> 00:14:40,000
803
+ Respect diversity and inclusion.
804
+
805
+ 202
806
+ 00:14:40,000 --> 00:14:46,000
807
+ Embrace diversity and inclusion within the team, respecting different perspectives, backgrounds and
808
+
809
+ 203
810
+ 00:14:46,000 --> 00:14:51,000
811
+ experiences, and creating a safe and inclusive environment for all.
812
+
813
+ 204
814
+ 00:14:52,000 --> 00:14:54,000
815
+ Provide support and feedback.
816
+
817
+ 205
818
+ 00:14:54,000 --> 00:15:01,000
819
+ Offer support, guidance and feedback to team members to help them grow, develop and improve their
820
+
821
+ 206
822
+ 00:15:01,000 --> 00:15:02,000
823
+ skills and capabilities.
824
+
825
+ 207
826
+ 00:15:03,000 --> 00:15:05,000
827
+ Build personal connections.
828
+
829
+ 208
830
+ 00:15:06,000 --> 00:15:10,000
831
+ Take the time to get to know your team members on a personal level.
832
+
833
+ 209
834
+ 00:15:10,000 --> 00:15:18,000
835
+ Building rapport and trust through casual conversations, team building activities, and social interactions.
836
+
837
+ 210
838
+ 00:15:18,000 --> 00:15:24,000
839
+ By implementing these strategies consistently, you can create a trusting and supportive team environment
840
+
841
+ 211
842
+ 00:15:24,000 --> 00:15:31,000
843
+ where team members feel valued, respected, and motivated to collaborate and work together.
844
+
845
+ 212
846
+ 00:15:32,000 --> 00:15:36,000
847
+ If you would follow all the rules that we have learned during the lesson.
848
+
849
+ 213
850
+ 00:15:36,000 --> 00:15:40,000
851
+ This would lead you to collaborative and efficient code review process.
852
+
853
+ 214
854
+ 00:15:40,000 --> 00:15:46,000
855
+ But there are some other recommendations on top of what we have already discussed.
856
+
857
+ 215
858
+ 00:15:47,000 --> 00:15:53,000
859
+ Collaborative code reviews involve team members working together to review and improve code before it
860
+
861
+ 216
862
+ 00:15:53,000 --> 00:15:54,000
863
+ is merged into the code base.
864
+
865
+ 217
866
+ 00:15:55,000 --> 00:15:59,000
867
+ Let's review some tips for conducting collaborative code reviews effectively.
868
+
869
+ 218
870
+ 00:16:00,000 --> 00:16:02,000
871
+ Establish clear guidelines.
872
+
873
+ 219
874
+ 00:16:02,000 --> 00:16:09,000
875
+ Define clear guidelines for code reviews, including expectations for review, frequency, DApps and
876
+
877
+ 220
878
+ 00:16:09,000 --> 00:16:09,000
879
+ etiquette.
880
+
881
+ 221
882
+ 00:16:10,000 --> 00:16:15,000
883
+ And in this course, I have separate lessons about code review guidelines, where we reviewed a real
884
+
885
+ 222
886
+ 00:16:15,000 --> 00:16:16,000
887
+ example.
888
+
889
+ 223
890
+ 00:16:17,000 --> 00:16:18,000
891
+ Assign roles.
892
+
893
+ 224
894
+ 00:16:19,000 --> 00:16:25,000
895
+ Assign roles such as the reviewer and author to team members to ensure clarity and accountability during
896
+
897
+ 225
898
+ 00:16:25,000 --> 00:16:26,000
899
+ the review process.
900
+
901
+ 226
902
+ 00:16:26,000 --> 00:16:30,000
903
+ Sometimes there are can be permanent reviewers.
904
+
905
+ 227
906
+ 00:16:30,000 --> 00:16:36,000
907
+ Sometimes each team member may act as a code reviewer if you have mature team.
908
+
909
+ 228
910
+ 00:16:37,000 --> 00:16:45,000
911
+ Use version control tools, utilize version control tools like git, and platforms like GitHub or GitLab
912
+
913
+ 229
914
+ 00:16:45,000 --> 00:16:51,000
915
+ to facilitate code reviews with features such as pull requests, comments, and inline diffs.
916
+
917
+ 230
918
+ 00:16:52,000 --> 00:16:54,000
919
+ Set realistic expectations.
920
+
921
+ 231
922
+ 00:16:55,000 --> 00:17:02,000
923
+ Set realistic timelines and expectations for code reviews to ensure that their sorrow, but not overly
924
+
925
+ 232
926
+ 00:17:02,000 --> 00:17:03,000
927
+ time consuming.
928
+
929
+ 233
930
+ 00:17:04,000 --> 00:17:06,000
931
+ Encourage constructive feedback.
932
+
933
+ 234
934
+ 00:17:06,000 --> 00:17:12,000
935
+ Foster a culture of constructive feedback, where team members provide feedback in a respectful and
936
+
937
+ 235
938
+ 00:17:12,000 --> 00:17:18,000
939
+ helpful manner, focusing on improving the code rather than criticising the developer.
940
+
941
+ 236
942
+ 00:17:19,000 --> 00:17:21,000
943
+ Leverage automation.
944
+
945
+ 237
946
+ 00:17:21,000 --> 00:17:27,000
947
+ Use automated tools for code analysis, linting, and testing to catch common issues and streamline
948
+
949
+ 238
950
+ 00:17:27,000 --> 00:17:28,000
951
+ the review process.
952
+
953
+ 239
954
+ 00:17:29,000 --> 00:17:31,000
955
+ Document decisions.
956
+
957
+ 240
958
+ 00:17:31,000 --> 00:17:37,000
959
+ Document decisions and discussions made during the code review process to provide context for future
960
+
961
+ 241
962
+ 00:17:37,000 --> 00:17:40,000
963
+ reference and to facilitate knowledge sharing.
964
+
965
+ 242
966
+ 00:17:41,000 --> 00:17:45,000
967
+ Follow up on code review feedback by addressing any issues raised.
968
+
969
+ 243
970
+ 00:17:45,000 --> 00:17:51,000
971
+ Making necessary changes and ensuring that the code meets the team's quality standards before merging.
972
+
973
+ 244
974
+ 00:17:52,000 --> 00:17:58,000
975
+ By following these steps, teams can conduct collaborative code reviews effectively, leading to higher
976
+
977
+ 245
978
+ 00:17:58,000 --> 00:18:05,000
979
+ code quality, improves collaboration, and enhance learning and skill development among team members.
980
+
981
+ 246
982
+ 00:18:05,000 --> 00:18:06,000
983
+ That's all.
984
+
985
+ 247
986
+ 00:18:06,000 --> 00:18:09,000
987
+ What I wanted to review with you in this lesson.
988
+
989
+ 248
990
+ 00:18:09,000 --> 00:18:11,000
991
+ Let's recap what we have learned today.
992
+
993
+ 249
994
+ 00:18:12,000 --> 00:18:15,000
995
+ Today we learned constructive criticism techniques.
996
+
997
+ 250
998
+ 00:18:15,000 --> 00:18:21,000
999
+ We learned what it is, why it is important, and we learned techniques itself.
1000
+
1001
+ 251
1002
+ 00:18:21,000 --> 00:18:27,000
1003
+ I shared with you advices how to build effective communication during the code review process.
1004
+
1005
+ 252
1006
+ 00:18:27,000 --> 00:18:34,000
1007
+ Also, we talked about how to provide fair and objective feedback and to not gain new enemies inside
1008
+
1009
+ 253
1010
+ 00:18:34,000 --> 00:18:34,000
1011
+ the team.
1012
+
1013
+ 254
1014
+ 00:18:35,000 --> 00:18:41,000
1015
+ We discuss how to create positive code, review culture within the team, how to build trust among team
1016
+
1017
+ 255
1018
+ 00:18:41,000 --> 00:18:45,000
1019
+ members, and how to build collaborative code review process.
1020
+
1021
+ 256
1022
+ 00:18:45,000 --> 00:18:47,000
1023
+ That's all for this lesson.
1024
+
1025
+ 257
1026
+ 00:18:47,000 --> 00:18:49,000
1027
+ Thanks a lot for your attention.
1028
+
1029
+ 258
1030
+ 00:18:49,000 --> 00:18:52,000
1031
+ Have a great day and see you in the next lesson.
1032
+
109 - Advanced Code Review Strategies/004 Security Considerations During Code Review_en.srt ADDED
@@ -0,0 +1,824 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:13,000
7
+ In this lesson, we'll learn more about security considerations in code and their role during code review.
8
+
9
+ 3
10
+ 00:00:14,000 --> 00:00:19,000
11
+ We'll start our lesson from understanding the importance of security in software development.
12
+
13
+ 4
14
+ 00:00:19,000 --> 00:00:25,000
15
+ Then I will share with you a list of common security vulnerabilities when developing web applications.
16
+
17
+ 5
18
+ 00:00:26,000 --> 00:00:31,000
19
+ In this lesson, I will share with you my experience of integration, security, best practices in code
20
+
21
+ 6
22
+ 00:00:31,000 --> 00:00:32,000
23
+ review process.
24
+
25
+ 7
26
+ 00:00:32,000 --> 00:00:35,000
27
+ And at the end of the lesson we will learn security scanners.
28
+
29
+ 8
30
+ 00:00:35,000 --> 00:00:41,000
31
+ We will discuss tools for security scanning that you can integrate into development process.
32
+
33
+ 9
34
+ 00:00:41,000 --> 00:00:43,000
35
+ Let's start our lesson.
36
+
37
+ 10
38
+ 00:00:43,000 --> 00:00:50,000
39
+ Let me explain you first why it is so important to be concerned about security during the software development.
40
+
41
+ 11
42
+ 00:00:50,000 --> 00:00:57,000
43
+ Security and software development is crucial for safeguarding sensitive data, protecting user privacy,
44
+
45
+ 12
46
+ 00:00:57,000 --> 00:01:01,000
47
+ and preventing unauthorized access or malicious attacks.
48
+
49
+ 13
50
+ 00:01:01,000 --> 00:01:04,000
51
+ Here is why it is important.
52
+
53
+ 14
54
+ 00:01:04,000 --> 00:01:11,000
55
+ First of all, data protection software often deals with sensitive information such as personal details,
56
+
57
+ 15
58
+ 00:01:11,000 --> 00:01:15,000
59
+ financial data, or intellectual property.
60
+
61
+ 16
62
+ 00:01:15,000 --> 00:01:23,000
63
+ Security measures help to encrypt and secure this data, preventing unauthorized access or theft.
64
+
65
+ 17
66
+ 00:01:23,000 --> 00:01:25,000
67
+ User trust.
68
+
69
+ 18
70
+ 00:01:25,000 --> 00:01:31,000
71
+ Security breaches can ruin user trust and damage a company's reputation.
72
+
73
+ 19
74
+ 00:01:31,000 --> 00:01:39,000
75
+ Users expect their data to be handled securely, and failure to do so can lead to loss of customers
76
+
77
+ 20
78
+ 00:01:39,000 --> 00:01:40,000
79
+ and revenue.
80
+
81
+ 21
82
+ 00:01:41,000 --> 00:01:43,000
83
+ Compliance requirements.
84
+
85
+ 22
86
+ 00:01:43,000 --> 00:01:51,000
87
+ Many industries have strict regulations governing the handling of sensitive data, such as GDPR in Europe
88
+
89
+ 23
90
+ 00:01:51,000 --> 00:01:54,000
91
+ or HIPAA in the healthcare industry.
92
+
93
+ 24
94
+ 00:01:54,000 --> 00:02:02,000
95
+ Adhering to these regulations is not just a legal requirement, but also essential for maintaining trust
96
+
97
+ 25
98
+ 00:02:02,000 --> 00:02:03,000
99
+ with customers.
100
+
101
+ 26
102
+ 00:02:04,000 --> 00:02:06,000
103
+ Preventing cyber attacks.
104
+
105
+ 27
106
+ 00:02:06,000 --> 00:02:14,000
107
+ The threat landscape is constantly evolving, with hackers employing sophisticated techniques to exploit
108
+
109
+ 28
110
+ 00:02:14,000 --> 00:02:15,000
111
+ vulnerabilities and software.
112
+
113
+ 29
114
+ 00:02:17,000 --> 00:02:24,000
115
+ Implementing robust security measures helps to mitigate the risk of cyber attacks such as malware,
116
+
117
+ 30
118
+ 00:02:24,000 --> 00:02:26,000
119
+ ransomware, or phishing attempts.
120
+
121
+ 31
122
+ 00:02:27,000 --> 00:02:29,000
123
+ Financial impact.
124
+
125
+ 32
126
+ 00:02:30,000 --> 00:02:37,000
127
+ Security breaches can result in significant financial losses for organisations, including costs associated
128
+
129
+ 33
130
+ 00:02:37,000 --> 00:02:45,000
131
+ with data recovery, legal fees, regulatory fines and damage to brand reputation.
132
+
133
+ 34
134
+ 00:02:45,000 --> 00:02:52,000
135
+ Investing in security up front can save money in the long run by preventing these incidents.
136
+
137
+ 35
138
+ 00:02:52,000 --> 00:02:54,000
139
+ Continuity of operations.
140
+
141
+ 36
142
+ 00:02:54,000 --> 00:03:02,000
143
+ Security incidents can disrupt normal business operations, leading to downtime and loss of productivity.
144
+
145
+ 37
146
+ 00:03:02,000 --> 00:03:09,000
147
+ By implementing security best practices, organisations can ensure the continuity of their operations
148
+
149
+ 38
150
+ 00:03:09,000 --> 00:03:12,000
151
+ even in the face of potential threats.
152
+
153
+ 39
154
+ 00:03:13,000 --> 00:03:14,000
155
+ Competitive advantage.
156
+
157
+ 40
158
+ 00:03:15,000 --> 00:03:21,000
159
+ In today's digital landscape, customers prioritize security when choosing software products or services.
160
+
161
+ 41
162
+ 00:03:22,000 --> 00:03:29,000
163
+ By demonstrating a commitment to security, organisations can gain a competitive advantage and differentiate
164
+
165
+ 42
166
+ 00:03:29,000 --> 00:03:32,000
167
+ themselves from competitors.
168
+
169
+ 43
170
+ 00:03:32,000 --> 00:03:38,000
171
+ Overall, integrating security into the software development life cycle is essential for protecting
172
+
173
+ 44
174
+ 00:03:38,000 --> 00:03:45,000
175
+ valuable assets, maintaining trust with users, and ensuring the long term success of organisations.
176
+
177
+ 45
178
+ 00:03:46,000 --> 00:03:49,000
179
+ Now let's talk about common security vulnerabilities.
180
+
181
+ 46
182
+ 00:03:49,000 --> 00:03:53,000
183
+ To be honest, it is not a short topic to talk about.
184
+
185
+ 47
186
+ 00:03:53,000 --> 00:03:58,000
187
+ I have separate courses about secure coding and Java and about Avast.
188
+
189
+ 48
190
+ 00:03:58,000 --> 00:04:04,000
191
+ Top ten vulnerabilities, where we reviewed the most common security vulnerabilities for web applications.
192
+
193
+ 49
194
+ 00:04:05,000 --> 00:04:12,000
195
+ So depending on the type of applications that you develop programming paradigm, there might be different
196
+
197
+ 50
198
+ 00:04:12,000 --> 00:04:13,000
199
+ security vulnerabilities.
200
+
201
+ 51
202
+ 00:04:13,000 --> 00:04:20,000
203
+ But still, let me try to cover some of the most common security vulnerabilities for web applications.
204
+
205
+ 52
206
+ 00:04:21,000 --> 00:04:22,000
207
+ Injection attacks.
208
+
209
+ 53
210
+ 00:04:23,000 --> 00:04:30,000
211
+ This occurs when untrusted data is sent to an interpreter as part of a command or query.
212
+
213
+ 54
214
+ 00:04:30,000 --> 00:04:38,000
215
+ Examples include SQL injection, where malicious SQL commands are injected into input fields to manipulate
216
+
217
+ 55
218
+ 00:04:38,000 --> 00:04:46,000
219
+ a database, and operating system command injection, where commands are injected into operating system
220
+
221
+ 56
222
+ 00:04:46,000 --> 00:04:47,000
223
+ commands.
224
+
225
+ 57
226
+ 00:04:48,000 --> 00:04:48,000
227
+ Broken.
228
+
229
+ 58
230
+ 00:04:48,000 --> 00:04:50,000
231
+ Authentication.
232
+
233
+ 59
234
+ 00:04:50,000 --> 00:04:57,000
235
+ Weakness in authentication mechanisms can allow attackers to compromise user accounts, such as through
236
+
237
+ 60
238
+ 00:04:57,000 --> 00:05:03,000
239
+ brute force attacks, credential stuffing, or session hijacking.
240
+
241
+ 61
242
+ 00:05:04,000 --> 00:05:06,000
243
+ Sensitive data exposure.
244
+
245
+ 62
246
+ 00:05:06,000 --> 00:05:13,000
247
+ Failure to properly protect sensitive data such as passwords, credit card numbers, or personal information
248
+
249
+ 63
250
+ 00:05:13,000 --> 00:05:16,000
251
+ can lead to unauthorized access.
252
+
253
+ 64
254
+ 00:05:16,000 --> 00:05:23,000
255
+ This vulnerability often occurs due to inadequate encryption or improper handling of data.
256
+
257
+ 65
258
+ 00:05:23,000 --> 00:05:25,000
259
+ Security misconfiguration.
260
+
261
+ 66
262
+ 00:05:26,000 --> 00:05:33,000
263
+ Incorrectly configured security settings such as default passwords, unnecessary services, or excessive
264
+
265
+ 67
266
+ 00:05:33,000 --> 00:05:36,000
267
+ permissions can expose systems to attacks.
268
+
269
+ 68
270
+ 00:05:36,000 --> 00:05:43,000
271
+ Attackers may exploit these misconfigurations to gain unauthorized access or escalate privileges.
272
+
273
+ 69
274
+ 00:05:44,000 --> 00:05:45,000
275
+ Cross-site scripting.
276
+
277
+ 70
278
+ 00:05:46,000 --> 00:05:53,000
279
+ Cross-site scripting attacks occur when malicious scripts are injected into web pages viewed by other
280
+
281
+ 71
282
+ 00:05:53,000 --> 00:05:53,000
283
+ users.
284
+
285
+ 72
286
+ 00:05:54,000 --> 00:06:02,000
287
+ This can lead to the theft of session cookies, damage of websites, or redirection to malicious sites.
288
+
289
+ 73
290
+ 00:06:03,000 --> 00:06:05,000
291
+ Broken access control.
292
+
293
+ 74
294
+ 00:06:05,000 --> 00:06:13,000
295
+ Inadequate access controls can allow unauthorized users to access sensitive functionality or data.
296
+
297
+ 75
298
+ 00:06:13,000 --> 00:06:21,000
299
+ This includes issues such as missing or ineffective access controls, insecure direct object references,
300
+
301
+ 76
302
+ 00:06:21,000 --> 00:06:23,000
303
+ or insufficient authorization checks.
304
+
305
+ 77
306
+ 00:06:24,000 --> 00:06:32,000
307
+ Security headers, missing or misconfigured security headers such as content security policy, strict
308
+
309
+ 78
310
+ 00:06:32,000 --> 00:06:39,000
311
+ transport security, or cross-origin resource sharing can leave web applications vulnerable to various
312
+
313
+ 79
314
+ 00:06:39,000 --> 00:06:44,000
315
+ attacks such as cross-site scripting or clickjacking.
316
+
317
+ 80
318
+ 00:06:45,000 --> 00:06:47,000
319
+ Cross-site request forgery.
320
+
321
+ 81
322
+ 00:06:48,000 --> 00:06:58,000
323
+ CSRF attacks occur when an attacker tricks a user into performing unintended actions on a web application
324
+
325
+ 82
326
+ 00:06:58,000 --> 00:07:00,000
327
+ where they are authenticated.
328
+
329
+ 83
330
+ 00:07:01,000 --> 00:07:08,000
331
+ This can lead to actions such as changing account settings, making purchases, or initiate and transfers
332
+
333
+ 84
334
+ 00:07:08,000 --> 00:07:10,000
335
+ without the user's consent.
336
+
337
+ 85
338
+ 00:07:11,000 --> 00:07:14,000
339
+ Using components with known vulnerabilities.
340
+
341
+ 86
342
+ 00:07:14,000 --> 00:07:21,000
343
+ Incorporating a third party libraries or components with known security vulnerabilities can expose software
344
+
345
+ 87
346
+ 00:07:21,000 --> 00:07:23,000
347
+ to exploitation.
348
+
349
+ 88
350
+ 00:07:23,000 --> 00:07:29,000
351
+ It's essential to regularly update and patch dependencies to mitigate these risks.
352
+
353
+ 89
354
+ 00:07:30,000 --> 00:07:32,000
355
+ Insufficient login and monitoring.
356
+
357
+ 90
358
+ 00:07:33,000 --> 00:07:39,000
359
+ Inadequate login and monitoring make it difficult to detect and respond to security incidents.
360
+
361
+ 91
362
+ 00:07:39,000 --> 00:07:47,000
363
+ Organizations should implement comprehensive login practices and establish monitoring systems to identify
364
+
365
+ 92
366
+ 00:07:47,000 --> 00:07:50,000
367
+ and investigate suspicious activities.
368
+
369
+ 93
370
+ 00:07:50,000 --> 00:07:56,000
371
+ By understanding and addressing these common vulnerabilities, software developers can build more secure
372
+
373
+ 94
374
+ 00:07:56,000 --> 00:08:00,000
375
+ applications and protect against potential threats.
376
+
377
+ 95
378
+ 00:08:00,000 --> 00:08:06,000
379
+ So it is super important to integrate security best practices into code review process.
380
+
381
+ 96
382
+ 00:08:07,000 --> 00:08:13,000
383
+ It is essential for identifying and mitigating vulnerabilities early in the software development life
384
+
385
+ 97
386
+ 00:08:13,000 --> 00:08:14,000
387
+ cycle.
388
+
389
+ 98
390
+ 00:08:14,000 --> 00:08:17,000
391
+ Here is how you can do it effectively.
392
+
393
+ 99
394
+ 00:08:17,000 --> 00:08:25,000
395
+ First of all, establish guidelines, define clear security coding guidelines and standards that developers
396
+
397
+ 100
398
+ 00:08:25,000 --> 00:08:26,000
399
+ should follow.
400
+
401
+ 101
402
+ 00:08:26,000 --> 00:08:34,000
403
+ These guidelines should cover topics such as input validation or syndication authorization, data encryption,
404
+
405
+ 102
406
+ 00:08:34,000 --> 00:08:37,000
407
+ error handling, and secure configuration.
408
+
409
+ 103
410
+ 00:08:38,000 --> 00:08:45,000
411
+ Train reviewers provide training to code reviewers on common security vulnerabilities and best practices,
412
+
413
+ 104
414
+ 00:08:45,000 --> 00:08:52,000
415
+ ensure they understand how to identify security issues during code reviews, and provide actionable
416
+
417
+ 105
418
+ 00:08:52,000 --> 00:08:53,000
419
+ feedback to developers.
420
+
421
+ 106
422
+ 00:08:55,000 --> 00:09:01,000
423
+ Automated tools use automated security scanning tools as part of the code review process.
424
+
425
+ 107
426
+ 00:09:01,000 --> 00:09:08,000
427
+ These tools can help identify potential security vulnerabilities such as code injections, cross-site
428
+
429
+ 108
430
+ 00:09:08,000 --> 00:09:12,000
431
+ scripting, cross-site request forgery, and insecure dependencies.
432
+
433
+ 109
434
+ 00:09:13,000 --> 00:09:20,000
435
+ Integrate these tools into CI CD pipeline to catch issues early in the development process.
436
+
437
+ 110
438
+ 00:09:20,000 --> 00:09:24,000
439
+ We are going to review examples of these tools later in the lesson.
440
+
441
+ 111
442
+ 00:09:25,000 --> 00:09:26,000
443
+ Checklists.
444
+
445
+ 112
446
+ 00:09:27,000 --> 00:09:35,000
447
+ Develop code review checklists specifically focused on security concerns include items related to input
448
+
449
+ 113
450
+ 00:09:35,000 --> 00:09:42,000
451
+ validation, authentication mechanisms, data encryption, access controls, error handling, and security
452
+
453
+ 114
454
+ 00:09:42,000 --> 00:09:43,000
455
+ configurations.
456
+
457
+ 115
458
+ 00:09:44,000 --> 00:09:50,000
459
+ Reviewers can use these checklists to systematically evaluate code for security vulnerabilities.
460
+
461
+ 116
462
+ 00:09:51,000 --> 00:09:59,000
463
+ Peer reviews encourage peer reviews, where developers review each other's code for security issues.
464
+
465
+ 117
466
+ 00:09:59,000 --> 00:10:06,000
467
+ This collaborative approach helps spread security awareness throughout the team and provides an additional
468
+
469
+ 118
470
+ 00:10:06,000 --> 00:10:07,000
471
+ layer of verification.
472
+
473
+ 119
474
+ 00:10:08,000 --> 00:10:10,000
475
+ Threat modeling.
476
+
477
+ 120
478
+ 00:10:10,000 --> 00:10:16,000
479
+ Integrate threat modeling into the code review process to proactively identify potential security threats
480
+
481
+ 121
482
+ 00:10:16,000 --> 00:10:24,000
483
+ and vulnerabilities by analyzing the system's architecture and identifying potential attack vectors.
484
+
485
+ 122
486
+ 00:10:24,000 --> 00:10:28,000
487
+ Developers can prioritize security considerations during code reviews.
488
+
489
+ 123
490
+ 00:10:29,000 --> 00:10:31,000
491
+ Security review meetings.
492
+
493
+ 124
494
+ 00:10:31,000 --> 00:10:38,000
495
+ Hold regular security review meetings where developers, security experts, and other stakeholders discuss
496
+
497
+ 125
498
+ 00:10:38,000 --> 00:10:41,000
499
+ security concerns and review code together.
500
+
501
+ 126
502
+ 00:10:42,000 --> 00:10:49,000
503
+ These meetings provide an opportunity to address complex security issues and ensure alignment with security
504
+
505
+ 127
506
+ 00:10:49,000 --> 00:10:50,000
507
+ requirements.
508
+
509
+ 128
510
+ 00:10:51,000 --> 00:10:57,000
511
+ Provide feedback ensures that code reviewers provide clear and actionable feedback to developers on
512
+
513
+ 129
514
+ 00:10:57,000 --> 00:10:59,000
515
+ identified security issues.
516
+
517
+ 130
518
+ 00:10:59,000 --> 00:11:06,000
519
+ Explain why certain practices are insecure and provide guidance on how to remediate them.
520
+
521
+ 131
522
+ 00:11:07,000 --> 00:11:10,000
523
+ Encourage a culture of continuous improvement and learning.
524
+
525
+ 132
526
+ 00:11:11,000 --> 00:11:12,000
527
+ Track metrics.
528
+
529
+ 133
530
+ 00:11:13,000 --> 00:11:19,000
531
+ Track and analyze security related metrics, such as the number of security issues identified during
532
+
533
+ 134
534
+ 00:11:19,000 --> 00:11:20,000
535
+ code reviews.
536
+
537
+ 135
538
+ 00:11:20,000 --> 00:11:25,000
539
+ Time to remediate vulnerabilities and trends over time.
540
+
541
+ 136
542
+ 00:11:25,000 --> 00:11:32,000
543
+ Use this data to measure the effectiveness of your security review process and identify areas for improvement.
544
+
545
+ 137
546
+ 00:11:33,000 --> 00:11:34,000
547
+ Documentation.
548
+
549
+ 138
550
+ 00:11:34,000 --> 00:11:41,000
551
+ Document security related decisions, discussions, and remediation efforts during code reviews.
552
+
553
+ 139
554
+ 00:11:41,000 --> 00:11:48,000
555
+ This documentation serves as a valuable resource for future reference and helps maintain consistency
556
+
557
+ 140
558
+ 00:11:48,000 --> 00:11:51,000
559
+ in security practices across the development team.
560
+
561
+ 141
562
+ 00:11:52,000 --> 00:11:58,000
563
+ By integrating these best practices into code review process, organizations can make stronger their
564
+
565
+ 142
566
+ 00:11:58,000 --> 00:12:04,000
567
+ overall security posture and reduce the risk of security breaches in their software applications.
568
+
569
+ 143
570
+ 00:12:05,000 --> 00:12:08,000
571
+ Separately, I'd like to talk about security scanners.
572
+
573
+ 144
574
+ 00:12:08,000 --> 00:12:15,000
575
+ Integration into a development process, including security scanners in the code review process is indeed
576
+
577
+ 145
578
+ 00:12:15,000 --> 00:12:19,000
579
+ an important aspect of integrating security best practices.
580
+
581
+ 146
582
+ 00:12:20,000 --> 00:12:23,000
583
+ Here is how you can incorporate security scanners.
584
+
585
+ 147
586
+ 00:12:24,000 --> 00:12:31,000
587
+ Automated scanning tools utilize automated security scanning tools to analyze code for vulnerabilities.
588
+
589
+ 148
590
+ 00:12:31,000 --> 00:12:39,000
591
+ These tools can identify common security issues such as injection attacks, cross-site scripting, cross-site
592
+
593
+ 149
594
+ 00:12:39,000 --> 00:12:43,000
595
+ request forgery, and secure dependencies and misconfigurations.
596
+
597
+ 150
598
+ 00:12:44,000 --> 00:12:51,000
599
+ Integrate security scanners into your CI CD pipeline to automatically scan code as part of the build
600
+
601
+ 151
602
+ 00:12:51,000 --> 00:12:52,000
603
+ process.
604
+
605
+ 152
606
+ 00:12:52,000 --> 00:13:00,000
607
+ For example, you can use such tools as sonar, cube, check marks, or 45 to perform static code analysis
608
+
609
+ 153
610
+ 00:13:00,000 --> 00:13:04,000
611
+ and identify vulnerabilities in the code base.
612
+
613
+ 154
614
+ 00:13:04,000 --> 00:13:07,000
615
+ Static application security testing.
616
+
617
+ 155
618
+ 00:13:07,000 --> 00:13:15,000
619
+ These tools analyze source code or compiled binaries to identify security vulnerabilities without executing
620
+
621
+ 156
622
+ 00:13:15,000 --> 00:13:16,000
623
+ the application.
624
+
625
+ 157
626
+ 00:13:16,000 --> 00:13:23,000
627
+ These tools can detect issues such as SQL injection, cross-site scripting, buffer overflows, and
628
+
629
+ 158
630
+ 00:13:23,000 --> 00:13:31,000
631
+ insecure cryptographic implementations by examining the code for patterns indicative of vulnerabilities.
632
+
633
+ 159
634
+ 00:13:32,000 --> 00:13:40,000
635
+ Examples utilize such tools as Veracode or Coverity to analyze source code for vulnerabilities.
636
+
637
+ 160
638
+ 00:13:41,000 --> 00:13:43,000
639
+ Dynamic application security testing.
640
+
641
+ 161
642
+ 00:13:44,000 --> 00:13:50,000
643
+ These tools interact with running applications to identify security vulnerabilities from the outside.
644
+
645
+ 162
646
+ 00:13:51,000 --> 00:13:58,000
647
+ They simulate attacks and analyze responses to detect issues such as injection attacks, authentication,
648
+
649
+ 163
650
+ 00:13:58,000 --> 00:14:02,000
651
+ bypass, and insecure configurations.
652
+
653
+ 164
654
+ 00:14:02,000 --> 00:14:09,000
655
+ Dynamic application security testing tools can provide valuable insights into vulnerabilities that may
656
+
657
+ 165
658
+ 00:14:09,000 --> 00:14:12,000
659
+ not be apparent from static analysis alone.
660
+
661
+ 166
662
+ 00:14:13,000 --> 00:14:15,000
663
+ Examples of tools.
664
+
665
+ 167
666
+ 00:14:15,000 --> 00:14:24,000
667
+ You can use such tools as a wasp, zap, or burp suit to simulate attacks against running applications
668
+
669
+ 168
670
+ 00:14:24,000 --> 00:14:26,000
671
+ and identify vulnerabilities.
672
+
673
+ 169
674
+ 00:14:27,000 --> 00:14:29,000
675
+ Dependency scanning.
676
+
677
+ 170
678
+ 00:14:29,000 --> 00:14:35,000
679
+ Use dependency scanning tools to identify known vulnerabilities in third party libraries and components
680
+
681
+ 171
682
+ 00:14:35,000 --> 00:14:37,000
683
+ used in your software.
684
+
685
+ 172
686
+ 00:14:38,000 --> 00:14:44,000
687
+ These tools analyze dependencies against vulnerability databases and alert developers to any security
688
+
689
+ 173
690
+ 00:14:44,000 --> 00:14:45,000
691
+ issues.
692
+
693
+ 174
694
+ 00:14:45,000 --> 00:14:51,000
695
+ Integrate dependency scanning into your build process to automatically check for vulnerabilities in
696
+
697
+ 175
698
+ 00:14:51,000 --> 00:14:52,000
699
+ dependencies.
700
+
701
+ 176
702
+ 00:14:53,000 --> 00:15:01,000
703
+ Use dependency scanning tools such as OWASp, Dependency Check or Snake to identify known vulnerabilities
704
+
705
+ 177
706
+ 00:15:01,000 --> 00:15:04,000
707
+ in third party libraries and components.
708
+
709
+ 178
710
+ 00:15:04,000 --> 00:15:06,000
711
+ Container security scanning.
712
+
713
+ 179
714
+ 00:15:07,000 --> 00:15:14,000
715
+ If you use containerized applications, incorporate container security scanning tools into your CI CD
716
+
717
+ 180
718
+ 00:15:14,000 --> 00:15:15,000
719
+ pipeline.
720
+
721
+ 181
722
+ 00:15:16,000 --> 00:15:23,000
723
+ These tools scan container images for vulnerabilities in operating system packages, libraries, and
724
+
725
+ 182
726
+ 00:15:23,000 --> 00:15:24,000
727
+ configurations.
728
+
729
+ 183
730
+ 00:15:24,000 --> 00:15:32,000
731
+ Container security scanning helps ensure that your containerized applications are free from known security
732
+
733
+ 184
734
+ 00:15:32,000 --> 00:15:34,000
735
+ vulnerabilities before deployment.
736
+
737
+ 185
738
+ 00:15:35,000 --> 00:15:43,000
739
+ Use container security scanning tools like Encore or Clair to scan container images for vulnerabilities
740
+
741
+ 186
742
+ 00:15:43,000 --> 00:15:46,000
743
+ in operating system packages and libraries.
744
+
745
+ 187
746
+ 00:15:47,000 --> 00:15:48,000
747
+ Continuous monitoring.
748
+
749
+ 188
750
+ 00:15:49,000 --> 00:15:56,000
751
+ Implement continuous monitoring solutions that analyze runtime behavior and network traffic to detect
752
+
753
+ 189
754
+ 00:15:56,000 --> 00:15:59,000
755
+ security anomalies and potential attacks.
756
+
757
+ 190
758
+ 00:16:00,000 --> 00:16:07,000
759
+ These solutions complement static and dynamic analysis by providing real time insights into security
760
+
761
+ 191
762
+ 00:16:07,000 --> 00:16:10,000
763
+ threats and vulnerabilities in production environments.
764
+
765
+ 192
766
+ 00:16:10,000 --> 00:16:19,000
767
+ Implement a continuous monitoring solution such as Splunk or Elk stack to analyze logs and network traffic
768
+
769
+ 193
770
+ 00:16:19,000 --> 00:16:22,000
771
+ for security anomalies and potential attacks.
772
+
773
+ 194
774
+ 00:16:22,000 --> 00:16:31,000
775
+ The Elk stack is an acronym used to describe a stack that comprises three popular projects Elasticsearch,
776
+
777
+ 195
778
+ 00:16:31,000 --> 00:16:33,000
779
+ Logstash, and Kibana.
780
+
781
+ 196
782
+ 00:16:33,000 --> 00:16:41,000
783
+ By incorporating security scanners into your code review process, you can identify and remediate security
784
+
785
+ 197
786
+ 00:16:41,000 --> 00:16:47,000
787
+ vulnerabilities more effectively, enhancing the overall security of your software applications.
788
+
789
+ 198
790
+ 00:16:47,000 --> 00:16:51,000
791
+ That's all what I wanted to share with you in this lesson.
792
+
793
+ 199
794
+ 00:16:51,000 --> 00:16:54,000
795
+ Let's recap what we have learned today.
796
+
797
+ 200
798
+ 00:16:55,000 --> 00:16:59,000
799
+ In this lesson, we learned the importance of security in software development.
800
+
801
+ 201
802
+ 00:17:00,000 --> 00:17:02,000
803
+ We discussed common security vulnerabilities.
804
+
805
+ 202
806
+ 00:17:03,000 --> 00:17:09,000
807
+ I shared with you advices about how to integrate security best practices in code review process.
808
+
809
+ 203
810
+ 00:17:10,000 --> 00:17:13,000
811
+ And at the end of the lesson, we learned tools for security scanning.
812
+
813
+ 204
814
+ 00:17:14,000 --> 00:17:16,000
815
+ That's all for this lesson.
816
+
817
+ 205
818
+ 00:17:16,000 --> 00:17:18,000
819
+ Thanks a lot for your attention.
820
+
821
+ 206
822
+ 00:17:18,000 --> 00:17:21,000
823
+ Have a great day and see you in the next lesson.
824
+
109 - Advanced Code Review Strategies/005 Scalability Principles in Code_en.srt ADDED
@@ -0,0 +1,748 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ In this lesson we are going to learn scalability principles in code and how we can verify them.
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:13,000
11
+ During code review.
12
+
13
+ 4
14
+ 00:00:13,000 --> 00:00:18,000
15
+ We are going to start the lesson from learning what scalability is in software development.
16
+
17
+ 5
18
+ 00:00:18,000 --> 00:00:25,000
19
+ Then I will explain you best practices for scalable code that will help you to increase the quality
20
+
21
+ 6
22
+ 00:00:25,000 --> 00:00:28,000
23
+ of your code significantly.
24
+
25
+ 7
26
+ 00:00:28,000 --> 00:00:34,000
27
+ After that, we will talk about how to identify and address scalability challenges in your code.
28
+
29
+ 8
30
+ 00:00:34,000 --> 00:00:41,000
31
+ And by the end of the lesson, we will have enough knowledge to understand how we can identify scalability
32
+
33
+ 9
34
+ 00:00:41,000 --> 00:00:43,000
35
+ challenges during code review.
36
+
37
+ 10
38
+ 00:00:44,000 --> 00:00:45,000
39
+ Let's start our lesson.
40
+
41
+ 11
42
+ 00:00:46,000 --> 00:00:52,000
43
+ Let's learn what do we call scalability when we talk about scalability in software development?
44
+
45
+ 12
46
+ 00:00:52,000 --> 00:00:59,000
47
+ Scalability and software development is all about making sure that your software can handle more work
48
+
49
+ 13
50
+ 00:00:59,000 --> 00:01:01,000
51
+ as the demand increases.
52
+
53
+ 14
54
+ 00:01:01,000 --> 00:01:08,000
55
+ It's like making sure your car can carry more passengers without breaking down or slowing down.
56
+
57
+ 15
58
+ 00:01:08,000 --> 00:01:15,000
59
+ There are a few key things to keep in mind when thinking about scalability, performance, capacity,
60
+
61
+ 16
62
+ 00:01:15,000 --> 00:01:17,000
63
+ and flexibility.
64
+
65
+ 17
66
+ 00:01:17,000 --> 00:01:19,000
67
+ Performance.
68
+
69
+ 18
70
+ 00:01:19,000 --> 00:01:23,000
71
+ This is about how fast your software can respond to requests.
72
+
73
+ 19
74
+ 00:01:23,000 --> 00:01:29,000
75
+ If lots of people start using your software at the same time, you want it to still work quickly and
76
+
77
+ 20
78
+ 00:01:29,000 --> 00:01:30,000
79
+ smoothly.
80
+
81
+ 21
82
+ 00:01:30,000 --> 00:01:36,000
83
+ To improve performance, you might need to optimize your code, use better hardware, or distribute
84
+
85
+ 22
86
+ 00:01:36,000 --> 00:01:39,000
87
+ the workload across multiple servers.
88
+
89
+ 23
90
+ 00:01:39,000 --> 00:01:40,000
91
+ Capacity.
92
+
93
+ 24
94
+ 00:01:40,000 --> 00:01:44,000
95
+ This is about how much your software can handle at once.
96
+
97
+ 25
98
+ 00:01:44,000 --> 00:01:50,000
99
+ If you have a sudden spike in users, your software should be able to handle it without crashing or
100
+
101
+ 26
102
+ 00:01:50,000 --> 00:01:52,000
103
+ slowing down too much.
104
+
105
+ 27
106
+ 00:01:53,000 --> 00:01:59,000
107
+ To increase capacity, you might need to add more servers or upgrade your existing ones.
108
+
109
+ 28
110
+ 00:02:00,000 --> 00:02:01,000
111
+ Flexibility.
112
+
113
+ 29
114
+ 00:02:01,000 --> 00:02:07,000
115
+ This is about how easily you can adapt your software to handle changes in demand.
116
+
117
+ 30
118
+ 00:02:07,000 --> 00:02:13,000
119
+ You want to be able to quickly scale up or down depending on what your users need.
120
+
121
+ 31
122
+ 00:02:13,000 --> 00:02:21,000
123
+ This might involve using cloud services that let you add or remove resources as needed, or designing
124
+
125
+ 32
126
+ 00:02:21,000 --> 00:02:27,000
127
+ your software in a way that makes it easy to add new features or change existing ones.
128
+
129
+ 33
130
+ 00:02:27,000 --> 00:02:34,000
131
+ By focusing on performance, capacity, and flexibility, you can make sure that your software can grow
132
+
133
+ 34
134
+ 00:02:34,000 --> 00:02:40,000
135
+ with your users and continue to provide a good experience even as demand increases.
136
+
137
+ 35
138
+ 00:02:41,000 --> 00:02:42,000
139
+ So let's learn now.
140
+
141
+ 36
142
+ 00:02:42,000 --> 00:02:44,000
143
+ Best practices for scalable code.
144
+
145
+ 37
146
+ 00:02:45,000 --> 00:02:52,000
147
+ Creating scalable code means writing code that can handle rows and users data or traffic without sacrificing
148
+
149
+ 38
150
+ 00:02:52,000 --> 00:02:56,000
151
+ performance or reliability like we just discussed.
152
+
153
+ 39
154
+ 00:02:57,000 --> 00:03:00,000
155
+ Let's review some best practices to keep in mind.
156
+
157
+ 40
158
+ 00:03:01,000 --> 00:03:06,000
159
+ Modular design break your code into smaller, reusable modules.
160
+
161
+ 41
162
+ 00:03:06,000 --> 00:03:11,000
163
+ This makes it easier to understand, maintain, and scale.
164
+
165
+ 42
166
+ 00:03:11,000 --> 00:03:17,000
167
+ Each module should have a single responsibility and be loosely coupled with others.
168
+
169
+ 43
170
+ 00:03:18,000 --> 00:03:25,000
171
+ Efficient algorithms and data structures use algorithms and data structures that are efficient in terms
172
+
173
+ 44
174
+ 00:03:25,000 --> 00:03:28,000
175
+ of time and space complexity.
176
+
177
+ 45
178
+ 00:03:28,000 --> 00:03:35,000
179
+ This ensures that your code can handle larger data sets and perform well under increased load.
180
+
181
+ 46
182
+ 00:03:36,000 --> 00:03:38,000
183
+ Optimized database queries.
184
+
185
+ 47
186
+ 00:03:39,000 --> 00:03:44,000
187
+ Design database queries to be efficient and minimize the number of queries executed.
188
+
189
+ 48
190
+ 00:03:44,000 --> 00:03:50,000
191
+ Use indexes, query optimization techniques and caching to improve database performance.
192
+
193
+ 49
194
+ 00:03:51,000 --> 00:03:56,000
195
+ Implement caching to store frequently accessed data in memory.
196
+
197
+ 50
198
+ 00:03:56,000 --> 00:04:01,000
199
+ This reduces the load on your database and improves response time.
200
+
201
+ 51
202
+ 00:04:01,000 --> 00:04:08,000
203
+ Use caching solutions like Radius or Memcached to store and retrieve cached data efficiently.
204
+
205
+ 52
206
+ 00:04:09,000 --> 00:04:11,000
207
+ Asynchronous processing.
208
+
209
+ 53
210
+ 00:04:12,000 --> 00:04:19,000
211
+ Use asynchronous programming techniques to handle tasks that can be executed independently or in the
212
+
213
+ 54
214
+ 00:04:19,000 --> 00:04:19,000
215
+ background.
216
+
217
+ 55
218
+ 00:04:19,000 --> 00:04:26,000
219
+ This allows your application to continue serving requests without waiting for long running tasks to
220
+
221
+ 56
222
+ 00:04:26,000 --> 00:04:26,000
223
+ complete.
224
+
225
+ 57
226
+ 00:04:27,000 --> 00:04:29,000
227
+ Horizontal scaling.
228
+
229
+ 58
230
+ 00:04:29,000 --> 00:04:36,000
231
+ Design your application to be horizontally scalable, meaning it can be deployed across multiple servers
232
+
233
+ 59
234
+ 00:04:36,000 --> 00:04:37,000
235
+ or instances.
236
+
237
+ 60
238
+ 00:04:37,000 --> 00:04:43,000
239
+ Use load balancers to distribute incoming traffic evenly across these instances.
240
+
241
+ 61
242
+ 00:04:44,000 --> 00:04:51,000
243
+ Monitoring and logging, implement monitoring and logging to track the performance and health of your
244
+
245
+ 62
246
+ 00:04:51,000 --> 00:04:52,000
247
+ application.
248
+
249
+ 63
250
+ 00:04:52,000 --> 00:05:01,000
251
+ Use tools like Prometheus, Grafana, or Elk stack to monitor metrics and identify bottlenecks and troubleshoot
252
+
253
+ 64
254
+ 00:05:01,000 --> 00:05:02,000
255
+ issues.
256
+
257
+ 65
258
+ 00:05:03,000 --> 00:05:06,000
259
+ Ilhc stack stands for Elasticsearch.
260
+
261
+ 66
262
+ 00:05:06,000 --> 00:05:07,000
263
+ Logstash.
264
+
265
+ 67
266
+ 00:05:07,000 --> 00:05:08,000
267
+ Kibana.
268
+
269
+ 68
270
+ 00:05:09,000 --> 00:05:11,000
271
+ Automated testing.
272
+
273
+ 69
274
+ 00:05:11,000 --> 00:05:16,000
275
+ Write automated tests to ensure the reliability and correctness of your code.
276
+
277
+ 70
278
+ 00:05:16,000 --> 00:05:24,000
279
+ Include unit tests, integration tests and performance tests in your testing strategy to catch issues
280
+
281
+ 71
282
+ 00:05:24,000 --> 00:05:26,000
283
+ early and prevent regressions.
284
+
285
+ 72
286
+ 00:05:27,000 --> 00:05:29,000
287
+ Continuous integration and deployment.
288
+
289
+ 73
290
+ 00:05:29,000 --> 00:05:35,000
291
+ Set up a CI CD pipeline to automate the build, testing and deployment process.
292
+
293
+ 74
294
+ 00:05:35,000 --> 00:05:41,000
295
+ This allows you to quickly iterate on your code, deploy updates safely, and scale your application
296
+
297
+ 75
298
+ 00:05:41,000 --> 00:05:42,000
299
+ more efficiently.
300
+
301
+ 76
302
+ 00:05:43,000 --> 00:05:45,000
303
+ Scalable infrastructure.
304
+
305
+ 77
306
+ 00:05:45,000 --> 00:05:50,000
307
+ Choose a scalable infrastructure that can grow with your application.
308
+
309
+ 78
310
+ 00:05:50,000 --> 00:05:58,000
311
+ Use cloud services like AWS, Google Cloud, or Azure to dynamically provision resources based on demand.
312
+
313
+ 79
314
+ 00:05:59,000 --> 00:06:05,000
315
+ By following these best practices, you can write code that is scalable, maintainable, and capable
316
+
317
+ 80
318
+ 00:06:05,000 --> 00:06:10,000
319
+ of handling rows without compromising performance or reliability.
320
+
321
+ 81
322
+ 00:06:11,000 --> 00:06:15,000
323
+ And how we can identify and address scalability challenges.
324
+
325
+ 82
326
+ 00:06:16,000 --> 00:06:22,000
327
+ It identifies scalability challenges is crucial for ensuring that your software can handle increased
328
+
329
+ 83
330
+ 00:06:22,000 --> 00:06:23,000
331
+ demand.
332
+
333
+ 84
334
+ 00:06:23,000 --> 00:06:27,000
335
+ Here are some common scalability challenges and how to address them.
336
+
337
+ 85
338
+ 00:06:28,000 --> 00:06:29,000
339
+ Performance bottlenecks.
340
+
341
+ 86
342
+ 00:06:30,000 --> 00:06:34,000
343
+ Identify areas of your application where performance is degrading under load.
344
+
345
+ 87
346
+ 00:06:35,000 --> 00:06:43,000
347
+ This can be due to inefficient algorithms, slow database queries, or resource intensive operations.
348
+
349
+ 88
350
+ 00:06:43,000 --> 00:06:49,000
351
+ Use profiling tools to pinpoint bottlenecks and optimize the code where necessary.
352
+
353
+ 89
354
+ 00:06:50,000 --> 00:06:57,000
355
+ Profiling tools are software utilities used to analyze the performance of computer programs, typically
356
+
357
+ 90
358
+ 00:06:57,000 --> 00:07:04,000
359
+ by measuring various aspects of their execution, such as CPU usage, memory usage, and function call
360
+
361
+ 91
362
+ 00:07:04,000 --> 00:07:05,000
363
+ frequencies.
364
+
365
+ 92
366
+ 00:07:06,000 --> 00:07:09,000
367
+ Let me share with you some examples of profilers.
368
+
369
+ 93
370
+ 00:07:09,000 --> 00:07:15,000
371
+ CPU profilers like G and you gprof perf.
372
+
373
+ 94
374
+ 00:07:15,000 --> 00:07:16,000
375
+ Visual studio profiler.
376
+
377
+ 95
378
+ 00:07:17,000 --> 00:07:18,000
379
+ Memory profilers.
380
+
381
+ 96
382
+ 00:07:19,000 --> 00:07:20,000
383
+ Valgrind.
384
+
385
+ 97
386
+ 00:07:20,000 --> 00:07:21,000
387
+ Dot memory.
388
+
389
+ 98
390
+ 00:07:21,000 --> 00:07:21,000
391
+ Xcode.
392
+
393
+ 99
394
+ 00:07:21,000 --> 00:07:22,000
395
+ Instruments.
396
+
397
+ 100
398
+ 00:07:22,000 --> 00:07:26,000
399
+ Profilers for web applications like Chrome DevTools.
400
+
401
+ 101
402
+ 00:07:26,000 --> 00:07:34,000
403
+ Firefox profiler, and profilers for specific platforms like for example, Java profilers Java flight
404
+
405
+ 102
406
+ 00:07:34,000 --> 00:07:36,000
407
+ recorder Visualvm.
408
+
409
+ 103
410
+ 00:07:37,000 --> 00:07:42,000
411
+ In case you have any questions, please feel free to post your questions below the video and I will
412
+
413
+ 104
414
+ 00:07:42,000 --> 00:07:43,000
415
+ be happy to answer.
416
+
417
+ 105
418
+ 00:07:44,000 --> 00:07:50,000
419
+ The next scalability challenge to identify is database scaling issues.
420
+
421
+ 106
422
+ 00:07:50,000 --> 00:07:57,000
423
+ As your application grows, your database may struggle to handle the increased volume of data and queries.
424
+
425
+ 107
426
+ 00:07:57,000 --> 00:08:04,000
427
+ Consider strategies such as database sharding, replication, or using distributed databases to distribute
428
+
429
+ 108
430
+ 00:08:04,000 --> 00:08:07,000
431
+ the workload across multiple nodes.
432
+
433
+ 109
434
+ 00:08:07,000 --> 00:08:09,000
435
+ Single point of failure.
436
+
437
+ 110
438
+ 00:08:10,000 --> 00:08:16,000
439
+ Identify any components of your system that represent single points of failure, such as single server
440
+
441
+ 111
442
+ 00:08:16,000 --> 00:08:22,000
443
+ or service, that, if it fails, would bring down the entire system.
444
+
445
+ 112
446
+ 00:08:22,000 --> 00:08:29,000
447
+ Implement redundancy and failover mechanisms to ensure high availability and reliability.
448
+
449
+ 113
450
+ 00:08:30,000 --> 00:08:32,000
451
+ An efficient resource utilization.
452
+
453
+ 114
454
+ 00:08:32,000 --> 00:08:41,000
455
+ Monitor resource usage across your system, including CPU, memory, disk, I, O, and network bandwidth.
456
+
457
+ 115
458
+ 00:08:42,000 --> 00:08:50,000
459
+ Look for areas where resources are underutilized or over utilized and optimize resource allocation accordingly.
460
+
461
+ 116
462
+ 00:08:51,000 --> 00:08:57,000
463
+ Consider using autoscaling to automatically adjust resource capacity based on demand.
464
+
465
+ 117
466
+ 00:08:58,000 --> 00:09:00,000
467
+ Purely designed APIs.
468
+
469
+ 118
470
+ 00:09:00,000 --> 00:09:08,000
471
+ If your APIs are not designed for scalability, they can become a bottleneck as traffic increases.
472
+
473
+ 119
474
+ 00:09:08,000 --> 00:09:14,000
475
+ Design your APIs to be efficient, stateless, and horizontally scalable.
476
+
477
+ 120
478
+ 00:09:14,000 --> 00:09:21,000
479
+ Use techniques such as caching, rate limiting, and pagination to improve performance and reliability.
480
+
481
+ 121
482
+ 00:09:22,000 --> 00:09:25,000
483
+ Data consistency and replication.
484
+
485
+ 122
486
+ 00:09:25,000 --> 00:09:31,000
487
+ Maintaining data consistency across distributed systems can be challenging.
488
+
489
+ 123
490
+ 00:09:31,000 --> 00:09:39,000
491
+ Choose an appropriate consistency model for your application, such as eventual consistency or strong
492
+
493
+ 124
494
+ 00:09:39,000 --> 00:09:46,000
495
+ consistency, and implement replication and synchronization mechanisms to ensure data integrity.
496
+
497
+ 125
498
+ 00:09:46,000 --> 00:09:48,000
499
+ Communication overhead.
500
+
501
+ 126
502
+ 00:09:48,000 --> 00:09:54,000
503
+ As your system scales, communication between components can become a bottleneck.
504
+
505
+ 127
506
+ 00:09:54,000 --> 00:10:01,000
507
+ Minimize unnecessary communication and consider using asynchronous messaging or event driven architectures
508
+
509
+ 128
510
+ 00:10:01,000 --> 00:10:05,000
511
+ to decouple components and improve scalability.
512
+
513
+ 129
514
+ 00:10:06,000 --> 00:10:13,000
515
+ Inadequate testing and monitoring ensure that your testing and monitoring practices are robust enough
516
+
517
+ 130
518
+ 00:10:13,000 --> 00:10:16,000
519
+ to detect scalability issues before they impact users.
520
+
521
+ 131
522
+ 00:10:17,000 --> 00:10:24,000
523
+ Perform load testing to simulate high traffic scenarios, and monitor key performance metrics to identify
524
+
525
+ 132
526
+ 00:10:24,000 --> 00:10:26,000
527
+ and address scalability challenges proactively.
528
+
529
+ 133
530
+ 00:10:27,000 --> 00:10:33,000
531
+ By proactively identifying and addressing scalability challenges, you can ensure that your software
532
+
533
+ 134
534
+ 00:10:33,000 --> 00:10:39,000
535
+ can scale effectively to meet the needs of your users as your application grows.
536
+
537
+ 135
538
+ 00:10:40,000 --> 00:10:45,000
539
+ Is it possible for us to identify scalability challenges during code review and how?
540
+
541
+ 136
542
+ 00:10:46,000 --> 00:10:53,000
543
+ During a code review, it's essential to keep an eye out for potential scalability challenges that could
544
+
545
+ 137
546
+ 00:10:53,000 --> 00:10:56,000
547
+ affect the performance and scalability of the software.
548
+
549
+ 138
550
+ 00:10:57,000 --> 00:11:01,000
551
+ Let's review some things to look for during the code review.
552
+
553
+ 139
554
+ 00:11:02,000 --> 00:11:05,000
555
+ Resource intensive operations.
556
+
557
+ 140
558
+ 00:11:05,000 --> 00:11:13,000
559
+ Check for any operations that could be resource intensive, such as nested loops, excessive memory
560
+
561
+ 141
562
+ 00:11:13,000 --> 00:11:16,000
563
+ allocations, or inefficient algorithms.
564
+
565
+ 142
566
+ 00:11:16,000 --> 00:11:23,000
567
+ This can lead to poor performance and scalability issues, especially as the volume of data or traffic
568
+
569
+ 143
570
+ 00:11:23,000 --> 00:11:24,000
571
+ increases.
572
+
573
+ 144
574
+ 00:11:24,000 --> 00:11:26,000
575
+ Database queries.
576
+
577
+ 145
578
+ 00:11:27,000 --> 00:11:32,000
579
+ Review database queries to ensure they are optimized and indexed properly.
580
+
581
+ 146
582
+ 00:11:32,000 --> 00:11:39,000
583
+ Look for queries that retrieve large amounts of data or perform unnecessary joins or calculations.
584
+
585
+ 147
586
+ 00:11:39,000 --> 00:11:47,000
587
+ Suggest improvements such as adding indexes, optimizing query logic, or using caching where appropriate.
588
+
589
+ 148
590
+ 00:11:48,000 --> 00:11:50,000
591
+ Concurrency and parallelism.
592
+
593
+ 149
594
+ 00:11:51,000 --> 00:11:56,000
595
+ Evaluate how the code handles concurrent requests and parallel processing.
596
+
597
+ 150
598
+ 00:11:56,000 --> 00:12:03,000
599
+ Look for potential race conditions that locks or bottlenecks in synchronization mechanisms.
600
+
601
+ 151
602
+ 00:12:03,000 --> 00:12:11,000
603
+ Ensure that code is designed to scale horizontally by utilizing asynchronous processing and non-blocking
604
+
605
+ 152
606
+ 00:12:11,000 --> 00:12:13,000
607
+ input output, where applicable.
608
+
609
+ 153
610
+ 00:12:14,000 --> 00:12:21,000
611
+ Scalability patterns assess whether the code follows established scalability patterns and best practices
612
+
613
+ 154
614
+ 00:12:21,000 --> 00:12:26,000
615
+ such as load balancing, caching, sharding, or partitioning.
616
+
617
+ 155
618
+ 00:12:26,000 --> 00:12:33,000
619
+ Look for opportunities to improve scalability by decoupling components, implementing distributed architectures,
620
+
621
+ 156
622
+ 00:12:33,000 --> 00:12:36,000
623
+ or using scalable data storage solutions.
624
+
625
+ 157
626
+ 00:12:36,000 --> 00:12:38,000
627
+ Resource management.
628
+
629
+ 158
630
+ 00:12:38,000 --> 00:12:44,000
631
+ Check how the code manages resources such as memory connections and threads.
632
+
633
+ 159
634
+ 00:12:44,000 --> 00:12:50,000
635
+ Look for potential leaks or inefficiencies in resource allocation and deallocation.
636
+
637
+ 160
638
+ 00:12:51,000 --> 00:12:58,000
639
+ Ensures that resources are released promptly to prevent resource exhaustion and degradation of performance
640
+
641
+ 161
642
+ 00:12:58,000 --> 00:12:59,000
643
+ over time.
644
+
645
+ 162
646
+ 00:13:00,000 --> 00:13:03,000
647
+ Monitoring and instrumentation.
648
+
649
+ 163
650
+ 00:13:03,000 --> 00:13:10,000
651
+ Evaluate whether the code includes adequate monitoring and instrumentation for tracking performance
652
+
653
+ 164
654
+ 00:13:10,000 --> 00:13:13,000
655
+ metrics and identifying scalability issues.
656
+
657
+ 165
658
+ 00:13:13,000 --> 00:13:20,000
659
+ Look for logging statements, error handling, and metrics collection mechanisms that provide insights
660
+
661
+ 166
662
+ 00:13:20,000 --> 00:13:23,000
663
+ into the behavior of the system under load.
664
+
665
+ 167
666
+ 00:13:24,000 --> 00:13:26,000
667
+ Input, validation and sanitization.
668
+
669
+ 168
670
+ 00:13:27,000 --> 00:13:33,000
671
+ Verify that the code properly validates and sanitizes user input to prevent security vulnerabilities
672
+
673
+ 169
674
+ 00:13:33,000 --> 00:13:36,000
675
+ and denial of service attacks.
676
+
677
+ 170
678
+ 00:13:37,000 --> 00:13:43,000
679
+ Inadequate input validation can lead to performance degradation or system instability under certain
680
+
681
+ 171
682
+ 00:13:43,000 --> 00:13:44,000
683
+ conditions.
684
+
685
+ 172
686
+ 00:13:45,000 --> 00:13:52,000
687
+ Documentation and comments ensures that the code is well documented and includes comments that explain
688
+
689
+ 173
690
+ 00:13:52,000 --> 00:13:57,000
691
+ the rationale behind design decisions and potential scalability considerations.
692
+
693
+ 174
694
+ 00:13:58,000 --> 00:14:04,000
695
+ Look for documentation on performance characteristics, scalability limitations, and recommended tuning
696
+
697
+ 175
698
+ 00:14:04,000 --> 00:14:05,000
699
+ parameters.
700
+
701
+ 176
702
+ 00:14:06,000 --> 00:14:12,000
703
+ By actively looking for these scalability challenges during code review, you can help identify potential
704
+
705
+ 177
706
+ 00:14:12,000 --> 00:14:18,000
707
+ issues early in the development process and ensure that the software is designed and implemented to
708
+
709
+ 178
710
+ 00:14:18,000 --> 00:14:21,000
711
+ scale effectively as the demand grows.
712
+
713
+ 179
714
+ 00:14:22,000 --> 00:14:24,000
715
+ That's all what I wanted to review with you today.
716
+
717
+ 180
718
+ 00:14:24,000 --> 00:14:28,000
719
+ In this lesson, let's recap what we have learned today.
720
+
721
+ 181
722
+ 00:14:29,000 --> 00:14:32,000
723
+ We learned what scalability and software development means.
724
+
725
+ 182
726
+ 00:14:32,000 --> 00:14:35,000
727
+ I explained best practices for scalable code.
728
+
729
+ 183
730
+ 00:14:36,000 --> 00:14:42,000
731
+ Also, now you know how to identify and address scalability challenges in your code.
732
+
733
+ 184
734
+ 00:14:42,000 --> 00:14:48,000
735
+ And we learned how to identify scalability challenges on early stages during the code review.
736
+
737
+ 185
738
+ 00:14:49,000 --> 00:14:50,000
739
+ That's all for this lesson.
740
+
741
+ 186
742
+ 00:14:51,000 --> 00:14:52,000
743
+ Thanks a lot for your attention.
744
+
745
+ 187
746
+ 00:14:52,000 --> 00:14:56,000
747
+ Have a great day and see you in the next lesson.
748
+
109 - Advanced Code Review Strategies/external-links.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+
2
+ 001 All-documents-shared-in-the-lesson
3
+ https://drive.google.com/drive/folders/174RXHMxjVbVNg4DSQ7nxOQAK4I5StLdp?usp=sharing
4
+
5
+ 002 Coding-Standards-and-Guidelines
6
+ https://drive.google.com/file/d/1q0-V9_574YNKpCB9W_UZm9F8Vk5sYZuR/view?usp=sharing
11 - Enumerations in Java/001 Enumerations in Java_en.srt ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:00,000 --> 00:00:03,000
3
+ Hello team, In this lesson we
4
+ will learn what enumerations are and
5
+
6
+ 2
7
+ 00:00:03,000 --> 00:00:06,000
8
+ how we can use them in
9
+ Java. We are also going to
10
+
11
+ 3
12
+ 00:00:06,000 --> 00:00:10,000
13
+ discuss how to declare enum and
14
+ how we can compare them. I
15
+
16
+ 4
17
+ 00:00:10,000 --> 00:00:13,000
18
+ will show you how enums can
19
+ have properties and custom methods. But
20
+
21
+ 5
22
+ 00:00:13,000 --> 00:00:17,000
23
+ first of all – what is
24
+ Enum type? An enum type is
25
+
26
+ 6
27
+ 00:00:17,000 --> 00:00:20,000
28
+ a special data type that enables
29
+ for a variable to be a
30
+
31
+ 7
32
+ 00:00:20,000 --> 00:00:24,000
33
+ set of predefined constants. The variable
34
+ of enum type always must be
35
+
36
+ 8
37
+ 00:00:24,000 --> 00:00:28,000
38
+ equal to one of the values
39
+ that have been predefined for it.
40
+
41
+ 9
42
+ 00:00:28,000 --> 00:00:32,000
43
+ When do we need enum types?
44
+ We need enum types to express
45
+
46
+ 10
47
+ 00:00:32,000 --> 00:00:36,000
48
+ some set of values that are
49
+ not infinite. You need to use
50
+
51
+ 11
52
+ 00:00:36,000 --> 00:00:40,000
53
+ enum for data sets where you
54
+ know all possible values at compile
55
+
56
+ 12
57
+ 00:00:40,000 --> 00:00:46,000
58
+ time. For example, seasons of the
59
+ year – WINTER, SPRING, SUMMER, FALL.
60
+
61
+ 13
62
+ 00:00:46,000 --> 00:00:48,000
63
+ There are very low chances that
64
+ you will need to add additional
65
+
66
+ 14
67
+ 00:00:48,000 --> 00:00:53,000
68
+ seasons in your program because no
69
+ other exists. Or let’s review real
70
+
71
+ 15
72
+ 00:00:53,000 --> 00:00:57,000
73
+ life scenario: together with students we
74
+ implemented simple truth or dare game
75
+
76
+ 16
77
+ 00:00:57,000 --> 00:01:01,000
78
+ for android. There are thousands of
79
+ cards in the game. Each card
80
+
81
+ 17
82
+ 00:01:01,000 --> 00:01:05,000
83
+ has its type and it can
84
+ be either TRUTH or DARE. So,
85
+
86
+ 18
87
+ 00:01:05,000 --> 00:01:11,000
88
+ in our program CardType will be
89
+ enumeration. Does it make sense? To
90
+
91
+ 19
92
+ 00:01:11,000 --> 00:01:15,000
93
+ make it clearer - let’s take
94
+ a look at examples. To create
95
+
96
+ 20
97
+ 00:01:15,000 --> 00:01:19,000
98
+ Enum make mouse right click on
99
+ the package and select Enum. Here
100
+
101
+ 21
102
+ 00:01:19,000 --> 00:01:24,000
103
+ you can specify Enum name and
104
+ package. I’ve already created Enums to
105
+
106
+ 22
107
+ 00:01:24,000 --> 00:01:29,000
108
+ save our time during the lesson.
109
+ Here I have ‘Priority’ enum type.
110
+
111
+ 23
112
+ 00:01:29,000 --> 00:01:33,000
113
+ In my program I’m going to
114
+ have only three types of priority,
115
+
116
+ 24
117
+ 00:01:33,000 --> 00:01:37,000
118
+ they are: high, medium, and low.
119
+ I want to draw your attention
120
+
121
+ 25
122
+ 00:01:37,000 --> 00:01:41,000
123
+ to the code style. Taking
124
+ into account that all enum values
125
+
126
+ 26
127
+ 00:01:41,000 --> 00:01:45,000
128
+ are constant we use capital letters
129
+ according to java naming convention. Let’s
130
+
131
+ 27
132
+ 00:01:45,000 --> 00:01:49,000
133
+ take a look how I use
134
+ this enum. I can declare variable
135
+
136
+ 28
137
+ 00:01:49,000 --> 00:01:54,000
138
+ of type Priority. As I mentioned
139
+ before - the variable of enum
140
+
141
+ 29
142
+ 00:01:54,000 --> 00:01:57,000
143
+ type always must be equal to
144
+ one of the values that have
145
+
146
+ 30
147
+ 00:01:57,000 --> 00:02:01,000
148
+ been predefined for it. You remember
149
+ that one of the data types
150
+
151
+ 31
152
+ 00:02:01,000 --> 00:02:04,000
153
+ that can be used in switch
154
+ statement – is enum type. And
155
+
156
+ 32
157
+ 00:02:04,000 --> 00:02:08,000
158
+ here is how you can use
159
+ it. Based on the value of
160
+
161
+ 33
162
+ 00:02:08,000 --> 00:02:13,000
163
+ ‘priority’ variable during the runtime, different
164
+ case block will be executed. In
165
+
166
+ 34
167
+ 00:02:13,000 --> 00:02:17,000
168
+ this particular case when the value
169
+ of our priority variable is HIGH
170
+
171
+ 35
172
+ 00:02:17,000 --> 00:02:20,000
173
+ – this block will be executed.
174
+ So now you know how to
175
+
176
+ 36
177
+ 00:02:20,000 --> 00:02:24,000
178
+ declare custom enum type and how
179
+ to create variable of enum type
180
+
181
+ 37
182
+ 00:02:24,000 --> 00:02:27,000
183
+ to use it in the program.
184
+ Let’s move on. One more option
185
+
186
+ 38
187
+ 00:02:27,000 --> 00:02:32,000
188
+ to initialize enum variable. Let’s pretend
189
+ you are dealing with user input
190
+
191
+ 39
192
+ 00:02:32,000 --> 00:02:35,000
193
+ and you need to create enum
194
+ based on the user input. You
195
+
196
+ 40
197
+ 00:02:35,000 --> 00:02:40,000
198
+ can use ‘valueOf’ method to initialize
199
+ enum variable. Just use enum type
200
+
201
+ 41
202
+ 00:02:40,000 --> 00:02:44,000
203
+ name, call valueOf method and pass
204
+ string to this method. In case
205
+
206
+ 42
207
+ 00:02:44,000 --> 00:02:48,000
208
+ there are no enum value for
209
+ the string you entered – IllegalArgumentException
210
+
211
+ 43
212
+ 00:02:48,000 --> 00:02:53,000
213
+ will be thrown. You see when
214
+ I pass ‘high’ in lowercase exception
215
+
216
+ 44
217
+ 00:02:53,000 --> 00:02:57,000
218
+ is thrown. Take this into consideration
219
+ while doing your homework. To compare
220
+
221
+ 45
222
+ 00:02:57,000 --> 00:03:02,000
223
+ enumerations, you can use ‘equals to’
224
+ operator. And again, you remember that
225
+
226
+ 46
227
+ 00:03:02,000 --> 00:03:07,000
228
+ Enumeration is not primitive type of
229
+ data. Thus, you might think that
230
+
231
+ 47
232
+ 00:03:07,000 --> 00:03:12,000
233
+ you should use ‘equals’ method to
234
+ compare enums. Not necessarily. For example,
235
+
236
+ 48
237
+ 00:03:12,000 --> 00:03:15,000
238
+ in this case we will get
239
+ false as expected. And in this
240
+
241
+ 49
242
+ 00:03:15,000 --> 00:03:20,000
243
+ case, we will get true as
244
+ expected. Why? Because each enum variable
245
+
246
+ 50
247
+ 00:03:20,000 --> 00:03:23,000
248
+ has its own ordinal. Take a
249
+ look here one more time: you
250
+
251
+ 51
252
+ 00:03:23,000 --> 00:03:27,000
253
+ have set of values which are
254
+ known during the compilation. And they
255
+
256
+ 52
257
+ 00:03:27,000 --> 00:03:31,000
258
+ are listed in the strict sequence.
259
+ The HIGH has zero ordinal, the
260
+
261
+ 53
262
+ 00:03:31,000 --> 00:03:36,000
263
+ MEDIUM - one and the LOW
264
+ - two. Taking into account each
265
+
266
+ 54
267
+ 00:03:36,000 --> 00:03:40,000
268
+ enum value has its own ordinal
269
+ we can easily compare them via
270
+
271
+ 55
272
+ 00:03:40,000 --> 00:03:44,000
273
+ ‘equals to’ operator. You can use
274
+ ‘ordinal()’ method to get ordinal of
275
+
276
+ 56
277
+ 00:03:44,000 --> 00:03:48,000
278
+ each enum value. In some cases
279
+ you might want to iterate over
280
+
281
+ 57
282
+ 00:03:48,000 --> 00:03:53,000
283
+ all values from specific enum type.
284
+ Just be aware that each enum
285
+
286
+ 58
287
+ 00:03:53,000 --> 00:03:58,000
288
+ type has ‘values()’ method that returns
289
+ array of enum values. You can
290
+
291
+ 59
292
+ 00:03:58,000 --> 00:04:02,000
293
+ iterate over this array as you
294
+ wish. You already know all
295
+
296
+ 60
297
+ 00:04:02,000 --> 00:04:07,000
298
+ iteration statements in Java. And now
299
+ probably the most interesting part. Each
300
+
301
+ 61
302
+ 00:04:07,000 --> 00:04:11,000
303
+ enum value may have its own
304
+ properties and methods. Let’s take a
305
+
306
+ 62
307
+ 00:04:11,000 --> 00:04:15,000
308
+ look at this ‘Month’ enum type.
309
+ We have next values: January, February,
310
+
311
+ 63
312
+ 00:04:15,000 --> 00:04:20,000
313
+ March and so on. The list
314
+ of constants is always terminated by
315
+
316
+ 64
317
+ 00:04:20,000 --> 00:04:24,000
318
+ a semicolon. Definition of properties and
319
+ methods always should go after the
320
+
321
+ 65
322
+ 00:04:24,000 --> 00:04:29,000
323
+ list of constants. And here I
324
+ declared a property – daysAmount. Each
325
+
326
+ 66
327
+ 00:04:29,000 --> 00:04:34,000
328
+ of these months should have this
329
+ property of int type. After that
330
+
331
+ 67
332
+ 00:04:34,000 --> 00:04:38,000
333
+ I declare special method to create
334
+ each enum. This special method is
335
+
336
+ 68
337
+ 00:04:38,000 --> 00:04:43,000
338
+ called ‘constructor’. It is used to
339
+ construct objects. Very soon we will
340
+
341
+ 69
342
+ 00:04:43,000 --> 00:04:47,000
343
+ get to the object-oriented programming and
344
+ I will explain you in detail
345
+
346
+ 70
347
+ 00:04:47,000 --> 00:04:51,000
348
+ what constructor is. Also ignore this
349
+ ‘private’ modifiers as of now, we
350
+
351
+ 71
352
+ 00:04:51,000 --> 00:04:55,000
353
+ will discuss them during the OOP
354
+ topic when we will talk about
355
+
356
+ 72
357
+ 00:04:55,000 --> 00:04:59,000
358
+ encapsulation. Here you can see that
359
+ I can pass int value to
360
+
361
+ 73
362
+ 00:04:59,000 --> 00:05:05,000
363
+ constructor, and after I passed this
364
+ value, I initialize ‘daysAmount’ property for
365
+
366
+ 74
367
+ 00:05:05,000 --> 00:05:11,000
368
+ each enum. Here in parentheses I
369
+ call constructor and pass int. Similar
370
+
371
+ 75
372
+ 00:05:11,000 --> 00:05:15,000
373
+ to the method call, I call
374
+ constructor and pass value to it.
375
+
376
+ 76
377
+ 00:05:15,000 --> 00:05:20,000
378
+ So, for January, I pass thirty-one
379
+ and daysAmount is initialized with thirty-one.
380
+
381
+ 77
382
+ 00:05:20,000 --> 00:05:24,000
383
+ And you see ‘this’ keyword. This
384
+ is new to you. That means
385
+
386
+ 78
387
+ 00:05:24,000 --> 00:05:30,000
388
+ for THIS enum, in this specific
389
+ case for JANUARY, the daysAmount will
390
+
391
+ 79
392
+ 00:05:30,000 --> 00:05:34,000
393
+ be equal to thirty-one. And you
394
+ see that local variable name is
395
+
396
+ 80
397
+ 00:05:34,000 --> 00:05:42,000
398
+ also ‘daysAmount’. But ‘this.daysAmount’ and method
399
+ argument ‘daysAmount’ are different variables. Because
400
+
401
+ 81
402
+ 00:05:42,000 --> 00:05:50,000
403
+ ‘this.daysAmount’ is this variable and ‘daysAmount’
404
+ is just this local variable.
405
+
406
+ 82
407
+ 00:05:50,000 --> 00:05:53,000
408
+ For February I
409
+ pass twenty-eight, and daysAmount is initialized
410
+
411
+ 83
412
+ 00:05:53,000 --> 00:05:59,000
413
+ with twenty-eight value. For THIS enum,
414
+ days amount will be twenty-eight. Then,
415
+
416
+ 84
417
+ 00:05:59,000 --> 00:06:03,000
418
+ I can declare that each enum
419
+ has its own behavior. Namely: each
420
+
421
+ 85
422
+ 00:06:03,000 --> 00:06:08,000
423
+ month can tell me how many
424
+ days it has. ‘this’ keyword means
425
+
426
+ 86
427
+ 00:06:08,000 --> 00:06:13,000
428
+ THIS particular month. It can be
429
+ January, February, March or any other.
430
+
431
+ 87
432
+ 00:06:13,000 --> 00:06:17,000
433
+ Let’s take a look how we
434
+ can use properties and methods of
435
+
436
+ 88
437
+ 00:06:17,000 --> 00:06:21,000
438
+ Enum constants. We can call method
439
+ getDaysAmount for January enum variable. And
440
+
441
+ 89
442
+ 00:06:21,000 --> 00:06:26,000
443
+ for THIS month, for January, this
444
+ is thirty-one. Hope it is clear
445
+
446
+ 90
447
+ 00:06:26,000 --> 00:06:30,000
448
+ now. That’s it. Let’s take a
449
+ look at what we have learned
450
+
451
+ 91
452
+ 00:06:30,000 --> 00:06:35,000
453
+ from this lesson. From this lesson
454
+ we learned what enum types are.
455
+
456
+ 92
457
+ 00:06:35,000 --> 00:06:40,000
458
+ We can initialize enum variables, know how
459
+ to compare them. Also we learned how
460
+
461
+ 93
462
+ 00:06:40,000 --> 00:06:44,000
463
+ to iterate over all constants of
464
+ specific enum type and learned that
465
+
466
+ 94
467
+ 00:06:44,000 --> 00:06:48,000
468
+ enum type can have custom properties and
469
+ methods. Now you know everything you need
470
+
471
+ 95
472
+ 00:06:48,000 --> 00:06:52,000
473
+ to know to complete your homework.
474
+ Let’s take a look at the
475
+
476
+ 96
477
+ 00:06:52,000 --> 00:06:57,000
478
+ task. You need to implement simple console
479
+ application with two enums. Try to implement
480
+
481
+ 97
482
+ 00:06:57,000 --> 00:07:01,000
483
+ it by yourself and after that
484
+ take a look at my solution.
485
+
486
+ 98
487
+ 00:07:01,000 --> 00:07:04,000
488
+ And as always – you are welcome
489
+ to ask questions in case you have
490
+
491
+ 99
492
+ 00:07:04,000 --> 00:07:08,000
493
+ any. Thank you for your attention.
494
+ See you in the next lesson.
495
+
11 - Enumerations in Java/001 Homework.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://docs.google.com/document/d/1I8amzWwGUOKDJRz_x857qYd76wpJKz1WmQlUnsgcj3M/edit?usp=sharing
11 - Enumerations in Java/001 Solution-Message-type-priority.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/enumerations/hw
11 - Enumerations in Java/001 Source-code-of-the-example-used-in-the-lesson.url ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ [InternetShortcut]
2
+ URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/enumerations
11 - Enumerations in Java/external-links.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+
2
+ 001 Homework
3
+ https://docs.google.com/document/d/1I8amzWwGUOKDJRz_x857qYd76wpJKz1WmQlUnsgcj3M/edit?usp=sharing
4
+
5
+ 001 Source-code-of-the-example-used-in-the-lesson
6
+ https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/enumerations
7
+
8
+ 001 Solution-Message-type-priority
9
+ https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/enumerations/hw
110 - Metrics & KPIs to Monitor and Control Software Development Process/001 Why this section is in this course and why it is important.html ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Why this section is in this course and why it is important</title>
7
+
8
+ <style>
9
+ * {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+ body {
15
+ font-family: var(--font-stack-text);
16
+ font-weight: 400;
17
+ line-height: 1.4;
18
+ font-size: 1.6rem;
19
+ color: #2d2f31;
20
+ }
21
+ .container {
22
+ position: relative;
23
+ height: 100%;
24
+ overflow-y: auto;
25
+ }
26
+ .content {
27
+ padding: 3.2rem 4.8rem;
28
+ word-break: break-word;
29
+ max-width: 69.6rem;
30
+ margin: 0 auto;
31
+ }
32
+ .heading {
33
+ margin-bottom: 24px;
34
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", Helvetica, Arial, sans-serif,
35
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
36
+ font-weight: 700;
37
+ line-height: 1.2;
38
+ letter-spacing: 0;
39
+ font-size: 32px;
40
+ max-width: 36em;
41
+ }
42
+ .article-asset-container {
43
+ padding: 2.4rem;
44
+ }
45
+ .article-asset-container p {
46
+ font-size: 19px;
47
+ }
48
+ code {
49
+ background-color: #fff;
50
+ border: 1px solid #d1d7dc;
51
+ color: #b4690e;
52
+ font-size: 80%;
53
+ padding: 0.2rem 0.4rem;
54
+ font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;
55
+ }
56
+ p {
57
+ font-weight: 400;
58
+ }
59
+ </style>
60
+ </head>
61
+ <body>
62
+ <div class="container">
63
+ <div class="content">
64
+ <div class="heading">Why this section is in this course and why it is important</div>
65
+ <div class="article-asset-container"><p>This section is included in the course for Software Developers, Senior Software Engineers, Technical Leads, and Software Architects to emphasize the significance of metrics, Key Performance Indicators (KPIs), and Objectives and Key Results (OKR) in the software development lifecycle. Understanding and using these metrics is crucial for effective project management and continuous improvement.</p><p>Metrics provide measurable insights into various aspects of software development, such as the efficiency of the development process, the quality of the code, and the effectiveness of testing. By delving into software development, build, release, and QA metrics, professionals can gain a comprehensive understanding of the entire development pipeline.</p><p>For Technical Leads and Software Architects, these metrics aid in making informed decisions about architectural choices, resource allocation, and overall project planning. Senior Software Engineers and Software Developers can use metrics to assess the impact of their code changes, identify areas for optimization, and ensure the overall health of the software.</p><p>Incorporating KPIs and OKRs into the discussion highlights the importance of aligning individual and team goals with the broader organizational objectives. This alignment fosters a more strategic approach to software development, ensuring that efforts contribute to the overall success of the business.</p><p>This section is also crucial for Software Developers, Senior Software Engineers, Technical Leads, and Software Architects as it emphasizes the importance of metrics, Key Performance Indicators (KPIs), and Objectives and Key Results (OKR) in scaling software development without compromising quality.</p><p>As teams and projects grow, maintaining the same level of quality becomes challenging. Metrics play a vital role in managing scalability by providing insights into performance bottlenecks, resource utilization, and potential areas of improvement. Learning how to use metrics effectively enables professionals to identify and address issues that may arise as the scope and complexity of projects increase.</p><p>For Technical Leads and Software Architects, understanding these metrics is instrumental in designing scalable architectures and making informed decisions about infrastructure and technology choices. Senior Software Engineers and Software Developers benefit by optimizing their code and development processes to ensure scalability without sacrificing code quality.</p><p>In conclusion, this section is essential for professionals at different levels as it equips them with the knowledge and tools needed to measure, analyze, and improve key aspects of the software development process, ultimately leading to more efficient and successful projects.</p></div>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
110 - Metrics & KPIs to Monitor and Control Software Development Process/002 Metric, KPI & OKR_en.srt ADDED
@@ -0,0 +1,1224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello team!
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ Today we are going to have interesting and very important lesson because today we are going to learn
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:16,000
11
+ such key concepts as metrics, KPIs and OKRs.
12
+
13
+ 4
14
+ 00:00:17,000 --> 00:00:21,000
15
+ We are going to start the lesson from learning what a metric is.
16
+
17
+ 5
18
+ 00:00:21,000 --> 00:00:28,000
19
+ To understand the concept better, we will discuss examples of metrics and use cases when it is recommended
20
+
21
+ 6
22
+ 00:00:28,000 --> 00:00:32,000
23
+ to use metrics in the similar way, I will explain KPIs.
24
+
25
+ 7
26
+ 00:00:32,000 --> 00:00:36,000
27
+ We'll review KPI examples together with use cases.
28
+
29
+ 8
30
+ 00:00:36,000 --> 00:00:42,000
31
+ When it is recommended to use KPIs, then we'll compare metrics and KPIs.
32
+
33
+ 9
34
+ 00:00:42,000 --> 00:00:46,000
35
+ This will help you to understand better the difference between these concepts.
36
+
37
+ 10
38
+ 00:00:47,000 --> 00:00:50,000
39
+ After that we will learn what OKR is.
40
+
41
+ 11
42
+ 00:00:50,000 --> 00:00:57,000
43
+ We'll review examples and use cases and at the end of the lesson we'll compare KPI and OKR.
44
+
45
+ 12
46
+ 00:00:58,000 --> 00:00:59,000
47
+ Let's start our lesson.
48
+
49
+ 13
50
+ 00:01:00,000 --> 00:01:04,000
51
+ Let's start from learning the definition of a metric in project management.
52
+
53
+ 14
54
+ 00:01:04,000 --> 00:01:11,000
55
+ A metric is a measure used to assess and track various aspects of project's progress, performance,
56
+
57
+ 15
58
+ 00:01:11,000 --> 00:01:12,000
59
+ and success.
60
+
61
+ 16
62
+ 00:01:12,000 --> 00:01:20,000
63
+ Metrics provide quantifiable data that helps project managers and teams measure how well a project is,
64
+
65
+ 17
66
+ 00:01:20,000 --> 00:01:22,000
67
+ meeting its objectives and staying on schedule.
68
+
69
+ 18
70
+ 00:01:23,000 --> 00:01:29,000
71
+ Common project management metrics include completion time, budget adherence, resource utilization,
72
+
73
+ 19
74
+ 00:01:29,000 --> 00:01:32,000
75
+ task completion rates, and others.
76
+
77
+ 20
78
+ 00:01:32,000 --> 00:01:35,000
79
+ We are going to learn more of them during the course.
80
+
81
+ 21
82
+ 00:01:35,000 --> 00:01:42,000
83
+ Using metrics helps in making informed decisions, identifying areas for improvement, and ensuring
84
+
85
+ 22
86
+ 00:01:42,000 --> 00:01:46,000
87
+ that the project aligns with its goals.
88
+
89
+ 23
90
+ 00:01:46,000 --> 00:01:50,000
91
+ To understand it better, let's review some examples of metrics.
92
+
93
+ 24
94
+ 00:01:51,000 --> 00:01:53,000
95
+ Budget adherence.
96
+
97
+ 25
98
+ 00:01:53,000 --> 00:01:55,000
99
+ The metric can sound like this.
100
+
101
+ 26
102
+ 00:01:55,000 --> 00:02:00,000
103
+ Percentage of the budget used compared to the planned budget.
104
+
105
+ 27
106
+ 00:02:01,000 --> 00:02:08,000
107
+ Thus completion rate percentage of completed tasks compared to the total number of tasks.
108
+
109
+ 28
110
+ 00:02:08,000 --> 00:02:10,000
111
+ Defect density.
112
+
113
+ 29
114
+ 00:02:10,000 --> 00:02:17,000
115
+ Number of defects or errors per unit of work, for example per line of code or per user story.
116
+
117
+ 30
118
+ 00:02:17,000 --> 00:02:23,000
119
+ And what a user story is we are going to learn in other lessons, but in short, this is unit of work
120
+
121
+ 31
122
+ 00:02:23,000 --> 00:02:25,000
123
+ the delivery team works on.
124
+
125
+ 32
126
+ 00:02:26,000 --> 00:02:29,000
127
+ For scope changes, you can introduce the following metric.
128
+
129
+ 33
130
+ 00:02:29,000 --> 00:02:33,000
131
+ Number of changes or additions to the project scope.
132
+
133
+ 34
134
+ 00:02:33,000 --> 00:02:36,000
135
+ It can be evaluated in different measurement units.
136
+
137
+ 35
138
+ 00:02:36,000 --> 00:02:38,000
139
+ Hours added.
140
+
141
+ 36
142
+ 00:02:38,000 --> 00:02:40,000
143
+ Amount of tasks added.
144
+
145
+ 37
146
+ 00:02:40,000 --> 00:02:46,000
147
+ If your team used scrum methodology, then you can evaluate scope changes in story points amount.
148
+
149
+ 38
150
+ 00:02:46,000 --> 00:02:53,000
151
+ Later we will learn that story points are relative measurement of complexity that is used in scrum methodology.
152
+
153
+ 39
154
+ 00:02:54,000 --> 00:02:58,000
155
+ Of course, there are much more metrics than I've just listed.
156
+
157
+ 40
158
+ 00:02:58,000 --> 00:03:04,000
159
+ I will share with you my metrics libraries that help me deliver projects with investments of millions
160
+
161
+ 41
162
+ 00:03:04,000 --> 00:03:05,000
163
+ of American dollars.
164
+
165
+ 42
166
+ 00:03:05,000 --> 00:03:09,000
167
+ And you will learn all those metrics in this course.
168
+
169
+ 43
170
+ 00:03:09,000 --> 00:03:11,000
171
+ These are just examples.
172
+
173
+ 44
174
+ 00:03:11,000 --> 00:03:14,000
175
+ In order, you could understand what a metric is.
176
+
177
+ 45
178
+ 00:03:14,000 --> 00:03:16,000
179
+ When to use metrics.
180
+
181
+ 46
182
+ 00:03:16,000 --> 00:03:23,000
183
+ Metrics and project management are typically used throughout the project life cycle to assess progress,
184
+
185
+ 47
186
+ 00:03:23,000 --> 00:03:28,000
187
+ identify areas for improvement, and ensure that the project stays on track.
188
+
189
+ 48
190
+ 00:03:28,000 --> 00:03:35,000
191
+ I can provide you just some examples and use cases when you have to use metrics, but of course it is
192
+
193
+ 49
194
+ 00:03:35,000 --> 00:03:42,000
195
+ hard to name all variety of use cases when to use metrics and will learn more use cases during the course.
196
+
197
+ 50
198
+ 00:03:43,000 --> 00:03:44,000
199
+ Project planning.
200
+
201
+ 51
202
+ 00:03:44,000 --> 00:03:48,000
203
+ Use metrics during the planning phase to set realistic goals.
204
+
205
+ 52
206
+ 00:03:48,000 --> 00:03:53,000
207
+ Define project objectives and establish baselines for performance measurement.
208
+
209
+ 53
210
+ 00:03:54,000 --> 00:03:55,000
211
+ Project Kickoff.
212
+
213
+ 54
214
+ 00:03:55,000 --> 00:04:02,000
215
+ Implement metrics at the start of the project to establish a baseline for the key performance indicators,
216
+
217
+ 55
218
+ 00:04:02,000 --> 00:04:05,000
219
+ and provide a clear starting point for measurement.
220
+
221
+ 56
222
+ 00:04:06,000 --> 00:04:11,000
223
+ What key performance indicators are we will learn later in this lesson.
224
+
225
+ 57
226
+ 00:04:11,000 --> 00:04:13,000
227
+ Regular monitoring.
228
+
229
+ 58
230
+ 00:04:13,000 --> 00:04:20,000
231
+ Continuously use metrics during the execution phase to monitor project progress, track resource utilization
232
+
233
+ 59
234
+ 00:04:20,000 --> 00:04:24,000
235
+ and identify any deviations from the plan.
236
+
237
+ 60
238
+ 00:04:25,000 --> 00:04:26,000
239
+ Performance assessment.
240
+
241
+ 61
242
+ 00:04:26,000 --> 00:04:32,000
243
+ Utilize metrics for ongoing performance assessments to evaluate whether the project is meeting its objectives.
244
+
245
+ 62
246
+ 00:04:32,000 --> 00:04:36,000
247
+ Staying within budget and adhering to the schedule.
248
+
249
+ 63
250
+ 00:04:37,000 --> 00:04:38,000
251
+ Issue identification.
252
+
253
+ 64
254
+ 00:04:38,000 --> 00:04:45,000
255
+ Metrics are valuable for identifying and addressing issues promptly, allowing the project team to take
256
+
257
+ 65
258
+ 00:04:45,000 --> 00:04:48,000
259
+ corrective actions before they escalate.
260
+
261
+ 66
262
+ 00:04:48,000 --> 00:04:56,000
263
+ Being a project manager, it is similar to being a pilot in plain and metrics are your panel board that
264
+
265
+ 67
266
+ 00:04:56,000 --> 00:04:59,000
267
+ gives you information about the flight.
268
+
269
+ 68
270
+ 00:04:59,000 --> 00:05:07,000
271
+ Decision making metrics provide data driven insights that help in informed decision making.
272
+
273
+ 69
274
+ 00:05:07,000 --> 00:05:14,000
275
+ Use them when making adjustments to the project plan or when deciding on resource allocations.
276
+
277
+ 70
278
+ 00:05:15,000 --> 00:05:19,000
279
+ Post implementation evaluation after project completion.
280
+
281
+ 71
282
+ 00:05:19,000 --> 00:05:24,000
283
+ Analyze metrics to conduct a comprehensive Post implementation evaluation.
284
+
285
+ 72
286
+ 00:05:24,000 --> 00:05:30,000
287
+ This helps in identifying lessons learned and areas for improvement in future projects.
288
+
289
+ 73
290
+ 00:05:30,000 --> 00:05:37,000
291
+ Continuous improvement use metrics as part of continuous improvement process, using feedback and data
292
+
293
+ 74
294
+ 00:05:37,000 --> 00:05:42,000
295
+ from previous projects to refine project management processes and strategies.
296
+
297
+ 75
298
+ 00:05:42,000 --> 00:05:49,000
299
+ Communication metrics can be useful in communicating project status and performance to stakeholders,
300
+
301
+ 76
302
+ 00:05:49,000 --> 00:05:52,000
303
+ team members, and other relevant parties.
304
+
305
+ 77
306
+ 00:05:53,000 --> 00:06:00,000
307
+ During my course for project managers, I also teach students how to build efficient reports and specific
308
+
309
+ 78
310
+ 00:06:00,000 --> 00:06:04,000
311
+ data and measurements are always better than thousands of words.
312
+
313
+ 79
314
+ 00:06:05,000 --> 00:06:11,000
315
+ Project closure evaluate metrics during the project closure phase to assess overall success.
316
+
317
+ 80
318
+ 00:06:11,000 --> 00:06:15,000
319
+ Identify achievements and gather insights for future projects.
320
+
321
+ 81
322
+ 00:06:16,000 --> 00:06:22,000
323
+ Using metrics at these various stages ensures a proactive approach to project management, enabling
324
+
325
+ 82
326
+ 00:06:22,000 --> 00:06:29,000
327
+ teams to address issues early on, making informed decisions and continuously improve project delivery
328
+
329
+ 83
330
+ 00:06:29,000 --> 00:06:30,000
331
+ processes.
332
+
333
+ 84
334
+ 00:06:31,000 --> 00:06:35,000
335
+ So let's sum it up and answer question what a metric is.
336
+
337
+ 85
338
+ 00:06:35,000 --> 00:06:38,000
339
+ A metric is nothing more than a value.
340
+
341
+ 86
342
+ 00:06:38,000 --> 00:06:43,000
343
+ And as you saw an example, we can measure different aspects of our project.
344
+
345
+ 87
346
+ 00:06:43,000 --> 00:06:50,000
347
+ The smart measurement of metrics and knowing what you need to measure and when will give you enough
348
+
349
+ 88
350
+ 00:06:50,000 --> 00:06:54,000
351
+ information to make data driven decisions.
352
+
353
+ 89
354
+ 00:06:54,000 --> 00:06:58,000
355
+ But metric itself wouldn't tell you whether it is good or bad.
356
+
357
+ 90
358
+ 00:06:58,000 --> 00:07:02,000
359
+ For example, 80% task completion rate.
360
+
361
+ 91
362
+ 00:07:02,000 --> 00:07:03,000
363
+ Is it good or bad?
364
+
365
+ 92
366
+ 00:07:03,000 --> 00:07:09,000
367
+ Try to answer this question or scope change plus 40 hours added to our scope.
368
+
369
+ 93
370
+ 00:07:09,000 --> 00:07:11,000
371
+ Is it good or bad?
372
+
373
+ 94
374
+ 00:07:11,000 --> 00:07:17,000
375
+ We can have five software engineers in team, or we can have 50 software engineers in team.
376
+
377
+ 95
378
+ 00:07:17,000 --> 00:07:22,000
379
+ Depending on this, 40 hours will make different impact on our roadmap.
380
+
381
+ 96
382
+ 00:07:22,000 --> 00:07:28,000
383
+ Right metric will not answer this question because metric is just a value.
384
+
385
+ 97
386
+ 00:07:28,000 --> 00:07:32,000
387
+ Let's continue and learn how to answer these questions.
388
+
389
+ 98
390
+ 00:07:32,000 --> 00:07:36,000
391
+ So let me explain you what a KPI is.
392
+
393
+ 99
394
+ 00:07:36,000 --> 00:07:41,000
395
+ In project management, KPI stands for Key Performance Indicator.
396
+
397
+ 100
398
+ 00:07:42,000 --> 00:07:49,000
399
+ KPIs are specific type of performance measurement that are used to measure and evaluate the performance
400
+
401
+ 101
402
+ 00:07:49,000 --> 00:07:52,000
403
+ of a project in achieving its objectives.
404
+
405
+ 102
406
+ 00:07:52,000 --> 00:07:58,000
407
+ These indicators are crucial for assessing the success and effectiveness of a project.
408
+
409
+ 103
410
+ 00:07:59,000 --> 00:08:06,000
411
+ KPIs help project managers and teams to focus on the most critical aspects of a project, enabling them
412
+
413
+ 104
414
+ 00:08:06,000 --> 00:08:12,000
415
+ to monitor progress, make informed decisions, and take corrective actions when necessary.
416
+
417
+ 105
418
+ 00:08:13,000 --> 00:08:19,000
419
+ These indicators are aligned with project goals and provide a clear picture of whether the project is
420
+
421
+ 106
422
+ 00:08:19,000 --> 00:08:21,000
423
+ meeting its objectives.
424
+
425
+ 107
426
+ 00:08:21,000 --> 00:08:25,000
427
+ Let's review some examples of KPIs in project management.
428
+
429
+ 108
430
+ 00:08:25,000 --> 00:08:29,000
431
+ Task completion rate KPI can sound like this.
432
+
433
+ 109
434
+ 00:08:30,000 --> 00:08:36,000
435
+ Percentage of completed tasks compared to the planned number of tasks for specific time period.
436
+
437
+ 110
438
+ 00:08:36,000 --> 00:08:43,000
439
+ For example, this metric can tell you that 15 out of 20 planned tasks were completed within the reported
440
+
441
+ 111
442
+ 00:08:43,000 --> 00:08:44,000
443
+ period.
444
+
445
+ 112
446
+ 00:08:45,000 --> 00:08:51,000
447
+ We may have planned for two weeks iteration and just 15 tasks out of 20 were completed.
448
+
449
+ 113
450
+ 00:08:52,000 --> 00:08:53,000
451
+ Is it KPI?
452
+
453
+ 114
454
+ 00:08:53,000 --> 00:08:54,000
455
+ Not yet.
456
+
457
+ 115
458
+ 00:08:55,000 --> 00:09:00,000
459
+ Green zone at least 90% completion of planned tasks.
460
+
461
+ 116
462
+ 00:09:00,000 --> 00:09:02,000
463
+ This is KPI.
464
+
465
+ 117
466
+ 00:09:02,000 --> 00:09:03,000
467
+ Do you understand the difference?
468
+
469
+ 118
470
+ 00:09:04,000 --> 00:09:08,000
471
+ KPI is some target that you want to achieve.
472
+
473
+ 119
474
+ 00:09:08,000 --> 00:09:13,000
475
+ You can set ranges for example between 80% but below 90%.
476
+
477
+ 120
478
+ 00:09:13,000 --> 00:09:18,000
479
+ It is an amber zone and below 80% this is red zone.
480
+
481
+ 121
482
+ 00:09:18,000 --> 00:09:25,000
483
+ In our case, we can easily calculate that 15 tasks out of 20 is 75%.
484
+
485
+ 122
486
+ 00:09:25,000 --> 00:09:30,000
487
+ That means that we are in the red zone of our KPI.
488
+
489
+ 123
490
+ 00:09:30,000 --> 00:09:31,000
491
+ Is it clear?
492
+
493
+ 124
494
+ 00:09:32,000 --> 00:09:36,000
495
+ In the similar way you can set ranges for other KPIs.
496
+
497
+ 125
498
+ 00:09:36,000 --> 00:09:39,000
499
+ Budget adherence KPI.
500
+
501
+ 126
502
+ 00:09:39,000 --> 00:09:44,000
503
+ Percentage of actual project costs compared to the planned budget.
504
+
505
+ 127
506
+ 00:09:45,000 --> 00:09:47,000
507
+ Defect rate KPI.
508
+
509
+ 128
510
+ 00:09:47,000 --> 00:09:51,000
511
+ Number of defects or errors identified in the project.
512
+
513
+ 129
514
+ 00:09:51,000 --> 00:09:56,000
515
+ Deliverables in the specific amount of time or in other KPI.
516
+
517
+ 130
518
+ 00:09:56,000 --> 00:09:59,000
519
+ Number of critical defects on production environment.
520
+
521
+ 131
522
+ 00:10:00,000 --> 00:10:03,000
523
+ More metrics and KPIs will learn during the course.
524
+
525
+ 132
526
+ 00:10:04,000 --> 00:10:07,000
527
+ Let's learn when it is recommended to use KPIs.
528
+
529
+ 133
530
+ 00:10:08,000 --> 00:10:13,000
531
+ Key performance indicators are used at various stages throughout the project life cycle and project
532
+
533
+ 134
534
+ 00:10:13,000 --> 00:10:14,000
535
+ management.
536
+
537
+ 135
538
+ 00:10:14,000 --> 00:10:18,000
539
+ But let's review key stages when KPIs are used.
540
+
541
+ 136
542
+ 00:10:18,000 --> 00:10:20,000
543
+ Project planning.
544
+
545
+ 137
546
+ 00:10:20,000 --> 00:10:25,000
547
+ Define KPIs during the planning phase to establish measurable objectives and performance indicators
548
+
549
+ 138
550
+ 00:10:25,000 --> 00:10:27,000
551
+ aligned with project goals.
552
+
553
+ 139
554
+ 00:10:28,000 --> 00:10:29,000
555
+ Goal setting.
556
+
557
+ 140
558
+ 00:10:29,000 --> 00:10:36,000
559
+ Use KPIs to set specific, measurable, achievable, relevant and time bound goals for the project.
560
+
561
+ 141
562
+ 00:10:37,000 --> 00:10:40,000
563
+ We'll learn smart technique later to.
564
+
565
+ 142
566
+ 00:10:41,000 --> 00:10:48,000
567
+ Monitoring progress continuously use KPIs throughout the project execution phase to monitor progress
568
+
569
+ 143
570
+ 00:10:48,000 --> 00:10:52,000
571
+ and track performance against established benchmarks.
572
+
573
+ 144
574
+ 00:10:53,000 --> 00:10:59,000
575
+ Performance assessment Use KPIs for ongoing performance assessments to evaluate how well the project
576
+
577
+ 145
578
+ 00:10:59,000 --> 00:11:05,000
579
+ is meeting its objectives and adherence to schedule, budget, and quality standards.
580
+
581
+ 146
582
+ 00:11:06,000 --> 00:11:15,000
583
+ Issue identification KPIs help in identifying issues and deviations early on, allowing for timely corrective
584
+
585
+ 147
586
+ 00:11:15,000 --> 00:11:16,000
587
+ actions to be taken.
588
+
589
+ 148
590
+ 00:11:17,000 --> 00:11:18,000
591
+ Decision making.
592
+
593
+ 149
594
+ 00:11:18,000 --> 00:11:25,000
595
+ Use KPIs for data driven decision making, providing a clear understanding of the project's status and
596
+
597
+ 150
598
+ 00:11:25,000 --> 00:11:27,000
599
+ where adjustments may be needed.
600
+
601
+ 151
602
+ 00:11:28,000 --> 00:11:36,000
603
+ Resource management KPIs can assist in managing resources effectively by tracking their utilization
604
+
605
+ 152
606
+ 00:11:36,000 --> 00:11:39,000
607
+ and ensuring optimal allocation.
608
+
609
+ 153
610
+ 00:11:40,000 --> 00:11:42,000
611
+ Stakeholder communication.
612
+
613
+ 154
614
+ 00:11:42,000 --> 00:11:49,000
615
+ Incorporate KPIs in project status reports and communications to stakeholders, facilitating transparent
616
+
617
+ 155
618
+ 00:11:49,000 --> 00:11:51,000
619
+ and informed discussions.
620
+
621
+ 156
622
+ 00:11:52,000 --> 00:11:54,000
623
+ Continuous improvement.
624
+
625
+ 157
626
+ 00:11:54,000 --> 00:12:01,000
627
+ Analyze KPI data to identify areas for improvement and refine project management processes for future
628
+
629
+ 158
630
+ 00:12:01,000 --> 00:12:02,000
631
+ projects.
632
+
633
+ 159
634
+ 00:12:03,000 --> 00:12:04,000
635
+ Project closure.
636
+
637
+ 160
638
+ 00:12:04,000 --> 00:12:10,000
639
+ Evaluate KPIs during the project closure phase to assess overall success and capture lessons learned
640
+
641
+ 161
642
+ 00:12:10,000 --> 00:12:17,000
643
+ for future initiatives by incorporating KPIs at these various stages.
644
+
645
+ 162
646
+ 00:12:17,000 --> 00:12:24,000
647
+ Project managers can gain insights into project performance, make informed decisions, and ensure that
648
+
649
+ 163
650
+ 00:12:24,000 --> 00:12:27,000
651
+ the project aligns with its objectives.
652
+
653
+ 164
654
+ 00:12:27,000 --> 00:12:34,000
655
+ KPIs provide a systematic way to measure success and drive continuous improvements throughout the project
656
+
657
+ 165
658
+ 00:12:34,000 --> 00:12:35,000
659
+ management process.
660
+
661
+ 166
662
+ 00:12:36,000 --> 00:12:41,000
663
+ So now we're in a position to answer the question what is the difference between metric and KPI?
664
+
665
+ 167
666
+ 00:12:42,000 --> 00:12:45,000
667
+ As you already learned, metric is just a value.
668
+
669
+ 168
670
+ 00:12:46,000 --> 00:12:48,000
671
+ It is just some measurement.
672
+
673
+ 169
674
+ 00:12:48,000 --> 00:12:54,000
675
+ But without setting KPIs, we can't say whether it is good or bad value.
676
+
677
+ 170
678
+ 00:12:54,000 --> 00:12:55,000
679
+ And what does it mean?
680
+
681
+ 171
682
+ 00:12:56,000 --> 00:13:02,000
683
+ Metrics are just measurements, but they will tell you nothing about project performance or project
684
+
685
+ 172
686
+ 00:13:02,000 --> 00:13:05,000
687
+ success without setting specific KPI.
688
+
689
+ 173
690
+ 00:13:05,000 --> 00:13:09,000
691
+ I hope that the difference between these two concepts is clear now.
692
+
693
+ 174
694
+ 00:13:10,000 --> 00:13:15,000
695
+ And in case you have any questions, please let me know in the comments below the video and I will be
696
+
697
+ 175
698
+ 00:13:15,000 --> 00:13:16,000
699
+ happy to answer.
700
+
701
+ 176
702
+ 00:13:17,000 --> 00:13:20,000
703
+ Let's now learn what OKR is.
704
+
705
+ 177
706
+ 00:13:20,000 --> 00:13:28,000
707
+ OKR stands for Objectives and Key Results, and it is a goal setting framework used in project management
708
+
709
+ 178
710
+ 00:13:28,000 --> 00:13:30,000
711
+ and organizational management.
712
+
713
+ 179
714
+ 00:13:30,000 --> 00:13:37,000
715
+ OKRs are designed to align teams and individuals with business objectives, providing a clear focus
716
+
717
+ 180
718
+ 00:13:37,000 --> 00:13:40,000
719
+ on what needs to be achieved.
720
+
721
+ 181
722
+ 00:13:40,000 --> 00:13:43,000
723
+ OKR consists of multiple components.
724
+
725
+ 182
726
+ 00:13:43,000 --> 00:13:47,000
727
+ Here is breakdown of the components of OKRs.
728
+
729
+ 183
730
+ 00:13:48,000 --> 00:13:49,000
731
+ Objectives.
732
+
733
+ 184
734
+ 00:13:49,000 --> 00:13:56,000
735
+ Objectives are high level qualitative goals that define what an organization or team wants to achieve.
736
+
737
+ 185
738
+ 00:13:57,000 --> 00:14:02,000
739
+ They are ambitious, inspiring and help set a clear direction.
740
+
741
+ 186
742
+ 00:14:02,000 --> 00:14:03,000
743
+ Q results.
744
+
745
+ 187
746
+ 00:14:04,000 --> 00:14:10,000
747
+ Q results are specific, measurable, and time bound outcomes that indicate progress toward achieving
748
+
749
+ 188
750
+ 00:14:10,000 --> 00:14:12,000
751
+ the corresponding objective.
752
+
753
+ 189
754
+ 00:14:12,000 --> 00:14:17,000
755
+ Key results are quantifiable and provide a way to track success.
756
+
757
+ 190
758
+ 00:14:18,000 --> 00:14:21,000
759
+ The main characteristics of OKRs include.
760
+
761
+ 191
762
+ 00:14:21,000 --> 00:14:23,000
763
+ Number one alignment.
764
+
765
+ 192
766
+ 00:14:23,000 --> 00:14:30,000
767
+ OKRs align everyone in the organization towards common goals, ensuring that each team's objectives
768
+
769
+ 193
770
+ 00:14:30,000 --> 00:14:34,000
771
+ contribute to the overall success of the organization.
772
+
773
+ 194
774
+ 00:14:34,000 --> 00:14:36,000
775
+ Transparency.
776
+
777
+ 195
778
+ 00:14:36,000 --> 00:14:42,000
779
+ OKRs are typically visible to everyone in the organization, fostering transparency and allowing teams
780
+
781
+ 196
782
+ 00:14:42,000 --> 00:14:47,000
783
+ to understand how their work contributes to the larger picture.
784
+
785
+ 197
786
+ 00:14:48,000 --> 00:14:49,000
787
+ Focus.
788
+
789
+ 198
790
+ 00:14:49,000 --> 00:14:56,000
791
+ OKR helps teams and individuals prioritize their efforts by focusing on a small number of ambitious
792
+
793
+ 199
794
+ 00:14:56,000 --> 00:15:00,000
795
+ objectives, rather than spreading resources too thin.
796
+
797
+ 200
798
+ 00:15:01,000 --> 00:15:03,000
799
+ Continuous improvement.
800
+
801
+ 201
802
+ 00:15:03,000 --> 00:15:11,000
803
+ OKRs are often set and reviewed in regular cycles, for example on quarterly basis, allowing for adjustments
804
+
805
+ 202
806
+ 00:15:11,000 --> 00:15:14,000
807
+ and continuous improvement based on the results achieved.
808
+
809
+ 203
810
+ 00:15:14,000 --> 00:15:16,000
811
+ Adaptability.
812
+
813
+ 204
814
+ 00:15:16,000 --> 00:15:23,000
815
+ OKRs provide a framework that allows for adaptability, enabling teams to respond to changes in the
816
+
817
+ 205
818
+ 00:15:23,000 --> 00:15:24,000
819
+ business environment.
820
+
821
+ 206
822
+ 00:15:24,000 --> 00:15:32,000
823
+ OKRs are widely used in agile and iterative project management methodologies, promoting a results oriented
824
+
825
+ 207
826
+ 00:15:32,000 --> 00:15:37,000
827
+ approach and encouraging collaboration across different levels of an organization.
828
+
829
+ 208
830
+ 00:15:37,000 --> 00:15:43,000
831
+ They originated from Intel and were later popularized by companies like Google.
832
+
833
+ 209
834
+ 00:15:44,000 --> 00:15:50,000
835
+ And to understand better what an OKR is, let me explain you what it is on examples.
836
+
837
+ 210
838
+ 00:15:51,000 --> 00:15:54,000
839
+ For example, our objective may sound like this.
840
+
841
+ 211
842
+ 00:15:54,000 --> 00:16:02,000
843
+ Improve project delivery efficiency and they are going to be the following key results within it.
844
+
845
+ 212
846
+ 00:16:02,000 --> 00:16:05,000
847
+ Key result increase project completion rate.
848
+
849
+ 213
850
+ 00:16:06,000 --> 00:16:12,000
851
+ Achieve a 95% or higher completion rate for planned project tasks by the end of the quarter.
852
+
853
+ 214
854
+ 00:16:12,000 --> 00:16:16,000
855
+ Another key result reduce project lead time.
856
+
857
+ 215
858
+ 00:16:16,000 --> 00:16:22,000
859
+ Decrease the average time taken to complete a project from initiation to delivery by 15% by the end
860
+
861
+ 216
862
+ 00:16:22,000 --> 00:16:29,000
863
+ of the quarter, and the last but not the least, key result within this objective is enhanced team
864
+
865
+ 217
866
+ 00:16:29,000 --> 00:16:30,000
867
+ collaboration.
868
+
869
+ 218
870
+ 00:16:30,000 --> 00:16:35,000
871
+ Increase the utilization of collaborative tools and practices.
872
+
873
+ 219
874
+ 00:16:35,000 --> 00:16:41,000
875
+ Aiming for a 20% improvement in team collaboration scores based on team surveys.
876
+
877
+ 220
878
+ 00:16:42,000 --> 00:16:45,000
879
+ Let's review another OKR for objectives.
880
+
881
+ 221
882
+ 00:16:45,000 --> 00:16:46,000
883
+ That sounds like this.
884
+
885
+ 222
886
+ 00:16:47,000 --> 00:16:49,000
887
+ Increase client satisfaction.
888
+
889
+ 223
890
+ 00:16:49,000 --> 00:16:53,000
891
+ We are going to have three key results within this objective.
892
+
893
+ 224
894
+ 00:16:53,000 --> 00:16:57,000
895
+ The first one achieve high customer ratings.
896
+
897
+ 225
898
+ 00:16:57,000 --> 00:17:05,000
899
+ Achieve a customer satisfaction rating of 4.5 out of five or higher in post-project surveys.
900
+
901
+ 226
902
+ 00:17:06,000 --> 00:17:15,000
903
+ The second key result, timely issue resolution, ensures that 90% of customer reported issues are acknowledged
904
+
905
+ 227
906
+ 00:17:15,000 --> 00:17:18,000
907
+ and resolved within 48 hours.
908
+
909
+ 228
910
+ 00:17:18,000 --> 00:17:26,000
911
+ The third key result client feedback integration implement improvements based on client feedback in
912
+
913
+ 229
914
+ 00:17:26,000 --> 00:17:30,000
915
+ at least three key project processes or deliverables during the quarter.
916
+
917
+ 230
918
+ 00:17:31,000 --> 00:17:39,000
919
+ These examples illustrate how OKRs can be crafted to align with broader organizational goals, focusing
920
+
921
+ 231
922
+ 00:17:39,000 --> 00:17:46,000
923
+ on specific, measurable outcomes that contribute to the success of a project and the well-being of
924
+
925
+ 232
926
+ 00:17:46,000 --> 00:17:47,000
927
+ the team.
928
+
929
+ 233
930
+ 00:17:47,000 --> 00:17:49,000
931
+ So when to use OKRs.
932
+
933
+ 234
934
+ 00:17:50,000 --> 00:17:57,000
935
+ Objective and key results are typically used in various organizational settings to align team and individuals
936
+
937
+ 235
938
+ 00:17:57,000 --> 00:17:59,000
939
+ with overarching goals.
940
+
941
+ 236
942
+ 00:17:59,000 --> 00:18:01,000
943
+ Here are some examples.
944
+
945
+ 237
946
+ 00:18:01,000 --> 00:18:02,000
947
+ When to use OKRs.
948
+
949
+ 238
950
+ 00:18:03,000 --> 00:18:04,000
951
+ Strategic planning.
952
+
953
+ 239
954
+ 00:18:05,000 --> 00:18:11,000
955
+ Use OKRs during strategic planning to define high level objectives and key results that align with the
956
+
957
+ 240
958
+ 00:18:11,000 --> 00:18:14,000
959
+ organization's long terme vision and mission.
960
+
961
+ 241
962
+ 00:18:15,000 --> 00:18:16,000
963
+ Goal setting.
964
+
965
+ 242
966
+ 00:18:16,000 --> 00:18:23,000
967
+ Use OKRs for goal setting at different levels of the organization, including teams and individuals.
968
+
969
+ 243
970
+ 00:18:23,000 --> 00:18:26,000
971
+ They provide clarity on what needs to be achieved.
972
+
973
+ 244
974
+ 00:18:27,000 --> 00:18:29,000
975
+ Performance management.
976
+
977
+ 245
978
+ 00:18:29,000 --> 00:18:36,000
979
+ Utilize OKRs as a performance management tool to set expectations, evaluate performance, and provide
980
+
981
+ 246
982
+ 00:18:36,000 --> 00:18:38,000
983
+ a framework for employee development.
984
+
985
+ 247
986
+ 00:18:39,000 --> 00:18:47,000
987
+ Project management integrate OKRs into project management to align project objectives with broader organizational
988
+
989
+ 248
990
+ 00:18:47,000 --> 00:18:52,000
991
+ goals, ensuring that the project outcomes contribute to overall success.
992
+
993
+ 249
994
+ 00:18:53,000 --> 00:19:01,000
995
+ Departmental alignment use OKRs to align departments and teams, ensuring that their objectives contribute
996
+
997
+ 250
998
+ 00:19:01,000 --> 00:19:04,000
999
+ to the success of the organization as a whole.
1000
+
1001
+ 251
1002
+ 00:19:05,000 --> 00:19:07,000
1003
+ Agile environments.
1004
+
1005
+ 252
1006
+ 00:19:07,000 --> 00:19:15,000
1007
+ Apply OKRs in agile and iterative environments to provide a results oriented framework that supports
1008
+
1009
+ 253
1010
+ 00:19:15,000 --> 00:19:18,000
1011
+ adaptability and continuous improvement.
1012
+
1013
+ 254
1014
+ 00:19:19,000 --> 00:19:20,000
1015
+ Change management.
1016
+
1017
+ 255
1018
+ 00:19:20,000 --> 00:19:29,000
1019
+ Implement OKRs during periods of organizational change to focus efforts on specific outcomes and facilitate
1020
+
1021
+ 256
1022
+ 00:19:29,000 --> 00:19:30,000
1023
+ a smooth transition.
1024
+
1025
+ 257
1026
+ 00:19:31,000 --> 00:19:39,000
1027
+ Quarterly planning setting review occurs on a quarterly basis, allowing for regular assessment adjustments
1028
+
1029
+ 258
1030
+ 00:19:39,000 --> 00:19:43,000
1031
+ and alignment with changing business priorities.
1032
+
1033
+ 259
1034
+ 00:19:43,000 --> 00:19:45,000
1035
+ Innovation initiatives.
1036
+
1037
+ 260
1038
+ 00:19:46,000 --> 00:19:50,000
1039
+ Apply OKRs when launching innovation initiatives.
1040
+
1041
+ 261
1042
+ 00:19:50,000 --> 00:19:57,000
1043
+ Guiding team to achieve specific outcomes related to the development and implementation of new ideas.
1044
+
1045
+ 262
1046
+ 00:19:58,000 --> 00:20:05,000
1047
+ Cross-functional collaboration foster cross-functional collaboration by using OKRs to align teams from
1048
+
1049
+ 263
1050
+ 00:20:05,000 --> 00:20:11,000
1051
+ different departments, ensuring that their efforts collectively contribute to organizational success.
1052
+
1053
+ 264
1054
+ 00:20:12,000 --> 00:20:20,000
1055
+ Overall, OKRs are a versatile tool that can be applied in various contexts to drive alignment, focus,
1056
+
1057
+ 265
1058
+ 00:20:20,000 --> 00:20:22,000
1059
+ and measurable results.
1060
+
1061
+ 266
1062
+ 00:20:22,000 --> 00:20:28,000
1063
+ They are particularly effective in dynamic and fast paced environments where adaptability and clarity
1064
+
1065
+ 267
1066
+ 00:20:28,000 --> 00:20:30,000
1067
+ on goals are crucial.
1068
+
1069
+ 268
1070
+ 00:20:30,000 --> 00:20:38,000
1071
+ Do you feel already the difference between OKR and KPI objectives and key results and key performance
1072
+
1073
+ 269
1074
+ 00:20:38,000 --> 00:20:39,000
1075
+ indicators?
1076
+
1077
+ 270
1078
+ 00:20:39,000 --> 00:20:46,000
1079
+ Are both performance measurement frameworks, but they serve distinct purposes and have some differences.
1080
+
1081
+ 271
1082
+ 00:20:47,000 --> 00:20:51,000
1083
+ Let's make comparison between OKRs and KPIs.
1084
+
1085
+ 272
1086
+ 00:20:52,000 --> 00:20:58,000
1087
+ Purpose OKRs focus on aligning teams and individuals with strategic objectives.
1088
+
1089
+ 273
1090
+ 00:20:58,000 --> 00:21:02,000
1091
+ They are aspirational and helped set ambitious goals.
1092
+
1093
+ 274
1094
+ 00:21:03,000 --> 00:21:10,000
1095
+ KPIs primarily aim to measure specific, quantifiable aspects of performance and are often associated
1096
+
1097
+ 275
1098
+ 00:21:10,000 --> 00:21:13,000
1099
+ with operational or tactical goals.
1100
+
1101
+ 276
1102
+ 00:21:14,000 --> 00:21:15,000
1103
+ Nature.
1104
+
1105
+ 277
1106
+ 00:21:15,000 --> 00:21:22,000
1107
+ Walkers typically consists of qualitative objectives and measurable key results.
1108
+
1109
+ 278
1110
+ 00:21:22,000 --> 00:21:29,000
1111
+ Objectives are high level and inspirational, while key results are specific, measurable outcomes that
1112
+
1113
+ 279
1114
+ 00:21:29,000 --> 00:21:30,000
1115
+ indicate success.
1116
+
1117
+ 280
1118
+ 00:21:31,000 --> 00:21:38,000
1119
+ KPIs are typically quantitative metrics used to evaluate the performance of a particular aspect of a
1120
+
1121
+ 281
1122
+ 00:21:38,000 --> 00:21:41,000
1123
+ project, process, or organization.
1124
+
1125
+ 282
1126
+ 00:21:41,000 --> 00:21:43,000
1127
+ Time frame.
1128
+
1129
+ 283
1130
+ 00:21:43,000 --> 00:21:48,000
1131
+ OKRs often set for a specific period, commonly a quarter or a year.
1132
+
1133
+ 284
1134
+ 00:21:49,000 --> 00:21:53,000
1135
+ They encourage regular review and adjustment of goals.
1136
+
1137
+ 285
1138
+ 00:21:53,000 --> 00:21:57,000
1139
+ KPIs can be both short tum and long terme metrics.
1140
+
1141
+ 286
1142
+ 00:21:57,000 --> 00:22:03,000
1143
+ Some key PiS are tracked continuously, while others may be assessed periodically.
1144
+
1145
+ 287
1146
+ 00:22:04,000 --> 00:22:05,000
1147
+ Scope.
1148
+
1149
+ 288
1150
+ 00:22:05,000 --> 00:22:12,000
1151
+ OKRs are broader in scope, addressing strategic and high level goals that contribute to the overall
1152
+
1153
+ 289
1154
+ 00:22:12,000 --> 00:22:14,000
1155
+ success of the organization.
1156
+
1157
+ 290
1158
+ 00:22:15,000 --> 00:22:21,000
1159
+ KPIs are more specific and can address particular aspects of performance within a project, department,
1160
+
1161
+ 291
1162
+ 00:22:21,000 --> 00:22:22,000
1163
+ or process.
1164
+
1165
+ 292
1166
+ 00:22:23,000 --> 00:22:28,000
1167
+ I hope that now the difference between KPI and OKR is clear.
1168
+
1169
+ 293
1170
+ 00:22:29,000 --> 00:22:34,000
1171
+ In case you would have any questions, please let me know in the comments below the video and I will
1172
+
1173
+ 294
1174
+ 00:22:34,000 --> 00:22:35,000
1175
+ be happy to answer.
1176
+
1177
+ 295
1178
+ 00:22:36,000 --> 00:22:40,000
1179
+ And that's all what I wanted to learn with you in scope of this lesson.
1180
+
1181
+ 296
1182
+ 00:22:40,000 --> 00:22:43,000
1183
+ Let's recap what we have learned today.
1184
+
1185
+ 297
1186
+ 00:22:43,000 --> 00:22:46,000
1187
+ Today we learned what metrics are.
1188
+
1189
+ 298
1190
+ 00:22:46,000 --> 00:22:51,000
1191
+ We learned examples of metrics and use cases when it is appropriate to use metrics.
1192
+
1193
+ 299
1194
+ 00:22:52,000 --> 00:22:58,000
1195
+ I explained you what KPIs are and we learned examples and use cases too.
1196
+
1197
+ 300
1198
+ 00:22:58,000 --> 00:23:00,000
1199
+ We compared metrics with KPI.
1200
+
1201
+ 301
1202
+ 00:23:00,000 --> 00:23:03,000
1203
+ After this lesson you know the difference.
1204
+
1205
+ 302
1206
+ 00:23:03,000 --> 00:23:12,000
1207
+ We learned what OKR is in the similar way we learned examples of OKR and discussed when OKRs are applicable.
1208
+
1209
+ 303
1210
+ 00:23:12,000 --> 00:23:16,000
1211
+ And then we compared KPIs with OKRs.
1212
+
1213
+ 304
1214
+ 00:23:16,000 --> 00:23:18,000
1215
+ That's it for today.
1216
+
1217
+ 305
1218
+ 00:23:18,000 --> 00:23:19,000
1219
+ Thanks a lot for your attention.
1220
+
1221
+ 306
1222
+ 00:23:19,000 --> 00:23:22,000
1223
+ Have a great day and see you in the next lesson.
1224
+
110 - Metrics & KPIs to Monitor and Control Software Development Process/003 RAG Status to Present KPI.html ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>RAG Status to Present KPI</title>
7
+
8
+ <style>
9
+ * {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+ body {
15
+ font-family: var(--font-stack-text);
16
+ font-weight: 400;
17
+ line-height: 1.4;
18
+ font-size: 1.6rem;
19
+ color: #2d2f31;
20
+ }
21
+ .container {
22
+ position: relative;
23
+ height: 100%;
24
+ overflow-y: auto;
25
+ }
26
+ .content {
27
+ padding: 3.2rem 4.8rem;
28
+ word-break: break-word;
29
+ max-width: 69.6rem;
30
+ margin: 0 auto;
31
+ }
32
+ .heading {
33
+ margin-bottom: 24px;
34
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", Helvetica, Arial, sans-serif,
35
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
36
+ font-weight: 700;
37
+ line-height: 1.2;
38
+ letter-spacing: 0;
39
+ font-size: 32px;
40
+ max-width: 36em;
41
+ }
42
+ .article-asset-container {
43
+ padding: 2.4rem;
44
+ }
45
+ .article-asset-container p {
46
+ font-size: 19px;
47
+ }
48
+ code {
49
+ background-color: #fff;
50
+ border: 1px solid #d1d7dc;
51
+ color: #b4690e;
52
+ font-size: 80%;
53
+ padding: 0.2rem 0.4rem;
54
+ font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;
55
+ }
56
+ p {
57
+ font-weight: 400;
58
+ }
59
+ </style>
60
+ </head>
61
+ <body>
62
+ <div class="container">
63
+ <div class="content">
64
+ <div class="heading">RAG Status to Present KPI</div>
65
+ <div class="article-asset-container"><p><strong>What is RAG&nbsp;Status?</strong></p><p>The RAG status is a visual indicator system used to communicate the status or health of a project, task, or Key Performance Indicator (KPI). The acronym "RAG" stands for Red, Amber (or Yellow), and Green, which are color codes used to represent different levels of status:</p><ol><li><p><strong>Red:</strong></p><ul><li><p><strong>Meaning:</strong> Indicates a critical or problematic status that requires immediate attention.</p></li><li><p><strong>Usage:</strong> Used when there are significant issues, problems, or deviations from the expected performance. It signals that corrective actions are needed urgently.</p></li></ul></li><li><p><strong>Amber (or Yellow):</strong></p><ul><li><p><strong>Meaning:</strong> Suggests a cautionary or warning status, indicating potential issues or concerns that may need attention.</p></li><li><p><strong>Usage:</strong> Typically used when there are moderate concerns or risks that, while not critical, should be monitored and addressed to prevent escalation.</p></li></ul></li><li><p><strong>Green:</strong></p><ul><li><p><strong>Meaning:</strong> Represents a positive or acceptable status, signaling that everything is on track.</p></li><li><p><strong>Usage:</strong> Used when the project, task, or KPI is performing well within the expected parameters. It indicates that no immediate action is required.</p></li></ul></li></ol><p>The RAG status is commonly used in project management, performance reporting, and various business contexts. It provides a quick and intuitive way for stakeholders to assess the status of different aspects of a project or business operation. The use of color codes makes it easy to visually communicate the health of key elements, allowing for rapid decision-making and prioritization of efforts.</p><p><br></p><p><br></p><p><strong>RAG&nbsp;Status to Present KPI</strong></p><p>Presenting KPIs using the RAG (Red, Amber, Green) status involves using color codes to quickly convey the performance or health of each KPI. Here's how it typically works:</p><ol><li><p><strong>Red:</strong></p><ul><li><p><strong>Meaning:</strong> The KPI is below the acceptable threshold or target, and there are critical issues that need immediate attention.</p></li><li><p><strong>Implications:</strong> Urgent action or intervention is required to address the problems and bring the KPI back to an acceptable level.</p></li></ul></li><li><p><strong>Amber (or Yellow):</strong></p><ul><li><p><strong>Meaning:</strong> The KPI is in a cautionary state. It may be approaching or slightly below the acceptable threshold, indicating potential issues.</p></li><li><p><strong>Implications:</strong> While not critical, there are concerns that should be monitored, and proactive measures may be needed to prevent the KPI from becoming a significant problem.</p></li></ul></li><li><p><strong>Green:</strong></p><ul><li><p><strong>Meaning:</strong> The KPI is within or exceeds the acceptable range, and performance is satisfactory.</p></li><li><p><strong>Implications:</strong> No immediate action is needed, and the KPI is performing as expected.</p></li></ul></li></ol><p>By presenting KPIs with RAG status, stakeholders can quickly understand the state of performance and prioritize actions based on the urgency and severity of issues identified. It's a visual and effective way to communicate complex performance data.</p><p><br></p><p><br></p><p><strong>Why do we use RAG&nbsp;status to present KPI?</strong></p><p>While "Red, Amber, Green" (RAG) is not typically referred to as a Key Performance Indicator (KPI) in the traditional sense, it is a visual indicator system used to communicate the status of various metrics, including KPIs. The RAG status is often used to quickly convey the health or performance of a particular metric or project based on color codes:&nbsp;RED, AMBER, GREEN.</p><p>While RAG status itself is not a quantitative measurement, it serves as a powerful visual signal to quickly assess the performance or health of a specific aspect of a project or process. The use of RAG status is common in project management, performance reporting, and other areas where quick visual communication is beneficial. Each color code is associated with certain thresholds or criteria, helping stakeholders make informed decisions based on the current status.</p></div>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
110 - Metrics & KPIs to Monitor and Control Software Development Process/004 Introduction to Engineering Excellence Metrics & KPIs_en.srt ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ This is an introductory lesson to engineering excellence, metrics and KPIs.
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:17,000
11
+ These metrics are super important for leaders on different levels to measure team performance, quality
12
+
13
+ 4
14
+ 00:00:17,000 --> 00:00:19,000
15
+ of deliverables, and lots more.
16
+
17
+ 5
18
+ 00:00:19,000 --> 00:00:25,000
19
+ Also, it is super important to use metrics from this section in real life because they will help to
20
+
21
+ 6
22
+ 00:00:25,000 --> 00:00:33,000
23
+ identify bottlenecks in engineering processes and will indicate challenges before they are turned into
24
+
25
+ 7
26
+ 00:00:33,000 --> 00:00:33,000
27
+ problems.
28
+
29
+ 8
30
+ 00:00:34,000 --> 00:00:40,000
31
+ As a part of introduction to this learning section, let me explain why it is so important.
32
+
33
+ 9
34
+ 00:00:40,000 --> 00:00:46,000
35
+ No matter whether you are project manager or technical lead or architect in general, you are responsible
36
+
37
+ 10
38
+ 00:00:46,000 --> 00:00:50,000
39
+ for a group of people and quality of their deliverables.
40
+
41
+ 11
42
+ 00:00:50,000 --> 00:00:53,000
43
+ You always have multiple options in front of you.
44
+
45
+ 12
46
+ 00:00:53,000 --> 00:01:01,000
47
+ You can manage your team on ad hoc manner, or you can set clear indicators to measure different aspects
48
+
49
+ 13
50
+ 00:01:01,000 --> 00:01:07,000
51
+ of the project and be able to indicate challenges or errors for improvements with ease.
52
+
53
+ 14
54
+ 00:01:07,000 --> 00:01:12,000
55
+ Moreover, the bigger your team, the less attention you have to details.
56
+
57
+ 15
58
+ 00:01:12,000 --> 00:01:19,000
59
+ That's why establishing some metrics and set KPIs for your team is important, because without it,
60
+
61
+ 16
62
+ 00:01:19,000 --> 00:01:22,000
63
+ you simply won't be able to scale.
64
+
65
+ 17
66
+ 00:01:23,000 --> 00:01:29,000
67
+ So after learning metrics and recommended KPIs from this section, you will learn tools that will help
68
+
69
+ 18
70
+ 00:01:29,000 --> 00:01:36,000
71
+ you to support scaling of your team, productivity and volume of deliverables in the most efficient
72
+
73
+ 19
74
+ 00:01:36,000 --> 00:01:37,000
75
+ way.
76
+
77
+ 20
78
+ 00:01:38,000 --> 00:01:44,000
79
+ Before we go deep into the discussion of each particular metric, let me share with you the view of
80
+
81
+ 21
82
+ 00:01:44,000 --> 00:01:50,000
83
+ what we are going to learn in this section, especially for my students, and made collection of all
84
+
85
+ 22
86
+ 00:01:50,000 --> 00:01:54,000
87
+ metrics that I ever used on my different projects, in different use cases.
88
+
89
+ 23
90
+ 00:01:55,000 --> 00:02:01,000
91
+ These metrics helped me to deliver multi-million projects with success, and when I started creation
92
+
93
+ 24
94
+ 00:02:01,000 --> 00:02:08,000
95
+ of this catalog that I called Metrics Library, I realized that it is not so easy to put each metric
96
+
97
+ 25
98
+ 00:02:08,000 --> 00:02:10,000
99
+ in just one single category.
100
+
101
+ 26
102
+ 00:02:11,000 --> 00:02:18,000
103
+ Sometimes metrics are located on logical intersections between different areas and aspects of a project.
104
+
105
+ 27
106
+ 00:02:18,000 --> 00:02:25,000
107
+ As you can see in metrics library, I have different practices and different areas within practice.
108
+
109
+ 28
110
+ 00:02:25,000 --> 00:02:32,000
111
+ While I tried to be as accurate as it is possible when I categorized all these metrics at the same time,
112
+
113
+ 29
114
+ 00:02:32,000 --> 00:02:37,000
115
+ I can admit that there may be open questions regarding categorizing of some of them.
116
+
117
+ 30
118
+ 00:02:38,000 --> 00:02:44,000
119
+ Like for example, number of fixes in release candidate theoretically can go even to another practice
120
+
121
+ 31
122
+ 00:02:44,000 --> 00:02:45,000
123
+ the quality assurance.
124
+
125
+ 32
126
+ 00:02:45,000 --> 00:02:46,000
127
+ Right?
128
+
129
+ 33
130
+ 00:02:47,000 --> 00:02:52,000
131
+ But still, in terms of this library I preferred to use in more general way.
132
+
133
+ 34
134
+ 00:02:52,000 --> 00:02:56,000
135
+ And that's why I put it into engineering excellence practice.
136
+
137
+ 35
138
+ 00:02:56,000 --> 00:03:00,000
139
+ Because in scope of this practice I have release cycle area.
140
+
141
+ 36
142
+ 00:03:00,000 --> 00:03:07,000
143
+ So in scope of engineering excellence practice we are going to review metrics for such areas development
144
+
145
+ 37
146
+ 00:03:07,000 --> 00:03:09,000
147
+ build and release cycle.
148
+
149
+ 38
150
+ 00:03:10,000 --> 00:03:16,000
151
+ We are going to review each area one by one, in case you will have questions related to any of the
152
+
153
+ 39
154
+ 00:03:16,000 --> 00:03:23,000
155
+ presented metrics or areas, please do not hesitate to ask your questions below the video and I will
156
+
157
+ 40
158
+ 00:03:23,000 --> 00:03:24,000
159
+ be happy to answer.
160
+
161
+ 41
162
+ 00:03:24,000 --> 00:03:29,000
163
+ During the whole section, we will make an assumption that we are working with software, product,
164
+
165
+ 42
166
+ 00:03:29,000 --> 00:03:32,000
167
+ web application or web system.
168
+
169
+ 43
170
+ 00:03:32,000 --> 00:03:36,000
171
+ This is important for better understanding of examples provided.
172
+
173
+ 44
174
+ 00:03:36,000 --> 00:03:42,000
175
+ So all examples use cases will be oriented and focused on web software development.
176
+
177
+ 45
178
+ 00:03:42,000 --> 00:03:43,000
179
+ Why?
180
+
181
+ 46
182
+ 00:03:43,000 --> 00:03:48,000
183
+ Because on the market nowadays this is the most popular area of software development.
184
+
185
+ 47
186
+ 00:03:48,000 --> 00:03:53,000
187
+ And why software development but not manufacturing domain?
188
+
189
+ 48
190
+ 00:03:53,000 --> 00:03:59,000
191
+ Because an example of software development, it is easy to review different use cases and the most complicated
192
+
193
+ 49
194
+ 00:03:59,000 --> 00:04:00,000
195
+ ones.
196
+
197
+ 50
198
+ 00:04:00,000 --> 00:04:07,000
199
+ Moreover, IT industries consider it to be a benchmark industry that sets trends and introduce innovative
200
+
201
+ 51
202
+ 00:04:07,000 --> 00:04:10,000
203
+ approaches, including management approaches.
204
+
205
+ 52
206
+ 00:04:10,000 --> 00:04:12,000
207
+ But that doesn't mean that everything.
208
+
209
+ 53
210
+ 00:04:12,000 --> 00:04:18,000
211
+ What I am going to share in this section is not applicable for other areas, domains, or other types
212
+
213
+ 54
214
+ 00:04:18,000 --> 00:04:19,000
215
+ of product development.
216
+
217
+ 55
218
+ 00:04:20,000 --> 00:04:26,000
219
+ Other types of products like embedded development, Internet of things projects, automotive projects,
220
+
221
+ 56
222
+ 00:04:26,000 --> 00:04:29,000
223
+ and others may have some specifics and measurements.
224
+
225
+ 57
226
+ 00:04:29,000 --> 00:04:36,000
227
+ In case you are managing one of mentioned projects and you have any questions, please do not hesitate
228
+
229
+ 58
230
+ 00:04:36,000 --> 00:04:42,000
231
+ to ask your question and I will be happy to help you because I have experience of working in different
232
+
233
+ 59
234
+ 00:04:42,000 --> 00:04:47,000
235
+ domains including Internet of things, projects, automotive and others.
236
+
237
+ 60
238
+ 00:04:47,000 --> 00:04:50,000
239
+ So let's start learning new things.
240
+
110 - Metrics & KPIs to Monitor and Control Software Development Process/005 Development Metrics & KPIs Tech Debt Ratio & Index, Cyclomatic Complexity_en.srt ADDED
@@ -0,0 +1,1276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello, Tim.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:11,000
7
+ With this lesson we start learning engineering excellence, metrics and KPIs.
8
+
9
+ 3
10
+ 00:00:11,000 --> 00:00:15,000
11
+ In this lesson we will learn metrics from development area.
12
+
13
+ 4
14
+ 00:00:15,000 --> 00:00:19,000
15
+ Today we'll learn three metrics from my personal metrics library.
16
+
17
+ 5
18
+ 00:00:19,000 --> 00:00:28,000
19
+ We'll learn such metrics tech that ratio tech that index and cyclomatic complexity.
20
+
21
+ 6
22
+ 00:00:29,000 --> 00:00:35,000
23
+ We are going to learn each metric using the simple but at the same time very efficient and structured
24
+
25
+ 7
26
+ 00:00:35,000 --> 00:00:36,000
27
+ approach.
28
+
29
+ 8
30
+ 00:00:36,000 --> 00:00:43,000
31
+ For each metric, we'll learn definition use cases to review when it is recommended to use the metric
32
+
33
+ 9
34
+ 00:00:43,000 --> 00:00:51,000
35
+ in order to understand practical value and benefits, how to measure it, how to read values and what
36
+
37
+ 10
38
+ 00:00:51,000 --> 00:00:52,000
39
+ do they mean?
40
+
41
+ 11
42
+ 00:00:52,000 --> 00:00:54,000
43
+ Recommended KPIs.
44
+
45
+ 12
46
+ 00:00:54,000 --> 00:00:56,000
47
+ Recommended actions.
48
+
49
+ 13
50
+ 00:00:56,000 --> 00:01:02,000
51
+ During the review of each metric, I am going to share with you tons of practical examples that will
52
+
53
+ 14
54
+ 00:01:02,000 --> 00:01:07,000
55
+ help you to start using the metrics straight away, right after the lesson.
56
+
57
+ 15
58
+ 00:01:07,000 --> 00:01:09,000
59
+ So let's start our lesson.
60
+
61
+ 16
62
+ 00:01:09,000 --> 00:01:17,000
63
+ Let's learn each metric one by one, and we will start from the tech that ratio metric, the tech that
64
+
65
+ 17
66
+ 00:01:17,000 --> 00:01:24,000
67
+ ratio is a metric designed to quantify the relationship between the effort required to address existing
68
+
69
+ 18
70
+ 00:01:24,000 --> 00:01:32,000
71
+ technical debt and the effort needed for development new features or functionalities in a software project.
72
+
73
+ 19
74
+ 00:01:32,000 --> 00:01:39,000
75
+ Besides all the information that you can see on the screen, let me explain you this metric with real
76
+
77
+ 20
78
+ 00:01:39,000 --> 00:01:41,000
79
+ life examples.
80
+
81
+ 21
82
+ 00:01:41,000 --> 00:01:46,000
83
+ Tech debt ratio is like an indicator for software development.
84
+
85
+ 22
86
+ 00:01:46,000 --> 00:01:53,000
87
+ It helps teams understand the balance between fixing existing issues in their code base, technical
88
+
89
+ 23
90
+ 00:01:53,000 --> 00:01:55,000
91
+ debt, and creating new features.
92
+
93
+ 24
94
+ 00:01:55,000 --> 00:02:03,000
95
+ This ratio is expressed as a percentage and is calculated by dividing the estimated effort needed to
96
+
97
+ 25
98
+ 00:02:03,000 --> 00:02:08,000
99
+ tackle technical debt by the estimated effort for developing new features.
100
+
101
+ 26
102
+ 00:02:08,000 --> 00:02:10,000
103
+ Real life analogy.
104
+
105
+ 27
106
+ 00:02:10,000 --> 00:02:13,000
107
+ Imagine you have a house over time.
108
+
109
+ 28
110
+ 00:02:13,000 --> 00:02:22,000
111
+ It needs maintenance, fixing leaky roofs, updating plumbing, etc. this is similar to technical debt
112
+
113
+ 29
114
+ 00:02:22,000 --> 00:02:23,000
115
+ in software.
116
+
117
+ 30
118
+ 00:02:23,000 --> 00:02:30,000
119
+ Now, if you are planning to add a new room to the house new features, you need to decide how much
120
+
121
+ 31
122
+ 00:02:30,000 --> 00:02:36,000
123
+ time and resources you can allocate to fixing existing issues before you start building.
124
+
125
+ 32
126
+ 00:02:37,000 --> 00:02:46,000
127
+ Let's learn use cases when on practices is recommended for you to use this metric before planning iterations,
128
+
129
+ 33
130
+ 00:02:46,000 --> 00:02:51,000
131
+ imagine that you are planning the next set of tasks for your software project.
132
+
133
+ 34
134
+ 00:02:52,000 --> 00:03:00,000
135
+ Before diving into new features, check the tech debt ratio if it is in the red zone, which is more
136
+
137
+ 35
138
+ 00:03:00,000 --> 00:03:01,000
139
+ than 20%.
140
+
141
+ 36
142
+ 00:03:01,000 --> 00:03:08,000
143
+ It is like saying we have a lot of house maintenance to do before we can add that new room.
144
+
145
+ 37
146
+ 00:03:09,000 --> 00:03:14,000
147
+ This prompts the team to prioritize fixing issues before building new things.
148
+
149
+ 38
150
+ 00:03:15,000 --> 00:03:18,000
151
+ Another use case during the roadmap review.
152
+
153
+ 39
154
+ 00:03:18,000 --> 00:03:23,000
155
+ Imagine that you are reviewing the long Tum plan for your software project.
156
+
157
+ 40
158
+ 00:03:23,000 --> 00:03:29,000
159
+ Look at the tasks that require to understand the overall health of your code base.
160
+
161
+ 41
162
+ 00:03:29,000 --> 00:03:37,000
163
+ If it is consistently in the amber zone, which is between 10 to 20%, it signals that ongoing attention
164
+
165
+ 42
166
+ 00:03:37,000 --> 00:03:40,000
167
+ to technical debt is needed.
168
+
169
+ 43
170
+ 00:03:40,000 --> 00:03:45,000
171
+ This ensures that the house maintenance is kept in check over the long run.
172
+
173
+ 44
174
+ 00:03:46,000 --> 00:03:51,000
175
+ From where you can learn about this metric and how you can gather it.
176
+
177
+ 45
178
+ 00:03:51,000 --> 00:03:57,000
179
+ Usually it is recommended to track technical debt somehow in task management tool.
180
+
181
+ 46
182
+ 00:03:57,000 --> 00:04:05,000
183
+ For example, after some demo session, or after some release or during the development, Kim mentioned
184
+
185
+ 47
186
+ 00:04:05,000 --> 00:04:12,000
187
+ that we don't need to forget to rework design of some module in order to support its scaling in the
188
+
189
+ 48
190
+ 00:04:12,000 --> 00:04:13,000
191
+ future.
192
+
193
+ 49
194
+ 00:04:13,000 --> 00:04:20,000
195
+ And if you are a good leader, good manager, you create a task and put it into task management tool.
196
+
197
+ 50
198
+ 00:04:21,000 --> 00:04:28,000
199
+ You can track all technical debt tasks separately in one container, or put in some special label on
200
+
201
+ 51
202
+ 00:04:28,000 --> 00:04:35,000
203
+ them in order to be able to find them quickly in the future so you can find them easily and estimate
204
+
205
+ 52
206
+ 00:04:35,000 --> 00:04:37,000
207
+ them with the team.
208
+
209
+ 53
210
+ 00:04:37,000 --> 00:04:43,000
211
+ If you don't track technical debt at all at your project, you have to start from tracking technical
212
+
213
+ 54
214
+ 00:04:43,000 --> 00:04:45,000
215
+ debt first.
216
+
217
+ 55
218
+ 00:04:45,000 --> 00:04:53,000
219
+ This is super important regarding metrics interpretation, I believe it is relatively simple and clear
220
+
221
+ 56
222
+ 00:04:53,000 --> 00:04:55,000
223
+ to understand how to read this metric.
224
+
225
+ 57
226
+ 00:04:56,000 --> 00:05:05,000
227
+ The bigger value, the bigger technical debt is 100% means that you have tagged that equal to remaining
228
+
229
+ 58
230
+ 00:05:05,000 --> 00:05:06,000
231
+ estimated scope.
232
+
233
+ 59
234
+ 00:05:07,000 --> 00:05:15,000
235
+ More than 100% means that your tech debt is bigger than new scope implementation.
236
+
237
+ 60
238
+ 00:05:16,000 --> 00:05:20,000
239
+ Let's now learn target KPIs for this metric in order.
240
+
241
+ 61
242
+ 00:05:20,000 --> 00:05:23,000
243
+ You could understand what we need to aim for.
244
+
245
+ 62
246
+ 00:05:24,000 --> 00:05:30,000
247
+ If you don't know what KPI is, please check my lesson about metrics and KPIs.
248
+
249
+ 63
250
+ 00:05:30,000 --> 00:05:33,000
251
+ So we have red, Amber and Green Zone.
252
+
253
+ 64
254
+ 00:05:34,000 --> 00:05:40,000
255
+ During this course we are going to review my recommendations about target KPI for each metric.
256
+
257
+ 65
258
+ 00:05:40,000 --> 00:05:46,000
259
+ But please remember that KPI is it is something specific to your project.
260
+
261
+ 66
262
+ 00:05:46,000 --> 00:05:52,000
263
+ Each project has unique scope, specific timeframes, limit of resources.
264
+
265
+ 67
266
+ 00:05:52,000 --> 00:05:58,000
267
+ Each project has different level of complexity, different size of the teams that works on the project.
268
+
269
+ 68
270
+ 00:05:58,000 --> 00:06:02,000
271
+ Teams may have different levels of maturity and lots more.
272
+
273
+ 69
274
+ 00:06:03,000 --> 00:06:11,000
275
+ There are hundreds of factors that may impact KPI, so treat my recommendations as recommendations and
276
+
277
+ 70
278
+ 00:06:11,000 --> 00:06:12,000
279
+ apply them wisely.
280
+
281
+ 71
282
+ 00:06:13,000 --> 00:06:15,000
283
+ Don't go back to your project blindly.
284
+
285
+ 72
286
+ 00:06:15,000 --> 00:06:21,000
287
+ Set a new KPIs and telling your team that Andre from Udemy told you to do so.
288
+
289
+ 73
290
+ 00:06:21,000 --> 00:06:25,000
291
+ Apply all KPIs wisely, considering project context.
292
+
293
+ 74
294
+ 00:06:25,000 --> 00:06:32,000
295
+ So let's review recommended KPIs for tech that ratio metric, we can say that we are in the red zone
296
+
297
+ 75
298
+ 00:06:32,000 --> 00:06:36,000
299
+ in case the value of the metric is more than 20%.
300
+
301
+ 76
302
+ 00:06:37,000 --> 00:06:38,000
303
+ Real life analogy.
304
+
305
+ 77
306
+ 00:06:38,000 --> 00:06:44,000
307
+ Your house needs urgent repairs before you can think about adding anything new.
308
+
309
+ 78
310
+ 00:06:45,000 --> 00:06:47,000
311
+ Another analogy from software development.
312
+
313
+ 79
314
+ 00:06:48,000 --> 00:06:54,000
315
+ For instance, if the application has severe security vulnerabilities, it is like having a critical
316
+
317
+ 80
318
+ 00:06:54,000 --> 00:06:57,000
319
+ flaw in the foundation of your software.
320
+
321
+ 81
322
+ 00:06:58,000 --> 00:07:05,000
323
+ You were so busy with feature development that you completely forgot about security requirements before
324
+
325
+ 82
326
+ 00:07:05,000 --> 00:07:08,000
327
+ thinking about adding new functionalities.
328
+
329
+ 83
330
+ 00:07:08,000 --> 00:07:12,000
331
+ Addressing these urgent issues becomes a top priority.
332
+
333
+ 84
334
+ 00:07:12,000 --> 00:07:19,000
335
+ Immediate actions may involve patching security vulnerabilities, resolving critical bugs that impact
336
+
337
+ 85
338
+ 00:07:19,000 --> 00:07:23,000
339
+ user experience, or improving the overall stability of the software.
340
+
341
+ 86
342
+ 00:07:24,000 --> 00:07:31,000
343
+ So in this case, it is recommended to prioritize and schedule fixing technical debt in upcoming work.
344
+
345
+ 87
346
+ 00:07:31,000 --> 00:07:37,000
347
+ We are in the amber zone in case value of the metric is between 10 and 20.
348
+
349
+ 88
350
+ 00:07:37,000 --> 00:07:39,000
351
+ Real life analogy.
352
+
353
+ 89
354
+ 00:07:39,000 --> 00:07:43,000
355
+ Your house needs regular maintenance to prevent major issues.
356
+
357
+ 90
358
+ 00:07:43,000 --> 00:07:50,000
359
+ And if we're talking about software development example imagine the following case identifying moderate
360
+
361
+ 91
362
+ 00:07:50,000 --> 00:07:57,000
363
+ code smells or performance bottlenecks that, while not urgent, could lead to more significant problems
364
+
365
+ 92
366
+ 00:07:57,000 --> 00:07:59,000
367
+ if left unattended.
368
+
369
+ 93
370
+ 00:08:00,000 --> 00:08:08,000
371
+ So it is always recommended regularly address high priority technical debt items and we are in the green
372
+
373
+ 94
374
+ 00:08:08,000 --> 00:08:13,000
375
+ zone in case value of this metric is less than 10%.
376
+
377
+ 95
378
+ 00:08:13,000 --> 00:08:15,000
379
+ Example from real life.
380
+
381
+ 96
382
+ 00:08:15,000 --> 00:08:20,000
383
+ Your house is well maintained, allowing you to plan for improvements.
384
+
385
+ 97
386
+ 00:08:21,000 --> 00:08:23,000
387
+ Example from software development.
388
+
389
+ 98
390
+ 00:08:23,000 --> 00:08:30,000
391
+ It is like having a well maintained code base that allows for planned improvements and new features.
392
+
393
+ 99
394
+ 00:08:30,000 --> 00:08:38,000
395
+ In this case, feel free to add technical debt items to the plan based on priority and available capacity.
396
+
397
+ 100
398
+ 00:08:39,000 --> 00:08:43,000
399
+ Let's review recommended actions to achieve KPI.
400
+
401
+ 101
402
+ 00:08:43,000 --> 00:08:50,000
403
+ Prioritize and address critical technical debt items that may impact stability or maintainability of
404
+
405
+ 102
406
+ 00:08:50,000 --> 00:08:51,000
407
+ the code base.
408
+
409
+ 103
410
+ 00:08:51,000 --> 00:08:56,000
411
+ Allocate resources to resolve high priority issues promptly.
412
+
413
+ 104
414
+ 00:08:56,000 --> 00:09:03,000
415
+ Integrate automated code analysis tools into the development workflow to catch and address technical
416
+
417
+ 105
418
+ 00:09:03,000 --> 00:09:06,000
419
+ debt early in the development process.
420
+
421
+ 106
422
+ 00:09:06,000 --> 00:09:11,000
423
+ This proactive approach helps identify issues before they accumulate.
424
+
425
+ 107
426
+ 00:09:11,000 --> 00:09:18,000
427
+ Schedule periodic refactoring and code improvement sprints to systematically reuse technical debt over
428
+
429
+ 108
430
+ 00:09:18,000 --> 00:09:19,000
431
+ time.
432
+
433
+ 109
434
+ 00:09:19,000 --> 00:09:26,000
435
+ Allocate dedicated time during the development cycles to address identified tech debt items.
436
+
437
+ 110
438
+ 00:09:27,000 --> 00:09:34,000
439
+ Foster a culture of code quality and refactoring within the development team and encourage best practices.
440
+
441
+ 111
442
+ 00:09:34,000 --> 00:09:41,000
443
+ Conduct regular code reviews and emphasize the importance of writing clean, maintainable code.
444
+
445
+ 112
446
+ 00:09:41,000 --> 00:09:47,000
447
+ Regularly address high priority technical debt items identified through ongoing assessments.
448
+
449
+ 113
450
+ 00:09:47,000 --> 00:09:54,000
451
+ Implement a consistent schedule for addressing these items to prevent them from escalating, and in
452
+
453
+ 114
454
+ 00:09:54,000 --> 00:10:02,000
455
+ case you are in green zone of your KPI, add technical debt items to the iteration plan based on priority
456
+
457
+ 115
458
+ 00:10:02,000 --> 00:10:05,000
459
+ and if capacity allows.
460
+
461
+ 116
462
+ 00:10:05,000 --> 00:10:11,000
463
+ This can be done alongside feature development and ensuring a balanced approach that addresses tech
464
+
465
+ 117
466
+ 00:10:11,000 --> 00:10:14,000
467
+ debt without compromising new functionalities.
468
+
469
+ 118
470
+ 00:10:15,000 --> 00:10:21,000
471
+ These recommended actions provide a strategic approach for development teams to manage technical debt
472
+
473
+ 119
474
+ 00:10:21,000 --> 00:10:25,000
475
+ effectively, based on the tech debt ratio.
476
+
477
+ 120
478
+ 00:10:25,000 --> 00:10:31,000
479
+ Promoting the balance between addressing critical issues and fostering continuous improvement in code
480
+
481
+ 121
482
+ 00:10:31,000 --> 00:10:32,000
483
+ quality.
484
+
485
+ 122
486
+ 00:10:32,000 --> 00:10:36,000
487
+ So let's make a brief summary about this metric.
488
+
489
+ 123
490
+ 00:10:36,000 --> 00:10:42,000
491
+ Understanding and managing technical debt is crucial for sustainable software development.
492
+
493
+ 124
494
+ 00:10:42,000 --> 00:10:50,000
495
+ The tech that ratio provides a clear signal for teams to balance innovation, building new features
496
+
497
+ 125
498
+ 00:10:50,000 --> 00:10:53,000
499
+ with the necessary maintenance.
500
+
501
+ 126
502
+ 00:10:53,000 --> 00:11:00,000
503
+ Addressing technical debt to ensure the long tum health of their software projects.
504
+
505
+ 127
506
+ 00:11:00,000 --> 00:11:03,000
507
+ Just like taking care of a house.
508
+
509
+ 128
510
+ 00:11:03,000 --> 00:11:10,000
511
+ Keeping technical debt in check ensures a stable foundation for continuous growth and improvement in
512
+
513
+ 129
514
+ 00:11:10,000 --> 00:11:11,000
515
+ software development.
516
+
517
+ 130
518
+ 00:11:11,000 --> 00:11:17,000
519
+ The next metric that we are going to review is stack that index the same as previous metric.
520
+
521
+ 131
522
+ 00:11:17,000 --> 00:11:19,000
523
+ It relates to technical debt.
524
+
525
+ 132
526
+ 00:11:20,000 --> 00:11:27,000
527
+ The technical debt index is a metric that quantifies the overall technical debt within a software project.
528
+
529
+ 133
530
+ 00:11:28,000 --> 00:11:36,000
531
+ Technical debt consists of the consequences of decisions taken, compromises and suboptimal design or
532
+
533
+ 134
534
+ 00:11:36,000 --> 00:11:40,000
535
+ coding choices made during the development process.
536
+
537
+ 135
538
+ 00:11:40,000 --> 00:11:48,000
539
+ This metric aims to measure the cumulative impact of these decisions, highlighting areas that may require
540
+
541
+ 136
542
+ 00:11:48,000 --> 00:11:49,000
543
+ future attention.
544
+
545
+ 137
546
+ 00:11:50,000 --> 00:11:54,000
547
+ Let's review use cases for real life analogy.
548
+
549
+ 138
550
+ 00:11:54,000 --> 00:11:59,000
551
+ Consider technical debt as a delayed maintenance of a vehicle.
552
+
553
+ 139
554
+ 00:12:00,000 --> 00:12:08,000
555
+ If you postpone necessary repairs, the overall condition of the vehicle degrades, requiring more effort
556
+
557
+ 140
558
+ 00:12:08,000 --> 00:12:10,000
559
+ to address in the future.
560
+
561
+ 141
562
+ 00:12:10,000 --> 00:12:17,000
563
+ Similarly, in software development, postponing necessary improvements can accumulate technical debt,
564
+
565
+ 142
566
+ 00:12:17,000 --> 00:12:22,000
567
+ leading to increased maintenance efforts and challenges in future development.
568
+
569
+ 143
570
+ 00:12:22,000 --> 00:12:30,000
571
+ Imagine a project where developers make rational decisions to meet tight deadlines, resulting in less
572
+
573
+ 144
574
+ 00:12:30,000 --> 00:12:31,000
575
+ than optimal code.
576
+
577
+ 145
578
+ 00:12:32,000 --> 00:12:40,000
579
+ As the project progresses, the team realizes that these decisions accumulate technical debt, impacting
580
+
581
+ 146
582
+ 00:12:40,000 --> 00:12:42,000
583
+ system stability and future development.
584
+
585
+ 147
586
+ 00:12:43,000 --> 00:12:45,000
587
+ How to measure this metric.
588
+
589
+ 148
590
+ 00:12:46,000 --> 00:12:53,000
591
+ The technical debt index is calculated by summing the values of identified technical debt items.
592
+
593
+ 149
594
+ 00:12:53,000 --> 00:13:00,000
595
+ These items can be measured in various units such as hours, days, study points, or other relevant
596
+
597
+ 150
598
+ 00:13:00,000 --> 00:13:01,000
599
+ measurement units.
600
+
601
+ 151
602
+ 00:13:02,000 --> 00:13:10,000
603
+ Like I already said, it is recommended to track tech debt separately using labels, epics or containers
604
+
605
+ 152
606
+ 00:13:10,000 --> 00:13:12,000
607
+ in task management system.
608
+
609
+ 153
610
+ 00:13:12,000 --> 00:13:17,000
611
+ We already discussed this during the review of tech debt ratio metric.
612
+
613
+ 154
614
+ 00:13:17,000 --> 00:13:21,000
615
+ The recommendations for tech debt tracking are the same.
616
+
617
+ 155
618
+ 00:13:22,000 --> 00:13:25,000
619
+ Interpretation how to read this value.
620
+
621
+ 156
622
+ 00:13:26,000 --> 00:13:30,000
623
+ Think of technical debt as a growing to do list.
624
+
625
+ 157
626
+ 00:13:30,000 --> 00:13:35,000
627
+ The longer the list, the more work is needed to enhance the system.
628
+
629
+ 158
630
+ 00:13:35,000 --> 00:13:43,000
631
+ A higher technical debt index indicates a greater need for future refactoring or improvement efforts,
632
+
633
+ 159
634
+ 00:13:43,000 --> 00:13:49,000
635
+ while lower levels suggest a code base that requires less immediate attention.
636
+
637
+ 160
638
+ 00:13:50,000 --> 00:13:54,000
639
+ Let's talk about target KPIs that we aim to achieve.
640
+
641
+ 161
642
+ 00:13:55,000 --> 00:14:03,000
643
+ The recommended target KPI is influenced by various factors such as tech debt, potential impact, project
644
+
645
+ 162
646
+ 00:14:03,000 --> 00:14:06,000
647
+ duration, team seniority, and more.
648
+
649
+ 163
650
+ 00:14:06,000 --> 00:14:14,000
651
+ High levels of technical debt suggest a greater need for future improvements, while lower levels indicate
652
+
653
+ 164
654
+ 00:14:14,000 --> 00:14:17,000
655
+ a code base required less immediate attention.
656
+
657
+ 165
658
+ 00:14:18,000 --> 00:14:22,000
659
+ There is another point that you should always remember about.
660
+
661
+ 166
662
+ 00:14:22,000 --> 00:14:29,000
663
+ Imagine that you have technical debt that would increase cost of implementation of new feature ten times
664
+
665
+ 167
666
+ 00:14:29,000 --> 00:14:30,000
667
+ more.
668
+
669
+ 168
670
+ 00:14:30,000 --> 00:14:37,000
671
+ And in case you would refactor the code, change the design to achieve better code reusability, you
672
+
673
+ 169
674
+ 00:14:37,000 --> 00:14:40,000
675
+ would save time for implementation of the new feature.
676
+
677
+ 170
678
+ 00:14:40,000 --> 00:14:46,000
679
+ You will save time for testing new feature because existing code is tested already.
680
+
681
+ 171
682
+ 00:14:46,000 --> 00:14:48,000
683
+ Thus you will save a lot of money.
684
+
685
+ 172
686
+ 00:14:48,000 --> 00:14:56,000
687
+ Of course, this is just one test that work item, but it converts hundreds of other tasks that work
688
+
689
+ 173
690
+ 00:14:56,000 --> 00:15:02,000
691
+ items like refactoring unit tests in modules that rarely used, for example.
692
+
693
+ 174
694
+ 00:15:02,000 --> 00:15:10,000
695
+ So any way you will prioritize one technical debt work item over others and when you will measure tech
696
+
697
+ 175
698
+ 00:15:10,000 --> 00:15:18,000
699
+ debt, you can also include priority scale to understand how many of high priority tech debt items you
700
+
701
+ 176
702
+ 00:15:18,000 --> 00:15:22,000
703
+ have, and how many low priority tax debt items you have.
704
+
705
+ 177
706
+ 00:15:22,000 --> 00:15:29,000
707
+ That's why for this specific metric, it is hard to recommend some specific and measurable KPIs because,
708
+
709
+ 178
710
+ 00:15:29,000 --> 00:15:36,000
711
+ as you already understand, project specifics impacts a lot on KPIs for this metric.
712
+
713
+ 179
714
+ 00:15:37,000 --> 00:15:43,000
715
+ Let's review recommended actions and what you can do to achieve KPIs.
716
+
717
+ 180
718
+ 00:15:43,000 --> 00:15:50,000
719
+ So all advices from review of previous metric, like prioritizing critical technical debt items and
720
+
721
+ 181
722
+ 00:15:50,000 --> 00:15:54,000
723
+ schedule periodic refactoring are applicable in this case too.
724
+
725
+ 182
726
+ 00:15:55,000 --> 00:16:02,000
727
+ On top of that, I would like to give some more recommendations using sites from technical debt assessments
728
+
729
+ 183
730
+ 00:16:02,000 --> 00:16:10,000
731
+ to set development practices, implement coding standards, conduct code reviews, and emphasize code
732
+
733
+ 184
734
+ 00:16:10,000 --> 00:16:15,000
735
+ quality in the development process to prevent the accumulation of similar issues.
736
+
737
+ 185
738
+ 00:16:15,000 --> 00:16:20,000
739
+ Communicate the importance of managing technical debt to stakeholders.
740
+
741
+ 186
742
+ 00:16:20,000 --> 00:16:28,000
743
+ Provide clear explanation of how addressing technical debt contributes to a more sustainable and adaptable
744
+
745
+ 187
746
+ 00:16:28,000 --> 00:16:30,000
747
+ software development process.
748
+
749
+ 188
750
+ 00:16:30,000 --> 00:16:38,000
751
+ Plan work accordingly by incorporating tech debt into the regular work plan dependent on established
752
+
753
+ 189
754
+ 00:16:38,000 --> 00:16:39,000
755
+ KPIs.
756
+
757
+ 190
758
+ 00:16:39,000 --> 00:16:47,000
759
+ Allocate a portion of development cycles to address identified tech debt items alongside feature development.
760
+
761
+ 191
762
+ 00:16:47,000 --> 00:16:54,000
763
+ And take my recommendation here if you would think that someday in the future, you will be given by
764
+
765
+ 192
766
+ 00:16:54,000 --> 00:17:00,000
767
+ business stakeholders to weeks or months to address all tech debt.
768
+
769
+ 193
770
+ 00:17:00,000 --> 00:17:01,000
771
+ Never believes this.
772
+
773
+ 194
774
+ 00:17:02,000 --> 00:17:02,000
775
+ Really.
776
+
777
+ 195
778
+ 00:17:02,000 --> 00:17:03,000
779
+ I'm not joking.
780
+
781
+ 196
782
+ 00:17:03,000 --> 00:17:11,000
783
+ No matter how confident you are in the person business, very rarely, almost never prioritize work
784
+
785
+ 197
786
+ 00:17:11,000 --> 00:17:15,000
787
+ on technical debt over new feature development.
788
+
789
+ 198
790
+ 00:17:15,000 --> 00:17:17,000
791
+ So plan work on tech debt.
792
+
793
+ 199
794
+ 00:17:17,000 --> 00:17:25,000
795
+ Gradually sprint by sprint, iteration by iteration by adding new portion of tech debt into each new
796
+
797
+ 200
798
+ 00:17:25,000 --> 00:17:26,000
799
+ scope of work.
800
+
801
+ 201
802
+ 00:17:26,000 --> 00:17:33,000
803
+ Pay attention to the potential impact and risks associated with different tech debt items.
804
+
805
+ 202
806
+ 00:17:33,000 --> 00:17:36,000
807
+ Understand that not all items are equal.
808
+
809
+ 203
810
+ 00:17:36,000 --> 00:17:42,000
811
+ One critical tag that item may impact the entire application's architecture.
812
+
813
+ 204
814
+ 00:17:43,000 --> 00:17:43,000
815
+ Prioritize.
816
+
817
+ 205
818
+ 00:17:43,000 --> 00:17:47,000
819
+ Work wisely based on potential risks and impacts.
820
+
821
+ 206
822
+ 00:17:48,000 --> 00:17:56,000
823
+ If your project manager ensures that team validates and evaluates tech debt on regular basis, encourage
824
+
825
+ 207
826
+ 00:17:56,000 --> 00:18:02,000
827
+ a culture of continuous improvement, emphasizing the value of addressing tech debt for long terme project
828
+
829
+ 208
830
+ 00:18:02,000 --> 00:18:03,000
831
+ success.
832
+
833
+ 209
834
+ 00:18:03,000 --> 00:18:11,000
835
+ To sum it up, the Technical Debt Index helps development teams and stakeholders understand the long
836
+
837
+ 210
838
+ 00:18:11,000 --> 00:18:14,000
839
+ tum implications of technical decisions.
840
+
841
+ 211
842
+ 00:18:14,000 --> 00:18:21,000
843
+ It emphasizes the need to balance speed with code quality, highlighting areas that may require.
844
+
845
+ 212
846
+ 00:18:22,000 --> 00:18:23,000
847
+ Future attention.
848
+
849
+ 213
850
+ 00:18:23,000 --> 00:18:31,000
851
+ The metric helps in planning by evaluating the amount of technical debt, allowing for informed decision
852
+
853
+ 214
854
+ 00:18:31,000 --> 00:18:35,000
855
+ making during the planning of the next reporting period.
856
+
857
+ 215
858
+ 00:18:35,000 --> 00:18:42,000
859
+ It encourages teams to prioritize wisely, addressing critical technical debt items that may impact
860
+
861
+ 216
862
+ 00:18:42,000 --> 00:18:45,000
863
+ stability or maintainability.
864
+
865
+ 217
866
+ 00:18:45,000 --> 00:18:54,000
867
+ Project managers play a crucial role in ensuring teams regularly validate and evaluate tech debt, allocating
868
+
869
+ 218
870
+ 00:18:54,000 --> 00:19:00,000
871
+ time for periodic refactoring and code improvement sprints to reduce technical debt over time.
872
+
873
+ 219
874
+ 00:19:01,000 --> 00:19:07,000
875
+ Communicating the importance of managing technical debt to stakeholders ensures it is considered in
876
+
877
+ 220
878
+ 00:19:07,000 --> 00:19:13,000
879
+ project planning and decision making, contributing to a more sustainable and maintainable software
880
+
881
+ 221
882
+ 00:19:13,000 --> 00:19:14,000
883
+ development process.
884
+
885
+ 222
886
+ 00:19:15,000 --> 00:19:16,000
887
+ Let's move on.
888
+
889
+ 223
890
+ 00:19:17,000 --> 00:19:22,000
891
+ And the last but not the least metric for today's lesson is Cyclomatic complexity.
892
+
893
+ 224
894
+ 00:19:22,000 --> 00:19:28,000
895
+ Cyclomatic complexity is a metric used to measure the complexity of a software programs.
896
+
897
+ 225
898
+ 00:19:28,000 --> 00:19:29,000
899
+ Control flow.
900
+
901
+ 226
902
+ 00:19:30,000 --> 00:19:37,000
903
+ It provides a numerical value indicating the number of independent paths through a program's source
904
+
905
+ 227
906
+ 00:19:37,000 --> 00:19:40,000
907
+ code, representing decision points or branches.
908
+
909
+ 228
910
+ 00:19:40,000 --> 00:19:48,000
911
+ This metric helps assess the program's complexity, allowing developers to identify areas that might
912
+
913
+ 229
914
+ 00:19:48,000 --> 00:19:51,000
915
+ be challenging to maintain or prone to errors.
916
+
917
+ 230
918
+ 00:19:52,000 --> 00:19:57,000
919
+ Let's talk about use cases and let me provide you with real life analogy.
920
+
921
+ 231
922
+ 00:19:57,000 --> 00:20:00,000
923
+ Think of a city road network.
924
+
925
+ 232
926
+ 00:20:00,000 --> 00:20:06,000
927
+ The more intersections and choices a driver faces, the more complex the route.
928
+
929
+ 233
930
+ 00:20:07,000 --> 00:20:14,000
931
+ Similarly, in software, the more decision points in the code, the higher the cyclomatic complexity.
932
+
933
+ 234
934
+ 00:20:14,000 --> 00:20:20,000
935
+ Consider a function that involves multiple conditional statements, loops, or branching.
936
+
937
+ 235
938
+ 00:20:21,000 --> 00:20:27,000
939
+ The cyclomatic complexity helps quantify the complexity of navigating through these different paths.
940
+
941
+ 236
942
+ 00:20:28,000 --> 00:20:31,000
943
+ How to measure this metric and how it is calculated.
944
+
945
+ 237
946
+ 00:20:32,000 --> 00:20:42,000
947
+ Cyclomatic complexity is calculated using the formula E minus n plus double P, where E is the number
948
+
949
+ 238
950
+ 00:20:42,000 --> 00:20:50,000
951
+ of edges and is the number of nodes, and p is the number of connected components in the control flow
952
+
953
+ 239
954
+ 00:20:50,000 --> 00:20:51,000
955
+ graph.
956
+
957
+ 240
958
+ 00:20:52,000 --> 00:21:00,000
959
+ Static code analysis tools like Sonarqube automatically calculate Cyclomatic complexity based on the
960
+
961
+ 241
962
+ 00:21:00,000 --> 00:21:02,000
963
+ program's control flow graph.
964
+
965
+ 242
966
+ 00:21:03,000 --> 00:21:07,000
967
+ So you don't need to worry about calculating this metric manually.
968
+
969
+ 243
970
+ 00:21:07,000 --> 00:21:14,000
971
+ In general, using of Sonarqube gives you an opportunity to measure a lot of other development metrics.
972
+
973
+ 244
974
+ 00:21:15,000 --> 00:21:17,000
975
+ So how to read this value?
976
+
977
+ 245
978
+ 00:21:17,000 --> 00:21:26,000
979
+ A lower cyclomatic complexity value, which is less than five, suggests simpler code with fewer decision
980
+
981
+ 246
982
+ 00:21:26,000 --> 00:21:31,000
983
+ points, potentially leading to easier maintenance and fewer errors.
984
+
985
+ 247
986
+ 00:21:32,000 --> 00:21:40,000
987
+ A moderate cyclomatic complexity value, which is between 5 and 10, indicates a moderate level of complexity.
988
+
989
+ 248
990
+ 00:21:41,000 --> 00:21:48,000
991
+ A higher cyclomatic complexity value, which can be considered as more than ten, suggests more complex
992
+
993
+ 249
994
+ 00:21:48,000 --> 00:21:54,000
995
+ code requiring additional attention and possibility refactoring for improved readability.
996
+
997
+ 250
998
+ 00:21:55,000 --> 00:22:01,000
999
+ Let's review recommended KPIs that we want to achieve in the red zone.
1000
+
1001
+ 251
1002
+ 00:22:01,000 --> 00:22:08,000
1003
+ A cyclomatic complexity value exceeding ten points to complex code sections that may resemble a tangle
1004
+
1005
+ 252
1006
+ 00:22:08,000 --> 00:22:12,000
1007
+ of decision points, loops, and intricate logic.
1008
+
1009
+ 253
1010
+ 00:22:12,000 --> 00:22:18,000
1011
+ Imagine a function with multiple nested if else statements, each containing further branching.
1012
+
1013
+ 254
1014
+ 00:22:19,000 --> 00:22:25,000
1015
+ For instance, a payment processing module with numerous conditions for handling various payment methods
1016
+
1017
+ 255
1018
+ 00:22:25,000 --> 00:22:29,000
1019
+ and exceptions might have high cyclomatic complexity.
1020
+
1021
+ 256
1022
+ 00:22:30,000 --> 00:22:37,000
1023
+ In this scenario, developers need to prioritize addressing this complexity to enhance maintainability
1024
+
1025
+ 257
1026
+ 00:22:37,000 --> 00:22:42,000
1027
+ and reduce the risk of introducing errors during future modifications.
1028
+
1029
+ 258
1030
+ 00:22:42,000 --> 00:22:51,000
1031
+ Entering the umbra zone, where cyclomatic complexity falls between 5 and 10, you may encounter moderately
1032
+
1033
+ 259
1034
+ 00:22:51,000 --> 00:22:54,000
1035
+ complex code that requires careful attention.
1036
+
1037
+ 260
1038
+ 00:22:54,000 --> 00:23:01,000
1039
+ Consider a module responsible for user authentication, involving various checks for user roles, permissions,
1040
+
1041
+ 261
1042
+ 00:23:01,000 --> 00:23:03,000
1043
+ and authentication methods.
1044
+
1045
+ 262
1046
+ 00:23:04,000 --> 00:23:07,000
1047
+ This could lead to a moderate cyclomatic complexity.
1048
+
1049
+ 263
1050
+ 00:23:08,000 --> 00:23:14,000
1051
+ Developers should regularly address high priority technical debt items, such as simplifying intricate
1052
+
1053
+ 264
1054
+ 00:23:14,000 --> 00:23:19,000
1055
+ logic or breaking down complex functions into more manageable units.
1056
+
1057
+ 265
1058
+ 00:23:19,000 --> 00:23:26,000
1059
+ Code reviews become pivotal to manage the balance between functionality and maintainability.
1060
+
1061
+ 266
1062
+ 00:23:26,000 --> 00:23:35,000
1063
+ In the green Zone, with cyclomatic complexity below five, the code exhibits simplicity and clarity,
1064
+
1065
+ 267
1066
+ 00:23:35,000 --> 00:23:38,000
1067
+ resembling a well-organized and straightforward structure.
1068
+
1069
+ 268
1070
+ 00:23:39,000 --> 00:23:46,000
1071
+ Think of utility functions that performs a specific, clearly defined task with minimal branching.
1072
+
1073
+ 269
1074
+ 00:23:46,000 --> 00:23:53,000
1075
+ For example, a utility function that converts temperature units or formats dates might have a low cyclomatic
1076
+
1077
+ 270
1078
+ 00:23:53,000 --> 00:23:54,000
1079
+ complexity.
1080
+
1081
+ 271
1082
+ 00:23:55,000 --> 00:24:02,000
1083
+ Developers can confidently add technical debt items to the iteration plan, focusing on coding standards
1084
+
1085
+ 272
1086
+ 00:24:02,000 --> 00:24:07,000
1087
+ and best practices to maintain this favorable level of complexity.
1088
+
1089
+ 273
1090
+ 00:24:07,000 --> 00:24:14,000
1091
+ The Green Zone represents an environment where code is easy to understand, minimizing the chances of
1092
+
1093
+ 274
1094
+ 00:24:14,000 --> 00:24:16,000
1095
+ introducing errors during development.
1096
+
1097
+ 275
1098
+ 00:24:16,000 --> 00:24:23,000
1099
+ Understanding these KPIs in practical terms empowers developers to assess and manage code complexity
1100
+
1101
+ 276
1102
+ 00:24:23,000 --> 00:24:29,000
1103
+ effectively, ensuring the creation and maintenance of robust and sustainable software.
1104
+
1105
+ 277
1106
+ 00:24:30,000 --> 00:24:36,000
1107
+ Now let's review some real life scenario and recommended actions to achieve KPI.
1108
+
1109
+ 278
1110
+ 00:24:37,000 --> 00:24:44,000
1111
+ Imagine you are working on a critical module of an e-commerce application responsible for order processing.
1112
+
1113
+ 279
1114
+ 00:24:44,000 --> 00:24:52,000
1115
+ The code for handling various audit scenarios has evolved over time, leading to a cyclomatic complexity
1116
+
1117
+ 280
1118
+ 00:24:52,000 --> 00:24:53,000
1119
+ exceeding ten.
1120
+
1121
+ 281
1122
+ 00:24:53,000 --> 00:25:00,000
1123
+ The code involves intricate decision points, loops, and nested conditions, making it challenging
1124
+
1125
+ 282
1126
+ 00:25:00,000 --> 00:25:02,000
1127
+ to comprehend and modify.
1128
+
1129
+ 283
1130
+ 00:25:03,000 --> 00:25:05,000
1131
+ So what actions can be taken?
1132
+
1133
+ 284
1134
+ 00:25:06,000 --> 00:25:11,000
1135
+ Identify and prioritize sections of the code with excessive complexity.
1136
+
1137
+ 285
1138
+ 00:25:11,000 --> 00:25:18,000
1139
+ Collaborate with team members to gain insights into different perspectives on how to address the complexity
1140
+
1141
+ 286
1142
+ 00:25:18,000 --> 00:25:19,000
1143
+ effectively.
1144
+
1145
+ 287
1146
+ 00:25:20,000 --> 00:25:25,000
1147
+ Develop a refactoring plan to simplify the complex code sections.
1148
+
1149
+ 288
1150
+ 00:25:25,000 --> 00:25:32,000
1151
+ Break down large functions into smaller, more manageable ones and streamline decision making processes.
1152
+
1153
+ 289
1154
+ 00:25:32,000 --> 00:25:38,000
1155
+ Ensure that refactoring efforts are aligned with maintaining or improving functionality.
1156
+
1157
+ 290
1158
+ 00:25:39,000 --> 00:25:45,000
1159
+ Establish and enforce coding standards and best practices within the development team.
1160
+
1161
+ 291
1162
+ 00:25:45,000 --> 00:25:51,000
1163
+ Define guidelines for writing clean, modular code and avoiding excessive nesting.
1164
+
1165
+ 292
1166
+ 00:25:51,000 --> 00:25:58,000
1167
+ Encourage adherence to these standards to prevent the recurrence of high cyclomatic complexity.
1168
+
1169
+ 293
1170
+ 00:25:59,000 --> 00:26:05,000
1171
+ Organize training sessions on knowledge sharing forums to enhance the team's awareness of effective
1172
+
1173
+ 294
1174
+ 00:26:05,000 --> 00:26:11,000
1175
+ coding practices, refactoring patterns, and strategies to manage complexity.
1176
+
1177
+ 295
1178
+ 00:26:11,000 --> 00:26:16,000
1179
+ Foster a learning environment where developers can share insights and experiences.
1180
+
1181
+ 296
1182
+ 00:26:17,000 --> 00:26:22,000
1183
+ Introduce static code analysis tools such as Sonarqube into the development workflow.
1184
+
1185
+ 297
1186
+ 00:26:23,000 --> 00:26:28,000
1187
+ Configure these tools to flag errors with high cyclomatic complexity in real time.
1188
+
1189
+ 298
1190
+ 00:26:28,000 --> 00:26:34,000
1191
+ Use automated analysis to catch and address complexity issues early in the development cycle.
1192
+
1193
+ 299
1194
+ 00:26:35,000 --> 00:26:41,000
1195
+ By following these recommended actions, developers can effectively address high cyclomatic complexity,
1196
+
1197
+ 300
1198
+ 00:26:41,000 --> 00:26:47,000
1199
+ fostering a code base that is more understandable, maintainable, and less prone to errors.
1200
+
1201
+ 301
1202
+ 00:26:48,000 --> 00:26:51,000
1203
+ Let's make a conclusion about this metric.
1204
+
1205
+ 302
1206
+ 00:26:51,000 --> 00:26:57,000
1207
+ Cyclomatic complexity is a metric that quantifies code complexity based on decision points.
1208
+
1209
+ 303
1210
+ 00:26:57,000 --> 00:27:04,000
1211
+ It helps developers identify complex areas, assess code quality, and make informed decisions during
1212
+
1213
+ 304
1214
+ 00:27:04,000 --> 00:27:06,000
1215
+ code analysis.
1216
+
1217
+ 305
1218
+ 00:27:06,000 --> 00:27:13,000
1219
+ Lower cyclomatic complexity values indicates simpler code, while higher values may suggest areas requiring
1220
+
1221
+ 306
1222
+ 00:27:13,000 --> 00:27:16,000
1223
+ attention and possible refactoring.
1224
+
1225
+ 307
1226
+ 00:27:17,000 --> 00:27:23,000
1227
+ The Metric Alliance was testing guidance, maintenance efforts, and overall software risk assessment
1228
+
1229
+ 308
1230
+ 00:27:23,000 --> 00:27:24,000
1231
+ in the development process.
1232
+
1233
+ 309
1234
+ 00:27:25,000 --> 00:27:26,000
1235
+ That's all.
1236
+
1237
+ 310
1238
+ 00:27:26,000 --> 00:27:28,000
1239
+ What I wanted to share with you in this lesson.
1240
+
1241
+ 311
1242
+ 00:27:29,000 --> 00:27:32,000
1243
+ Let's recap what we have learned today.
1244
+
1245
+ 312
1246
+ 00:27:32,000 --> 00:27:38,000
1247
+ Today we learned three metrics from my personal metrics library from Engineering Excellence section
1248
+
1249
+ 313
1250
+ 00:27:38,000 --> 00:27:40,000
1251
+ and Development area.
1252
+
1253
+ 314
1254
+ 00:27:40,000 --> 00:27:47,000
1255
+ We learned tech debt ratio tech that index, and Cyclomatic complexity metric.
1256
+
1257
+ 315
1258
+ 00:27:47,000 --> 00:27:54,000
1259
+ For each metric, we reviewed practical use cases, recommended KPIs, and recommended actions about
1260
+
1261
+ 316
1262
+ 00:27:54,000 --> 00:27:56,000
1263
+ how you can achieve the KPI.
1264
+
1265
+ 317
1266
+ 00:27:57,000 --> 00:27:58,000
1267
+ That's it.
1268
+
1269
+ 318
1270
+ 00:27:58,000 --> 00:28:00,000
1271
+ Thank you all for your attention.
1272
+
1273
+ 319
1274
+ 00:28:00,000 --> 00:28:03,000
1275
+ Have a great day and see you in the next lesson.
1276
+
110 - Metrics & KPIs to Monitor and Control Software Development Process/006 Development Metrics & KPIs Unit Test Related Metrics - Part 1_en.srt ADDED
@@ -0,0 +1,772 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1
2
+ 00:00:05,000 --> 00:00:06,000
3
+ Hello dear students.
4
+
5
+ 2
6
+ 00:00:06,000 --> 00:00:12,000
7
+ In this lesson we continue learning metrics from engineering excellence, practice from development
8
+
9
+ 3
10
+ 00:00:12,000 --> 00:00:19,000
11
+ area and today we'll learn the unit test run, success rate, unit test code coverage and incremental
12
+
13
+ 4
14
+ 00:00:19,000 --> 00:00:20,000
15
+ unit test coverage.
16
+
17
+ 5
18
+ 00:00:21,000 --> 00:00:27,000
19
+ For today's lesson, it is important to you to understand the concept of unit testing because we'll
20
+
21
+ 6
22
+ 00:00:27,000 --> 00:00:30,000
23
+ review metrics that are related with unit testing.
24
+
25
+ 7
26
+ 00:00:31,000 --> 00:00:36,000
27
+ That's why we'll start our lesson from learning and refreshing the knowledge about unit testing concept.
28
+
29
+ 8
30
+ 00:00:37,000 --> 00:00:45,000
31
+ I will explain you how unit tests work, what benefits of unit tests are, and what challenges and limitations
32
+
33
+ 9
34
+ 00:00:45,000 --> 00:00:48,000
35
+ of unit tests you should be aware about.
36
+
37
+ 10
38
+ 00:00:48,000 --> 00:00:53,000
39
+ And after that, we'll focus on learning three metrics that I already mentioned.
40
+
41
+ 11
42
+ 00:00:54,000 --> 00:01:01,000
43
+ During review of each metric, we'll learn its definition, use cases, how to measure how to read metrics
44
+
45
+ 12
46
+ 00:01:01,000 --> 00:01:08,000
47
+ and interpret them, what are recommended target KPIs, and what are recommended actions that you can
48
+
49
+ 13
50
+ 00:01:08,000 --> 00:01:10,000
51
+ do after analysis of metrics.
52
+
53
+ 14
54
+ 00:01:11,000 --> 00:01:12,000
55
+ Let's start the lesson.
56
+
57
+ 15
58
+ 00:01:13,000 --> 00:01:18,000
59
+ As I already mentioned, all metrics that we are going to review today are connected with one single
60
+
61
+ 16
62
+ 00:01:18,000 --> 00:01:21,000
63
+ concept unit testing.
64
+
65
+ 17
66
+ 00:01:21,000 --> 00:01:27,000
67
+ So in case you are not familiar with this concept, let me explain it to you so that you can understand
68
+
69
+ 18
70
+ 00:01:27,000 --> 00:01:30,000
71
+ the concept of metrics introduced in this lesson.
72
+
73
+ 19
74
+ 00:01:31,000 --> 00:01:37,000
75
+ Unit tests are fundamental aspect of software development involving the testing of individual units
76
+
77
+ 20
78
+ 00:01:37,000 --> 00:01:39,000
79
+ are components of code.
80
+
81
+ 21
82
+ 00:01:39,000 --> 00:01:47,000
83
+ In isolation, a unit typically refers to the smallest testable part of an application, such as function,
84
+
85
+ 22
86
+ 00:01:47,000 --> 00:01:48,000
87
+ method, or class.
88
+
89
+ 23
90
+ 00:01:49,000 --> 00:01:55,000
91
+ The primary goal of unit testing is to validate that each unit of the software performs as designed,
92
+
93
+ 24
94
+ 00:01:55,000 --> 00:01:59,000
95
+ ensuring its correctness and reliability.
96
+
97
+ 25
98
+ 00:01:59,000 --> 00:02:02,000
99
+ Let's understand how unit tests work.
100
+
101
+ 26
102
+ 00:02:03,000 --> 00:02:09,000
103
+ There are four principles isolation, automation, fast execution, and assertion.
104
+
105
+ 27
106
+ 00:02:10,000 --> 00:02:11,000
107
+ Isolation.
108
+
109
+ 28
110
+ 00:02:11,000 --> 00:02:19,000
111
+ Unit tests focus on a specific piece of code in isolation, excluding external dependencies or interactions.
112
+
113
+ 29
114
+ 00:02:19,000 --> 00:02:23,000
115
+ This isolation helps pinpoint issues within the unit itself.
116
+
117
+ 30
118
+ 00:02:24,000 --> 00:02:31,000
119
+ Automation unit tests are automated, meaning they are written as code and executed automatically as
120
+
121
+ 31
122
+ 00:02:31,000 --> 00:02:33,000
123
+ part of the development or testing process.
124
+
125
+ 32
126
+ 00:02:34,000 --> 00:02:38,000
127
+ This automation ensures consistent and repeatable testing.
128
+
129
+ 33
130
+ 00:02:38,000 --> 00:02:40,000
131
+ Fast execution.
132
+
133
+ 34
134
+ 00:02:40,000 --> 00:02:45,000
135
+ Unit tests are designed to be fast, allowing for quick verification of individual units.
136
+
137
+ 35
138
+ 00:02:46,000 --> 00:02:52,000
139
+ Fast execution enables developers to run tests frequently during development, catching issues early
140
+
141
+ 36
142
+ 00:02:52,000 --> 00:02:54,000
143
+ in the process.
144
+
145
+ 37
146
+ 00:02:54,000 --> 00:03:01,000
147
+ Assertion unit tests include assertions that verify specific conditions or behaviors within the unit.
148
+
149
+ 38
150
+ 00:03:01,000 --> 00:03:07,000
151
+ If an assertion fails during testing, it indicates a potential issue in the code.
152
+
153
+ 39
154
+ 00:03:08,000 --> 00:03:12,000
155
+ There is also another terms that describes unit testing.
156
+
157
+ 40
158
+ 00:03:12,000 --> 00:03:13,000
159
+ It is called first.
160
+
161
+ 41
162
+ 00:03:14,000 --> 00:03:18,000
163
+ First stands for fast, isolated, repeatable self-validating sorrow.
164
+
165
+ 42
166
+ 00:03:19,000 --> 00:03:21,000
167
+ But this is not the lesson about programming.
168
+
169
+ 43
170
+ 00:03:21,000 --> 00:03:27,000
171
+ I believe you already understood the main concept, and if you want to learn more about unit testing,
172
+
173
+ 44
174
+ 00:03:27,000 --> 00:03:34,000
175
+ including details about first terms, this is another topic that I learned with my students in my course
176
+
177
+ 45
178
+ 00:03:34,000 --> 00:03:36,000
179
+ Java from zero to First Job.
180
+
181
+ 46
182
+ 00:03:36,000 --> 00:03:42,000
183
+ And in case you have any questions, please do not hesitate to post your questions below the video and
184
+
185
+ 47
186
+ 00:03:42,000 --> 00:03:44,000
187
+ I will be happy to answer.
188
+
189
+ 48
190
+ 00:03:44,000 --> 00:03:48,000
191
+ At the meantime, let's get back to our agenda of this lesson.
192
+
193
+ 49
194
+ 00:03:48,000 --> 00:03:53,000
195
+ Let's discuss benefits of unit testing, early detection of issues.
196
+
197
+ 50
198
+ 00:03:53,000 --> 00:04:00,000
199
+ Unit tests help identify and fix issues at the earliest stage of development, reducing the likelihood
200
+
201
+ 51
202
+ 00:04:00,000 --> 00:04:03,000
203
+ of bugs propagating to later stages.
204
+
205
+ 52
206
+ 00:04:03,000 --> 00:04:05,000
207
+ Documentation.
208
+
209
+ 53
210
+ 00:04:05,000 --> 00:04:12,000
211
+ Unit tests serve as executable documentation in providing insights into how each unit of code is intended
212
+
213
+ 54
214
+ 00:04:12,000 --> 00:04:13,000
215
+ to function.
216
+
217
+ 55
218
+ 00:04:14,000 --> 00:04:18,000
219
+ This helps developers who may work on the code in the future.
220
+
221
+ 56
222
+ 00:04:19,000 --> 00:04:23,000
223
+ Facilitates refactoring with a robust suite of unit tests.
224
+
225
+ 57
226
+ 00:04:23,000 --> 00:04:31,000
227
+ Developers gain confidence to refactor or modify code if the tests pass after changes, it indicates
228
+
229
+ 58
230
+ 00:04:31,000 --> 00:04:34,000
231
+ that the functionality remains intact.
232
+
233
+ 59
234
+ 00:04:35,000 --> 00:04:38,000
235
+ But what are challenges and limitations of unit testing?
236
+
237
+ 60
238
+ 00:04:39,000 --> 00:04:41,000
239
+ First of all, it is limited scope.
240
+
241
+ 61
242
+ 00:04:41,000 --> 00:04:49,000
243
+ Unit tests focus on isolated units, and some issues may only be notable when components interact.
244
+
245
+ 62
246
+ 00:04:49,000 --> 00:04:55,000
247
+ Additional testing layers, such as integration and end to end testing are needed for comprehensive
248
+
249
+ 63
250
+ 00:04:55,000 --> 00:04:55,000
251
+ coverage.
252
+
253
+ 64
254
+ 00:04:56,000 --> 00:05:01,000
255
+ Another things that you need to remember is maintenance overhead as code evolves.
256
+
257
+ 65
258
+ 00:05:01,000 --> 00:05:05,000
259
+ Unit tests may require updates to align with changes.
260
+
261
+ 66
262
+ 00:05:05,000 --> 00:05:11,000
263
+ While this ensures test relevance, it also introduces maintenance overhead.
264
+
265
+ 67
266
+ 00:05:11,000 --> 00:05:15,000
267
+ Unit test is a code that you also need to support.
268
+
269
+ 68
270
+ 00:05:15,000 --> 00:05:22,000
271
+ Never forget about this and let me share with you real life analogy to help you understand better what
272
+
273
+ 69
274
+ 00:05:22,000 --> 00:05:23,000
275
+ unit tests are.
276
+
277
+ 70
278
+ 00:05:24,000 --> 00:05:29,000
279
+ Unit tests can be linked to quality control checks in a manufacturing process.
280
+
281
+ 71
282
+ 00:05:29,000 --> 00:05:37,000
283
+ Each component undergoes specific tests to ensure it meets quality standards before being integrated
284
+
285
+ 72
286
+ 00:05:37,000 --> 00:05:38,000
287
+ into the final product.
288
+
289
+ 73
290
+ 00:05:39,000 --> 00:05:43,000
291
+ This systematic approach enhances the overall reliability of the product.
292
+
293
+ 74
294
+ 00:05:44,000 --> 00:05:47,000
295
+ And now let's start the metrics review.
296
+
297
+ 75
298
+ 00:05:47,000 --> 00:05:52,000
299
+ We will start from the definition of unit test run success rate metric.
300
+
301
+ 76
302
+ 00:05:53,000 --> 00:06:00,000
303
+ The test run success rate is a vital metric that quantifies the percentage of successfully passed unit
304
+
305
+ 77
306
+ 00:06:00,000 --> 00:06:04,000
307
+ tests out of the total executed within a software project.
308
+
309
+ 78
310
+ 00:06:05,000 --> 00:06:12,000
311
+ Unit tests integral to the software development process are thoroughly created to check specific parts
312
+
313
+ 79
314
+ 00:06:12,000 --> 00:06:14,000
315
+ of the code, one at a time.
316
+
317
+ 80
318
+ 00:06:14,000 --> 00:06:21,000
319
+ These tests play a pivotal role in guaranteeing the reliability and robustness of software application
320
+
321
+ 81
322
+ 00:06:21,000 --> 00:06:26,000
323
+ by verifying the correctness of specific components within the code base.
324
+
325
+ 82
326
+ 00:06:26,000 --> 00:06:33,000
327
+ In essence, the unit test run success rate encapsulates the effectiveness of the unit testing process,
328
+
329
+ 83
330
+ 00:06:33,000 --> 00:06:39,000
331
+ providing insights into the health and dependability of the software under research.
332
+
333
+ 84
334
+ 00:06:39,000 --> 00:06:46,000
335
+ This metric serves as a barometer for development teams, offering a quantitative measure of how well
336
+
337
+ 85
338
+ 00:06:46,000 --> 00:06:49,000
339
+ individual units of code perform in isolation.
340
+
341
+ 86
342
+ 00:06:50,000 --> 00:06:53,000
343
+ To understand it better, let's review use cases.
344
+
345
+ 87
346
+ 00:06:54,000 --> 00:06:56,000
347
+ Let me start with real life analogy.
348
+
349
+ 88
350
+ 00:06:57,000 --> 00:07:02,000
351
+ Imagine assembling a puzzle where each piece represents a unit of code.
352
+
353
+ 89
354
+ 00:07:03,000 --> 00:07:09,000
355
+ Unit tests are like verifying that each puzzle piece fits perfectly before completing the entire picture.
356
+
357
+ 90
358
+ 00:07:09,000 --> 00:07:18,000
359
+ If each piece, which is a unit test fits accurately the final picture, the software application is
360
+
361
+ 91
362
+ 00:07:18,000 --> 00:07:21,000
363
+ more likely to be correct and functional.
364
+
365
+ 92
366
+ 00:07:22,000 --> 00:07:24,000
367
+ Let's consider another real life analogy.
368
+
369
+ 93
370
+ 00:07:24,000 --> 00:07:28,000
371
+ Think of unit tests as checkpoints in construction projects.
372
+
373
+ 94
374
+ 00:07:29,000 --> 00:07:37,000
375
+ Each checkpoint ensures that specific components like electrical wiring or plumbing function correctly.
376
+
377
+ 95
378
+ 00:07:37,000 --> 00:07:44,000
379
+ Similarly, unit tests validate the functionality of isolated code units, ensuring the entire system
380
+
381
+ 96
382
+ 00:07:44,000 --> 00:07:45,000
383
+ works seamlessly.
384
+
385
+ 97
386
+ 00:07:46,000 --> 00:07:49,000
387
+ Now let's review use cases from software development area.
388
+
389
+ 98
390
+ 00:07:50,000 --> 00:07:53,000
391
+ Consider navigation system in car software.
392
+
393
+ 99
394
+ 00:07:54,000 --> 00:08:01,000
395
+ Unit tests could be designed to validate specific components such as calculating distances, ensuring
396
+
397
+ 100
398
+ 00:08:01,000 --> 00:08:06,000
399
+ accurate turn by turn directions, and confirming the responsiveness of the interface.
400
+
401
+ 101
402
+ 00:08:07,000 --> 00:08:13,000
403
+ Each unit tests ensures these critical functionalities work independently and collaboratively.
404
+
405
+ 102
406
+ 00:08:14,000 --> 00:08:16,000
407
+ Another software development scenario.
408
+
409
+ 103
410
+ 00:08:16,000 --> 00:08:19,000
411
+ Consider an e-commerce application.
412
+
413
+ 104
414
+ 00:08:19,000 --> 00:08:25,000
415
+ Unit tests could verify individual components such as product sorting or payment processing, guaranteeing
416
+
417
+ 105
418
+ 00:08:25,000 --> 00:08:30,000
419
+ these functionalities work independently and as part of the whole system.
420
+
421
+ 106
422
+ 00:08:31,000 --> 00:08:33,000
423
+ So how we can measure this metric?
424
+
425
+ 107
426
+ 00:08:34,000 --> 00:08:39,000
427
+ Determining the unit test run success rate involves a straightforward calculation.
428
+
429
+ 108
430
+ 00:08:40,000 --> 00:08:47,000
431
+ The formula is expressed as successful runs divided by total runs multiplied by 100.
432
+
433
+ 109
434
+ 00:08:48,000 --> 00:08:54,000
435
+ This process entails counting the number of unit tests that have successfully passed and dividing this
436
+
437
+ 110
438
+ 00:08:54,000 --> 00:08:57,000
439
+ count by the total number of tests executed.
440
+
441
+ 111
442
+ 00:08:58,000 --> 00:09:05,000
443
+ In essence, this calculation provides a percentage that reflects the proportion of unit tests that
444
+
445
+ 112
446
+ 00:09:05,000 --> 00:09:09,000
447
+ have executed successfully out of the total number of tests conducted.
448
+
449
+ 113
450
+ 00:09:09,000 --> 00:09:17,000
451
+ This straightforward formula encapsulates the essence of the metric, offering a clear and concise way
452
+
453
+ 114
454
+ 00:09:17,000 --> 00:09:21,000
455
+ to quantify the success rate of unit tests in a software project.
456
+
457
+ 115
458
+ 00:09:22,000 --> 00:09:30,000
459
+ Such unit test frameworks for different programming languages like JUnit testing for Java and unit for.
460
+
461
+ 116
462
+ 00:09:30,000 --> 00:09:32,000
463
+ Net Pytest for Python.
464
+
465
+ 117
466
+ 00:09:32,000 --> 00:09:35,000
467
+ Mocha for JavaScript R.
468
+
469
+ 118
470
+ 00:09:35,000 --> 00:09:40,000
471
+ Spark for Ruby PHP unit for PHP can help you to measure this metric.
472
+
473
+ 119
474
+ 00:09:41,000 --> 00:09:43,000
475
+ So let's answer another question.
476
+
477
+ 120
478
+ 00:09:43,000 --> 00:09:47,000
479
+ What does the value of metric means for us and how to understand it?
480
+
481
+ 121
482
+ 00:09:47,000 --> 00:09:55,000
483
+ A unit test run success rate close to 100 signifies a high degree of confidence in the reliability and
484
+
485
+ 122
486
+ 00:09:55,000 --> 00:09:56,000
487
+ correctness of the code.
488
+
489
+ 123
490
+ 00:09:57,000 --> 00:10:04,000
491
+ It indicates that the individual units of code, when tested in isolation, are functioning as intended.
492
+
493
+ 124
494
+ 00:10:05,000 --> 00:10:11,000
495
+ A lower success rate may suggest issues such as bugs, incomplete implementations, or changes in the
496
+
497
+ 125
498
+ 00:10:11,000 --> 00:10:15,000
499
+ code that have not been adequately addressed in the tests.
500
+
501
+ 126
502
+ 00:10:16,000 --> 00:10:20,000
503
+ This can raise concerns about the overall robustness of the software.
504
+
505
+ 127
506
+ 00:10:21,000 --> 00:10:24,000
507
+ Let's review recommended target KPIs.
508
+
509
+ 128
510
+ 00:10:25,000 --> 00:10:28,000
511
+ Red zone below 95%.
512
+
513
+ 129
514
+ 00:10:29,000 --> 00:10:37,000
515
+ A unit test run success rate below 95% raises concerns about the reliability of the testing process.
516
+
517
+ 130
518
+ 00:10:37,000 --> 00:10:45,000
519
+ For example, if out of 100 unit tests only 90 are passing, it suggests that there might be critical
520
+
521
+ 131
522
+ 00:10:45,000 --> 00:10:49,000
523
+ issues impacting the functionality and correctness of the code.
524
+
525
+ 132
526
+ 00:10:49,000 --> 00:10:55,000
527
+ In such cases, developers should promptly address identified issues to ensure the software remains
528
+
529
+ 133
530
+ 00:10:55,000 --> 00:10:56,000
531
+ robust.
532
+
533
+ 134
534
+ 00:10:57,000 --> 00:11:09,000
535
+ Amazon between 95 to 99%, falling within 9,599% range indicates a moderately reliable test suit.
536
+
537
+ 135
538
+ 00:11:09,000 --> 00:11:18,000
539
+ For instance, if 97 out of 100 unit tests pass, it suggests that the majority of tests are successful,
540
+
541
+ 136
542
+ 00:11:18,000 --> 00:11:21,000
543
+ but there might be some errors requiring attention.
544
+
545
+ 137
546
+ 00:11:22,000 --> 00:11:28,000
547
+ Developers should thoroughly investigate and address issues to improve the overall success rate, and
548
+
549
+ 138
550
+ 00:11:28,000 --> 00:11:31,000
551
+ green zone is equal to 100%.
552
+
553
+ 139
554
+ 00:11:32,000 --> 00:11:40,000
555
+ Achieving a 100% success rate is the ideal scenario, indicating a highly reliable unit test suit.
556
+
557
+ 140
558
+ 00:11:40,000 --> 00:11:47,000
559
+ For example, if all 100 unit tests pass successfully, it provides a high level of assurance regarding
560
+
561
+ 141
562
+ 00:11:47,000 --> 00:11:50,000
563
+ the quality and functionality of the code.
564
+
565
+ 142
566
+ 00:11:50,000 --> 00:11:58,000
567
+ This implies that every individual unit of code, when tested in isolation, is functioning as intended,
568
+
569
+ 143
570
+ 00:11:58,000 --> 00:12:02,000
571
+ contributing to a robust and error free software application.
572
+
573
+ 144
574
+ 00:12:02,000 --> 00:12:06,000
575
+ These examples illustrate how the unit test runs success rate.
576
+
577
+ 145
578
+ 00:12:06,000 --> 00:12:13,000
579
+ KPI serves as a practical benchmark for assessing the effectiveness of the testing process and ensuring
580
+
581
+ 146
582
+ 00:12:13,000 --> 00:12:15,000
583
+ the reliability of the software code.
584
+
585
+ 147
586
+ 00:12:16,000 --> 00:12:22,000
587
+ Being a consultant and doing audits on different projects, I saw cases when engineers just disable
588
+
589
+ 148
590
+ 00:12:22,000 --> 00:12:24,000
591
+ failed unit tests.
592
+
593
+ 149
594
+ 00:12:24,000 --> 00:12:31,000
595
+ For example, they think that tests are failed because they updated logic and it is expected that tests
596
+
597
+ 150
598
+ 00:12:31,000 --> 00:12:35,000
599
+ to be failed, but no new test is introduced.
600
+
601
+ 151
602
+ 00:12:35,000 --> 00:12:38,000
603
+ Instead, it is not recommended to do this.
604
+
605
+ 152
606
+ 00:12:38,000 --> 00:12:47,000
607
+ Besides cases when unit tests are old and obsolete, unit tests are not relevant and new unit tests
608
+
609
+ 153
610
+ 00:12:47,000 --> 00:12:48,000
611
+ are introduced instead.
612
+
613
+ 154
614
+ 00:12:49,000 --> 00:12:56,000
615
+ But in general, if there was a unit test to test some class, you need to make sure that it works as
616
+
617
+ 155
618
+ 00:12:56,000 --> 00:12:57,000
619
+ expected.
620
+
621
+ 156
622
+ 00:12:57,000 --> 00:13:04,000
623
+ Thoroughly check failed unit tests or better start your development with creation of unit tests.
624
+
625
+ 157
626
+ 00:13:05,000 --> 00:13:09,000
627
+ I have a separate section about test driven development in my course.
628
+
629
+ 158
630
+ 00:13:09,000 --> 00:13:12,000
631
+ Software Architecture and Clean Code Design.
632
+
633
+ 159
634
+ 00:13:12,000 --> 00:13:16,000
635
+ Taking into account TDD is not a subject of this course.
636
+
637
+ 160
638
+ 00:13:16,000 --> 00:13:18,000
639
+ We will not go deep in it.
640
+
641
+ 161
642
+ 00:13:19,000 --> 00:13:20,000
643
+ Let's continue.
644
+
645
+ 162
646
+ 00:13:20,000 --> 00:13:24,000
647
+ So what actions can be taken based on analysis of the metric?
648
+
649
+ 163
650
+ 00:13:25,000 --> 00:13:32,000
651
+ First of all, fix the code address code issues causing test failures to ensure the continued functionality
652
+
653
+ 164
654
+ 00:13:32,000 --> 00:13:34,000
655
+ and correctness of the software.
656
+
657
+ 165
658
+ 00:13:35,000 --> 00:13:38,000
659
+ The second option can be to fix the unit test.
660
+
661
+ 166
662
+ 00:13:39,000 --> 00:13:46,000
663
+ Update unit tests to reflect valid changes in requirements, ensuring that tests accurately represent
664
+
665
+ 167
666
+ 00:13:46,000 --> 00:13:48,000
667
+ the intended functionality of the code.
668
+
669
+ 168
670
+ 00:13:49,000 --> 00:13:52,000
671
+ Another option is to mute or remove tests.
672
+
673
+ 169
674
+ 00:13:53,000 --> 00:13:58,000
675
+ Mute or remove irrelevant tests due to significant requirement changes.
676
+
677
+ 170
678
+ 00:13:58,000 --> 00:14:00,000
679
+ Streamlining the testing suite.
680
+
681
+ 171
682
+ 00:14:01,000 --> 00:14:03,000
683
+ Carefully document decisions.
684
+
685
+ 172
686
+ 00:14:04,000 --> 00:14:08,000
687
+ Do not forget to introduce new unit tests for updated logic.
688
+
689
+ 173
690
+ 00:14:09,000 --> 00:14:16,000
691
+ There can be case when you removed a lot of code from the class, and it contains simplified logic with
692
+
693
+ 174
694
+ 00:14:16,000 --> 00:14:21,000
695
+ multiple new unit tests covered, so just remove old tests.
696
+
697
+ 175
698
+ 00:14:22,000 --> 00:14:24,000
699
+ Establish collaborative code review process.
700
+
701
+ 176
702
+ 00:14:25,000 --> 00:14:28,000
703
+ Encourage collaborative code reviews with team members.
704
+
705
+ 177
706
+ 00:14:28,000 --> 00:14:35,000
707
+ A fresh set of eyes can often identify issues that may be overlooked during individual development.
708
+
709
+ 178
710
+ 00:14:36,000 --> 00:14:41,000
711
+ Code reviews also facilitate knowledge sharing and adherence to best practices.
712
+
713
+ 179
714
+ 00:14:42,000 --> 00:14:44,000
715
+ Knowledge sharing sessions.
716
+
717
+ 180
718
+ 00:14:44,000 --> 00:14:49,000
719
+ Organised knowledge sharing sessions within the team to discuss best practices for writing effective
720
+
721
+ 181
722
+ 00:14:49,000 --> 00:14:50,000
723
+ unit tests.
724
+
725
+ 182
726
+ 00:14:50,000 --> 00:14:57,000
727
+ Share insights, experiences and strategies to enhance the overall quality of unit testing practices.
728
+
729
+ 183
730
+ 00:14:58,000 --> 00:15:04,000
731
+ These recommended actions aim to provide a more comprehensive approach to improving the unit test run
732
+
733
+ 184
734
+ 00:15:04,000 --> 00:15:05,000
735
+ success rate.
736
+
737
+ 185
738
+ 00:15:06,000 --> 00:15:13,000
739
+ In summary, the unit tests run success rate stands as a pivotal metric in software development, offering
740
+
741
+ 186
742
+ 00:15:13,000 --> 00:15:17,000
743
+ a quantitative measure of the reliability of unit tests.
744
+
745
+ 187
746
+ 00:15:17,000 --> 00:15:24,000
747
+ This metric serves as a guiding light for developers, steering them towards the path of maintaining
748
+
749
+ 188
750
+ 00:15:24,000 --> 00:15:30,000
751
+ high code quality, addressing issues promptly, and fostering a robust testing process.
752
+
753
+ 189
754
+ 00:15:31,000 --> 00:15:38,000
755
+ The success rate becomes a compass for developers, directing them towards consistent updates to unit
756
+
757
+ 190
758
+ 00:15:38,000 --> 00:15:44,000
759
+ tests, a practice that contributes to the resilience and maintainability of the overall software system.
760
+
761
+ 191
762
+ 00:15:45,000 --> 00:15:52,000
763
+ Embracing this metric as a key indicator enables a team to build and maintain software systems that
764
+
765
+ 192
766
+ 00:15:52,000 --> 00:15:59,000
767
+ not only meet functional requirements, but also stand resilient in the face of evolving challenges.
768
+
769
+ 193
770
+ 00:15:59,000 --> 00:16:01,000
771
+ Let's continue.
772
+
110 - Metrics & KPIs to Monitor and Control Software Development Process/007 Development Metrics & KPIs Unit Test Related Metrics - Part 2_en.srt ADDED
File without changes
110 - Metrics & KPIs to Monitor and Control Software Development Process/008 Development Metrics & KPIs Duplicate Code & Commented Code Index_en.srt ADDED
File without changes
110 - Metrics & KPIs to Monitor and Control Software Development Process/009 Development Metrics & KPIs Code Review Feedback Loop Time & Code Reviews_en.srt ADDED
File without changes
110 - Metrics & KPIs to Monitor and Control Software Development Process/010 Development Metrics & KPIs Rules Compliance Index (RCI) & Violations_en.srt ADDED
File without changes
110 - Metrics & KPIs to Monitor and Control Software Development Process/011 Development Metrics & KPIs Integration Test Coverage & End-to-End Test Coverage_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/001 Introduction to Extreme Programming (XP) - Part 1_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/002 Introduction to Extreme Programming (XP) - Part 2_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/003 Pair Programming - Part 1_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/004 Pair Programming - Part 2_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/005 Planning Game - Part 1_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/006 Planning Game - Part 2_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/007 Test-Driven Development (TDD).html ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Test-Driven Development (TDD)</title>
7
+
8
+ <style>
9
+ * {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+ body {
15
+ font-family: var(--font-stack-text);
16
+ font-weight: 400;
17
+ line-height: 1.4;
18
+ font-size: 1.6rem;
19
+ color: #2d2f31;
20
+ }
21
+ .container {
22
+ position: relative;
23
+ height: 100%;
24
+ overflow-y: auto;
25
+ }
26
+ .content {
27
+ padding: 3.2rem 4.8rem;
28
+ word-break: break-word;
29
+ max-width: 69.6rem;
30
+ margin: 0 auto;
31
+ }
32
+ .heading {
33
+ margin-bottom: 24px;
34
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", Helvetica, Arial, sans-serif,
35
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
36
+ font-weight: 700;
37
+ line-height: 1.2;
38
+ letter-spacing: 0;
39
+ font-size: 32px;
40
+ max-width: 36em;
41
+ }
42
+ .article-asset-container {
43
+ padding: 2.4rem;
44
+ }
45
+ .article-asset-container p {
46
+ font-size: 19px;
47
+ }
48
+ code {
49
+ background-color: #fff;
50
+ border: 1px solid #d1d7dc;
51
+ color: #b4690e;
52
+ font-size: 80%;
53
+ padding: 0.2rem 0.4rem;
54
+ font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;
55
+ }
56
+ p {
57
+ font-weight: 400;
58
+ }
59
+ </style>
60
+ </head>
61
+ <body>
62
+ <div class="container">
63
+ <div class="content">
64
+ <div class="heading">Test-Driven Development (TDD)</div>
65
+ <div class="article-asset-container"><p>Please, check another section in the course that is called "TDD, BDD &amp; ATTD". </p></div>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
111 - Extreme Programming - Agile & Lean Development Techniques/008 Whole Team - Part 1_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/009 Whole Team - Part 2_en.srt ADDED
File without changes
111 - Extreme Programming - Agile & Lean Development Techniques/010 Continuous Integration (CI) - Part 1_en.srt ADDED
File without changes