diff options
author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2020-07-19 20:34:40 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2020-07-19 20:34:40 +0700 |
commit | 8a7dfa0972c83fd811a4296e7373574bea4a28d0 (patch) | |
tree | 16d37247e8b909ce5f885affd2b2473faab891fd /usth | |
parent | dc6f57c3af35f599abab2c4bac950654282cb519 (diff) | |
download | cp-8a7dfa0972c83fd811a4296e7373574bea4a28d0.tar.gz |
[usth/ICT2.7] Remove Udacity transcribes
Diffstat (limited to 'usth')
341 files changed, 0 insertions, 43428 deletions
diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/1 - Introduction - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/1 - Introduction - lang_en.srt deleted file mode 100644 index aea69ae..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/1 - Introduction - lang_en.srt +++ /dev/null @@ -1,40 +0,0 @@ -1 -00:00:00,350 --> 00:00:03,570 -Hi, everybody, and welcome to the first lesson - -2 -00:00:03,570 --> 00:00:07,970 -of the Software Engineering Course. In this introductory lesson - -3 -00:00:07,970 --> 00:00:09,820 -I will first provide an overview of the - -4 -00:00:09,820 --> 00:00:13,100 -whole course and then try to answer two important - -5 -00:00:13,100 --> 00:00:16,630 -questions about software engineering, which are, what is - -6 -00:00:16,630 --> 00:00:20,310 -software engineering and why do we need it? And - -7 -00:00:20,310 --> 00:00:22,370 -to spice up the content a bit I - -8 -00:00:22,370 --> 00:00:25,480 -will also interview several experts in the software engineering - -9 -00:00:25,480 --> 00:00:30,080 -field from both academia and industry and ask them these - -10 -00:00:30,080 --> 00:00:34,410 -very questions. So without any further ado, let's begin the lesson. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/10 - Software Development - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/10 - Software Development - lang_en.srt deleted file mode 100644 index b1f822e..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/10 - Software Development - lang_en.srt +++ /dev/null @@ -1,108 +0,0 @@ -1 -00:00:00,060 --> 00:00:01,970 -Now that we saw how software engineering was born and we - -2 -00:00:01,970 --> 00:00:04,580 -saw some of the problems that led to the birth of software - -3 -00:00:04,580 --> 00:00:07,020 -engineering. Let's see how we can do better. How can we - -4 -00:00:07,020 --> 00:00:10,580 -preform software development in a smarter, in a better way, a more - -5 -00:00:10,580 --> 00:00:13,150 -successful way? So what I'm going to show here is the - -6 -00:00:13,150 --> 00:00:14,730 -way I see software development. To - -7 -00:00:14,730 --> 00:00:17,080 -me software development is fundementally going - -8 -00:00:17,080 --> 00:00:21,150 -from an abstract idea in somebody's head, for example, the customer's head, - -9 -00:00:21,150 --> 00:00:25,300 -to a concrete system that actually implements that idea and hopefully it - -10 -00:00:25,300 --> 00:00:27,640 -does it in the right way. And this is a very - -11 -00:00:27,640 --> 00:00:31,290 -complex process. It can be overwhelming. So, unless we are talking about - -12 -00:00:31,290 --> 00:00:34,800 -the trivial system, it's very complex for us to keep in mind - -13 -00:00:34,800 --> 00:00:37,020 -all the different aspects of the systems, and to do all the - -14 -00:00:37,020 --> 00:00:40,270 -different steps required to build this system, automatically. So that's when - -15 -00:00:40,270 --> 00:00:43,630 -software processes come to the rescue. So what is a software process? - -16 -00:00:43,630 --> 00:00:46,380 -A software process is nothing else but a way of breaking down - -17 -00:00:46,380 --> 00:00:50,320 -this otherwise unmanageable task into smaller steps. In smaller steps that we - -18 -00:00:50,320 --> 00:00:53,270 -can handle. And that can be tackled individually. So having a - -19 -00:00:53,270 --> 00:00:56,580 -software process is of fundamental importance for several reasons. First of - -20 -00:00:56,580 --> 00:00:59,530 -all, for non-trivial systems, you can't just do it by getting - -21 -00:00:59,530 --> 00:01:01,680 -it, by just sitting down and developing. What you have to - -22 -00:01:01,680 --> 00:01:04,629 -do instead is to break down the complexity in a systematic - -23 -00:01:04,629 --> 00:01:08,250 -way. So software processes are normally systematic. And you need to - -24 -00:01:08,250 --> 00:01:11,370 -break down this complexity, in a more or less formal way. - -25 -00:01:11,370 --> 00:01:15,800 -So software processes are also a formal, or semiformal, way of - -26 -00:01:15,800 --> 00:01:19,120 -discussing, or describing, how software should be developed. - -27 -00:01:19,120 --> 00:01:21,370 -So what are the steps involved in developing software? - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/11 - Software Process - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/11 - Software Process - lang_en.srt deleted file mode 100644 index 98592eb..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/11 - Software Process - lang_en.srt +++ /dev/null @@ -1,96 +0,0 @@ -1 -00:00:00,200 --> 00:00:02,580 -One thing you need to know right away about software processes - -2 -00:00:02,580 --> 00:00:05,750 -is that there's not just one single process, but there are multiple, - -3 -00:00:05,750 --> 00:00:08,840 -possible processes, depending on your context, depending on the kind of - -4 -00:00:08,840 --> 00:00:11,535 -applications that you are developing. In this course, we are going to try - -5 -00:00:11,535 --> 00:00:14,760 -to cover the spectrum of the possible processes, as much as - -6 -00:00:14,760 --> 00:00:18,900 -possible, by focusing on four main software processes. The first one is - -7 -00:00:18,900 --> 00:00:22,480 -what we call normally the waterfall process. And, we call it waterfall - -8 -00:00:22,480 --> 00:00:25,490 -because in the process we go from one phase to the other - -9 -00:00:25,490 --> 00:00:28,300 -in the same way in which water follows the flow - -10 -00:00:28,300 --> 00:00:30,910 -in a waterfall. The second process that we consider is what - -11 -00:00:30,910 --> 00:00:34,580 -we call evolutionary prototyping, and in this case, instead of - -12 -00:00:34,580 --> 00:00:37,790 -following this set of rigid steps, all we're trying to do - -13 -00:00:37,790 --> 00:00:40,930 -is to start with an initial prototype and evolve it - -14 -00:00:40,930 --> 00:00:43,670 -based on the feedback from the customer. We will then move - -15 -00:00:43,670 --> 00:00:47,150 -towards a slightly more formal process, which is the rational unified - -16 -00:00:47,150 --> 00:00:50,590 -process or the unified software process. And this is a kind - -17 -00:00:50,590 --> 00:00:53,040 -of project heavily based on the use of UML, so we - -18 -00:00:53,040 --> 00:00:56,263 -will also cover UML when discussing this kind of project. Finally, - -19 -00:00:56,263 --> 00:00:58,680 -the fourth kind of process we will consider is the family - -20 -00:00:58,680 --> 00:01:01,670 -of agile software processes. And these are processes in which we - -21 -00:01:01,670 --> 00:01:04,280 -sacrifice the discipline a little bi,t in order to be more - -22 -00:01:04,280 --> 00:01:07,380 -flexible and be more able to account for changes and in - -23 -00:01:07,380 --> 00:01:10,760 -particular for changes in requirements. We are going to cover each - -24 -00:01:10,760 --> 00:01:14,620 -one of these four processes extensively in the rest of the class. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/12 - Preliminary Questions - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/12 - Preliminary Questions - lang_en.srt deleted file mode 100644 index 20ef47f..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/12 - Preliminary Questions - lang_en.srt +++ /dev/null @@ -1,32 +0,0 @@ -1 -00:00:00,110 --> 00:00:01,450 -So, now before we actually jump to the - -2 -00:00:01,450 --> 00:00:03,410 -discussion of software processes I want to ask you - -3 -00:00:03,410 --> 00:00:05,770 -a couple of preliminary questions. The first one is, - -4 -00:00:05,770 --> 00:00:08,140 -what is the largest software system on which you - -5 -00:00:08,140 --> 00:00:10,860 -had worked? And you should enter here the size. - -6 -00:00:10,860 --> 00:00:12,850 -And the second question I'm going to ask is how - -7 -00:00:12,850 --> 00:00:15,070 -many LOC or how many lines of code per - -8 -00:00:15,070 --> 00:00:17,380 -day you were producing when working on this system? - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/13 - Preliminary Questions Solution - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/13 - Preliminary Questions Solution - lang_en.srt deleted file mode 100644 index fe239c6..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/13 - Preliminary Questions Solution - lang_en.srt +++ /dev/null @@ -1,16 +0,0 @@ -1 -00:00:00,110 --> 00:00:01,620 -We're going to go back to these two questions - -2 -00:00:01,620 --> 00:00:03,260 -and to your answers later. But I wanted to - -3 -00:00:03,260 --> 00:00:05,810 -gather this information beforehand, so that your answers are - -4 -00:00:05,810 --> 00:00:08,590 -not biased, they're not influenced by this subsequent discussion. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/14 - Preliminary Questions - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/14 - Preliminary Questions - lang_en.srt deleted file mode 100644 index 936b50d..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/14 - Preliminary Questions - lang_en.srt +++ /dev/null @@ -1,24 +0,0 @@ -1 -00:00:00,090 --> 00:00:03,200 -So now I want to ask you one additional question, which is how many lines - -2 -00:00:03,200 --> 00:00:05,030 -of code a day do you think professional - -3 -00:00:05,030 --> 00:00:07,370 -software engineers produce? Do you think they produce - -4 -00:00:07,370 --> 00:00:12,160 -25 lines of code? Between 25 and 50? Between 50 and 100? Between 100 and 1000? - -5 -00:00:12,160 --> 00:00:13,720 -Or more than 1000 a day? And remember - -6 -00:00:13,720 --> 00:00:16,379 -that here we're talking about professional software engineers. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/15 - Preliminary Questions Solution - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/15 - Preliminary Questions Solution - lang_en.srt deleted file mode 100644 index 1a040e2..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/15 - Preliminary Questions Solution - lang_en.srt +++ /dev/null @@ -1,32 +0,0 @@ -1 -00:00:00,180 --> 00:00:03,450 -Studies has shown that, on average, developers produce between - -2 -00:00:03,450 --> 00:00:07,030 -50 and 100 lines of code a day. And that - -3 -00:00:07,030 --> 00:00:09,530 -might not seem much. Why, why only 50 to - -4 -00:00:09,530 --> 00:00:11,580 -100 lines of code in a whole day? And the - -5 -00:00:11,580 --> 00:00:14,350 -answer is because coding is not everything. When you - -6 -00:00:14,350 --> 00:00:17,020 -develop a system writing code is not the only thing - -7 -00:00:17,020 --> 00:00:18,890 -you have to do. It's not the only activity that - -8 -00:00:18,890 --> 00:00:20,800 -you have to perform. And that's a very important point. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/16 - Software Phases - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/16 - Software Phases - lang_en.srt deleted file mode 100644 index 7fc30ef..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/16 - Software Phases - lang_en.srt +++ /dev/null @@ -1,100 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,730 -In fact, software processes are normally characterized by several phases, what - -2 -00:00:03,730 --> 00:00:07,240 -we call the software phases, and only one of these phases is - -3 -00:00:07,240 --> 00:00:09,970 -mainly focused on coding. The other phases are meant to support - -4 -00:00:09,970 --> 00:00:13,440 -other parts of software development. The first of these phases is called - -5 -00:00:13,440 --> 00:00:16,110 -requirements engineering and that's the phase in which we talk to - -6 -00:00:16,110 --> 00:00:19,640 -the customer, to the stakeholders, whoever we are building the software for. - -7 -00:00:19,640 --> 00:00:22,120 -And we try to understand what kind of system we need - -8 -00:00:22,120 --> 00:00:25,650 -to build. Then we use this information to define our design and - -9 -00:00:25,650 --> 00:00:28,840 -the design is the high-level structure, that then can become more - -10 -00:00:28,840 --> 00:00:31,800 -and more detailed, of our software system. Once we've defined our - -11 -00:00:31,800 --> 00:00:34,180 -design we can actually move to the next phase, which is - -12 -00:00:34,180 --> 00:00:37,480 -the implementation, in which we write code that implements the design which - -13 -00:00:37,480 --> 00:00:40,630 -we just defined. After implementing the code, we need to verify - -14 -00:00:40,630 --> 00:00:43,510 -and validate the code. We need to make sure that the code - -15 -00:00:43,510 --> 00:00:46,930 -behaves as intended. And finally, we need to maintain the code. - -16 -00:00:46,930 --> 00:00:48,992 -And maintenance involves several activities like, - -17 -00:00:48,992 --> 00:00:50,980 -for example, adding new functionality or - -18 -00:00:50,980 --> 00:00:54,568 -eliminating bugs from the code or responding to problems that - -19 -00:00:54,568 --> 00:00:57,420 -were reported from the field after we released the software. - -20 -00:00:57,420 --> 00:00:59,020 -We will look at all of these activities and of - -21 -00:00:59,020 --> 00:01:01,670 -the software development process in detail, in the rest of the - -22 -00:01:01,670 --> 00:01:03,610 -class. And for each activity, we will look at the - -23 -00:01:03,610 --> 00:01:06,460 -fundamental principles and how it is done currently. And in - -24 -00:01:06,460 --> 00:01:08,780 -some cases, we will also look at some advance ways - -25 -00:01:08,780 --> 00:01:11,680 -to do it. For example, more research approaches for that activity. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/17 - Tools of the Trade - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/17 - Tools of the Trade - lang_en.srt deleted file mode 100644 index 077c0f8..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/17 - Tools of the Trade - lang_en.srt +++ /dev/null @@ -1,160 +0,0 @@ -1 -00:00:00,072 --> 00:00:02,960 -We will also look at how tools can improve software phases, - -2 -00:00:02,960 --> 00:00:06,660 -the software activities, and can support software development tasks in general. - -3 -00:00:06,660 --> 00:00:08,890 -And this is something that I will repeat over and over - -4 -00:00:08,890 --> 00:00:12,340 -in the class, tools and automation are fundamental, in software engineering. - -5 -00:00:12,340 --> 00:00:15,910 -And they're fundamental for improving productivity, not only efficiency but also - -6 -00:00:15,910 --> 00:00:19,820 -effectiveness of our activities in the software development process. So let - -7 -00:00:19,820 --> 00:00:22,110 -me go back to one of the diagrams that I showed - -8 -00:00:22,110 --> 00:00:25,170 -you before. If you remember we had this qualititive diagram in which - -9 -00:00:25,170 --> 00:00:27,170 -we were showing that one of the issues that led to the - -10 -00:00:27,170 --> 00:00:30,350 -software crisis was the fact that developers' productivity was not able to - -11 -00:00:30,350 --> 00:00:33,580 -keep up with the software size and complexity, with the growth in - -12 -00:00:33,580 --> 00:00:36,750 -the importance and the complexity of software. What tools can help us - -13 -00:00:36,750 --> 00:00:40,150 -to do is to change this and basically move this curve from - -14 -00:00:40,150 --> 00:00:43,950 -this original position up here. So that it gets closer and closer - -15 -00:00:43,950 --> 00:00:45,970 -to what we need to develop the software that we need to - -16 -00:00:45,970 --> 00:00:50,230 -build. So let me discuss examples on how tools can improve productivity. - -17 -00:00:50,230 --> 00:00:52,970 -For example, if we are talking about development, think about - -18 -00:00:52,970 --> 00:00:54,890 -what kind of improvement it was to go from punch - -19 -00:00:54,890 --> 00:00:58,440 -cards to modern IDEs. If we're talking about languages, think - -20 -00:00:58,440 --> 00:01:02,210 -about of how much more productive developers became when going from - -21 -00:01:02,210 --> 00:01:05,830 -writing machine code to writing code in high-level languages. And - -22 -00:01:05,830 --> 00:01:08,750 -finally, if we talk about debugging, which is a very important - -23 -00:01:08,750 --> 00:01:12,140 -and expensive activity, moving from the use of print lines - -24 -00:01:12,140 --> 00:01:16,060 -to the use of symbolic debuggers dramatically improve the effectiveness and - -25 -00:01:16,060 --> 00:01:18,810 -efficiency of development. And these are just some of the - -26 -00:01:18,810 --> 00:01:21,050 -tools that we will discuss in the rest of the class - -27 -00:01:21,050 --> 00:01:23,350 -and notice that we will also use the tools in practice. - -28 -00:01:23,350 --> 00:01:26,290 -So we will use the tools before projects and also during - -29 -00:01:26,290 --> 00:01:30,153 -the lessons and for assignments. In particular, we will use - -30 -00:01:30,153 --> 00:01:33,920 -three main kinds of tools. The first type is IDE's. And - -31 -00:01:33,920 --> 00:01:37,140 -I'm pretty sure you're familiar with IDE's. These are integrated development - -32 -00:01:37,140 --> 00:01:41,250 -environments. So, advanced editors in which you can write, compile, run, - -33 -00:01:41,250 --> 00:01:43,950 -and debug and even test your code. We'll also use a - -34 -00:01:43,950 --> 00:01:48,190 -version control system, systems that allow you to save, and restore, and - -35 -00:01:48,190 --> 00:01:51,750 -check the differences between different versions of the code, in particular - -36 -00:01:51,750 --> 00:01:53,950 -we will be working with git. We will also be looking at - -37 -00:01:53,950 --> 00:01:57,460 -other kinds of tools like coverage and verification tools. These are - -38 -00:01:57,460 --> 00:02:00,310 -tools that can help you during testing and I'm a big fan - -39 -00:02:00,310 --> 00:02:02,710 -of these tools, so I'm really going to stress the usefulness - -40 -00:02:02,710 --> 00:02:05,530 -of these tools and how you should use them in your development. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt deleted file mode 100644 index 858a75a..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt +++ /dev/null @@ -1,572 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,106 -First, let me start by asking a couple of very - -2 -00:00:02,106 --> 00:00:04,820 -natural questions that you might have when considering whether to take - -3 -00:00:04,820 --> 00:00:07,800 -this course. The first one is what is software engineering. - -4 -00:00:07,800 --> 00:00:10,050 -And the second, very related one, is why do we need - -5 -00:00:10,050 --> 00:00:12,430 -it? So what I did was actually to go out - -6 -00:00:12,430 --> 00:00:15,430 -and ask some of the main experts in the field, both - -7 -00:00:15,430 --> 00:00:18,290 -in academia and industry, these very questions and let's see what - -8 -00:00:18,290 --> 00:00:22,160 -they said. What is software engineering and why is it important? - -9 -00:00:23,170 --> 00:00:25,150 ->> Okay, can I start with another question? - -10 -00:00:25,150 --> 00:00:26,020 ->> Of course. - -11 -00:00:26,020 --> 00:00:31,290 ->> Okay, first what is a computer? It's a programmable device. So the essence - -12 -00:00:31,290 --> 00:00:34,730 -of computing is programming. So program development - -13 -00:00:34,730 --> 00:00:37,240 -is basically the most essential use of the - -14 -00:00:37,240 --> 00:00:41,010 -computer. So software engineering is the discipline - -15 -00:00:41,010 --> 00:00:44,850 -that investigates program development. So, how can it - -16 -00:00:44,850 --> 00:00:47,390 -been done more efficiently? What's the best - -17 -00:00:47,390 --> 00:00:50,170 -way of doing program development? And how can - -18 -00:00:50,170 --> 00:00:53,140 -you develop reliable programs? So that's how I would define - -19 -00:00:53,140 --> 00:00:55,060 -it. But I consider any - -20 -00:00:55,060 --> 00:00:57,345 -software development activity software engineering activity - -21 -00:00:58,825 --> 00:01:04,239 ->> Software engineering is the systematic application of methods to build - -22 -00:01:04,239 --> 00:01:07,884 -software in a rigorous way. And I think one of the - -23 -00:01:07,884 --> 00:01:11,196 -aspects that I like to bring into the notion of software - -24 -00:01:11,196 --> 00:01:15,228 -engineering is that it's something that involves not only kind of - -25 -00:01:15,228 --> 00:01:18,612 -technically building the system but understanding the - -26 -00:01:18,612 --> 00:01:22,317 -requirements, working with stake holders. Trying to - -27 -00:01:22,317 --> 00:01:28,232 -find a solution that balances all of the stakeholder needs in order to deliver - -28 -00:01:28,232 --> 00:01:34,338 -the software thats tested and its rigorous to meet the needs of a stakeholder. - -29 -00:01:34,338 --> 00:01:37,656 -Well, software engineering is the whole process - -30 -00:01:37,656 --> 00:01:41,460 -of creation of software using engineering principles. - -31 -00:01:41,460 --> 00:01:42,886 ->> My view is kind of a holistic - -32 -00:01:42,886 --> 00:01:45,490 -view and I think about it from the perspective - -33 -00:01:45,490 --> 00:01:49,440 -of how is software engineering different from programming. - -34 -00:01:49,440 --> 00:01:52,940 -So, I think that research about programming is all - -35 -00:01:52,940 --> 00:01:57,550 -about the create part of software. And that - -36 -00:01:57,550 --> 00:02:00,270 -software engineering is about the entire life cycle. So, - -37 -00:02:00,270 --> 00:02:03,070 -that's one aspect. And the other aspect of the - -38 -00:02:03,070 --> 00:02:07,350 -definition is it's about quality, the quality of software. - -39 -00:02:07,350 --> 00:02:12,330 -Software engineering even considers things long after you ship which we all know - -40 -00:02:12,330 --> 00:02:18,310 -is one of the, it is the largest economic piece of software development. - -41 -00:02:18,310 --> 00:02:22,990 ->> So, improve, software engineering process - -42 -00:02:22,990 --> 00:02:26,440 -for better software productivity and quality. - -43 -00:02:26,440 --> 00:02:32,472 ->> The set of activities that one engages in when building software - -44 -00:02:32,472 --> 00:02:39,634 -systems or software products. It's fundamentally a venue-creating - -45 -00:02:39,634 --> 00:02:45,492 -activity. It involves social processes. - -46 -00:02:45,492 --> 00:02:47,247 ->> Software engineering is the act - -47 -00:02:47,247 --> 00:02:49,652 -of many people working together and putting - -48 -00:02:49,652 --> 00:02:52,057 -together many versions of large and complex - -49 -00:02:52,057 --> 00:02:57,110 -systems. And our world depends on software, - -50 -00:02:57,110 --> 00:02:58,910 -software is immensely complex and we need - -51 -00:02:58,910 --> 00:03:01,700 -many, many smart people to build these things. - -52 -00:03:01,700 --> 00:03:05,610 ->> Well, engineering I think is the activity of envisioning and - -53 -00:03:05,610 --> 00:03:10,180 -realizing valuable new functions with sufficient - -54 -00:03:10,180 --> 00:03:13,500 -and justifiable confidence that the resulting - -55 -00:03:13,500 --> 00:03:18,190 -system will have all of the critical quality attributes that are necessary - -56 -00:03:18,190 --> 00:03:22,140 -for the system to be a success. And software engineering is the - -57 -00:03:22,140 --> 00:03:24,790 -activity of doing this not only for - -58 -00:03:24,790 --> 00:03:27,550 -the software components of engineering systems but - -59 -00:03:28,830 --> 00:03:31,740 -for the system overall, given that it's - -60 -00:03:31,740 --> 00:03:35,500 -so heavily reliant on it's underlying software technologies. - -61 -00:03:35,500 --> 00:03:40,440 ->> So, I would say software engineering is the - -62 -00:03:40,440 --> 00:03:44,070 -kind of art and practice of building software systems. - -63 -00:03:44,070 --> 00:03:47,610 ->> Software engineering, in a nutshell, is a set of - -64 -00:03:47,610 --> 00:03:52,140 -methods and principles and techniques that we have developed to enable us to - -65 -00:03:53,220 --> 00:03:57,830 -engineer, or build, large software systems that - -66 -00:03:59,090 --> 00:04:03,960 -outstrip or outpace one engineer's or even a small - -67 -00:04:03,960 --> 00:04:08,900 -team of engineer's ability or abilities to understand - -68 -00:04:08,900 --> 00:04:13,330 -and construct and maintain - -69 -00:04:13,330 --> 00:04:17,339 -over time. So it requires a lot of people, it requires a long, - -70 -00:04:17,339 --> 00:04:21,820 -term investment by an organization or a number of organizations, and often times - -71 -00:04:21,820 --> 00:04:28,040 -it requires support for systems that that are intended for one purpose but end - -72 -00:04:28,040 --> 00:04:33,930 -up getting used for many additional purposes in addition to the original one. - -73 -00:04:33,930 --> 00:04:38,656 ->> Software engineering is about building and constructing very large-scale - -74 -00:04:38,656 --> 00:04:42,800 -high-quality systems, so the high quality is the big issue. - -75 -00:04:42,800 --> 00:04:46,268 ->> Software engineering is engineering discipline of developing - -76 -00:04:46,268 --> 00:04:52,800 -software-based systems, usually embedded into larger systems composed of - -77 -00:04:52,800 --> 00:04:58,544 -hardware and and humans [LAUGH] and business - -78 -00:04:58,544 --> 00:05:04,943 -processes and processes in general. And why is that important? - -79 -00:05:04,943 --> 00:05:06,971 -Well, because software is pervasive in all industry sectors - -80 -00:05:06,971 --> 00:05:09,001 -and therefore systems must be reliable, safe and secure. - -81 -00:05:09,001 --> 00:05:13,232 ->> Why can't we just get that by sitting down and writing software? - -82 -00:05:13,232 --> 00:05:16,697 ->> Well, you could if software was small and - -83 -00:05:16,697 --> 00:05:20,162 -simple enough to be developed by one or two - -84 -00:05:20,162 --> 00:05:25,360 -people together in a room. But software development now - -85 -00:05:25,360 --> 00:05:31,550 -is distributed, involves teams of people with different backgrounds - -86 -00:05:31,550 --> 00:05:37,450 -who have to communicate with each other. It also involves customers, - -87 -00:05:37,450 --> 00:05:42,512 -clients, users. Software engineers have to work with - -88 -00:05:42,512 --> 00:05:47,462 -hardware engineers, with domain experts and therefore, - -89 -00:05:47,462 --> 00:05:52,233 -well, no, we can't simply sit down and start coding. - -90 -00:05:52,233 --> 00:05:57,380 ->> Software engineering is mostly being able - -91 -00:05:57,380 --> 00:06:02,775 -to program. And you need to be able to put big - -92 -00:06:02,775 --> 00:06:06,920 -systems together so that they actually work. That's my simple definition. - -93 -00:06:06,920 --> 00:06:09,210 ->> And if you don't use software engineering practices, - -94 -00:06:09,210 --> 00:06:10,670 -you're not going to be able to put them together? - -95 -00:06:10,670 --> 00:06:13,290 ->> Well, you're not going to be able to reliably - -96 -00:06:13,290 --> 00:06:16,160 -put them together. So basically, you could maybe hack something up, - -97 -00:06:16,160 --> 00:06:18,750 -but it's not going to necessarily stand the test of time. - -98 -00:06:18,750 --> 00:06:21,221 -If somebody wants to change it it's probably going to break. - -99 -00:06:21,221 --> 00:06:24,140 ->> It's important - -100 -00:06:24,140 --> 00:06:29,700 -because if you don't think about how you're building this system and - -101 -00:06:29,700 --> 00:06:31,600 -how you're trading off different aspects, - -102 -00:06:31,600 --> 00:06:35,580 -like performance and scalability and reliability, then - -103 -00:06:35,580 --> 00:06:39,900 -it's going to end up breaking or not lasting very long or not, - -104 -00:06:39,900 --> 00:06:42,900 -not doing everything that you want it to do, or being really expensive. - -105 -00:06:43,960 --> 00:06:45,800 ->> If it's not done in a principled way it will - -106 -00:06:45,800 --> 00:06:49,220 -be bad and every user will suffer. That's why we need - -107 -00:06:49,220 --> 00:06:49,970 -software engineering. - -108 -00:06:49,970 --> 00:06:56,252 ->> Why is it important? Because, I mean these two goal, productivity, faster, - -109 -00:06:56,252 --> 00:06:59,480 -in developing software. And higher quality - -110 -00:06:59,480 --> 00:07:03,551 -would be apparently important. Software is everywhere. - -111 -00:07:03,551 --> 00:07:08,260 ->> It's important because we use software in everyday life. Everything's - -112 -00:07:08,260 --> 00:07:14,120 -built on software systems. And these are ubiquitous across our society. - -113 -00:07:14,120 --> 00:07:14,300 ->> It's - -114 -00:07:14,300 --> 00:07:20,820 -important because software is everywhere around us and the way we build it, - -115 -00:07:20,820 --> 00:07:26,910 -and the way we maintain it, is something that determines almost a basic - -116 -00:07:26,910 --> 00:07:33,940 -quality of life nowadays. And getting that software right can make a difference, - -117 -00:07:33,940 --> 00:07:39,590 -oftentimes, between a really fun product and one that you won't like to use - -118 -00:07:40,640 --> 00:07:45,750 -a reasonably successful company, or one that fails. And in - -119 -00:07:45,750 --> 00:07:49,690 -more extreme cases even the difference between life and death, - -120 -00:07:49,690 --> 00:07:51,510 -if you think about the software that runs in the - -121 -00:07:51,510 --> 00:07:56,380 -airplane on which many of you fly on a regular basis. - -122 -00:07:56,380 --> 00:08:00,790 ->> There are programs out there that if they screw up we are all screwed. - -123 -00:08:00,790 --> 00:08:02,440 ->> Software engineering is crucially - -124 -00:08:02,440 --> 00:08:06,460 -important because it's the engineering discipline - -125 -00:08:06,460 --> 00:08:10,250 -that is uniquely capable of carrying out - -126 -00:08:10,250 --> 00:08:13,848 -the engineering mission for software reliant systems. - -127 -00:08:13,848 --> 00:08:17,620 ->> In the U.S we've all seen an unfortunate example with - -128 -00:08:17,620 --> 00:08:23,032 -a system that went badly wrong in healthcare.gov and that system wasn't - -129 -00:08:23,032 --> 00:08:26,740 -engineered correctly. And I think if we look at the reasons for - -130 -00:08:26,740 --> 00:08:32,350 -that, they stem back to somewhere at the intersection between requirements and - -131 -00:08:32,350 --> 00:08:37,470 -architecture and politics and project management, and all of these things are - -132 -00:08:37,470 --> 00:08:43,270 -important concepts that have to go into the software engineering mix. - -133 -00:08:43,270 --> 00:08:45,570 ->> It would end up in lots and lots of chaos because people - -134 -00:08:45,570 --> 00:08:47,220 -wouldn't know how to organize themselves and - -135 -00:08:47,220 --> 00:08:49,400 -wouldn't know how to organize software. Many - -136 -00:08:49,400 --> 00:08:53,830 -of software engineering has very simple rules that you need to apply properly in - -137 -00:08:53,830 --> 00:08:57,280 -order to get things done. And people who look at these rules and think, - -138 -00:08:57,280 --> 00:09:01,050 -these rules are so super simple. This is totally obvious. But once - -139 -00:09:01,050 --> 00:09:05,495 -you try to apply them, you'll find out they're not obvious at all. - -140 -00:09:05,495 --> 00:09:07,670 ->> Now that we've heard these experts, let me show you an - -141 -00:09:07,670 --> 00:09:10,080 -example that illustrates what can happen - -142 -00:09:10,080 --> 00:09:12,410 -when software engineering practices are not suitably - -143 -00:09:15,310 --> 00:09:24,010 -applied. [NOISE]. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/3 - Software Failure Quiz - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/3 - Software Failure Quiz - lang_en.srt deleted file mode 100644 index f98f98f..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/3 - Software Failure Quiz - lang_en.srt +++ /dev/null @@ -1,32 +0,0 @@ -1 -00:00:00,110 --> 00:00:01,940 -Now that you watched this small video, I like - -2 -00:00:01,940 --> 00:00:03,660 -to ask you, what is this? Do you think - -3 -00:00:03,660 --> 00:00:06,330 -it's fireworks for the 4th of July celebration, or - -4 -00:00:06,330 --> 00:00:08,280 -maybe it was a flare gun in action, or - -5 -00:00:08,280 --> 00:00:10,240 -maybe again it was the explosion of the Ariane - -6 -00:00:10,240 --> 00:00:12,280 -five rocket due to a software error. What do - -7 -00:00:12,280 --> 00:00:14,190 -you think? And in case it helps, I'm also - -8 -00:00:14,190 --> 00:00:16,450 -going to show you an actual picture of this event. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/4 - Software Failure Quiz Solution - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/4 - Software Failure Quiz Solution - lang_en.srt deleted file mode 100644 index db633e2..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/4 - Software Failure Quiz Solution - lang_en.srt +++ /dev/null @@ -1,48 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,600 -As you probably guessed, these are not fireworks for the 4th of - -2 -00:00:02,600 --> 00:00:06,670 -July but, rather, the explosion of the Ariane 5, which happened 30 seconds - -3 -00:00:06,670 --> 00:00:09,250 -or so after takeoff due to a software error. And this is - -4 -00:00:09,250 --> 00:00:12,020 -just an example of what can go wrong when we don't build software - -5 -00:00:12,020 --> 00:00:15,600 -and we don't test and verify and perform quality assurance of software - -6 -00:00:15,600 --> 00:00:18,540 -in the right way, and quite an expensive one. In fact, to develop - -7 -00:00:18,540 --> 00:00:21,250 -and to build the Ariane 5 it took 10 years. The cost - -8 -00:00:21,250 --> 00:00:25,240 -was around $7 billion and there were $500 million of cargo on board. - -9 -00:00:25,240 --> 00:00:27,280 -Luckily, at least there were no humans on the - -10 -00:00:27,280 --> 00:00:29,400 -rocket. And you can find more details in case - -11 -00:00:29,400 --> 00:00:31,610 -you're interested about the Ariane 5 accident in the - -12 -00:00:31,610 --> 00:00:33,230 -lesson notes. I put a couple of links there. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/5 - Discipline of Software Engineering - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/5 - Discipline of Software Engineering - lang_en.srt deleted file mode 100644 index 6933222..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/5 - Discipline of Software Engineering - lang_en.srt +++ /dev/null @@ -1,80 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,469 -And even if we don't go to these extreme examples, I'm - -2 -00:00:02,469 --> 00:00:04,380 -sure that you have all experienced - -3 -00:00:04,380 --> 00:00:06,540 -software problems, typically manifested in what - -4 -00:00:06,540 --> 00:00:09,630 -we call a crash. And that crash might happen while you're - -5 -00:00:09,630 --> 00:00:13,230 -finishing your homework or that three-page long email that you were preparing - -6 -00:00:13,230 --> 00:00:15,900 -for the last two hours. But why's it so difficult to - -7 -00:00:15,900 --> 00:00:20,220 -build software, or better, why's it so difficult to build good software? - -8 -00:00:20,220 --> 00:00:22,200 -And how can we do it? This is exactly the topic - -9 -00:00:22,200 --> 00:00:25,190 -of this class. And the reason why software engineering is a fundamental - -10 -00:00:25,190 --> 00:00:28,330 -discipline in computer science. To motivate that, in this class, we - -11 -00:00:28,330 --> 00:00:32,259 -will study a set of methodologies, techniques, and tools, that will help - -12 -00:00:32,259 --> 00:00:35,150 -us build high quality software that does what it's supposed to - -13 -00:00:35,150 --> 00:00:38,540 -do. And therefore, makes our customers happy. And that does it within - -14 -00:00:38,540 --> 00:00:42,375 -the given time and money constraints. So within the budget that - -15 -00:00:42,375 --> 00:00:44,300 -is allocated for the software. Before - -16 -00:00:44,300 --> 00:00:46,222 -jumping into today's software engineering techniques - -17 -00:00:46,222 --> 00:00:48,010 -though, let me take a step back and look at how - -18 -00:00:48,010 --> 00:00:50,240 -we got here, as I believe it is very important to have - -19 -00:00:50,240 --> 00:00:52,690 -some historical perspective on how this discipline was - -20 -00:00:52,690 --> 00:00:54,840 -born and how it was developed over the years. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/6 - The Software Crisis - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/6 - The Software Crisis - lang_en.srt deleted file mode 100644 index 41061a5..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/6 - The Software Crisis - lang_en.srt +++ /dev/null @@ -1,208 +0,0 @@ -1 -00:00:00,072 --> 00:00:02,190 -To do that we'll have to go back in time to - -2 -00:00:02,190 --> 00:00:05,280 -the late 60s. So what was happening in the 60s? Well for - -3 -00:00:05,280 --> 00:00:08,410 -example the first man landed on the moon. That was also - -4 -00:00:08,410 --> 00:00:11,720 -time when Woodstock took place and also the time when the first - -5 -00:00:11,720 --> 00:00:16,149 -60 second picture from Polaroid was created. Concurrently to these events, - -6 -00:00:16,149 --> 00:00:18,910 -which you probably didn't witness in first person, that was also the - -7 -00:00:18,910 --> 00:00:22,280 -time when people started to realize that they were not able - -8 -00:00:22,280 --> 00:00:25,610 -to build the software they needed. This happened for several reasons and - -9 -00:00:25,610 --> 00:00:29,220 -resulted in what we call the software crisis. So let's - -10 -00:00:29,220 --> 00:00:31,820 -look at some of the most important reasons behind this - -11 -00:00:31,820 --> 00:00:35,760 -crisis. The first cause was the rising demand for software. - -12 -00:00:35,760 --> 00:00:38,500 -Now you're used to see software everywhere: in your phone, - -13 -00:00:38,500 --> 00:00:41,530 -in your car, even your washing machine. Before the 60s, - -14 -00:00:41,530 --> 00:00:44,590 -however, the size and complexity of software was very limited - -15 -00:00:44,590 --> 00:00:47,580 -and hardware components were really dominating the scene. Then things - -16 -00:00:47,580 --> 00:00:51,490 -started to change and software started to be increasingly prevalent. - -17 -00:00:51,490 --> 00:00:53,940 -So we move from a situation where everything was mostly - -18 -00:00:53,940 --> 00:00:57,380 -hardware to a situation in which software became more and more - -19 -00:00:57,380 --> 00:01:00,660 -important. To give an example, I'm going to show you the growth - -20 -00:01:00,660 --> 00:01:04,080 -in the software demand at NASA along those years. And in - -21 -00:01:04,080 --> 00:01:07,610 -particular, from the 1950s to more or less 2000. And this - -22 -00:01:07,610 --> 00:01:10,350 -is just a qualitative plot but that's more or less the - -23 -00:01:10,350 --> 00:01:13,880 -ways things went. So the demand for software in NASA grow - -24 -00:01:13,880 --> 00:01:16,930 -exponentially. And the same happened in a lot of other companies. - -25 -00:01:16,930 --> 00:01:19,020 -For example, just to cite one, for Boeing. So the - -26 -00:01:19,020 --> 00:01:22,350 -amount of software on airplanes became larger and larger. The - -27 -00:01:22,350 --> 00:01:26,170 -second cause for the software crisis was the increasing amount - -28 -00:01:26,170 --> 00:01:30,210 -of development effort needed due to the increase of product complexity. - -29 -00:01:30,210 --> 00:01:34,260 -Unfortunately, software complexity does not increase linearly with size. It - -30 -00:01:34,260 --> 00:01:36,170 -is not the same thing to write software for a - -31 -00:01:36,170 --> 00:01:39,410 -class exercise or a small project, or a temp project, - -32 -00:01:39,410 --> 00:01:41,970 -than it is to build a software for a word processor, - -33 -00:01:41,970 --> 00:01:45,950 -an operating system, a distributed system, or even more complex and larger - -34 -00:01:45,950 --> 00:01:49,390 -system. And what I'm giving here is just an indicative size for - -35 -00:01:49,390 --> 00:01:52,643 -the software so the class exercise might be 100 lines of code, - -36 -00:01:52,643 --> 00:01:55,600 -the small project might be 1000 lines of code, in the other thousand - -37 -00:01:55,600 --> 00:01:58,328 -lines of code, and so on and so forth. For the former, - -38 -00:01:58,328 --> 00:02:01,510 -the heroic effort of an individual developer can get the job done. - -39 -00:02:01,510 --> 00:02:03,850 -So that's what we call a programming effort. If you're a good - -40 -00:02:03,850 --> 00:02:07,340 -programmer, you can go sit down and do it, right. For the latter, - -41 -00:02:07,340 --> 00:02:09,330 -this is not possible. This is what we called the - -42 -00:02:09,330 --> 00:02:13,810 -software engineering effort. In fact, no matter how much programming languages, - -43 -00:02:13,810 --> 00:02:17,280 -development environments, and software tools improve, developers could not keep - -44 -00:02:17,280 --> 00:02:20,220 -up with increasing software size and complexity. Which leads us to - -45 -00:02:20,220 --> 00:02:22,280 -the third problem that I want to mention and the - -46 -00:02:22,280 --> 00:02:25,020 -third reason for the software crisis. And this cause is the - -47 -00:02:25,020 --> 00:02:28,790 -slow developer's productivity growth. So let me show this again - -48 -00:02:28,790 --> 00:02:32,243 -with a qualitative diagram. And this is taken from the IEEE - -49 -00:02:32,243 --> 00:02:35,550 -Software Magazine. And what I'm showing here is the growth in - -50 -00:02:35,550 --> 00:02:39,930 -software size and complexity over time, and how the developers' productivity - -51 -00:02:39,930 --> 00:02:43,800 -really couldn't keep up with this additional software complexity, which resulted - -52 -00:02:43,800 --> 00:02:47,170 -in this gap between what was needed and what was actually available. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/7 - The Software Crisis Quiz - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/7 - The Software Crisis Quiz - lang_en.srt deleted file mode 100644 index 004a36c..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/7 - The Software Crisis Quiz - lang_en.srt +++ /dev/null @@ -1,44 +0,0 @@ -1 -00:00:00,078 --> 00:00:02,480 -So now let's take a quick break and have a recap - -2 -00:00:02,480 --> 00:00:05,300 -of what we just discussed. I want you to think about what - -3 -00:00:05,300 --> 00:00:07,850 -are the major causes of the software crisis. I'm going to provide you - -4 -00:00:07,850 --> 00:00:10,250 -a set of possibilities and I would like for you to mark - -5 -00:00:10,250 --> 00:00:14,160 -all that apply. Was that increasing costs of computers? Was it increasing - -6 -00:00:14,160 --> 00:00:17,990 -product complexity, or maybe the lack of programmers? Or was it, instead, - -7 -00:00:17,990 --> 00:00:20,000 -this slow programmers productivity growth? The - -8 -00:00:20,000 --> 00:00:21,540 -lack of funding for software engineering - -9 -00:00:21,540 --> 00:00:25,210 -research? The rise in demand for software? And finally, was it maybe - -10 -00:00:25,210 --> 00:00:26,500 -the lack of caffeine in software - -11 -00:00:26,500 --> 00:00:29,570 -development organizations? Again, mark all that apply. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/8 - The Software Crisis Quiz Solution - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/8 - The Software Crisis Quiz Solution - lang_en.srt deleted file mode 100644 index 33f5c6c..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/8 - The Software Crisis Quiz Solution - lang_en.srt +++ /dev/null @@ -1,52 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,440 -So, if you think about what we just discussed. Definitely one - -2 -00:00:02,440 --> 00:00:06,210 -of the causes was the increasing product complexity. Products were becoming more - -3 -00:00:06,210 --> 00:00:09,510 -and more complex and software was replacing more and more, what - -4 -00:00:09,510 --> 00:00:11,860 -was before, provided by hardware components. - -5 -00:00:11,860 --> 00:00:14,160 -Slow productivity growth was another problem, - -6 -00:00:14,160 --> 00:00:17,350 -because programmers could not keep up with the additional complexity of - -7 -00:00:17,350 --> 00:00:19,720 -the software that they had to develop. I would like to say - -8 -00:00:19,720 --> 00:00:22,480 -there was lack of funding for software engineering research because I'm - -9 -00:00:22,480 --> 00:00:25,230 -a software engineering researcher, but that was not one of the reasons - -10 -00:00:25,230 --> 00:00:27,200 -for the software crisis. Instead, it was - -11 -00:00:27,200 --> 00:00:30,140 -the rising demand for software. Again, more - -12 -00:00:30,140 --> 00:00:32,060 -and more software was being required and - -13 -00:00:32,060 --> 00:00:33,850 -more and more software was replacing hardware. - diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/9 - Evidence of the Software Crisis - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/9 - Evidence of the Software Crisis - lang_en.srt deleted file mode 100644 index 0592078..0000000 --- a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/9 - Evidence of the Software Crisis - lang_en.srt +++ /dev/null @@ -1,116 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,220 -After recapping the three major issues that characterize a software crisis - -2 -00:00:03,220 --> 00:00:05,626 -let's see what was the evidence that there was indeed a - -3 -00:00:05,626 --> 00:00:07,900 -crisis. So what I want to discuss now is the result - -4 -00:00:07,900 --> 00:00:11,060 -of a study performed by Davis in 1990s. So in even - -5 -00:00:11,060 --> 00:00:13,670 -more recent times than the 60s and the 70s. And the - -6 -00:00:13,670 --> 00:00:17,280 -study was performed on nine software projects that were totaling a - -7 -00:00:17,280 --> 00:00:20,990 -cost around $7 million and I'm going to show you how this - -8 -00:00:20,990 --> 00:00:25,190 -projects went using this representation, this pi representation, in which I'm - -9 -00:00:25,190 --> 00:00:27,520 -going to discuss what each of the segment of the - -10 -00:00:27,520 --> 00:00:30,010 -pi represent. So let's start looking at the first one. - -11 -00:00:30,010 --> 00:00:32,920 -This is a software that was usable as delivered. Other - -12 -00:00:32,920 --> 00:00:36,590 -software was delivered, and usable, either after some changes or - -13 -00:00:36,590 --> 00:00:41,080 -after some major modifications, so within additional costs involved. - -14 -00:00:41,080 --> 00:00:43,530 -But the striking piece of information here is that the - -15 -00:00:43,530 --> 00:00:46,890 -vast majority of the software, so these two slices, were - -16 -00:00:46,890 --> 00:00:50,250 -software that was either delivered but never successfully used or - -17 -00:00:50,250 --> 00:00:53,730 -software that was not even delivered. And this corresponded - -18 -00:00:53,730 --> 00:00:57,500 -to five over the seven total million dollars for - -19 -00:00:57,500 --> 00:01:00,050 -all the projects. So clearly, this shows a pretty - -20 -00:01:00,050 --> 00:01:03,910 -grim picture for software development and its success. In short, - -21 -00:01:03,910 --> 00:01:06,410 -there was clear evidence the software was becoming to - -22 -00:01:06,410 --> 00:01:08,990 -difficult too build and that the software industry was facing - -23 -00:01:08,990 --> 00:01:11,190 -a crisis. And this is what led to the - -24 -00:01:11,190 --> 00:01:15,130 -NATO Software Engineering Conference that was held in January 1969, - -25 -00:01:15,130 --> 00:01:19,100 -which is what we can consider the birth of software engineering. And what - -26 -00:01:19,100 --> 00:01:23,080 -I'm showing here is a drawing of the proceedings for that conference. And if - -27 -00:01:23,080 --> 00:01:26,020 -you look at the class notes you can see a link to the actual - -28 -00:01:26,020 --> 00:01:27,640 -proceedings, in case you are interested in - -29 -00:01:27,640 --> 00:01:29,180 -looking at the issues that were discussed. - diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/1 - Introduction with Barry Boehm - lang_en_vs7.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/1 - Introduction with Barry Boehm - lang_en_vs7.srt deleted file mode 100644 index 954db98..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/1 - Introduction with Barry Boehm - lang_en_vs7.srt +++ /dev/null @@ -1,163 +0,0 @@ -1 -00:00:00,430 --> 00:00:06,300 -Hi, in the last lesson we provided an overview of the course and motivated the - -2 -00:00:06,300 --> 00:00:09,570 -need for software engineering. In this lesson, - -3 -00:00:09,570 --> 00:00:13,090 -we will present and start discussing several traditional - -4 -00:00:13,090 --> 00:00:16,090 -software engineering life cycle models. We will - -5 -00:00:16,090 --> 00:00:18,790 -talk about their main advantages, and also about - -6 -00:00:18,790 --> 00:00:21,840 -their shortcomings. We will also talk about - -7 -00:00:21,840 --> 00:00:25,720 -classic mistakes in software engineering that is well - -8 -00:00:25,720 --> 00:00:29,530 -known ineffective development practices, that when - -9 -00:00:29,530 --> 00:00:32,590 -followed, tend to lead to better results. And - -10 -00:00:32,590 --> 00:00:35,120 -covering those, will hopefully help us to avoid - -11 -00:00:35,120 --> 00:00:38,350 -them in the future. And because in this - -12 -00:00:38,350 --> 00:00:41,290 -lesson, I will discuss some fundamental aspects of - -13 -00:00:41,290 --> 00:00:44,730 -software engineering, to suitably introduce these topics, I - -14 -00:00:44,730 --> 00:00:47,110 -went to the University of Southern California, to - -15 -00:00:47,110 --> 00:00:50,300 -interview one of the fathers of software engineering; - -16 -00:00:50,300 --> 00:00:53,070 -Professor Barry Boehm. - -17 -00:00:53,070 --> 00:00:59,060 ->> A well, a software life cycle is a sequence of, of decisions that you - -18 -00:00:59,060 --> 00:01:01,895 -make, and it's fundamentally those decisions are - -19 -00:01:01,895 --> 00:01:05,280 -going to be part of the history of the - -20 -00:01:05,280 --> 00:01:09,500 -software that. You are going to build that other people are going to use, and - -21 -00:01:09,500 --> 00:01:15,330 -the process model is basically answering the question of what do I do next and - -22 -00:01:15,330 --> 00:01:20,550 -how long shall I do it for. And again, because there are a lot of different ways - -23 -00:01:20,550 --> 00:01:24,220 -you can make that decision, you need to - -24 -00:01:24,220 --> 00:01:27,640 -figure out which models are good for which particular - -25 -00:01:27,640 --> 00:01:31,475 -situations. So, for example, we've, written a book - -26 -00:01:31,475 --> 00:01:34,846 -that's called Balancing Agility and Discipline. It says under - -27 -00:01:34,846 --> 00:01:37,835 -what conditions should you use agile methods, under - -28 -00:01:37,835 --> 00:01:40,824 -which conditions should you invest more time in analyzing - -29 -00:01:40,824 --> 00:01:44,826 -the situation and planning what you're going to do and the like. And so, - -30 -00:01:44,826 --> 00:01:49,866 -typically if the project is, is small where it's three to ten - -31 -00:01:49,866 --> 00:01:55,271 -people, agile works pretty well. If it's 300 - -32 -00:01:55,271 --> 00:02:00,545 -people, then I think we don't want to go that way. If the affect of - -33 -00:02:00,545 --> 00:02:05,960 -the defect is loss of comfort or limited funds, then agile is fine, - -34 -00:02:05,960 --> 00:02:11,184 -but if it is a loss of life, then you don't. On the other hand if, if - -35 -00:02:11,184 --> 00:02:13,776 -you have a situation where you have lot - -36 -00:02:13,776 --> 00:02:17,745 -of unpredictable change, you really don't want to spend - -37 -00:02:17,745 --> 00:02:23,439 -a lot of time writing plans and lots of documents. In some cases you may have a - -38 -00:02:23,439 --> 00:02:26,907 -project where you want to do waterfall in - -39 -00:02:26,907 --> 00:02:31,140 -some parts and agile in others. So, these are - -40 -00:02:31,140 --> 00:02:36,180 -the kind of things that, that make the choice of life cycle process - -41 -00:02:36,180 --> 00:02:41,409 -model very important and very interesting as a subject of research. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/10 - Software Process Model Introduction - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/10 - Software Process Model Introduction - lang_en_vs4.srt deleted file mode 100644 index 39d418b..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/10 - Software Process Model Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,240 --> 00:00:02,600 -At this point, you know the possible activities, the - -2 -00:00:02,600 --> 00:00:06,520 -possible phases performed during the software development process. But there - -3 -00:00:06,520 --> 00:00:08,710 -this something that we still haven't discussed, which is - -4 -00:00:08,710 --> 00:00:11,910 -very important. And that is how should we put these - -5 -00:00:11,910 --> 00:00:14,990 -activities together to develop software? And this all comes - -6 -00:00:14,990 --> 00:00:18,360 -down to the concept of software process model. Also called - -7 -00:00:18,360 --> 00:00:21,520 -software lifecycle model. And what this is, is a - -8 -00:00:21,520 --> 00:00:25,470 -prescriptive model of what should happen from the very beginning - -9 -00:00:25,470 --> 00:00:28,960 -to the very end. Of a software development process. The - -10 -00:00:28,960 --> 00:00:31,360 -main function of the life cycle model is to determine - -11 -00:00:31,360 --> 00:00:34,290 -the order of the different activities so that we know - -12 -00:00:34,290 --> 00:00:37,920 -which activities should come first and which ones should follow. Another - -13 -00:00:37,920 --> 00:00:40,910 -important function of the life cycle model is to determine - -14 -00:00:40,910 --> 00:00:45,290 -the transition criteria between activities. So, when we can go from - -15 -00:00:45,290 --> 00:00:48,000 -one phase to the subsequent one. In other words, what - -16 -00:00:48,000 --> 00:00:50,840 -the model should describe is what should we do next and - -17 -00:00:50,840 --> 00:00:53,450 -how long should we continue to do it for each activity - -18 -00:00:53,450 --> 00:00:56,290 -in the model. Now lets see a few traditional software process - -19 -00:00:56,290 --> 00:00:58,920 -models. I will discuss them here at the high level and - -20 -00:00:58,920 --> 00:01:02,000 -then revisit some of these models in the different mini courses. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/11 - Waterfall Process - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/11 - Waterfall Process - lang_en_vs4.srt deleted file mode 100644 index b3d7c07..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/11 - Waterfall Process - lang_en_vs4.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,830 -The first model we want to discuss is the grandfather of - -2 -00:00:02,830 --> 00:00:05,900 -all life cycle models. And it is the waterfall model. In - -3 -00:00:05,900 --> 00:00:08,890 -the waterfall model the project progresses to an orderly sequence of - -4 -00:00:08,890 --> 00:00:13,040 -steps. From the initial software concept, down until the final phase. - -5 -00:00:13,040 --> 00:00:16,110 -Which is system testing. And at the end of each phase - -6 -00:00:16,110 --> 00:00:18,510 -there will be a review to determine whether the project is - -7 -00:00:18,510 --> 00:00:22,120 -ready to advance to the next phase. The pure waterfall model - -8 -00:00:22,120 --> 00:00:25,340 -performs well for softer products in which there is a stable - -9 -00:00:25,340 --> 00:00:28,400 -product definition. The domain is well known and the technologies - -10 -00:00:28,400 --> 00:00:31,220 -involved are well understood. In these kind of domains, the - -11 -00:00:31,220 --> 00:00:34,350 -waterfall model helps you to find errors in the early, - -12 -00:00:34,350 --> 00:00:37,180 -local stages of the projects. If you remember what we discussed, - -13 -00:00:37,180 --> 00:00:39,950 -this is the place where we want to find errors, - -14 -00:00:39,950 --> 00:00:43,440 -not down here because finding them here will reduce the cost - -15 -00:00:43,440 --> 00:00:47,160 -of our overall software development. The main advantage of the - -16 -00:00:47,160 --> 00:00:50,930 -waterfall model is that it allows you to find errors early. - -17 -00:00:50,930 --> 00:00:53,910 -However, the main disadvantages of the waterfall model arise - -18 -00:00:53,910 --> 00:00:56,550 -from the fact that it is not flexible. Normally, - -19 -00:00:56,550 --> 00:00:59,520 -it is difficult to fully specify requirements at the - -20 -00:00:59,520 --> 00:01:02,470 -beginning of a project. And this lack of flexibility is - -21 -00:01:02,470 --> 00:01:04,800 -far from ideal when dealing with project in which - -22 -00:01:04,800 --> 00:01:07,310 -requirements change, the developers are not domain experts or - -23 -00:01:07,310 --> 00:01:11,130 -the technology used are new and evolving, that is - -24 -00:01:11,130 --> 00:01:14,440 -it is less than ideal for most real world projects. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/12 - Spiral Process - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/12 - Spiral Process - lang_en_vs4.srt deleted file mode 100644 index 2d0cdf9..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/12 - Spiral Process - lang_en_vs4.srt +++ /dev/null @@ -1,191 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,600 -The next model that we will discuss is the spiral - -2 -00:00:02,600 --> 00:00:05,630 -model, which was first described by Barry Boehm, which is - -3 -00:00:05,630 --> 00:00:08,010 -the professor that we interviewed at the beginning of this - -4 -00:00:08,010 --> 00:00:12,240 -lesson. In his paper from 1986 that was entitled A Spiral - -5 -00:00:12,240 --> 00:00:15,730 -Model of Software Development and Enhancement. And one of the - -6 -00:00:15,730 --> 00:00:18,520 -main characteristics of that paper is that it was describing the - -7 -00:00:18,520 --> 00:00:21,670 -spiral model using a diagram, which is the one that - -8 -00:00:21,670 --> 00:00:25,130 -I'm showing you here, and this diagram has become very very - -9 -00:00:25,130 --> 00:00:27,950 -popular, and you probably saw it either in this - -10 -00:00:27,950 --> 00:00:30,400 -form or one of the many variations of the - -11 -00:00:30,400 --> 00:00:32,680 -diagram. So I'm not going to discuss all of - -12 -00:00:32,680 --> 00:00:34,770 -the details of the spiral model, but I just want to - -13 -00:00:34,770 --> 00:00:37,510 -give you an idea of its main characteristics. The - -14 -00:00:37,510 --> 00:00:41,580 -spiral model is an incremental risk-oriented lifecycle model that has - -15 -00:00:41,580 --> 00:00:46,330 -four main phases listed here: determine objectives, identify and - -16 -00:00:46,330 --> 00:00:51,180 -resolve risks, development and tests, and plan the next iteration. - -17 -00:00:51,180 --> 00:00:53,690 -A software project will go through these four phases in - -18 -00:00:53,690 --> 00:00:57,020 -an iterative way. In the first phase, the requirements will - -19 -00:00:57,020 --> 00:00:59,470 -be gathered. In the second phase, the risks and the - -20 -00:00:59,470 --> 00:01:04,010 -alternate solutions will be identified, and a prototype will be produced. - -21 -00:01:04,010 --> 00:01:06,190 -Software and tests for the software are produced in the - -22 -00:01:06,190 --> 00:01:09,210 -development and test phase, which is the third step of the - -23 -00:01:09,210 --> 00:01:12,830 -process. Finally, in the fourth phase, the output of the - -24 -00:01:12,830 --> 00:01:16,880 -project, so far, is evaluated, and the next iteration is planned. - -25 -00:01:16,880 --> 00:01:19,960 -So basically, what the spiral process prescribes is a - -26 -00:01:19,960 --> 00:01:23,262 -way of developing software by going through these phases in - -27 -00:01:23,262 --> 00:01:26,020 -an iterative way, in which we learn more and more - -28 -00:01:26,020 --> 00:01:29,420 -of the software, we identify more and more, and account - -29 -00:01:29,420 --> 00:01:32,250 -for, more and more risks and we go more - -30 -00:01:32,250 --> 00:01:36,000 -and more towards our final solution, our final release. There - -31 -00:01:36,000 --> 00:01:38,930 -are several advantages of using a spiral model. The first - -32 -00:01:38,930 --> 00:01:41,930 -one is that the extensive risk analysis does reduce the - -33 -00:01:41,930 --> 00:01:44,140 -chances of the project to fail. So there is a - -34 -00:01:44,140 --> 00:01:48,300 -risk reduction advantage. The second advantage is that functionality can be - -35 -00:01:48,300 --> 00:01:51,190 -added at a later phase because of the iterative nature of - -36 -00:01:51,190 --> 00:01:55,175 -the process. And finally, software is produced early in the software - -37 -00:01:55,175 --> 00:01:58,260 -lifecycle. So, at any iteration, we have something to show - -38 -00:01:58,260 --> 00:02:01,300 -for our development. We don't wait until the end before producing - -39 -00:02:01,300 --> 00:02:03,790 -something. And then of course there's also the advantage that we - -40 -00:02:03,790 --> 00:02:07,190 -can get early feedback from the customer about what we produced. - -41 -00:02:07,190 --> 00:02:09,000 -The main disadvantages on the other hand of - -42 -00:02:09,000 --> 00:02:11,870 -the spiral model, are that the risk analysis requires - -43 -00:02:11,870 --> 00:02:16,560 -a highly specific expertise. And unfortunately, the whole success - -44 -00:02:16,560 --> 00:02:19,260 -of the process is highly dependent on risk analysis. - -45 -00:02:19,260 --> 00:02:21,580 -So risk analysis has to be done right. - -46 -00:02:21,580 --> 00:02:24,510 -And finally the spiral model is way more complex - -47 -00:02:24,510 --> 00:02:27,180 -than other models, like for example, the water fall - -48 -00:02:27,180 --> 00:02:29,760 -model. And therefore it can be costly to implement. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_en_vs4.srt deleted file mode 100644 index cf068c0..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_en_vs4.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,430 -The next process model I want to discuss is evolutionary - -2 -00:00:02,430 --> 00:00:05,786 -prototyping, which works in four main phases. We start - -3 -00:00:05,786 --> 00:00:08,393 -from an initial concept, then we design and implement - -4 -00:00:08,393 --> 00:00:11,509 -a prototype based on this initial concept, refine the prototype - -5 -00:00:11,509 --> 00:00:14,002 -until it is acceptable, and finally we complete and - -6 -00:00:14,002 --> 00:00:17,550 -release the prototype. Therefore, when developing a system using - -7 -00:00:17,550 --> 00:00:22,330 -evolutionary prototyping, the system is continually refined and rebuilt. - -8 -00:00:22,330 --> 00:00:25,340 -So it is an ideal process when not all requirements - -9 -00:00:25,340 --> 00:00:28,330 -are well understood. Which is a very common situation. So, looking - -10 -00:00:28,330 --> 00:00:30,370 -at this in a little more details, what happens is that - -11 -00:00:30,370 --> 00:00:33,760 -developers start by developing the parts of the system that they - -12 -00:00:33,760 --> 00:00:37,690 -understand, instead of working on developing a whole system, including parts - -13 -00:00:37,690 --> 00:00:40,520 -that might not be very clear at that stage. The partial - -14 -00:00:40,520 --> 00:00:43,900 -system is then shown to the customer and the customer feedback - -15 -00:00:43,900 --> 00:00:47,480 -is used to drive the next iteration, in which either changes - -16 -00:00:47,480 --> 00:00:50,340 -are made to the current features or new features are added. - -17 -00:00:50,340 --> 00:00:53,060 -So, either the current prototype is improved or the - -18 -00:00:53,060 --> 00:00:56,270 -prototype is extended. And finally, when the customer agrees that - -19 -00:00:56,270 --> 00:00:58,980 -the prototype is good enough, the developers will complete all - -20 -00:00:58,980 --> 00:01:01,410 -the remaining work on the system and release the prototype - -21 -00:01:01,410 --> 00:01:03,930 -as the final product. So let's discuss as we did - -22 -00:01:03,930 --> 00:01:06,780 -for the previous process models, what are the main advantages - -23 -00:01:06,780 --> 00:01:10,580 -and disadvantages of evolutionary prototyping. In this case, the main - -24 -00:01:10,580 --> 00:01:15,440 -advantage is the immediate feedback. Developers get feedback immediately as - -25 -00:01:15,440 --> 00:01:17,560 -soon as they produce a prototype and they show it to - -26 -00:01:17,560 --> 00:01:21,050 -the customer and therefore, the risk of implementing the wrong system is - -27 -00:01:21,050 --> 00:01:25,150 -minimized. The main negative is the fact that it's difficult to plan. - -28 -00:01:25,150 --> 00:01:29,070 -When using evolutionary prototype it is difficult to plan in advance how - -29 -00:01:29,070 --> 00:01:31,240 -long the development is going to take, because we don't know how - -30 -00:01:31,240 --> 00:01:34,550 -many iterations will be needed. And another drawback is that it can - -31 -00:01:34,550 --> 00:01:37,120 -easily become an excuse to do kind of do cut and fix - -32 -00:01:37,120 --> 00:01:40,530 -kind of approaches in which we hack something together, fix the main - -33 -00:01:40,530 --> 00:01:43,640 -issues when the customer gives us feedback, and then continue this - -34 -00:01:43,640 --> 00:01:46,780 -way, until the final product is something that is kind of - -35 -00:01:46,780 --> 00:01:49,830 -working, but it's not really a product of high quality. Something - -36 -00:01:49,830 --> 00:01:51,910 -else I want to point out before we move to the next - -37 -00:01:51,910 --> 00:01:54,490 -software process model is that there are many different kinds of - -38 -00:01:54,490 --> 00:01:56,700 -prototyping, so evolutionary prototyping is just - -39 -00:01:56,700 --> 00:01:58,010 -one of them. For example, throwaway - -40 -00:01:58,010 --> 00:02:02,100 -prototyping is another kind of prototyping in which the prototype is - -41 -00:02:02,100 --> 00:02:05,580 -just used to gather requirements, but is thrown away at the end - -42 -00:02:05,580 --> 00:02:08,710 -of the requirements gathering, instead of being evolved as it happens here. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_pt_vs2.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_pt_vs2.srt deleted file mode 100644 index a1fefdc..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/13 - Evolutionary Prototyping Process - lang_pt_vs2.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,430 -O próximo modelo que eu quero discutir é prototipagem - -2 -00:00:02,430 --> 00:00:05,786 -evolutiva, que funciona em quatro fases principais. Nós começamos - -3 -00:00:05,786 --> 00:00:08,393 -por um conceito inicial, então nós desenhamos e criamos - -4 -00:00:08,393 --> 00:00:11,509 -um protótipo baseado neste conceito inicial, refinamos o protótipo - -5 -00:00:11,509 --> 00:00:14,002 -até que ele se torne aceitável e finalmente nós completamos e - -6 -00:00:14,002 --> 00:00:17,550 -liberamos o protótipo. Desta maneira, quando desenvolvemos um sistema usando - -7 -00:00:17,550 --> 00:00:22,330 -prototipagem evolutiva, o sistema é constantemente refinado e refeito. - -8 -00:00:22,330 --> 00:00:25,340 -Então este é o processo ideal quando nem todos os requisitos - -9 -00:00:25,340 --> 00:00:28,330 -estão bem compreendidos. O que é uma situação bastante usual. Então, olhando - -10 -00:00:28,330 --> 00:00:30,370 -para isso um pouco mais detalhadamente, o que ocorre é que - -11 -00:00:30,370 --> 00:00:33,760 -os desenvolvedores começam no desenvolvimento das partes do sistema que eles - -12 -00:00:33,760 --> 00:00:37,690 -compreendem, ao invés de trabalhar no desenvolvimento do sistema com um tido, incluindo as - -13 -00:00:37,690 --> 00:00:40,520 -parte que não estão ainda muito claras. O sistema - -14 -00:00:40,520 --> 00:00:43,900 -parcial é então mostrado ao cliente e a opinião do cliente - -15 -00:00:43,900 --> 00:00:47,480 -é usada para guiar a próxima iteração, na qual tanto modificações - -16 -00:00:47,480 --> 00:00:50,340 -são feitas nas atuais feições, como novas feições são adicionadas. - -17 -00:00:50,340 --> 00:00:53,060 -Assim, ou o protótipo atual é melhorado ou o - -18 -00:00:53,060 --> 00:00:56,270 -protótipo é aumentado. E finalmente, quando o cliente concorda de - -19 -00:00:56,270 --> 00:00:58,980 -que o protótipo está suficientemente bom, os desenvolvedores irão completar todo - -20 -00:00:58,980 --> 00:01:01,410 -o trabalho faltante no sistema e liberar o protótipo - -21 -00:01:01,410 --> 00:01:03,930 -como o produto final. Então vamos discutir como fizemos - -22 -00:01:03,930 --> 00:01:06,780 -para os modelos de processos anteriores, quais são as principais vantagens - -23 -00:01:06,780 --> 00:01:10,580 -e desvantagens de prototipagem evolutiva. Neste caso, a principal - -24 -00:01:10,580 --> 00:01:15,440 -vantagem é apreciação imediada. Os desenvolvedores recebem a opinião imediatamente, - -25 -00:01:15,440 --> 00:01:17,560 -tão logo eles produziram o protótipo e o mostraram para o - -26 -00:01:17,560 --> 00:01:21,050 -cliente e desta maneira, o risco de implementar erradamente o sistema é - -27 -00:01:21,050 --> 00:01:25,150 -minimizado. O principal ponto negativo é que isso é difícil de planejar. - -28 -00:01:25,150 --> 00:01:29,070 -Quando é usada a prototipagem evolutiva é difícil de antecipar por - -29 -00:01:29,070 --> 00:01:31,240 -quanto tempo o desenvolvimento irá levar, porquê nós não sabemos quantas - -30 -00:01:31,240 --> 00:01:34,550 -iterações serão necessárias. E outro inconveniente é que isso pode facilmente - -31 -00:01:34,550 --> 00:01:37,120 -se tornar uma desculpa para começar a fazer aquele tipo de abordagem de - -32 -00:01:37,120 --> 00:01:40,530 -"corte-e-correção" na qual nós começamos a enjambrar as coisas, corrigir os - -33 -00:01:40,530 --> 00:01:43,640 -principais defeitos quando o cliente nos dá sua opinião e então continuamos desta - -34 -00:01:43,640 --> 00:01:46,780 -maneira, até que o produto final se torne tipo algo que - -35 -00:01:46,780 --> 00:01:49,830 -funciona, mas que não é de fato um produto de alta qualidade. Outra coisa - -36 -00:01:49,830 --> 00:01:51,910 -que eu quero apontar antes de irmos ao próximo - -37 -00:01:51,910 --> 00:01:54,490 -modelo de criação de software é que existem diversas maneiras de - -38 -00:01:54,490 --> 00:01:56,700 -prototipagem, então a prototipagem evolutiva é apenas - -39 -00:01:56,700 --> 00:01:58,010 -uma delas. Por exemplo, prototipagem - -40 -00:01:58,010 --> 00:02:02,100 -descartável é outra maneira de prototipagem na qual o protótipo é - -41 -00:02:02,100 --> 00:02:05,580 -usado apenas para coletar requisitos, mas é descartado ao final - -42 -00:02:05,580 --> 00:02:08,710 -da coleta de requisitos, ao invés de ser evoluído, como ocorre aqui. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_en_vs5.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_en_vs5.srt deleted file mode 100644 index 8bc6db8..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,969 -There are two more software process models that I want to cover, so - -2 -00:00:02,969 --> 00:00:06,120 -bear with me. The first one is the Rational Unified software Process - -3 -00:00:06,120 --> 00:00:09,500 -or IUP, which is s a very popular one based on UML. - -4 -00:00:09,500 --> 00:00:12,620 -RUP works in an iterative way, which means it that it performs different - -5 -00:00:12,620 --> 00:00:16,360 -iterations. And at each iteration, it performs four phases. So what I'm - -6 -00:00:16,360 --> 00:00:19,030 -showing you here, is a high level view of the process. And I - -7 -00:00:19,030 --> 00:00:21,630 -don't want you to focus on all the different details, because we - -8 -00:00:21,630 --> 00:00:25,170 -will discuss these details later on, in a lesson that is actually dedicated - -9 -00:00:25,170 --> 00:00:27,470 -to RUP. What I want to give you now, is just the - -10 -00:00:27,470 --> 00:00:31,020 -gist of how this works. So, in each one of these four - -11 -00:00:31,020 --> 00:00:34,680 -phases, which I'm going to describe in a second. We perform standard software - -12 -00:00:34,680 --> 00:00:38,060 -engineering activities, the ones that we just discussed. And we do them - -13 -00:00:38,060 --> 00:00:41,320 -to different extent, based on the phase in which we are. - -14 -00:00:41,320 --> 00:00:44,841 -In particular, in the inception phase the work is mostly to sculpt - -15 -00:00:44,841 --> 00:00:47,940 -the system. So basically figuring out what is the scope of the - -16 -00:00:47,940 --> 00:00:50,220 -work, what is the scope of the project, what is the domain. - -17 -00:00:50,220 --> 00:00:52,670 -So that we can be able to perform initial cost - -18 -00:00:52,670 --> 00:00:56,190 -and budget estimates. The operational phase is the phase in which - -19 -00:00:56,190 --> 00:00:59,910 -we focus on the domain analysis and define the basic architecture - -20 -00:00:59,910 --> 00:01:03,030 -for the system. So this is a phase in which analysis - -21 -00:01:03,030 --> 00:01:06,290 -and design are particularly paramount. Then there is a construction phase, - -22 -00:01:06,290 --> 00:01:09,250 -which is where the bulk of the development actually occurs. And - -23 -00:01:09,250 --> 00:01:11,640 -as you can see here, is where most of the implementation - -24 -00:01:11,640 --> 00:01:15,280 -happens. And finally, the transition phase is the phase in which - -25 -00:01:15,280 --> 00:01:18,090 -the system goes from development into production, so that - -26 -00:01:18,090 --> 00:01:20,380 -it becomes available to users. And of course, this is - -27 -00:01:20,380 --> 00:01:22,480 -the phase in which the other activities in software - -28 -00:01:22,480 --> 00:01:25,710 -development become less relevant and deployment becomes the main one. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_pt_vs1.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_pt_vs1.srt deleted file mode 100644 index cb089cb..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/14 - Rational Unified Process - lang_pt_vs1.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,969 -Existem ainda dois outros processos de modelagem de software que eu gostaria de tratar, então - -2 -00:00:02,969 --> 00:00:06,120 -me acompanhem. O primeiro é o Processo Unificado Racional - -3 -00:00:06,120 --> 00:00:09,500 -ou RUP que é um dos mais populares baseados em UML. - -4 -00:00:09,500 --> 00:00:12,620 -RUP opera de uma maneira iterativa, o que significa que ocorrem diversas - -5 -00:00:12,620 --> 00:00:16,360 -iterações. E em cada iteração, são desenvolvidas quatro fases. Então o que eu - -6 -00:00:16,360 --> 00:00:19,030 -estou lhe mostrando aqui, é uma vista panorâmica do processo. E eu - -7 -00:00:19,030 --> 00:00:21,630 -não quero que você foque em todos os detalhes, porquê nós - -8 -00:00:21,630 --> 00:00:25,170 -iremos discutir estes detalhes mais tarde, numa lição que é de fato dedicada - -9 -00:00:25,170 --> 00:00:27,470 -ao RUP. O que eu quero lhe dar agora, é apenas a - -10 -00:00:27,470 --> 00:00:31,020 -essência de como isso funciona. Então, em cada um dessas quatro - -11 -00:00:31,020 --> 00:00:34,680 -fases, que eu irei descrever em breve... Nós desenvolvemos atividades - -12 -00:00:34,680 --> 00:00:38,060 -de engenharia de software padrões, as que nós já discutimos. E nós as fazemos - -13 -00:00:38,060 --> 00:00:41,320 -para diferentes amplitudes, baseadas na fase em que nos encontramos. - -14 -00:00:41,320 --> 00:00:44,841 -Em particular, na fase de Concepção (Iniciação) o trabalho será sobretudo de esculpir - -15 -00:00:44,841 --> 00:00:47,940 -o sistema. E basicamente ilustrando o escopo do - -16 -00:00:47,940 --> 00:00:50,220 -trabalho, qual será o escopo do projeto, qual é o domínio. - -17 -00:00:50,220 --> 00:00:52,670 -E então nós seremos capazes de saber o custo inicial - -18 -00:00:52,670 --> 00:00:56,190 -e fazer um orçamento. A fase de Elaboração é a fase na qual - -19 -00:00:56,190 --> 00:00:59,910 -nós focamos na análise de domínio e definimos a arquitetura de base - -20 -00:00:59,910 --> 00:01:03,030 -do sistema. Então esta é a fase na qual a análise - -21 -00:01:03,030 --> 00:01:06,290 -e o projeto se tornam proeminentes. E então ocorre a fase de Construção, - -22 -00:01:06,290 --> 00:01:09,250 -na qual o desenvolvimento massivo de fato ocorre. E - -23 -00:01:09,250 --> 00:01:11,640 -como você pode ver aqui, é onde a maior parte da implementação - -24 -00:01:11,640 --> 00:01:15,280 -ocorre. E finalmente, a fase de Transição é a fase na qual - -25 -00:01:15,280 --> 00:01:18,090 -o sistema passa do desenvolvimento para a produção, e então - -26 -00:01:18,090 --> 00:01:20,380 -ele se torna disponível aos usuários. E é claro, esta é - -27 -00:01:20,380 --> 00:01:22,480 -a fase na qual as outras atividades em desenvolvimento de - -28 -00:01:22,480 --> 00:01:25,710 -software se tornam menos relevantes e a entrega se torna a principal. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_en_vs3.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_en_vs3.srt deleted file mode 100644 index 70ef200..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_en_vs3.srt +++ /dev/null @@ -1,123 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,300 -The next type of software process models that I - -2 -00:00:02,300 --> 00:00:06,300 -want to discuss are Agile Software Development Processes. And this - -3 -00:00:06,300 --> 00:00:08,470 -is a group of software development methods that are - -4 -00:00:08,470 --> 00:00:12,620 -based on highly iterative and incremental development. And in particular, - -5 -00:00:12,620 --> 00:00:16,000 -I'm going to discuss Test Driven Development or TDD. The - -6 -00:00:16,000 --> 00:00:18,490 -space on the iteration of three main phases. In - -7 -00:00:18,490 --> 00:00:20,970 -the first one that we mark as red, we - -8 -00:00:20,970 --> 00:00:25,350 -write test cases that encode our requirements, and for which - -9 -00:00:25,350 --> 00:00:29,180 -we haven't written code yet. And therefore, they will fail, obviously. - -10 -00:00:29,180 --> 00:00:31,800 -So we're in this sort of red or fail phase. From - -11 -00:00:31,800 --> 00:00:34,830 -this phase, we move to this phase, in which after we - -12 -00:00:34,830 --> 00:00:37,970 -write the just enough code to make the test cases pass. - -13 -00:00:37,970 --> 00:00:40,670 -We have a set of test cases that are all passing. - -14 -00:00:40,670 --> 00:00:43,810 -And therefore, we can consider this as the green phase. We - -15 -00:00:43,810 --> 00:00:46,930 -had enough code to make the test cases pass because the - -16 -00:00:46,930 --> 00:00:50,520 -test cases encode our requirements. We have just written enough code to - -17 -00:00:50,520 --> 00:00:53,940 -satisfy our requirements. When we do this over time though, - -18 -00:00:53,940 --> 00:00:57,080 -what happens is that the structure of the code deteriorates, because - -19 -00:00:57,080 --> 00:00:59,100 -we keep adding pieces. So that's why we have the - -20 -00:00:59,100 --> 00:01:02,540 -first step, which is refactoring. In this step, we modify the - -21 -00:01:02,540 --> 00:01:05,724 -code, and we will talk about refactoring extensively. We'll devote - -22 -00:01:05,724 --> 00:01:08,190 -one lesson to it. We modify the code to make it - -23 -00:01:08,190 --> 00:01:12,650 -more readable, more maintainable. In general, we modify to improve the - -24 -00:01:12,650 --> 00:01:15,560 -design of the code. And after this phase, we will go - -25 -00:01:15,560 --> 00:01:17,670 -back to writing more test cases for - -26 -00:01:17,670 --> 00:01:19,730 -new requirements, write code that makes these - -27 -00:01:19,730 --> 00:01:24,870 -test cases pass, and so on. So we'll continue to iterate among these phases. And - -28 -00:01:24,870 --> 00:01:26,500 -also, in this case, we will talk - -29 -00:01:26,500 --> 00:01:29,390 -about Agile Software Processes. And in particular, - -30 -00:01:29,390 --> 00:01:32,250 -about extreme programming, or XP, and Scrum - -31 -00:01:32,250 --> 00:01:35,349 -in more details, in minor course number four. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_pt_vs1.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_pt_vs1.srt deleted file mode 100644 index b2224ea..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/15 - Agile Process - lang_pt_vs1.srt +++ /dev/null @@ -1,123 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,300 -O próximo tipo de modelos de processo para software que eu - -2 -00:00:02,300 --> 00:00:06,300 -gostaria de discutir são os Processos Ágil de Desenvolvimento de Software. E este - -3 -00:00:06,300 --> 00:00:08,470 -é um grupo de métodos de desenvolvimento de software que são - -4 -00:00:08,470 --> 00:00:12,620 -baseados em desenvolvimento incremental e altamente iterativo. E em particular, - -5 -00:00:12,620 --> 00:00:16,000 -eu irei discutir é o Desenvolvimento Orientado a Testes, ou TDD. O - -6 -00:00:16,000 --> 00:00:18,490 -espaço na interação de três fases principais. Na - -7 -00:00:18,490 --> 00:00:20,970 -primeira delas que iremos marcar em vermelho, nós - -8 -00:00:20,970 --> 00:00:25,350 -escrevemos casos de teste que codificam nossos requisitos, e para os quais - -9 -00:00:25,350 --> 00:00:29,180 -nós ainda não escrevemos o código. E obviamente, em seguida eles irão falhar. - -10 -00:00:29,180 --> 00:00:31,800 -E então nós iremos cair neste tipo de fase vermelha, ou de falha. Desta - -11 -00:00:31,800 --> 00:00:34,830 -fase, nós passamos para esta outra fase, a qual ocorre depois de nós - -12 -00:00:34,830 --> 00:00:37,970 -escrevermos código suficiente para que os casos de teste aprovem. - -13 -00:00:37,970 --> 00:00:40,670 -Nós temos um conjunto de casos de testes em que todos aprovaram. - -14 -00:00:40,670 --> 00:00:43,810 -E em segunda, nós podemos considerar isso como a fase verde. Nós - -15 -00:00:43,810 --> 00:00:46,930 -temos código suficiente para fazer os casos de teste aprovarem porquê os - -16 -00:00:46,930 --> 00:00:50,520 -casos de teste codificam nossos requisitos. Nós escrevemos código suficiente para - -17 -00:00:50,520 --> 00:00:53,940 -satisfazer nossos requisitos. Quando nós seguimos com isso ao longo do tempo, - -18 -00:00:53,940 --> 00:00:57,080 -o que ocorre é que a estrutura do código deteriora, porquê - -19 -00:00:57,080 --> 00:00:59,100 -nós continuamos adicionando partes! E esta é a razão de nós termos o - -20 -00:00:59,100 --> 00:01:02,540 -primeiro passo, que é a Refatoração. Neste passo, nós modificamos o - -21 -00:01:02,540 --> 00:01:05,724 -código, e nós iremos falar extensamente sobre refatoração. Nós iremos dedicar - -22 -00:01:05,724 --> 00:01:08,190 -uma aula para isso. Nós modificamos o código para o tornar mais - -23 -00:01:08,190 --> 00:01:12,650 -legível, mais fácil de dar manutenção. Em geral, nós modificamos para aprimorar a - -24 -00:01:12,650 --> 00:01:15,560 -concepção do código. E depois desta fase, nós iremos tornar a - -25 -00:01:15,560 --> 00:01:17,670 -escrever mais casos de teste para - -26 -00:01:17,670 --> 00:01:19,730 -novos requisitos... escrever código que faz com que - -27 -00:01:19,730 --> 00:01:24,870 -esses casos de teste aprovem e assim em diante. E então nós iremos continuar a iterar ao entre essas fases. E - -28 -00:01:24,870 --> 00:01:26,500 -também, neste caso, nós iremos falar - -29 -00:01:26,500 --> 00:01:29,390 -sobre Processos Ágil de Desenvolvimento de Software. E em particular, em - -30 -00:01:29,390 --> 00:01:32,250 -Programação Extrema, ou XP e SCRUM - -31 -00:01:32,250 --> 00:01:35,349 -mais detalhadamente, no subcurso número quatro. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/16 - Choosing a Model - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/16 - Choosing a Model - lang_en_vs4.srt deleted file mode 100644 index d898337..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/16 - Choosing a Model - lang_en_vs4.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,860 -We just saw several software process models, and there - -2 -00:00:02,860 --> 00:00:06,330 -are many, many more. And because these process models define - -3 -00:00:06,330 --> 00:00:09,330 -the master plan for our project, the specific process - -4 -00:00:09,330 --> 00:00:12,220 -model that we choose has as much influence over a - -5 -00:00:12,220 --> 00:00:15,700 -project's success as any other major planning decision that - -6 -00:00:15,700 --> 00:00:18,610 -we make. Therefore, it is very important that we pick - -7 -00:00:18,610 --> 00:00:22,100 -the appropriate model for our development process. Picking an appropriate - -8 -00:00:22,100 --> 00:00:25,100 -model can ensure the success of a project. On the - -9 -00:00:25,100 --> 00:00:27,830 -contrary, if we choose the wrong model, that can be a - -10 -00:00:27,830 --> 00:00:31,010 -constant source of problems and ultimately, it can make the project - -11 -00:00:31,010 --> 00:00:33,830 -fail. So how can we choose the right model for a - -12 -00:00:33,830 --> 00:00:36,310 -project? To be able to do so, we have to take into - -13 -00:00:36,310 --> 00:00:40,490 -consideration many factors. In particular, we need to be aware of - -14 -00:00:40,490 --> 00:00:44,390 -what level of understanding we have of the requirements. Do we understand - -15 -00:00:44,390 --> 00:00:46,720 -all the requirements? Are we going to be able to collect all - -16 -00:00:46,720 --> 00:00:50,430 -the requirements in advance, or collecting requirements is going to be hard and - -17 -00:00:50,430 --> 00:00:53,460 -therefore, we might want to follow a process that is more flexible - -18 -00:00:53,460 --> 00:00:57,470 -with that respect. Another important point is the expected lifetime of the - -19 -00:00:57,470 --> 00:01:00,300 -project. Is this a quick project that we are putting together for - -20 -00:01:00,300 --> 00:01:03,100 -a specific purpose or something that's going to last for for a number - -21 -00:01:03,100 --> 00:01:05,910 -of years and that we're going to maintain over all those years? - -22 -00:01:05,910 --> 00:01:08,380 -That's going to make a difference in the way we decide to develop - -23 -00:01:08,380 --> 00:01:12,190 -that project. Also, what is the level of risk involved? Do we - -24 -00:01:12,190 --> 00:01:15,530 -know the domain very well? Do we know exactly the technologies involved? - -25 -00:01:15,530 --> 00:01:19,100 -Well, if so, we might go with a more traditional process. Otherwise, - -26 -00:01:19,100 --> 00:01:21,902 -we might want to be more agile, more flexible. It is also - -27 -00:01:21,902 --> 00:01:24,900 -very important to know the schedule constraints. How much time, how many - -28 -00:01:24,900 --> 00:01:28,640 -resources do we have for this project? What is the expected interaction - -29 -00:01:28,640 --> 00:01:31,870 -with the management and the customer? In particular for this ladder, there - -30 -00:01:31,870 --> 00:01:34,840 -are many processes that rely on the fact that there can be - -31 -00:01:34,840 --> 00:01:38,310 -a continuous interaction with the customer. If that interaction is not there, - -32 -00:01:38,310 --> 00:01:41,230 -there's no way we are going to be able to use these processes. - -33 -00:01:41,230 --> 00:01:44,580 -Conversely, there are processes that don't require the presence of the customer - -34 -00:01:44,580 --> 00:01:47,868 -at all, except for the initial phase and maybe some checking points and - -35 -00:01:47,868 --> 00:01:51,020 -so if the customer is very inaccessible, we might want to follow - -36 -00:01:51,020 --> 00:01:53,740 -one of those processes, instead of one of the more demanding ones in - -37 -00:01:53,740 --> 00:01:57,340 -terms of customer's time. Finally, it is important to take into account - -38 -00:01:57,340 --> 00:02:00,450 -the level of the expertise of the people involved. Do we have people - -39 -00:02:00,450 --> 00:02:02,730 -that know the technologies that we're using? Do we know people that - -40 -00:02:02,730 --> 00:02:04,590 -know a specific kind of process? - -41 -00:02:04,590 --> 00:02:06,930 -Some processes require some specific expertise and - -42 -00:02:06,930 --> 00:02:09,320 -we're not going to be able to follow that process if we don't - -43 -00:02:09,320 --> 00:02:12,410 -have the right expertise. So we need to take into account all of - -44 -00:02:12,410 --> 00:02:15,570 -these aspects, and sometimes more, in order to be able to make - -45 -00:02:15,570 --> 00:02:19,560 -the right decision and pick the right software process model for our project. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/17 - Choosing a Model Quiz - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/17 - Choosing a Model Quiz - lang_en_vs4.srt deleted file mode 100644 index 9f733ac..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/17 - Choosing a Model Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,080 -Now before we move to the last part of the lesson, let's - -2 -00:00:02,080 --> 00:00:04,939 -have a quick quiz on software process models to make sure that - -3 -00:00:04,939 --> 00:00:06,640 -we are all on the same page. So I am going to - -4 -00:00:06,640 --> 00:00:10,320 -ask you two questions. The first question is which of the following models - -5 -00:00:10,320 --> 00:00:14,330 -is most suitable to develop a software control system? And when you - -6 -00:00:14,330 --> 00:00:17,700 -think about the software control system, you can think about for example - -7 -00:00:17,700 --> 00:00:21,150 -the control system for the software in an airplane. Would you rather - -8 -00:00:21,150 --> 00:00:22,860 -use a pure waterfall model? Test - -9 -00:00:22,860 --> 00:00:25,840 -driven development? Or an evolutionary prototyping approach? diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/18 - Choosing a Model Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/18 - Choosing a Model Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index 01a444c..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/18 - Choosing a Model Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,980 -This is the context in which, typically, a pure - -2 -00:00:02,980 --> 00:00:06,310 -waterfall process will work well. Why? Well, because it's a - -3 -00:00:06,310 --> 00:00:10,160 -context in which requirements are usually well understood. The - -4 -00:00:10,160 --> 00:00:13,020 -domain is well understood, so that kind of system has - -5 -00:00:13,020 --> 00:00:15,900 -been built many times before. And also, it's a - -6 -00:00:15,900 --> 00:00:19,510 -system in which we don't expect requirements to change dramatically - -7 -00:00:19,510 --> 00:00:23,180 -over time. Therefore, a waterfall model, in which we collect - -8 -00:00:23,180 --> 00:00:25,140 -all the requirements at the beginning and then we move - -9 -00:00:25,140 --> 00:00:28,280 -to the subsequent phases might be the most appropriate one. Probably - -10 -00:00:28,280 --> 00:00:30,800 -we don't want to do evolutionary prototyping in the case of - -11 -00:00:30,800 --> 00:00:34,130 -the control system for an airplane. Same thing holds for TDD, - -12 -00:00:34,130 --> 00:00:36,460 -so we want to be a little more rigorous in those cases. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/19 - Choosing a Model Quiz - lang_en_vs5.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/19 - Choosing a Model Quiz - lang_en_vs5.srt deleted file mode 100644 index 570d146..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/19 - Choosing a Model Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,11 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,580 -The second question I want to ask you is which model is the most suitable if you - -2 -00:00:03,580 --> 00:00:06,660 -expect mid-course corrections? Would you rather use a - -3 -00:00:06,660 --> 00:00:10,430 -pure waterfall model, a spiral model, or evolutionary prototyping? diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/2 - Traditional Software Phases - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/2 - Traditional Software Phases - lang_en_vs4.srt deleted file mode 100644 index cc522f0..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/2 - Traditional Software Phases - lang_en_vs4.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,650 -As we just heard from Professor Bohem, software - -2 -00:00:02,650 --> 00:00:05,970 -engineering is an important and critical discipline, concerned - -3 -00:00:05,970 --> 00:00:09,100 -with cost effective software development. We also heard - -4 -00:00:09,100 --> 00:00:11,170 -that this is based on a systematic approach - -5 -00:00:11,170 --> 00:00:14,580 -that uses appropriate tools and techniques, operates under - -6 -00:00:14,580 --> 00:00:18,130 -specific development constraints. And most importantly, follows a - -7 -00:00:18,130 --> 00:00:20,890 -process. As we discussed in the previous lesson, - -8 -00:00:20,890 --> 00:00:25,770 -the software development process contains fundamental activities, or phases. - -9 -00:00:25,770 --> 00:00:28,480 -Since we will discuss several processes, I'm going to remind - -10 -00:00:28,480 --> 00:00:31,150 -you what these phases are. We start with requirements - -11 -00:00:31,150 --> 00:00:33,630 -engineering, followed by design, - -12 -00:00:33,630 --> 00:00:36,980 -implementation, verification and validation, and - -13 -00:00:36,980 --> 00:00:40,950 -finally maintenance. Note that we will revisit each of - -14 -00:00:40,950 --> 00:00:43,940 -these phases and devote an entire lesson or more - -15 -00:00:43,940 --> 00:00:46,160 -to each phase. So what I want to do next - -16 -00:00:46,160 --> 00:00:48,210 -is simply to give you a quick overview of - -17 -00:00:48,210 --> 00:00:51,020 -what these phases are. Note also that for now - -18 -00:00:51,020 --> 00:00:54,330 -I will follow a very traditional take on these topics. Later on in the - -19 -00:00:54,330 --> 00:00:58,260 -class we will see how things can change and did change over the years. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/20 - Choosing a Model Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/20 - Choosing a Model Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 7ea0e4f..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/20 - Choosing a Model Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,860 -In this case, I think about the spiral model, - -2 -00:00:02,860 --> 00:00:06,610 -and evolutionary prototyping model will work. Definitely you don't want to - -3 -00:00:06,610 --> 00:00:09,110 -have a pure water from water. Why? Well because it - -4 -00:00:09,110 --> 00:00:11,940 -is very expensive with a pure waterfall model to make - -5 -00:00:11,940 --> 00:00:15,460 -changes during the course of the project, especially changes - -6 -00:00:15,460 --> 00:00:17,860 -that involve requirements. Why? Because we saw that it can - -7 -00:00:17,860 --> 00:00:20,440 -be very expensive. Whereas with the spiral model, we saw - -8 -00:00:20,440 --> 00:00:25,220 -that being iterative, we can actually make correction throughout development. - -9 -00:00:25,220 --> 00:00:28,840 -Similarly, with evolutionary prototyping, we keep evolving our system - -10 -00:00:28,840 --> 00:00:32,170 -based on the customer feedback. And therefore, if something changes, - -11 -00:00:32,170 --> 00:00:33,810 -we will get feedback right away, and we will - -12 -00:00:33,810 --> 00:00:36,230 -be able to adapt. So the key thing here is - -13 -00:00:36,230 --> 00:00:39,060 -that anything that is iterative works better in the - -14 -00:00:39,060 --> 00:00:43,400 -case of changing environments. So, situations in which your requirements, - -15 -00:00:43,400 --> 00:00:46,720 -the situation, the project might change. Whereas waterfall is - -16 -00:00:46,720 --> 00:00:50,410 -more appropriate for situations in which the requirements are stable, - -17 -00:00:50,410 --> 00:00:53,760 -we know the domain, and possibly we also know the technologies involved. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/21 - Lifecycle Documents - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/21 - Lifecycle Documents - lang_en_vs4.srt deleted file mode 100644 index 20e1102..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/21 - Lifecycle Documents - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,650 -Now that we discussed softer process models, there is - -2 -00:00:02,650 --> 00:00:05,100 -another important point I want to cover, because it's going to - -3 -00:00:05,100 --> 00:00:08,970 -be useful for your projects. Documenting the activities carried out - -4 -00:00:08,970 --> 00:00:11,660 -during the different phases of the softer lifecycle, is a - -5 -00:00:11,660 --> 00:00:14,960 -very important task. The documents that we produce are used - -6 -00:00:14,960 --> 00:00:18,270 -for different purposes, such as communicative details of the software - -7 -00:00:18,270 --> 00:00:21,650 -systems. To difference the colors, ensure the correct implementation of - -8 -00:00:21,650 --> 00:00:25,630 -the system, facilitate maintenance, and so on. There are standardized - -9 -00:00:25,630 --> 00:00:29,230 -document that are provided by IEEE that you can use - -10 -00:00:29,230 --> 00:00:32,680 -for this purpose. However, they're kind of heavyweight. So for the - -11 -00:00:32,680 --> 00:00:35,090 -project in this class, when we will need them, I will - -12 -00:00:35,090 --> 00:00:38,760 -rather use this lightweight documents. That we created by modifying the - -13 -00:00:38,760 --> 00:00:41,730 -original ones, and make them a little simpler. In this, - -14 -00:00:41,730 --> 00:00:44,700 -our documents are actually used, while teaching this class in the - -15 -00:00:44,700 --> 00:00:47,600 -past. So they're well tested and work well for the kind - -16 -00:00:47,600 --> 00:00:50,730 -of projects that we will perform. I provide information on how - -17 -00:00:50,730 --> 00:00:52,880 -to access these documents in the class notes. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/22 - Classic Mistakes: People - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/22 - Classic Mistakes: People - lang_en_vs4.srt deleted file mode 100644 index 7edb042..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/22 - Classic Mistakes: People - lang_en_vs4.srt +++ /dev/null @@ -1,163 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,000 -Now we get to the final part of the lesson. - -2 -00:00:02,000 --> 00:00:04,810 -And in this part I want to talk about well known, - -3 -00:00:04,810 --> 00:00:09,230 -ineffective development practices. These practices, when followed, tend to lead - -4 -00:00:09,230 --> 00:00:13,245 -to predictably bad results. So let's look at some examples of - -5 -00:00:13,245 --> 00:00:17,130 -these classic mistakes. And we're going to start with mistakes - -6 -00:00:17,130 --> 00:00:20,660 -involving people. And notice that there is a long list. So - -7 -00:00:20,660 --> 00:00:23,100 -I'm going to discuss just a few of those mistakes. - -8 -00:00:23,100 --> 00:00:25,215 -And I'm going to point you to more information on this - -9 -00:00:25,215 --> 00:00:27,550 -topic in the class notes. And some of these mistakes are - -10 -00:00:27,550 --> 00:00:30,020 -actually kind of entertaining. So I'll recommend that you look at - -11 -00:00:30,020 --> 00:00:33,210 -the class notes and go in more depth in this list. - -12 -00:00:33,210 --> 00:00:35,550 -So the first people mistake I want to mention is the - -13 -00:00:35,550 --> 00:00:38,945 -one that I define, heroics. And this refers to too much - -14 -00:00:38,945 --> 00:00:43,480 -emphasis on can do attitudes, so this idea that one person - -15 -00:00:43,480 --> 00:00:46,330 -by himself or by herself can do everything and can make - -16 -00:00:46,330 --> 00:00:50,422 -the difference in the whole project. And unfortunately, this encourages extreme - -17 -00:00:50,422 --> 00:00:53,950 -risk taking and discourages cooperation, which is plain bad for - -18 -00:00:53,950 --> 00:00:56,610 -the project. For example, it might force people not to - -19 -00:00:56,610 --> 00:00:59,600 -report schedule slips. It might force people to take on - -20 -00:00:59,600 --> 00:01:02,210 -on too much responsibility. And normally, and I saw it - -21 -00:01:02,210 --> 00:01:05,600 -happen many times, the final result is a failure. So - -22 -00:01:05,600 --> 00:01:08,410 -what you want when you're developing a larger project, is - -23 -00:01:08,410 --> 00:01:11,710 -actually to apply soft engineering principles. Have teams, have team - -24 -00:01:11,710 --> 00:01:15,580 -work, and have cooperation among the different team members, without pointing - -25 -00:01:15,580 --> 00:01:18,830 -too much on single individuals. Another classic mistake - -26 -00:01:18,830 --> 00:01:22,140 -is to not create the right working environment. We - -27 -00:01:22,140 --> 00:01:24,900 -all like to work in nice environments. And there - -28 -00:01:24,900 --> 00:01:27,790 -is strong evidence that the working environments can play - -29 -00:01:27,790 --> 00:01:30,670 -a big role in productivity. There is evidence - -30 -00:01:30,670 --> 00:01:34,280 -that productivity increases when the workplace is nice, quiet, - -31 -00:01:34,280 --> 00:01:37,950 -warm, and welcoming. Finally, some of the most important - -32 -00:01:37,950 --> 00:01:41,480 -people relating mistakes are due to poor people management. - -33 -00:01:41,480 --> 00:01:44,540 -For example, lack of leaderships, or leadership that is - -34 -00:01:44,540 --> 00:01:47,920 -exercised using the wrong means in the wrong way, which - -35 -00:01:47,920 --> 00:01:50,280 -can lead to very unhappy personnel and therefore, low - -36 -00:01:50,280 --> 00:01:54,190 -productivity, or even people leaving teams. Another classic example of - -37 -00:01:54,190 --> 00:01:57,370 -poor management is adding people to a project that - -38 -00:01:57,370 --> 00:02:01,600 -is behind schedule, which never works. Why it doesn't work? - -39 -00:02:01,600 --> 00:02:03,440 -Because these new people need to be brought up to - -40 -00:02:03,440 --> 00:02:06,520 -speed, and that causes further delays rather than improving the - -41 -00:02:06,520 --> 00:02:08,280 -situation with the project schedule. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/23 - Classic Mistakes: Process - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/23 - Classic Mistakes: Process - lang_en_vs4.srt deleted file mode 100644 index 83720a0..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/23 - Classic Mistakes: Process - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,080 --> 00:00:03,770 -Another type of classic mistakes are process-related mistakes. And also - -2 -00:00:03,770 --> 00:00:05,850 -in this case, these kind of mistakes can be due - -3 -00:00:05,850 --> 00:00:08,970 -to many reasons. And they are of many types. One - -4 -00:00:08,970 --> 00:00:12,310 -typical example are scheduling issues, which are due to the fact - -5 -00:00:12,310 --> 00:00:15,180 -of being unable to come up with a realistic schedule. - -6 -00:00:15,180 --> 00:00:17,750 -So to have an overly optimistic schedule. And this can be - -7 -00:00:17,750 --> 00:00:21,230 -because we underestimate the effort involved in different parts of - -8 -00:00:21,230 --> 00:00:25,010 -the project. Because we overestimate the ability of the people involved. - -9 -00:00:25,010 --> 00:00:27,600 -Because we overestimate the importance, for example, of the use - -10 -00:00:27,600 --> 00:00:29,640 -of tools. But no matter what the reason is, the - -11 -00:00:29,640 --> 00:00:32,840 -result is typically that the projects end up being late, - -12 -00:00:32,840 --> 00:00:35,580 -which is a very common situation. So this is somehow - -13 -00:00:35,580 --> 00:00:39,020 -related to planning. And in general, planning is a fundamental - -14 -00:00:39,020 --> 00:00:42,720 -factor in software processes and in software development. Mistakes in - -15 -00:00:42,720 --> 00:00:46,120 -planning, such as insufficient planning or abandoning planning due to - -16 -00:00:46,120 --> 00:00:50,190 -pressure, usually lead inexorably to failure. And speaking of failures, - -17 -00:00:50,190 --> 00:00:53,040 -often there are unforeseen failures. Such as - -18 -00:00:53,040 --> 00:00:55,410 -failures on the constructor's end, for example, - -19 -00:00:55,410 --> 00:00:56,920 -that might lead to low quality or - -20 -00:00:56,920 --> 00:01:00,580 -late deliverables, which ultimately affects the downstream activities. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/24 - Classic Mistakes: Product - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/24 - Classic Mistakes: Product - lang_en_vs4.srt deleted file mode 100644 index 24972d9..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/24 - Classic Mistakes: Product - lang_en_vs4.srt +++ /dev/null @@ -1,87 +0,0 @@ -1 -00:00:00,090 --> 00:00:01,970 -The third category of mistakes that I want to - -2 -00:00:01,970 --> 00:00:04,970 -mention is product-related mistakes. A - -3 -00:00:04,970 --> 00:00:07,360 -typical example of product-related mistake - -4 -00:00:07,360 --> 00:00:11,010 -is gold plating of requirements. And what that means is - -5 -00:00:11,010 --> 00:00:13,710 -basically is that it's very common for projects to have - -6 -00:00:13,710 --> 00:00:17,230 -more requirements than they actually need. For example, marketing might - -7 -00:00:17,230 --> 00:00:19,090 -want to add more features than the ones that are - -8 -00:00:19,090 --> 00:00:21,460 -actually needed by the users. And of course having more - -9 -00:00:21,460 --> 00:00:25,720 -requirements lengthens the project's schedule in a totally unnecessary way. - -10 -00:00:25,720 --> 00:00:29,250 -Feature creep is another common mistake and consists in - -11 -00:00:29,250 --> 00:00:32,140 -adding more and more features to a product that were - -12 -00:00:32,140 --> 00:00:34,650 -not initially planned and are not really needed in most - -13 -00:00:34,650 --> 00:00:38,360 -cases. And here there is evidence that the average project - -14 -00:00:38,360 --> 00:00:41,180 -experiences about a 25% growth in the number of - -15 -00:00:41,180 --> 00:00:44,330 -features over its lifetime which can clearly highly effect The - -16 -00:00:44,330 --> 00:00:47,580 -project schedule. Finally, if you're working on a project that - -17 -00:00:47,580 --> 00:00:50,760 -strains the limits of computer science. For example, because you - -18 -00:00:50,760 --> 00:00:53,350 -need to develop new algorithms for the project, or you have - -19 -00:00:53,350 --> 00:00:56,670 -to use new techniques. Then that project might be more research than - -20 -00:00:56,670 --> 00:00:58,450 -actual development. And therefore, it - -21 -00:00:58,450 --> 00:01:00,600 -should be managed accordingly. For example, - -22 -00:01:00,600 --> 00:01:03,910 -by taking into account that you will have a highly unpredictable schedule. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/25 - Classic Mistakes: Technology - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/25 - Classic Mistakes: Technology - lang_en_vs4.srt deleted file mode 100644 index 16810ac..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/25 - Classic Mistakes: Technology - lang_en_vs4.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,360 -The final type of classic mistakes that I want - -2 -00:00:02,360 --> 00:00:06,470 -to mention are technology related mistakes. One typical mistake - -3 -00:00:06,470 --> 00:00:09,990 -in this context is the silver-bullet syndrome. What does - -4 -00:00:09,990 --> 00:00:13,340 -that mean? Well, the silver-bullet syndrome refers to situations - -5 -00:00:13,340 --> 00:00:15,900 -in which there is too much reliance on the - -6 -00:00:15,900 --> 00:00:19,950 -advertised benefits of some previously unused technology. For example, - -7 -00:00:19,950 --> 00:00:21,980 -a new technology. And the problem here is that - -8 -00:00:21,980 --> 00:00:25,140 -we cannot expect technology alone to solve our software - -9 -00:00:25,140 --> 00:00:27,810 -development issues. So we should not rely too - -10 -00:00:27,810 --> 00:00:31,020 -much on technology alone. Another typical mistake is to - -11 -00:00:31,020 --> 00:00:33,700 -switch or add tools in the middle of - -12 -00:00:33,700 --> 00:00:36,010 -a project. And sometimes it can make sense to - -13 -00:00:36,010 --> 00:00:38,620 -upgrade a tool, but introducing new tools, which - -14 -00:00:38,620 --> 00:00:41,650 -can have a steep learning curve, has almost always - -15 -00:00:41,650 --> 00:00:46,290 -negative effects. Finally, a common unforgivable mistake is - -16 -00:00:46,290 --> 00:00:50,230 -the lack of an automated version control system for - -17 -00:00:50,230 --> 00:00:53,480 -your code and for your various artifacts. Manual and - -18 -00:00:53,480 --> 00:00:56,700 -ad hoc solutions are just not an option. It is - -19 -00:00:56,700 --> 00:00:59,270 -way too easy to make mistakes, use out of - -20 -00:00:59,270 --> 00:01:02,600 -date versions, be unable to find a previous working version, - -21 -00:01:02,600 --> 00:01:05,030 -and so on. I saw that happening many times, - -22 -00:01:05,030 --> 00:01:08,640 -and it always results in a disaster. So be warned, - -23 -00:01:08,640 --> 00:01:11,650 -use a version control system and an automated one. And - -24 -00:01:11,650 --> 00:01:14,750 -actually we will use version control systems in our projects. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/26 - Classic Mistakes Quiz - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/26 - Classic Mistakes Quiz - lang_en_vs4.srt deleted file mode 100644 index 2b4263f..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/26 - Classic Mistakes Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,23 +0,0 @@ -1 -00:00:00,060 --> 00:00:01,650 -To conclude this lesson, I'm going to have a - -2 -00:00:01,650 --> 00:00:03,650 -simple quiz and what I'm going to ask you - -3 -00:00:03,650 --> 00:00:07,950 -is, which kind of mistake adding people to a late project is? And you can pick - -4 -00:00:07,950 --> 00:00:10,540 -between a people mistake, a product mistake, a - -5 -00:00:10,540 --> 00:00:12,830 -technology mistake, or maybe this is not a - -6 -00:00:12,830 --> 00:00:16,800 -mistake at all, it is actually okay to add people to a project that is late. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/27 - Classic Mistakes Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/27 - Classic Mistakes Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 53c2485..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/27 - Classic Mistakes Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,060 --> 00:00:02,719 -You probably got this one right. The right answer is that - -2 -00:00:02,719 --> 00:00:05,330 -this is a people mistake. And despite the fact that this is - -3 -00:00:05,330 --> 00:00:07,550 -an easy answer, I just want to make sure to stress - -4 -00:00:07,550 --> 00:00:10,800 -once more. Because this is a very classic mistake. And one that - -5 -00:00:10,800 --> 00:00:14,070 -can have dire consequences. You should never add people, to a - -6 -00:00:14,070 --> 00:00:18,430 -late project. Because in 99.9% of the cases, that's only going to make - -7 -00:00:18,430 --> 00:00:21,390 -things worse. Why? Because these people have to be brought up to - -8 -00:00:21,390 --> 00:00:25,590 -speed, and also because having more also makes the communication more difficult, - -9 -00:00:25,590 --> 00:00:27,690 -the meetings more difficult and so on. So in - -10 -00:00:27,690 --> 00:00:29,980 -short, do not add people to a late project. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/3 - Requirements Engineering - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/3 - Requirements Engineering - lang_en_vs4.srt deleted file mode 100644 index c541e70..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/3 - Requirements Engineering - lang_en_vs4.srt +++ /dev/null @@ -1,175 +0,0 @@ -1 -00:00:00,230 --> 00:00:03,200 -So, let's start with requirements engineering, which is the - -2 -00:00:03,200 --> 00:00:06,560 -field within software engineering that deals with establishing the - -3 -00:00:06,560 --> 00:00:09,400 -needs of stakeholders that are to be solved by - -4 -00:00:09,400 --> 00:00:13,480 -the software. So why is this phase so important? - -5 -00:00:13,480 --> 00:00:16,350 -In general, the cost of correcting an error depends - -6 -00:00:16,350 --> 00:00:19,060 -on the number of subsequent decisions that are based - -7 -00:00:19,060 --> 00:00:22,160 -on it. Therefore, errors made in understanding requirements have - -8 -00:00:22,160 --> 00:00:25,670 -the potential for greatest cost because many other design decisions - -9 -00:00:25,670 --> 00:00:29,020 -depend on them and many other follow up decisions depend on them. - -10 -00:00:29,020 --> 00:00:31,510 -In fact, if we look at this diagram, which is again a - -11 -00:00:31,510 --> 00:00:35,210 -qualitative diagram, where we have the cost of error correction over the - -12 -00:00:35,210 --> 00:00:38,780 -phase in which the error is discovered. We can see that if we - -13 -00:00:38,780 --> 00:00:42,420 -discover an error in requirements it's going to cost us one. If - -14 -00:00:42,420 --> 00:00:45,020 -we find it in in design it's going to cost us five and - -15 -00:00:45,020 --> 00:00:47,410 -so on and so forth. And the cost grows dramatically as we - -16 -00:00:47,410 --> 00:00:50,960 -go from the requirements phase to the maintenance phase. Why? Because of course - -17 -00:00:50,960 --> 00:00:53,092 -if we discover a problem here we're left to undo a - -18 -00:00:53,092 --> 00:00:55,536 -lot of the decision that we had made before to correct the - -19 -00:00:55,536 --> 00:00:58,019 -error. Whereas if we find an error here we can correct it - -20 -00:00:58,019 --> 00:01:01,380 -right away and we don't affect the subsequent phases. So how can - -21 -00:01:01,380 --> 00:01:03,540 -we collect the right requirements. Traditional - -22 -00:01:03,540 --> 00:01:05,310 -requirements in engineering does so through - -23 -00:01:05,310 --> 00:01:08,930 -a set of steps. The first step is elicitation which is the - -24 -00:01:08,930 --> 00:01:12,840 -collection of requirements from stake holders and other sources and can be - -25 -00:01:12,840 --> 00:01:15,890 -done in a variety of ways, we will discuss some of them. - -26 -00:01:15,890 --> 00:01:19,280 -The second is requirement analysis which involved the study and - -27 -00:01:19,280 --> 00:01:23,200 -deeper understanding of the collective requirements. The third step is this - -28 -00:01:23,200 --> 00:01:26,760 -specification of requirements, in which the collective requirements are suitably - -29 -00:01:26,760 --> 00:01:30,730 -represented, organized and save so that they can be shared. Also - -30 -00:01:30,730 --> 00:01:32,530 -in his case, there are many ways to do this, - -31 -00:01:32,530 --> 00:01:34,350 -and we will see some of this ways when we talk - -32 -00:01:34,350 --> 00:01:37,550 -about the requirements engineering in the dedicated lesson. Once the - -33 -00:01:37,550 --> 00:01:40,970 -requirements have been specified, they can be validated to make sure - -34 -00:01:40,970 --> 00:01:44,420 -that they're complete, consistent, no redundant and so on. So - -35 -00:01:44,420 --> 00:01:48,460 -that they've satisfied a set of importance properties, for requirements. - -36 -00:01:48,460 --> 00:01:52,410 -Finally, the fifth step is requirements management which accounts for - -37 -00:01:52,410 --> 00:01:56,100 -changes to requirements during the lifetime of the project. And here - -38 -00:01:56,100 --> 00:01:58,330 -I talked about steps, kind of giving the impression that - -39 -00:01:58,330 --> 00:02:01,310 -we're just going from the first step to the fifth one - -40 -00:02:01,310 --> 00:02:03,300 -and that this is sort of a linear process. In - -41 -00:02:03,300 --> 00:02:05,990 -reality, as we will see, this is more of an iterative - -42 -00:02:05,990 --> 00:02:09,690 -process in which will go and cover the different phases in an - -43 -00:02:09,690 --> 00:02:12,560 -iterative fashion. We will discuss extensively - -44 -00:02:12,560 --> 00:02:15,453 -requirements engineering in our second mini-course. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/4 - Design - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/4 - Design - lang_en_vs4.srt deleted file mode 100644 index 5ddb4d1..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/4 - Design - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,290 --> 00:00:02,900 -Now let's discuss the next phase of software development, - -2 -00:00:02,900 --> 00:00:06,080 -which is software design. Software design is the phase - -3 -00:00:06,080 --> 00:00:09,030 -where software requirements are analyzed in order to produce - -4 -00:00:09,030 --> 00:00:11,500 -a description of the internal structure and organization of - -5 -00:00:11,500 --> 00:00:13,900 -the system. And this description will serve as the - -6 -00:00:13,900 --> 00:00:17,550 -basis for the construction of the actual system. Traditionally, - -7 -00:00:17,550 --> 00:00:20,020 -the software design phase consists of a series of - -8 -00:00:20,020 --> 00:00:25,360 -design activities. Which normally consists of the architectural design phase, - -9 -00:00:25,360 --> 00:00:27,880 -the abstract specification, interface design, - -10 -00:00:27,880 --> 00:00:30,010 -component design, data structure and - -11 -00:00:30,010 --> 00:00:33,230 -algorithm design. And notice that this is just a possible list - -12 -00:00:33,230 --> 00:00:35,820 -of activities. But you can also characterize design activities in - -13 -00:00:35,820 --> 00:00:38,550 -many different ways. And if you're looking at different books, and - -14 -00:00:38,550 --> 00:00:41,800 -different sources, you might find different activities described. But the - -15 -00:00:41,800 --> 00:00:44,500 -core idea, the important point is that we go from sort - -16 -00:00:44,500 --> 00:00:46,940 -of a high-level view of the system, which is the - -17 -00:00:46,940 --> 00:00:50,770 -architectural design, to a low-level view, which is the algorithm design. - -18 -00:00:50,770 --> 00:00:53,100 -And these activities result in a set of design - -19 -00:00:53,100 --> 00:00:56,810 -products, which describe various characteristics of the system. For - -20 -00:00:56,810 --> 00:00:59,770 -example, they describe the architecture of the system, so - -21 -00:00:59,770 --> 00:01:02,890 -how the system is decomposed and organized into components, the - -22 -00:01:02,890 --> 00:01:06,630 -interfaces between these components. They also describe these components - -23 -00:01:06,630 --> 00:01:09,030 -into a level of details that is suitable for - -24 -00:01:09,030 --> 00:01:12,470 -allowing their construction. We will discuss the details of - -25 -00:01:12,470 --> 00:01:16,130 -software design and talk extensively about these different actives and - -26 -00:01:16,130 --> 00:01:19,200 -these different products in the third mini course of this class. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/5 - Implementation - lang_en_vs5.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/5 - Implementation - lang_en_vs5.srt deleted file mode 100644 index 465ae1b..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/5 - Implementation - lang_en_vs5.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,719 -After we have designed our system we can implement - -2 -00:00:02,719 --> 00:00:05,900 -it. In the implementation phase what we do is basically - -3 -00:00:05,900 --> 00:00:08,410 -taking care of realizing the design of the system - -4 -00:00:08,410 --> 00:00:11,920 -that we just created and create an actual software system. - -5 -00:00:11,920 --> 00:00:15,530 -There are four fundamental principles, four pillars that can - -6 -00:00:15,530 --> 00:00:18,470 -affect the way in which software is constructed. The first - -7 -00:00:18,470 --> 00:00:21,900 -one is the reduction of complexity. This aims to build - -8 -00:00:21,900 --> 00:00:25,160 -software that is easier to understand and use. The second - -9 -00:00:25,160 --> 00:00:28,400 -pillar is the anticipation of diversity. Which takes into - -10 -00:00:28,400 --> 00:00:31,720 -account that software construction might change in various way over - -11 -00:00:31,720 --> 00:00:35,220 -time. That is that software evolves. In many cases, - -12 -00:00:35,220 --> 00:00:38,270 -it evolves in unexpected ways. And therefore, we have to - -13 -00:00:38,270 --> 00:00:41,680 -be able to anticipate some of these changes. The - -14 -00:00:41,680 --> 00:00:45,390 -third pillar is the structuring for validation. Also called design - -15 -00:00:45,390 --> 00:00:47,550 -for testability. And what this means is that we - -16 -00:00:47,550 --> 00:00:50,760 -want to build software so that it is easily testable - -17 -00:00:50,760 --> 00:00:54,890 -during the subsequent validation and verification activities. Finally, and - -18 -00:00:54,890 --> 00:00:58,040 -this is especially true within specific organizations and or - -19 -00:00:58,040 --> 00:01:00,770 -domains. It is important that the software conforms to - -20 -00:01:00,770 --> 00:01:04,330 -a set of internal or external standards. And some examples - -21 -00:01:04,330 --> 00:01:06,730 -of this might be, for example, for internal standards, - -22 -00:01:06,730 --> 00:01:10,680 -coding standards within an organization, or naming standards within an - -23 -00:01:10,680 --> 00:01:13,320 -organization. As for external standards, if for example you - -24 -00:01:13,320 --> 00:01:15,780 -are developing some medical software. There are some regulations and - -25 -00:01:15,780 --> 00:01:17,930 -some standards that you have to adhere to in - -26 -00:01:17,930 --> 00:01:20,060 -order for your software to be valid in that domain. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/6 - Verification & Validation - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/6 - Verification & Validation - lang_en_vs4.srt deleted file mode 100644 index df504a2..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/6 - Verification & Validation - lang_en_vs4.srt +++ /dev/null @@ -1,123 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,550 -After we have built our system, verification and validation - -2 -00:00:03,550 --> 00:00:05,970 -is that phase of software development that aims to - -3 -00:00:05,970 --> 00:00:09,000 -check that the software system meets its specification and - -4 -00:00:09,000 --> 00:00:12,800 -fulfills its intended purpose. More precisely, we can look - -5 -00:00:12,800 --> 00:00:16,250 -at verification and validation independently. And validation is the - -6 -00:00:16,250 --> 00:00:19,100 -activity that answers the question did we build the - -7 -00:00:19,100 --> 00:00:21,420 -right system. Did we build the system that the - -8 -00:00:21,420 --> 00:00:26,030 -customer wants? That will make the customer happy. Whereas verification - -9 -00:00:26,030 --> 00:00:28,730 -answers a different question which is did we build the system - -10 -00:00:28,730 --> 00:00:31,410 -right. So given a description of the system that is the one - -11 -00:00:31,410 --> 00:00:34,280 -that we derived from the customer through the collection of requirements - -12 -00:00:34,280 --> 00:00:37,130 -and then design and so on, did we build a system that - -13 -00:00:37,130 --> 00:00:41,150 -actually implements the specification that we defined? And when we look - -14 -00:00:41,150 --> 00:00:44,600 -at verification there's many, many ways of doing verification and in fact - -15 -00:00:44,600 --> 00:00:48,430 -in the mini course number four we will cover verification extensively. The - -16 -00:00:48,430 --> 00:00:51,100 -only thing I want to mention here is the fact that verification - -17 -00:00:51,100 --> 00:00:54,110 -can be performed at different levels. In particular, it can be - -18 -00:00:54,110 --> 00:00:57,810 -performed at the unit level in which we test that the individual - -19 -00:00:57,810 --> 00:01:01,520 -units work as a expected. Can be performed in the integration level - -20 -00:01:01,520 --> 00:01:05,525 -in which what we test is the interaction between the different units. - -21 -00:01:05,525 --> 00:01:07,630 -So we want to make sure that the different modules talk - -22 -00:01:07,630 --> 00:01:10,720 -to each other in the right way. And finally, there is system - -23 -00:01:10,720 --> 00:01:13,440 -testing in which we test the system as a whole and we - -24 -00:01:13,440 --> 00:01:16,170 -want to make sure that all the system, all the different pieces - -25 -00:01:16,170 --> 00:01:18,010 -of the system work together in the right - -26 -00:01:18,010 --> 00:01:20,160 -way. And this is also the level at which - -27 -00:01:20,160 --> 00:01:22,360 -then we will apply validation and some other - -28 -00:01:22,360 --> 00:01:25,770 -testing techniques like stress testing or robustness testing and - -29 -00:01:25,770 --> 00:01:29,890 -so on. And as I said I'm not going to say anything more on this topic because - -30 -00:01:29,890 --> 00:01:32,760 -we will cover verification, and validation, and testing in - -31 -00:01:32,760 --> 00:01:35,667 -particular in great details in mini course number four. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/7 - Maintenance - lang_en_vs5.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/7 - Maintenance - lang_en_vs5.srt deleted file mode 100644 index e3d95bf..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/7 - Maintenance - lang_en_vs5.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,012 --> 00:00:03,482 -As we discussed before software development efforts normally result - -2 -00:00:03,482 --> 00:00:06,127 -in the delivery of a software product that satisfies - -3 -00:00:06,127 --> 00:00:09,879 -the user requirements. So normally our software development organization - -4 -00:00:09,879 --> 00:00:13,127 -will release this application to its final users, however, once - -5 -00:00:13,127 --> 00:00:16,090 -the software is in operation many things can happen. - -6 -00:00:16,090 --> 00:00:18,950 -So, for example, the environment might change. There might be - -7 -00:00:18,950 --> 00:00:21,940 -new libraries. There might be new systems in which - -8 -00:00:21,940 --> 00:00:25,070 -our software has to operate. Or they may be future - -9 -00:00:25,070 --> 00:00:27,950 -requests, so the users may find out that, guess what, - -10 -00:00:27,950 --> 00:00:30,370 -they want to do something different with the problem that - -11 -00:00:30,370 --> 00:00:32,835 -we gave them. Or, again, and this is one of - -12 -00:00:32,835 --> 00:00:35,970 -the most common occurrences, users might find problems with the - -13 -00:00:35,970 --> 00:00:38,307 -software and may file bug reports and send the bug - -14 -00:00:38,307 --> 00:00:42,090 -reports back to the software developer. These are the reasons - -15 -00:00:42,090 --> 00:00:46,420 -why software maintenance is a necessary phase in software development. - -16 -00:00:46,420 --> 00:00:50,190 -Software maintenance is the activity that sustains the software product - -17 -00:00:50,190 --> 00:00:53,780 -as it evolves throughout its life cycle, specifically - -18 -00:00:53,780 --> 00:00:57,350 -in response to bug reports, feature requests and - -19 -00:00:57,350 --> 00:01:00,890 -environment changes. Development organisations perform three kinds of - -20 -00:01:00,890 --> 00:01:04,450 -maintenance activities: corrective maintenance to eliminate problems with the - -21 -00:01:04,450 --> 00:01:07,740 -code, perfective maintenance to accommodate feature request, and - -22 -00:01:07,740 --> 00:01:09,730 -in some cases just to improve the software, for - -23 -00:01:09,730 --> 00:01:12,230 -example, to make it more efficient, and finally, - -24 -00:01:12,230 --> 00:01:15,650 -adaptive maintenance, to take care of the environment changes. - -25 -00:01:15,650 --> 00:01:18,470 -And after this activities have been performed, the software developer - -26 -00:01:18,470 --> 00:01:21,540 -will produce a new version of the application, will release it - -27 -00:01:21,540 --> 00:01:24,150 -and the cycle will continue through out the lifetime of - -28 -00:01:24,150 --> 00:01:27,440 -the software. That's why maintenance is a fundamental activity and a - -29 -00:01:27,440 --> 00:01:30,420 -very expensive one. And one of the reasons why maintenance - -30 -00:01:30,420 --> 00:01:34,080 -is expensive, that I want to mention now, is regression testing. - -31 -00:01:34,080 --> 00:01:37,180 -During maintenance every time you modify your application you have - -32 -00:01:37,180 --> 00:01:41,120 -to regression test the application, where regression testing is the activity - -33 -00:01:41,120 --> 00:01:44,010 -of retesting software after it has been modified to make sure - -34 -00:01:44,010 --> 00:01:47,320 -that the changes you perform to the software work as expected, - -35 -00:01:47,320 --> 00:01:51,540 -and that your changes did not introduce any unforseen effect. I'm - -36 -00:01:51,540 --> 00:01:53,630 -pretty sure that you're familiar with the case of a new - -37 -00:01:53,630 --> 00:01:56,000 -version of the software being released and just a couple of - -38 -00:01:56,000 --> 00:01:59,260 -days later another version being released to fix some problems that - -39 -00:01:59,260 --> 00:02:02,000 -occor with the new version. These problems is what we call - -40 -00:02:02,000 --> 00:02:04,640 -regression errors and they're what regression - -41 -00:02:04,640 --> 00:02:06,560 -testing targets and tries to eliminate - -42 -00:02:06,560 --> 00:02:09,240 -before the new version of the software is released into the world. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/8 - Software Phases Quiz - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/8 - Software Phases Quiz - lang_en_vs4.srt deleted file mode 100644 index e3fe74b..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/8 - Software Phases Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,590 -Okay. Now before we jump into the next - -2 -00:00:02,590 --> 00:00:04,780 -topic, I just want to take a very quick and - -3 -00:00:04,780 --> 00:00:06,630 -simple quiz just to make sure that you - -4 -00:00:06,630 --> 00:00:09,236 -guys paid attention to what I just discussed. So - -5 -00:00:09,236 --> 00:00:10,820 -I want to ask you what are the traditional - -6 -00:00:10,820 --> 00:00:13,200 -software phases. Requirements engineering, - -7 -00:00:13,200 --> 00:00:16,079 -design, abstraction, implementation, verification and - -8 -00:00:16,079 --> 00:00:18,020 -validation. Or maybe design, - -9 -00:00:18,020 --> 00:00:20,830 -optimization, implementation verification and validation - -10 -00:00:20,830 --> 00:00:22,448 -and maintenance. Or requirements - -11 -00:00:22,448 --> 00:00:24,892 -engineering, design, implementation, verification and - -12 -00:00:24,892 --> 00:00:26,290 -validation, and maintenance. diff --git a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/9 - Software Phases Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/9 - Software Phases Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index ecb7a35..0000000 --- a/usth/ICT2.7/P1L2 Life Cycle Models Subtitles/9 - Software Phases Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,190 --> 00:00:04,000 -And the answer is the third one. The traditional software phases which are the - -2 -00:00:04,000 --> 00:00:05,960 -ones that we just discussed are requirements - -3 -00:00:05,960 --> 00:00:08,820 -engineering, design, implementation, verification - -4 -00:00:08,820 --> 00:00:10,630 -and validation, and maintenance. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/1 - Lesson Overview - lang_en_vs5.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/1 - Lesson Overview - lang_en_vs5.srt deleted file mode 100644 index afc573d..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/1 - Lesson Overview - lang_en_vs5.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,650 --> 00:00:07,470 -Hi, and welcome to the first of several lessons on tools of the trade. I'm - -2 -00:00:07,470 --> 00:00:12,200 -very excited about these lessons, because I believe that tools are a cornerstone - -3 -00:00:12,200 --> 00:00:14,390 -of the software engineering discipline, and it - -4 -00:00:14,390 --> 00:00:17,570 -is of paramount importance to know and - -5 -00:00:17,570 --> 00:00:20,330 -use them. In this lesson, we will - -6 -00:00:20,330 --> 00:00:25,530 -talk about integrated development environments, normally called IDEs. - -7 -00:00:25,530 --> 00:00:29,780 -And these are software applications that support developers in many of their - -8 -00:00:29,780 --> 00:00:36,870 -everyday tasks, such as writing, compiling, and debugging code. And to make the - -9 -00:00:36,870 --> 00:00:42,470 -discussion more concrete we will focus on a specific IDE, Eclipse. We will - -10 -00:00:42,470 --> 00:00:47,250 -first present Eclipse, and then get some hands-on experience through a demo. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/2 - Eclipse Introduction - lang_en_vs5.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/2 - Eclipse Introduction - lang_en_vs5.srt deleted file mode 100644 index 1d0ff56..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/2 - Eclipse Introduction - lang_en_vs5.srt +++ /dev/null @@ -1,91 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,750 -As I just told you, tools are fundamental in - -2 -00:00:02,750 --> 00:00:06,050 -software engineering. And I will stress this concept over and - -3 -00:00:06,050 --> 00:00:08,240 -over, throughout the class. And today we're going to talk - -4 -00:00:08,240 --> 00:00:11,310 -about a tool that is especially important, which is integrated - -5 -00:00:11,310 --> 00:00:15,060 -development environments, or IDEs. And you're probably familiar with - -6 -00:00:15,060 --> 00:00:18,060 -IDEs. So IDEs are environments that give you support for - -7 -00:00:18,060 --> 00:00:21,580 -your development activities. For example, for writing code, editing code, - -8 -00:00:21,580 --> 00:00:25,320 -compiling code, and so on. And we will focus specifically - -9 -00:00:25,320 --> 00:00:28,890 -on one particular IDE, which is called Eclipse. And - -10 -00:00:28,890 --> 00:00:31,450 -what I'm showing here is the two splash screens for - -11 -00:00:31,450 --> 00:00:35,350 -two versions of eclipse, Helios and Kepler. Eclipse is an - -12 -00:00:35,350 --> 00:00:39,200 -open, extensible development environment that was initially created by IBM - -13 -00:00:39,200 --> 00:00:41,510 -and is now managed by the Eclipse Foundation. And of - -14 -00:00:41,510 --> 00:00:43,840 -course, there are many other great IDEs such as for - -15 -00:00:43,840 --> 00:00:47,310 -example, Microsoft Visual Studio or Netbeans. We will be using - -16 -00:00:47,310 --> 00:00:50,830 -Eclipse because it is open and because it is multi-platform, - -17 -00:00:50,830 --> 00:00:52,390 -which means that you can use Eclipse - -18 -00:00:52,390 --> 00:00:55,140 -no matter what operating system we're using. - -19 -00:00:55,140 --> 00:00:59,030 -So if we consider the most commonly used operating system, such as Mac - -20 -00:00:59,030 --> 00:01:02,780 -OS, Windows, Linux, Eclipse runs on any - -21 -00:01:02,780 --> 00:01:04,769 -of these environments. Therefore, no matter what - -22 -00:01:04,769 --> 00:01:06,490 -you're using, you'll be able to install - -23 -00:01:06,490 --> 00:01:08,560 -Eclipse, run Eclipse, and follow the class. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/3 - IDE Overview - lang_en_vs6.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/3 - IDE Overview - lang_en_vs6.srt deleted file mode 100644 index e2b63b3..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/3 - IDE Overview - lang_en_vs6.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,130 --> 00:00:05,680 -So, now let's look in a little more detail to what is an IDE. An IDE is a - -2 -00:00:05,680 --> 00:00:09,790 -software application that supports software developers in many of - -3 -00:00:09,790 --> 00:00:13,840 -their everyday tasks. It has many useful features. Most IDEs - -4 -00:00:13,840 --> 00:00:16,790 -provide views that can be used to navigate, project - -5 -00:00:16,790 --> 00:00:20,140 -resources from different perspectives. For example, you might want to - -6 -00:00:20,140 --> 00:00:22,390 -look at your code differently when you're writing code, - -7 -00:00:22,390 --> 00:00:25,950 -and when you're debugging. They also normally provide an intelligent - -8 -00:00:25,950 --> 00:00:29,380 -source code editor. For example, an editor that will allow you - -9 -00:00:29,380 --> 00:00:32,110 -to browse the documentation when you're writing a code that - -10 -00:00:32,110 --> 00:00:35,780 -uses a specific method, or that will give you autocompletion when - -11 -00:00:35,780 --> 00:00:37,990 -you start writing the name of an object and you want to - -12 -00:00:37,990 --> 00:00:40,820 -get the methods for that object. And all of these things - -13 -00:00:40,820 --> 00:00:43,420 -can be very useful while you're developing and can save you a - -14 -00:00:43,420 --> 00:00:47,750 -lot of time. Modern IDE's will also normally give you support for - -15 -00:00:47,750 --> 00:00:49,540 -version control systems that then you - -16 -00:00:49,540 --> 00:00:52,490 -can use for softer configuration management. - -17 -00:00:52,490 --> 00:00:55,720 -And we're going to discuss in detail version control systems in - -18 -00:00:55,720 --> 00:00:58,380 -the next tools of the trade lesson, and we're also - -19 -00:00:58,380 --> 00:01:01,135 -going to see how it can be integrated within an IDE. - -20 -00:01:01,135 --> 00:01:04,730 -IDEs also give you builders so they give you build automation - -21 -00:01:04,730 --> 00:01:08,070 -tools, they give you runtime support. So that you can - -22 -00:01:08,070 --> 00:01:10,960 -run your projects from within the IDE and, for example, - -23 -00:01:10,960 --> 00:01:14,550 -observe some aspects of the execution. In addition to giving - -24 -00:01:14,550 --> 00:01:17,562 -you support for the runtime, they give you support for testing. - -25 -00:01:17,562 --> 00:01:21,267 -Many IDEs allow you to run tests from within - -26 -00:01:21,267 --> 00:01:23,520 -the IDE and to check the results of the tests - -27 -00:01:23,520 --> 00:01:26,300 -from within the IDE. Not only that. Normally, after you - -28 -00:01:26,300 --> 00:01:28,210 -run your tests, if there are some test cases that - -29 -00:01:28,210 --> 00:01:31,500 -fail, you can also use your IDEs to do debugging. - -30 -00:01:31,500 --> 00:01:35,620 -Many IDEs include graphical debuggers. Debuggers will allow you to - -31 -00:01:35,620 --> 00:01:39,400 -navigate through the code, set which points, stop and restart - -32 -00:01:39,400 --> 00:01:43,160 -the execution. Inspect variables, and do all of the activities - -33 -00:01:43,160 --> 00:01:46,320 -that help debugging. And, to help you be more efficient - -34 -00:01:46,320 --> 00:01:49,440 -and more effective when you do debugging. And into addition to - -35 -00:01:49,440 --> 00:01:52,760 -all these features that are listed here IDEs can normally provide - -36 -00:01:52,760 --> 00:01:56,650 -you even more features through a mechanishm that is called plugins. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/4 - Plug-Ins - lang_en_vs5.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/4 - Plug-Ins - lang_en_vs5.srt deleted file mode 100644 index 040293e..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/4 - Plug-Ins - lang_en_vs5.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,134 -In fact most IDEs are extensible through the use of - -2 -00:00:03,134 --> 00:00:06,158 -plug-ins. And by the way, note that plug-ins might be - -3 -00:00:06,158 --> 00:00:09,326 -called differently on different platforms. For example, if you're using - -4 -00:00:09,326 --> 00:00:12,970 -a Microsoft Visual Studio, plug-ins are normally called add-ins, but - -5 -00:00:12,970 --> 00:00:15,598 -the concept is more or less the same. So, what - -6 -00:00:15,598 --> 00:00:18,555 -is a plug-in? Well, let's imagine our IDE to be - -7 -00:00:18,555 --> 00:00:22,320 -this box. A plug-in is additional functionality that you can - -8 -00:00:22,320 --> 00:00:25,430 -actually plug into this box so that this box starts - -9 -00:00:25,430 --> 00:00:28,830 -offering more features to the user. For example, you - -10 -00:00:28,830 --> 00:00:32,850 -can add to Eclipse the Checkstyle plug-in. Which, paraphrasing the - -11 -00:00:32,850 --> 00:00:35,950 -Checkstyle website, helps you ensure that your Java code - -12 -00:00:35,950 --> 00:00:38,890 -complies with a set of coding standards by inspecting the - -13 -00:00:38,890 --> 00:00:41,690 -code and pointing out items that deviate from a - -14 -00:00:41,690 --> 00:00:44,870 -defined set of coding rules. Again, this is a functionality - -15 -00:00:44,870 --> 00:00:47,330 -the core of Eclipse doesn't have. You can add - -16 -00:00:47,330 --> 00:00:50,600 -the Checkstyle plug-in, and this functionality will become available in - -17 -00:00:50,600 --> 00:00:54,840 -the IDE. Another example of plug-in is the EGit plug-in which - -18 -00:00:54,840 --> 00:00:58,660 -adds support for the Git version control system in Eclipse. And - -19 -00:00:58,660 --> 00:01:01,290 -actually this is something that we'll cover in detail, we'll have - -20 -00:01:01,290 --> 00:01:04,150 -a demo, and we will actually use it throughout the class, so - -21 -00:01:04,150 --> 00:01:07,018 -I'm not going to say anything more about the EGit plug-in for - -22 -00:01:07,018 --> 00:01:09,300 -now. But again, what the plug-in will do is to add - -23 -00:01:09,300 --> 00:01:13,220 -the Git functionality to Eclipse. A functionality that is not in - -24 -00:01:13,220 --> 00:01:16,110 -the core of Eclipse and that is available to the user after - -25 -00:01:16,110 --> 00:01:17,181 -you add the plug-in. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/5 - Eclipse Demo: Create Java Project - lang_en_vs5.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/5 - Eclipse Demo: Create Java Project - lang_en_vs5.srt deleted file mode 100644 index 8788858..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/5 - Eclipse Demo: Create Java Project - lang_en_vs5.srt +++ /dev/null @@ -1,323 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,550 -In the rest of this lesson we're going to look at eclipse and - -2 -00:00:02,550 --> 00:00:05,290 -try to get more familiar with eclipse in a hands on manner - -3 -00:00:05,290 --> 00:00:07,550 -through a demo. In the demo we will cover some of the - -4 -00:00:07,550 --> 00:00:11,040 -basic aspects of eclipse like how to run eclipse, how to select - -5 -00:00:11,040 --> 00:00:14,400 -their workspace, how to create a project, how to create the class - -6 -00:00:14,400 --> 00:00:18,240 -within the project and so on. I'll also cover some more advanced - -7 -00:00:18,240 --> 00:00:21,610 -aspects, like how to create builders, run your project within Eclipse, and - -8 -00:00:21,610 --> 00:00:25,800 -how to use their Eclipse debugger. So let's get to the demo. - -9 -00:00:25,800 --> 00:00:28,220 -So let's start Eclipse. Eclipse is going to ask me - -10 -00:00:28,220 --> 00:00:31,600 -for the location of my workspace and in this - -11 -00:00:31,600 --> 00:00:34,530 -case, I selected a suitable directory and you can - -12 -00:00:34,530 --> 00:00:38,480 -also use that checkbox on the left to avoid Eclipse - -13 -00:00:38,480 --> 00:00:40,640 -for asking you again about where to put the - -14 -00:00:40,640 --> 00:00:43,860 -workspace. And the workspace is basically the place the - -15 -00:00:43,860 --> 00:00:48,310 -directory. Where, Eclipse will place all of your projects. - -16 -00:00:48,310 --> 00:00:50,830 -So, now when you start Eclipse, if it's the first - -17 -00:00:50,830 --> 00:00:53,480 -time you might get this Welcome screen. It's not going to happen - -18 -00:00:53,480 --> 00:00:57,500 -again on subsequent executions, but I just wanted to make sure - -19 -00:00:57,500 --> 00:01:00,210 -that I covered all the bases. And so, whatcha want to - -20 -00:01:00,210 --> 00:01:03,360 -do here is to basically go to the java perspective - -21 -00:01:03,360 --> 00:01:06,760 -which you can do by clicking over there or you can - -22 -00:01:06,760 --> 00:01:09,240 -also use the menus. So in this case we will have - -23 -00:01:09,240 --> 00:01:12,810 -to go to Window, open Perspective, and if the Perspective is - -24 -00:01:12,810 --> 00:01:15,660 -not here, you'll have to click on Other. And at this point, - -25 -00:01:15,660 --> 00:01:18,030 -that you can click on Java Perspective, then you - -26 -00:01:18,030 --> 00:01:21,680 -click okay. And the perspective is basically, the visual work - -27 -00:01:21,680 --> 00:01:24,810 -space where you will be operating. So, after we selected - -28 -00:01:24,810 --> 00:01:29,350 -perspective, we can actually close the welcome screen. And here, - -29 -00:01:29,350 --> 00:01:32,000 -you see that you have this different areas and on - -30 -00:01:32,000 --> 00:01:34,930 -the left You have the package explorer. This is the - -31 -00:01:34,930 --> 00:01:37,650 -area where your packages will be, you've got a task list, - -32 -00:01:37,650 --> 00:01:41,280 -and an outline on the right which we'll cover later. - -33 -00:01:41,280 --> 00:01:44,870 -And then you have underneath, the bottom, a problems, java - -34 -00:01:44,870 --> 00:01:48,330 -doc and declaration views and we will see some of - -35 -00:01:48,330 --> 00:01:51,320 -these views in actions later. And here in the center - -36 -00:01:51,320 --> 00:01:54,290 -you have the area. Which is called a code editor, - -37 -00:01:54,290 --> 00:01:58,360 -which is where you'll be writing, editing, and modifying, basically, - -38 -00:01:58,360 --> 00:02:00,440 -your code. This is where most of the action takes - -39 -00:02:00,440 --> 00:02:03,140 -place. So let's start by creating a Java project. And - -40 -00:02:03,140 --> 00:02:06,950 -to do that we can use either the context menu, or - -41 -00:02:06,950 --> 00:02:09,560 -you can just use the menu, select new Java project. - -42 -00:02:09,560 --> 00:02:12,390 -You'll be greeted by this, wizard, and. And at this - -43 -00:02:12,390 --> 00:02:15,500 -point in the wizard, you can select the name of - -44 -00:02:15,500 --> 00:02:19,100 -your project. I'm just going to call it a very simple way - -45 -00:02:19,100 --> 00:02:21,990 -my project. And I going to use the default location for - -46 -00:02:21,990 --> 00:02:24,070 -the project, as you can see it will be placed - -47 -00:02:24,070 --> 00:02:27,440 -in the work space that I selected before. I'm going to - -48 -00:02:27,440 --> 00:02:32,080 -also use the default. Java Runtime Environment, which is Java 1.7 - -49 -00:02:32,080 --> 00:02:36,250 -in this case. I'm going to keep the selected default layout - -50 -00:02:36,250 --> 00:02:39,120 -and the, then I'm going to go to the next step. Here, - -51 -00:02:39,120 --> 00:02:42,380 -we're first presented with the location of the source code for - -52 -00:02:42,380 --> 00:02:46,840 -our project. The default is a directory SRC in my project - -53 -00:02:46,840 --> 00:02:49,320 -and for the output file, the directory bin. So repeat, we're now - -54 -00:02:49,320 --> 00:02:52,410 -going to change that. Here in case you need other projects to - -55 -00:02:52,410 --> 00:02:55,240 -build your own, then you can specify them here. Here we - -56 -00:02:55,240 --> 00:02:57,570 -are building a simple project, so there's no need for that. - -57 -00:02:57,570 --> 00:03:00,890 -And here we can specify which libraries our project requires. As - -58 -00:03:00,890 --> 00:03:03,880 -you can see, the Java library's already specified. And you can - -59 -00:03:03,880 --> 00:03:07,840 -also add other jars, which can even be External jars. And - -60 -00:03:07,840 --> 00:03:11,840 -finally this is the tab that allows you to specify which - -61 -00:03:11,840 --> 00:03:14,300 -part of you project. So how your project will be exported, - -62 -00:03:14,300 --> 00:03:16,760 -so lets not worry about that for now. Lets click finish. - -63 -00:03:16,760 --> 00:03:19,300 -And as you can see here on the package explorer, my - -64 -00:03:19,300 --> 00:03:22,920 -project appeared. So now we can open the project by clicking - -65 -00:03:22,920 --> 00:03:24,920 -on the triangle right next to it, and as you can - -66 -00:03:24,920 --> 00:03:28,250 -see there is the SRC directory, where my source code will go, - -67 -00:03:28,250 --> 00:03:31,760 -and there's also an indication that we're using the JRE, so that's - -68 -00:03:31,760 --> 00:03:35,800 -the Java system directory within our project. And this is just for people - -69 -00:03:35,800 --> 00:03:38,860 -who are interested in what happens you know, under the hood. So - -70 -00:03:38,860 --> 00:03:41,840 -if you don't care about that, you can just skip this part. So - -71 -00:03:41,840 --> 00:03:45,200 -basically here I'm showing you how we can go to the directory - -72 -00:03:45,200 --> 00:03:49,250 -where the project was created. We can see the bin and src directories. - -73 -00:03:49,250 --> 00:03:52,020 -And there's also some other files here that you can - -74 -00:03:52,020 --> 00:03:54,780 -see these 'dot' files that you will not normally, see. And - -75 -00:03:54,780 --> 00:03:57,870 -those are kind of bookkeeping files. So these are files that - -76 -00:03:57,870 --> 00:04:02,280 -contain information about your project and that are created automatically by - -77 -00:04:02,280 --> 00:04:05,860 -Eclipse. And, for example, will have various indication about the - -78 -00:04:05,860 --> 00:04:09,580 -configuration of the project, some settings and the class path for - -79 -00:04:09,580 --> 00:04:11,880 -the project. And, as I said, you don't have to worry - -80 -00:04:11,880 --> 00:04:14,490 -about this if you just want to go Eclipse as you're never - -81 -00:04:14,490 --> 00:04:16,551 -going to mess with the command line. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/6 - Eclipse Demo: Create a Class - lang_en_vs6.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/6 - Eclipse Demo: Create a Class - lang_en_vs6.srt deleted file mode 100644 index 3bd4f11..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/6 - Eclipse Demo: Create a Class - lang_en_vs6.srt +++ /dev/null @@ -1,135 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,420 -So now that we know, we saw what happens under - -2 -00:00:02,420 --> 00:00:04,570 -the hood, and as I said, don't worry about it if - -3 -00:00:04,570 --> 00:00:06,689 -you don't care about that part. Now we can go back - -4 -00:00:06,689 --> 00:00:09,850 -to Eclipse, and we can start creating a package. A package - -5 -00:00:09,850 --> 00:00:13,125 -is basically a way of organizing your classes into a - -6 -00:00:13,125 --> 00:00:17,015 -hierarchy. In this case, I'm going to specify the package name as - -7 -00:00:17,015 --> 00:00:21,350 -edu.gatech, which means that I'm creating really two packages, a package - -8 -00:00:21,350 --> 00:00:25,480 -gatech inside package edu. And I can start creating classes inside - -9 -00:00:25,480 --> 00:00:28,770 -my packages. So here, I can use the contextual menu, select - -10 -00:00:28,770 --> 00:00:32,055 -New>Class, and I'll get another wizard that will allow me to - -11 -00:00:32,055 --> 00:00:35,160 -specify the name of the class. I'm not very creative here, - -12 -00:00:35,160 --> 00:00:38,250 -so I'm just going to call it Hello World. There's many other parameters - -13 -00:00:38,250 --> 00:00:41,710 -you can set, and in particular, you can define whether you - -14 -00:00:41,710 --> 00:00:45,450 -want a main method in your class. Where having a main - -15 -00:00:45,450 --> 00:00:48,460 -method means that your class can be the main class in - -16 -00:00:48,460 --> 00:00:50,850 -your project, can be the one that is run when you run - -17 -00:00:50,850 --> 00:00:54,340 -your project. After we click the button, the Finish button, we, - -18 -00:00:54,340 --> 00:00:56,859 -we get the class. So we also get template code for the - -19 -00:00:56,859 --> 00:00:59,604 -class, as you can see here, so we go to the editor - -20 -00:00:59,604 --> 00:01:02,120 -function, you can see that there is a to do. Where you - -21 -00:01:02,120 --> 00:01:05,019 -have to put your code, and here we are simply, basically printing, - -22 -00:01:05,019 --> 00:01:08,370 -you know, the typical first program. We just going to print Hello World - -23 -00:01:08,370 --> 00:01:11,180 -in Java. And something you can note is that as we are - -24 -00:01:11,180 --> 00:01:16,370 -typing, Eclipse gives us a auto complete suggestions, which is very helpful. - -25 -00:01:16,370 --> 00:01:19,650 -For example, in case you don't remember the exact syntax, - -26 -00:01:19,650 --> 00:01:22,190 -or the method, or you don't remember the parameters of the - -27 -00:01:22,190 --> 00:01:24,470 -method. Which is, you know, often the case especially where you - -28 -00:01:24,470 --> 00:01:27,590 -work with large libraries. So having that feature can really, really - -29 -00:01:27,590 --> 00:01:30,050 -help you. So now if we want to run our code - -30 -00:01:30,050 --> 00:01:33,380 -we can either click on the button up here, or we - -31 -00:01:33,380 --> 00:01:37,960 -can right-click in the Call window and select Run As Java - -32 -00:01:37,960 --> 00:01:41,370 -Application. And if we do that, Eclipse will run our tool, - -33 -00:01:41,370 --> 00:01:45,650 -and it will create, as you can see here, a console view that basically contains - -34 -00:01:45,650 --> 00:01:49,790 -the textual output of my program. And as expected, the output is Hello World. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/7 - Eclipse Demo: Run Configuration - lang_en_vs6.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/7 - Eclipse Demo: Run Configuration - lang_en_vs6.srt deleted file mode 100644 index ad54f06..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/7 - Eclipse Demo: Run Configuration - lang_en_vs6.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,660 -So now that we have run our program, let's see what - -2 -00:00:02,660 --> 00:00:05,660 -happens exactly when you run a program within Eclipse. And to - -3 -00:00:05,660 --> 00:00:08,410 -do that I'm going to use the menu over here which is - -4 -00:00:08,410 --> 00:00:12,500 -the Run menu and I'm going to select Run Configurations, and this - -5 -00:00:12,500 --> 00:00:15,190 -brings up a window where you can change or run configurations. - -6 -00:00:15,190 --> 00:00:17,200 -Well first of all, you can see that here on the - -7 -00:00:17,200 --> 00:00:22,260 -left under Java application. Eclipse automatically created a Hello World run - -8 -00:00:22,260 --> 00:00:25,300 -configuration for our program. And this is where you can configure - -9 -00:00:25,300 --> 00:00:28,370 -the different parameters for your execution. For example, - -10 -00:00:28,370 --> 00:00:30,520 -you can select the main class. So here - -11 -00:00:30,520 --> 00:00:34,745 -it's, obviously, edu.gatech.HelloWorld. You can define different program - -12 -00:00:34,745 --> 00:00:36,920 -arguments. We don't have any for now. You can - -13 -00:00:36,920 --> 00:00:39,480 -also pass arguments to the virtual machine. You - -14 -00:00:39,480 --> 00:00:41,960 -can define which Java runtime environment you want to - -15 -00:00:41,960 --> 00:00:47,720 -use, Classpath and other environmental options. So let's - -16 -00:00:47,720 --> 00:00:50,650 -now try to pass some arguments to our program. - -17 -00:00:50,650 --> 00:00:54,390 -So for example here, I am just going to write George as - -18 -00:00:54,390 --> 00:00:58,450 -a possible parameter. I say Apply so that modify the configuration and - -19 -00:00:58,450 --> 00:01:01,510 -if i run the program of course, the output is not changing - -20 -00:01:01,510 --> 00:01:04,440 -because my program does not use the argument. But, let's see if - -21 -00:01:04,440 --> 00:01:07,060 -we do use the argument, what happens. So I'm going to slightly - -22 -00:01:07,060 --> 00:01:10,030 -modify the final program so that now, instead of printing hello - -23 -00:01:10,030 --> 00:01:13,420 -world, it will print hello followed by the first argument that I - -24 -00:01:13,420 --> 00:01:15,700 -will pass to the program. And if I do that, and I - -25 -00:01:15,700 --> 00:01:19,420 -go and I run the program, what I get is exactly what I - -26 -00:01:19,420 --> 00:01:23,420 -was expecting, which is Hello George. So this is the way in which you - -27 -00:01:23,420 --> 00:01:26,120 -can pass arguments to your execution, which - -28 -00:01:26,120 --> 00:01:27,640 -is something that might come in handy - -29 -00:01:27,640 --> 00:01:30,390 -for some other projects. When you need to run some code with an argument. diff --git a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/8 - Eclipse Demo: Debugging - lang_en_vs5.srt b/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/8 - Eclipse Demo: Debugging - lang_en_vs5.srt deleted file mode 100644 index 025c2ba..0000000 --- a/usth/ICT2.7/P1L3 Integrated Development Environment Subtitles/8 - Eclipse Demo: Debugging - lang_en_vs5.srt +++ /dev/null @@ -1,275 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,090 -Now let's look at how we can do debugging within - -2 -00:00:03,090 --> 00:00:06,240 -Eclipse. I created a new file called AddNumbers which I'm - -3 -00:00:06,240 --> 00:00:10,770 -showing here. It takes two numbers, parses them into integers, - -4 -00:00:10,770 --> 00:00:14,870 -adds them and prints the sum, supposedly, of the two numbers. - -5 -00:00:14,870 --> 00:00:17,450 -Now we look at the run configuration for this program, - -6 -00:00:17,450 --> 00:00:19,670 -and here you can see that we're passing two arguments, - -7 -00:00:19,670 --> 00:00:22,060 -two and five, to the program. So now let's run - -8 -00:00:22,060 --> 00:00:25,468 -our program and see what happens. And the result says that - -9 -00:00:25,468 --> 00:00:28,150 -2 plus 5 is equal to 10, which is not - -10 -00:00:28,150 --> 00:00:31,030 -exactly correct. So we need to debug our program. We - -11 -00:00:31,030 --> 00:00:33,310 -need to figure out what's wrong with the program, why - -12 -00:00:33,310 --> 00:00:37,140 -the wrong result was, produced. So we're going to add a break - -13 -00:00:37,140 --> 00:00:40,260 -point here by double-clicking here on the side of the - -14 -00:00:40,260 --> 00:00:42,940 -code. And the break point is basically a place where I'm - -15 -00:00:42,940 --> 00:00:46,240 -telling my debugger to stop during the execution because I - -16 -00:00:46,240 --> 00:00:50,750 -want to inspect the state of the program. So to start - -17 -00:00:50,750 --> 00:00:54,690 -debugging, we select Debug as Java Application from the Context - -18 -00:00:54,690 --> 00:00:58,170 -menu, similar to what we were doing for running the program. - -19 -00:00:58,170 --> 00:01:00,190 -And as you can see, this asks us whether we want - -20 -00:01:00,190 --> 00:01:03,720 -to pass to the debug perspective, which is a, a perspective - -21 -00:01:03,720 --> 00:01:07,110 -specifically designed for debugging. We say yes. And as you - -22 -00:01:07,110 --> 00:01:10,750 -see here, it shows us, it's like a different, set of - -23 -00:01:10,750 --> 00:01:13,310 -views, so we can see the code down here with an - -24 -00:01:13,310 --> 00:01:16,100 -indication of where the execution is. And of course the execution - -25 -00:01:16,100 --> 00:01:18,610 -stopped at the break point, which is exactly where - -26 -00:01:18,610 --> 00:01:21,850 -we told the debugger to stop. So let's look at - -27 -00:01:21,850 --> 00:01:24,400 -some of the other views in this perspective. The view - -28 -00:01:24,400 --> 00:01:27,370 -here on the right-hand side, for example, shows the variables - -29 -00:01:27,370 --> 00:01:30,720 -in scope and the break points that are currently active - -30 -00:01:30,720 --> 00:01:33,240 -for the debugging session. This is where the editor is - -31 -00:01:33,240 --> 00:01:36,710 -at. The outline of the program and the console at - -32 -00:01:36,710 --> 00:01:41,520 -the bottom. So now let's execute one line by clicking - -33 -00:01:41,520 --> 00:01:45,400 -on the Step Over button here at the top, and this will - -34 -00:01:45,400 --> 00:01:49,150 -execute the line that is currently highlighted and therefore it will move to - -35 -00:01:49,150 --> 00:01:51,500 -the next line. And as you can see, one nice feature is that - -36 -00:01:51,500 --> 00:01:54,760 -if I move the mouse over a variable, I can see the value - -37 -00:01:54,760 --> 00:01:57,710 -of the variable. And the same thing I can do if I look - -38 -00:01:57,710 --> 00:02:00,690 -at the variables windows here on the right. If I click it, it - -39 -00:02:00,690 --> 00:02:03,960 -will tell me what is the value of the variable, and in case - -40 -00:02:03,960 --> 00:02:07,410 -of more complex variables you can even expand it and get more details. - -41 -00:02:07,410 --> 00:02:10,870 -So now let's step over another line by clicking again this button, - -42 -00:02:10,870 --> 00:02:13,180 -and as you can see now we get to the line that - -43 -00:02:13,180 --> 00:02:16,410 -is actually performing the sum, supposedly, so now let's do the same - -44 -00:02:16,410 --> 00:02:19,100 -thing that we did before, and let's mouse over b, and we can - -45 -00:02:19,100 --> 00:02:22,150 -see that the value of b is five, as expected. So now - -46 -00:02:22,150 --> 00:02:27,080 -let's step over this line as well, and execute the actual sum. And - -47 -00:02:27,080 --> 00:02:29,730 -doing the mouseover thing, we can see that the value of sum - -48 -00:02:29,730 --> 00:02:33,000 -is ten, which is not right, of course. In fact, if we check - -49 -00:02:33,000 --> 00:02:35,590 -a gain we can see that value of A is two. The - -50 -00:02:35,590 --> 00:02:39,130 -value of B is five and therefore it's clear that there's something - -51 -00:02:39,130 --> 00:02:41,780 -wrong going on here, and at this point we can notice that - -52 -00:02:41,780 --> 00:02:44,030 -here we are doing multiplication instead - -53 -00:02:44,030 --> 00:02:46,010 -of addition. And therefore that's what the - -54 -00:02:46,010 --> 00:02:49,260 -error is. And this is clearly a very simple case. Right? A - -55 -00:02:49,260 --> 00:02:51,440 -case in which probably you just needed to look at the code and - -56 -00:02:51,440 --> 00:02:54,150 -you didn't need the debugger. But you probably got the idea right? - -57 -00:02:54,150 --> 00:02:58,055 -So this can be extremely useful when you're debugging, when you're studying more - -58 -00:02:58,055 --> 00:03:01,533 -complex programs. If you want to stop the debugger because you're - -59 -00:03:01,533 --> 00:03:04,557 -done with your debugging session as in this case, you can - -60 -00:03:04,557 --> 00:03:07,518 -either click here on the Terminate button or you can also - -61 -00:03:07,518 --> 00:03:11,109 -just simply tell the debugger to continue the execution, to resume - -62 -00:03:11,109 --> 00:03:15,140 -the execution until the program terminates naturally. So, in this case, - -63 -00:03:15,140 --> 00:03:17,520 -we're going to click here just to show what happens. And what - -64 -00:03:17,520 --> 00:03:20,230 -happens is that, you know, the execution will just continue until - -65 -00:03:20,230 --> 00:03:23,690 -the program exits. So now let's say that we want to fix - -66 -00:03:23,690 --> 00:03:27,740 -this problem that we just discovered. So we replace the multiplication - -67 -00:03:27,740 --> 00:03:30,600 -with an addition, we save the program, and we execute the - -68 -00:03:30,600 --> 00:03:33,860 -program again by clicking on this button. And at this point, - -69 -00:03:33,860 --> 00:03:37,320 -unsurprisingly, we get the right result as shown in the console. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/1 - Lesson Overview - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/1 - Lesson Overview - lang_en_vs5.srt deleted file mode 100644 index 936e3db..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/1 - Lesson Overview - lang_en_vs5.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,440 --> 00:00:06,190 -Hi and welcome to the second lesson on tools of the trade. In the - -2 -00:00:06,190 --> 00:00:09,710 -previous lesson we talked about IDEs. Integrated - -3 -00:00:09,710 --> 00:00:13,300 -Development Environments and in particular we discussed - -4 -00:00:13,300 --> 00:00:16,460 -the eclipse ID. Today we're going to - -5 -00:00:16,460 --> 00:00:19,780 -talk about another fundamental type of tools - -6 -00:00:19,780 --> 00:00:22,840 -in the software engineering arena. Version control - -7 -00:00:22,840 --> 00:00:26,140 -systems. And these are also called, revision - -8 -00:00:26,140 --> 00:00:30,620 -or source control systems. In particular, we will focus on a - -9 -00:00:30,620 --> 00:00:36,320 -specific version control system called git. And as we did for eclipse, - -10 -00:00:36,320 --> 00:00:40,510 -we will first present git from a conceptual standpoint. And then - -11 -00:00:40,510 --> 00:00:44,200 -we will do a demo. To get some hands-on experience with GIT. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/10 - Introduction to GIT - lang_en_vs6.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/10 - Introduction to GIT - lang_en_vs6.srt deleted file mode 100644 index 201c7a5..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/10 - Introduction to GIT - lang_en_vs6.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,240 --> 00:00:04,160 -One good representative of distributed version control systems, is - -2 -00:00:04,160 --> 00:00:08,320 -GIT. A distributed version control system that was initially designed - -3 -00:00:08,320 --> 00:00:11,297 -and developed by Linus Torvalds. I'm pretty sure you - -4 -00:00:11,297 --> 00:00:14,140 -know who Linus Torvalds is. He's basically this guy who - -5 -00:00:14,140 --> 00:00:17,070 -started and created the Linux operating system. And Linus - -6 -00:00:17,070 --> 00:00:20,140 -was unhappy with the existing version control systems, and wanted - -7 -00:00:20,140 --> 00:00:22,610 -a different one. He wanted to use it for maintaining - -8 -00:00:22,610 --> 00:00:25,330 -the Linux kernel. In particular, he wanted one with some - -9 -00:00:25,330 --> 00:00:28,550 -key characteristics. For example, the fact that it was distributed. He - -10 -00:00:28,550 --> 00:00:30,470 -wanted it to be fast. He wanted it to have a - -11 -00:00:30,470 --> 00:00:33,660 -simple design. And he wanted to have a strong support for - -12 -00:00:33,660 --> 00:00:37,370 -parallel branches, because many people were contributing to the kernel at the - -13 -00:00:37,370 --> 00:00:41,620 -same time. And therefore there many different branches of development. And - -14 -00:00:41,620 --> 00:00:45,120 -finally, he wanted for the virtual control system to be able to - -15 -00:00:45,120 --> 00:00:48,070 -handle large projects. As the Linux kernel is, and to do - -16 -00:00:48,070 --> 00:00:50,480 -it in an efficient way. So if you want to get an idea - -17 -00:00:50,480 --> 00:00:54,210 -of how popular GIT is today, there was a survey performed across the - -18 -00:00:54,210 --> 00:00:58,330 -Eclipse IDE users, and it showed that in 2013 GIT was used by - -19 -00:00:58,330 --> 00:01:02,950 -about 30% of the developers. So the, it had a 30% adoption rate. - -20 -00:01:02,950 --> 00:01:06,430 -So we will use a GIT as a version control system for the class. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/11 - Installing GIT - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/11 - Installing GIT - lang_en_vs5.srt deleted file mode 100644 index 38eedc0..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/11 - Installing GIT - lang_en_vs5.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,020 -As we did for Eclipse, and IDEs in general, we want - -2 -00:00:03,020 --> 00:00:05,133 -to start a GIT in a hands on way. So we're going - -3 -00:00:05,133 --> 00:00:08,425 -to start by seeing how to install GIT. And GIT is also - -4 -00:00:08,425 --> 00:00:12,440 -multiplatform, so you can install it no matter what operating system you - -5 -00:00:12,440 --> 00:00:15,980 -are using, unless of course you are using some arcane operating system. - -6 -00:00:15,980 --> 00:00:18,530 -But if you are using Linux, for instance, there should be a - -7 -00:00:18,530 --> 00:00:22,608 -package available that can install GIT for your specific distribution. If you're - -8 -00:00:22,608 --> 00:00:25,460 -using Mac OS, GIT is also available as part of XCode and - -9 -00:00:25,460 --> 00:00:29,270 -also as an independent package. Finally, if you're using Windows, GIT is - -10 -00:00:29,270 --> 00:00:33,090 -available as a package with an installer. In general, you can go - -11 -00:00:33,090 --> 00:00:37,290 -here to get information about how to get GIT, where to download - -12 -00:00:37,290 --> 00:00:39,975 -it, how to install it, and so on. So, now what I'd - -13 -00:00:39,975 --> 00:00:42,312 -like for you to do is to go, get GIT, install it, - -14 -00:00:42,312 --> 00:00:45,469 -in case you don't have it installed already on your machine. And - -15 -00:00:45,469 --> 00:00:48,253 -after that, you should be able to run GIT from the command - -16 -00:00:48,253 --> 00:00:51,120 -line. And, that's exactly what we're going to do through a demo. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt deleted file mode 100644 index 84f0f2e..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/12 - GIT Workflow - lang_en_vs5.srt +++ /dev/null @@ -1,507 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,100 -But before jumping into the demo I would like - -2 -00:00:02,100 --> 00:00:05,370 -to give a high level overview of the GIT workflow, - -3 -00:00:05,370 --> 00:00:08,420 -which will help you better, following the demo. So let - -4 -00:00:08,420 --> 00:00:12,480 -me start by representing four fundamental elements in the GIT - -5 -00:00:12,480 --> 00:00:15,640 -workflow which are these four: the workspace which is your - -6 -00:00:15,640 --> 00:00:19,980 -local directory. The index, also called the stage, and we'll - -7 -00:00:19,980 --> 00:00:22,470 -see in a minute what the index is. Then, we - -8 -00:00:22,470 --> 00:00:25,380 -have the local repository. We'll also refer to this as - -9 -00:00:25,380 --> 00:00:27,910 -HEAD in the, when we explain the different commands - -10 -00:00:27,910 --> 00:00:31,340 -and then, the word flow. And finally, the remote repository. - -11 -00:00:31,340 --> 00:00:34,600 -If you consider a file in your work space it - -12 -00:00:34,600 --> 00:00:37,860 -can be in three possible states. It can be committed - -13 -00:00:37,860 --> 00:00:40,170 -which means that the data, the latest changes to the - -14 -00:00:40,170 --> 00:00:45,030 -file are safely stored here. It could be modified, which - -15 -00:00:45,030 --> 00:00:47,840 -is the case of the file being changed and no, - -16 -00:00:47,840 --> 00:00:50,710 -none of these changes being saved to the local repository - -17 -00:00:50,710 --> 00:00:54,440 -so locally modified or it can be staged. And - -18 -00:00:54,440 --> 00:00:58,270 -stage means that the file is basically part of this - -19 -00:00:58,270 --> 00:01:01,620 -index. And what that means, that it's been tagged - -20 -00:01:01,620 --> 00:01:04,890 -to be considered in the next commit. And I know - -21 -00:01:04,890 --> 00:01:08,070 -that this is not all 100% intuitive, so let's - -22 -00:01:08,070 --> 00:01:10,860 -look at that again by considering the actual workflow and - -23 -00:01:10,860 --> 00:01:12,680 -let's see what happens when you issue the different - -24 -00:01:12,680 --> 00:01:16,060 -commands in git. So the first command that you normally - -25 -00:01:16,060 --> 00:01:18,520 -run in case you, you're getting access to a remote - -26 -00:01:18,520 --> 00:01:21,940 -repository, is the git clone command. And the git clone, - -27 -00:01:21,940 --> 00:01:24,880 -followed by the url for that repository, will create a - -28 -00:01:24,880 --> 00:01:28,580 -local copy of the repository in your workspace. And of - -29 -00:01:28,580 --> 00:01:30,310 -course, you don't have to do this step if you're - -30 -00:01:30,310 --> 00:01:34,380 -creating the repository yourself. The next command that we already - -31 -00:01:34,380 --> 00:01:38,170 -saw is the command add. And what the command add - -32 -00:01:38,170 --> 00:01:41,130 -does is to add a file that is in the - -33 -00:01:41,130 --> 00:01:44,630 -workspace to this index. And we say that after that, the - -34 -00:01:44,630 --> 00:01:48,700 -file is staged. So it's marked to be committed, but not - -35 -00:01:48,700 --> 00:01:53,350 -yet committed. And here I'm just mentioning this minus u option. - -36 -00:01:53,350 --> 00:01:56,330 -If you specify the minus u option, you will also consider deleted - -37 -00:01:56,330 --> 00:01:58,820 -files File, but let's not get there for now, we'll talk - -38 -00:01:58,820 --> 00:02:01,240 -about that when we do the demo. As I said, if you - -39 -00:02:01,240 --> 00:02:03,720 -add the file, it just gets added to this index but - -40 -00:02:03,720 --> 00:02:06,430 -is not actually committed, so what you need to do, is to - -41 -00:02:06,430 --> 00:02:10,389 -commit the file, so when you execute git commit, all the - -42 -00:02:10,389 --> 00:02:13,970 -files that are staged, that are released it here, their changes - -43 -00:02:13,970 --> 00:02:17,080 -will be committed to the local repository. So your files, as - -44 -00:02:17,080 --> 00:02:18,970 -I was saying, they can be in three states. They will - -45 -00:02:18,970 --> 00:02:21,820 -go from the modified state to the stage state when you - -46 -00:02:21,820 --> 00:02:24,200 -execute the app. And then from the stage state to the - -47 -00:02:24,200 --> 00:02:27,510 -committed state when you perform a GIT Commit. Okay, so at - -48 -00:02:27,510 --> 00:02:31,780 -this point your changes are safely stored in the local repository. - -49 -00:02:31,780 --> 00:02:34,370 -Notice that you can also perform these two steps at - -50 -00:02:34,370 --> 00:02:38,150 -once by executing a Commit -a. So if you have - -51 -00:02:38,150 --> 00:02:40,920 -a set of modified files, and all these files are - -52 -00:02:40,920 --> 00:02:44,550 -already part of the repository, so they're already known to diversion - -53 -00:02:44,550 --> 00:02:47,540 -control system, you can simply execute a commit -a. - -54 -00:02:47,540 --> 00:02:50,040 -And what the commit -a command will do, it - -55 -00:02:50,040 --> 00:02:53,080 -will stage your file and then commit them. All at - -56 -00:02:53,080 --> 00:02:56,650 -once. So it's a convenient shortcut. Of course, as I said, - -57 -00:02:56,650 --> 00:02:58,710 -this will not work if the file is a new file. - -58 -00:02:58,710 --> 00:03:00,730 -So if a file is a new file, you have to manually add - -59 -00:03:00,730 --> 00:03:04,620 -it. Otherwise commit -a will just stage and commit at once. - -60 -00:03:04,620 --> 00:03:07,400 -As we discussed when we looked at the diffence between centralized - -61 -00:03:07,400 --> 00:03:10,520 -and decentralized version console system. We saw that in the case - -62 -00:03:10,520 --> 00:03:13,930 -of the decentralized, there is a local repository which is this one. - -63 -00:03:13,930 --> 00:03:17,190 -And then you have to explicitly push your changes to a remote - -64 -00:03:17,190 --> 00:03:21,850 -repository, and this is exactly what the git push command does. It pushes - -65 -00:03:21,850 --> 00:03:25,930 -your changes that are in the local repository to the remote repository - -66 -00:03:25,930 --> 00:03:28,160 -so at this point all of your changes will be - -67 -00:03:28,160 --> 00:03:31,680 -visible to anyone who has access to the remote repository. - -68 -00:03:31,680 --> 00:03:33,710 -Now, let's see the opposite flow so how does it - -69 -00:03:33,710 --> 00:03:36,640 -work when you're actually getting files from the repository instead - -70 -00:03:36,640 --> 00:03:39,650 -of committing files to the repository. So the first command - -71 -00:03:39,650 --> 00:03:43,280 -I want to mention is the get fetch command and - -72 -00:03:43,280 --> 00:03:46,900 -what the get fetch command does is to get files from - -73 -00:03:46,900 --> 00:03:50,680 -the remote repositories to your local repository, but not yet to - -74 -00:03:50,680 --> 00:03:53,890 -your working directory. And we will see what is the usefullness of - -75 -00:03:53,890 --> 00:03:56,900 -doing this operation. Of having the files all in the local respository, - -76 -00:03:56,900 --> 00:03:59,380 -but not in your local directory. So, what that means, just to - -77 -00:03:59,380 --> 00:04:01,360 -make sure that we're on the same page. Is that you - -78 -00:04:01,360 --> 00:04:05,620 -will not see these files when you workspace. You will still have - -79 -00:04:05,620 --> 00:04:09,030 -your local files here. So this is sort of a physical distinction. - -80 -00:04:09,030 --> 00:04:12,060 -In order to get your data files from the local repositories to - -81 -00:04:12,060 --> 00:04:14,470 -your workspace you have to issue another command. Which is - -82 -00:04:14,470 --> 00:04:18,250 -the command git merge. Git merge will take the changes in - -83 -00:04:18,250 --> 00:04:21,870 -local repository and get them to your local workspace. So at - -84 -00:04:21,870 --> 00:04:25,460 -this point your files will be updated. To what is in - -85 -00:04:25,460 --> 00:04:27,730 -the remote reposity. Or at least what was in the - -86 -00:04:27,730 --> 00:04:30,810 -remote reposity at the time of the fetch. SImilarly to what - -87 -00:04:30,810 --> 00:04:34,340 -happened for the add and commit. There's a shortcut which is - -88 -00:04:34,340 --> 00:04:37,230 -the command git pull. So in case you want to get - -89 -00:04:37,230 --> 00:04:40,590 -the changes directly. To your work space with a single - -90 -00:04:40,590 --> 00:04:44,120 -command, you can issue a git pull command and what will - -91 -00:04:44,120 --> 00:04:46,560 -happen, is that the changes will get collected from the - -92 -00:04:46,560 --> 00:04:49,810 -remote repository and they will go to your local repository and - -93 -00:04:49,810 --> 00:04:51,990 -to your work space, at once. So this has the - -94 -00:04:51,990 --> 00:04:55,820 -same affect as performing a git fetch and a git merge. - -95 -00:04:55,820 --> 00:04:59,160 -So if we can do everything in one command, why, - -96 -00:04:59,160 --> 00:05:03,290 -why we want to fetch and berch as two separate operations? - -97 -00:05:03,290 --> 00:05:05,920 -So one of the reason is because this allows us - -98 -00:05:05,920 --> 00:05:09,410 -to compare files before we actually get the latest version - -99 -00:05:09,410 --> 00:05:12,600 -of the files. In particular, I can run the command - -100 -00:05:12,600 --> 00:05:17,310 -git diff head to get the difference between my local files, - -101 -00:05:17,310 --> 00:05:20,330 -the files in my working directory, and the files in - -102 -00:05:20,330 --> 00:05:22,800 -my local repository. So what I can do, I can - -103 -00:05:22,800 --> 00:05:25,550 -fetch the files from the remote repository, and once I - -104 -00:05:25,550 --> 00:05:29,260 -fetch these files. I can run a git diff head and - -105 -00:05:29,260 --> 00:05:32,620 -check what the differences are. And based on the differences decide - -106 -00:05:32,620 --> 00:05:35,554 -whether I want to merge or not. So while we are talking about - -107 -00:05:35,554 --> 00:05:37,890 -git diff, there is something else that you can use with the - -108 -00:05:37,890 --> 00:05:41,060 -diff command. So what you can do, you can run git diff - -109 -00:05:41,060 --> 00:05:44,930 -without further specifying head. In this case, what the command tell you - -110 -00:05:44,930 --> 00:05:48,310 -is the difference between the files that you have in your work - -111 -00:05:48,310 --> 00:05:51,780 -space and the ones that are staged for a commit. So basically, - -112 -00:05:51,780 --> 00:05:54,630 -what it will be telling you, is that what you could still - -113 -00:05:54,630 --> 00:05:58,300 -add to the stage for the further commit, and that you - -114 -00:05:58,300 --> 00:06:01,230 -haven't already. So what local changes will not make it to the - -115 -00:06:01,230 --> 00:06:04,440 -next commit, basically. And this you can use, for example, as - -116 -00:06:04,440 --> 00:06:07,450 -a sanity check before doing a commit to make sure all the - -117 -00:06:07,450 --> 00:06:09,980 -local changes that you have, and that you want to commit, - -118 -00:06:09,980 --> 00:06:13,230 -are actually staged and therefore will be considered. So now we will - -119 -00:06:13,230 --> 00:06:16,930 -cover all of the commands that we saw here. In our practical - -120 -00:06:16,930 --> 00:06:20,560 -demo. But please feel free to refer back to this Git Workflow - -121 -00:06:20,560 --> 00:06:23,570 -to get a kind of a high level vision. Or maybe you want to keep it next to - -122 -00:06:23,570 --> 00:06:26,110 -you, because this really gives you the overall structure - -123 -00:06:26,110 --> 00:06:28,450 -and the overall view of what happens when you - -124 -00:06:28,450 --> 00:06:31,160 -run the different commands. And it also helps you - -125 -00:06:31,160 --> 00:06:34,840 -visualize The different elements that are relevant when you're - -126 -00:06:34,840 --> 00:06:37,970 -using GIT. So the workspace, once more, the index - -127 -00:06:37,970 --> 00:06:40,790 -or stage, the local repository, and the remote repository. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/13 - GIT Demo: Intro to Git - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/13 - GIT Demo: Intro to Git - lang_en_vs5.srt deleted file mode 100644 index d3b3a24..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/13 - GIT Demo: Intro to Git - lang_en_vs5.srt +++ /dev/null @@ -1,1095 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,170 -In this first part of the git demo, we will - -2 -00:00:02,170 --> 00:00:05,080 -call it the basics of git. So for example, how to - -3 -00:00:05,080 --> 00:00:08,280 -introduce yourself to git, how to create a repository, how to - -4 -00:00:08,280 --> 00:00:12,450 -commit changes and get changes from the repository, and so on. - -5 -00:00:12,450 --> 00:00:15,140 -So after you installed git you should have the git tool - -6 -00:00:15,140 --> 00:00:18,150 -available on the command line, so you can run the command - -7 -00:00:18,150 --> 00:00:21,110 -git and, if you just execute git you will get the - -8 -00:00:21,110 --> 00:00:25,930 -usage information for git, with the most commonly used git commands. - -9 -00:00:25,930 --> 00:00:28,940 -And to find information on any command, you can simply - -10 -00:00:28,940 --> 00:00:32,310 -type git help and the name of the command. For - -11 -00:00:32,310 --> 00:00:35,240 -example, lets try to write git help init. And that - -12 -00:00:35,240 --> 00:00:38,960 -brings up the git manual page for git init, which describes - -13 -00:00:38,960 --> 00:00:41,590 -the command, the synopsis, and so on. Now, lets get - -14 -00:00:41,590 --> 00:00:45,970 -started with using git by introducing ourselves to git, which is - -15 -00:00:45,970 --> 00:00:47,830 -the first thing we need to do. To do that - -16 -00:00:47,830 --> 00:00:51,310 -we use the git config command, in particular we are going to - -17 -00:00:51,310 --> 00:00:54,170 -write to the git config minus, minus global - -18 -00:00:54,170 --> 00:00:56,440 -user dot name. Which means we are telling it - -19 -00:00:56,440 --> 00:00:59,900 -our user name. We'll specify our user name which - -20 -00:00:59,900 --> 00:01:02,970 -in this case is George P. Burdell. You could - -21 -00:01:02,970 --> 00:01:04,970 -also provide your email address in the same - -22 -00:01:04,970 --> 00:01:09,370 -way. So you still use the git config --global - -23 -00:01:09,370 --> 00:01:12,750 -command. But in this case you will write user.email - -24 -00:01:12,750 --> 00:01:16,580 -as the property. And then you'll specify a suitable - -25 -00:01:16,580 --> 00:01:19,670 -email address. In this case, the email address of George P. - -26 -00:01:19,670 --> 00:01:23,780 -Burdell. We will now look at some commonly used commands that to - -27 -00:01:23,780 --> 00:01:27,210 -create and maintain a local repository. Let's first create a - -28 -00:01:27,210 --> 00:01:30,510 -new project and call it my project. So, to do that we - -29 -00:01:30,510 --> 00:01:32,790 -are simply going to create a directory and then we're going - -30 -00:01:32,790 --> 00:01:35,520 -to move into that directory. Now, if we try to call the - -31 -00:01:35,520 --> 00:01:39,000 -git status command at this point to see what's the state of - -32 -00:01:39,000 --> 00:01:41,990 -my project, of course git doesn't know anything about this project, right? - -33 -00:01:41,990 --> 00:01:44,360 -So, you will get an error. It will tell you that, basically, - -34 -00:01:44,360 --> 00:01:47,080 -we're not in a git repository. So how do we create a git - -35 -00:01:47,080 --> 00:01:50,090 -repository? How do we make this? A Git repository, but we do it - -36 -00:01:50,090 --> 00:01:53,560 -by calling git init and the output will tell you that the - -37 -00:01:53,560 --> 00:01:56,580 -repository was initialized. If we check the status again, you will see - -38 -00:01:56,580 --> 00:01:59,790 -that now Git recognizes the repository and will tell you that there is - -39 -00:01:59,790 --> 00:02:01,160 -nothing to commit because, of course, - -40 -00:02:01,160 --> 00:02:03,190 -the repository is completely empty. So let's - -41 -00:02:03,190 --> 00:02:07,380 -just create a new, empty file. Which we're going to call REAME. So - -42 -00:02:07,380 --> 00:02:10,008 -now if you run git status, as you can see, git will - -43 -00:02:10,008 --> 00:02:13,250 -tell you there is a file that's called README, but it's untracked. - -44 -00:02:13,250 --> 00:02:15,600 -Now what that means is that the file not staged, if you - -45 -00:02:15,600 --> 00:02:18,710 -remember our lesson. So what we need to do, we first need - -46 -00:02:18,710 --> 00:02:22,040 -to tell git that, you know, this needs to be considered. And - -47 -00:02:22,040 --> 00:02:25,690 -the way we do that, is by calling the git at command - -48 -00:02:25,690 --> 00:02:28,880 -and then we specify README as the argument for the command. If - -49 -00:02:28,880 --> 00:02:33,090 -we call again, Git status. Now, as you can see, Git knows - -50 -00:02:33,090 --> 00:02:35,780 -that there is a new file called README, because the file - -51 -00:02:35,780 --> 00:02:38,390 -is staged. So Git is aware of the fact that this - -52 -00:02:38,390 --> 00:02:41,490 -file has to be committed. So, to commit a file, - -53 -00:02:41,490 --> 00:02:45,410 -we simply execute git commit, which will open a text editor, which - -54 -00:02:45,410 --> 00:02:48,500 -can be different, depending on what is your environment, and here - -55 -00:02:48,500 --> 00:02:50,980 -we need to add a comment to be added to the commit. - -56 -00:02:50,980 --> 00:02:54,760 -So here we simply write in Added README file, then we - -57 -00:02:54,760 --> 00:02:58,170 -can close and save And this will add the file to the - -58 -00:02:58,170 --> 00:03:01,310 -Git repository. The local Git repository of course. At this - -59 -00:03:01,310 --> 00:03:04,220 -point, if we ran Git status again to see where we are. - -60 -00:03:04,220 --> 00:03:06,400 -You can see that Git tells you that there is nothing - -61 -00:03:06,400 --> 00:03:08,660 -to commit. Because of course the only file that we have, is - -62 -00:03:08,660 --> 00:03:13,070 -committed to the repository. Now, let's make some changes to our - -63 -00:03:13,070 --> 00:03:17,270 -README file. I'm just going to add some text here. Once more, we - -64 -00:03:17,270 --> 00:03:20,050 -can run git status, and at this point, git knows about - -65 -00:03:20,050 --> 00:03:23,430 -this file. So, it will know that README file has been modified. - -66 -00:03:23,430 --> 00:03:25,280 -Remember that before, it was telling you that it was a new - -67 -00:03:25,280 --> 00:03:28,310 -file, now it knows that there was a different version in the - -68 -00:03:28,310 --> 00:03:31,430 -repository. So something we can do, at this point, for example, is - -69 -00:03:31,430 --> 00:03:34,820 -to check the differences. Between this file and the committed one by - -70 -00:03:34,820 --> 00:03:38,040 -executing get diff readme and if you look at the output of - -71 -00:03:38,040 --> 00:03:42,320 -the get diff command here, you can see that this line, readme - -72 -00:03:42,320 --> 00:03:45,170 -file content was added and you'll see that it was added because - -73 -00:03:45,170 --> 00:03:48,610 -there's a plus sign before that line. In case of deletion of lines, - -74 -00:03:48,610 --> 00:03:51,460 -you'll see a minusm sign there. So at this point, if we - -75 -00:03:51,460 --> 00:03:54,950 -want to commit our file, remember that we'll always have to tell git - -76 -00:03:54,950 --> 00:03:58,070 -that we want to stage the file before committing it. Otherwise, it - -77 -00:03:58,070 --> 00:04:01,420 -will be ignored by the commit operation. So to tell git, that the - -78 -00:04:01,420 --> 00:04:04,140 -file has to be staged, we will, can use the usual git - -79 -00:04:04,140 --> 00:04:07,140 -add command. But if you remember the lesson, we can also use a - -80 -00:04:07,140 --> 00:04:10,150 -shortcut. So you, we don't really have to do this in two steps. - -81 -00:04:10,150 --> 00:04:13,730 -We can simply say, git commit -a, and this will tell git to - -82 -00:04:13,730 --> 00:04:17,120 -commit all of the files that git knows about, which in this - -83 -00:04:17,120 --> 00:04:19,959 -case is only the written file of course. Something else that we can - -84 -00:04:19,959 --> 00:04:22,950 -do, is that we can also provide the right away message for - -85 -00:04:22,950 --> 00:04:26,140 -the commit, without having to open an editor. So, to do that we - -86 -00:04:26,140 --> 00:04:29,760 -can specify the -n option. And at this point a we can - -87 -00:04:29,760 --> 00:04:34,050 -just put a in double quotes our content we press enter and as - -88 -00:04:34,050 --> 00:04:36,690 -you can see it will notify us that one file was changed - -89 -00:04:36,690 --> 00:04:38,850 -and in particular it will also tell you that there was an a - -90 -00:04:38,850 --> 00:04:41,470 -insertion again if we run git status you will see that - -91 -00:04:41,470 --> 00:04:44,800 -there is nothing else to commit. So now lets imagine that - -92 -00:04:44,800 --> 00:04:48,390 -you want to see the version history for your repository. You - -93 -00:04:48,390 --> 00:04:51,760 -can do that by running the git log command. So if - -94 -00:04:51,760 --> 00:04:54,560 -you run that, it will show you all the different commits - -95 -00:04:54,560 --> 00:04:57,990 -For your repository. And each commit has got a commit ID, as - -96 -00:04:57,990 --> 00:05:01,010 -you can see here and the one down here is - -97 -00:05:01,010 --> 00:05:04,740 -the first commit, where as the one above is the second commit. - -98 -00:05:04,740 --> 00:05:07,670 -And as you can see, we'll also show you the comments associated - -99 -00:05:07,670 --> 00:05:11,070 -with each commit. And in case you wanted to see the changes introduced - -100 -00:05:11,070 --> 00:05:14,500 -by a commit. You can use that git show command, and you - -101 -00:05:14,500 --> 00:05:18,220 -can provide the commit ID for the commit that you're interested in. - -102 -00:05:18,220 --> 00:05:20,600 -And you don't really need to provide the whole ID, you can - -103 -00:05:20,600 --> 00:05:23,600 -provide the first four or more characters. So that's what we're going to - -104 -00:05:23,600 --> 00:05:26,540 -do here. So we're going to specify the second commit, and when we - -105 -00:05:26,540 --> 00:05:31,120 -execute the command it will show use the changes introduced by that commit. - -106 -00:05:31,120 --> 00:05:33,550 -To fetch a repository from a remote server, you can - -107 -00:05:33,550 --> 00:05:36,350 -use the git clone command. So you will write git clone - -108 -00:05:36,350 --> 00:05:39,140 -and then specify the URL. For the remote repository. Here - -109 -00:05:39,140 --> 00:05:44,260 -we are using the SSH protocal and there are different protocals - -110 -00:05:44,260 --> 00:05:46,680 -that can be used, so the remote repository can be - -111 -00:05:46,680 --> 00:05:49,800 -made available in different ways. As you can see, when you - -112 -00:05:49,800 --> 00:05:54,050 -clone the project, the project is cloned into the local directory. - -113 -00:05:54,050 --> 00:05:57,180 -If you wanted to import the project under a different name. - -114 -00:05:57,180 --> 00:05:59,790 -You could just specify the name that you want for the - -115 -00:05:59,790 --> 00:06:03,110 -Local Directory. For example, in this case, myproject2. And, - -116 -00:06:03,110 --> 00:06:06,630 -so here you'll get the project in my local work space - -117 -00:06:06,630 --> 00:06:09,530 -with the name that I specified. So, let's go inside one - -118 -00:06:09,530 --> 00:06:12,020 -of these two projects that have the same content because they're - -119 -00:06:12,020 --> 00:06:14,930 -coming from the repository. If you want to see the details - -120 -00:06:14,930 --> 00:06:18,550 -of the server you can use the remote command and specify - -121 -00:06:18,550 --> 00:06:22,230 -the flag -v. And here we'll show you what is the remote - -122 -00:06:22,230 --> 00:06:25,560 -repository now let's go ahead to make some changes to the project - -123 -00:06:25,560 --> 00:06:28,820 -for example let's add a file. So I'm just going to create this - -124 -00:06:28,820 --> 00:06:31,230 -empty file which I am going to call new file I'm going to - -125 -00:06:31,230 --> 00:06:34,890 -add it to my index so that it gets committed. Later on and - -126 -00:06:34,890 --> 00:06:37,650 -then I'm going to run git commit to actually commit it to the - -127 -00:06:37,650 --> 00:06:41,570 -local repository. And I'm going to specify the comment for the commit right - -128 -00:06:41,570 --> 00:06:44,120 -away here from the command line. So when we do that the - -129 -00:06:44,120 --> 00:06:47,680 -file gets added to my local repository. And if we want to double - -130 -00:06:47,680 --> 00:06:50,690 -check that, we can run git log. And if you look at - -131 -00:06:50,690 --> 00:06:53,360 -the last commit at the top, you can see that it's telling - -132 -00:06:53,360 --> 00:06:56,980 -me that the new file was added to the repository, showing the - -133 -00:06:56,980 --> 00:06:59,940 -comment that I added. But this is just for the local repository, - -134 -00:06:59,940 --> 00:07:03,100 -so I need to use the git push command to push it - -135 -00:07:03,100 --> 00:07:06,250 -to the remote repository. And at this point, when I run that, - -136 -00:07:06,250 --> 00:07:09,890 -my local changes will be committed. To the remote repository. So now - -137 -00:07:09,890 --> 00:07:13,110 -let's go to the other copy of the project that we created. - -138 -00:07:13,110 --> 00:07:16,660 -The one under directory myproject2. If you remember this project was - -139 -00:07:16,660 --> 00:07:19,610 -linked up to the same remote project. But of course, if we run - -140 -00:07:19,610 --> 00:07:22,720 -get log here, we don't see this latest change that we made, because - -141 -00:07:22,720 --> 00:07:25,970 -we didn't synchronize this local copy with the remote copy. And so we - -142 -00:07:25,970 --> 00:07:28,530 -just have these files, the README and ,Five that worked there before. - -143 -00:07:28,530 --> 00:07:30,720 -So what we need to do is that we need to pull the - -144 -00:07:30,720 --> 00:07:34,180 -changes from the remote repository using git pull, and when we do that, - -145 -00:07:34,180 --> 00:07:38,130 -that will actually pull these changes and therefore, create the new files that - -146 -00:07:38,130 --> 00:07:41,340 -we created in the other directory. And if we run git log now, - -147 -00:07:41,340 --> 00:07:43,790 -you can see that now we have the new entry. The comment at - -148 -00:07:43,790 --> 00:07:46,920 -the top, that says this new file was added and of course, this - -149 -00:07:46,920 --> 00:07:49,880 -is just an example, so we had two copies of the project on the - -150 -00:07:49,880 --> 00:07:52,990 -same machine and for the same user, so the normal users scenario for - -151 -00:07:52,990 --> 00:07:56,230 -this, it will be that, each user will have their local copy, but this - -152 -00:07:56,230 --> 00:07:59,220 -should have given you the idea of how, git allows you to work - -153 -00:07:59,220 --> 00:08:03,210 -on some local file. Commit them and push them to a remote repository and - -154 -00:08:03,210 --> 00:08:06,680 -other users to get your changes, do further changes push - -155 -00:08:06,680 --> 00:08:08,860 -them as well and then, you know, they will allow you - -156 -00:08:08,860 --> 00:08:10,890 -to get their changes, and so on and so forth. So - -157 -00:08:10,890 --> 00:08:15,540 -really allows this collaboration between different users and keeping track - -158 -00:08:15,540 --> 00:08:18,730 -of all the changes made by the different users. So now - -159 -00:08:18,730 --> 00:08:21,860 -let's look at some more advanced concept, which are the concept - -160 -00:08:21,860 --> 00:08:25,600 -of branching, and merging. So what branching means is basically is - -161 -00:08:25,600 --> 00:08:28,540 -to make a copy, to create a branch of the current - -162 -00:08:28,540 --> 00:08:32,070 -project so that we can work on that copy indpendently from the - -163 -00:08:32,070 --> 00:08:34,740 -other copy, from the other branch. And then we can decide whether - -164 -00:08:34,740 --> 00:08:37,190 -we want to keep, both branches, or we want to merge them at - -165 -00:08:37,190 --> 00:08:40,510 -some point. And you can of course have multiple branches, not just two. - -166 -00:08:40,510 --> 00:08:43,558 -And the reason why this is particularly useful is because in many - -167 -00:08:43,558 --> 00:08:46,790 -cases if you think, about the way we develop software in general, - -168 -00:08:46,790 --> 00:08:50,030 -we work with artifacts. We might have the need to create kind - -169 -00:08:50,030 --> 00:08:53,910 -of a separate copy of your work space. To do some experiments for example. - -170 -00:08:53,910 --> 00:08:54,940 -So you want to change something in - -171 -00:08:54,940 --> 00:08:56,250 -the code, you're not really sure it's going to - -172 -00:08:56,250 --> 00:08:57,650 -work and you don't want to touch - -173 -00:08:57,650 --> 00:08:59,500 -your main copy. So that's the perfect application - -174 -00:08:59,500 --> 00:09:00,830 -for branching. If you want to do - -175 -00:09:00,830 --> 00:09:02,710 -something like that...you want to experiment or do - -176 -00:09:02,710 --> 00:09:04,800 -some modifications that you're not sure about, - -177 -00:09:04,800 --> 00:09:06,820 -you will branch your code, you will do - -178 -00:09:06,820 --> 00:09:08,230 -the changes...and then if you're happy with - -179 -00:09:08,230 --> 00:09:09,890 -the changes, you will merge that branch - -180 -00:09:09,890 --> 00:09:13,250 -with the original one, or worse if you're not happy with the changes you will - -181 -00:09:13,250 --> 00:09:16,680 -just throw away that branch. So this is just one possible use of branch but - -182 -00:09:16,680 --> 00:09:18,950 -it's one of the main uses of that. So in all let's see how that - -183 -00:09:18,950 --> 00:09:21,070 -can be done with git. So first of all if you - -184 -00:09:21,070 --> 00:09:24,740 -want to see which branches are currently present in your project, you can - -185 -00:09:24,740 --> 00:09:28,260 -simply execute git branch, and in this case, you can see - -186 -00:09:28,260 --> 00:09:31,090 -that there's only one branch, which is called master, and the star - -187 -00:09:31,090 --> 00:09:33,940 -there indicates that this is our current branch. So how do - -188 -00:09:33,940 --> 00:09:37,210 -we create a new branch? So we simply run the command - -189 -00:09:37,210 --> 00:09:41,010 -git branch and specify a name for the new branch, for example we'll - -190 -00:09:41,010 --> 00:09:44,110 -call it newBranch, to make it very explicit. At this point, - -191 -00:09:44,110 --> 00:09:46,940 -if we run git branch of course, we will have - -192 -00:09:46,940 --> 00:09:50,410 -a new branch plus master will still be our current branch. So - -193 -00:09:50,410 --> 00:09:52,780 -if you want to switch to the new branch, we will use - -194 -00:09:52,780 --> 00:09:56,510 -the git checkout command and specify the name of the branch that - -195 -00:09:56,510 --> 00:10:00,220 -we want to become our current branch. So when we run that, - -196 -00:10:00,220 --> 00:10:02,780 -git will tell us that we switched to the new branch. And - -197 -00:10:02,780 --> 00:10:05,920 -if we run git branch you will see that now the star - -198 -00:10:05,920 --> 00:10:09,130 -is next to newBranch because that's our current branch. There is a - -199 -00:10:09,130 --> 00:10:12,834 -shortcut for these two commands. If you run the command git - -200 -00:10:12,834 --> 00:10:17,240 -checkout specify the -b flag and then the name of - -201 -00:10:17,240 --> 00:10:19,790 -the new branch it will do both things at the same - -202 -00:10:19,790 --> 00:10:22,910 -time. It will create the new branch called testing in this - -203 -00:10:22,910 --> 00:10:25,760 -case, and then it will switch to new branch and then - -204 -00:10:25,760 --> 00:10:28,860 -it will tell you after executing the command. So now if - -205 -00:10:28,860 --> 00:10:31,290 -we look at the git branch output, you can see that - -206 -00:10:31,290 --> 00:10:35,090 -there is three branches and we are currently on the testing branch. - -207 -00:10:35,090 --> 00:10:37,300 -So now let's create a new file and just call it test - -208 -00:10:37,300 --> 00:10:41,180 -file, put some content in there, save it, we edit and commit it. - -209 -00:10:47,380 --> 00:10:50,280 -And as you can see, now in this current branch, we have our - -210 -00:10:50,280 --> 00:10:53,430 -testFile. So now let's switch to a different branch. So let's go back - -211 -00:10:53,430 --> 00:10:57,550 -to the master branch using the usual git checkout command. So now if - -212 -00:10:57,550 --> 00:11:00,310 -we do an ls, if we check the content of the current directory, - -213 -00:11:00,310 --> 00:11:03,140 -we can see that the testFile is not there, because of course, it's - -214 -00:11:03,140 --> 00:11:06,070 -not in this branch. so now let's assume that we are happy with - -215 -00:11:06,070 --> 00:11:09,260 -the testFile that we created, with the modification that we made on the - -216 -00:11:09,260 --> 00:11:13,080 -branch. And so we want to merge that branch with our master branch. - -217 -00:11:13,080 --> 00:11:16,180 -To do that we can call the git merge command and - -218 -00:11:16,180 --> 00:11:19,260 -we'll specify the branch that we want to merge with the current - -219 -00:11:19,260 --> 00:11:23,030 -one. So we will specify testing in this case. That will merge - -220 -00:11:23,030 --> 00:11:26,260 -the testing branch with the current branch, which is the master. Which - -221 -00:11:26,260 --> 00:11:29,200 -means that now the testfile is in my current working directory, - -222 -00:11:29,200 --> 00:11:32,180 -is in my current, Current branch. And if I run the branch, - -223 -00:11:32,180 --> 00:11:35,590 -you'll see that the testing branch is obviously still there, so let's - -224 -00:11:35,590 --> 00:11:38,370 -assume that we want to delete the testing branch at this point - -225 -00:11:38,370 --> 00:11:41,220 -because we don't need it anymore. We could simply execute - -226 -00:11:41,220 --> 00:11:44,940 -the branch -d which stands for -delete, specify - -227 -00:11:44,940 --> 00:11:47,670 -the name of the branch and this will eliminate that - -228 -00:11:47,670 --> 00:11:51,670 -branch as confirmed by running the command git branch or the - -229 -00:11:51,670 --> 00:11:55,030 -testing branch no longer shows up. So, something that might - -230 -00:11:55,030 --> 00:11:57,200 -happen when you merge a branch is, is that you - -231 -00:11:57,200 --> 00:12:00,000 -might have conflicts For example, in case you change the, - -232 -00:12:00,000 --> 00:12:03,600 -the same file into different branches. So, let's see an example - -233 -00:12:03,600 --> 00:12:06,730 -of that. So, we're going to check which branches we have, - -234 -00:12:06,730 --> 00:12:09,260 -so we have two branches, in this case, master and newBranch - -235 -00:12:09,260 --> 00:12:14,040 -Our current branch is master. Let's open this file called new - -236 -00:12:14,040 --> 00:12:19,310 -file and, add some content there. So now let's commit - -237 -00:12:19,310 --> 00:12:21,890 -this changes to the get to the local repository. Now - -238 -00:12:21,890 --> 00:12:24,600 -let's switch to the other branch and if you remember we - -239 -00:12:24,600 --> 00:12:26,900 -do this by running git checkout and the name of the - -240 -00:12:26,900 --> 00:12:29,150 -branch. And at this point we do the same operation here. - -241 -00:12:29,150 --> 00:12:32,090 -So we take this file and we change it here to. In this - -242 -00:12:32,090 --> 00:12:34,740 -case we have content that reflects the fact that we are. In the - -243 -00:12:34,740 --> 00:12:38,790 -new branch just for convenience. At this point, we also can move the - -244 -00:12:38,790 --> 00:12:41,870 -file here. The comment here is, of course, that this is the new - -245 -00:12:41,870 --> 00:12:44,800 -file in the new branch. So, at this point, what we have here - -246 -00:12:44,800 --> 00:12:47,980 -is that we have this file called newfile that has been modified - -247 -00:12:47,980 --> 00:12:51,320 -independently both in the master branch and in the new branch. So we - -248 -00:12:51,320 --> 00:12:55,090 -have a conflict. Right? So, now, let's switch back to the master branch. - -249 -00:12:55,090 --> 00:12:57,720 -So now, let's say we want to merge the two branches. So - -250 -00:12:57,720 --> 00:13:00,490 -since we are in master, we want to say that when I - -251 -00:13:00,490 --> 00:13:03,970 -merge the new branch into the current one. And when we run - -252 -00:13:03,970 --> 00:13:07,540 -that, we get an auto merging conflict. So at this point what - -253 -00:13:07,540 --> 00:13:10,390 -we can do, is that we can manually fix the conflict by - -254 -00:13:10,390 --> 00:13:13,910 -opening the new file. So the file that was showing the conflict. - -255 -00:13:13,910 --> 00:13:16,860 -So here you can see the kind of of information that you get - -256 -00:13:16,860 --> 00:13:20,340 -in the conflicted file. So it's telling you basically that there is - -257 -00:13:20,340 --> 00:13:23,760 -in the head which is the, the master this conflict. Which is new - -258 -00:13:23,760 --> 00:13:26,830 -file in master. Which is the content that we added of course. And - -259 -00:13:26,830 --> 00:13:30,190 -then you know, under, you know, the separator you can see the content - -260 -00:13:30,190 --> 00:13:32,650 -that was added in the new branch. Which is the contents in new - -261 -00:13:32,650 --> 00:13:35,990 -file, in new branch. So basically, what this is showing you is the - -262 -00:13:35,990 --> 00:13:39,150 -parts of the file that are conflicting. In this case, we only have - -263 -00:13:39,150 --> 00:13:41,990 -one line, is basically the whole file into two versions and you can - -264 -00:13:41,990 --> 00:13:45,460 -decide which version you want to keep or how you want to merge in - -265 -00:13:45,460 --> 00:13:48,260 -general, the two pieces. So here, let's assume that we - -266 -00:13:48,260 --> 00:13:52,140 -want to keep the content from the master. So what we're - -267 -00:13:52,140 --> 00:13:54,510 -going to do is we're going to elimate the annotations - -268 -00:13:54,510 --> 00:13:57,500 -and we're going to eliminate the additional content. We save this - -269 -00:13:57,500 --> 00:13:59,680 -file. So at this point what we need to do - -270 -00:13:59,680 --> 00:14:04,040 -is simply to commit the modified file (the merge file) and we - -271 -00:14:04,040 --> 00:14:07,440 -do that in the normal way. We call git add, specifying - -272 -00:14:07,440 --> 00:14:11,180 -the file, so git add newfile. Then we run git commit - -273 -00:14:11,180 --> 00:14:15,630 -newfile, and we specify in the comment for clarity that this is the merged file, - -274 -00:14:15,630 --> 00:14:19,530 -so that we performed a merge. And at this point we are done with our merge. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/14 - GIT Demo: Git + Eclipse - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/14 - GIT Demo: Git + Eclipse - lang_en_vs5.srt deleted file mode 100644 index b95877b..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/14 - GIT Demo: Git + Eclipse - lang_en_vs5.srt +++ /dev/null @@ -1,307 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,580 -Now that we saw some of the git basic - -2 -00:00:02,580 --> 00:00:05,689 -functionalities in practice, let's go a step further. If - -3 -00:00:05,689 --> 00:00:08,420 -you remember I mentioned before that many of these - -4 -00:00:08,420 --> 00:00:12,250 -version control systems are actually integrated into IDE's. So - -5 -00:00:12,250 --> 00:00:14,540 -what were going to look at next is what happens - -6 -00:00:14,540 --> 00:00:17,500 -if we put together git and eclipse. And the - -7 -00:00:17,500 --> 00:00:20,960 -result is egit, or EGit is a plug in - -8 -00:00:20,960 --> 00:00:25,520 -for the eclipse IDE that adds git functionality to eclipse. - -9 -00:00:25,520 --> 00:00:27,880 -So let's see how that works in practice. So - -10 -00:00:27,880 --> 00:00:31,400 -support for git is available in many IDE's including - -11 -00:00:31,400 --> 00:00:33,920 -Eclipse. And if you want to get github - -12 -00:00:33,920 --> 00:00:38,620 -for Eclipse, you should go to eclipse.github.com and you can - -13 -00:00:38,620 --> 00:00:41,445 -download the plugin. So this bring us to the - -14 -00:00:41,445 --> 00:00:44,530 -plugin page and you can use the provided URL - -15 -00:00:44,530 --> 00:00:47,060 -and directions to install the plugin. In this case - -16 -00:00:47,060 --> 00:00:49,945 -we're going to copy this address. So we're going to - -17 -00:00:49,945 --> 00:00:54,110 -Eclipse, Help, Install new software. We can click on Add - -18 -00:00:54,110 --> 00:00:56,810 -to add a new site from which to get software. We - -19 -00:00:56,810 --> 00:00:59,110 -paste the location that we just copied here. And we - -20 -00:00:59,110 --> 00:01:02,842 -can give it a descriptive name. In this case I'll just - -21 -00:01:02,842 --> 00:01:06,645 -call it Eclipse Git plugin. Then when I click okay, - -22 -00:01:06,645 --> 00:01:09,720 -Eclipse will go, and look for plugins. And as you can - -23 -00:01:09,720 --> 00:01:12,510 -see, there are two options. We can select both of them, - -24 -00:01:12,510 --> 00:01:15,180 -and click on next. You can see that the Eclipse identified - -25 -00:01:15,180 --> 00:01:18,330 -a few dependencies. You can click next and accept them. You can - -26 -00:01:18,330 --> 00:01:21,540 -accept the terms and conditions for the plug in, and then just - -27 -00:01:21,540 --> 00:01:25,730 -finish. And at this point, Eclipse will install the plugin, which might - -28 -00:01:25,730 --> 00:01:28,610 -take a little bit of time. So we're just going to speed it up. - -29 -00:01:28,610 --> 00:01:31,110 -And when Eclipse is done, you will get this prompt that will - -30 -00:01:31,110 --> 00:01:33,670 -tell you that you need to restart Eclipse for the plugin to - -31 -00:01:33,670 --> 00:01:36,990 -be actually installed. And at this point, you want to click yes. And - -32 -00:01:36,990 --> 00:01:40,550 -when Eclipse restarts. You'll have your plugin. We're going to go to the git - -33 -00:01:40,550 --> 00:01:44,030 -repository perspective that we can select here. And when we click - -34 -00:01:44,030 --> 00:01:47,160 -OK, you can see that our display will change. And since - -35 -00:01:47,160 --> 00:01:49,360 -we don't have any repository yet, we are provided with the - -36 -00:01:49,360 --> 00:01:53,620 -possibility of adding an existing local git repository, cloning a git repository - -37 -00:01:53,620 --> 00:01:56,330 -or creating a new local git repository. We're going to add an - -38 -00:01:56,330 --> 00:01:59,800 -existing local repository. This is the one that we created earlier, - -39 -00:01:59,800 --> 00:02:02,170 -so we'll select it and click finish, and you can see - -40 -00:02:02,170 --> 00:02:05,660 -that my project is now added to this set of git repositories. - -41 -00:02:05,660 --> 00:02:09,240 -Now let's check out the project from the repository by selecting import - -42 -00:02:09,240 --> 00:02:12,530 -project. And here you can import something as an existing project, you - -43 -00:02:12,530 --> 00:02:15,300 -can use a new project wizard, and in this case I chose - -44 -00:02:15,300 --> 00:02:18,680 -the option of importing as a general project. Then I click Next and - -45 -00:02:18,680 --> 00:02:20,870 -as you can see, I have the project name up there and - -46 -00:02:20,870 --> 00:02:24,630 -I can click Finish. So now, if I go to the resource perspective - -47 -00:02:24,630 --> 00:02:27,740 -by clicking here, I can see that the project has been added - -48 -00:02:27,740 --> 00:02:30,760 -to my set of projects. And I can see all the files within - -49 -00:02:30,760 --> 00:02:33,440 -the project, particularly, if I click on the README, you can see - -50 -00:02:33,440 --> 00:02:36,190 -that we have the Readme file that we created before. Same thing for - -51 -00:02:36,190 --> 00:02:38,930 -the test file. One thing I can do at this point, it - -52 -00:02:38,930 --> 00:02:41,070 -to execute different git commands, perform - -53 -00:02:41,070 --> 00:02:43,430 -different git operations by using the team - -54 -00:02:43,430 --> 00:02:47,010 -submenu in the contactual menu. And here there are several things - -55 -00:02:47,010 --> 00:02:50,650 -I can do including some advanced commands. And just to give it a - -56 -00:02:50,650 --> 00:02:53,200 -shot, I am going to try to click show local history, and this - -57 -00:02:53,200 --> 00:02:56,180 -shows the history of the file. For example it shows the author and - -58 -00:02:56,180 --> 00:02:59,200 -it shows when he was created, when he was authored. Lets make - -59 -00:02:59,200 --> 00:03:02,810 -some changes to this file by adding some new content. Okay. I saved - -60 -00:03:02,810 --> 00:03:05,160 -the file and now I can see that error that indicates that my - -61 -00:03:05,160 --> 00:03:08,620 -file was locally changed. So now if I go to the team menu, - -62 -00:03:08,620 --> 00:03:11,380 -you can see that I have the option to add to the index, - -63 -00:03:11,380 --> 00:03:14,686 -to stage the file. And now I got this new label that star - -64 -00:03:14,686 --> 00:03:17,980 -that shows the files added to the index. And now at this point, - -65 -00:03:17,980 --> 00:03:21,270 -I can go to the team menu again and I can actually commit - -66 -00:03:21,270 --> 00:03:25,480 -the file by selecting the corresponding entry. This allows me to enter - -67 -00:03:25,480 --> 00:03:28,390 -the commit message, exactly in the same way which I could do - -68 -00:03:28,390 --> 00:03:31,250 -that from the command line with the textual editor. And after I - -69 -00:03:31,250 --> 00:03:34,050 -put the comment there, I can actually commit. And now if we - -70 -00:03:34,050 --> 00:03:36,320 -look at the history view, we can see here that we have - -71 -00:03:36,320 --> 00:03:38,960 -a new version for the file that we just modified. And we - -72 -00:03:38,960 --> 00:03:42,250 -can also see the commit comment. And, at this point, if we - -73 -00:03:42,250 --> 00:03:46,450 -had remote repository we could push our changes to that remote repository - -74 -00:03:46,450 --> 00:03:49,330 -as well. Again, using the team submenu and - -75 -00:03:49,330 --> 00:03:52,170 -the contextual menu. And, speaking of remote repositories, what we - -76 -00:03:52,170 --> 00:03:55,230 -are going to see next is how to use GitHub - -77 -00:03:55,230 --> 00:03:58,640 -repositories which are remote repositories that are hosted on GitHub. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/15 - GIT Demo: Github - lang_en_vs3.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/15 - GIT Demo: Github - lang_en_vs3.srt deleted file mode 100644 index 5e842d7..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/15 - GIT Demo: Github - lang_en_vs3.srt +++ /dev/null @@ -1,239 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,820 -In the interview that we did at the beginning of the class, - -2 -00:00:02,820 --> 00:00:08,430 -we talked with John about GitHub, where GitHub is a Git hosting website, and - -3 -00:00:08,430 --> 00:00:11,390 -John told you all about it. For this class, we will be - -4 -00:00:11,390 --> 00:00:16,350 -using GitHub as our Git hosting. Let's see how GitHub works in practice and - -5 -00:00:16,350 --> 00:00:19,450 -let's see some of the common features offered by GitHub. - -6 -00:00:19,450 --> 00:00:24,010 -This is what we'll do in the third part of this Git demo. What I'm showing here - -7 -00:00:24,010 --> 00:00:28,550 -is the GitHub website and as I said, GitHub is a Git hosting website and - -8 -00:00:28,550 --> 00:00:32,950 -you can create an account on GitHub by simply signing up on the website. And - -9 -00:00:32,950 --> 00:00:36,100 -because we already have an account that we're simply going to sign in - -10 -00:00:36,100 --> 00:00:40,570 -to see what kind of functionality GitHub offers. And we're going to specify our - -11 -00:00:40,570 --> 00:00:44,190 -username and password. And as you can see on the GitHub website, - -12 -00:00:44,190 --> 00:00:47,695 -you can use this menu up on the right to create a new repository or - -13 -00:00:47,695 --> 00:00:51,500 -change the account settings. Let's click on our user profile. And - -14 -00:00:51,500 --> 00:00:54,270 -here we can see some statistics for our user. For - -15 -00:00:54,270 --> 00:00:59,190 -example, we can see statistic about our contributions and our repositories. So - -16 -00:00:59,190 --> 00:01:02,560 -now if we go to the Repositories view, we can create a new repository. - -17 -00:01:02,560 --> 00:01:07,117 -We give it a name. Let's call it myrepo. We can provide the description for - -18 -00:01:07,117 --> 00:01:11,680 -the repository. If we want, we can initialize the repository by adding a README - -19 -00:01:11,680 --> 00:01:15,860 -file. And even though we are not doing it right now, if you can see up here, - -20 -00:01:15,860 --> 00:01:19,820 -you can also add a license here on the right and it allows you - -21 -00:01:19,820 --> 00:01:24,831 -to choose from a set of predefined licenses. And you can also a .gitignore file, - -22 -00:01:24,831 --> 00:01:28,410 -which, in case you don't know what that is, it's a very convenient file that - -23 -00:01:28,410 --> 00:01:32,740 -will automatically exclude from the repositories file that should not be added. - -24 -00:01:32,740 --> 00:01:35,690 -So if you remember in the lesson we said there are things that you should not - -25 -00:01:35,690 --> 00:01:39,263 -add to the repositories. For example, derived files. So - -26 -00:01:39,263 --> 00:01:42,360 -here, using this menu, you can pick the type of project that you have. - -27 -00:01:42,360 --> 00:01:47,740 -For example, Java project or PHP project or many other kinds of projects. And - -28 -00:01:47,740 --> 00:01:50,510 -the GitHub will automatically add that file for you. - -29 -00:01:50,510 --> 00:01:53,680 -But let's skip that for now and simply create our repository. And - -30 -00:01:53,680 --> 00:01:58,000 -that creates a repository that contains the README file because that's what we - -31 -00:01:58,000 --> 00:02:02,580 -decided to do. And it also allows you to edit the README file by clicking on it. - -32 -00:02:02,580 --> 00:02:05,560 -It will bring up an editor and here you can write, you know, - -33 -00:02:05,560 --> 00:02:08,949 -for example, initial readme for your project. Then you can add your - -34 -00:02:08,949 --> 00:02:13,070 -commit message up there and then you can commit the changes to your README file. - -35 -00:02:13,070 --> 00:02:18,212 -The site also provides many other features, like, for example, creating issues, - -36 -00:02:18,212 --> 00:02:22,030 -pull requests, adding and editing a wiki, and also, you know, - -37 -00:02:22,030 --> 00:02:25,740 -defining other characteristics and settings for the repository. Now, if we go to - -38 -00:02:25,740 --> 00:02:30,500 -the repository, you can see that we also get the HTTPS link for the repository. - -39 -00:02:30,500 --> 00:02:35,870 -So this is the URL that you can use to clone your repository. If you remember, - -40 -00:02:35,870 --> 00:02:39,250 -with a git clone command, that's the URL that you can specify. So - -41 -00:02:39,250 --> 00:02:43,480 -let's try to do that and clone that repository. So we're going to copy this URL. - -42 -00:02:43,480 --> 00:02:48,300 -To do that, we're going to execute git clone and specify the URL that we - -43 -00:02:48,300 --> 00:02:52,310 -just copied. And you can see that the project was created, was cloned locally. - -44 -00:02:52,310 --> 00:02:55,760 -And if we go under myrepo, which is the name of the repository, you can see that - -45 -00:02:55,760 --> 00:02:59,570 -the README file that we created on GitHub is here. So if we create a new file, - -46 -00:02:59,570 --> 00:03:03,340 -which we're going to call again, newFile just to be clear. And then we - -47 -00:03:03,340 --> 00:03:07,920 -can add it, commit it, specifying as usual a commit message. So at this point, - -48 -00:03:07,920 --> 00:03:11,940 -we can push our locked out changes to the remote GitHub repository. And - -49 -00:03:11,940 --> 00:03:14,340 -because the GitHub repository is password protected, - -50 -00:03:14,340 --> 00:03:17,660 -we have to specify our login and password. And of course, if you - -51 -00:03:17,660 --> 00:03:21,770 -pass the wrong password, GitHub is not going to let you in. So let's try again. - -52 -00:03:21,770 --> 00:03:25,110 -Let's try to get the password right this time. I'm going to specify again, - -53 -00:03:25,110 --> 00:03:31,130 -my login and my password. At this point, the push is successful and - -54 -00:03:31,130 --> 00:03:35,220 -my changes are actually pushed to the master, which is the GitHub repository. - -55 -00:03:35,220 --> 00:03:39,020 -To double check that, let's go back to the GitHub repository and as you can see, - -56 -00:03:39,020 --> 00:03:42,470 -that the file that we added, newFile, is there as expected. And of course, - -57 -00:03:42,470 --> 00:03:45,880 -there's many more things that you can do on the GitHub website, so - -58 -00:03:45,880 --> 00:03:48,410 -I strongly encourage you to go and try out things. But - -59 -00:03:48,410 --> 00:03:51,980 -the key message here is that the GitHub is a Git hosting website where you - -60 -00:03:51,980 --> 00:03:54,990 -can get an account and create your remote repositories. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/16 - GIT Recap - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/16 - GIT Recap - lang_en_vs5.srt deleted file mode 100644 index b35fc59..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/16 - GIT Recap - lang_en_vs5.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,212 -Now that we are done with our demo, I just want - -2 -00:00:02,212 --> 00:00:05,910 -to go through a quick GIT recap to remind you of the - -3 -00:00:05,910 --> 00:00:08,720 -main commands that we saw, and what they do. And you can - -4 -00:00:08,720 --> 00:00:11,290 -also use these as sort of a reference when you work with - -5 -00:00:11,290 --> 00:00:13,940 -GIT. And by the way, if you look around and you do - -6 -00:00:13,940 --> 00:00:16,960 -a search, you can see that there's tons of examples on the - -7 -00:00:16,960 --> 00:00:22,170 -web of GitHub tutorials, videos, examples, manuals. So feel free to - -8 -00:00:22,170 --> 00:00:25,910 -explore. And I'm actually going to put some references to tutorials and - -9 -00:00:25,910 --> 00:00:29,100 -videos that I found particularly useful in the notes for the class. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/17 - GIT Recap: Local Repositories - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/17 - GIT Recap: Local Repositories - lang_en_vs5.srt deleted file mode 100644 index c29fae8..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/17 - GIT Recap: Local Repositories - lang_en_vs5.srt +++ /dev/null @@ -1,163 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,460 -So, let me start by recapping some of the operations that - -2 -00:00:02,460 --> 00:00:06,000 -we can perform on local repositories. I'm just going to list them - -3 -00:00:06,000 --> 00:00:09,240 -here and go through them by separating them into three main - -4 -00:00:09,240 --> 00:00:12,930 -categories. The first one is commands that, to create a repository and - -5 -00:00:12,930 --> 00:00:15,470 -notice that not all of these are git commands, that for - -6 -00:00:15,470 --> 00:00:18,710 -example, to create the repository, we would normally want to. Create a - -7 -00:00:18,710 --> 00:00:21,560 -directory, which is exactly what we did in our demo. We want - -8 -00:00:21,560 --> 00:00:25,310 -to go to that directory and then execute the git init statement, - -9 -00:00:25,310 --> 00:00:29,110 -which initializes that directory as a git repository. The second - -10 -00:00:29,110 --> 00:00:32,530 -category includes commands that we'll use to modify the content of - -11 -00:00:32,530 --> 00:00:35,280 -the repository. We saw that we can use git add - -12 -00:00:35,280 --> 00:00:39,190 -to add a specific file or a complete directory to our - -13 -00:00:39,190 --> 00:00:41,650 -index. So to the list of files that will be - -14 -00:00:41,650 --> 00:00:44,510 -committed, that will be considered in the next commit. Then we - -15 -00:00:44,510 --> 00:00:47,620 -can use commit to actually commit the changes that we - -16 -00:00:47,620 --> 00:00:50,374 -made to those files to our local repository, and we can - -17 -00:00:50,374 --> 00:00:54,030 -also use git move and git rm or git remove - -18 -00:00:54,030 --> 00:00:57,420 -to move files around and to remove files. Finally, the - -19 -00:00:57,420 --> 00:01:00,270 -third category is the category of commands that we can - -20 -00:01:00,270 --> 00:01:04,950 -use to inspect the concrete repository. And this set includes git - -21 -00:01:04,950 --> 00:01:06,960 -log, that we can use to see the log of - -22 -00:01:06,960 --> 00:01:09,970 -the repository, git status, that can give us important information - -23 -00:01:09,970 --> 00:01:12,810 -about the status of the file center repository. Git diff, - -24 -00:01:12,810 --> 00:01:15,500 -that we can use to see the differences between for example, - -25 -00:01:15,500 --> 00:01:19,160 -our local files. And the remote files. And finally git - -26 -00:01:19,160 --> 00:01:23,270 -show, that will show us information about our last commit. What - -27 -00:01:23,270 --> 00:01:25,940 -we committed, what were the changes and so on. And again, - -28 -00:01:25,940 --> 00:01:29,290 -we saw most or all of these commands in our demo. - -29 -00:01:29,290 --> 00:01:31,920 -So let me also remind you of a possible workflow. Which - -30 -00:01:31,920 --> 00:01:34,350 -again, we already saw but it's always good to go through - -31 -00:01:34,350 --> 00:01:37,670 -it once more. And remember that this is just an example. - -32 -00:01:37,670 --> 00:01:40,520 -It's just a possible workflow. You can do many different things, - -33 -00:01:40,520 --> 00:01:43,210 -you can have many different workflows with git. This is just - -34 -00:01:43,210 --> 00:01:45,980 -up to illustrate some of the things that you can do. So, - -35 -00:01:45,980 --> 00:01:49,430 -you might do some local editing. Execute git status to see what - -36 -00:01:49,430 --> 00:01:53,020 -files you changed. Then you might run a git diff on the - -37 -00:01:53,020 --> 00:01:56,230 -files to see what are these changes. And then you can run - -38 -00:01:56,230 --> 00:01:59,460 -git commit -a to commit your changes. And in case you - -39 -00:01:59,460 --> 00:02:02,520 -want to specify the commit message right away without having to go - -40 -00:02:02,520 --> 00:02:06,040 -through an editor, you can also add the -m parameter and - -41 -00:02:06,040 --> 00:02:08,110 -specify the message here on the same line. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/18 - GIT Recap: Remote Repositories - lang_en_vs3.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/18 - GIT Recap: Remote Repositories - lang_en_vs3.srt deleted file mode 100644 index 9afccc9..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/18 - GIT Recap: Remote Repositories - lang_en_vs3.srt +++ /dev/null @@ -1,59 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,960 -SImilarly, let's go through some commands that you can run on - -2 -00:00:02,960 --> 00:00:07,150 -remote repositories. First command is the command to copy a repository, - -3 -00:00:07,150 --> 00:00:10,840 -which is git clone in which you get a remote repository and you make a lot of - -4 -00:00:10,840 --> 00:00:14,850 -copy in your working directory. The repository can be specified as a URL. - -5 -00:00:14,850 --> 00:00:18,230 -It can be a local file, it can be specified using the HTTP or - -6 -00:00:18,230 --> 00:00:21,070 -the SSH protocol, and there's also other ways to do it. - -7 -00:00:21,070 --> 00:00:25,300 -This creates a complete local copy of the repository, as it says, and links it - -8 -00:00:25,300 --> 00:00:29,030 -to the remote repository, which is what is called the origin. And if you want, - -9 -00:00:29,030 --> 00:00:33,400 -you could also actually link to the repository, later. Then the normal way of - -10 -00:00:33,400 --> 00:00:37,800 -receiving changes from a repository is to perform a git pull command. And we saw - -11 -00:00:37,800 --> 00:00:42,345 -that you can also perform the same operation through two commands, get fetch and - -12 -00:00:42,345 --> 00:00:47,210 -git merge. In case you want to inspect the changes before actually merging them, - -13 -00:00:47,210 --> 00:00:49,550 -before actually getting them in your local copy. And - -14 -00:00:49,550 --> 00:00:52,940 -if you want to send changes that you have in your local repository to - -15 -00:00:52,940 --> 00:00:55,680 -a remote repository, you will use the git push command. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_en_vs2.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_en_vs2.srt deleted file mode 100644 index 9dec29b..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_en_vs2.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,095 -This is ultimately pretty simple. All you need to do is visit - -2 -00:00:03,095 --> 00:00:08,720 -github.com/join and set up a free GitHub account. If you already have a GitHub, - -3 -00:00:08,720 --> 00:00:11,870 -account you can sign in using your existing account. If you want to - -4 -00:00:11,870 --> 00:00:14,550 -use a separate identity for the class, feel free to set up a second one. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_pt_vs1.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_pt_vs1.srt deleted file mode 100644 index 6dc6f48..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/19 - GitHub Setup Assignment - lang_pt_vs1.srt +++ /dev/null @@ -1,19 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,095 -Na verdade é muito simples. -Só tens que ir a - -2 -00:00:03,095 --> 00:00:08,720 -github.com/join e criar uma conta grátis -no GitHub. Se já tiveres uma conta GitHub, - -3 -00:00:08,720 --> 00:00:11,870 -podes entrar com a tua conta. -Se quiseres - -4 -00:00:11,870 --> 00:00:14,550 -criar uma diferente para o curso, -podes criar uma segunda sem problemas. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/2 - Interview with John Britton - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/2 - Interview with John Britton - lang_en_vs5.srt deleted file mode 100644 index 999833f..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/2 - Interview with John Britton - lang_en_vs5.srt +++ /dev/null @@ -1,435 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,630 ->> And I thought that the best way to break the ice on version - -2 -00:00:02,630 --> 00:00:04,970 -control systems and Git and some other - -3 -00:00:04,970 --> 00:00:07,939 -related concepts was to interview John Britton who - -4 -00:00:07,939 --> 00:00:11,840 -works with GitHub. So let's go and see what John has to say about - -5 -00:00:11,840 --> 00:00:14,120 -Git, about version control systems in general, - -6 -00:00:14,120 --> 00:00:17,809 -and about GitHub. John is in Tapei, if I'm not wrong. - -7 -00:00:17,809 --> 00:00:18,610 ->> That's correct. - -8 -00:00:18,610 --> 00:00:20,320 ->> Okay so we're, you know we couldn't - -9 -00:00:20,320 --> 00:00:22,570 -go there so we're interviewing him remotely. And I - -10 -00:00:22,570 --> 00:00:25,490 -want, I just want to thank you so much and John for agreeing to talk to us. - -11 -00:00:25,490 --> 00:00:27,940 ->> Thank you very much for having me it was my pleasure. - -12 -00:00:27,940 --> 00:00:30,560 ->> And, I'm just going to ask, a few - -13 -00:00:30,560 --> 00:00:32,938 -general questions because John is an expert on, - -14 -00:00:32,938 --> 00:00:36,270 -Git and GitHub. John is a developer and - -15 -00:00:36,270 --> 00:00:38,550 -a community builder is active in both the - -16 -00:00:38,550 --> 00:00:42,200 -open source and the open education areas. And - -17 -00:00:42,200 --> 00:00:44,860 -as an educational liaison we have, is working - -18 -00:00:44,860 --> 00:00:47,580 -to improve Computer Science education by bringing the - -19 -00:00:47,580 --> 00:00:51,460 -principles of open source into the classroom. And - -20 -00:00:51,460 --> 00:00:53,160 -I'm going to start with an general question, - -21 -00:00:53,160 --> 00:00:55,320 -which is what is a version control system? - -22 -00:00:55,320 --> 00:00:57,960 ->> So, a version control system is - -23 -00:00:57,960 --> 00:01:00,360 -a tool that software developers use. Anybody - -24 -00:01:00,360 --> 00:01:02,560 -who's doing you know, working with digital - -25 -00:01:02,560 --> 00:01:06,540 -assets, digital projects can also use for - -26 -00:01:06,540 --> 00:01:11,320 -keeping track of, you know, revisions of your project, and when I say revisions, I - -27 -00:01:11,320 --> 00:01:16,850 -mean essentially snapshots of your project over time. So you can imagine doing - -28 -00:01:16,850 --> 00:01:19,720 -some work and then every so often, be it, every couple of - -29 -00:01:19,720 --> 00:01:23,799 -hours, every couple of days, saving a permanent snapshot of your project. - -30 -00:01:24,880 --> 00:01:26,650 ->> Why is this useful? I understand that - -31 -00:01:26,650 --> 00:01:28,720 -it is nice to take a snapshot of your - -32 -00:01:28,720 --> 00:01:30,070 -project, but what did you do with the - -33 -00:01:30,070 --> 00:01:33,420 -snapshot afterwards? I think the most immediately obvious benefit - -34 -00:01:33,420 --> 00:01:36,340 -to having snapshots of your project to keeping - -35 -00:01:36,340 --> 00:01:38,280 -revisions is that you can go back. If you - -36 -00:01:38,280 --> 00:01:40,190 -have ever worked on a project and got to - -37 -00:01:40,190 --> 00:01:41,940 -a point where you solved a bunch of your - -38 -00:01:41,940 --> 00:01:45,330 -problems, and there is just one more step to do. And - -39 -00:01:45,330 --> 00:01:47,640 -you start working on trying to solve that last step, and - -40 -00:01:47,640 --> 00:01:51,350 -you break things, you make it worse then it was an - -41 -00:01:51,350 --> 00:01:54,420 -hour ago. At that point its easier to just go back - -42 -00:01:54,420 --> 00:01:56,780 -to what you had then trying to figure out what you - -43 -00:01:56,780 --> 00:01:59,320 -broke. So you can always go back in time, and the - -44 -00:01:59,320 --> 00:02:02,660 -other big one is being able to collaborate with multiple people, - -45 -00:02:02,660 --> 00:02:07,450 -so its pretty seldom these days that you. Work on a production - -46 -00:02:07,450 --> 00:02:09,860 -totally on your own. It's most common to work in, you - -47 -00:02:09,860 --> 00:02:12,993 -know, in teams and small groups. And so, using a revision - -48 -00:02:12,993 --> 00:02:16,340 -control system allows you to collaborate with other people. And make - -49 -00:02:16,340 --> 00:02:19,060 -sure that you don't step on each other's toes as you're working. - -50 -00:02:19,060 --> 00:02:21,310 ->> Alright, that's great, because those are exactly some of the - -51 -00:02:21,310 --> 00:02:25,250 -topics that we're going to cover in the lesson. And so since we're - -52 -00:02:25,250 --> 00:02:28,470 -going to talk about the specifics of version control system which is - -53 -00:02:28,470 --> 00:02:32,660 -Git and you're definitely an expert in, in Git. So what would - -54 -00:02:32,660 --> 00:02:36,510 -you say is specifically special about Git? What characterizes it - -55 -00:02:36,510 --> 00:02:39,940 -and how does it compare to other version control systems. - -56 -00:02:39,940 --> 00:02:43,140 ->> So if any of you have used version control systems before, you - -57 -00:02:43,140 --> 00:02:47,850 -may have heard of something like subversion, CVS, or maybe a commercial solution - -58 -00:02:47,850 --> 00:02:53,550 -like ProForce. I think the main important characteristics of Git are first that - -59 -00:02:53,550 --> 00:02:56,050 -it's open source. And the second, - -60 -00:02:56,050 --> 00:02:59,030 -that it's a distributed version control system. - -61 -00:02:59,030 --> 00:03:00,430 -So what that means, the distributed version - -62 -00:03:00,430 --> 00:03:04,260 -control system is essentially a system for tracking - -63 -00:03:04,260 --> 00:03:07,700 -revisions of your software that doesn't have any - -64 -00:03:07,700 --> 00:03:11,730 -central repository. So the biggest characteristic is that - -65 -00:03:11,730 --> 00:03:14,520 -I can do my work and you can also work on the same project at - -66 -00:03:14,520 --> 00:03:16,900 -the same time without communicating with each other - -67 -00:03:16,900 --> 00:03:19,650 -and without communicating to a central system. - -68 -00:03:19,650 --> 00:03:24,190 ->> Okay, great. And so now that we saw what Git is, what is - -69 -00:03:24,190 --> 00:03:26,050 -GitHub and how does it fit into - -70 -00:03:26,050 --> 00:03:29,320 -this picture of the distributed, revision control system? - -71 -00:03:29,320 --> 00:03:34,800 ->> So GitHub is, the world's largest code host, and we essentially have a - -72 -00:03:34,800 --> 00:03:36,940 -website where you can collaborate with people - -73 -00:03:36,940 --> 00:03:39,950 -when you're writing code. There's two ways you - -74 -00:03:39,950 --> 00:03:43,650 -can use GitHub. You can use it publicly for open source and you can use - -75 -00:03:43,650 --> 00:03:49,660 -it in private within your team, or your company, or within your class. And, Git - -76 -00:03:49,660 --> 00:03:53,960 -Hub started out just as a way to host your Git repositories. But it's - -77 -00:03:53,960 --> 00:03:56,000 -actually grown into quite a bit more. It's - -78 -00:03:56,000 --> 00:03:59,820 -an entire collaboration system around your code. - -79 -00:03:59,820 --> 00:04:00,580 ->> How many users do you have? - -80 -00:04:00,580 --> 00:04:03,620 ->> I would say that we're approaching five million. - -81 -00:04:03,620 --> 00:04:05,570 -I don't know the exact number. We're definitely more - -82 -00:04:05,570 --> 00:04:08,080 -than four million right now. But yeah, I'd say - -83 -00:04:08,080 --> 00:04:10,330 -somewhere, somewhere close to between four and five million. - -84 -00:04:10,330 --> 00:04:14,750 ->> So that's a lot space I'd guess. Terabytes of disk - -85 -00:04:14,750 --> 00:04:15,840 -space, I would imagine. - -86 -00:04:15,840 --> 00:04:19,170 ->> There are a lot of GIT repositories on, on our servers. - -87 -00:04:19,170 --> 00:04:21,180 ->> Something else you want to say? I - -88 -00:04:21,180 --> 00:04:23,920 -guess that the when taking about GitHub there's one - -89 -00:04:23,920 --> 00:04:26,110 -thing that you kind of can't leave out and - -90 -00:04:26,110 --> 00:04:28,670 -that's that's a feature that's called a pull request. - -91 -00:04:28,670 --> 00:04:31,090 -So when you're using GitHub, you can share - -92 -00:04:31,090 --> 00:04:34,940 -your Git repository, do some work, and actually do - -93 -00:04:34,940 --> 00:04:37,880 -do a code review. Of proposed changes which - -94 -00:04:37,880 --> 00:04:39,770 -is what we call a pull request on github.com. - -95 -00:04:39,770 --> 00:04:42,790 -Essentially what it lets you do is have a discussion - -96 -00:04:42,790 --> 00:04:46,320 -about a set of proposed changes and leave feedback in - -97 -00:04:46,320 --> 00:04:48,870 -line with the code. You could say for example, this - -98 -00:04:48,870 --> 00:04:51,670 -method needs to be re-factored or I think I found if - -99 -00:04:51,670 --> 00:04:54,830 -off by one error here, just different kinds of feedback - -100 -00:04:54,830 --> 00:04:59,120 -so that before you totally integrate some proposed changes. You have, - -101 -00:04:59,120 --> 00:05:01,180 -kind of a conversation about what your code. And I - -102 -00:05:01,180 --> 00:05:03,050 -think that's really valuable when you are working in a team. - -103 -00:05:03,050 --> 00:05:05,510 ->> Thank you, John, that was very informative and - -104 -00:05:05,510 --> 00:05:07,440 -thanks again for taking the time to talk to us. - -105 -00:05:07,440 --> 00:05:10,160 ->> No problem, thanks for having me. I'll talk to you soon. - -106 -00:05:10,160 --> 00:05:13,990 ->> Let's thank again John for enlightening us - -107 -00:05:13,990 --> 00:05:17,350 -on some aspects of version control systems, Git and - -108 -00:05:17,350 --> 00:05:19,410 -GitHub. And now, let's go over some of the - -109 -00:05:19,410 --> 00:05:21,650 -topics that we discussed with John to recap them. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/3 - Version Control System Introduction - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/3 - Version Control System Introduction - lang_en_vs5.srt deleted file mode 100644 index be0515b..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/3 - Version Control System Introduction - lang_en_vs5.srt +++ /dev/null @@ -1,207 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,080 -So first of all, what is a version - -2 -00:00:02,080 --> 00:00:05,550 -control system? A version control system or VCS, - -3 -00:00:05,550 --> 00:00:07,670 -is a system that allows you to manage - -4 -00:00:07,670 --> 00:00:11,180 -multiple revisions of the same unit of information. For - -5 -00:00:11,180 --> 00:00:14,330 -example of documents, of source files or any - -6 -00:00:14,330 --> 00:00:17,380 -other item of that sort. And as the graphical - -7 -00:00:17,380 --> 00:00:21,240 -depiction shows, a VCS allows a multiple actors. - -8 -00:00:21,240 --> 00:00:25,020 -Here we have four, to cooperate and share files. - -9 -00:00:25,020 --> 00:00:26,980 -Now, let's drill into this concept in a little - -10 -00:00:26,980 --> 00:00:29,720 -more detail. And let's do that by discussing why - -11 -00:00:29,720 --> 00:00:32,870 -is VCS useful, especially in the context of software - -12 -00:00:32,870 --> 00:00:35,790 -engineering and of software development. So first of all, - -13 -00:00:35,790 --> 00:00:39,570 -using a version control system enforces discipline, because it - -14 -00:00:39,570 --> 00:00:43,030 -manages the process by which the control of items - -15 -00:00:43,030 --> 00:00:46,720 -passes from one person to another. Another important aspect - -16 -00:00:46,720 --> 00:00:51,170 -of VCS is that it allows you for archiving versions. - -17 -00:00:51,170 --> 00:00:54,330 -So you can store subsequent versions of source controlled - -18 -00:00:54,330 --> 00:00:57,450 -items into a VCS. And not only you can - -19 -00:00:57,450 --> 00:01:00,450 -store versions, you can also maintain a lot of - -20 -00:01:00,450 --> 00:01:03,480 -interesting and important historical information - -21 -00:01:03,480 --> 00:01:05,810 -about these versions. For example, - -22 -00:01:05,810 --> 00:01:08,070 -a VCL will store information such as, who is - -23 -00:01:08,070 --> 00:01:11,270 -the author for this specific version stored in the system. - -24 -00:01:11,270 --> 00:01:13,820 -Or, for another example, on what day and what - -25 -00:01:13,820 --> 00:01:16,260 -time that version was stored. And a lot of other - -26 -00:01:16,260 --> 00:01:19,240 -interesting information about the specific version of the - -27 -00:01:19,240 --> 00:01:21,600 -item. Information that you can then retrieve and for - -28 -00:01:21,600 --> 00:01:25,040 -example, use to compare versions. Obviously, the fact of - -29 -00:01:25,040 --> 00:01:27,970 -having a central repository in which all these items - -30 -00:01:27,970 --> 00:01:31,350 -are stored enables collaboration, so people can more easily - -31 -00:01:31,350 --> 00:01:35,510 -share data, share files, share documents through the use - -32 -00:01:35,510 --> 00:01:37,950 -of VCS. And I'm sure that you all had - -33 -00:01:37,950 --> 00:01:41,320 -the experience of deleting a file by mistake or - -34 -00:01:41,320 --> 00:01:43,860 -modifying a file in the wrong way, or in the - -35 -00:01:43,860 --> 00:01:47,830 -most common case of changing something in your code for instance. - -36 -00:01:47,830 --> 00:01:50,490 -And breaking something and not being able to go back - -37 -00:01:50,490 --> 00:01:53,630 -to a version that was working. Not remembering, for example, what - -38 -00:01:53,630 --> 00:01:56,130 -is that you changed that broke the code. In all - -39 -00:01:56,130 --> 00:01:59,850 -these cases a version control system can be extremely useful because - -40 -00:01:59,850 --> 00:02:03,330 -it will allow you to recover from this accidental deletions - -41 -00:02:03,330 --> 00:02:06,690 -or edits. And for example, to go back of yesterdays version - -42 -00:02:06,690 --> 00:02:09,949 -that was working perfectly, and also to compare, for example, yesterdays - -43 -00:02:09,949 --> 00:02:12,920 -version with today version and see what is that you changed. - -44 -00:02:12,920 --> 00:02:16,000 -Finally, a version control system will normally also allow you to - -45 -00:02:16,000 --> 00:02:20,460 -conserve and save disk space on both the source control client - -46 -00:02:20,460 --> 00:02:23,880 -and on the server. Why? Well, for instance because it's centralizing - -47 -00:02:23,880 --> 00:02:26,570 -the management of the version. So instead of having many copies - -48 -00:02:26,570 --> 00:02:29,480 -spread around, you'll have only one central point where these copies - -49 -00:02:29,480 --> 00:02:32,240 -are stored or a few points where these copies are stored. - -50 -00:02:32,240 --> 00:02:34,330 -In addition, version control system often - -51 -00:02:34,330 --> 00:02:37,470 -uses efficient algorithms to store these changes. - -52 -00:02:37,470 --> 00:02:41,310 -And therefore, you can keep many versions without taking up too much space. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/4 - VCS Quiz - lang_en_vs4.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/4 - VCS Quiz - lang_en_vs4.srt deleted file mode 100644 index 26d9c55..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/4 - VCS Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,430 -Now before we continue, and we look at more details - -2 -00:00:02,430 --> 00:00:04,400 -of version control systems, I want to ask you a - -3 -00:00:04,400 --> 00:00:07,230 -quick question about VCS. I want to know whether you - -4 -00:00:07,230 --> 00:00:10,190 -have used a version control system before, and if so, - -5 -00:00:10,190 --> 00:00:12,090 -which one or which ones. I'm going to list in - -6 -00:00:12,090 --> 00:00:15,260 -here some of the most commonly used version control systems, - -7 -00:00:15,260 --> 00:00:18,840 -like CVS, Subversion, GIT, and I'm also allowing you to - -8 -00:00:18,840 --> 00:00:22,640 -specify other VCS in case you have used different ones. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/5 - VCS Quiz Solution - lang_en_vs7.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/5 - VCS Quiz Solution - lang_en_vs7.srt deleted file mode 100644 index 1a380a5..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/5 - VCS Quiz Solution - lang_en_vs7.srt +++ /dev/null @@ -1,11 +0,0 @@ -1 -00:00:00,130 --> 00:00:03,030 -And of course there's no right answer for this. I just wanted to collect some - -2 -00:00:03,030 --> 00:00:05,020 -statistics. To see what kind of previous - -3 -00:00:05,020 --> 00:00:07,100 -experience you have with this kind of systems. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/6 - Essential Actions - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/6 - Essential Actions - lang_en_vs5.srt deleted file mode 100644 index 5159d9b..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/6 - Essential Actions - lang_en_vs5.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,220 -What I want to do next, is to look at how - -2 -00:00:02,220 --> 00:00:05,780 -version control systems actually work. We saw what they are. We - -3 -00:00:05,780 --> 00:00:08,130 -saw why they are useful. But how do they actually work? - -4 -00:00:08,130 --> 00:00:11,460 -And we're going to do that by starting from some essential - -5 -00:00:11,460 --> 00:00:15,400 -actions that version control systems perform. The first one is the - -6 -00:00:15,400 --> 00:00:18,920 -addition of files. So, when you use a version control system, - -7 -00:00:18,920 --> 00:00:22,280 -you can add a file to the repository. And at that - -8 -00:00:22,280 --> 00:00:25,400 -point the file will be accessible to other people who have access - -9 -00:00:25,400 --> 00:00:28,640 -to the repository. And now the fundamental action is commit. - -10 -00:00:28,640 --> 00:00:31,230 -When you change a file, a file that is already in - -11 -00:00:31,230 --> 00:00:33,610 -the repository, when you make some local changes to a - -12 -00:00:33,610 --> 00:00:36,430 -file that is already in the repository, you want then to - -13 -00:00:36,430 --> 00:00:39,460 -commit your changes to the central repository, so they can - -14 -00:00:39,460 --> 00:00:43,990 -become visible to all of the other users on the repository. Finally, - -15 -00:00:43,990 --> 00:00:47,770 -another fundamental action is the action of updating a file. If - -16 -00:00:47,770 --> 00:00:50,650 -we have a repository and someone else can modify the files - -17 -00:00:50,650 --> 00:00:52,800 -in the repository, I want to be able to get - -18 -00:00:52,800 --> 00:00:55,550 -the changes that other people made to the files in the - -19 -00:00:55,550 --> 00:00:58,980 -repository. And these are just three of the basic actions, but - -20 -00:00:58,980 --> 00:01:01,870 -there are many, many more. And we'll see several of those. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/7 - Example Workflow - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/7 - Example Workflow - lang_en_vs5.srt deleted file mode 100644 index c2f58df..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/7 - Example Workflow - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,830 -Before looking at additional actions, though, I would like to - -2 -00:00:02,830 --> 00:00:06,770 -see what is the basic workflow in a version control system - -3 -00:00:06,770 --> 00:00:09,370 -using the three actions that we just saw. And to - -4 -00:00:09,370 --> 00:00:11,760 -do that I'm going to use two of our friends, Brad - -5 -00:00:11,760 --> 00:00:14,590 -and Janet. So we have Janet here, Brad, and a - -6 -00:00:14,590 --> 00:00:18,440 -VCS that they are using. Now imagine that Janet creates a - -7 -00:00:18,440 --> 00:00:23,020 -file called foo.txt and puts some information in the file. - -8 -00:00:23,020 --> 00:00:25,250 -At that point she might want to add the file to - -9 -00:00:25,250 --> 00:00:28,340 -the repository and to commit it so that her changes - -10 -00:00:28,340 --> 00:00:31,210 -and the file get to the central repository. And when she - -11 -00:00:31,210 --> 00:00:33,900 -adds and commit, that's exactly what will happen, in foo - -12 -00:00:33,900 --> 00:00:36,870 -will be come available here, and will be accessible to the - -13 -00:00:36,870 --> 00:00:40,330 -other users. In this case it'll be accessible to Brad. - -14 -00:00:40,330 --> 00:00:44,190 -If Brett were to run an update command, what will happen - -15 -00:00:44,190 --> 00:00:47,800 -is that the file foo.txt will be copied on the local - -16 -00:00:47,800 --> 00:00:50,460 -work space of Brad and Brad will be able to access - -17 -00:00:50,460 --> 00:00:52,980 -the file. At this point Brad might want to modify - -18 -00:00:52,980 --> 00:00:57,110 -the file, for example add something to this existing file. - -19 -00:00:57,110 --> 00:00:59,410 -After doing that, he also may want to share the - -20 -00:00:59,410 --> 00:01:02,900 -updated file with Janet. To do that, he will commit the - -21 -00:01:02,900 --> 00:01:06,070 -file and the result will be exactly the same of - -22 -00:01:06,070 --> 00:01:09,470 -when Janet committed her file. That the updated file will - -23 -00:01:09,470 --> 00:01:11,890 -be sent to the repository and the repository will store - -24 -00:01:11,890 --> 00:01:15,570 -that information and make it available for other users. So now, - -25 -00:01:15,570 --> 00:01:18,290 -if Janet performs an update, she will get the - -26 -00:01:18,290 --> 00:01:21,860 -new version of foo.txt with the additional information that was - -27 -00:01:21,860 --> 00:01:24,950 -added by Brad. And we will see all of this - -28 -00:01:24,950 --> 00:01:27,350 -in action in our next demo in a few minutes. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/8 - "Don'ts" in VCS - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/8 - "Don'ts" in VCS - lang_en_vs5.srt deleted file mode 100644 index f5d27fb..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/8 - "Don'ts" in VCS - lang_en_vs5.srt +++ /dev/null @@ -1,175 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,020 -Before getting to the demo, I want to say a few - -2 -00:00:02,020 --> 00:00:06,550 -more things. In particular, I discuss the main don'ts in VCS. So, - -3 -00:00:06,550 --> 00:00:09,110 -what are some things that you don't want to do, and - -4 -00:00:09,110 --> 00:00:12,687 -you should not do, when you're using a version control system? And - -5 -00:00:12,687 --> 00:00:15,382 -I'm going to mention two, in particular, because these are two - -6 -00:00:15,382 --> 00:00:18,028 -that I witnessed several times when I was teaching this class and - -7 -00:00:18,028 --> 00:00:21,820 -also when collaborating with other people. So, there are two kinds - -8 -00:00:21,820 --> 00:00:25,460 -of resources that you don't want to add to a VCS normally. - -9 -00:00:25,460 --> 00:00:29,070 -One is derived files. For example an executable that is - -10 -00:00:29,070 --> 00:00:31,930 -derived by compiling a set of source files, where the - -11 -00:00:31,930 --> 00:00:34,480 -source files all already in the repository. At that point, - -12 -00:00:34,480 --> 00:00:37,680 -there is no reason to also add the executable file in - -13 -00:00:37,680 --> 00:00:41,150 -the repository. So in general, any executable file should not - -14 -00:00:41,150 --> 00:00:44,570 -be added to repository. The second class of files that I - -15 -00:00:44,570 --> 00:00:47,760 -want to mention is these bulky binary files. If you - -16 -00:00:47,760 --> 00:00:50,600 -have one such file, it is normally not a good idea - -17 -00:00:50,600 --> 00:00:53,430 -to store them under a version control system, to store them - -18 -00:00:53,430 --> 00:00:56,670 -in the repository. There might be exceptions to these rules, but in - -19 -00:00:56,670 --> 00:00:59,070 -general, these are the kind of files that you want to - -20 -00:00:59,070 --> 00:01:02,540 -keep local, and you don't want to put in the VCS repository. - -21 -00:01:02,540 --> 00:01:06,500 -Another typical mistake, and that happens all the time, especially to - -22 -00:01:06,500 --> 00:01:10,650 -novice users of VCS. Is that you get your file from VCS - -23 -00:01:10,650 --> 00:01:13,120 -and so you get your local copy of the file that - -24 -00:01:13,120 --> 00:01:16,270 -was in the VCS, and you want to make some changes, and - -25 -00:01:16,270 --> 00:01:20,090 -before making the changes you decided, no, no let me actually save - -26 -00:01:20,090 --> 00:01:22,410 -a local copy of the file, and I'm going to work on - -27 -00:01:22,410 --> 00:01:24,950 -that one. Or let me save it before I modify it, or - -28 -00:01:24,950 --> 00:01:28,350 -let take a snap shot of a whole tree of files. Just because - -29 -00:01:28,350 --> 00:01:30,830 -I don't really trust the fact that VCS is going to be - -30 -00:01:30,830 --> 00:01:33,170 -able to help and is going to be able to recover from possible - -31 -00:01:33,170 --> 00:01:36,980 -mistakes. Never ever do that. I have seen that done many times, - -32 -00:01:36,980 --> 00:01:41,570 -and it always leads to disasters. First of all it is useless, and - -33 -00:01:41,570 --> 00:01:44,000 -second it's risky. Because then what happens is that at - -34 -00:01:44,000 --> 00:01:46,610 -the time in which you have to turn in your assignment, - -35 -00:01:46,610 --> 00:01:48,330 -in the case you are doing an assignment, but even in - -36 -00:01:48,330 --> 00:01:50,740 -more serious situation, when you have to turn in your code, - -37 -00:01:50,740 --> 00:01:54,620 -for example to your colleagues. You always end up being confused - -38 -00:01:54,620 --> 00:01:59,010 -about which is the version that you're really using. So absolutely - -39 -00:01:59,010 --> 00:02:03,262 -no local copies. No local redundancy when you're using a version - -40 -00:02:03,262 --> 00:02:06,798 -control system. Trust the version control system, and trust the version - -41 -00:02:06,798 --> 00:02:09,280 -control system to be able to manage your versions. You - -42 -00:02:09,280 --> 00:02:13,350 -can always save it, commit it, retrieve previous versions, and you'll - -43 -00:02:13,350 --> 00:02:15,530 -be able to do everything that you can do by copying - -44 -00:02:15,530 --> 00:02:19,240 -the file yourself, and even more. So again, try the VCS. diff --git a/usth/ICT2.7/P1L4 Version Control Subtitles/9 - Two Main Types of VCS - lang_en_vs5.srt b/usth/ICT2.7/P1L4 Version Control Subtitles/9 - Two Main Types of VCS - lang_en_vs5.srt deleted file mode 100644 index 3c6eba4..0000000 --- a/usth/ICT2.7/P1L4 Version Control Subtitles/9 - Two Main Types of VCS - lang_en_vs5.srt +++ /dev/null @@ -1,163 +0,0 @@ -1 -00:00:00,160 --> 00:00:01,970 -Something else I want to mention is that there - -2 -00:00:01,970 --> 00:00:05,460 -are many different version control systems but we can classify - -3 -00:00:05,460 --> 00:00:09,250 -them normally in two main types: centralized VCS's and - -4 -00:00:09,250 --> 00:00:13,230 -decentralized VCS's. So what is the difference between these two? - -5 -00:00:13,230 --> 00:00:16,750 -Let's use again our friends Janet and Brett. - -6 -00:00:16,750 --> 00:00:19,510 -In the case of a centralized version control system - -7 -00:00:19,510 --> 00:00:22,290 -there is a single centralized, as the name says, - -8 -00:00:22,290 --> 00:00:25,230 -repository. On which they are commiting their files. So when - -9 -00:00:25,230 --> 00:00:27,290 -Janet commits a file. The file will go from - -10 -00:00:27,290 --> 00:00:30,390 -her local working directory to the repository, and the same - -11 -00:00:30,390 --> 00:00:33,520 -will happen to Brett. The decentralized system is a little - -12 -00:00:33,520 --> 00:00:37,310 -more interesting because in this case, they will both have - -13 -00:00:37,310 --> 00:00:40,790 -sort of a local repository in which they can commit - -14 -00:00:40,790 --> 00:00:43,970 -their changes. So they can commit changes without the other - -15 -00:00:43,970 --> 00:00:47,940 -users of the VCS being able to see these changes. - -16 -00:00:47,940 --> 00:00:50,300 -And when they're happy with the version. And when they're - -17 -00:00:50,300 --> 00:00:53,900 -ready to release the version, they can push it to a central - -18 -00:00:53,900 --> 00:00:56,840 -repository. And at that point, it will become available to the other - -19 -00:00:56,840 --> 00:01:01,100 -users of the repository. To the other users of the VCS. There - -20 -00:01:01,100 --> 00:01:02,870 -are several advantages in a distributive - -21 -00:01:02,870 --> 00:01:04,300 -system. I'm just going to mention a few, - -22 -00:01:04,300 --> 00:01:07,520 -because there are really many. One is the fact of having this - -23 -00:01:07,520 --> 00:01:10,570 -local version. If you used VCS before, I'm sure you've been in - -24 -00:01:10,570 --> 00:01:13,280 -the situation in which you want to kind of take a snapshot - -25 -00:01:13,280 --> 00:01:15,820 -of what you have. But you don't want that snapshot to be available - -26 -00:01:15,820 --> 00:01:18,200 -to the other users. Because it's still not ready to be - -27 -00:01:18,200 --> 00:01:21,240 -released, to be looked up. If you're using a centralized system, - -28 -00:01:21,240 --> 00:01:23,140 -there's really no way you can do that, unless you make - -29 -00:01:23,140 --> 00:01:25,150 -a local copy, which is something we said you don't want - -30 -00:01:25,150 --> 00:01:28,625 -to do. With a distributor, with a decentralized VCS you can - -31 -00:01:28,625 --> 00:01:32,444 -commit your local changes here, in your local repository, and you - -32 -00:01:32,444 --> 00:01:37,030 -can push them to the central repository only when you're ready. - -33 -00:01:37,030 --> 00:01:40,870 -Another big advantage, is that you can use multiple remote repository. - -34 -00:01:40,870 --> 00:01:43,210 -In fact, centralized is not the right name for this - -35 -00:01:43,210 --> 00:01:45,980 -one. This is just a remote repository, and I can have - -36 -00:01:45,980 --> 00:01:48,910 -more than one. For example, Brad might want to push - -37 -00:01:48,910 --> 00:01:52,150 -to another remote repository. As well. For instance, this could be - -38 -00:01:52,150 --> 00:01:55,940 -a repository where the files are accessible for wider distribution. - -39 -00:01:55,940 --> 00:01:59,620 -Imagine developing a software system in which a team is sharing - -40 -00:01:59,620 --> 00:02:02,930 -internal versions, and then only some of these versions are actually - -41 -00:02:02,930 --> 00:02:06,080 -pushed to the repository that is seeable to the whole world. diff --git a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/1 - Gathering Requirements - lang_en_vs3.srt b/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/1 - Gathering Requirements - lang_en_vs3.srt deleted file mode 100644 index c01c859..0000000 --- a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/1 - Gathering Requirements - lang_en_vs3.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,270 --> 00:00:02,969 -Gathering requirements is one of the most difficult tasks a software - -2 -00:00:02,969 --> 00:00:07,010 -engineer faces. In industry, you may gather requirements from end users, - -3 -00:00:07,010 --> 00:00:09,580 -external clients, or from co-workers in other areas of your own - -4 -00:00:09,580 --> 00:00:14,320 -company. Occasionally, you may receive a well documented set of requirements. - -5 -00:00:14,320 --> 00:00:16,970 -However, in most cases, you will need to glean the requirements - -6 -00:00:16,970 --> 00:00:20,230 -from conversations with the prospective clients, and distill them down into - -7 -00:00:20,230 --> 00:00:23,150 -something actionable on your own. Suppose a teacher came to you - -8 -00:00:23,150 --> 00:00:25,310 -with a request for a piece of software their students could - -9 -00:00:25,310 --> 00:00:28,500 -use to find out the average length of the sentences in - -10 -00:00:28,500 --> 00:00:31,390 -their essays. What questions come into mind to help you figure - -11 -00:00:31,390 --> 00:00:34,620 -out the full requirements for this project. Write down a list - -12 -00:00:34,620 --> 00:00:37,630 -of at least ten questions that might help you determine them. - -13 -00:00:37,630 --> 00:00:40,240 -Please take the time to do this before moving on. There's - -14 -00:00:40,240 --> 00:00:42,670 -no penalty for looking ahead, but if you skip this exercise - -15 -00:00:42,670 --> 00:00:44,920 -you'll cheat yourself out of the benefits of brainstorming and getting - -16 -00:00:44,920 --> 00:00:48,190 -your mind around the project before being bombarded by more information. diff --git a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/2 - Choosing Good Questions - lang_en_vs3.srt b/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/2 - Choosing Good Questions - lang_en_vs3.srt deleted file mode 100644 index a834b21..0000000 --- a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/2 - Choosing Good Questions - lang_en_vs3.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,150 --> 00:00:03,400 -Now that you've written some of your own questions, consider the following - -2 -00:00:03,400 --> 00:00:07,120 -three. Which is the most likely to be useful for determining the detailed - -3 -00:00:07,120 --> 00:00:11,730 -requirements? Maybe, what OSes should it run on? Or maybe, how will the - -4 -00:00:11,730 --> 00:00:16,210 -user specify input? Or finally, how many lines of code should it take? diff --git a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/3 - Choosing Good Questions Solution - lang_en_vs3.srt b/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/3 - Choosing Good Questions Solution - lang_en_vs3.srt deleted file mode 100644 index 3c29d6b..0000000 --- a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/3 - Choosing Good Questions Solution - lang_en_vs3.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,450 --> 00:00:03,260 -The last question is almost never a reasonable one. For one - -2 -00:00:03,260 --> 00:00:05,660 -thing, the client should not need to know or care about - -3 -00:00:05,660 --> 00:00:08,412 -how many lines of code make up the program's source code. - -4 -00:00:08,412 --> 00:00:09,910 -In forming requirements, you should avoid - -5 -00:00:09,910 --> 00:00:11,940 -implementation specific questions that do not - -6 -00:00:11,940 --> 00:00:15,290 -directly interface with the user. The first question is very relevant - -7 -00:00:15,290 --> 00:00:18,830 -in some situations. For example, a graphic sentence with video game or - -8 -00:00:18,830 --> 00:00:21,630 -performance is key. However, you should not write any operating system - -9 -00:00:21,630 --> 00:00:25,620 -specific code unless absolutely needed, and should strive to make your code - -10 -00:00:25,620 --> 00:00:28,070 -platform independent whenever possible. The - -11 -00:00:28,070 --> 00:00:30,990 -second question, however, is very relevant. - -12 -00:00:30,990 --> 00:00:32,870 -Now that you've thought a bit about what you might ask of - -13 -00:00:32,870 --> 00:00:35,810 -the client requesting this program, let's watch Alvin, one of Udasea's - -14 -00:00:35,810 --> 00:00:39,850 -engineers, asking his own questions. He'll be speaking with Lauren, the client. diff --git a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/4 - Requirements Interview - lang_en_vs3.srt b/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/4 - Requirements Interview - lang_en_vs3.srt deleted file mode 100644 index 74a0b79..0000000 --- a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/4 - Requirements Interview - lang_en_vs3.srt +++ /dev/null @@ -1,323 +0,0 @@ -1 -00:00:00,430 --> 00:00:01,050 -Hi, I'm Lauren. - -2 -00:00:01,050 --> 00:00:01,990 ->> Hi, I'm Alvin. - -3 -00:00:01,990 --> 00:00:06,470 ->> I'm an instructor at a university nearby and I've been noticing that when - -4 -00:00:06,470 --> 00:00:09,700 -my students write their essays, they have - -5 -00:00:09,700 --> 00:00:13,100 -very long, very wordy sentences and I would - -6 -00:00:13,100 --> 00:00:17,600 -like to develop some kind of tool that they can use to keep track of - -7 -00:00:17,600 --> 00:00:20,440 -this and maybe perfect their writing style. - -8 -00:00:20,440 --> 00:00:21,410 -Do you think that's something you could do? - -9 -00:00:21,410 --> 00:00:25,850 ->> I think so. Let's start by helping me get acquainted with the students - -10 -00:00:25,850 --> 00:00:29,620 -in the class. So how many students do we have in this class typically? - -11 -00:00:29,620 --> 00:00:34,000 ->> Usually about 45 per unit, but I can have up to six units a semester. - -12 -00:00:34,000 --> 00:00:36,420 ->> 45 students, and six sections per - -13 -00:00:36,420 --> 00:00:39,220 -semester. That's a farily reasonable size. So, - -14 -00:00:39,220 --> 00:00:42,790 -do you know anything about what the students are using as far as computers go? - -15 -00:00:42,790 --> 00:00:46,640 ->> I don't know what kind of computers they're using. And they - -16 -00:00:46,640 --> 00:00:50,960 -could be, I don't know, anywhere from having no tech experience to - -17 -00:00:50,960 --> 00:00:52,200 -being pretty proficient. - -18 -00:00:52,200 --> 00:00:54,930 ->> Do you know anything about how - -19 -00:00:54,930 --> 00:00:57,350 -familiar the students are with computers in general? - -20 -00:00:57,350 --> 00:00:59,540 ->> I'm sure we have some people on the low end that have - -21 -00:00:59,540 --> 00:01:01,430 -never done any type of programming, and - -22 -00:01:01,430 --> 00:01:03,680 -then some people who are pretty self-sufficient. - -23 -00:01:03,680 --> 00:01:07,210 ->> Okay, and I guess my last question related to - -24 -00:01:07,210 --> 00:01:10,170 -the students is, what is the students actually submitting to you. - -25 -00:01:10,170 --> 00:01:14,080 ->> They've been sending just raw text files via email to me. - -26 -00:01:14,080 --> 00:01:16,660 ->> So from the sounds of things - -27 -00:01:16,660 --> 00:01:19,140 -we have a fairly broad, I guess base - -28 -00:01:19,140 --> 00:01:23,100 -of students to work with, both in technical proficiency - -29 -00:01:23,100 --> 00:01:27,180 -as well as their operating system environments potentially. - -30 -00:01:27,180 --> 00:01:29,420 -So I think what we'll probably do to start - -31 -00:01:29,420 --> 00:01:33,270 -off with is make a command line, Java - -32 -00:01:33,270 --> 00:01:36,760 -based tool. That the students can run and we'll - -33 -00:01:36,760 --> 00:01:39,910 -give them a fair amount of you know, documentation - -34 -00:01:39,910 --> 00:01:41,690 -on how to use the tool. And I expect - -35 -00:01:41,690 --> 00:01:45,090 -that there will be a lot of little error conditions that may happen - -36 -00:01:45,090 --> 00:01:49,320 -that we want to produce a reasonably friendly message were anything to go wrong. - -37 -00:01:49,320 --> 00:01:50,480 ->> Yeah. That'd be great. - -38 -00:01:50,480 --> 00:01:54,750 ->> So, a little bit more, I guess about - -39 -00:01:54,750 --> 00:01:58,539 -the actual essay itself, its submission, what constitutes a word? - -40 -00:01:59,820 --> 00:02:03,190 ->> I really only care about the longer words, so, is there a - -41 -00:02:03,190 --> 00:02:06,140 -way that we can only count words that are maybe above three letters? - -42 -00:02:06,140 --> 00:02:06,830 ->> I think - -43 -00:02:06,830 --> 00:02:08,508 -that's something we can do. And I think - -44 -00:02:08,508 --> 00:02:10,030 -that because you seem a little bit unsure - -45 -00:02:10,030 --> 00:02:11,540 -we might be able to have that be - -46 -00:02:11,540 --> 00:02:13,820 -a little bit more flexible than we otherwise would. - -47 -00:02:13,820 --> 00:02:14,500 ->> Great. - -48 -00:02:14,500 --> 00:02:18,330 ->> What does a sentence mean to you? Is it kind of flexible? - -49 -00:02:18,330 --> 00:02:21,280 ->> I would say anything that ends in a period or - -50 -00:02:21,280 --> 00:02:25,870 -even a question mark. Maybe even an exclamation mark. or, something - -51 -00:02:25,870 --> 00:02:28,760 -even, maybe even with a comma or semi-colon. I really only - -52 -00:02:28,760 --> 00:02:32,370 -care about the sentences that aren't gramatically correct and are too long. - -53 -00:02:32,370 --> 00:02:35,180 ->> I think we can probably make that a little bit more flexible too - -54 -00:02:35,180 --> 00:02:37,520 -so that way, you can kind of say we're going to, or you want to include them. - -55 -00:02:37,520 --> 00:02:38,020 ->> Mm-hm. - -56 -00:02:38,020 --> 00:02:41,786 ->> So maybe, sounds like you are little bit on the fence - -57 -00:02:41,786 --> 00:02:45,100 -about whether or not say, a comma should be considered a sentence. - -58 -00:02:45,100 --> 00:02:45,130 ->> Mm. - -59 -00:02:45,130 --> 00:02:46,370 ->> Entirely on its own or not. So we - -60 -00:02:46,370 --> 00:02:49,830 -can probably make that a little bit configurable as well. - -61 -00:02:51,880 --> 00:02:56,510 -And so, just to confirm the actual end result to - -62 -00:02:56,510 --> 00:02:59,870 -the student is the average number of words per sentence? - -63 -00:02:59,870 --> 00:03:01,610 ->> Yeah, yeah that'd be fine. - -64 -00:03:01,610 --> 00:03:07,430 ->> Okay, overall to start off with, looks like we have some - -65 -00:03:07,430 --> 00:03:10,280 -sort of customization of the word length that we want to look for. - -66 -00:03:10,280 --> 00:03:10,780 ->> Mm-hm. Yeah. - -67 -00:03:12,000 --> 00:03:14,650 ->> We have some kind of variability in - -68 -00:03:14,650 --> 00:03:17,880 -what we want to have as acceptable sentence structure. - -69 -00:03:17,880 --> 00:03:24,570 -So, periods, question marks, semicolons, things like that. And, the end result - -70 -00:03:24,570 --> 00:03:27,260 -to the student is if we're successful, they'll get the average number of - -71 -00:03:27,260 --> 00:03:31,060 -words per sentence. Otherwise we tell them something a little bit helpful to - -72 -00:03:31,060 --> 00:03:33,240 -kind of put them on the right track to use the tool correctly. - -73 -00:03:33,240 --> 00:03:34,620 ->> Yeah that's the error codes right? - -74 -00:03:35,850 --> 00:03:38,150 ->> Hopefully not error codes but something a little bit nicer. - -75 -00:03:38,150 --> 00:03:39,800 ->> [LAUGH] Okay. - -76 -00:03:39,800 --> 00:03:41,150 ->> So I think I have enough to - -77 -00:03:41,150 --> 00:03:43,440 -get started and produce something that's you know, - -78 -00:03:43,440 --> 00:03:47,150 -a reasonable I guess, rough draft. Of something - -79 -00:03:47,150 --> 00:03:48,700 -that you can use to help your class out. - -80 -00:03:48,700 --> 00:03:49,590 ->> Great. Thank you. - -81 -00:03:49,590 --> 00:03:50,240 ->> Thank you. diff --git a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/5 - Average Sentence Length Requirements - lang_en_vs3.srt b/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/5 - Average Sentence Length Requirements - lang_en_vs3.srt deleted file mode 100644 index afd49e1..0000000 --- a/usth/ICT2.7/P1L5 Requirements Gathering Subtitles/5 - Average Sentence Length Requirements - lang_en_vs3.srt +++ /dev/null @@ -1,83 +0,0 @@ -1 -00:00:00,340 --> 00:00:02,300 -You've heard Alvin come up with several conclusions for how to - -2 -00:00:02,300 --> 00:00:04,510 -set up the program. And we're going to ask that you follow his - -3 -00:00:04,510 --> 00:00:07,590 -instincts. We'll spell that out here in a little more technical details - -4 -00:00:07,590 --> 00:00:11,030 -so that everyone is working from the same basic starting point. The - -5 -00:00:11,030 --> 00:00:13,770 -program must be written in Java and must not make you any - -6 -00:00:13,770 --> 00:00:16,730 -nonstandard Java libraries. You will be tested on a machine with the - -7 -00:00:16,730 --> 00:00:21,060 -vanilla installation of Java 1.6. Your program must compile on the command - -8 -00:00:21,060 --> 00:00:25,360 -line using the Java C command without any additional options. All code - -9 -00:00:25,360 --> 00:00:27,530 -required to execute the program that is not part of the - -10 -00:00:27,530 --> 00:00:31,950 -standard JDK, must be included as source code with your program. - -11 -00:00:31,950 --> 00:00:34,380 -Your program should be an application. That is, it should have - -12 -00:00:34,380 --> 00:00:37,160 -a main method and should be executable from the command line using - -13 -00:00:37,160 --> 00:00:40,100 -the Java command. The user should be able to provide a - -14 -00:00:40,100 --> 00:00:42,450 -file path to the file they wish to be analyzed as a - -15 -00:00:42,450 --> 00:00:45,880 -command line argument. User should be able to specify which delimiters - -16 -00:00:45,880 --> 00:00:50,570 -count as sentence separators, using the flag -d, defaulting to Lauren's initial - -17 -00:00:50,570 --> 00:00:53,930 -thoughts on what should be used as delimiters. The user should be - -18 -00:00:53,930 --> 00:00:58,170 -able to specify a lower limit for word length, using the flag -l, - -19 -00:00:58,170 --> 00:01:02,100 -defaulting to Lauren's guess at what value might be good. Finally, the program's - -20 -00:01:02,100 --> 00:01:03,710 -output should be the average sentence - -21 -00:01:03,710 --> 00:01:05,720 -length. Rounded down to the nearest integer. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 27581a6..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,340 --> 00:00:05,670 -Hello and welcome to the second part of our software engineering course. In the - -2 -00:00:05,670 --> 00:00:09,030 -previous mini-course, we discussed some basic principles - -3 -00:00:09,030 --> 00:00:12,430 -behind software engineering. We provided an overview of - -4 -00:00:12,430 --> 00:00:15,790 -several software process models and we introduced - -5 -00:00:15,790 --> 00:00:18,530 -some important tools that can help developers - -6 -00:00:18,530 --> 00:00:21,363 -increase their productivity. In this mini-course, we - -7 -00:00:21,363 --> 00:00:25,740 -will focus on requirement and prototyping. More precisely, - -8 -00:00:25,740 --> 00:00:28,840 -we will discuss in depth requirements - -9 -00:00:28,840 --> 00:00:32,400 -engineering activities. We will also discuss - -10 -00:00:32,400 --> 00:00:34,950 -techniques to perform a system analysis - -11 -00:00:34,950 --> 00:00:38,720 -and design in an object-oriented fashion. So, - -12 -00:00:38,720 --> 00:00:42,250 -let's start the first lesson of this mini-course, which is about the use - -13 -00:00:42,250 --> 00:00:45,230 -of engineering techniques to understand and - -14 -00:00:45,230 --> 00:00:48,450 -specify the purpose of a software system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/10 - Completeness Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/10 - Completeness Quiz - lang_en_vs4.srt deleted file mode 100644 index 1ab5b4a..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/10 - Completeness Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,130 --> 00:00:03,060 -So now that we saw which of these requirements are pertinent and - -2 -00:00:03,060 --> 00:00:06,520 -which ones are not, can we consider the above list of requirements - -3 -00:00:06,520 --> 00:00:09,710 -of the list of these requirements marked here as a complete list - -4 -00:00:09,710 --> 00:00:13,254 -of requirements for a gym? And you have two options, yes or no. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/11 - Completeness Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/11 - Completeness Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 2ddc7e9..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/11 - Completeness Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,23 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,060 -And the answer is clearly no. - -2 -00:00:02,060 --> 00:00:05,060 -Obviously, there are many missing requirements here. - -3 -00:00:05,060 --> 00:00:07,910 -For example, requirements about registration for the - -4 -00:00:07,910 --> 00:00:11,560 -customers, requirements about fitness program creation, membership - -5 -00:00:11,560 --> 00:00:15,481 -types, and so on. Plus, we are also missing all of the nonfunctional - -6 -00:00:15,481 --> 00:00:19,270 -requirements, which we haven't seen yet, but that we will discuss in a bit. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/12 - Irrelevant Requirements Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/12 - Irrelevant Requirements Quiz - lang_en_vs4.srt deleted file mode 100644 index 5b5fe86..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/12 - Irrelevant Requirements Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,400 -In the previous quiz, we saw that some of the requirements - -2 -00:00:02,400 --> 00:00:04,920 -that they put in the list were not pertinent. They were - -3 -00:00:04,920 --> 00:00:08,590 -irrelevant. So let me ask you. Why can irrelevant requirements be - -4 -00:00:08,590 --> 00:00:12,170 -harmful? Why is that a problem to have irrelevant requirements? So - -5 -00:00:12,170 --> 00:00:15,060 -here, I'm giving you four possible answers. And I'd like for - -6 -00:00:15,060 --> 00:00:18,150 -you to mark all that apply. Can irrelevant requirements be harmful - -7 -00:00:18,150 --> 00:00:21,210 -because they may lead to missing functionality in the final product. - -8 -00:00:21,210 --> 00:00:23,390 -Because they can introduce inconsistency. Because - -9 -00:00:23,390 --> 00:00:25,410 -they can waste the project resources. - -10 -00:00:25,410 --> 00:00:28,170 -Or because they may introduce bugs in the software system. And - -11 -00:00:28,170 --> 00:00:30,680 -as I said, more than one can be a valid reason. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/13 - Irrelevant Requirements Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/13 - Irrelevant Requirements Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index f1c51c1..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/13 - Irrelevant Requirements Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,200 --> 00:00:02,920 -So let's go through the list. Definitely irrelevant requirements - -2 -00:00:02,920 --> 00:00:06,370 -cannot lead to missing functionality in the final product, because - -3 -00:00:06,370 --> 00:00:10,730 -irrelevant requirements actually refer to unneeded functionality in the system. - -4 -00:00:10,730 --> 00:00:13,030 -So functionality that is put in the requirements, but it - -5 -00:00:13,030 --> 00:00:15,120 -is not really needed. So we're not going to mark - -6 -00:00:15,120 --> 00:00:19,400 -this one. Indeed, irrelevant requirements can introduce inconsistencies. So they - -7 -00:00:19,400 --> 00:00:22,490 -could be irrelevant requirements that not only are not pertinent - -8 -00:00:22,490 --> 00:00:25,620 -but they are inconsistent with some of the pertinent requirements. - -9 -00:00:25,620 --> 00:00:29,220 -They can also waste project resources, because if we spend time - -10 -00:00:29,220 --> 00:00:31,920 -designing and then implementing the parts of the system that we - -11 -00:00:31,920 --> 00:00:35,410 -refer to these irrelevant requirements, of course, we are wasting project - -12 -00:00:35,410 --> 00:00:38,570 -resources. And I will not mark the last one because there's really - -13 -00:00:38,570 --> 00:00:42,220 -no correlation between any irrelevant requirements and bugs in the software - -14 -00:00:42,220 --> 00:00:45,350 -system. Of course, by implementing the part of the system that refers - -15 -00:00:45,350 --> 00:00:47,960 -to an irrelevant requirement you might introduce a bug. But that's - -16 -00:00:47,960 --> 00:00:51,020 -not necessarily the case, and there really no correlation between the two. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/14 - Best Practices - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/14 - Best Practices - lang_en_vs5.srt deleted file mode 100644 index 7497280..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/14 - Best Practices - lang_en_vs5.srt +++ /dev/null @@ -1,83 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,290 -But we collect requirements all the time, right? Every - -2 -00:00:02,290 --> 00:00:04,960 -time we build a software system. So how do people - -3 -00:00:04,960 --> 00:00:08,320 -cope with these difficulties? What are the best practices? - -4 -00:00:08,320 --> 00:00:12,950 -In practice, developers or analysts usually identify a whole bunch - -5 -00:00:12,950 --> 00:00:16,590 -of requirements. Sometimes the easiest and most obvious ones. They - -6 -00:00:16,590 --> 00:00:19,370 -bring those to the stakeholders, and the stakeholders have to - -7 -00:00:19,370 --> 00:00:23,100 -read the requirements, understand them, and if they agree, sign - -8 -00:00:23,100 --> 00:00:25,580 -off on them. And the problem is that in general, - -9 -00:00:25,580 --> 00:00:28,910 -these requirements documents are difficult to read. They are long, they - -10 -00:00:28,910 --> 00:00:32,470 -are often unstructured. They typically contain a lot of information. And - -11 -00:00:32,470 --> 00:00:35,310 -in general, they are not exactly a pleasant read. So what - -12 -00:00:35,310 --> 00:00:39,710 -happens is that often the stakeholders are short on time, overwhelmed - -13 -00:00:39,710 --> 00:00:42,380 -by the amount of information they're given and so they give - -14 -00:00:42,380 --> 00:00:44,800 -in to the pressure and sign. And this is a bit - -15 -00:00:44,800 --> 00:00:47,300 -of a dramatization clearly but it's clear that what we are - -16 -00:00:47,300 --> 00:00:50,640 -looking at is not an ideal scenario. Clearly this is not - -17 -00:00:50,640 --> 00:00:53,810 -the way to identify the real purpose of a software system to - -18 -00:00:53,810 --> 00:00:57,920 -collect good requirements. And since one of the major causes for project - -19 -00:00:57,920 --> 00:01:02,130 -failure is the inadequacy of requirements, we should really avoid this kind - -20 -00:01:02,130 --> 00:01:03,590 -of scenario. We should follow a - -21 -00:01:03,590 --> 00:01:06,810 -rigorous and effective requirements engineering process instead. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/15 - RE Definition Breakdown - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/15 - RE Definition Breakdown - lang_en_vs4.srt deleted file mode 100644 index bcc06a5..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/15 - RE Definition Breakdown - lang_en_vs4.srt +++ /dev/null @@ -1,207 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,540 -But how can we do that? How can we identify the purpose - -2 -00:00:02,540 --> 00:00:06,080 -of the system and collect good requirements? To answer that question, let me - -3 -00:00:06,080 --> 00:00:07,800 -give you another definition of requirements - -4 -00:00:07,800 --> 00:00:09,590 -engineering. And this one is a classical - -5 -00:00:09,590 --> 00:00:13,010 -one, one that summarizes what we discussed so far, and then we can - -6 -00:00:13,010 --> 00:00:16,180 -use as some sort of reference. And it is a little long. - -7 -00:00:16,180 --> 00:00:18,710 -Definitely longer than the one that we saw at the beginning. But it's - -8 -00:00:18,710 --> 00:00:21,840 -an important one and it contains a lot of very relevant points. So, - -9 -00:00:21,840 --> 00:00:25,210 -we're going to go through it and highlight these points. So the definition says, - -10 -00:00:25,210 --> 00:00:28,970 -that the requirements engineering is a set of activities concerned - -11 -00:00:28,970 --> 00:00:32,990 -with identifying and communicating the purpose of a software intensive - -12 -00:00:32,990 --> 00:00:35,770 -system and the context in which it will be used. - -13 -00:00:35,770 --> 00:00:38,570 -And this is exactly what we said at the beginning. But - -14 -00:00:38,570 --> 00:00:40,940 -something we can highlight in here, is the fact that - -15 -00:00:40,940 --> 00:00:44,210 -we're talking about a set of activities. So, what that means - -16 -00:00:44,210 --> 00:00:46,800 -is that requirements engineering is not just a phase or - -17 -00:00:46,800 --> 00:00:51,050 -a stage. It also says that it's about identifying and communicating. - -18 -00:00:51,050 --> 00:00:53,720 -And what that is telling us is that communication is - -19 -00:00:53,720 --> 00:00:56,670 -as important as the analysis. So, it's important to be - -20 -00:00:56,670 --> 00:00:59,990 -able to communicate these requirements not only to collect them. - -21 -00:00:59,990 --> 00:01:02,018 -And we will discuss many reasons why that is the - -22 -00:01:02,018 --> 00:01:05,880 -case. It explicitly talks about purpose. So that allows me - -23 -00:01:05,880 --> 00:01:10,310 -to stress, once more, that quality means fitness-for-purpose. We cannot - -24 -00:01:10,310 --> 00:01:14,410 -say anything about quality unless we understand the purpose. And - -25 -00:01:14,410 --> 00:01:16,210 -the last thing I want to point out in this first - -26 -00:01:16,210 --> 00:01:18,420 -part of the definition is the use of the term - -27 -00:01:18,420 --> 00:01:21,060 -context. This is also something else that we mentioned at - -28 -00:01:21,060 --> 00:01:24,890 -the beginning, that designers, analysts, need to know how and - -29 -00:01:24,890 --> 00:01:28,015 -where the system will be used. Without this information, you - -30 -00:01:28,015 --> 00:01:30,455 -cannot really understand what the system should do and you - -31 -00:01:30,455 --> 00:01:33,280 -cannot really build the system. So now, let's continue and - -32 -00:01:33,280 --> 00:01:35,755 -read the second part of the definition that says, hence. - -33 -00:01:35,755 --> 00:01:41,550 -Requirements engineering acts as the bridge between the real-world needs of - -34 -00:01:41,550 --> 00:01:45,315 -users, customers, and other constituencies affected by a - -35 -00:01:45,315 --> 00:01:49,440 -software system and the capabilities and opportunities afforded - -36 -00:01:49,440 --> 00:01:52,870 -by software-intensive technologies. This is a long sentence, - -37 -00:01:52,870 --> 00:01:55,030 -but also here, we can point out a - -38 -00:01:55,030 --> 00:01:57,670 -few interesting and relevant points. Let me start - -39 -00:01:57,670 --> 00:02:00,612 -by highlighting two parts. Real-world needs, and the - -40 -00:02:00,612 --> 00:02:04,150 -capabilities, and opportunities. So, what are these two - -41 -00:02:04,150 --> 00:02:07,000 -parts telling us? They are telling us that requirements - -42 -00:02:07,000 --> 00:02:09,949 -are partly about what is needed, the real-world needs - -43 -00:02:09,949 --> 00:02:13,520 -of all these stakeholders. But they're also partly about what - -44 -00:02:13,520 --> 00:02:16,100 -is possible, what we can actually build. We need - -45 -00:02:16,100 --> 00:02:19,260 -to compromise between these two things. And, finally, I would - -46 -00:02:19,260 --> 00:02:23,000 -like to point out this term constituencies, which indicates - -47 -00:02:23,000 --> 00:02:26,220 -that we need to identify all of the stakeholders, not - -48 -00:02:26,220 --> 00:02:29,130 -just the customer and the users, so anybody who is - -49 -00:02:29,130 --> 00:02:32,040 -affected by a software system. It is very important to - -50 -00:02:32,040 --> 00:02:35,130 -consider all of these actors. Otherwise, again, - -51 -00:02:35,130 --> 00:02:37,530 -we'll be missing requirements, we'll be missing - -52 -00:02:37,530 --> 00:02:41,120 -part of the purpose of the system and we will build a suboptimal system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/16 - Defining Requirements - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/16 - Defining Requirements - lang_en_vs4.srt deleted file mode 100644 index 2c8dde2..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/16 - Defining Requirements - lang_en_vs4.srt +++ /dev/null @@ -1,219 +0,0 @@ -1 -00:00:00,220 --> 00:00:02,120 -So at this point, we have talked quite a bit about - -2 -00:00:02,120 --> 00:00:03,800 -requirements engineering, but we haven't - -3 -00:00:03,800 --> 00:00:06,450 -really discussed what are requirements exactly. - -4 -00:00:06,450 --> 00:00:08,880 -So what is a requirement? To define that I am going - -5 -00:00:08,880 --> 00:00:11,860 -to use this diagram which is a classical one. So you might - -6 -00:00:11,860 --> 00:00:14,980 -have seen it before. So, discussing this diagram allows me to - -7 -00:00:14,980 --> 00:00:18,720 -point out a few interesting things about requirements and define them - -8 -00:00:18,720 --> 00:00:21,660 -in a better way. At a high level this diagram contains - -9 -00:00:21,660 --> 00:00:24,780 -two main parts, the domain of the machine, which is the hardware, - -10 -00:00:24,780 --> 00:00:27,670 -operating system, libraries and so on, on which the - -11 -00:00:27,670 --> 00:00:30,860 -software will run. And the domain of the application, which - -12 -00:00:30,860 --> 00:00:33,510 -is a world in which the software will operate. - -13 -00:00:33,510 --> 00:00:36,690 -And the machine domain is characterized by computers, which are - -14 -00:00:36,690 --> 00:00:39,980 -the hardware devices, and programs, which is the software - -15 -00:00:39,980 --> 00:00:43,430 -that runs on these devices. The application domain, conversely, is - -16 -00:00:43,430 --> 00:00:47,370 -characterized by domain properties, which are things that are true - -17 -00:00:47,370 --> 00:00:50,330 -of the world anyways, whether I'm building my system or - -18 -00:00:50,330 --> 00:00:53,510 -not, and requirements, which are things in the world we - -19 -00:00:53,510 --> 00:00:56,220 -would like to achieve by delivering the system that we are - -20 -00:00:56,220 --> 00:00:59,400 -building. Basically, to put it in a different way, the former, - -21 -00:00:59,400 --> 00:01:02,950 -the domain properties, represents the assumptions that we make on the - -22 -00:01:02,950 --> 00:01:06,740 -domain. And the latter, the requirements, are the actual requirements - -23 -00:01:06,740 --> 00:01:09,660 -that we aim to collect. So we have something here, right, - -24 -00:01:09,660 --> 00:01:13,380 -at the intersection of this application domain and this machine domain. - -25 -00:01:13,380 --> 00:01:15,570 -And what is that? And this is what we normally call - -26 -00:01:15,570 --> 00:01:19,225 -the specification, which is a description, often a formal description, - -27 -00:01:19,225 --> 00:01:22,120 -of what the system that we are building should do to - -28 -00:01:22,120 --> 00:01:25,520 -meet the requirements. So this is a bridge between these two - -29 -00:01:25,520 --> 00:01:29,380 -domains. And as the graphical depiction shows, the specification is written - -30 -00:01:29,380 --> 00:01:33,220 -in terms of shared phenomena. Things that are observable in both - -31 -00:01:33,220 --> 00:01:35,980 -the machine domain and the application domain. And just to make - -32 -00:01:35,980 --> 00:01:37,540 -things a little more concrete, I want to give you a - -33 -00:01:37,540 --> 00:01:41,180 -couple of examples of what these phenomena, these shared phenomena, are. - -34 -00:01:41,180 --> 00:01:43,350 -And we can think about two main kinds of phenomena. - -35 -00:01:43,350 --> 00:01:46,080 -The first one are events in the real world that the - -36 -00:01:46,080 --> 00:01:50,140 -machine can directly sense. For example, a button being pushed or - -37 -00:01:50,140 --> 00:01:53,910 -a sensor being activated. These are events that happen here, but - -38 -00:01:53,910 --> 00:01:56,500 -that the machine can detect. So they're events that can - -39 -00:01:56,500 --> 00:01:59,650 -be used to define the specification. And the second type of - -40 -00:01:59,650 --> 00:02:02,890 -phenomena are actions in the real world that the machine can - -41 -00:02:02,890 --> 00:02:06,380 -directly cause. For example, an image appearing on a screen or - -42 -00:02:06,380 --> 00:02:09,300 -a device being turned on and off. Again, this is something - -43 -00:02:09,300 --> 00:02:12,460 -that the machine can make happen and then can have manifestation in - -44 -00:02:12,460 --> 00:02:15,520 -the real world. And again this is therefore something on which - -45 -00:02:15,520 --> 00:02:17,720 -the specification can predicate, something that - -46 -00:02:17,720 --> 00:02:19,750 -we can describe in our specification. - -47 -00:02:19,750 --> 00:02:22,860 -And this is sort of a philosophical discussion, but even if - -48 -00:02:22,860 --> 00:02:26,210 -you don't care about the philosophical discussion, the one take away point - -49 -00:02:26,210 --> 00:02:28,800 -that I would like for you to get from this discussion is - -50 -00:02:28,800 --> 00:02:31,392 -the fact that when writing a specification you have to be aware - -51 -00:02:31,392 --> 00:02:34,860 -of the fact that you're talking about shared phenomena. Events in the real - -52 -00:02:34,860 --> 00:02:39,100 -world that the machine can sense and actions in the real world that the - -53 -00:02:39,100 --> 00:02:43,048 -machine can cause. So this is what the specification is about, a bridge between - -54 -00:02:43,048 --> 00:02:44,760 -these two worlds that define what the - -55 -00:02:44,760 --> 00:02:47,170 -system should do to satisfy the requirements. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/17 - Defining Requirements Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/17 - Defining Requirements Quiz - lang_en_vs4.srt deleted file mode 100644 index 343e3cb..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/17 - Defining Requirements Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,180 --> 00:00:01,780 -Since we just discussed application - -2 -00:00:01,780 --> 00:00:04,770 -domain, machine domain, and the specificiation, - -3 -00:00:04,770 --> 00:00:07,760 -let's make sure that these concepts are well understood. To do that, - -4 -00:00:07,760 --> 00:00:09,740 -I'm going to use a quiz, and I would like for you - -5 -00:00:09,740 --> 00:00:12,590 -to refer to the figure that we just discussed that I'm also - -6 -00:00:12,590 --> 00:00:16,050 -reproducing here on a small scale on the right. And then - -7 -00:00:16,050 --> 00:00:19,080 -referring to the figure, you should indicate for each of the items - -8 -00:00:19,080 --> 00:00:22,140 -that I'm going to show you here shortly. Whether they belong to - -9 -00:00:22,140 --> 00:00:25,360 -the machine domain. In this case, we're going to put a one next - -10 -00:00:25,360 --> 00:00:28,150 -to the icon. The application domain, in this case you should - -11 -00:00:28,150 --> 00:00:31,410 -put two. Or their intersection, and in this case you should - -12 -00:00:31,410 --> 00:00:34,100 -put three. So this is the lists of items. So let - -13 -00:00:34,100 --> 00:00:37,750 -me read it. An algorithm sorts a list of books in alphabetical - -14 -00:00:37,750 --> 00:00:41,070 -order by the first author's name. A notification of the arrival - -15 -00:00:41,070 --> 00:00:44,380 -of a message appears on a smart watch. An employee wants to - -16 -00:00:44,380 --> 00:00:47,150 -organize a meeting with a set of colleagues. And finally, a - -17 -00:00:47,150 --> 00:00:50,690 -user clicks a link on a web page. So again, put 1, - -18 -00:00:50,690 --> 00:00:55,740 -2, or 3 here in these lots, depending on whether you think that these items - -19 -00:00:55,740 --> 00:00:57,840 -belong to the machine domain, the application - -20 -00:00:57,840 --> 00:01:00,910 -domain, or their intersection. So, their specification, here. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/18 - Defining Requirements Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/18 - Defining Requirements Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index 7fcbd53..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/18 - Defining Requirements Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,200 --> 00:00:03,460 -So let's look at each one of these items individually, starting from - -2 -00:00:03,460 --> 00:00:06,260 -the first one. And here this item has to do with how - -3 -00:00:06,260 --> 00:00:08,250 -the machine stores the information and - -4 -00:00:08,250 --> 00:00:10,240 -how the corresponding algorithm is written. - -5 -00:00:10,240 --> 00:00:12,920 -But it has no bearing in the real world. That is, in - -6 -00:00:12,920 --> 00:00:15,720 -the application domain. Therefore this. Definitely - -7 -00:00:15,720 --> 00:00:17,200 -belongs to the machine domain, and - -8 -00:00:17,200 --> 00:00:19,610 -we're going to put a one here. What about a notification of - -9 -00:00:19,610 --> 00:00:21,980 -the arrival of a message on a smart watch? This is an - -10 -00:00:21,980 --> 00:00:25,170 -event that is generated within the machine, but it has an effect, - -11 -00:00:25,170 --> 00:00:28,480 -an observable effect, in this case, in the real world as well. - -12 -00:00:28,480 --> 00:00:31,780 -Therefore, we're going to mark this as three. So this is an - -13 -00:00:31,780 --> 00:00:33,460 -event. This is something that belongs - -14 -00:00:33,460 --> 00:00:35,160 -to the intersection between the application - -15 -00:00:35,160 --> 00:00:37,480 -domain and the machine domain. So it's something that could be in - -16 -00:00:37,480 --> 00:00:40,730 -the specification. Now what about an employee that wants to organize a - -17 -00:00:40,730 --> 00:00:43,850 -meeting with a set of colleagues? This is an event that belongs - -18 -00:00:43,850 --> 00:00:46,460 -to the application domain because it is a fact that it's true - -19 -00:00:46,460 --> 00:00:50,290 -that exists. In the real world independently from the existence of a machine. - -20 -00:00:50,290 --> 00:00:52,380 -Therefore, we're going to mark this as two. - -21 -00:00:52,380 --> 00:00:54,890 -Finally, the event of a user clicking on a - -22 -00:00:54,890 --> 00:00:58,950 -link on a web page is an event that occurs in the real world but that has an - -23 -00:00:58,950 --> 00:01:01,932 -effect also within the machine and, therefore, we're - -24 -00:01:01,932 --> 00:01:04,920 -going to mark this as three, something that happens - -25 -00:01:04,920 --> 00:01:07,730 -at the intersection. between these two domains, and once - -26 -00:01:07,730 --> 00:01:10,060 -more, something that could be in a specification. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/19 - Functional and Nonfunctional Requirements - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/19 - Functional and Nonfunctional Requirements - lang_en_vs4.srt deleted file mode 100644 index 1cff519..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/19 - Functional and Nonfunctional Requirements - lang_en_vs4.srt +++ /dev/null @@ -1,139 +0,0 @@ -1 -00:00:00,188 --> 00:00:02,360 -Among the requirement that we can collect from the application - -2 -00:00:02,360 --> 00:00:05,030 -domain, we need to distinguish between two main types. And you've - -3 -00:00:05,030 --> 00:00:06,540 -probably heard about these ones. - -4 -00:00:06,540 --> 00:00:09,650 -Functional requirments and non-functional requiremnts. Functional - -5 -00:00:09,650 --> 00:00:13,020 -requiremetns have to do with the functionality of the system, with - -6 -00:00:13,020 --> 00:00:16,660 -what the system does with the computation. For example the elevator - -7 -00:00:16,660 --> 00:00:19,660 -shall take people to the floor they select. That's a functional - -8 -00:00:19,660 --> 00:00:22,650 -requirement, that has to do with the functionality of the system. - -9 -00:00:22,650 --> 00:00:25,550 -Or for a very simple one, the system has to output - -10 -00:00:25,550 --> 00:00:27,620 -the square root of the number past as - -11 -00:00:27,620 --> 00:00:29,910 -an input. So these kind of requirements have in - -12 -00:00:29,910 --> 00:00:33,630 -general well defined satisfaction criteria. So, for example, if - -13 -00:00:33,630 --> 00:00:35,420 -for the latter one that we mentioned it is - -14 -00:00:35,420 --> 00:00:37,560 -pretty clear how to check whether the output - -15 -00:00:37,560 --> 00:00:39,784 -is actually the square root of the number passed - -16 -00:00:39,784 --> 00:00:43,535 -in input. Non-functional requirements, conversely, refer to a system's - -17 -00:00:43,535 --> 00:00:46,800 -non-functional properties, systems qualities. - -18 -00:00:46,800 --> 00:00:50,120 -Such as security, accuracy, performance, - -19 -00:00:50,120 --> 00:00:52,220 -cost. Or, you know, usability, - -20 -00:00:52,220 --> 00:00:55,910 -adaptability, interoperability, reusability and so - -21 -00:00:55,910 --> 00:00:58,850 -on. So, all these qualities the don't necessarily have to - -22 -00:00:58,850 --> 00:01:02,520 -do with the functionality. And, unlike functional requirements, non functional - -23 -00:01:02,520 --> 00:01:06,060 -requirements Do not always have clear satisfaction criteria. For example, - -24 -00:01:06,060 --> 00:01:08,670 -if we say that the elevator must be fast, that's - -25 -00:01:08,670 --> 00:01:10,640 -a non-functional requrement. Right? It has to do with the - -26 -00:01:10,640 --> 00:01:13,030 -speed of the elevator, which is a quality of the - -27 -00:01:13,030 --> 00:01:15,535 -elevator. But, it, it's not clear how such a requirement - -28 -00:01:15,535 --> 00:01:17,980 -could be satisfied. How could we tell whether the elevator - -29 -00:01:17,980 --> 00:01:20,000 -is fast or not. So, what we need to do - -30 -00:01:20,000 --> 00:01:22,390 -in these cases Is that we need to refine these - -31 -00:01:22,390 --> 00:01:25,300 -requirements so that they become verifiable. For the example that - -32 -00:01:25,300 --> 00:01:27,360 -I just mentioned, for instance, we might say that the - -33 -00:01:27,360 --> 00:01:30,730 -elevator must reach the requested floor in less than 30 - -34 -00:01:30,730 --> 00:01:33,190 -seconds from the moment when the floor button is pushed. - -35 -00:01:33,190 --> 00:01:36,030 -This is still a non-functional requirment, but is a verifiable one. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/2 - Interview with Jane Cleland-Huang - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/2 - Interview with Jane Cleland-Huang - lang_en_vs5.srt deleted file mode 100644 index 2a1bc1c..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/2 - Interview with Jane Cleland-Huang - lang_en_vs5.srt +++ /dev/null @@ -1,411 +0,0 @@ -1 -00:00:00,270 --> 00:00:02,800 -As we did for other lessons, before starting this - -2 -00:00:02,800 --> 00:00:06,150 -lesson on requirements engineering, I want to ask a world - -3 -00:00:06,150 --> 00:00:10,210 -expert on this topic a few questions. I'm here with - -4 -00:00:10,210 --> 00:00:14,150 -Jane Cleland-Huang, a professor at the DePaul University. And Jane - -5 -00:00:14,150 --> 00:00:16,500 -is a world expert in the area of requirements - -6 -00:00:16,500 --> 00:00:19,830 -engineering, which is the theme of this lesson. So I'm - -7 -00:00:19,830 --> 00:00:22,220 -talking to Jane who is currently in Chicago and I - -8 -00:00:22,220 --> 00:00:25,380 -want to. Ask her a few questions about requirements engineering. - -9 -00:00:25,380 --> 00:00:26,530 -So hi Jane how are you? - -10 -00:00:26,530 --> 00:00:27,990 ->> Fine. Thank you Alex. - -11 -00:00:27,990 --> 00:00:29,480 ->> And thank you so much for agreeing to - -12 -00:00:29,480 --> 00:00:31,960 -be interviewed for our course, I'm sure the students - -13 -00:00:31,960 --> 00:00:34,080 -will really benefit from this. And let me start - -14 -00:00:34,080 --> 00:00:37,240 -with the first question which is what are software requirements? - -15 -00:00:37,240 --> 00:00:40,900 ->> That's an interesting question. And software requirements - -16 -00:00:40,900 --> 00:00:44,220 -basically provide us a description of what a - -17 -00:00:44,220 --> 00:00:47,520 -system has to do. So, typically they describe - -18 -00:00:47,520 --> 00:00:50,550 -the functionality of the features. That the system has - -19 -00:00:50,550 --> 00:00:54,420 -to deliver in order to satisfy its stakeholders. - -20 -00:00:54,420 --> 00:00:59,010 -And we usually talk about the requirement specification - -21 -00:00:59,010 --> 00:01:01,050 -in terms of what the system's going to - -22 -00:01:01,050 --> 00:01:04,010 -do. And we describe it sometimes formally in - -23 -00:01:04,010 --> 00:01:07,300 -terms of set of shall statements, that the - -24 -00:01:07,300 --> 00:01:09,110 -system shall do this or shall do that. - -25 -00:01:09,110 --> 00:01:12,330 -Or we can use various templates to specify - -26 -00:01:12,330 --> 00:01:16,120 -both textural requirements. But requirements can also be represented - -27 -00:01:16,120 --> 00:01:20,790 -informally in, in the form of user stories, or use cases, or more - -28 -00:01:20,790 --> 00:01:26,180 -formally in the form of state transition diagrams and even in kind of - -29 -00:01:26,180 --> 00:01:32,260 -formal specifications. Especially for critical parts of safety critical systems. - -30 -00:01:32,260 --> 00:01:34,180 ->> And another should discuss what the - -31 -00:01:34,180 --> 00:01:37,230 -requirements are. What is the requirements engineering? - -32 -00:01:37,230 --> 00:01:41,180 ->> So, that's also an interesting question because if you notice - -33 -00:01:41,180 --> 00:01:45,330 -it's it's engineering and I'm sure in the - -34 -00:01:45,330 --> 00:01:47,750 -other parts of the software engineering process that - -35 -00:01:47,750 --> 00:01:51,130 -you're discussing in your course. Parts such as - -36 -00:01:51,130 --> 00:01:55,200 -testing or coding. They don't have the word engineering - -37 -00:01:55,200 --> 00:01:56,930 -there and I think one of the reasons - -38 -00:01:56,930 --> 00:02:00,310 -requirements engineering has that term is because it covers - -39 -00:02:00,310 --> 00:02:03,570 -a number of different activities. So it includes - -40 -00:02:03,570 --> 00:02:07,390 -things such as working with stakeholders to elicit or - -41 -00:02:07,390 --> 00:02:10,620 -to proactively discover what their requirements of the - -42 -00:02:10,620 --> 00:02:14,440 -system are. Analyzing those requirements so that we - -43 -00:02:14,440 --> 00:02:17,380 -understand the tradeoffs. So you might have different - -44 -00:02:17,380 --> 00:02:21,170 -stakeholders that care about different things, and it - -45 -00:02:21,170 --> 00:02:26,086 -might not be possible to deliver all of those things, so we have to analyze the - -46 -00:02:26,086 --> 00:02:29,140 -feasibility of the requirements, explore the tradeoffs, emerge - -47 -00:02:29,140 --> 00:02:32,550 -conflicts. And then of course the specification part, - -48 -00:02:32,550 --> 00:02:34,930 -which we talked about a little bit already, - -49 -00:02:34,930 --> 00:02:37,340 -and the validation, so did we in fact get - -50 -00:02:37,340 --> 00:02:40,480 -the requirements right? Did we build a system - -51 -00:02:40,480 --> 00:02:43,490 -that actually matches our, our requirements. And then on - -52 -00:02:43,490 --> 00:02:46,960 -into the requirements management process. And the requirements - -53 -00:02:46,960 --> 00:02:50,860 -management process. Kind of like goes through things like - -54 -00:02:50,860 --> 00:02:55,010 -change management. So what if customer or stakeholders - -55 -00:02:55,010 --> 00:02:57,630 -need the system to change? How do we manage - -56 -00:02:57,630 --> 00:03:00,180 -changing requirements? And I think this is one of - -57 -00:03:00,180 --> 00:03:03,230 -the reasons that we've coined the term engineering because - -58 -00:03:03,230 --> 00:03:06,490 -that it's, has to be a systematic process which - -59 -00:03:06,490 --> 00:03:09,550 -extends across. The whole of this is life cycle. - -60 -00:03:09,550 --> 00:03:12,890 ->> And I guess my last question here is - -61 -00:03:12,890 --> 00:03:15,100 -so now that we heard about software requirements and - -62 -00:03:15,100 --> 00:03:18,790 -about software requirements engineering, why is requirements engineering so - -63 -00:03:18,790 --> 00:03:20,770 -important? So what happens if we don't do it right? - -64 -00:03:20,770 --> 00:03:22,620 ->> Well, I'm sure that, you know, - -65 -00:03:22,620 --> 00:03:24,880 -many people have probably read the kind of - -66 -00:03:24,880 --> 00:03:28,560 -report like Spanish report, and other reports of failed - -67 -00:03:28,560 --> 00:03:31,900 -project, and things like that, and are aware that - -68 -00:03:31,900 --> 00:03:35,280 -one of the major reasons for projects failing - -69 -00:03:35,280 --> 00:03:37,360 -is because we didn't get the requirements right - -70 -00:03:37,360 --> 00:03:40,110 -in the first place. So if we don't understand - -71 -00:03:40,110 --> 00:03:42,970 -the requirements then we're simply going to build the - -72 -00:03:42,970 --> 00:03:47,960 -wrong system. Getting requirements right includes all sorts of - -73 -00:03:47,960 --> 00:03:52,900 -things such as finding the right group of stakeholders so we don't exclude major - -74 -00:03:52,900 --> 00:03:56,940 -groups of stakeholders. Understanding the requirements correctly. - -75 -00:03:56,940 --> 00:03:59,910 -There will be many, many different examples of - -76 -00:03:59,910 --> 00:04:02,310 -projects that have failed. For example, in - -77 -00:04:02,310 --> 00:04:06,500 -America the healthcare.gov failure, and while we cannot - -78 -00:04:06,500 --> 00:04:09,540 -put the blame squarely in the area - -79 -00:04:09,540 --> 00:04:13,040 -of requirements, because obviously the project was challenged - -80 -00:04:13,040 --> 00:04:15,650 -for a number of different reasons. But - -81 -00:04:15,650 --> 00:04:21,070 -clearly it underperformed in many respects related to - -82 -00:04:21,070 --> 00:04:25,740 -security, performance, and reliability and these are all - -83 -00:04:25,740 --> 00:04:28,300 -parts of the requirements process. Things that should - -84 -00:04:28,300 --> 00:04:30,000 -have been discovered and the system should have - -85 -00:04:30,000 --> 00:04:32,914 -been built in order to meet those requirements, - -86 -00:04:32,914 --> 00:04:36,240 -getting the requirements right in the first place. - -87 -00:04:36,240 --> 00:04:38,110 -Puts us, a project on the right foot. - -88 -00:04:38,110 --> 00:04:41,430 -And so that gives us a much better chance - -89 -00:04:41,430 --> 00:04:44,940 -of delivering to the customer what they need. And - -90 -00:04:44,940 --> 00:04:49,130 -designing a solution that really meets those requirements. So, - -91 -00:04:49,130 --> 00:04:52,800 -it's a critical part of the overall software engineering success. - -92 -00:04:52,800 --> 00:04:56,441 ->> Okay. So that's critical. I mean, we better get our requirements right. - -93 -00:04:56,441 --> 00:04:56,987 ->> Yeah. - -94 -00:04:56,987 --> 00:04:57,733 ->> That's, that's the message. - -95 -00:04:57,733 --> 00:04:57,743 ->> Yeah. - -96 -00:04:57,743 --> 00:05:00,822 ->> Okay. Well, thank you so much Jane, for taking - -97 -00:05:00,822 --> 00:05:03,435 -the time off your busy schedule to speak with us. - -98 -00:05:03,435 --> 00:05:07,150 -I'm sure. The students really appreciate this, and we'll talk to you soon. - -99 -00:05:07,150 --> 00:05:08,480 ->> Bye Alex, thank you. - -100 -00:05:08,480 --> 00:05:10,890 ->> Bye, Jane, bye bye. Jane gave - -101 -00:05:10,890 --> 00:05:13,410 -us an interesting perspective on requirements engineering - -102 -00:05:13,410 --> 00:05:15,410 -and its importance. Let's now start our - -103 -00:05:15,410 --> 00:05:18,050 -lesson with a general definition of requirements engineering. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/20 - User and System Requirements - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/20 - User and System Requirements - lang_en_vs4.srt deleted file mode 100644 index 2da3f58..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/20 - User and System Requirements - lang_en_vs4.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,180 --> 00:00:03,170 -Another important distinction, when talking about requirements, is that - -2 -00:00:03,170 --> 00:00:07,220 -between user and system requirements. So, let's start with defining - -3 -00:00:07,220 --> 00:00:10,540 -user requirements. Those are requirements that are written for the - -4 -00:00:10,540 --> 00:00:13,400 -customers and they're often in natural language and they don't - -5 -00:00:13,400 --> 00:00:16,190 -contain technical details. And the reason for that is - -6 -00:00:16,190 --> 00:00:19,740 -that their purpose is to allow customers, stakeholders, to check - -7 -00:00:19,740 --> 00:00:22,210 -that the system will do what they intended. So it's - -8 -00:00:22,210 --> 00:00:25,470 -a way for the analyst, the developers, to communicate with - -9 -00:00:25,470 --> 00:00:28,460 -the customers, with the stakeholders. System requirements, on the - -10 -00:00:28,460 --> 00:00:32,560 -other hand, are written for developers. Contain detailed functional and - -11 -00:00:32,560 --> 00:00:35,330 -non functional requirements. Which we just discussed, and which - -12 -00:00:35,330 --> 00:00:39,860 -are clearly and more rigourously specified than the user requirements. - -13 -00:00:39,860 --> 00:00:42,130 -And the reason for this difference is that the - -14 -00:00:42,130 --> 00:00:45,410 -purpose of the system requirements is to tell developers what - -15 -00:00:45,410 --> 00:00:47,870 -to build. They must contain enough details so the - -16 -00:00:47,870 --> 00:00:50,480 -developers can take them and use them to design and - -17 -00:00:50,480 --> 00:00:52,530 -then develop a system. Just to give you a concrete - -18 -00:00:52,530 --> 00:00:55,750 -example, here I'm showing you a user requirement that just says - -19 -00:00:55,750 --> 00:00:59,510 -that the software must provide a means of representing and accessing - -20 -00:00:59,510 --> 00:01:03,940 -external files created by other tools, and the corresponding system requirement. - -21 -00:01:03,940 --> 00:01:05,700 -And as you can see, even if we don't read the - -22 -00:01:05,700 --> 00:01:09,380 -whole requirements. The former is an informal and high level description - -23 -00:01:09,380 --> 00:01:12,210 -of a piece of functionality, whereas the latter describes the same - -24 -00:01:12,210 --> 00:01:15,940 -functionality but in a much more extensive and rigorous way. As - -25 -00:01:15,940 --> 00:01:18,760 -I said, this is something that the developers can use to - -26 -00:01:18,760 --> 00:01:21,820 -design and then build a system whereas this is something that - -27 -00:01:21,820 --> 00:01:25,590 -can be used to communicate. With the stakeholders, with a non-technical - -28 -00:01:25,590 --> 00:01:29,490 -audience. And we need to define both because they serve different purposes. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/21 - Requirements Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/21 - Requirements Quiz - lang_en_vs4.srt deleted file mode 100644 index 4b416e8..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/21 - Requirements Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,940 -After all these talking about requirements, let's have a small quiz, I - -2 -00:00:02,940 --> 00:00:04,019 -want to ask you which of the - -3 -00:00:04,019 --> 00:00:07,840 -following requirements are non-functional requirements? And here - -4 -00:00:07,840 --> 00:00:10,860 -I'm listing the requirements, the first one says at the BowlingAlley program - -5 -00:00:10,860 --> 00:00:13,420 -keeps track of the score during a game, the second one is that - -6 -00:00:13,420 --> 00:00:16,720 -the WordCount program should be able to process large files. The third - -7 -00:00:16,720 --> 00:00:19,580 -one is that the Login program for a website. Should be secure, and - -8 -00:00:19,580 --> 00:00:22,880 -finally the last one says that the vending machine program should take coins - -9 -00:00:22,880 --> 00:00:25,430 -as an input from the user. So, I want you to mark all - -10 -00:00:25,430 --> 00:00:27,590 -the ones that are non-functional requirements, that - -11 -00:00:27,590 --> 00:00:29,640 -don't refer to the functionality of the system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/22 - Requirements Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/22 - Requirements Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index e957484..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/22 - Requirements Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,710 -So, the first requirement clearly refers to some specific functionality of - -2 -00:00:03,710 --> 00:00:07,230 -the Bowling Alley system, because it talks about what the system has - -3 -00:00:07,230 --> 00:00:10,420 -to do from a functional standpoint. So, it's definitely not a non-functional - -4 -00:00:10,420 --> 00:00:13,400 -requirement. On the other hand, the fact that the Word Count system - -5 -00:00:13,400 --> 00:00:16,320 -should be able to process large files, is telling us something not - -6 -00:00:16,320 --> 00:00:19,580 -about the functionality of the system, but rather about its qualities. The - -7 -00:00:19,580 --> 00:00:21,600 -fact that it has to be scalable, that it has to be - -8 -00:00:21,600 --> 00:00:25,190 -efficient and so we can consider this to be a non-functional requirement. - -9 -00:00:25,190 --> 00:00:27,010 -Similarly, the fact that the Login program for a - -10 -00:00:27,010 --> 00:00:29,390 -website should be secure is definitely telling us something - -11 -00:00:29,390 --> 00:00:31,800 -about the quality of the system that has little - -12 -00:00:31,800 --> 00:00:34,026 -to do with its functionality. And so this is - -13 -00:00:34,026 --> 00:00:36,680 -also a non-functional requirement. Finally, the fact that the - -14 -00:00:36,680 --> 00:00:38,980 -Vending Machine program should take coins as an input - -15 -00:00:38,980 --> 00:00:41,010 -from the user is telling us something about the - -16 -00:00:41,010 --> 00:00:44,100 -functionality of the program and therefore, is a functional requirement. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/23 - Requirement Origins - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/23 - Requirement Origins - lang_en_vs4.srt deleted file mode 100644 index 6fe4931..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/23 - Requirement Origins - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,130 --> 00:00:01,880 -Now that we know what the requirements are and - -2 -00:00:01,880 --> 00:00:05,520 -their main types, let's discuss where requirements come from and - -3 -00:00:05,520 --> 00:00:08,610 -there are many possible sources for requirements so I'm - -4 -00:00:08,610 --> 00:00:10,610 -going to list here the main ones. The first one are - -5 -00:00:10,610 --> 00:00:14,440 -clearly stakeholders, anybody who is effected by the system - -6 -00:00:14,440 --> 00:00:18,830 -and its functionality. Customers, users, and so on. The second - -7 -00:00:18,830 --> 00:00:22,610 -typical social requirement is the application domain. For example, - -8 -00:00:22,610 --> 00:00:25,380 -the fact that my software is running within a bank, - -9 -00:00:25,380 --> 00:00:27,930 -or within a school. Why is the application domain a - -10 -00:00:27,930 --> 00:00:31,410 -social requirement? Well, because there are constraints that are characteristics - -11 -00:00:31,410 --> 00:00:34,140 -of the application domain that will affect the functionality of - -12 -00:00:34,140 --> 00:00:37,130 -the system. For a simple example, just think about regulations. - -13 -00:00:37,130 --> 00:00:40,400 -So banking regulations and school regulations in these cases. Those - -14 -00:00:40,400 --> 00:00:43,120 -are things that might affect the functionality of my system - -15 -00:00:43,120 --> 00:00:45,570 -and, therefore, that may become part of my requirements. And, - -16 -00:00:45,570 --> 00:00:50,120 -finally, documentation can be an additional source of requirements. For example, - -17 -00:00:50,120 --> 00:00:54,110 -notes, papers, manuals, books. So everything that refers to - -18 -00:00:54,110 --> 00:00:56,610 -the functionality of the system that we're going to build. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/24 - Elicitation Problems - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/24 - Elicitation Problems - lang_en_vs4.srt deleted file mode 100644 index 2d81db7..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/24 - Elicitation Problems - lang_en_vs4.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,190 --> 00:00:03,440 -Unfortunately, extracting requirements from these sources is not - -2 -00:00:03,440 --> 00:00:06,220 -a straightforward task, as there are many issues involved - -3 -00:00:06,220 --> 00:00:09,470 -with the requirements elicitation. One first problem is the - -4 -00:00:09,470 --> 00:00:13,930 -thin spread of domain knowledge. Knowledge is rarely available - -5 -00:00:13,930 --> 00:00:15,970 -in an explicit form, that is, it is - -6 -00:00:15,970 --> 00:00:20,310 -almost never written down. Moreover, knowledge is often distributed - -7 -00:00:20,310 --> 00:00:23,410 -across many sources. For example, in the graphical depiction - -8 -00:00:23,410 --> 00:00:25,590 -here, to find out that this is the purpose - -9 -00:00:25,590 --> 00:00:28,240 -of the project. The developer, the analyist, needs to talk - -10 -00:00:28,240 --> 00:00:30,870 -to a lot of different people. And, to make things even - -11 -00:00:30,870 --> 00:00:34,400 -worse. There are often conflicts between the knowledge gathered from - -12 -00:00:34,400 --> 00:00:37,610 -different sources. A second issue is the fact that the knowledge - -13 -00:00:37,610 --> 00:00:41,090 -is often tacit. What is also called the say, do - -14 -00:00:41,090 --> 00:00:44,052 -problem. In the example shown here. For instance. We have a - -15 -00:00:44,052 --> 00:00:47,650 -customer that is describing to the analyst. The way in which - -16 -00:00:47,650 --> 00:00:51,060 -he accomplishes a task. So it performs these three steps and - -17 -00:00:51,060 --> 00:00:54,300 -reaches the goal. Whereas in practice, the actual way in - -18 -00:00:54,300 --> 00:00:57,530 -which this task accomplished is by going through a larger number - -19 -00:00:57,530 --> 00:00:59,880 -of steps to get to the same goal. So the point - -20 -00:00:59,880 --> 00:01:02,650 -here is that, even if the knowledge were more concentrated, so - -21 -00:01:02,650 --> 00:01:05,660 -not as spread as in this example. People simply find - -22 -00:01:05,660 --> 00:01:08,680 -it hard to describe knowledge that they regularly use. So it - -23 -00:01:08,680 --> 00:01:11,740 -is hard to make this knowledge explicit, to pass this knowledge - -24 -00:01:11,740 --> 00:01:13,130 -to someone else. Yet another - -25 -00:01:13,130 --> 00:01:16,690 -problem is limited observability. Identifying requirements - -26 -00:01:16,690 --> 00:01:20,570 -through observation is often difficult as the problem owners might be - -27 -00:01:20,570 --> 00:01:23,550 -too busy to perform the task that we need to observe. - -28 -00:01:23,550 --> 00:01:25,750 -Or they might be doing a lot of other things together - -29 -00:01:25,750 --> 00:01:27,980 -with the task that we need to observe, so that becomes - -30 -00:01:27,980 --> 00:01:31,530 -confusing. That introduces noise. Moreover, even when this is not the - -31 -00:01:31,530 --> 00:01:34,460 -case, the presence of an observer might change their problem. It - -32 -00:01:34,460 --> 00:01:38,020 -is very typical for human subjects to improve or modify an - -33 -00:01:38,020 --> 00:01:41,760 -aspect of their behavior, which is being experimentally measured in response - -34 -00:01:41,760 --> 00:01:44,110 -to the fact that they know that they're being studied. You know - -35 -00:01:44,110 --> 00:01:47,110 -that somebody's studying you and you change the way in which you behave. - -36 -00:01:47,110 --> 00:01:50,910 -A typical issue. Finally, the information that we collect might be biased. - -37 -00:01:50,910 --> 00:01:54,270 -For several reasons. People might not feel free to tell you what you - -38 -00:01:54,270 --> 00:01:57,030 -need to know. Or, people might not want to tell you what - -39 -00:01:57,030 --> 00:02:00,240 -you need to know. For example, in all the common cases in which - -40 -00:02:00,240 --> 00:02:03,870 -the outcome might effect them, people might provide you a different picture - -41 -00:02:03,870 --> 00:02:06,770 -from the real one. In order to influence you. So, they might have - -42 -00:02:06,770 --> 00:02:08,820 -a hidden agenda, and mislead you, either - -43 -00:02:08,820 --> 00:02:11,860 -consciously or unconsciously. So, all these issues - -44 -00:02:11,860 --> 00:02:14,370 -add to the complexity of collecting requirements, - -45 -00:02:14,370 --> 00:02:16,522 -of identifying the purpose of a system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/25 - Traditional Techniques - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/25 - Traditional Techniques - lang_en_vs5.srt deleted file mode 100644 index cc58665..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/25 - Traditional Techniques - lang_en_vs5.srt +++ /dev/null @@ -1,207 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,930 -To cover the intrinsic problem of eliciting requirements, - -2 -00:00:02,930 --> 00:00:05,670 -many different techniques have been proposed. So here - -3 -00:00:05,670 --> 00:00:08,260 -I list some of most traditional techniques for - -4 -00:00:08,260 --> 00:00:11,290 -requirement elicitation and as I present those, please keep - -5 -00:00:11,290 --> 00:00:13,140 -in mind that these techniques can be used - -6 -00:00:13,140 --> 00:00:17,230 -separately or combined. A first technique is called background - -7 -00:00:17,230 --> 00:00:20,740 -reading. And, this technique involves collecting information by - -8 -00:00:20,740 --> 00:00:24,840 -reading existing documents such as company reports, organizational charts, - -9 -00:00:24,840 --> 00:00:29,280 -policy manuals, job descriptions, documentation of existing systems and so - -10 -00:00:29,280 --> 00:00:32,400 -on. And, this technique is especially appropriate when one Is - -11 -00:00:32,400 --> 00:00:35,370 -not familiar with your organization for which the requirements are - -12 -00:00:35,370 --> 00:00:38,950 -being collected. So you want to get some background before interviewing - -13 -00:00:38,950 --> 00:00:41,240 -actual people. And one of the main imitations of these - -14 -00:00:41,240 --> 00:00:43,930 -kinds of approaches is that written documents might be out - -15 -00:00:43,930 --> 00:00:46,320 -of sync and they often are out of sync with - -16 -00:00:46,320 --> 00:00:49,970 -reality. Tend to be long winded. It may contain many irrelevant - -17 -00:00:49,970 --> 00:00:51,850 -details, so you may have to look at a lot - -18 -00:00:51,850 --> 00:00:54,810 -of materials to extract enough information. The hard data and - -19 -00:00:54,810 --> 00:00:58,650 -samples techniques consist in deciding which hard data we want - -20 -00:00:58,650 --> 00:01:01,680 -to collect and choosing the sample of the population for which - -21 -00:01:01,680 --> 00:01:04,750 -to collect such data and hard data includes facts and - -22 -00:01:04,750 --> 00:01:09,790 -figures such as forms, invoices, financial information, survey results, marketing - -23 -00:01:09,790 --> 00:01:12,300 -data, and so on. And the sampling of this data - -24 -00:01:12,300 --> 00:01:15,170 -can be done in different ways. For example, the typical ways - -25 -00:01:15,170 --> 00:01:19,200 -to do random selection. Interviews are another typical approach for - -26 -00:01:19,200 --> 00:01:21,870 -requirement solicitation, and this is the approach that we use for - -27 -00:01:21,870 --> 00:01:24,910 -the first project in this course, for instance. Interviews can be - -28 -00:01:24,910 --> 00:01:27,720 -structured in which case there is an agenda of fairly open - -29 -00:01:27,720 --> 00:01:30,450 -questions or they can be open ended in which case there - -30 -00:01:30,450 --> 00:01:32,770 -is no preset agenda and the interview is more of a - -31 -00:01:32,770 --> 00:01:36,500 -conversation. On the positive side, interviews can collect a rich set - -32 -00:01:36,500 --> 00:01:40,260 -of information because they allow for uncovering opinions as well as - -33 -00:01:40,260 --> 00:01:43,230 -hard facts. Moreover, they can probe in depth through follow - -34 -00:01:43,230 --> 00:01:46,790 -up questions. On the more negative side, interviewing requires special - -35 -00:01:46,790 --> 00:01:50,400 -skills that are difficult to master and require experience. And - -36 -00:01:50,400 --> 00:01:52,890 -it is not enough to collect a lot of information. If - -37 -00:01:52,890 --> 00:01:55,520 -this information is hard to analyze or even irrelevant, it - -38 -00:01:55,520 --> 00:01:58,250 -might become useless. So you need to know how to conduct - -39 -00:01:58,250 --> 00:02:01,180 -an interview in order to take advantage of these techniques. - -40 -00:02:01,180 --> 00:02:05,440 -Surveys can also be extremely useful for gathering new requirements because - -41 -00:02:05,440 --> 00:02:08,550 -they can quickly collect information from a large number - -42 -00:02:08,550 --> 00:02:11,520 -of people. Moreover, they can be administered remotely. For - -43 -00:02:11,520 --> 00:02:13,610 -example, by email, through the web. On the other - -44 -00:02:13,610 --> 00:02:16,750 -hand, surveys tend to severely constrain the information that - -45 -00:02:16,750 --> 00:02:19,430 -the user can provide and might miss opportunities to - -46 -00:02:19,430 --> 00:02:24,460 -collect unforeseen, relevant information. Finally, meetings are generally used - -47 -00:02:24,460 --> 00:02:27,690 -for summarization of findings and collection of feedback, so as - -48 -00:02:27,690 --> 00:02:30,500 -to confirm or refute what has been learned. So the - -49 -00:02:30,500 --> 00:02:32,660 -only additional thing I want to mention about meetings - -50 -00:02:32,660 --> 00:02:34,920 -is the fact that it is fundamental that have clearly - -51 -00:02:34,920 --> 00:02:37,970 -stated objectives and are planned carefully. This is something that - -52 -00:02:37,970 --> 00:02:40,730 -should be quite obvious, but doesn't always happen in practice. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/26 - Other Techniques - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/26 - Other Techniques - lang_en_vs5.srt deleted file mode 100644 index f29fb9c..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/26 - Other Techniques - lang_en_vs5.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,070 --> 00:00:02,370 -So just for completeness, I want to mention some other - -2 -00:00:02,370 --> 00:00:05,340 -techniques besides the traditional ones that we just saw that - -3 -00:00:05,340 --> 00:00:07,880 -can be used for requirements solicitation. And these other - -4 -00:00:07,880 --> 00:00:10,740 -techniques can be divided in three main groups. There are - -5 -00:00:10,740 --> 00:00:14,820 -collaborative techniques that were created to support incremental development - -6 -00:00:14,820 --> 00:00:18,850 -of complex systems with large diverse user populations. An example - -7 -00:00:18,850 --> 00:00:21,130 -of such techniques which is widely used and you - -8 -00:00:21,130 --> 00:00:25,120 -might know is brainstorming. There are also social approaches and - -9 -00:00:25,120 --> 00:00:28,140 -these are approaches, techniques that exploit the social - -10 -00:00:28,140 --> 00:00:31,520 -sciences to better collect information from the stakeholders and - -11 -00:00:31,520 --> 00:00:34,310 -the environment. And among those I just want to mention - -12 -00:00:34,310 --> 00:00:36,730 -ethnographic techniques which are based on the idea of - -13 -00:00:36,730 --> 00:00:40,100 -collecting information on the participants by observing them - -14 -00:00:40,100 --> 00:00:44,660 -in their original environment. Finally cognitive techniques, leverage cognitive - -15 -00:00:44,660 --> 00:00:48,490 -science approaches to discover expert knowledge for example they - -16 -00:00:48,490 --> 00:00:51,260 -can be used to understand the problem solving methods. - -17 -00:00:51,260 --> 00:00:54,000 -And in case you're interested in finding out more about this and - -18 -00:00:54,000 --> 00:00:57,580 -other techniques, I'm providing some references in the notes for the lesson. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/27 - Modeling Requirements - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/27 - Modeling Requirements - lang_en_vs4.srt deleted file mode 100644 index d4ade17..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/27 - Modeling Requirements - lang_en_vs4.srt +++ /dev/null @@ -1,223 +0,0 @@ -1 -00:00:00,220 --> 00:00:03,550 -Once we collected the required knowledge on the requirements for - -2 -00:00:03,550 --> 00:00:06,120 -the system that we're developing, we need to model it in - -3 -00:00:06,120 --> 00:00:08,430 -a structured and clear way, so that it can be - -4 -00:00:08,430 --> 00:00:12,100 -analyzed and refined. And there are really tons of ways to - -5 -00:00:12,100 --> 00:00:15,840 -do that, depending on your focus and objectives. More specifically, - -6 -00:00:15,840 --> 00:00:18,940 -when modeling requirements you need to decide what you want to - -7 -00:00:18,940 --> 00:00:21,710 -model and how you want to model it. So let's look - -8 -00:00:21,710 --> 00:00:25,390 -at these two aspects independently. What you decide to model depends - -9 -00:00:25,390 --> 00:00:28,270 -on where your emphasis is. That is on which - -10 -00:00:28,270 --> 00:00:31,390 -aspects of the requirements you want to focus. For - -11 -00:00:31,390 --> 00:00:34,880 -example if your emphasis is on the characteristics of - -12 -00:00:34,880 --> 00:00:37,970 -the enterprise of the company that you are analyzing you - -13 -00:00:37,970 --> 00:00:40,240 -may want to model goals and objectives of the - -14 -00:00:40,240 --> 00:00:44,380 -company, or its organizational structure, its task and dependencies - -15 -00:00:44,380 --> 00:00:47,040 -and so on. Conversely, if your focus is on - -16 -00:00:47,040 --> 00:00:50,500 -information and behaviors, you might want to concentrate on aspects - -17 -00:00:50,500 --> 00:00:53,800 -such as the structure of information, various behavioral views - -18 -00:00:53,800 --> 00:00:55,480 -some of which we will see in the next - -19 -00:00:55,480 --> 00:00:59,650 -lesson, or maybe time or sequencing requirements. Finally, if - -20 -00:00:59,650 --> 00:01:02,750 -you're mostly interested in the quality aspects of your - -21 -00:01:02,750 --> 00:01:06,790 -system, you will focus on the various non-functional properties - -22 -00:01:06,790 --> 00:01:09,070 -of the software that are relevant in the context - -23 -00:01:09,070 --> 00:01:13,570 -considered. For example reliability, robustness, security, and so on. - -24 -00:01:13,570 --> 00:01:15,550 -You will just pick the ones that are relevant for - -25 -00:01:15,550 --> 00:01:18,540 -your context. And as we said, there's a second dimension. - -26 -00:01:18,540 --> 00:01:21,050 -After you have decided what to model in your system, - -27 -00:01:21,050 --> 00:01:23,480 -you have to decide how you want to model it. - -28 -00:01:23,480 --> 00:01:25,860 -So I want to show here some options for modeling - -29 -00:01:25,860 --> 00:01:30,380 -enterprises, information, and quality aspects. And as you can see - -30 -00:01:30,380 --> 00:01:34,100 -here for each type of information there are many possible - -31 -00:01:34,100 --> 00:01:36,840 -models that we can use to represent it. And all - -32 -00:01:36,840 --> 00:01:38,750 -these models have advantages and - -33 -00:01:38,750 --> 00:01:41,400 -disadvantages, different levels of formality and - -34 -00:01:41,400 --> 00:01:44,000 -different focus. Something else that I want to point out - -35 -00:01:44,000 --> 00:01:47,145 -about these models is the fact that these models are often - -36 -00:01:47,145 --> 00:01:50,980 -orthogonal to one another, especially if we consider models in different - -37 -00:01:50,980 --> 00:01:54,620 -categories. So what that means is that they're complimentary rather than - -38 -00:01:54,620 --> 00:01:58,310 -mutually exclusive. Different models can be used to provide views - -39 -00:01:58,310 --> 00:02:01,290 -of the requirements from different perspectives, and we will not see - -40 -00:02:01,290 --> 00:02:03,700 -most of these models in this course, but I wanted to - -41 -00:02:03,700 --> 00:02:06,550 -list them anyways to give you an idea of how many - -42 -00:02:06,550 --> 00:02:09,490 -there are and how vast is this area. As far - -43 -00:02:09,490 --> 00:02:11,540 -as we are concerned in the course and for the - -44 -00:02:11,540 --> 00:02:14,660 -projects we will express requirements using one of two main - -45 -00:02:14,660 --> 00:02:19,010 -ways. Using natural language, that is informal specifications and using - -46 -00:02:19,010 --> 00:02:22,600 -UML diagrams, which is graphical models. And we will introduce - -47 -00:02:22,600 --> 00:02:25,840 -UML and the most important diagrams in the next lesson. - -48 -00:02:25,840 --> 00:02:27,330 -And the only other type of models that I want - -49 -00:02:27,330 --> 00:02:31,610 -to mentions explicitly are goal models because they're extremely popular. - -50 -00:02:31,610 --> 00:02:34,930 -So the main idea with goal models is it start with the main goal of - -51 -00:02:34,930 --> 00:02:36,990 -the system and then keep refining it - -52 -00:02:36,990 --> 00:02:39,654 -by decomposing it in sub-goals. So it's kind - -53 -00:02:39,654 --> 00:02:41,610 -of a very natural way of progressing. - -54 -00:02:41,610 --> 00:02:44,210 -And you continue this refinement until you get - -55 -00:02:44,210 --> 00:02:47,150 -to goals that can be operationalized, and represent - -56 -00:02:47,150 --> 00:02:49,380 -the basic units of functionality of the system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/28 - Analyzing Requirements - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/28 - Analyzing Requirements - lang_en_vs4.srt deleted file mode 100644 index c7d4899..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/28 - Analyzing Requirements - lang_en_vs4.srt +++ /dev/null @@ -1,155 +0,0 @@ -1 -00:00:00,250 --> 00:00:01,940 -Now we are at the point in which we - -2 -00:00:01,940 --> 00:00:05,590 -have collected and modeled our requirements. So the next thing - -3 -00:00:05,590 --> 00:00:08,310 -that we can do is to analyze the requirements to - -4 -00:00:08,310 --> 00:00:11,720 -identify possible problems, and specifically there are three types of - -5 -00:00:11,720 --> 00:00:14,646 -analysis that we can perform. The first type of analysis - -6 -00:00:14,646 --> 00:00:16,820 -is verification. So in this case we're talking about the - -7 -00:00:16,820 --> 00:00:19,700 -requirements verification. And in verification - -8 -00:00:19,700 --> 00:00:21,990 -developers will study the requirements - -9 -00:00:21,990 --> 00:00:25,270 -to check whether they're correct, whether they accurately reflect the - -10 -00:00:25,270 --> 00:00:28,710 -customer needs as perceived by the developer. Developers can - -11 -00:00:28,710 --> 00:00:32,170 -also check the completeness of the requirements, check whether there - -12 -00:00:32,170 --> 00:00:34,510 -are any missing pieces in the requirements as we - -13 -00:00:34,510 --> 00:00:37,710 -discussed earlier. They can check whether the requirements are pertinent, - -14 -00:00:37,710 --> 00:00:41,260 -or contain irrelevant information, like the one shown here. - -15 -00:00:41,260 --> 00:00:44,670 -And they can also check whether they're consistent, unambiguous, testable - -16 -00:00:44,670 --> 00:00:46,920 -and so on, so all those properties that should - -17 -00:00:46,920 --> 00:00:50,380 -be satisfied for the requirements. A second type of analysis - -18 -00:00:50,380 --> 00:00:53,670 -that is typically performed on requirements is validation. And - -19 -00:00:53,670 --> 00:00:56,290 -the goal of validation is to assess whether the collected - -20 -00:00:56,290 --> 00:00:59,870 -requirements define the system that the stakeholders really want. - -21 -00:00:59,870 --> 00:01:02,330 -So the focus here is on the stakeholders. And in - -22 -00:01:02,330 --> 00:01:05,670 -some cases, stakeholders can check the requirements directly if - -23 -00:01:05,670 --> 00:01:08,910 -the requirements are expressed in a notation that they understand. - -24 -00:01:08,910 --> 00:01:11,120 -Or they might check them by discussing them with the - -25 -00:01:11,120 --> 00:01:15,490 -developers. Another possibility is that stakeholders asses the requirements by - -26 -00:01:15,490 --> 00:01:18,400 -interacting with a prototype of the system, in case - -27 -00:01:18,400 --> 00:01:21,690 -the requirements engineering process that is being used involves - -28 -00:01:21,690 --> 00:01:25,300 -early prototyping. And finally surveys, testing, and other techniques - -29 -00:01:25,300 --> 00:01:28,400 -can also be used to validate requirements. A final type - -30 -00:01:28,400 --> 00:01:30,780 -of analysis that we can perform on requirements is - -31 -00:01:30,780 --> 00:01:34,430 -risk analysis. And risk analysis aims to identify and - -32 -00:01:34,430 --> 00:01:37,680 -analyze the main risks involved with the development of - -33 -00:01:37,680 --> 00:01:40,560 -the system being considered. And if some requirements are deemed - -34 -00:01:40,560 --> 00:01:43,320 -to be too risky, like in this case, this might result in - -35 -00:01:43,320 --> 00:01:47,880 -changes in the requirements model to eliminate or address those risks. And note - -36 -00:01:47,880 --> 00:01:49,950 -that all these analysis activities can - -37 -00:01:49,950 --> 00:01:52,390 -be performed in many different ways depending - -38 -00:01:52,390 --> 00:01:53,990 -on the modeling languages chosen to - -39 -00:01:53,990 --> 00:01:56,150 -represent the requirements and on the context. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/29 - Requirements Prioritization - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/29 - Requirements Prioritization - lang_en_vs5.srt deleted file mode 100644 index 09978d7..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/29 - Requirements Prioritization - lang_en_vs5.srt +++ /dev/null @@ -1,59 +0,0 @@ -1 -00:00:00,140 --> 00:00:04,010 -Why collecting, modeling, and analyzing requirements? We might realize - -2 -00:00:04,010 --> 00:00:07,310 -that the resources available for the project are not enough - -3 -00:00:07,310 --> 00:00:10,000 -to satisfy all of them. For example, there's not - -4 -00:00:10,000 --> 00:00:13,450 -enough time, not enough money, not enough manpower. And therefore, - -5 -00:00:13,450 --> 00:00:15,590 -there are some requirements that we won't be able - -6 -00:00:15,590 --> 00:00:19,760 -to satisfy. In these cases, we must prioritize our requirements, - -7 -00:00:19,760 --> 00:00:22,310 -by classifying them in one of three classes. The - -8 -00:00:22,310 --> 00:00:25,270 -first class is mandatory requirements, and these are the requirements - -9 -00:00:25,270 --> 00:00:29,770 -we must satisfy. Then there are the nice to have requirements that are the - -10 -00:00:29,770 --> 00:00:32,170 -ones that we will satisfy if resources - -11 -00:00:32,170 --> 00:00:34,740 -allow. And finally, there are the superfluous - -12 -00:00:34,740 --> 00:00:36,440 -requirements, and those are the requirements that - -13 -00:00:36,440 --> 00:00:37,770 -we're going to keep around, but that we're - -14 -00:00:37,770 --> 00:00:40,010 -going to postpone. For example, we might decide - -15 -00:00:40,010 --> 00:00:41,770 -to satisfy them in the next release. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/3 - General RE Definition - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/3 - General RE Definition - lang_en_vs4.srt deleted file mode 100644 index 34ec511..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/3 - General RE Definition - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,360 --> 00:00:03,900 -Basically, and roughly speaking, requirements engineering, which is - -2 -00:00:03,900 --> 00:00:06,630 -also called in short, RE, is the process - -3 -00:00:06,630 --> 00:00:10,520 -of establishing the services that the customer requires - -4 -00:00:10,520 --> 00:00:13,530 -from the software system. In addition to that, requirements - -5 -00:00:13,530 --> 00:00:16,360 -engineering also has to do with the constraints - -6 -00:00:16,360 --> 00:00:19,900 -under which the system operates and is developed. Requirements - -7 -00:00:19,900 --> 00:00:22,770 -engineering is a very important activity for several - -8 -00:00:22,770 --> 00:00:25,450 -reasons. In particular, as we also saw in earlier - -9 -00:00:25,450 --> 00:00:29,860 -lessons, many errors are made in requirement specifications. So many - -10 -00:00:29,860 --> 00:00:33,100 -errors are made because we don't do requirements engineering in - -11 -00:00:33,100 --> 00:00:35,670 -the right way. And many of these errors are not - -12 -00:00:35,670 --> 00:00:38,340 -being detected early. But they could be if we were - -13 -00:00:38,340 --> 00:00:41,350 -to do RE in the right way. And, unfortunately, not - -14 -00:00:41,350 --> 00:00:45,510 -detecting these errors can dramatically increase software costs. So that's - -15 -00:00:45,510 --> 00:00:48,250 -the reason why requirements engineering is important, and why it - -16 -00:00:48,250 --> 00:00:50,730 -is important to do it in the right way. The final - -17 -00:00:50,730 --> 00:00:53,660 -result of the requirements engineering process is a software - -18 -00:00:53,660 --> 00:00:58,230 -requirements specification that we also called SRS. We will discuss - -19 -00:00:58,230 --> 00:01:01,060 -SRS later in more details and also when we talk - -20 -00:01:01,060 --> 00:01:03,740 -about the projects for the course. For now, it is - -21 -00:01:03,740 --> 00:01:07,040 -enough to say that the software requirements specification and - -22 -00:01:07,040 --> 00:01:10,280 -the requirements engineering, in general, should focus on what the - -23 -00:01:10,280 --> 00:01:13,290 -proposed system is intended to do, and not on the - -24 -00:01:13,290 --> 00:01:16,280 -how it will do it. In fact, how the system - -25 -00:01:16,280 --> 00:01:18,450 -will do what it is required to do is something that we - -26 -00:01:18,450 --> 00:01:22,170 -will discuss when we talk about design of a system in later phases. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/30 - Requirements Prioritization Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/30 - Requirements Prioritization Quiz - lang_en_vs4.srt deleted file mode 100644 index 9415793..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/30 - Requirements Prioritization Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,090 -Now that we talked about requirements prioritization, let's try to see - -2 -00:00:03,090 --> 00:00:06,110 -how this might work in practice. Imagine that you have collected the - -3 -00:00:06,110 --> 00:00:09,560 -folowing set of five requirements for an ATM system, but only - -4 -00:00:09,560 --> 00:00:12,680 -have resources to satisfy two of them. Possibly three. I would like - -5 -00:00:12,680 --> 00:00:15,550 -for you to look at this list and suitablely prioritize the - -6 -00:00:15,550 --> 00:00:19,220 -requirements by marking them as mandatory, in this case you're going to put - -7 -00:00:19,220 --> 00:00:21,840 -an M in the space. Nice to have, in this case you're - -8 -00:00:21,840 --> 00:00:25,350 -going to put an N. Or superfluous, in this case you're going to put - -9 -00:00:25,350 --> 00:00:28,005 -an S. This is the set of requirements, the first one - -10 -00:00:28,005 --> 00:00:30,342 -says that the system shall check the PIN of the ATM - -11 -00:00:30,342 --> 00:00:33,863 -card before allowing the customer to perform an operation. The second - -12 -00:00:33,863 --> 00:00:37,575 -says that the system shall perform an additional biometric verification of - -13 -00:00:37,575 --> 00:00:40,881 -the customer identity for example a check of the customer's finger - -14 -00:00:40,881 --> 00:00:44,294 -prints before it allows the customer to perform an operation. Then - -15 -00:00:44,294 --> 00:00:47,466 -we have that the system shall allow customers to withdraw cash - -16 -00:00:47,466 --> 00:00:50,580 -using an ATM card. The system shall allow customer to deposit - -17 -00:00:50,580 --> 00:00:53,350 -money using an ATM card. And the system shall allow - -18 -00:00:53,350 --> 00:00:56,330 -customers to change the pin of their ATM card. So again, - -19 -00:00:56,330 --> 00:01:00,600 -mark those as mandatory, nice to have, or superfluous considering the - -20 -00:01:00,600 --> 00:01:04,170 -fact that you can satisfy only two, possibly three of them. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/31 - Requirements Prioritization Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/31 - Requirements Prioritization Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index e2fd768..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/31 - Requirements Prioritization Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,119 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,640 -Looking at the requirements, and knowing that we have only two - -2 -00:00:02,640 --> 00:00:05,630 -that we can satisfy for sure, it makes sense to first mark - -3 -00:00:05,630 --> 00:00:09,080 -as mandatory the ability to withdraw cash, which is the most typical - -4 -00:00:09,080 --> 00:00:12,650 -use of an ATM machine. We are therefore going to mark this requirement - -5 -00:00:12,650 --> 00:00:15,260 -with an M, for mandatory. It also makes sense to mark as - -6 -00:00:15,260 --> 00:00:18,390 -mandatory the fact that the ATM system checks the PIN of the - -7 -00:00:18,390 --> 00:00:21,480 -card being used by the customer, as that's the typical level of - -8 -00:00:21,480 --> 00:00:23,680 -security that the customer would expect, - -9 -00:00:23,680 --> 00:00:25,760 -therefore we're going to mark as mandatory - -10 -00:00:25,760 --> 00:00:28,320 -also the first requirement here. And of course we - -11 -00:00:28,320 --> 00:00:31,930 -could also perform biometric verification, but based on our knowledge - -12 -00:00:31,930 --> 00:00:33,640 -of the domain, it seems like that should be - -13 -00:00:33,640 --> 00:00:37,410 -an additional verification, rather than the main and only verification - -14 -00:00:37,410 --> 00:00:40,170 -for the system. We will therefore mark it superfluous. - -15 -00:00:40,170 --> 00:00:42,720 -That is something that we can postpone until a later - -16 -00:00:42,720 --> 00:00:45,100 -release, the second requirement. Finally, - -17 -00:00:45,100 --> 00:00:46,740 -another typical operation that customers - -18 -00:00:46,740 --> 00:00:51,070 -perform at ATM machines is depositing. Whereas changing an ATM - -19 -00:00:51,070 --> 00:00:53,850 -card's PIN is not such a common operation. We'll therefore mark - -20 -00:00:53,850 --> 00:00:57,710 -it nice to have this fourth requirement and as superfluous, the - -21 -00:00:57,710 --> 00:01:00,420 -last one. So at the end, what we have is that - -22 -00:01:00,420 --> 00:01:03,540 -we have two mandatory requirements which are the two that we can - -23 -00:01:03,540 --> 00:01:06,280 -satisfy for sure. One, nice to have the requirement, which is - -24 -00:01:06,280 --> 00:01:09,960 -the possible third requirement which we might have time to satisfy. And - -25 -00:01:09,960 --> 00:01:12,980 -the other two that are marked as superfluous, as something that - -26 -00:01:12,980 --> 00:01:16,100 -we might do later, for example in a subsequent release. And of - -27 -00:01:16,100 --> 00:01:19,060 -course there is something subjective in these answers. But - -28 -00:01:19,060 --> 00:01:22,020 -again, based on our knowledge on our understanding of - -29 -00:01:22,020 --> 00:01:23,910 -the domain, these are the one that makes more - -30 -00:01:23,910 --> 00:01:26,640 -sense for an ATM system as we know it. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/32 - Requirements Engineering Process - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/32 - Requirements Engineering Process - lang_en_vs4.srt deleted file mode 100644 index aa1ab28..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/32 - Requirements Engineering Process - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,180 --> 00:00:02,580 -Let's now put together all that we have discussed - -2 -00:00:02,580 --> 00:00:06,340 -and see how a requirements engineering process actually works. - -3 -00:00:06,340 --> 00:00:08,450 -So, first of all, we saw that requirements engineering - -4 -00:00:08,450 --> 00:00:12,080 -consists of three main steps. Elicitation of the requirements, - -5 -00:00:12,080 --> 00:00:15,450 -in which we extract requirements from various sources. Modeling - -6 -00:00:15,450 --> 00:00:17,880 -in which we represent the requirements using one or - -7 -00:00:17,880 --> 00:00:21,650 -more notations or formal reasons and analysis, in which - -8 -00:00:21,650 --> 00:00:25,230 -we identify possible issues with our requirements and there is - -9 -00:00:25,230 --> 00:00:27,870 -actually a 4th step that we kind of mention - -10 -00:00:27,870 --> 00:00:30,670 -but not explicitly. And this is the negotiation that can - -11 -00:00:30,670 --> 00:00:34,320 -happen between the stakeholders and the developers, during which - -12 -00:00:34,320 --> 00:00:38,400 -requirements are discussed and modified until an agreement is reached. - -13 -00:00:38,400 --> 00:00:40,000 -So if you want to think of this as a - -14 -00:00:40,000 --> 00:00:43,030 -process, so as a sequence of steps, we can see - -15 -00:00:43,030 --> 00:00:46,000 -that we start from elicitation. So we start by eliciting - -16 -00:00:46,000 --> 00:00:50,450 -an initial setup requirements. We negotiate and refine this set, - -17 -00:00:50,450 --> 00:00:53,820 -then we model the resulting requirements. And finally, we - -18 -00:00:53,820 --> 00:00:58,190 -analyze such requirements. However, the process doesn't really stop here. - -19 -00:00:58,190 --> 00:01:00,620 -Why? Well, because as a result of the analysis, - -20 -00:01:00,620 --> 00:01:03,230 -we might have to perform further elicitation. And so this - -21 -00:01:03,230 --> 00:01:05,850 -process is not really a sequential one, but rather - -22 -00:01:05,850 --> 00:01:09,340 -an iterative process. So, in practice, we continue to iterate - -23 -00:01:09,340 --> 00:01:12,700 -over these four steps gathering a better and better understanding - -24 -00:01:12,700 --> 00:01:15,560 -of the requirements at every iteration until we are happy - -25 -00:01:15,560 --> 00:01:18,080 -with the settle requirement that we gather and stop the process. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/33 - SRS - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/33 - SRS - lang_en_vs5.srt deleted file mode 100644 index 44076db..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/33 - SRS - lang_en_vs5.srt +++ /dev/null @@ -1,183 +0,0 @@ -1 -00:00:00,120 --> 00:00:01,800 -Before I conclude this lesson, I want to say - -2 -00:00:01,800 --> 00:00:06,150 -a few additional things about the Software Requirement Specification document - -3 -00:00:06,150 --> 00:00:08,510 -or the SRS. And I want to do that because this - -4 -00:00:08,510 --> 00:00:10,900 -is a very important document and some of the projects - -5 -00:00:10,900 --> 00:00:13,160 -actually require you to produce one. So why is - -6 -00:00:13,160 --> 00:00:16,760 -the Requirement Specification such an important document? That's because a - -7 -00:00:16,760 --> 00:00:20,840 -Software Requirement Specification document is an important fundamental way to - -8 -00:00:20,840 --> 00:00:25,310 -communicate. Requirements to others. For example they represent a common - -9 -00:00:25,310 --> 00:00:29,490 -ground between analysts and stakeholders. Note however, that different - -10 -00:00:29,490 --> 00:00:32,810 -projects might require different software requirement specifications so you - -11 -00:00:32,810 --> 00:00:35,560 -need to know your context. For example, the SRS - -12 -00:00:35,560 --> 00:00:38,140 -document that you have to create for a small project - -13 -00:00:38,140 --> 00:00:40,690 -performed by a few developers can in most cases. - -14 -00:00:40,690 --> 00:00:43,570 -Be a concise and informal one. Conversely the software - -15 -00:00:43,570 --> 00:00:47,000 -requirement specification for a multi-year project, involving a number - -16 -00:00:47,000 --> 00:00:50,480 -of developers can be a fairly complex and extensive document. - -17 -00:00:50,480 --> 00:00:52,000 -So again you have to be aware of your - -18 -00:00:52,000 --> 00:00:55,520 -context and build your software requirement specification accordingly. In - -19 -00:00:55,520 --> 00:00:58,536 -order to have a common format for the SRS - -20 -00:00:58,536 --> 00:01:01,380 -document, IEEE defined a standard that divides the document in - -21 -00:01:01,380 --> 00:01:04,349 -predefined sections. And in the context of this course, - -22 -00:01:04,349 --> 00:01:07,530 -we will use a simplified version of the IEEE - -23 -00:01:07,530 --> 00:01:11,400 -SRS format that includes three main sections. An introduction, - -24 -00:01:11,400 --> 00:01:15,540 -which discusses the purpose, context, and objectives of the project. - -25 -00:01:15,540 --> 00:01:18,500 -A user requirements definition, which contains the user - -26 -00:01:18,500 --> 00:01:22,690 -requirements. And the system requirements specification, which includes both - -27 -00:01:22,690 --> 00:01:26,800 -functional and non-functional requirements. And we provide more information - -28 -00:01:26,800 --> 00:01:29,430 -about this format when we discuss the projects. So - -29 -00:01:29,430 --> 00:01:31,140 -to conclude the lesson, I want to point - -30 -00:01:31,140 --> 00:01:33,670 -out and in some cases recap a few important - -31 -00:01:33,670 --> 00:01:37,150 -characteristics that requirements should have. First of all, requirements - -32 -00:01:37,150 --> 00:01:40,740 -should be simple. Not compound. Each requirement should express - -33 -00:01:40,740 --> 00:01:43,710 -one specific piece of functionality that the system - -34 -00:01:43,710 --> 00:01:47,000 -should provide. Requirements should be testable. We mentioned - -35 -00:01:47,000 --> 00:01:48,660 -this before, but I want to stress it - -36 -00:01:48,660 --> 00:01:51,820 -because it is a very important point. Untestable requirements - -37 -00:01:51,820 --> 00:01:53,850 -such as the system should be fast, are - -38 -00:01:53,850 --> 00:01:58,180 -useless. Requirements should be organized. Related requirements should be - -39 -00:01:58,180 --> 00:02:01,220 -grouped, more abstract requirements should contain more detailed - -40 -00:02:01,220 --> 00:02:05,400 -requirements, and priorities should be clearly indicated when present. - -41 -00:02:05,400 --> 00:02:07,532 -Finally, requirements should be numbered, so - -42 -00:02:07,532 --> 00:02:09,538 -that they can be traced. For example, - -43 -00:02:09,538 --> 00:02:11,430 -numbered requirements will allow you to trace - -44 -00:02:11,430 --> 00:02:14,510 -them to design. Implementation and testing elements - -45 -00:02:14,510 --> 00:02:17,350 -and items, which is something that you might have to do for one of - -46 -00:02:17,350 --> 00:02:20,680 -the projects. And that we will discuss in more detail in a later class. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/4 - Software Intensive Systems - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/4 - Software Intensive Systems - lang_en_vs5.srt deleted file mode 100644 index 28c70ad..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/4 - Software Intensive Systems - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,100 --> 00:00:03,100 -In our initial definition of requirements engineering, we talked about - -2 -00:00:03,100 --> 00:00:06,130 -software systems. But what do we really mean when we - -3 -00:00:06,130 --> 00:00:09,980 -use the term software? Software is an abstract description of - -4 -00:00:09,980 --> 00:00:13,920 -a set of computations that becomes concrete, and therefore useful, only - -5 -00:00:13,920 --> 00:00:16,600 -when we run the software on some hardware, and that, - -6 -00:00:16,600 --> 00:00:19,310 -in the context of some human activity that it can - -7 -00:00:19,310 --> 00:00:22,530 -support. So what does that mean exactly? What that means - -8 -00:00:22,530 --> 00:00:25,235 -is that when we say software, what we really mean is - -9 -00:00:25,235 --> 00:00:28,790 -a software intensive system. That is, the combination - -10 -00:00:28,790 --> 00:00:31,930 -of 3 things, the software, the hardware on which - -11 -00:00:31,930 --> 00:00:34,610 -the software runs, and the context in which the - -12 -00:00:34,610 --> 00:00:37,470 -software is used. Just to illustrate, let me show - -13 -00:00:37,470 --> 00:00:40,010 -you this through a picture. What I'm showing here - -14 -00:00:40,010 --> 00:00:42,830 -is a customer, a user, that is using, is - -15 -00:00:42,830 --> 00:00:47,000 -accessing, an ATM machine. And this action involves several - -16 -00:00:47,000 --> 00:00:50,650 -things. There is the software that drives the logic - -17 -00:00:50,650 --> 00:00:53,410 -of the ATM machine. There is the hardware on - -18 -00:00:53,410 --> 00:00:57,280 -which the software runs. And there is the context - -19 -00:00:57,280 --> 00:00:59,850 -In which the software is used. And in this - -20 -00:00:59,850 --> 00:01:02,660 -case, the context is the bank. And only by - -21 -00:01:02,660 --> 00:01:06,105 -considering these 3 things together can we really understand - -22 -00:01:06,105 --> 00:01:09,510 -the functionality that is represented here. So the bottom - -23 -00:01:09,510 --> 00:01:12,690 -line here is that we usually take hardware and - -24 -00:01:12,690 --> 00:01:15,750 -context for granted in this equation. But they actually - -25 -00:01:15,750 --> 00:01:18,210 -need to be explicitly considered when building a - -26 -00:01:18,210 --> 00:01:20,770 -system. Otherwise, we might forget this is all - -27 -00:01:20,770 --> 00:01:23,850 -the functionality, and ultimately of the requirements. And - -28 -00:01:23,850 --> 00:01:25,640 -we might end up with the wrong system. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/5 - Software Quality - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/5 - Software Quality - lang_en_vs4.srt deleted file mode 100644 index 86db606..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/5 - Software Quality - lang_en_vs4.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,920 -So, let's see how this affects the concept of software - -2 -00:00:02,920 --> 00:00:05,620 -quality. Another way to express what we just said is - -3 -00:00:05,620 --> 00:00:08,220 -to say that the software runs on some hardware and - -4 -00:00:08,220 --> 00:00:11,750 -is developed for a purpose that is related to human - -5 -00:00:11,750 --> 00:00:14,870 -activities. And given this perspective, we can define what we - -6 -00:00:14,870 --> 00:00:18,440 -mean by software quality in this light. Software quality is - -7 -00:00:18,440 --> 00:00:22,290 -not just a function of the software. So, the software - -8 -00:00:22,290 --> 00:00:25,610 -itself does not define the quality of the overall system. - -9 -00:00:25,610 --> 00:00:28,880 -Rather, software quality is a function of both the - -10 -00:00:28,880 --> 00:00:32,259 -software and its purpose. Where purpose has to do with - -11 -00:00:32,259 --> 00:00:34,840 -the way in which the software will be used. So - -12 -00:00:34,840 --> 00:00:37,950 -a software system can be of low quality not only - -13 -00:00:37,950 --> 00:00:40,580 -because it does not work well. So, for example, not - -14 -00:00:40,580 --> 00:00:43,620 -only because it crashes. Of course, that's an issue. But - -15 -00:00:43,620 --> 00:00:47,000 -just as importantly, a software can also be of low - -16 -00:00:47,000 --> 00:00:50,720 -quality because it does not fulfill its purpose, and this - -17 -00:00:50,720 --> 00:00:53,960 -happens quite often. It is unfortunately not rare for - -18 -00:00:53,960 --> 00:00:57,310 -the software producers to have an inadequate understanding, or even - -19 -00:00:57,310 --> 00:01:00,450 -a complete misunderstanding of the purpose of the software, - -20 -00:01:00,450 --> 00:01:03,200 -of what the users want to do and will do - -21 -00:01:03,200 --> 00:01:05,770 -with it. Turning these around, we can therefore define - -22 -00:01:05,770 --> 00:01:09,890 -the quality of software in terms of fitness for purpose. - -23 -00:01:09,890 --> 00:01:12,990 -The more the software fulfills its purpose, the more - -24 -00:01:12,990 --> 00:01:16,040 -the software is on target, the higher is its quality. - -25 -00:01:16,040 --> 00:01:19,600 -And identifying the purpose of the software, so hitting - -26 -00:01:19,600 --> 00:01:23,550 -this target, is exactly the goal of requirements engineering. - -27 -00:01:23,550 --> 00:01:25,970 -And it is the reason why requirements engineering is - -28 -00:01:25,970 --> 00:01:29,370 -such a fundamental activity in the context of software engineering. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/6 - Identifying Purpose - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/6 - Identifying Purpose - lang_en_vs4.srt deleted file mode 100644 index 0accc39..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/6 - Identifying Purpose - lang_en_vs4.srt +++ /dev/null @@ -1,107 +0,0 @@ -1 -00:00:00,050 --> 00:00:03,480 -And identifying the purpose of a softer system means - -2 -00:00:03,480 --> 00:00:06,980 -defining the requirements for the system. And if you have - -3 -00:00:06,980 --> 00:00:09,540 -ever done anything like that, for example, we did - -4 -00:00:09,540 --> 00:00:12,060 -it for the first project in the previous mini course, - -5 -00:00:12,060 --> 00:00:14,720 -you will know that it is an extremely hard - -6 -00:00:14,720 --> 00:00:17,760 -task. Identifying the purpose of the software and defining its - -7 -00:00:17,760 --> 00:00:21,600 -requirements is very, very hard. Why is it so hard? - -8 -00:00:21,600 --> 00:00:25,560 -First of all, the purpose of most systems is inherently, - -9 -00:00:25,560 --> 00:00:27,920 -extremely complex, so this has to do with the - -10 -00:00:27,920 --> 00:00:31,330 -sheer complexity of the purpose of the requirements. Just think - -11 -00:00:31,330 --> 00:00:34,810 -of how complex is the functionality provided by most systems. - -12 -00:00:34,810 --> 00:00:38,790 -Second, it is hard, very hard to extract from humans - -13 -00:00:38,790 --> 00:00:41,780 -this purpose and make it explicit. So, paraphrasing a - -14 -00:00:41,780 --> 00:00:45,130 -famous quote from the late Steve Jobs, often people don't - -15 -00:00:45,130 --> 00:00:47,475 -know what they want until you show it to them. - -16 -00:00:47,475 --> 00:00:50,490 -It's hard to figure out what people really want. Third, - -17 -00:00:50,490 --> 00:00:54,260 -requirements often change over time. Customers change their - -18 -00:00:54,260 --> 00:00:57,490 -mind. Designing and building a system raises new requirements. - -19 -00:00:57,490 --> 00:01:00,270 -So for many reasons requirements tend not to - -20 -00:01:00,270 --> 00:01:02,760 -be stable, tend to evolve. And that, of course, - -21 -00:01:02,760 --> 00:01:05,440 -makes it harder to collect them. Finally, for - -22 -00:01:05,440 --> 00:01:09,600 -any realistic system, there are many stakeholders and they - -23 -00:01:09,600 --> 00:01:12,990 -often have conflicting goals and requirements. And it - -24 -00:01:12,990 --> 00:01:15,900 -can be very hard to reconcile the possibly conflicting - -25 -00:01:15,900 --> 00:01:19,630 -requirements that might emerge in these cases. So for all these reasons, - -26 -00:01:19,630 --> 00:01:21,230 -it is very, very difficult to - -27 -00:01:21,230 --> 00:01:23,930 -perform requirements engineering in an effective way. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/7 - Completeness and Pertinence - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/7 - Completeness and Pertinence - lang_en_vs5.srt deleted file mode 100644 index c0ce159..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/7 - Completeness and Pertinence - lang_en_vs5.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,350 --> 00:00:03,610 -These issues and difficulties can result in requirements - -2 -00:00:03,610 --> 00:00:06,780 -that show various problems. Two particularly relevant and - -3 -00:00:06,780 --> 00:00:10,880 -common problems are completeness and pertinence. Or better, - -4 -00:00:10,880 --> 00:00:14,750 -the lack of completeness and pertinence. Completeness refers to - -5 -00:00:14,750 --> 00:00:17,560 -the fact that it is often extremely difficult - -6 -00:00:17,560 --> 00:00:20,370 -to identify all of the requirements. That is it - -7 -00:00:20,370 --> 00:00:22,890 -is very difficult to have a complete picture - -8 -00:00:22,890 --> 00:00:25,780 -of the purpose of the software. So what happens - -9 -00:00:25,780 --> 00:00:28,540 -is that incomplete requirements are collected and the software - -10 -00:00:28,540 --> 00:00:32,500 -is missing functionality that is important for the user. Pertinence - -11 -00:00:32,500 --> 00:00:34,720 -conversely has to do with the relevance of the - -12 -00:00:34,720 --> 00:00:38,770 -requirements. To avoid completeness problems developers often end up collecting - -13 -00:00:38,770 --> 00:00:42,640 -a lot of irrelevant when not conflicting requirements. In - -14 -00:00:42,640 --> 00:00:45,060 -these cases what can happen is that the software could - -15 -00:00:45,060 --> 00:00:47,120 -either end up being bloated that is it might - -16 -00:00:47,120 --> 00:00:51,290 -contain a needed functionality. The functionality represented by these extra - -17 -00:00:51,290 --> 00:00:54,120 -requirements or it might even be impossible to build the - -18 -00:00:54,120 --> 00:00:57,480 -software due to the conflicting additional requirements. And to make - -19 -00:00:57,480 --> 00:01:00,920 -things even worse collecting all of these requirements sometimes doesn't - -20 -00:01:00,920 --> 00:01:03,390 -even solve the completeness issue. So you might end up - -21 -00:01:03,390 --> 00:01:05,800 -with a set of requirements that is not only incomplete - -22 -00:01:05,800 --> 00:01:08,740 -but it also contains extra information that can be harmful - -23 -00:01:08,740 --> 00:01:11,450 -to the system. So again the bottom line is that - -24 -00:01:11,450 --> 00:01:14,310 -gathering an adequate, accurate, complete, - -25 -00:01:14,310 --> 00:01:16,500 -and pertinent set of requirements that - -26 -00:01:16,500 --> 00:01:20,100 -identify the purpose of a software system is an arduous task. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/8 - Pertinence Quiz - lang_en_vs5.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/8 - Pertinence Quiz - lang_en_vs5.srt deleted file mode 100644 index a04a9a9..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/8 - Pertinence Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,100 --> 00:00:03,530 -Now that we talked about completeness and pertinence, let's consider an - -2 -00:00:03,530 --> 00:00:06,200 -information system for a gym. I'm going to give you a - -3 -00:00:06,200 --> 00:00:09,580 -list of possible requirements and I want you to mark in - -4 -00:00:09,580 --> 00:00:13,530 -that list all the requirements that you believe are pertinent. So let - -5 -00:00:13,530 --> 00:00:16,030 -me read the list. Members of the gym shall be able - -6 -00:00:16,030 --> 00:00:18,770 -to access their training programs. The system shall be able to - -7 -00:00:18,770 --> 00:00:21,894 -read member cards. The system shall be able to store members' - -8 -00:00:21,894 --> 00:00:25,150 -commute time. Personal trainers shall be able to add clients. And the - -9 -00:00:25,150 --> 00:00:27,570 -list of members shall be stored as a linked list. diff --git a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/9 - Pertinence Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/9 - Pertinence Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index ee4f04f..0000000 --- a/usth/ICT2.7/P2L1 Requirements Engineering Subtitles/9 - Pertinence Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,190 --> 00:00:03,620 -So the first requirement is definitely pertinent. Members of the gym shall - -2 -00:00:03,620 --> 00:00:06,740 -be able to access their training programs. It's pretty normal for members of - -3 -00:00:06,740 --> 00:00:09,710 -the gym to have a training program. And therefore, the system should allow - -4 -00:00:09,710 --> 00:00:12,900 -them to access them. Similarly for the second one. The system shall be - -5 -00:00:12,900 --> 00:00:15,450 -able to read member cards. Normally when you get into a gym - -6 -00:00:15,450 --> 00:00:17,420 -if you have a member card, you'll have to either show it to - -7 -00:00:17,420 --> 00:00:21,010 -somebody, or nowadays swipe it, and so the system should be able to - -8 -00:00:21,010 --> 00:00:23,410 -recognize the customer given the card. - -9 -00:00:23,410 --> 00:00:25,710 -The third requirement is probably not pertinent, - -10 -00:00:25,710 --> 00:00:29,090 -because I cannot think of any meaningful case in which the system - -11 -00:00:29,090 --> 00:00:32,729 -should know what is the members' commute time. The fourth requirement, personal - -12 -00:00:32,729 --> 00:00:36,750 -trainers shall be able to add clients, is also probably pertinent. Assuming - -13 -00:00:36,750 --> 00:00:38,870 -that we have personal trainers in the gym, and they should be - -14 -00:00:38,870 --> 00:00:41,710 -able to get clients, to work with the clients of the gym, - -15 -00:00:41,710 --> 00:00:44,140 -and therefore, they should be able to add them as their clients - -16 -00:00:44,140 --> 00:00:47,620 -to the system. And finally, the last requirement, the list of members - -17 -00:00:47,620 --> 00:00:50,800 -shall be stores as a linked list. This is really something about - -18 -00:00:50,800 --> 00:00:54,130 -the how, more than the what. And therefore, for what we say before - -19 -00:00:54,130 --> 00:00:57,720 -is probably not a pertinent requirement, so we're not going to mark this one. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 3cc0326..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,460 --> 00:00:03,770 -Hi. In the last lesson we discussed - -2 -00:00:03,770 --> 00:00:08,370 -requirements engineering. This lesson is about object orientation - -3 -00:00:08,370 --> 00:00:11,958 -and other related concepts. The lesson is split - -4 -00:00:11,958 --> 00:00:14,720 -in two main parts. In the first part, - -5 -00:00:14,720 --> 00:00:16,870 -we will provide a quick introduction to - -6 -00:00:16,870 --> 00:00:20,890 -object orientation and object oriented analysis and design. - -7 -00:00:20,890 --> 00:00:22,750 -In the second part, we will cover the - -8 -00:00:22,750 --> 00:00:25,710 -essential of UML, which is the notation that - -9 -00:00:25,710 --> 00:00:29,190 -we will use in the rest of the course and also in our projects. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/10 - Modeling Classes Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/10 - Modeling Classes Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 4dd6994..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/10 - Modeling Classes Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,110 -Looking at the requirements, item is definitely a relevant element - -2 -00:00:03,110 --> 00:00:07,060 -for my system, so it is appropriate to model item as - -3 -00:00:07,060 --> 00:00:09,300 -a class. Sale, on the other hand, is more of - -4 -00:00:09,300 --> 00:00:12,610 -a characteristic of an item, an attribute of an item, rather - -5 -00:00:12,610 --> 00:00:14,960 -than a class in itself. So, we're not going to mark - -6 -00:00:14,960 --> 00:00:18,460 -this one. Shopping cart sounds, as well, as an important element - -7 -00:00:18,460 --> 00:00:21,550 -for my system. Time can be an important system in some - -8 -00:00:21,550 --> 00:00:25,420 -contexts, but in this case we're measuring time just because more - -9 -00:00:25,420 --> 00:00:28,430 -than one item at a time can be added to the shopping cart. - -10 -00:00:28,430 --> 00:00:32,770 -So, time really doesn't have any reason for being modeled as a class. - -11 -00:00:32,770 --> 00:00:36,550 -And finally, user also seems to also have an important role to play - -12 -00:00:36,550 --> 00:00:40,260 -in the system, and therefore we will model user as a class as well. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/11 - Running Example Explanation - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/11 - Running Example Explanation - lang_en_vs5.srt deleted file mode 100644 index 6d86101..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/11 - Running Example Explanation - lang_en_vs5.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,700 -This concludes the first part of this lesson in which - -2 -00:00:02,700 --> 00:00:06,080 -we discussed the basic object-oriented concepts. And, we started to - -3 -00:00:06,080 --> 00:00:09,830 -look at how to perform object-oriented analysis. In the second - -4 -00:00:09,830 --> 00:00:12,630 -part of the lesson, I will introduce UML, and we will - -5 -00:00:12,630 --> 00:00:15,990 -perform the object-oriented analysis steps that we just saw using - -6 -00:00:15,990 --> 00:00:19,240 -an example. A course management system so before getting to - -7 -00:00:19,240 --> 00:00:22,380 -the second part, let me introduce the example. As we - -8 -00:00:22,380 --> 00:00:25,420 -mentioned before, the first step is to start from a textual - -9 -00:00:25,420 --> 00:00:27,800 -description of the system the we need to analyze and - -10 -00:00:27,800 --> 00:00:30,080 -that we need to build. So that's exactly what I'm going - -11 -00:00:30,080 --> 00:00:33,272 -to do. I'm just going to read through this description then we'll - -12 -00:00:33,272 --> 00:00:36,590 -reuse throughout the rest of the lesson. The registration manager sets - -13 -00:00:36,590 --> 00:00:40,090 -up the curriculum for a semester using a scheduling algorithm and - -14 -00:00:40,090 --> 00:00:43,600 -the registration manager here is the registrar. So we will refer - -15 -00:00:43,600 --> 00:00:47,510 -to the registration manager both as registration manager and as registrar - -16 -00:00:47,510 --> 00:00:50,500 -in the rest of the lesson. One course may have multiple - -17 -00:00:50,500 --> 00:00:52,860 -course offerings, which is pretty standard. Each - -18 -00:00:52,860 --> 00:00:55,490 -course offering has a number, location, and a - -19 -00:00:55,490 --> 00:00:59,160 -time associated with it. Students select four primary - -20 -00:00:59,160 --> 00:01:02,410 -courses and two alternative courses by submitting a - -21 -00:01:02,410 --> 00:01:05,860 -registration form. Students might use the course management - -22 -00:01:05,860 --> 00:01:08,460 -system to add or drop courses for a - -23 -00:01:08,460 --> 00:01:11,660 -period of time after registration. Professors use the - -24 -00:01:11,660 --> 00:01:15,250 -system to receive their course offering rosters. Finally, - -25 -00:01:15,250 --> 00:01:19,280 -users of the registration system are assigned passwords which are used for - -26 -00:01:19,280 --> 00:01:21,882 -login validation. So, as you can see, this is a kind of a - -27 -00:01:21,882 --> 00:01:25,440 -high-level description of a standard course management system. So, if you ever - -28 -00:01:25,440 --> 00:01:27,160 -used a course management system, you'll - -29 -00:01:27,160 --> 00:01:29,836 -recognize some of the functionality described here. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/12 - UML Structural Diagrams: Class Diagram - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/12 - UML Structural Diagrams: Class Diagram - lang_en_vs4.srt deleted file mode 100644 index b2c9579..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/12 - UML Structural Diagrams: Class Diagram - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,200 --> 00:00:04,410 -Let's now start talking about UML, the Unified Modeling Language. - -2 -00:00:04,410 --> 00:00:06,530 -And we are going to start by looking at UML - -3 -00:00:06,530 --> 00:00:11,390 -structural diagrams. This are the diagrams that represent static characteristics - -4 -00:00:11,390 --> 00:00:13,430 -of the system that we need to model. This is - -5 -00:00:13,430 --> 00:00:17,170 -in contrast with dynamic models which instead behaviors of the - -6 -00:00:17,170 --> 00:00:19,200 -system that we need to model. And we will also - -7 -00:00:19,200 --> 00:00:22,424 -discuss dynamic models, later on in the lesson. We're going - -8 -00:00:22,424 --> 00:00:25,670 -to discuss several kinds of diagrams, starting from the class - -9 -00:00:25,670 --> 00:00:28,228 -diagram, which is a fundamental one in UML. - -10 -00:00:28,228 --> 00:00:31,390 -The class diagram represents a static, structural view of - -11 -00:00:31,390 --> 00:00:34,190 -the system, and it describes the classes and their - -12 -00:00:34,190 --> 00:00:37,630 -structure, and the relationships among classes in the system. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/13 - Class Diagram: Class - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/13 - Class Diagram: Class - lang_en_vs5.srt deleted file mode 100644 index b02e6ea..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/13 - Class Diagram: Class - lang_en_vs5.srt +++ /dev/null @@ -1,259 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,370 -So how do we represent a class in a class - -2 -00:00:02,370 --> 00:00:06,140 -diagram? Class is represented as a rectangle with three parts. The - -3 -00:00:06,140 --> 00:00:09,290 -first part is the class name. Classes should be named using - -4 -00:00:09,290 --> 00:00:12,160 -the vocabulary of the domain, so we should pick names that - -5 -00:00:12,160 --> 00:00:16,059 -make sense. And the normal naming standard requires that the classes - -6 -00:00:16,059 --> 00:00:19,720 -are singular nouns starting with a capital letter. The second part - -7 -00:00:19,720 --> 00:00:22,840 -of the class are the attributes of the class, where the - -8 -00:00:22,840 --> 00:00:25,310 -set of attribute for the class, we find the state for - -9 -00:00:25,310 --> 00:00:27,940 -the class. And, we can list an attribute simply by - -10 -00:00:27,940 --> 00:00:31,060 -name, or we can provide the additional information. For example, - -11 -00:00:31,060 --> 00:00:33,520 -we might define the title of the attribute, and we - -12 -00:00:33,520 --> 00:00:37,450 -might also define the initial. Value for the attribute. Finally, the - -13 -00:00:37,450 --> 00:00:40,850 -third part of the class consist of the operations of - -14 -00:00:40,850 --> 00:00:44,050 -the class. And normally, the operations of the class are represented - -15 -00:00:44,050 --> 00:00:47,090 -by name, with a list of arguments. That the operation - -16 -00:00:47,090 --> 00:00:50,340 -will take as input, and with a result type. So the - -17 -00:00:50,340 --> 00:00:53,750 -type of the result produced by the operation. Something - -18 -00:00:53,750 --> 00:00:55,940 -else you can notice in this representation is the - -19 -00:00:55,940 --> 00:00:58,450 -fact that there is a minus before these attributes - -20 -00:00:58,450 --> 00:01:01,810 -and a plus before this operation. This indicates what is - -21 -00:01:01,810 --> 00:01:04,739 -called the visibility of these class members. So the - -22 -00:01:04,739 --> 00:01:08,950 -minus indicates that the attributes are private to the class. - -23 -00:01:08,950 --> 00:01:12,600 -So only instances of this class, roughly speaking, can - -24 -00:01:12,600 --> 00:01:15,340 -access these attributes. And notice that this is what allows - -25 -00:01:15,340 --> 00:01:19,030 -to enforce the information hiding principle, because clients of - -26 -00:01:19,030 --> 00:01:22,000 -the class cannot see what's inside this box, what are - -27 -00:01:22,000 --> 00:01:25,360 -these attributes. The plus conversely indicates that this is a - -28 -00:01:25,360 --> 00:01:28,850 -public operation. So something that is visible outside the class. - -29 -00:01:28,850 --> 00:01:30,790 -And, in fact, normally, this is what we use to - -30 -00:01:30,790 --> 00:01:35,110 -define the interface for my class. So we encapsulate the - -31 -00:01:35,110 --> 00:01:37,730 -state of the class and we make it accessible to - -32 -00:01:37,730 --> 00:01:40,370 -the extent that we want and that is needed through - -33 -00:01:40,370 --> 00:01:43,850 -a set of public operations. Last thing I want to - -34 -00:01:43,850 --> 00:01:46,730 -note is the use of these ellipses that we can - -35 -00:01:46,730 --> 00:01:49,520 -utilize if we want to indicate that there are more - -36 -00:01:49,520 --> 00:01:52,400 -attributes for example, or more operations. But we just don't - -37 -00:01:52,400 --> 00:01:55,160 -want to list them now. Okay now that we know what - -38 -00:01:55,160 --> 00:01:58,020 -a class is, and how it is represented, let's start - -39 -00:01:58,020 --> 00:02:02,150 -our analysis of our course management system. By identifying the - -40 -00:02:02,150 --> 00:02:05,530 -relevant classes in the system, we need to bring back the - -41 -00:02:05,530 --> 00:02:08,270 -description of our system. And what we want to - -42 -00:02:08,270 --> 00:02:10,389 -do, is that we want to go through the description - -43 -00:02:10,389 --> 00:02:14,840 -and underline the relevant nouns in the description. And here - -44 -00:02:14,840 --> 00:02:17,020 -I encourage you to stop the video and to do - -45 -00:02:17,020 --> 00:02:20,450 -the exercise of underlying such nouns yourself before listening to - -46 -00:02:20,450 --> 00:02:23,910 -my explanation into how I do it. For example in - -47 -00:02:23,910 --> 00:02:28,030 -this case I might want to underlined the registration manager which - -48 -00:02:28,030 --> 00:02:30,820 -is a noun and probably a relevant one. The scheduling - -49 -00:02:30,820 --> 00:02:33,800 -algorithm, also seems like a relevant concept, so - -50 -00:02:33,800 --> 00:02:37,890 -is the course. The course offerings, again, course offerings - -51 -00:02:37,890 --> 00:02:40,930 -over here. Definitely, the students seem to be a - -52 -00:02:40,930 --> 00:02:44,750 -relevant noun and so is probably the registration form - -53 -00:02:44,750 --> 00:02:47,140 -and the professors. Okay, so, at this point, I - -54 -00:02:47,140 --> 00:02:50,630 -identified seven possible classes for my system. So, what - -55 -00:02:50,630 --> 00:02:53,340 -I'm going to do is simply to create classes for - -56 -00:02:53,340 --> 00:02:55,980 -each one of these nouns. So my initial class - -57 -00:02:55,980 --> 00:03:00,100 -diagram looks exactly like this, with the seven classes where - -58 -00:03:00,100 --> 00:03:03,140 -for each class, I picked the name that is representative of - -59 -00:03:03,140 --> 00:03:05,680 -the domain. So, in this case, it's pretty straightforward. The - -60 -00:03:05,680 --> 00:03:08,950 -registration form is called registration form, the student is called student - -61 -00:03:08,950 --> 00:03:10,780 -and so on and so forth. But you can already - -62 -00:03:10,780 --> 00:03:14,490 -see how this analysis method is starting from a description of - -63 -00:03:14,490 --> 00:03:17,950 -the real world and it's just identifying objects or classes - -64 -00:03:17,950 --> 00:03:21,240 -in the real world and transforming them into entities in my - -65 -00:03:21,240 --> 00:03:22,260 -analysis document. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/14 - Class Diagram: Attributes - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/14 - Class Diagram: Attributes - lang_en_vs5.srt deleted file mode 100644 index e1230c9..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/14 - Class Diagram: Attributes - lang_en_vs5.srt +++ /dev/null @@ -1,135 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,435 -Now that we identify the classes in my system, - -2 -00:00:02,435 --> 00:00:04,930 -let's see how we can identify the attributes for - -3 -00:00:04,930 --> 00:00:08,680 -these classes. First of all let's recall what attributes - -4 -00:00:08,680 --> 00:00:12,355 -are. Attributes represent the structure of a class the individual - -5 -00:00:12,355 --> 00:00:15,530 -data items that compose the state of the class. - -6 -00:00:15,530 --> 00:00:18,530 -So how do we identify these attributes? Attributes may be - -7 -00:00:18,530 --> 00:00:21,070 -found in one of three ways. By examining class - -8 -00:00:21,070 --> 00:00:25,330 -definitions, by studying the requirements, and by applying domain knowledge. - -9 -00:00:25,330 --> 00:00:28,400 -And notice that I want to stress, that this is always - -10 -00:00:28,400 --> 00:00:31,800 -a very important aspect. No matter what kind of system you're - -11 -00:00:31,800 --> 00:00:35,670 -developing. Domain knowledge tends to be fairly important to identify things - -12 -00:00:35,670 --> 00:00:38,200 -Which might not be provided in the descriptions of the system - -13 -00:00:38,200 --> 00:00:41,070 -that tend to be incomplete. And that you can derive by - -14 -00:00:41,070 --> 00:00:44,390 -the fact that you are familiar with the domain. So always - -15 -00:00:44,390 --> 00:00:47,340 -keep in mind the domain knowledge is important for analysis, for - -16 -00:00:47,340 --> 00:00:50,430 -design, for requirements gathering and so on. So now let's go - -17 -00:00:50,430 --> 00:00:53,530 -back to our description of the system. As I said, - -18 -00:00:53,530 --> 00:00:55,450 -I will bring you back for each step of our - -19 -00:00:55,450 --> 00:00:58,200 -analysis. And in this case, we're going to focus on - -20 -00:00:58,200 --> 00:01:01,550 -course offering. And we can say that the course offering, according - -21 -00:01:01,550 --> 00:01:04,610 -to the description, has a number, a location, and a - -22 -00:01:04,610 --> 00:01:08,140 -time. So this is a pretty clear indication that these are - -23 -00:01:08,140 --> 00:01:11,650 -important aspects of the course offering. So they probably should - -24 -00:01:11,650 --> 00:01:15,600 -become attributes of the course offering class. So now if we - -25 -00:01:15,600 --> 00:01:19,400 -report here that sentence, and once more, we underline - -26 -00:01:19,400 --> 00:01:22,330 -the information that we underlined in the description. We can - -27 -00:01:22,330 --> 00:01:25,540 -clearly see how this can be mapped into the definition - -28 -00:01:25,540 --> 00:01:28,730 -of the class. So our class course offering after this - -29 -00:01:28,730 --> 00:01:32,900 -step the analysis will have 3 attributes: number, location, and - -30 -00:01:32,900 --> 00:01:35,270 -time. And as you can see here, I'm not specifying - -31 -00:01:35,270 --> 00:01:37,540 -the type or any other additional information. So in this - -32 -00:01:37,540 --> 00:01:40,640 -first step I'm just interested in having a first draft. - -33 -00:01:40,640 --> 00:01:42,170 -of the class diagram, that I can then - -34 -00:01:42,170 --> 00:01:44,440 -refine in the next iterations of my analysis. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/15 - Class Diagram: Operations - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/15 - Class Diagram: Operations - lang_en_vs5.srt deleted file mode 100644 index 8943fca..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/15 - Class Diagram: Operations - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,920 -At this point we have our classes, our attributes, - -2 -00:00:02,920 --> 00:00:05,740 -what we're missing is the operations for the class. - -3 -00:00:05,740 --> 00:00:08,340 -Let me remind you that operations represent the behavior - -4 -00:00:08,340 --> 00:00:10,370 -of a class, and that they may be found by - -5 -00:00:10,370 --> 00:00:14,310 -examining interactions among entities in the description of my - -6 -00:00:14,310 --> 00:00:18,480 -system. So once more, let's bring back our description, and - -7 -00:00:18,480 --> 00:00:22,090 -let's in this case focus on this specific item. - -8 -00:00:22,090 --> 00:00:25,330 -That says that the students may use the system to - -9 -00:00:25,330 --> 00:00:29,800 -add courses. So this is clearly indicating an action - -10 -00:00:29,800 --> 00:00:32,320 -that the students should be able to perform. But notice - -11 -00:00:32,320 --> 00:00:35,100 -that this doesn't mean that this is an operation that - -12 -00:00:35,100 --> 00:00:38,370 -should be provided by the student's class. It rather means - -13 -00:00:38,370 --> 00:00:41,860 -that there should be, somewhere in the system, the possibility - -14 -00:00:41,860 --> 00:00:45,080 -of performing this operation. So let's see what this means - -15 -00:00:45,080 --> 00:00:47,920 -for our example. This might mean, for example, if we - -16 -00:00:47,920 --> 00:00:50,400 -focus on the RegistrationManager, so that there should be an - -17 -00:00:50,400 --> 00:00:53,520 -operation in the RegistrationManager that allows me to add - -18 -00:00:53,520 --> 00:00:56,300 -a student to a course. And this, in turn, means - -19 -00:00:56,300 --> 00:01:00,270 -that both Course and CourseOffering should provide a way to - -20 -00:01:00,270 --> 00:01:04,140 -add a student. And therefore, I add this corresponding operation - -21 -00:01:04,140 --> 00:01:07,790 -to the RegistrationManager, to the Course, and to the CourseOffering. - -22 -00:01:07,790 --> 00:01:10,020 -So after doing that we will continue and populate in - -23 -00:01:10,020 --> 00:01:13,080 -a similar way, the other classes in the system. So - -24 -00:01:13,080 --> 00:01:16,040 -let me recap. Now we saw how to identify classes. - -25 -00:01:16,040 --> 00:01:18,300 -How to identify members of the classes, and - -26 -00:01:18,300 --> 00:01:21,910 -particular attributes, and operations. There is one thing that - -27 -00:01:21,910 --> 00:01:24,060 -we're missing, a very important aspect of the - -28 -00:01:24,060 --> 00:01:28,140 -class diagram which is the relationships between these classes. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/16 - Class Diagram: Relationships - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/16 - Class Diagram: Relationships - lang_en_vs5.srt deleted file mode 100644 index ef6550d..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/16 - Class Diagram: Relationships - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,620 -And that's exactly what we're going to look at next, - -2 -00:00:02,620 --> 00:00:05,630 -relationships in the class diagram, how they're represented and - -3 -00:00:05,630 --> 00:00:08,010 -what they mean. First of all relationships as the - -4 -00:00:08,010 --> 00:00:12,550 -name says, describe interactions between classes or between objects in - -5 -00:00:12,550 --> 00:00:15,510 -my system. And we will describe three main types - -6 -00:00:15,510 --> 00:00:19,060 -of relationships. The first one is called a Dependency - -7 -00:00:19,060 --> 00:00:22,450 -relationship. And we can express that as X uses - -8 -00:00:22,450 --> 00:00:25,840 -Y and we represent it with a dashed directed line. - -9 -00:00:25,840 --> 00:00:28,170 -So when we have such a line between two classes - -10 -00:00:28,170 --> 00:00:31,020 -that means that the first class uses the second one. And - -11 -00:00:31,020 --> 00:00:33,520 -we're going to provide an example of a dependency in a - -12 -00:00:33,520 --> 00:00:37,960 -minute. The second type of relationship is an association that can - -13 -00:00:37,960 --> 00:00:40,880 -also be an aggregation. We'll see what the distinction is. - -14 -00:00:40,880 --> 00:00:43,470 -But basically, what this means is that we can express that - -15 -00:00:43,470 --> 00:00:47,640 -as a X has a y. So x contains a - -16 -00:00:47,640 --> 00:00:50,950 -y. And if it is in association, we indicate it with - -17 -00:00:50,950 --> 00:00:53,570 -a solid undirected line. If it's an aggregation, - -18 -00:00:53,570 --> 00:00:55,740 -we indicate it in the same way, but with - -19 -00:00:55,740 --> 00:00:58,510 -a diamond at one of the ends. Finally, the - -20 -00:00:58,510 --> 00:01:02,740 -third type of relationship is what is called Generalization. - -21 -00:01:02,740 --> 00:01:05,300 -And this can be expressed as x is a - -22 -00:01:05,300 --> 00:01:09,620 -y. So this is the relationship that expresses inheritance. - -23 -00:01:09,620 --> 00:01:13,600 -Specialization between two classes. It's represented with a solid - -24 -00:01:13,600 --> 00:01:16,190 -directed line with a large open arrow head at - -25 -00:01:16,190 --> 00:01:19,030 -the end. Going from the more specialized class to - -26 -00:01:19,030 --> 00:01:21,770 -the less specialized class. So going from the subclass to - -27 -00:01:21,770 --> 00:01:24,740 -the super class. So now let's look at each relationship - -28 -00:01:24,740 --> 00:01:28,360 -in more detail using our example, our course management system. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/17 - Class Diagram Relationships Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/17 - Class Diagram Relationships Quiz - lang_en_vs4.srt deleted file mode 100644 index 90ffe63..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/17 - Class Diagram Relationships Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,200 --> 00:00:02,840 -Before doing that, though, now that we discuss the different kinds - -2 -00:00:02,840 --> 00:00:05,510 -of relationships among classes in the class diagram. I would like - -3 -00:00:05,510 --> 00:00:08,230 -to ask you to look at a list of relationships that - -4 -00:00:08,230 --> 00:00:11,920 -I'm providing here and mark the relationships that you think actually - -5 -00:00:11,920 --> 00:00:15,120 -hold for the classes in the system that we are modeling. - -6 -00:00:15,120 --> 00:00:18,260 -So here I have a list of possible relationships for each - -7 -00:00:18,260 --> 00:00:22,070 -relationship. I'm first defining what the relationship is and then what - -8 -00:00:22,070 --> 00:00:25,270 -kind of relationship that is, for example, for the first one I'm - -9 -00:00:25,270 --> 00:00:27,500 -saying that the registration manager uses - -10 -00:00:27,500 --> 00:00:30,090 -the scheduling algorithm, which is a dependency - -11 -00:00:30,090 --> 00:00:33,860 -relationship. And similarly for the other ones. So like for you to go back - -12 -00:00:33,860 --> 00:00:37,070 -to the example, look at the classes that we defined, think about the - -13 -00:00:37,070 --> 00:00:40,360 -requirements, and identify which ones of this - -14 -00:00:40,360 --> 00:00:42,610 -relationships you think hold in the system. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/18 - Class Diagram Relationships Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/18 - Class Diagram Relationships Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index ca674bf..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/18 - Class Diagram Relationships Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,23 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,130 -So, I'm going to start by marking the - -2 -00:00:02,130 --> 00:00:04,920 -relationships that actually hold in the system. - -3 -00:00:04,920 --> 00:00:08,860 -Which are these ones. And then what I'm going to do, I'm going to explain this - -4 -00:00:08,860 --> 00:00:12,480 -answers. Not here but in the next part of this lesson. By looking at the - -5 -00:00:12,480 --> 00:00:14,860 -different relationships in the context of our - -6 -00:00:14,860 --> 00:00:17,240 -example. Which will make the explanation much clearer. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/19 - Class Diagram: Dependency Relationship - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/19 - Class Diagram: Dependency Relationship - lang_en_vs4.srt deleted file mode 100644 index 54c7da3..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/19 - Class Diagram: Dependency Relationship - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,040 -So let's start with the dependency example. A dependency, - -2 -00:00:03,040 --> 00:00:06,720 -as we said, expresses the relationship between a supplier - -3 -00:00:06,720 --> 00:00:09,290 -and a client that relies on it. There is - -4 -00:00:09,290 --> 00:00:12,490 -a dependency because changes in the supplier can affect the - -5 -00:00:12,490 --> 00:00:14,770 -client. Here in this example I am showing that - -6 -00:00:14,770 --> 00:00:18,510 -a dependency example involving the registration manager and the - -7 -00:00:18,510 --> 00:00:21,590 -scheduling algorithm. As you can see the, the dependency - -8 -00:00:21,590 --> 00:00:25,710 -is indicated with a dashed line pointing from the client - -9 -00:00:25,710 --> 00:00:28,520 -to the supplier. And here it's pretty clear why - -10 -00:00:28,520 --> 00:00:31,820 -the RegistrationManager is dependent on the Scheduling Algorithm. It's - -11 -00:00:31,820 --> 00:00:35,710 -because the RegistrationManager uses this Scheduling Algorithm. And therefore, - -12 -00:00:35,710 --> 00:00:39,130 -if the Scheduling Algorithm changes, the RegistrationManager might be - -13 -00:00:39,130 --> 00:00:42,210 -affected by that change. Another less obvious example is - -14 -00:00:42,210 --> 00:00:45,600 -the dependency between the Registration Manager and the Student. - -15 -00:00:45,600 --> 00:00:48,040 -In this case, because the Registration Manager gets a - -16 -00:00:48,040 --> 00:00:51,620 -Student object as a parameter here there is a dependency - -17 -00:00:51,620 --> 00:00:55,740 -between the two. Again, if the Student class were to change the Registration - -18 -00:00:55,740 --> 00:01:00,270 -Manager might be affected because it's relying on the Student for it's behavior. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/2 - Object Orientation Introduction - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/2 - Object Orientation Introduction - lang_en_vs5.srt deleted file mode 100644 index 44fdd74..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/2 - Object Orientation Introduction - lang_en_vs5.srt +++ /dev/null @@ -1,187 +0,0 @@ -1 -00:00:00,390 --> 00:00:03,750 -Let's start with a quick introduction to object orientation and - -2 -00:00:03,750 --> 00:00:07,920 -the fundamental concepts behind it. And let's start by discussing what - -3 -00:00:07,920 --> 00:00:11,100 -exactly is object orientation? If you're younger than me, it - -4 -00:00:11,100 --> 00:00:13,700 -could be that the first programming language you learned was already - -5 -00:00:13,700 --> 00:00:17,030 -an object-oriented language. But things were not always like this. - -6 -00:00:17,030 --> 00:00:20,660 -Before object orientation became prevalent, people were not used to thinking - -7 -00:00:20,660 --> 00:00:23,447 -in terms of objects. So what happened afterwards? And what does - -8 -00:00:23,447 --> 00:00:25,727 -it mean to think in terms of objects and to follow - -9 -00:00:25,727 --> 00:00:28,583 -an object-oriented approach? First of all, it - -10 -00:00:28,583 --> 00:00:32,203 -means to give precedence of data over function. - -11 -00:00:32,203 --> 00:00:35,377 -Did items rather than functionality become the center - -12 -00:00:35,377 --> 00:00:39,020 -of development activities. This also allows for enforcing - -13 -00:00:39,020 --> 00:00:42,200 -the very important concept of information hiding, - -14 -00:00:42,200 --> 00:00:45,460 -which is the encapsulation and segregation of data - -15 -00:00:45,460 --> 00:00:49,710 -behind well-defined and ideally stable interfaces. In order - -16 -00:00:49,710 --> 00:00:51,490 -to be able to hide the design and - -17 -00:00:51,490 --> 00:00:54,130 -also implementation decisions. And note that the terms - -18 -00:00:54,130 --> 00:00:58,580 -encapsulation and information hiding are often used interchangeably, although - -19 -00:00:58,580 --> 00:01:01,270 -some people prefer to think of information hiding - -20 -00:01:01,270 --> 00:01:04,709 -as being the principle and encapsulation being the technique - -21 -00:01:04,709 --> 00:01:07,990 -to achieve information hiding. The key concept though, - -22 -00:01:07,990 --> 00:01:10,110 -no matter which term you use, is really to - -23 -00:01:10,110 --> 00:01:13,460 -gather, to seclude this data behind sort of - -24 -00:01:13,460 --> 00:01:16,610 -a wall and give access to the data only - -25 -00:01:16,610 --> 00:01:20,270 -through interfaces that you, the developer define. And why is - -26 -00:01:20,270 --> 00:01:22,800 -that important? Oh, for many reasons, and one of the main - -27 -00:01:22,800 --> 00:01:26,690 -ones is that it makes code more maintainable. Because the - -28 -00:01:26,690 --> 00:01:28,860 -rest of the code, the rest of the system doesn't have - -29 -00:01:28,860 --> 00:01:32,370 -to be concerned on how the implementation details or the - -30 -00:01:32,370 --> 00:01:37,220 -design are defined. And therefore, any change that happens behind this - -31 -00:01:37,220 --> 00:01:39,580 -wall doesn't concern the rest of the system. And, doesn't - -32 -00:01:39,580 --> 00:01:41,820 -affect the rest of the system, as long as you keep - -33 -00:01:41,820 --> 00:01:45,730 -your interfaces consistent. Another advantage of focusing on - -34 -00:01:45,730 --> 00:01:49,230 -objects and encapsulating the information into cohesive entities is - -35 -00:01:49,230 --> 00:01:52,130 -that it allows the reuse of object definitions - -36 -00:01:52,130 --> 00:01:55,000 -by incremental refinement. Which is what we normally call - -37 -00:01:55,000 --> 00:01:58,830 -inheritance. And inheritance is definitely a fundamental concept - -38 -00:01:58,830 --> 00:02:01,560 -in object orientation. For example, we can define a - -39 -00:02:01,560 --> 00:02:04,030 -car as a refinement of the vehicle. That there's - -40 -00:02:04,030 --> 00:02:06,850 -some additional characteristics with respect to a generic vehicle. - -41 -00:02:06,850 --> 00:02:11,220 -And then we can use the car wherever a vehicle can be used, which is what we - -42 -00:02:11,220 --> 00:02:14,200 -call polymorphism. And we'll continue this discussion for a - -43 -00:02:14,200 --> 00:02:16,440 -very long time. Because there's so many things that - -44 -00:02:16,440 --> 00:02:18,860 -could be discussed when we talk about object orientation, - -45 -00:02:18,860 --> 00:02:21,890 -its characteristics and its advantages. But in the interest - -46 -00:02:21,890 --> 00:02:24,000 -of time, let's for now just stop here. And - -47 -00:02:24,000 --> 00:02:27,020 -start talking about two key concepts in object orientation. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/20 - Class Diagram: Association & Aggregation Relationships - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/20 - Class Diagram: Association & Aggregation Relationships - lang_en_vs5.srt deleted file mode 100644 index 8770928..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/20 - Class Diagram: Association & Aggregation Relationships - lang_en_vs5.srt +++ /dev/null @@ -1,219 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,469 -The next example of relationship we're going to look at is - -2 -00:00:02,469 --> 00:00:06,740 -the association relationship. This is a relationship in which objects of - -3 -00:00:06,740 --> 00:00:09,570 -one class are connected to objects of another. And it's - -4 -00:00:09,570 --> 00:00:12,480 -called an has a relationship. So it means that objects of - -5 -00:00:12,480 --> 00:00:15,930 -one class have objects of another class. So let's see - -6 -00:00:15,930 --> 00:00:18,750 -what that means. Let's do it by considering two classes in - -7 -00:00:18,750 --> 00:00:22,370 -our example system. The student class and the course offering class. - -8 -00:00:22,370 --> 00:00:25,300 -In this case, there is an association between the student and - -9 -00:00:25,300 --> 00:00:28,010 -the course offering, because the student is registering for the - -10 -00:00:28,010 --> 00:00:31,750 -course offering. So, in a sense, the course offering has students. - -11 -00:00:31,750 --> 00:00:35,360 -Contains students, to indicate this fact we add a solid - -12 -00:00:35,360 --> 00:00:38,750 -line between the student class and the course offering. And the - -13 -00:00:38,750 --> 00:00:40,540 -fact that having a solid line doesn't really tell us - -14 -00:00:40,540 --> 00:00:44,780 -much about the nature of the relationship, so to clarify such - -15 -00:00:44,780 --> 00:00:47,550 -nature we can use what we call adornments that we - -16 -00:00:47,550 --> 00:00:51,010 -can apply to associations we can add to associations to clarify - -17 -00:00:51,010 --> 00:00:53,850 -their meaning. In particular we can add a label to - -18 -00:00:53,850 --> 00:00:57,550 -an association and the label describes the nature of the relationship. - -19 -00:00:57,550 --> 00:01:00,440 -In this case, for example, it clarifies that the student - -20 -00:01:00,440 --> 00:01:03,970 -registers for CourseOffering. We can also add a triangle to - -21 -00:01:03,970 --> 00:01:07,050 -further clarify the direction of the relationship. So in this - -22 -00:01:07,050 --> 00:01:10,240 -case, the triangle will indicate that it's the student That registers - -23 -00:01:10,240 --> 00:01:13,120 -for the course offering, and not the other way around. Another - -24 -00:01:13,120 --> 00:01:16,650 -important adornment or limitation that we can put on an association, - -25 -00:01:16,650 --> 00:01:20,800 -is multiplicity. Multiplicity defines the number of instances of one - -26 -00:01:20,800 --> 00:01:23,540 -class that are related to one instance of the other - -27 -00:01:23,540 --> 00:01:26,900 -class. We can define multiplicity at either end of the - -28 -00:01:26,900 --> 00:01:29,620 -relationship. In this case, for instance, we can say that - -29 -00:01:29,620 --> 00:01:31,890 -if we look at the student, the student can register - -30 -00:01:31,890 --> 00:01:35,410 -for two or more course offerings. Whereas, if we look - -31 -00:01:35,410 --> 00:01:37,560 -at the course offering, we can say that each course - -32 -00:01:37,560 --> 00:01:42,260 -offering can have or can enroll between 1 and 50 students. - -33 -00:01:42,260 --> 00:01:45,120 -So as you can see by adding a label, a direction, - -34 -00:01:45,120 --> 00:01:49,590 -and multiplicity, we make it much clearer what the relationship is - -35 -00:01:49,590 --> 00:01:52,170 -and what it means and what are its characteristics. As we - -36 -00:01:52,170 --> 00:01:55,130 -saw when we introduced relationships, there is a different kind of - -37 -00:01:55,130 --> 00:01:58,860 -association, kind of a specialized one, which we call aggregation. So - -38 -00:01:58,860 --> 00:02:01,130 -here we're going to look at an example of an aggregation. So - -39 -00:02:01,130 --> 00:02:03,490 -first of all what is an aggregation? An aggregation is a - -40 -00:02:03,490 --> 00:02:07,580 -relationship between 2 classes in which 1 represents a larger class - -41 -00:02:07,580 --> 00:02:10,610 -like a whole which consists of smaller classes which are - -42 -00:02:10,610 --> 00:02:13,430 -the parts of this whole. So lets look at an example - -43 -00:02:13,430 --> 00:02:16,960 -in the context of our system. Let's consider a Course - -44 -00:02:16,960 --> 00:02:19,160 -and the CourseOffering. And in this case, we can see - -45 -00:02:19,160 --> 00:02:23,000 -that the Course consists of multiple CourseOfferings. So in - -46 -00:02:23,000 --> 00:02:26,520 -a sense, a course is a whole and the course offerings - -47 -00:02:26,520 --> 00:02:29,430 -are the parts of this whole. So this a perfect case - -48 -00:02:29,430 --> 00:02:32,620 -in which we will use an aggregation to express this relationship. - -49 -00:02:32,620 --> 00:02:37,630 -So we will add a solid line with a diamond on the side of the whole class - -50 -00:02:37,630 --> 00:02:42,380 -to indicate that the course consists of multiple course offerings. - -51 -00:02:42,380 --> 00:02:44,670 -And as we did for associations even though we - -52 -00:02:44,670 --> 00:02:46,010 -are not going to do it for this specific - -53 -00:02:46,010 --> 00:02:49,540 -example, we could also in this case add multiplicity - -54 -00:02:49,540 --> 00:02:52,830 -information on the aggregation to indicate how many classes - -55 -00:02:52,830 --> 00:02:55,310 -of the two types are involved in the relationships. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/21 - Class Diagram: Generalization Relationship - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/21 - Class Diagram: Generalization Relationship - lang_en_vs5.srt deleted file mode 100644 index 513413b..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/21 - Class Diagram: Generalization Relationship - lang_en_vs5.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,420 -The third type of relationship that we saw, is - -2 -00:00:02,420 --> 00:00:07,060 -Generalization. Generalization is a relationship, between a general class, - -3 -00:00:07,060 --> 00:00:10,150 -which we normally call super-class and the more specific - -4 -00:00:10,150 --> 00:00:13,510 -class, a class the refines the super-class and that - -5 -00:00:13,510 --> 00:00:16,950 -we normally call sub-class. It's also known as a - -6 -00:00:16,950 --> 00:00:19,690 -kind of or is a relationship because we can - -7 -00:00:19,690 --> 00:00:22,850 -say that the subclass is a super class and - -8 -00:00:22,850 --> 00:00:25,450 -it's expressed with a solid line with a big arrow - -9 -00:00:25,450 --> 00:00:27,580 -head at the end. So let's see an example of - -10 -00:00:27,580 --> 00:00:30,160 -that. In this case I'm going to indicate. Two of this kind - -11 -00:00:30,160 --> 00:00:33,950 -of relationships. The first one involving the RegistrationUser and - -12 -00:00:33,950 --> 00:00:37,000 -a student. And the second one, a RegistrationUser and the - -13 -00:00:37,000 --> 00:00:39,960 -professor. So, basically what we're showing here is a - -14 -00:00:39,960 --> 00:00:43,170 -typical case in which the registration user is a more general - -15 -00:00:43,170 --> 00:00:46,630 -concept then the Student and the Professor. So both the student - -16 -00:00:46,630 --> 00:00:50,710 -and the professor are RegistrationUsers. So there is a relationship, - -17 -00:00:50,710 --> 00:00:54,360 -the Professor is a registration user and the Student is a RegistrationUser. - -18 -00:00:54,360 --> 00:00:56,780 -And therefore we can indicate that using - -19 -00:00:56,780 --> 00:01:00,040 -the generalization relationship in our class diagram. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/22 - Class Diagram: Creation Tips - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/22 - Class Diagram: Creation Tips - lang_en_vs5.srt deleted file mode 100644 index 8aa0204..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/22 - Class Diagram: Creation Tips - lang_en_vs5.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,320 -The last thing that I want to mention about class diagrams is - -2 -00:00:02,320 --> 00:00:05,830 -some creation tips. So something I know based on my experience and the - -3 -00:00:05,830 --> 00:00:09,300 -experience of others, I can recommend to do when creating a class - -4 -00:00:09,300 --> 00:00:12,780 -diagram. So the first tip is to understand the problem. So take the - -5 -00:00:12,780 --> 00:00:15,070 -time to look at the description of the system that you have - -6 -00:00:15,070 --> 00:00:18,500 -to build, to make sure that you understand the domain. That you understand - -7 -00:00:18,500 --> 00:00:21,230 -what you are supposed to build. Because that is going to save you - -8 -00:00:21,230 --> 00:00:25,550 -time later. It's going to help you identify from the beginning, a more relevant - -9 -00:00:25,550 --> 00:00:28,370 -set of entities in the description of the system. This - -10 -00:00:28,370 --> 00:00:30,730 -one might seem trivial but is very important to choose - -11 -00:00:30,730 --> 00:00:34,910 -good class names. Why? Because class names communicate the intent - -12 -00:00:34,910 --> 00:00:37,770 -of the class, and clarify what the class refers to. So - -13 -00:00:37,770 --> 00:00:40,510 -having a good class name allows you, makes it easier, to - -14 -00:00:40,510 --> 00:00:44,390 -create the mapping between the real-world object and the entities in - -15 -00:00:44,390 --> 00:00:46,610 -your model. And of course, it also makes it easier - -16 -00:00:46,610 --> 00:00:50,100 -to understand the system, after the system is built. Third tip, - -17 -00:00:50,100 --> 00:00:53,480 -concentrate on the what. So here, in the class diagram, - -18 -00:00:53,480 --> 00:00:57,390 -we're just representing the structure of the system. We're representing - -19 -00:00:57,390 --> 00:01:00,150 -what is in the system. What are the entities? What - -20 -00:01:00,150 --> 00:01:03,140 -are the characteristics of the entities? We are not focusing - -21 -00:01:03,140 --> 00:01:06,850 -at all, on how things are done. So, be careful. - -22 -00:01:06,850 --> 00:01:09,430 -DonâÂÂt think about the how, just think about the what. - -23 -00:01:09,430 --> 00:01:12,150 -Proceed in an itinerary way. So, start with a simple - -24 -00:01:12,150 --> 00:01:14,910 -diagram and refine it. There is no need to identify, - -25 -00:01:14,910 --> 00:01:17,650 -right away, all of the details of the system you need to - -26 -00:01:17,650 --> 00:01:21,570 -build. It is much easier to look at the description, identify an initial - -27 -00:01:21,570 --> 00:01:24,670 -rough class diagram and then refine it, because in this way, you'll - -28 -00:01:24,670 --> 00:01:27,650 -also gather more understanding of the system as you build it, and you'll - -29 -00:01:27,650 --> 00:01:30,670 -most likely end up with a better product at the end. And - -30 -00:01:30,670 --> 00:01:33,360 -if you proceed in this way, then make sure to refine until you - -31 -00:01:33,360 --> 00:01:36,920 -feel the class diagram is complete, until you feel that you represent - -32 -00:01:36,920 --> 00:01:39,960 -the system that you're supposed to build. So your final goal should be - -33 -00:01:39,960 --> 00:01:41,820 -to have a class diagram that is complete. - -34 -00:01:41,820 --> 00:01:43,870 -So it represents all of the relevant entities - -35 -00:01:43,870 --> 00:01:45,870 -in the system and their characteristics, and it's - -36 -00:01:45,870 --> 00:01:48,170 -correct so it represents them in the right way diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/23 - UML Structural Diagrams: Component Diagram - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/23 - UML Structural Diagrams: Component Diagram - lang_en_vs5.srt deleted file mode 100644 index 8ce2080..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/23 - UML Structural Diagrams: Component Diagram - lang_en_vs5.srt +++ /dev/null @@ -1,235 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,160 -There's two more structural diagrams that I want to - -2 -00:00:02,160 --> 00:00:04,670 -mention before we move to the behavioral ones. The - -3 -00:00:04,670 --> 00:00:07,420 -first one's the component diagram. A component diagram is - -4 -00:00:07,420 --> 00:00:09,690 -a static view of components in a system and of - -5 -00:00:09,690 --> 00:00:13,010 -their relationships. More precisely, a node in a component - -6 -00:00:13,010 --> 00:00:16,700 -diagram represents a component where a component consists of one - -7 -00:00:16,700 --> 00:00:21,090 -or more classes with a well-defined interface. Edges conversely - -8 -00:00:21,090 --> 00:00:25,290 -indicate relationships between the components. You can read this relationship - -9 -00:00:25,290 --> 00:00:29,600 -as component A uses services of component B. And notice that the - -10 -00:00:29,600 --> 00:00:32,990 -component diagrams can be used to represent an architecture, which is - -11 -00:00:32,990 --> 00:00:36,110 -a topic that we will cover extensively in the next mini-course. - -12 -00:00:36,110 --> 00:00:39,540 -So let's illustrate this with an example. So, what I'm representing - -13 -00:00:39,540 --> 00:00:43,160 -here is a component diagram for our example system, the course - -14 -00:00:43,160 --> 00:00:46,220 -management system. And as you can see, it's slightly more complex - -15 -00:00:46,220 --> 00:00:48,390 -than the other diagrams that we saw. But there's really no - -16 -00:00:48,390 --> 00:00:50,700 -need to go through all the steps and all the details. - -17 -00:00:50,700 --> 00:00:53,470 -Important thing is to point out some key aspects of - -18 -00:00:53,470 --> 00:00:56,370 -this diagram. So the first one is that these rectangular - -19 -00:00:56,370 --> 00:00:58,560 -nodes are the nodes in the system, so are my - -20 -00:00:58,560 --> 00:01:02,960 -components. For example, student is a component, schedule is a component, - -21 -00:01:02,960 --> 00:01:05,069 -and so on. And as far as edges are concerned, - -22 -00:01:05,069 --> 00:01:08,580 -I'm representing two kinds of edges. The first kind of dashed - -23 -00:01:08,580 --> 00:01:12,060 -edges which were part of the original uml definition and - -24 -00:01:12,060 --> 00:01:16,120 -indicate use. So an edge, for example, between this compnent and - -25 -00:01:16,120 --> 00:01:19,570 -this compnent indicated that the seminar management uses the - -26 -00:01:19,570 --> 00:01:23,890 -facilities component. More recently, in UML two, a richer representation - -27 -00:01:23,890 --> 00:01:26,240 -was introduced, which is the one that I'm also showing - -28 -00:01:26,240 --> 00:01:27,860 -here. So if we look at this part of the - -29 -00:01:27,860 --> 00:01:29,540 -diagram, you can see this sort of you now, - -30 -00:01:29,540 --> 00:01:34,080 -lollipop socket representation. And in this case, what this represents, - -31 -00:01:34,080 --> 00:01:37,920 -is that a lollipop indicates a provided interface. So an - -32 -00:01:37,920 --> 00:01:41,500 -interface that is provided by the component. So, for example, - -33 -00:01:41,500 --> 00:01:45,940 -this security component provides encryption capabilities. The socket, - -34 -00:01:45,940 --> 00:01:49,190 -conversely, indicates a required interface. So, for example, in - -35 -00:01:49,190 --> 00:01:52,270 -this case, it's saying that the facilities component - -36 -00:01:52,270 --> 00:01:55,920 -is needing access control capabilities, which, by the way, - -37 -00:01:55,920 --> 00:01:58,660 -is provided by the security component. So in - -38 -00:01:58,660 --> 00:02:02,240 -a sense these sockets and lollipop indicate interfaces between - -39 -00:02:02,240 --> 00:02:04,770 -a provider of some of functionality, and the client - -40 -00:02:04,770 --> 00:02:06,630 -of that functionality and you can look at those - -41 -00:02:06,630 --> 00:02:09,740 -as basically APIs. So sets of methods that - -42 -00:02:09,740 --> 00:02:12,160 -provide a given functionality. To give you another - -43 -00:02:12,160 --> 00:02:14,760 -example, if we look at the persistence components - -44 -00:02:14,760 --> 00:02:19,110 -the persistence component provides, unsurprisingly, persistent services. And - -45 -00:02:19,110 --> 00:02:21,650 -those persistent services are required by several other - -46 -00:02:21,650 --> 00:02:24,520 -components in the system. And in turn, the persistent - -47 -00:02:24,520 --> 00:02:28,320 -components relies on the University database component to - -48 -00:02:28,320 --> 00:02:31,740 -provide such services. So, there's the University DB components - -49 -00:02:31,740 --> 00:02:34,700 -provide these sort of low-level database services that are used - -50 -00:02:34,700 --> 00:02:38,150 -by the persistence component To in turn provided services. Last thing - -51 -00:02:38,150 --> 00:02:41,080 -I want to note is that components or relationships can be - -52 -00:02:41,080 --> 00:02:44,450 -annotated, so, for example if we look at the seminar management - -53 -00:02:44,450 --> 00:02:47,090 -and the student administration components you can see that they - -54 -00:02:47,090 --> 00:02:51,360 -are annotated here to indicate that they are user inferfaces. So - -55 -00:02:51,360 --> 00:02:53,600 -that's all I wanted to say on the component diagrams, but - -56 -00:02:53,600 --> 00:02:56,750 -again the key piece of information is that they represent components - -57 -00:02:56,750 --> 00:03:00,250 -in the system where a component consists of one or more classes indicate the - -58 -00:03:00,250 --> 00:03:03,540 -interfaces that these components provide or require. - -59 -00:03:03,540 --> 00:03:06,210 -and describe the interactions between these components. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/24 - UML Structural Diagrams: Deployment - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/24 - UML Structural Diagrams: Deployment - lang_en_vs4.srt deleted file mode 100644 index 07c9a3e..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/24 - UML Structural Diagrams: Deployment - lang_en_vs4.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,980 -The last UML structural diagram I want to discuss - -2 -00:00:02,980 --> 00:00:06,750 -is the deployment diagram. The deployment diagram provides a static - -3 -00:00:06,750 --> 00:00:10,220 -deployment view of a system, and unlike previous diagram, - -4 -00:00:10,220 --> 00:00:13,980 -it is about the physical allocation of components to computational - -5 -00:00:13,980 --> 00:00:16,950 -units. Think, for example, of a client-server system in - -6 -00:00:16,950 --> 00:00:19,130 -which you'll have to define which components will go on - -7 -00:00:19,130 --> 00:00:20,880 -the server and which component will go on the - -8 -00:00:20,880 --> 00:00:25,200 -client. For deployment diagram, the nodes correspond to computation unit; - -9 -00:00:25,200 --> 00:00:29,090 -for example, a specific device. And the edges indicate communication - -10 -00:00:29,090 --> 00:00:32,880 -between these units. Also in this case, I'm going to illustrate deployment - -11 -00:00:32,880 --> 00:00:36,720 -diagrams using an example for our course management system. And - -12 -00:00:36,720 --> 00:00:39,820 -also in this case, I'm going to use a slightly more complex - -13 -00:00:39,820 --> 00:00:41,910 -diagram than usual. But I don't want you to look - -14 -00:00:41,910 --> 00:00:45,170 -at all the individual details. Instead, I would like to focus - -15 -00:00:45,170 --> 00:00:47,530 -on a few main aspects. So, if you look at - -16 -00:00:47,530 --> 00:00:50,700 -this diagram, there are three things that you should clearly see. - -17 -00:00:50,700 --> 00:00:53,555 -First, you should see how the system involves four - -18 -00:00:53,555 --> 00:00:56,590 -nodes, a web server, an application server, a DB - -19 -00:00:56,590 --> 00:00:59,740 -server, and a mainframe. Second, you should see which - -20 -00:00:59,740 --> 00:01:03,500 -components are deployed on which nodes. For example, the student - -21 -00:01:03,500 --> 00:01:07,400 -component is deployed on the application server. And finally, - -22 -00:01:07,400 --> 00:01:09,570 -you should see how the nodes communicate with one - -23 -00:01:09,570 --> 00:01:11,880 -another. For example, you can see that the application - -24 -00:01:11,880 --> 00:01:17,030 -server and the university database communicate using a JDBC protocol. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/25 - UML Behavioral Diagrams: Use Case - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/25 - UML Behavioral Diagrams: Use Case - lang_en_vs5.srt deleted file mode 100644 index bdfe33a..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/25 - UML Behavioral Diagrams: Use Case - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,110 --> 00:00:04,700 -We now discuss UML's behavioral diagrams. Those diagrams that - -2 -00:00:04,700 --> 00:00:07,490 -have to do with the behavior, the dynamic aspects - -3 -00:00:07,490 --> 00:00:09,940 -of the system, rather than the static ones. The - -4 -00:00:09,940 --> 00:00:12,670 -first behavioral diagram I want to discuss is a very - -5 -00:00:12,670 --> 00:00:15,590 -fundamental one, the Use Case Diagram. So, let's start - -6 -00:00:15,590 --> 00:00:18,370 -by seeing what a Use Case is. A Use Case - -7 -00:00:18,370 --> 00:00:21,800 -represents two main things. First the sequence of interactions - -8 -00:00:21,800 --> 00:00:25,250 -of outside entities which is what we normally call actors - -9 -00:00:25,250 --> 00:00:27,990 -with the system that we're modelling and the second thing - -10 -00:00:27,990 --> 00:00:32,290 -is the system actions that yield an observable result of values - -11 -00:00:32,290 --> 00:00:35,380 -to the actors. And basically these two things, and nothing else - -12 -00:00:35,380 --> 00:00:38,010 -that the outside view of the system. So the view of - -13 -00:00:38,010 --> 00:00:41,060 -the system in which we look at the interaction between - -14 -00:00:41,060 --> 00:00:44,170 -this system, and the outside world. If you want to parallel, think - -15 -00:00:44,170 --> 00:00:48,070 -about designing a house. Considering how you would use the house. - -16 -00:00:48,070 --> 00:00:50,550 -And you might have seen use cases called with different names. - -17 -00:00:50,550 --> 00:00:54,820 -So for example, they're also called scenarios, scripts or user stories, - -18 -00:00:54,820 --> 00:00:58,220 -but in the context of UML, we'll call the use cases. - -19 -00:00:58,220 --> 00:01:00,650 -Now let's look at the basic notation for a use case, - -20 -00:01:00,650 --> 00:01:03,910 -which is fairly simple. We have a use case which is represented - -21 -00:01:03,910 --> 00:01:05,760 -by an oval, with a name, which is the name of - -22 -00:01:05,760 --> 00:01:08,520 -the use case. We have an actor, which is represented by - -23 -00:01:08,520 --> 00:01:12,330 -this icon and is normally identified by a role name. And - -24 -00:01:12,330 --> 00:01:15,820 -finally we have an edge which is a solid line that connects - -25 -00:01:15,820 --> 00:01:18,970 -actors and use cases and indicates that an actor - -26 -00:01:18,970 --> 00:01:21,270 -is the actor of a given use case. And just - -27 -00:01:21,270 --> 00:01:24,360 -for completeness let me note there are some additional notational - -28 -00:01:24,360 --> 00:01:27,750 -elements but now for simplicity we'll just use these ones. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/26 - Use Case Diagram: Actors - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/26 - Use Case Diagram: Actors - lang_en_vs5.srt deleted file mode 100644 index 4d80c61..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/26 - Use Case Diagram: Actors - lang_en_vs5.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,320 -Now, let's look at use cases in a little more detail. - -2 -00:00:02,320 --> 00:00:05,480 -And start by defining exactly what an actor is. An actor - -3 -00:00:05,480 --> 00:00:08,710 -represents an entity, which can be a human or a device, - -4 -00:00:08,710 --> 00:00:12,750 -that plays a role within my system, so that interacts with my - -5 -00:00:12,750 --> 00:00:15,660 -system. It's some entity from the outside world, with respect to - -6 -00:00:15,660 --> 00:00:18,510 -my system, that interacts with my system. It is important to - -7 -00:00:18,510 --> 00:00:21,750 -clarify that an entity can play more than one role. For - -8 -00:00:21,750 --> 00:00:25,240 -example, you might have somebody working in a bank that can be - -9 -00:00:25,240 --> 00:00:28,400 -both an employee of the bank, or a customer of - -10 -00:00:28,400 --> 00:00:31,280 -the bank, depending on how it interacts with the banking - -11 -00:00:31,280 --> 00:00:34,360 -system. And, obviously, more than one entity can play the - -12 -00:00:34,360 --> 00:00:37,570 -same role. Using the same example, we can have both an - -13 -00:00:37,570 --> 00:00:40,350 -employee of the bank and just a regular customer, playing - -14 -00:00:40,350 --> 00:00:43,280 -the role of the customer. So again, it all depends on - -15 -00:00:43,280 --> 00:00:46,120 -what the entity does, how the entity interacts with the - -16 -00:00:46,120 --> 00:00:50,150 -system, what kind of functionality of the system the entity uses. - -17 -00:00:50,150 --> 00:00:53,270 -And finally, actors may appear in more than one use case. - -18 -00:00:53,270 --> 00:00:55,930 -So it's fairly normal for the same actor to interact with - -19 -00:00:55,930 --> 00:00:58,540 -the system in different ways. And therefore, to appear in more - -20 -00:00:58,540 --> 00:01:00,710 -than one use case. Just think about the use cases in - -21 -00:01:00,710 --> 00:01:04,230 -scenarios of usage. If the same actor can interact with the - -22 -00:01:04,230 --> 00:01:07,440 -system in different ways, that actor will appear in multiple use - -23 -00:01:07,440 --> 00:01:11,210 -cases. Now let's go back to the description of our course - -24 -00:01:11,210 --> 00:01:15,140 -management system, and see how we can identify actors in the system. - -25 -00:01:15,140 --> 00:01:17,500 -And as we did for the class diagram before, I encourage - -26 -00:01:17,500 --> 00:01:20,160 -you to stop the video and try to identify the actors - -27 -00:01:20,160 --> 00:01:22,301 -in the system yourself, before I do it. - -28 -00:01:23,475 --> 00:01:27,250 -If we look at the description, we can see that, for example, the Registration - -29 -00:01:27,250 --> 00:01:30,890 -Manager is clearly an actor for the system. Students are actors - -30 -00:01:30,890 --> 00:01:34,400 -for the system. Professors are actors for the system. And notice - -31 -00:01:34,400 --> 00:01:36,060 -that we're not doing the same thing that we were doing - -32 -00:01:36,060 --> 00:01:38,360 -when identifying classes. Here we're identifying - -33 -00:01:38,360 --> 00:01:40,460 -entities that are from the outside - -34 -00:01:40,460 --> 00:01:43,090 -world, and have an active role in interacting with my - -35 -00:01:43,090 --> 00:01:46,830 -system. Again, Registration Manager, that we will just call registrar for - -36 -00:01:46,830 --> 00:01:50,660 -simplicity, students, and professors. So once we have identified the - -37 -00:01:50,660 --> 00:01:53,760 -actors for our example, we can simply draw them, using the - -38 -00:01:53,760 --> 00:01:56,550 -notation that we just introduced. So we have the registrar, - -39 -00:01:56,550 --> 00:01:59,830 -and notice how for every actor we clarify the role that - -40 -00:01:59,830 --> 00:02:02,450 -the actor plays. We have the professor, and we have - -41 -00:02:02,450 --> 00:02:05,480 -the student. So here, these are the three actors that we - -42 -00:02:05,480 --> 00:02:07,000 -identified for our system. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/27 - Building a Use Case Diagram - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/27 - Building a Use Case Diagram - lang_en_vs5.srt deleted file mode 100644 index 4c62396..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/27 - Building a Use Case Diagram - lang_en_vs5.srt +++ /dev/null @@ -1,203 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,120 -Now if you want to build a use case diagram for - -2 -00:00:02,120 --> 00:00:04,520 -our example, we have to add the use cases for - -3 -00:00:04,520 --> 00:00:07,710 -these different actors. For instance, if we consider the student - -4 -00:00:07,710 --> 00:00:10,810 -and the registrar, they might be both interacting with the maintain - -5 -00:00:10,810 --> 00:00:14,950 -schedule system, the registrar by updating the schedule and the - -6 -00:00:14,950 --> 00:00:18,125 -students by using the schedule that has been updated by the - -7 -00:00:18,125 --> 00:00:20,860 -registrar. As you can see, different roles for the same - -8 -00:00:20,860 --> 00:00:24,962 -use case. Another possible use case is the request course roster. - -9 -00:00:24,962 --> 00:00:28,520 -And on this case, the professor will request the roster - -10 -00:00:28,520 --> 00:00:31,960 -by interacting with the system. We will continue in this way - -11 -00:00:31,960 --> 00:00:35,270 -by further refining and by further adding use cases as we - -12 -00:00:35,270 --> 00:00:39,240 -identify possible interactions of the actors that we identified with our - -13 -00:00:39,240 --> 00:00:42,380 -system. So in summary, what the use case diagram is doing - -14 -00:00:42,380 --> 00:00:45,370 -is to show the actors and their interaction with the system - -15 -00:00:45,370 --> 00:00:47,680 -through a set of use cases. At this point, it should - -16 -00:00:47,680 --> 00:00:49,990 -be pretty clear that sure, this gives us an idea of - -17 -00:00:49,990 --> 00:00:53,630 -the interactions but we don't really know how these interactions occur. - -18 -00:00:53,630 --> 00:00:55,870 -So there is one piece that is missing, which is how - -19 -00:00:55,870 --> 00:00:58,850 -do we document the use cases, how do we describe what - -20 -00:00:58,850 --> 00:01:02,010 -happens and what these interactions actually are. And that's exactly what - -21 -00:01:02,010 --> 00:01:05,410 -we're going to discuss now, how to document use cases. So the - -22 -00:01:05,410 --> 00:01:09,000 -behavior of a use case can be specified by describing its - -23 -00:01:09,000 --> 00:01:11,650 -flow of events. And it is important to note that the - -24 -00:01:11,650 --> 00:01:15,190 -flow of events should be described from an actor's point of view, - -25 -00:01:15,190 --> 00:01:17,690 -so from the point of view of the external entity that - -26 -00:01:17,690 --> 00:01:22,070 -is interacting with my system. So the description should detail what - -27 -00:01:22,070 --> 00:01:24,480 -the system must provide to the actor when the use case - -28 -00:01:24,480 --> 00:01:28,170 -is executed. In particular, it should describe how the use case - -29 -00:01:28,170 --> 00:01:31,670 -starts and ends. It should describe the normal flow of events, - -30 -00:01:31,670 --> 00:01:34,280 -what is the normal interaction. And in addition to the normal - -31 -00:01:34,280 --> 00:01:37,720 -flow of events, it should also describe possibly alternative flows of - -32 -00:01:37,720 --> 00:01:40,240 -events. For example, in the case in which there are multiple - -33 -00:01:40,240 --> 00:01:44,450 -ways of accomplishing one action or performing a task. And finally, - -34 -00:01:44,450 --> 00:01:47,880 -it should also describe exceptional flow of events. For example, assume that - -35 -00:01:47,880 --> 00:01:50,910 -you are describing a use case for withdrawing money from an - -36 -00:01:50,910 --> 00:01:54,230 -ATM. You may want to describe the normal flow of events in which - -37 -00:01:54,230 --> 00:01:56,590 -I insert my card, I provide my pin and so on. - -38 -00:01:56,590 --> 00:01:59,750 -An alternative one in which, in addition to withdrawing cash, maybe I'll - -39 -00:01:59,750 --> 00:02:02,550 -also first ask for some information about how much money is - -40 -00:02:02,550 --> 00:02:05,390 -in my account. And finally, I may want to also describe an exceptional - -41 -00:02:05,390 --> 00:02:07,900 -flow of events in which I get my pin wrong and, - -42 -00:02:07,900 --> 00:02:11,140 -therefore, I'm not able to perform the operation. One more thing I - -43 -00:02:11,140 --> 00:02:14,140 -want to mention, when we talk about documenting use cases, is - -44 -00:02:14,140 --> 00:02:17,770 -the fact that the description of this information can be provided in - -45 -00:02:17,770 --> 00:02:20,650 -two main ways, in an informal way or in a formal - -46 -00:02:20,650 --> 00:02:23,330 -way. In the case of an informal description, we could just have - -47 -00:02:23,330 --> 00:02:27,540 -a textual description of the flow of events in natural language. - -48 -00:02:27,540 --> 00:02:30,250 -In the case of a formal or structured description, we may use, - -49 -00:02:30,250 --> 00:02:32,610 -for example, pre and post conditions, pseudo - -50 -00:02:32,610 --> 00:02:34,680 -code to indicate the steps. We could - -51 -00:02:34,680 --> 00:02:38,010 -also use the sequence diagrams, which is something that we will see in a minute. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/28 - Use Case Example - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/28 - Use Case Example - lang_en_vs5.srt deleted file mode 100644 index 8f8bead..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/28 - Use Case Example - lang_en_vs5.srt +++ /dev/null @@ -1,243 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,310 -So, as we did for the previous cases, now let's look - -2 -00:00:02,310 --> 00:00:06,890 -at an example. Let's consider a specific use case, maintain curriculum, in - -3 -00:00:06,890 --> 00:00:10,570 -which we have the registrar that interacts with the system to do - -4 -00:00:10,570 --> 00:00:14,320 -operations for maintaining the curriculum. And, let's define the flow of events - -5 -00:00:14,320 --> 00:00:17,040 -for this use case. To do this, we're going to go back, as - -6 -00:00:17,040 --> 00:00:20,380 -usual, to the description of our system. So this is the one - -7 -00:00:20,380 --> 00:00:22,670 -that you already saw several times, but I would like for you - -8 -00:00:22,670 --> 00:00:25,080 -to do something. I would like for you to stop the video, - -9 -00:00:25,080 --> 00:00:27,890 -look back at the spec, the one that is shown here. - -10 -00:00:27,890 --> 00:00:30,850 -And write on your own, what you think is the informal flow - -11 -00:00:30,850 --> 00:00:35,060 -of events that categorizes the interaction of the registration manager with - -12 -00:00:35,060 --> 00:00:37,500 -the system. And it is very important that you keep in mind - -13 -00:00:37,500 --> 00:00:40,140 -something as you're doing that. You should keep in mind that, - -14 -00:00:40,140 --> 00:00:41,940 -as it always happens, when extracting - -15 -00:00:41,940 --> 00:00:44,270 -requirements from an initial specification, in - -16 -00:00:44,270 --> 00:00:47,570 -particular an informal one like this one, a high-level one, you - -17 -00:00:47,570 --> 00:00:50,130 -will have to be able to read between the lines and fill - -18 -00:00:50,130 --> 00:00:52,690 -in the blanks. That is, you have to provide the information - -19 -00:00:52,690 --> 00:00:55,770 -for the missing parts using your domain knowledge. So try to - -20 -00:00:55,770 --> 00:00:58,820 -do that exercise. Read the description, and see how you will - -21 -00:00:58,820 --> 00:01:02,470 -define the steps, the flow of events for the maintain curriculum use - -22 -00:01:02,470 --> 00:01:06,230 -case. If you're done with that, now let's see the possible - -23 -00:01:06,230 --> 00:01:09,080 -informal paragraph that describes that flow of events. And the one - -24 -00:01:09,080 --> 00:01:12,070 -I'm providing now is just one possibility, based on my experience - -25 -00:01:12,070 --> 00:01:15,040 -and based on the way I see this possible flow of events. - -26 -00:01:15,040 --> 00:01:17,950 -So yours might look different, of course. In my case, because - -27 -00:01:17,950 --> 00:01:20,880 -the description was measuring the fact that every user has got - -28 -00:01:20,880 --> 00:01:23,590 -a log-in and a password. I decided that the first step - -29 -00:01:23,590 --> 00:01:27,120 -should be that the registrar logs onto the system and enters his - -30 -00:01:27,120 --> 00:01:30,390 -or her password. As it normally happens with password protected systems, - -31 -00:01:30,390 --> 00:01:32,660 -if the password is valid, the registrar will get into the - -32 -00:01:32,660 --> 00:01:35,870 -system. And the system at this point should ask to specify - -33 -00:01:35,870 --> 00:01:40,810 -a semester for which the maintain curriculum activity has to be performed. - -34 -00:01:40,810 --> 00:01:44,290 -The registrar will therefor enter the desired semester. The interface - -35 -00:01:44,290 --> 00:01:46,740 -I envisioned is one in which the system will prompt - -36 -00:01:46,740 --> 00:01:50,690 -the registrar to select the desired activity. Add, delete, review, - -37 -00:01:50,690 --> 00:01:53,560 -or quit. And if the registrar selects add, the system - -38 -00:01:53,560 --> 00:01:56,060 -will allow the registrar to add a course to the - -39 -00:01:56,060 --> 00:01:59,660 -course list for the selected semester. Similarly, if the registrar - -40 -00:01:59,660 --> 00:02:02,550 -selects delete, the system will let the registrar delete a - -41 -00:02:02,550 --> 00:02:05,840 -course from the course list for the selected semester. And again - -42 -00:02:05,840 --> 00:02:08,660 -similarly, if the registrar selects review, the system will - -43 -00:02:08,660 --> 00:02:12,030 -simply display the course information in the course list for - -44 -00:02:12,030 --> 00:02:15,230 -the selected semester. And finally, if the registrar selects quit, - -45 -00:02:15,230 --> 00:02:18,110 -the system will simply exit and our use case will - -46 -00:02:18,110 --> 00:02:21,150 -end. So, again, there's the main knowledge that goes into - -47 -00:02:21,150 --> 00:02:23,620 -this. But this is a good example of how you - -48 -00:02:23,620 --> 00:02:27,960 -can refine the initial description to identify these scenarios that - -49 -00:02:27,960 --> 00:02:30,830 -then you will use to specify and implement your system. - -50 -00:02:30,830 --> 00:02:33,770 -And as we discussed a few minutes ago, we provided the information - -51 -00:02:33,770 --> 00:02:37,420 -that is requested for the use case, how the use case starts, - -52 -00:02:37,420 --> 00:02:40,620 -by logging into the system. And how it ends, by selecting quit. - -53 -00:02:40,620 --> 00:02:43,294 -We described the normal flow of events. And, of course, these flow - -54 -00:02:43,294 --> 00:02:46,580 -of events could be improved, because right now even though we described - -55 -00:02:46,580 --> 00:02:50,020 -how the use case starts and ends, we just described one possible - -56 -00:02:50,020 --> 00:02:53,340 -flow of events. But there's many alternative ways we could provide and - -57 -00:02:53,340 --> 00:02:55,890 -we do not describe any exception of flow of events. So this could - -58 -00:02:55,890 --> 00:02:58,540 -be the starting point for multiple use cases, or - -59 -00:02:58,540 --> 00:03:02,092 -for use cases just richer and contains more information, more - -60 -00:03:02,092 --> 00:03:04,474 -steps to a richer flow. But you should have - -61 -00:03:04,474 --> 00:03:06,510 -gotten the idea of what a use case should be. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/29 - Role of Use Cases - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/29 - Role of Use Cases - lang_en_vs5.srt deleted file mode 100644 index 11c0187..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/29 - Role of Use Cases - lang_en_vs5.srt +++ /dev/null @@ -1,151 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,510 -As I mentioned when we started talking about use cases, use - -2 -00:00:02,510 --> 00:00:06,040 -cases are fundamental in UML, and in general. So, now I - -3 -00:00:06,040 --> 00:00:08,510 -would like to discuss why they're so important and what are - -4 -00:00:08,510 --> 00:00:11,900 -the different roles that use cases can play. The first obvious one - -5 -00:00:11,900 --> 00:00:15,510 -is for requirements elicitation. It is much easier to describe what - -6 -00:00:15,510 --> 00:00:17,650 -the system should do if we think about the system in - -7 -00:00:17,650 --> 00:00:21,070 -terms of scenarios of usage. Rather than trying to describe the - -8 -00:00:21,070 --> 00:00:25,450 -whole functionality of the system at once. So, use cases can help - -9 -00:00:25,450 --> 00:00:28,890 -performing a more effective requirement solicitation. As we will - -10 -00:00:28,890 --> 00:00:31,700 -see when we discuss the unified software process, they can - -11 -00:00:31,700 --> 00:00:34,980 -be used for architectural analysis. So, use cases are the - -12 -00:00:34,980 --> 00:00:38,165 -starting point for the analysis of the architecture of the - -13 -00:00:38,165 --> 00:00:40,765 -system that can help identify the main blocks of - -14 -00:00:40,765 --> 00:00:44,016 -the system. And therefore, can help define in the initial - -15 -00:00:44,016 --> 00:00:47,360 -architecture. And as I said, we'll talk more extensively about - -16 -00:00:47,360 --> 00:00:50,460 -that. They can be used for user prioritization. For example, - -17 -00:00:50,460 --> 00:00:53,230 -imagine to have multiple actors in the system, and you - -18 -00:00:53,230 --> 00:00:56,160 -might want to prioritize some of them. For instance, using - -19 -00:00:56,160 --> 00:00:59,810 -again the banking system example, we might want to first - -20 -00:00:59,810 --> 00:01:03,477 -provide functionality for the administrators of the bank. And only - -21 -00:01:03,477 --> 00:01:06,384 -in a second time provide functionality for the customers, because - -22 -00:01:06,384 --> 00:01:09,342 -of course, if the administrator cannot perform any operation, the - -23 -00:01:09,342 --> 00:01:12,030 -customers cannot use the system. So again, they can be - -24 -00:01:12,030 --> 00:01:15,980 -used to prioritize the users. Or the actors, and therefore - -25 -00:01:15,980 --> 00:01:19,390 -define which part of the system should be built in which order. - -26 -00:01:19,390 --> 00:01:22,120 -Related to this point, they can be used for planning. If I - -27 -00:01:22,120 --> 00:01:25,000 -know which pieces of functionality I need to build and in which - -28 -00:01:25,000 --> 00:01:27,980 -order, I can better plan the development of my system. And again, - -29 -00:01:27,980 --> 00:01:31,280 -we will see how this becomes very important in many different software - -30 -00:01:31,280 --> 00:01:35,037 -life cycles. So, both in the unified software process, for instance, but - -31 -00:01:35,037 --> 00:01:38,570 -also in more agile development processes. And finally, use cases can be - -32 -00:01:38,570 --> 00:01:40,980 -used for testing. If I have an early description of what the - -33 -00:01:40,980 --> 00:01:44,290 -system should do, what are the main pieces of functionality of the system. And I - -34 -00:01:44,290 --> 00:01:46,700 -know how the interaction between the actors and - -35 -00:01:46,700 --> 00:01:49,510 -the system is, I can easily define test - -36 -00:01:49,510 --> 00:01:52,010 -cases, even before writing the code, even before - -37 -00:01:52,010 --> 00:01:54,180 -defining my system. And when we discuss testing, - -38 -00:01:54,180 --> 00:01:57,590 -we will get back to this and talk a little more extensively about this, as well. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/3 - Objects and Classes - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/3 - Objects and Classes - lang_en_vs5.srt deleted file mode 100644 index 85bb32f..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/3 - Objects and Classes - lang_en_vs5.srt +++ /dev/null @@ -1,83 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,770 -Let's start with objects. An object is a - -2 -00:00:02,770 --> 00:00:06,330 -computing unit organized around a collection of state - -3 -00:00:06,330 --> 00:00:09,350 -or instance variables that define the state of - -4 -00:00:09,350 --> 00:00:12,390 -the object. In addition, each object has associated - -5 -00:00:12,390 --> 00:00:15,150 -with it a set operations or methods that - -6 -00:00:15,150 --> 00:00:17,850 -operate on such state. So what that means - -7 -00:00:17,850 --> 00:00:21,420 -is that operations and methods read and write - -8 -00:00:21,420 --> 00:00:25,210 -instance variables. And in traditional object orientation, we say - -9 -00:00:25,210 --> 00:00:28,240 -that operations are invoked by sending a message - -10 -00:00:28,240 --> 00:00:30,520 -to the appropriate object, which is what we call - -11 -00:00:30,520 --> 00:00:33,660 -normally a method implication. So now that we define - -12 -00:00:33,660 --> 00:00:37,590 -what an object is, state variables, or attributes, and - -13 -00:00:37,590 --> 00:00:41,440 -operations or methods, let's see what a class is. - -14 -00:00:41,440 --> 00:00:44,900 -A class is basically a template. A blueprint, if - -15 -00:00:44,900 --> 00:00:47,700 -you wish, from which new objects, which is what - -16 -00:00:47,700 --> 00:00:50,655 -we call instances of the class can be created. - -17 -00:00:50,655 --> 00:00:52,800 -And notice that the fact of having a blueprint for - -18 -00:00:52,800 --> 00:00:55,610 -objects that allows us to create as many objects as - -19 -00:00:55,610 --> 00:00:58,390 -we want can further reuse, and also contribute to make - -20 -00:00:58,390 --> 00:01:00,300 -the code more readable, understandable, - -21 -00:01:00,300 --> 00:01:02,270 -and therefore ultimately more maintainable. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/30 - Use Case Diagram: Creation Tips - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/30 - Use Case Diagram: Creation Tips - lang_en_vs5.srt deleted file mode 100644 index ccf7d0e..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/30 - Use Case Diagram: Creation Tips - lang_en_vs5.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,190 -Now, as we did for the class diagram, let's look at - -2 -00:00:02,190 --> 00:00:05,440 -some creation tips for use case diagrams. The first tip is that - -3 -00:00:05,440 --> 00:00:09,050 -when you define a use case, use a name that communicates purpose. - -4 -00:00:09,050 --> 00:00:12,080 -It should be clear what the use case refers to by just - -5 -00:00:12,080 --> 00:00:14,320 -looking at the name of the use case. Second tip is - -6 -00:00:14,320 --> 00:00:17,700 -to define one atomic behavior per use case. So try not to - -7 -00:00:17,700 --> 00:00:21,900 -put more than one specific scenario into a use case. Why? Because - -8 -00:00:21,900 --> 00:00:25,380 -these will make the use cases easier to understand and better suited - -9 -00:00:25,380 --> 00:00:28,940 -for their roles that we just discussed to define test cases, - -10 -00:00:28,940 --> 00:00:31,370 -to do planning, to define an architecture and so on and - -11 -00:00:31,370 --> 00:00:34,790 -so forth. Define the flow of events clearly. So again, do - -12 -00:00:34,790 --> 00:00:37,820 -it from the perspective of an outsider. An outsider should be able - -13 -00:00:37,820 --> 00:00:40,390 -to read the description of the flow of events and understand - -14 -00:00:40,390 --> 00:00:43,770 -exactly how the system works or how that specific piece of - -15 -00:00:43,770 --> 00:00:47,572 -functionality works. As we suggested for the class diagram, provide only - -16 -00:00:47,572 --> 00:00:50,450 -essential details. So there is no need to provide all the nitty - -17 -00:00:50,450 --> 00:00:53,720 -gritty details about the use case, just provide enough details so - -18 -00:00:53,720 --> 00:00:57,540 -that the use case is complete and understandable. And finally, even - -19 -00:00:57,540 --> 00:00:59,960 -though we didn't cover that, there is a way to factor - -20 -00:00:59,960 --> 00:01:03,890 -common behaviors and factor variants when defining use cases. So I will - -21 -00:01:03,890 --> 00:01:06,580 -encourage you to look at how to do that. For example, - -22 -00:01:06,580 --> 00:01:09,290 -by looking at the additional UML documentation and to try to - -23 -00:01:09,290 --> 00:01:12,875 -factor out this common behaviors and variants. Typical example would be - -24 -00:01:12,875 --> 00:01:15,550 -a system that requires login, like the one that we just discussed, - -25 -00:01:15,550 --> 00:01:18,350 -will probably require an initial login step for each use - -26 -00:01:18,350 --> 00:01:22,080 -case. It is possible that instead of describing the same steps, - -27 -00:01:22,080 --> 00:01:24,600 -or same sub-steps, for each use case, you can factor - -28 -00:01:24,600 --> 00:01:26,740 -that out. And create a use case that you should then - -29 -00:01:26,740 --> 00:01:29,180 -include in your own use cases. As I said, we - -30 -00:01:29,180 --> 00:01:32,790 -didn't cover this for simplicity, but feel free to further read - -31 -00:01:32,790 --> 00:01:35,450 -about UML and to see how you can actually factor out - -32 -00:01:35,450 --> 00:01:38,890 -behaviors and factor variants. Which can be very useful in practice. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/31 - UML Behavioral Diagrams: Sequence - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/31 - UML Behavioral Diagrams: Sequence - lang_en_vs5.srt deleted file mode 100644 index cbeb4d8..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/31 - UML Behavioral Diagrams: Sequence - lang_en_vs5.srt +++ /dev/null @@ -1,227 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,400 -Now that we have seen use cases, the next behavioral - -2 -00:00:02,400 --> 00:00:05,540 -diagram I want to discuss is the sequence diagram. So - -3 -00:00:05,540 --> 00:00:08,070 -what is a sequence diagram? It is an interaction diagram - -4 -00:00:08,070 --> 00:00:12,710 -that emphasizes how objects communicate and the time ordering of - -5 -00:00:12,710 --> 00:00:15,940 -the messages between objects. To illustrate sequence diagrams in a - -6 -00:00:15,940 --> 00:00:18,600 -practical way, and hopefully in a clear way, I will - -7 -00:00:18,600 --> 00:00:21,960 -introduce them by creating an actual sequence diagram using an - -8 -00:00:21,960 --> 00:00:25,160 -example taken from our course management system. So let's see what - -9 -00:00:25,160 --> 00:00:28,050 -are the steps needed to build such a sequence diagram. The first - -10 -00:00:28,050 --> 00:00:30,900 -thing we want to do is place the objects that participate in - -11 -00:00:30,900 --> 00:00:34,460 -the interaction at the top of the diagram along the x-axis, and - -12 -00:00:34,460 --> 00:00:36,410 -you also want to place them in a specific way. You want - -13 -00:00:36,410 --> 00:00:39,770 -to place objects that initiate the interaction at the left, and place - -14 -00:00:39,770 --> 00:00:42,260 -increasingly more subordinate objects to the - -15 -00:00:42,260 --> 00:00:44,430 -right. So basically, this should reflect - -16 -00:00:44,430 --> 00:00:47,660 -the way the events will flow for the majority of the interactions - -17 -00:00:47,660 --> 00:00:50,202 -in the system. Next thing you want to do is to add - -18 -00:00:50,202 --> 00:00:53,910 -what is called the object lifeline. It's a vertical line that - -19 -00:00:53,910 --> 00:00:57,300 -shows the existence of objects over a period of time. And - -20 -00:00:57,300 --> 00:01:00,660 -it's normally represented with a dashed line, except for the outermost - -21 -00:01:00,660 --> 00:01:03,190 -object for which it is a solid line. Now that you - -22 -00:01:03,190 --> 00:01:06,450 -have your object lifeline you can start placing messages that these - -23 -00:01:06,450 --> 00:01:09,285 -objects send and receive. You want to put them along the - -24 -00:01:09,285 --> 00:01:12,860 -y-axis in order of increasing time, from top to bottom. And - -25 -00:01:12,860 --> 00:01:15,550 -you can also put a number on the message to further - -26 -00:01:15,550 --> 00:01:18,230 -clarify the sequence. So in this case what we're showing - -27 -00:01:18,230 --> 00:01:21,550 -is that the student will send the fill in info - -28 -00:01:21,550 --> 00:01:24,330 -message to the registration form. And this is the first - -29 -00:01:24,330 --> 00:01:27,960 -message in the sequence diagram, the first interaction. Then the student - -30 -00:01:27,960 --> 00:01:30,900 -might submit the form and this is also a message - -31 -00:01:30,900 --> 00:01:33,370 -that goes to the registration form. At this point, when - -32 -00:01:33,370 --> 00:01:36,440 -the submission takes place, the registration form will send the - -33 -00:01:36,440 --> 00:01:39,990 -message, so it will invoke some functionality in the registration manager. - -34 -00:01:39,990 --> 00:01:43,560 -Specifically you will invoke the add course functionality - -35 -00:01:43,560 --> 00:01:46,400 -and pass Joe, the name of the student and - -36 -00:01:46,400 --> 00:01:49,410 -Math 101 which is the specific course for which - -37 -00:01:49,410 --> 00:01:53,180 -Joe is registering. Then the registration manager will ask - -38 -00:01:53,180 --> 00:01:56,780 -the Math 101 course whether it accepts registrations, - -39 -00:01:56,780 --> 00:01:59,780 -and the interaction will continue. So that Math 101 - -40 -00:01:59,780 --> 00:02:02,820 -will actually check for a specific offering, if everything - -41 -00:02:02,820 --> 00:02:05,070 -goes fine, you will receive an ack, you'll send - -42 -00:02:05,070 --> 00:02:07,180 -back the act to the registration manager and so - -43 -00:02:07,180 --> 00:02:10,650 -on. Until at the end, Joe will be registered for - -44 -00:02:10,650 --> 00:02:13,390 -Math 101. As you can see, it is very - -45 -00:02:13,390 --> 00:02:17,600 -easy to see how the interaction occurs between these different - -46 -00:02:17,600 --> 00:02:21,010 -objects at run time, dynamically. So what the behavior - -47 -00:02:21,010 --> 00:02:24,070 -of the system is for this specific scenario. So the - -48 -00:02:24,070 --> 00:02:26,780 -last notational element that I want to add to this - -49 -00:02:26,780 --> 00:02:30,350 -diagram is the focus of control. Which is this tall - -50 -00:02:30,350 --> 00:02:32,880 -thin rectangle, that shows the period of time - -51 -00:02:32,880 --> 00:02:35,190 -that an object is performing an action, either - -52 -00:02:35,190 --> 00:02:37,270 -directly or indirectly. So if we look at - -53 -00:02:37,270 --> 00:02:39,240 -the registration form, this is telling us that - -54 -00:02:39,240 --> 00:02:41,670 -the registration form is active for this amount - -55 -00:02:41,670 --> 00:02:43,170 -of time. And the same thing we can - -56 -00:02:43,170 --> 00:02:45,520 -do for the registration manager, the Math 101 - -57 -00:02:45,520 --> 00:02:49,170 -course offering, and the Math 101 specific section. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/32 - UML Behavioral Diagrams: State Transition Diagram - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/32 - UML Behavioral Diagrams: State Transition Diagram - lang_en_vs5.srt deleted file mode 100644 index ab1bd6a..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/32 - UML Behavioral Diagrams: State Transition Diagram - lang_en_vs5.srt +++ /dev/null @@ -1,175 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,430 -The very last diagram that I want to discuss is - -2 -00:00:02,430 --> 00:00:05,900 -the state transition diagram. The state transition diagram is defined for - -3 -00:00:05,900 --> 00:00:09,270 -each relevant class in the system and basically shows the - -4 -00:00:09,270 --> 00:00:12,880 -possible live history of a given class or object. So what - -5 -00:00:12,880 --> 00:00:15,090 -does it mean to describe the life history? It means - -6 -00:00:15,090 --> 00:00:18,630 -that it describes the possible states of the class as defined - -7 -00:00:18,630 --> 00:00:21,910 -by the values of the class attributes. And it also describes - -8 -00:00:21,910 --> 00:00:25,710 -the events that cause a transition from one state to another. - -9 -00:00:25,710 --> 00:00:28,800 -Finally, it describes the actions that result from a state - -10 -00:00:28,800 --> 00:00:31,050 -change. So if you put all of this together you - -11 -00:00:31,050 --> 00:00:33,760 -can see how this can represent the whole history of - -12 -00:00:33,760 --> 00:00:36,860 -the class, from its creation to its destruction. So let me - -13 -00:00:36,860 --> 00:00:40,610 -discuss the transition diagram in more detail, and also provide - -14 -00:00:40,610 --> 00:00:43,550 -information about the notation used to represent them. We have - -15 -00:00:43,550 --> 00:00:46,770 -states, that are represented by ovals with a name. And - -16 -00:00:46,770 --> 00:00:51,820 -we have transitions marked by the event that triggers the transition. - -17 -00:00:51,820 --> 00:00:55,500 -What transitions indicate is the passage from one state to - -18 -00:00:55,500 --> 00:00:59,430 -another state as the consequence of some external stimuli. Notice - -19 -00:00:59,430 --> 00:01:01,930 -that not all events will cause a state transition. So - -20 -00:01:01,930 --> 00:01:04,930 -for example, some events might be consumed within a single state. - -21 -00:01:04,930 --> 00:01:06,500 -And we'll get to that in a second. But in - -22 -00:01:06,500 --> 00:01:10,200 -most cases, an event will trigger some state transition. Events - -23 -00:01:10,200 --> 00:01:13,480 -may also produce actions and they may also have attributes - -24 -00:01:13,480 --> 00:01:17,100 -which are analogous to parameters in a method call. And Boolean - -25 -00:01:17,100 --> 00:01:20,830 -conditions that guard the state transition that is prevented - -26 -00:01:20,830 --> 00:01:22,860 -from happening in the case the conditions are not - -27 -00:01:22,860 --> 00:01:26,630 -satisfied. States may also be associated with activities and - -28 -00:01:26,630 --> 00:01:31,450 -actions. Specifically, activities are operations performed by an object - -29 -00:01:31,450 --> 00:01:33,410 -when it is in a given state and that - -30 -00:01:33,410 --> 00:01:36,690 -takes time to complete. Actions, conversely, just like the - -31 -00:01:36,690 --> 00:01:40,270 -actions corresponding to an event are instantaneous operations that - -32 -00:01:40,270 --> 00:01:42,420 -are performed by an object. And can be triggered - -33 -00:01:42,420 --> 00:01:46,050 -on entry. So, when the object reaches a given state, - -34 -00:01:46,050 --> 00:01:48,970 -when the object exits that state, and also when a - -35 -00:01:48,970 --> 00:01:53,240 -specific event occurs. And in this case, this notation is - -36 -00:01:53,240 --> 00:01:55,930 -basically a shortcut for any event that will cause a - -37 -00:01:55,930 --> 00:01:58,840 -state transition that will bring the object back into the - -38 -00:01:58,840 --> 00:02:01,696 -same state. Since we have several actions and activities, it - -39 -00:02:01,696 --> 00:02:04,480 -is probably worthwhile clarifyinig the ordering of such actions and - -40 -00:02:04,480 --> 00:02:07,559 -activities. So the way in which these actions and activities - -41 -00:02:07,559 --> 00:02:10,079 -occur is, first of all, we have the actions on the - -42 -00:02:10,079 --> 00:02:13,737 -incoming transition, so this is performed first. Then if there is an - -43 -00:02:13,737 --> 00:02:17,321 -entry action that is the next action that would be performed, then - -44 -00:02:17,321 --> 00:02:22,370 -we have activity and event actions as appropriate. And finally exit actions. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/33 - State Transition Diagram Example - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/33 - State Transition Diagram Example - lang_en_vs5.srt deleted file mode 100644 index 6c4c1bf..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/33 - State Transition Diagram Example - lang_en_vs5.srt +++ /dev/null @@ -1,227 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,850 -As usual were going to illustrate these kind of diagrams by - -2 -00:00:02,850 --> 00:00:06,050 -using an example. In particular we are going to describe the state - -3 -00:00:06,050 --> 00:00:09,330 -transition diagram for part of our example, for part of - -4 -00:00:09,330 --> 00:00:12,640 -our course management system. And we're going to focus on the course - -5 -00:00:12,640 --> 00:00:15,540 -offering class. When the class is created, it enters the - -6 -00:00:15,540 --> 00:00:19,490 -initialization state, in which the activity performed is to initialize the - -7 -00:00:19,490 --> 00:00:22,580 -course. At this point, a simple case is the case in - -8 -00:00:22,580 --> 00:00:25,550 -which the class is cancelled, so there is a cancelled event. - -9 -00:00:25,550 --> 00:00:28,700 -And if that happens, the class is simply cancelled. So it - -10 -00:00:28,700 --> 00:00:31,720 -gets into this final state, which is the state cancelled. And - -11 -00:00:31,720 --> 00:00:35,500 -the activity in this case is to notify the registered students. - -12 -00:00:35,500 --> 00:00:38,580 -Obviously if this is the flow there will be no registered students. - -13 -00:00:38,580 --> 00:00:41,110 -However something else can happen when we are in this initial - -14 -00:00:41,110 --> 00:00:43,930 -state. So what can happen is that a student can register, so - -15 -00:00:43,930 --> 00:00:47,260 -in this case the add student event is triggered. And the - -16 -00:00:47,260 --> 00:00:50,620 -corresponding action is to set the count, in this case it would - -17 -00:00:50,620 --> 00:00:53,270 -be the count of students for the course offering, to one. And - -18 -00:00:53,270 --> 00:00:55,570 -there will be a change of state and the course offering will - -19 -00:00:55,570 --> 00:00:58,870 -get into this open state. And the action that will be performed - -20 -00:00:58,870 --> 00:01:02,260 -on entry will be to register the student. At this point more - -21 -00:01:02,260 --> 00:01:06,920 -students may register. So other student events might occur and notice that we - -22 -00:01:06,920 --> 00:01:10,630 -have a curve here that tells us this event will trigger this - -23 -00:01:10,630 --> 00:01:13,790 -transition only if the count is less than 10. So we're assuming - -24 -00:01:13,790 --> 00:01:16,120 -that we're not going to have more than 10 students just for lack - -25 -00:01:16,120 --> 00:01:19,010 -of a better number in our course offering. So if that - -26 -00:01:19,010 --> 00:01:21,960 -happens, if the count is less than ten so then the count - -27 -00:01:21,960 --> 00:01:25,880 -is incremented so the increment count action takes place. And the - -28 -00:01:25,880 --> 00:01:28,910 -system goes back into the open state, and the new student - -29 -00:01:28,910 --> 00:01:32,100 -is registered. Now here we have an interesting transition, because there's - -30 -00:01:32,100 --> 00:01:35,380 -no event triggering the transition, but simply the fact that the - -31 -00:01:35,380 --> 00:01:37,780 -count is equal to 10. So you can imagine this as - -32 -00:01:37,780 --> 00:01:40,930 -being a transition that is always enabled so can always be triggered, - -33 -00:01:40,930 --> 00:01:43,410 -but will be guarded. By the fact that the count has - -34 -00:01:43,410 --> 00:01:46,750 -to be exactly ten. So basically this transition will take place - -35 -00:01:46,750 --> 00:01:49,800 -only when enough students are added, such we get to count - -36 -00:01:49,800 --> 00:01:52,900 -them. Being incremented and being equal to ten and then the transition - -37 -00:01:52,900 --> 00:01:55,590 -will occur. And we will get into the closed state, in - -38 -00:01:55,590 --> 00:01:59,025 -which the class is no longer open because there are enough students - -39 -00:01:59,025 --> 00:02:01,730 -registered. And at this point, what will happen is that the - -40 -00:02:01,730 --> 00:02:06,320 -course will be finalized. So there will be this activity which performs - -41 -00:02:06,320 --> 00:02:09,699 -some operation that is needed to finalize the course. Another possibility - -42 -00:02:09,699 --> 00:02:12,150 -is that when we are in the open state, the course - -43 -00:02:12,150 --> 00:02:14,680 -is cancelled. And if the course is cancelled, in this case, - -44 -00:02:14,680 --> 00:02:18,320 -we go again to the cancel state. But here, the activity - -45 -00:02:18,320 --> 00:02:21,850 -of notifying registered students makes more sense. Because we will have - -46 -00:02:21,850 --> 00:02:24,960 -at least one registered student in this state, and therefore we'll - -47 -00:02:24,960 --> 00:02:28,190 -need to notify such student that the course offering has been - -48 -00:02:28,190 --> 00:02:31,470 -cancelled. Finally, is it also possible also to cancel a course - -49 -00:02:31,470 --> 00:02:34,050 -after it has been closed? And in this case again, the - -50 -00:02:34,050 --> 00:02:38,040 -same thing will happen. The class will reach the cancelled state and - -51 -00:02:38,040 --> 00:02:40,850 -all the students, in this case ten students, that are registered - -52 -00:02:40,850 --> 00:02:43,730 -for the course will be notified that the course has been cancelled. - -53 -00:02:43,730 --> 00:02:46,100 -So, if we look at this state transition diagram, you can - -54 -00:02:46,100 --> 00:02:49,860 -see that it's pretty easy to see what the evolution of objects - -55 -00:02:49,860 --> 00:02:52,590 -of this class can be. How they can go from their initial - -56 -00:02:52,590 --> 00:02:56,660 -state to various final states depending on what are the external events - -57 -00:02:56,660 --> 00:02:57,750 -that reach the system. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/34 - Recap Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/34 - Recap Quiz - lang_en_vs4.srt deleted file mode 100644 index 458137f..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/34 - Recap Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,190 --> 00:00:02,260 -I'd like to conclude this lesson with a couple of - -2 -00:00:02,260 --> 00:00:05,350 -quizzes. Just to recap what we saw. And, make sure that - -3 -00:00:05,350 --> 00:00:08,000 -everybody's on the same page. In the first quiz, I want to - -4 -00:00:08,000 --> 00:00:11,930 -know whether an UML state transition diagram specifies a set of - -5 -00:00:11,930 --> 00:00:15,320 -objects that work together to perform some action. The events that - -6 -00:00:15,320 --> 00:00:17,870 -cause an object to move from one state to another. The - -7 -00:00:17,870 --> 00:00:20,840 -set of components in a system, or the effects of a - -8 -00:00:20,840 --> 00:00:24,270 -state change. And as usual, you should mark all that apply. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/35 - Recap Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/35 - Recap Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 1172c26..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/35 - Recap Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,095 --> 00:00:03,320 -A UML state transition diagram does not specify a set - -2 -00:00:03,320 --> 00:00:05,960 -of object that work together to perform some action, because - -3 -00:00:05,960 --> 00:00:09,270 -this is what a sequence diagram does instead. Conversely, the - -4 -00:00:09,270 --> 00:00:12,530 -second one is correct. As we said, a state transition diagram - -5 -00:00:12,530 --> 00:00:15,790 -describes the events that cause a transition from one state - -6 -00:00:15,790 --> 00:00:19,300 -to another. Again, a UML state transition diagram does not - -7 -00:00:19,300 --> 00:00:22,270 -specify the set of components in a system, because this - -8 -00:00:22,270 --> 00:00:25,700 -is what a component diagram does, not a state transition diagram. - -9 -00:00:25,700 --> 00:00:27,620 -As for the last one, this is correct, - -10 -00:00:27,620 --> 00:00:30,510 -because, as we also discussed, a state transition diagram - -11 -00:00:30,510 --> 00:00:33,000 -describes the actions that result from a state - -12 -00:00:33,000 --> 00:00:35,890 -change, that is, the effects of such state change. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/36 - Recap Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/36 - Recap Quiz - lang_en_vs4.srt deleted file mode 100644 index bdc7298..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/36 - Recap Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,140 --> 00:00:01,580 -And for the last quiz, I want to know - -2 -00:00:01,580 --> 00:00:05,250 -which of the following diagrams are UML Structural - -3 -00:00:05,250 --> 00:00:08,790 -Diagrams? Use case diagram, class diagram, deployment diagram - -4 -00:00:08,790 --> 00:00:11,580 -and sequence diagram. Again, mark all that apply. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/37 - Recap Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/37 - Recap Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 7f8f313..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/37 - Recap Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,580 -And in this case, the correct answer is that class - -2 -00:00:02,580 --> 00:00:06,870 -diagram and deployment diagrams are the only two UML structural - -3 -00:00:06,870 --> 00:00:09,950 -diagrams among these four. So the answer to this quiz - -4 -00:00:09,950 --> 00:00:12,250 -was probably pretty obvious, but I wanted to use it - -5 -00:00:12,250 --> 00:00:15,840 -also to stress, once more, the difference between structural and - -6 -00:00:15,840 --> 00:00:19,560 -behavioral diagrams. Structural diagrams provide the static picture of the - -7 -00:00:19,560 --> 00:00:23,100 -system being modeled, presented from different perspective. For example, from - -8 -00:00:23,100 --> 00:00:26,630 -the perspective of the class diagram and of the deployment diagram. - -9 -00:00:26,630 --> 00:00:29,760 -Behavioral diagrams, on the other hand, provide information on - -10 -00:00:29,760 --> 00:00:32,460 -the dynamic behavior of the system being modeled, also - -11 -00:00:32,460 --> 00:00:35,020 -presented from different perspective. So it's important to be - -12 -00:00:35,020 --> 00:00:38,020 -able to distinguish between these two types of diagrams. This - -13 -00:00:38,020 --> 00:00:41,450 -concludes this lesson on object orientation and UML. But - -14 -00:00:41,450 --> 00:00:43,960 -I encourage you to look at the references provided - -15 -00:00:43,960 --> 00:00:45,390 -in the class notes, in case you want to - -16 -00:00:45,390 --> 00:00:49,440 -know more about object orientation, object oriented analysis, and UML. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/4 - Benefits of OO - lang_en_vs5.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/4 - Benefits of OO - lang_en_vs5.srt deleted file mode 100644 index 2650d6e..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/4 - Benefits of OO - lang_en_vs5.srt +++ /dev/null @@ -1,51 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,110 -So in more general terms, why do we want to - -2 -00:00:02,110 --> 00:00:05,330 -use object orientation? The first reason is that object - -3 -00:00:05,330 --> 00:00:10,530 -orientation can help reduce long-term maintenance costs by limiting - -4 -00:00:10,530 --> 00:00:12,700 -the effects of changes. As we saw, the effect - -5 -00:00:12,700 --> 00:00:15,990 -of using encapsulation and information hiding makes it easier - -6 -00:00:15,990 --> 00:00:18,700 -to modify parts of the system without affecting the - -7 -00:00:18,700 --> 00:00:21,590 -rest of the system. Object orientation can also improve - -8 -00:00:21,590 --> 00:00:25,870 -the developing process by favoring code and design reuse. - -9 -00:00:25,870 --> 00:00:27,840 -In general, object orientation helps - -10 -00:00:27,840 --> 00:00:31,750 -enforcing good design principles. Principles such - -11 -00:00:31,750 --> 00:00:34,880 -as the ones that we saw in encapuslation, information hiding, high - -12 -00:00:34,880 --> 00:00:39,470 -cohesion, low coupling and we will discuss these aspects more extensively - -13 -00:00:39,470 --> 00:00:42,750 -in the next mini course which is centered around design concepts. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/5 - OO Benefits Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/5 - OO Benefits Quiz - lang_en_vs4.srt deleted file mode 100644 index 5942254..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/5 - OO Benefits Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,600 -Now let's make sure that we understand the benefits of - -2 -00:00:02,600 --> 00:00:06,270 -object orientation through a quiz. Imagine that acme corporation decided - -3 -00:00:06,270 --> 00:00:09,180 -to use an objetory entered approach in its software development - -4 -00:00:09,180 --> 00:00:12,230 -process. If this is the case what benefits can they expect - -5 -00:00:12,230 --> 00:00:14,640 -to receive from this decision. And here I'm listing some - -6 -00:00:14,640 --> 00:00:18,120 -possible benefits. Increased reuse because of the modular cooling style. - -7 -00:00:18,120 --> 00:00:21,450 -Increased maintainability because the system design can accommodate changes more - -8 -00:00:21,450 --> 00:00:25,530 -easily. Increased speed because object oriented systems tend to run faster. - -9 -00:00:25,530 --> 00:00:27,770 -And increased understandability because the - -10 -00:00:27,770 --> 00:00:30,680 -design models real world entities. So, - -11 -00:00:30,680 --> 00:00:33,310 -I would like, as usual, for you to mark all that apply. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/6 - OO Benefits Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/6 - OO Benefits Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index c97c453..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/6 - OO Benefits Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,080 --> 00:00:01,280 -So, now let's see which ones of these - -2 -00:00:01,280 --> 00:00:04,410 -benefits can actually be expected. Definitely, the first one. - -3 -00:00:04,410 --> 00:00:07,720 -The modular coding style typical of object-oriented approaches can, - -4 -00:00:07,720 --> 00:00:11,280 -and normally does, increase reuse. Similarly, because of the - -5 -00:00:11,280 --> 00:00:15,830 -characteristics of typical object-oriented systems, these systems are normally - -6 -00:00:15,830 --> 00:00:18,390 -easier to change. Because they're more modular, they're more - -7 -00:00:18,390 --> 00:00:21,890 -cohesive, they're more decoupled. And therefore, all of this - -8 -00:00:21,890 --> 00:00:25,520 -contributes to increase the maintainability of the resulting systems. - -9 -00:00:25,520 --> 00:00:27,810 -So we're going to mark this benefit as well. - -10 -00:00:27,810 --> 00:00:31,500 -There's really nothing about object-oriented systems. That make them - -11 -00:00:31,500 --> 00:00:34,550 -run faster and, therefore, this is not a benefit - -12 -00:00:34,550 --> 00:00:36,432 -that we can expect from the use of an - -13 -00:00:36,432 --> 00:00:39,910 -object-oriented approach. Conversely, the last one is an expected - -14 -00:00:39,910 --> 00:00:43,950 -benefit because normally, the fact of designing real-world entities, - -15 -00:00:43,950 --> 00:00:46,120 -which is one of the characteristics of the object - -16 -00:00:46,120 --> 00:00:50,530 -oriented approaches, does increase understandability. It's easier to understand - -17 -00:00:50,530 --> 00:00:54,370 -the system because we can relate. To the system because we can recognize in - -18 -00:00:54,370 --> 00:00:58,000 -the systems, real world entities that we are used to see and that we understand. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/7 - OO Analysis History - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/7 - OO Analysis History - lang_en_vs4.srt deleted file mode 100644 index 843126e..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/7 - OO Analysis History - lang_en_vs4.srt +++ /dev/null @@ -1,175 +0,0 @@ -1 -00:00:00,060 --> 00:00:02,160 -The use of object orientation and object oriented - -2 -00:00:02,160 --> 00:00:06,430 -concepts led to what we call OOAD, object oriented - -3 -00:00:06,430 --> 00:00:10,650 -analysis and design. OOAD is a software engineering approach - -4 -00:00:10,650 --> 00:00:13,790 -whose main characteristics is to model a software system - -5 -00:00:13,790 --> 00:00:16,600 -as a group of interacting objects, and we'll - -6 -00:00:16,600 --> 00:00:19,160 -see what that means. In particular, in this lesson - -7 -00:00:19,160 --> 00:00:21,590 -we will specifically focus on the first part of - -8 -00:00:21,590 --> 00:00:25,360 -this, object oriented analysis, which is a requirements analysis - -9 -00:00:25,360 --> 00:00:29,650 -technique that concentrates on modeling real world objects. And - -10 -00:00:29,650 --> 00:00:31,340 -as I usually like to do, I would like - -11 -00:00:31,340 --> 00:00:34,812 -to start by providing some historical perspective on object - -12 -00:00:34,812 --> 00:00:37,472 -oriented analysis to better understand how we went from a - -13 -00:00:37,472 --> 00:00:40,990 -function-centric world to a data-centric world. And several people - -14 -00:00:40,990 --> 00:00:43,800 -contributed to this shift in perspective, but I'd like - -15 -00:00:43,800 --> 00:00:46,960 -to mention a few that were particularly influential. Starting - -16 -00:00:46,960 --> 00:00:50,540 -from James Rumbaugh, which in the 90s developed an integrated - -17 -00:00:50,540 --> 00:00:53,900 -approach to object oriented modelling with three main aspects. - -18 -00:00:53,900 --> 00:00:56,680 -A data aspect, so the modelling was based on - -19 -00:00:56,680 --> 00:01:00,390 -using an extended version of entity relationship diagrams to - -20 -00:01:00,390 --> 00:01:03,680 -describe classes and inheritance. So that's what was called - -21 -00:01:03,680 --> 00:01:06,770 -the object model. And the second aspect has to - -22 -00:01:06,770 --> 00:01:09,770 -do with functions. So data flow diagrams were used - -23 -00:01:09,770 --> 00:01:12,850 -to represent the functional aspects of the system, where - -24 -00:01:12,850 --> 00:01:16,070 -each function was then becoming a method in a class. - -25 -00:01:16,070 --> 00:01:18,500 -So this is what is called the functional model. - -26 -00:01:18,500 --> 00:01:22,120 -So object model and functional model. The third model - -27 -00:01:22,120 --> 00:01:25,120 -in Rumbaugh's methodology had to do with control. So - -28 -00:01:25,120 --> 00:01:29,301 -it was representing the dynamic aspects of a system. And - -29 -00:01:29,301 --> 00:01:31,880 -it uses state machines, which we'll cover in more - -30 -00:01:31,880 --> 00:01:35,730 -detail, to represent how a system would evolve going from - -31 -00:01:35,730 --> 00:01:37,650 -one state to the other based on what happened - -32 -00:01:37,650 --> 00:01:41,260 -to the system. These three models together represented what was - -33 -00:01:41,260 --> 00:01:44,950 -called the Object Modeling Technique, or OMT. And - -34 -00:01:44,950 --> 00:01:47,860 -OMT combined with contributions from several people, and in - -35 -00:01:47,860 --> 00:01:51,290 -particular Jacobson and Booch, evolved into what we call - -36 -00:01:51,290 --> 00:01:54,910 -the Unified Modeling Language, which is UML, which is - -37 -00:01:54,910 --> 00:01:56,910 -probably the modeling language that most of you - -38 -00:01:56,910 --> 00:02:00,480 -are familiar with. UML extends OMT by providing more - -39 -00:02:00,480 --> 00:02:03,460 -diagrams and a broader view of a system from - -40 -00:02:03,460 --> 00:02:06,270 -multiple perspectives. So, in the second part of the - -41 -00:02:06,270 --> 00:02:07,850 -lesson, we will cover some of these - -42 -00:02:07,850 --> 00:02:10,530 -diagrams in details, but before that, I'd like - -43 -00:02:10,530 --> 00:02:12,215 -to talk a little bit more about object - -44 -00:02:12,215 --> 00:02:14,540 -oriented analysis, and how we can perform it. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/8 - OO Analysis Overview - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/8 - OO Analysis Overview - lang_en_vs4.srt deleted file mode 100644 index fccd722..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/8 - OO Analysis Overview - lang_en_vs4.srt +++ /dev/null @@ -1,147 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,540 -So let's look at the object-oriented analysis in a - -2 -00:00:02,540 --> 00:00:05,540 -little more detail. As I said earlier, traditional analysis - -3 -00:00:05,540 --> 00:00:08,890 -and design techniques were functionally oriented. What that means - -4 -00:00:08,890 --> 00:00:11,980 -is that they concentrated on the functions to be performed, - -5 -00:00:11,980 --> 00:00:14,510 -whereas the data upon which the functions operated were - -6 -00:00:14,510 --> 00:00:18,900 -secondary to the functions themselves. Conversely, object oriented analysis, is - -7 -00:00:18,900 --> 00:00:22,100 -primarily concerned that with a data objects, so we - -8 -00:00:22,100 --> 00:00:25,500 -went from a functional oriented view to a data oriented - -9 -00:00:25,500 --> 00:00:28,070 -view, what that means is that during the analysis phase, - -10 -00:00:28,070 --> 00:00:30,770 -we define a system first in terms of the data - -11 -00:00:30,770 --> 00:00:34,380 -types and their relationships, and the functions or methods are - -12 -00:00:34,380 --> 00:00:38,130 -defined only later and associated with specific objects which are sets - -13 -00:00:38,130 --> 00:00:40,380 -of data. So let's see how we can perform object - -14 -00:00:40,380 --> 00:00:44,040 -orientated analysis in practice, so the basic idea is to be - -15 -00:00:44,040 --> 00:00:47,060 -focused on the objects of the real world. So to - -16 -00:00:47,060 --> 00:00:51,310 -go from a real world objects to a set of requirements. - -17 -00:00:51,310 --> 00:00:55,340 -And we can describe this as a four-step process. The first - -18 -00:00:55,340 --> 00:00:57,790 -step is to obtain or prepare a textual description of the - -19 -00:00:57,790 --> 00:01:00,400 -problem to be solved. So obviously, we need to start from - -20 -00:01:00,400 --> 00:01:03,300 -some description of the system that we need to build. And - -21 -00:01:03,300 --> 00:01:06,120 -this is a very practical oriented approach, so that the next - -22 -00:01:06,120 --> 00:01:08,390 -thing we do is that we take the description and we - -23 -00:01:08,390 --> 00:01:12,670 -underline nouns. In this description. And the nouns that we underline - -24 -00:01:12,670 --> 00:01:16,710 -will become classes in my analysis. We then look at adjectives in - -25 -00:01:16,710 --> 00:01:19,530 -the document. We underline those, and we use that - -26 -00:01:19,530 --> 00:01:23,130 -information to identify the attributes of the classes that we've - -27 -00:01:23,130 --> 00:01:26,370 -previously identified. At this point we focus on active - -28 -00:01:26,370 --> 00:01:29,610 -verbs in the description, and the analysis of the active - -29 -00:01:29,610 --> 00:01:32,710 -verbs will give us the operations that we'll need - -30 -00:01:32,710 --> 00:01:36,830 -to define for our classes. So, again, underline nouns, and - -31 -00:01:36,830 --> 00:01:38,950 -those will become the classes in my system. Then, - -32 -00:01:38,950 --> 00:01:42,150 -objectives. And, those will be the attributes of the classes. - -33 -00:01:42,150 --> 00:01:46,650 -And, finally, active verbs that will become the operations of my classes. And - -34 -00:01:46,650 --> 00:01:48,840 -of course, this is a high level view to take this with a - -35 -00:01:48,840 --> 00:01:51,790 -grain of salt. But we will see that it's a very good pragmatic - -36 -00:01:51,790 --> 00:01:54,760 -approach to identifying requirements, starting from a - -37 -00:01:54,760 --> 00:01:56,570 -description of the system to be built. diff --git a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/9 - Modeling Classes Quiz - lang_en_vs4.srt b/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/9 - Modeling Classes Quiz - lang_en_vs4.srt deleted file mode 100644 index 6c3c61b..0000000 --- a/usth/ICT2.7/P2L2 OO Software Engineering and UML Subtitles/9 - Modeling Classes Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,190 --> 00:00:02,890 -Now let's see how object oriented analysis might work - -2 -00:00:02,890 --> 00:00:06,640 -in practice by considering the following requirement for an online - -3 -00:00:06,640 --> 00:00:10,230 -shopping website. The requirement says that users can add - -4 -00:00:10,230 --> 00:00:12,890 -more than one item on sale at a time to - -5 -00:00:12,890 --> 00:00:15,590 -a shopping cart. So, looking at this requirement I - -6 -00:00:15,590 --> 00:00:18,180 -would like you to tell me which of the following - -7 -00:00:18,180 --> 00:00:21,285 -elements should be modeled as classes. And the elements - -8 -00:00:21,285 --> 00:00:25,650 -are: item, sale, shopping cart, time and user. So mark - -9 -00:00:25,650 --> 00:00:26,370 -all that apply. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 89008af..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,360 --> 00:00:02,910 -Hello, and welcome to the third part - -2 -00:00:02,910 --> 00:00:06,426 -of our software engineering course. In this mini-course, - -3 -00:00:06,426 --> 00:00:09,250 -we will discuss software design. We will - -4 -00:00:09,250 --> 00:00:13,170 -also introduce the Unified Software Process. And we - -5 -00:00:13,170 --> 00:00:15,730 -will work on a more complex project, - -6 -00:00:15,730 --> 00:00:18,330 -in which we will develop a distributed software - -7 -00:00:18,330 --> 00:00:22,960 -system that involves multiple different platforms. In - -8 -00:00:22,960 --> 00:00:25,730 -our first lesson of this mini-course, in particular, - -9 -00:00:25,730 --> 00:00:28,150 -we will talk about software architecture. A - -10 -00:00:28,150 --> 00:00:31,650 -software engineering discipline whose goal is to lay - -11 -00:00:31,650 --> 00:00:34,980 -the foundation on which to build successful - -12 -00:00:34,980 --> 00:00:38,130 -and long lasting software systems. So let's begin. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/10 - Architectural Recovery Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/10 - Architectural Recovery Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index bd45907..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/10 - Architectural Recovery Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,210 -The first sentence is definitely false. Prescriptive architecture - -2 -00:00:03,210 --> 00:00:06,530 -and descriptive architecture tend to diverge as systems evolve, - -3 -00:00:06,530 --> 00:00:08,960 -and sometimes, even when the system is first developed, - -4 -00:00:08,960 --> 00:00:10,680 -as we will see in some of the upcoming - -5 -00:00:10,680 --> 00:00:14,340 -examples. Conversely, the second sentence is true. By - -6 -00:00:14,340 --> 00:00:18,150 -adding unnecessary elements to the architecture, architectural drift can - -7 -00:00:18,150 --> 00:00:22,470 -transform an otherwise clean architecture into a complex sub-optimal, - -8 -00:00:22,470 --> 00:00:25,960 -and often ugly, architecture. The third sentence is false. - -9 -00:00:25,960 --> 00:00:30,540 -Architectural erosion and architectural drift are, indeed, different phenomena. - -10 -00:00:30,540 --> 00:00:32,940 -But they both result in a less than ideal, and - -11 -00:00:32,940 --> 00:00:36,160 -in some cases, highly degraded architecture. And the fourth - -12 -00:00:36,160 --> 00:00:39,600 -sentence is also false, as we discussed a minute ago. - -13 -00:00:39,600 --> 00:00:42,050 -Just tweaking at the code is very unlikely to - -14 -00:00:42,050 --> 00:00:44,930 -improve the code. Quite the opposite, actually. The best way - -15 -00:00:44,930 --> 00:00:48,420 -to repair a degraded architectural design is to first, understand - -16 -00:00:48,420 --> 00:00:51,110 -the current architecture, and then, try to fix it in - -17 -00:00:51,110 --> 00:00:52,280 -a more principled way. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/11 - Real World Example - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/11 - Real World Example - lang_en_vs6.srt deleted file mode 100644 index 4e64d4a..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/11 - Real World Example - lang_en_vs6.srt +++ /dev/null @@ -1,183 +0,0 @@ -1 -00:00:00,210 --> 00:00:02,770 -Now to drive home some of the points that I just - -2 -00:00:02,770 --> 00:00:05,920 -made, I would like to show you a few real world examples - -3 -00:00:05,920 --> 00:00:09,150 -of architectures that kind of went astray. The first example I - -4 -00:00:09,150 --> 00:00:11,970 -want to use is an example from the Linux kernel. Actually, from - -5 -00:00:11,970 --> 00:00:15,260 -an earlier version of the Linux kernel. A research group studied - -6 -00:00:15,260 --> 00:00:17,020 -the documentation of Linux, and also - -7 -00:00:17,020 --> 00:00:19,440 -interviewed several Linux developers. And by - -8 -00:00:19,440 --> 00:00:21,710 -doing that, they were able to come up with a software - -9 -00:00:21,710 --> 00:00:25,260 -architecture of Linux at different levels of obstruction. So the one that - -10 -00:00:25,260 --> 00:00:27,365 -I'm showing you here on the left, is the - -11 -00:00:27,365 --> 00:00:31,120 -software architecture at the level of Linux's main subsystems. So - -12 -00:00:31,120 --> 00:00:34,540 -this is the prescriptive architecture of Linux at the level - -13 -00:00:34,540 --> 00:00:38,060 -of Linux's main subsystems. So the researchers, after identifying this - -14 -00:00:38,060 --> 00:00:40,420 -architecture, they showed it to the developers, and the - -15 -00:00:40,420 --> 00:00:43,180 -developers agreed that, that was indeed the architecture of the - -16 -00:00:43,180 --> 00:00:46,540 -system. The researchers then studied the source code of Linux - -17 -00:00:46,540 --> 00:00:50,380 -and reverse engineered its actual architecture. So the architecture as - -18 -00:00:50,380 --> 00:00:54,020 -implemented, it's descriptive architecture. And this one here, on the - -19 -00:00:54,020 --> 00:00:56,610 -right, is the result. And as you can see, they found - -20 -00:00:56,610 --> 00:01:00,940 -a number of differences or violations between the prescriptive architecture and - -21 -00:01:00,940 --> 00:01:04,080 -the descriptive architecture. In particular, if we look at this architecture, - -22 -00:01:04,080 --> 00:01:06,820 -we can see that pretty much everything talks to everything else, - -23 -00:01:06,820 --> 00:01:09,010 -which is, in general, not a good thing. And in addition - -24 -00:01:09,010 --> 00:01:11,890 -to that, there are also several things that don't really make - -25 -00:01:11,890 --> 00:01:15,630 -much sense. For example the library calls the file system and - -26 -00:01:15,630 --> 00:01:19,290 -also the network interface which doesn't make much sense. Another thing - -27 -00:01:19,290 --> 00:01:21,850 -that is kind of weird is the fact that file system - -28 -00:01:21,850 --> 00:01:25,250 -calls the kernel initialization code. Which is also a little bit - -29 -00:01:25,250 --> 00:01:28,100 -weird. So basically, the bottom line here is that not even - -30 -00:01:28,100 --> 00:01:32,020 -the developers realized how the actual architecture of the system was, - -31 -00:01:32,020 --> 00:01:35,170 -and how it was different from the architecture they have conceived. - -32 -00:01:35,170 --> 00:01:37,870 -And in fact another interesting thing here is the reaction of - -33 -00:01:37,870 --> 00:01:41,020 -the developers when they were shown the actual architecture. So basically - -34 -00:01:41,020 --> 00:01:44,110 -they justified the differences by saying things such as, well you - -35 -00:01:44,110 --> 00:01:47,120 -know it had to be done fast, and therefore I changed it - -36 -00:01:47,120 --> 00:01:50,110 -and then I didn't have time to go back and update the documentation - -37 -00:01:50,110 --> 00:01:52,800 -and things of this sort. And by the way these are exactly some - -38 -00:01:52,800 --> 00:01:55,640 -of the reasons that we mentioned early on in the lesson for the - -39 -00:01:55,640 --> 00:01:58,410 -discrepancy between prescriptive and descriptive software - -40 -00:01:58,410 --> 00:01:59,990 -architecture. So one last thing that I - -41 -00:01:59,990 --> 00:02:02,840 -want to mention here as an aside and we can get back to - -42 -00:02:02,840 --> 00:02:06,495 -that later is the fact that you can probably clearly show how representing - -43 -00:02:06,495 --> 00:02:10,880 -software architectures graphically can be extremely useful, because it allows - -44 -00:02:10,880 --> 00:02:14,140 -for easily seeing the structure of the system. Look at different - -45 -00:02:14,140 --> 00:02:17,140 -views identify problematic points and so on. And we will see - -46 -00:02:17,140 --> 00:02:19,740 -how that can be useful in many cases also later on. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/12 - More Examples - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/12 - More Examples - lang_en_vs6.srt deleted file mode 100644 index 6f929eb..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/12 - More Examples - lang_en_vs6.srt +++ /dev/null @@ -1,107 +0,0 @@ -1 -00:00:00,180 --> 00:00:03,090 -As another example, I want to show you the architecture of the - -2 -00:00:03,090 --> 00:00:06,290 -iRods system. This is a data grid system that was built by - -3 -00:00:06,290 --> 00:00:09,720 -a biologist. And it's a system for storing and accessing big - -4 -00:00:09,720 --> 00:00:11,910 -data. So what I'm going to do, I'm going to do the same thing - -5 -00:00:11,910 --> 00:00:14,010 -that I did for the Linux system. I'm going to show you - -6 -00:00:14,010 --> 00:00:18,080 -here, on the left hand side, this clean prescriptive architecture for the - -7 -00:00:18,080 --> 00:00:21,000 -iRODS system. And I'm going to show you here on the right the - -8 -00:00:21,000 --> 00:00:22,660 -actual architecture of the system. The - -9 -00:00:22,660 --> 00:00:25,780 -descriptive architecture of iRODS. So here, - -10 -00:00:25,780 --> 00:00:27,640 -even if we don't go in and look at the details, you - -11 -00:00:27,640 --> 00:00:31,800 -can see very easily that the system is badly drifted and eroded - -12 -00:00:31,800 --> 00:00:34,500 -with respect to the way it was supposed to be. Continuing - -13 -00:00:34,500 --> 00:00:36,500 -with the examples. What I want to show you now is the - -14 -00:00:36,500 --> 00:00:39,980 -view of the complete architecture of HADOOP. As many of you probably - -15 -00:00:39,980 --> 00:00:44,210 -already know, HADOOP is an open source software framework for storage and - -16 -00:00:44,210 --> 00:00:47,990 -large scale processing of data sets. It's very broadly used. And here - -17 -00:00:47,990 --> 00:00:50,820 -is a picture of the architecture, and I hope you can see it - -18 -00:00:50,820 --> 00:00:54,290 -because the architecture is so complex and so broad and so - -19 -00:00:54,290 --> 00:00:57,050 -intertwined, and in order to be able to represent it here - -20 -00:00:57,050 --> 00:00:59,690 -in one page, I had to zoom out quite a bit. - -21 -00:00:59,690 --> 00:01:02,120 -But also in this case, you don't really have to look - -22 -00:01:02,120 --> 00:01:05,640 -at details. The important point here is that in this software architecture - -23 -00:01:05,640 --> 00:01:09,540 -61 out of the 67 components in the system have circular - -24 -00:01:09,540 --> 00:01:12,570 -dependencies. Which means that they depend on each other in a - -25 -00:01:12,570 --> 00:01:15,820 -circular way and this is normally not a good thing and also - -26 -00:01:15,820 --> 00:01:18,790 -in this case a few developers when shown the diagram had no - -27 -00:01:18,790 --> 00:01:22,120 -idea that the structure of the system was so complex and messy. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/13 - Final Example - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/13 - Final Example - lang_en_vs4.srt deleted file mode 100644 index 4fab0c6..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/13 - Final Example - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,220 --> 00:00:02,130 -I'm going to conclude this set of examples with - -2 -00:00:02,130 --> 00:00:04,750 -a system that you might also know, Bash. And in - -3 -00:00:04,750 --> 00:00:08,000 -case you don't, Bash is a Unix shell written as - -4 -00:00:08,000 --> 00:00:11,000 -a free software replacement for the traditional Bourne shell, also - -5 -00:00:11,000 --> 00:00:13,690 -called sh. So what I'm showing here is the - -6 -00:00:13,690 --> 00:00:17,950 -descriptive architecture of the command component of Bash. So, is - -7 -00:00:17,950 --> 00:00:22,170 -the architecture, as implemented, of the command component of Bash. - -8 -00:00:22,170 --> 00:00:25,390 -And the component is the one here sort of highlighted - -9 -00:00:25,390 --> 00:00:28,120 -in gray. And what you can see here, these names are - -10 -00:00:28,120 --> 00:00:31,640 -the sub components of the command component. And if we look at - -11 -00:00:31,640 --> 00:00:35,000 -this architecture, two design problems of the component can kind of jump - -12 -00:00:35,000 --> 00:00:37,870 -at us. The first one is the lack of cohesion within the - -13 -00:00:37,870 --> 00:00:40,830 -component. So, if you look here, you can see that only - -14 -00:00:40,830 --> 00:00:44,820 -a few connections exist between the sub-components. And having a low cohesion - -15 -00:00:44,820 --> 00:00:47,430 -is normally not a good thing for a design. The second thing - -16 -00:00:47,430 --> 00:00:50,860 -that we can note is the high coupling. The component has tons - -17 -00:00:50,860 --> 00:00:54,200 -of connections with other components. They're, these edges that are - -18 -00:00:54,200 --> 00:00:57,890 -leaving the components and going towards other parts of the system. - -19 -00:00:57,890 --> 00:01:01,190 -So basically, this component has low cohesion and high coupling, which - -20 -00:01:01,190 --> 00:01:04,730 -is exactly the opposite of how a good design should be. - -21 -00:01:04,730 --> 00:01:07,410 -Given the structure, it is clear that anytime you change - -22 -00:01:07,410 --> 00:01:09,970 -this component you might need to change a bunch of other - -23 -00:01:09,970 --> 00:01:13,440 -components in the system. And of course, when changing other components - -24 -00:01:13,440 --> 00:01:15,910 -in the system, you might also need to chance the command - -25 -00:01:15,910 --> 00:01:19,060 -component as well. And along similar lines, to understand this - -26 -00:01:19,060 --> 00:01:21,890 -component you probably need to look at many other parts of - -27 -00:01:21,890 --> 00:01:24,690 -the system, which is also less than ideal. And one - -28 -00:01:24,690 --> 00:01:27,580 -important point here is that with all these examples, I'm not - -29 -00:01:27,580 --> 00:01:30,500 -really trying to criticize any specific system, what I'm trying - -30 -00:01:30,500 --> 00:01:34,380 -to show instead, is how complex software architectures can be, and - -31 -00:01:34,380 --> 00:01:37,040 -how much they can degrade over time. And this is true - -32 -00:01:37,040 --> 00:01:39,660 -for most systems, not just the ones that I showed you. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/14 - Architectural Design Quiz - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/14 - Architectural Design Quiz - lang_en_vs4.srt deleted file mode 100644 index e1e95e6..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/14 - Architectural Design Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,330 -At this point, we have seen some examples of - -2 -00:00:02,330 --> 00:00:05,070 -things that might go wrong with the software architecture. So - -3 -00:00:05,070 --> 00:00:07,220 -I'd like to ask you also to recap some of - -4 -00:00:07,220 --> 00:00:10,800 -the concepts that we've touched upon. What are ideal characteristics - -5 -00:00:10,800 --> 00:00:13,526 -of an architectural design? And I'm showing you three possibilities - -6 -00:00:13,526 --> 00:00:16,970 -here: scalability, low cohesion, and low coupling. And some of - -7 -00:00:16,970 --> 00:00:20,260 -these concepts we did not explicitly define, but we talked - -8 -00:00:20,260 --> 00:00:22,400 -about it when discussing the examples that we just saw. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/15 - Architectural Design Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/15 - Architectural Design Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 465687c..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/15 - Architectural Design Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,107 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,540 -So, let's look at these three characteristics one by - -2 -00:00:02,540 --> 00:00:06,660 -one. Scalability for software architecture is its ability to handle - -3 -00:00:06,660 --> 00:00:09,320 -the growth of the software system. For example, for a - -4 -00:00:09,320 --> 00:00:12,610 -web based system, scalability could be the ability to handle - -5 -00:00:12,610 --> 00:00:15,620 -a larger workload by adding new servers to the system. - -6 -00:00:15,620 --> 00:00:19,508 -Scalability is therefore an important characteristic of a software architecture, - -7 -00:00:19,508 --> 00:00:21,938 -especially for the kinds of systems that can grow over - -8 -00:00:21,938 --> 00:00:24,990 -time. So, we're going to mark it as an ideal characteristic. - -9 -00:00:24,990 --> 00:00:27,901 -Cohesion is a measure of how strongly related are - -10 -00:00:27,901 --> 00:00:30,920 -the elements of a module. Clearly, we should shoot - -11 -00:00:30,920 --> 00:00:33,760 -for high and not low cohesion when developing a - -12 -00:00:33,760 --> 00:00:37,100 -system. We want to develop modules whose elements cooperate to - -13 -00:00:37,100 --> 00:00:40,480 -provide the specific piece of functionality rather than modules - -14 -00:00:40,480 --> 00:00:43,410 -consisting of a bunch of elements that provide different - -15 -00:00:43,410 --> 00:00:47,040 -unrelated pieces of functionality. Therefor, low cohesion is definitely - -16 -00:00:47,040 --> 00:00:49,980 -not something that we want. We want high cohesion instead. - -17 -00:00:49,980 --> 00:00:53,040 -As for coupling, coupling is a concept related to cohesion - -18 -00:00:53,040 --> 00:00:55,070 -and is also a measure. In this case though, it - -19 -00:00:55,070 --> 00:00:58,130 -is a measure of how strongly related are the different - -20 -00:00:58,130 --> 00:01:01,830 -modules in a system. Low coupling, which is often correlated with - -21 -00:01:01,830 --> 00:01:05,570 -high cohesion, is an important and ideal characteristic of a - -22 -00:01:05,570 --> 00:01:08,660 -software architecture as it indicates that the different modules in - -23 -00:01:08,660 --> 00:01:12,220 -the system are independent from one another. Each module provides - -24 -00:01:12,220 --> 00:01:15,300 -a specific piece of functionality and it can provide it without - -25 -00:01:15,300 --> 00:01:17,530 -relying too much on other modules. - -26 -00:01:17,530 --> 00:01:19,960 -Basically, systems characterized by low coupling - -27 -00:01:19,960 --> 00:01:23,330 -and high cohesion, are systems that are easier to understand, and to maintain. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/16 - Architectural Elements - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/16 - Architectural Elements - lang_en_vs5.srt deleted file mode 100644 index c8de83f..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/16 - Architectural Elements - lang_en_vs5.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,770 -Now that we have discussed a few foundational aspects - -2 -00:00:02,770 --> 00:00:05,410 -of software architectures, and we have looked at some real - -3 -00:00:05,410 --> 00:00:07,900 -world examples that help us to illustrate some of these - -4 -00:00:07,900 --> 00:00:10,560 -points, to discuss some of these aspects. I want to - -5 -00:00:10,560 --> 00:00:13,730 -introduce and define the different elements that compose a software - -6 -00:00:13,730 --> 00:00:17,700 -architecture and also talk about architectural styles. So let's start - -7 -00:00:17,700 --> 00:00:20,190 -by discussing a software architecture's - -8 -00:00:20,190 --> 00:00:22,880 -elements. A software system's architecture - -9 -00:00:22,880 --> 00:00:26,690 -typically is not, and should not be, a uniform monolith. - -10 -00:00:26,690 --> 00:00:28,770 -On the contrary, an architecture should be a - -11 -00:00:28,770 --> 00:00:32,910 -composition and interplay of different elements. In particular, - -12 -00:00:32,910 --> 00:00:34,510 -as we quickly mentioned at the beginning of - -13 -00:00:34,510 --> 00:00:36,970 -the lesson, there are three main types of elements - -14 -00:00:36,970 --> 00:00:40,160 -in an architecture. Processing elements, data elements, and - -15 -00:00:40,160 --> 00:00:44,580 -interaction elements. Processing elements are those elements that implement - -16 -00:00:44,580 --> 00:00:48,260 -the business logic and perform transformations on data. - -17 -00:00:48,260 --> 00:00:51,760 -Data elements, also called information or state, are those - -18 -00:00:51,760 --> 00:00:54,180 -elements that contain the information that is used - -19 -00:00:54,180 --> 00:00:57,440 -and transformed by the processing elements. And finally, - -20 -00:00:57,440 --> 00:01:00,030 -the interaction elements are the glue that holds - -21 -00:01:00,030 --> 00:01:02,760 -the different pieces of the architecture together. Now, - -22 -00:01:02,760 --> 00:01:06,030 -the processing elements and the data are contained - -23 -00:01:06,030 --> 00:01:10,350 -into the system components, whereas the interaction elements - -24 -00:01:10,350 --> 00:01:13,900 -are maintained and controlled by the system connectors. - -25 -00:01:13,900 --> 00:01:17,100 -And components and connectors get all cooked together - -26 -00:01:17,100 --> 00:01:19,980 -into a systems configuration, which models - -27 -00:01:19,980 --> 00:01:22,940 -components, connectors and their relationships. So - -28 -00:01:22,940 --> 00:01:24,850 -now, let's look at components, connectors - -29 -00:01:24,850 --> 00:01:26,770 -and configurations in a little more detail. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/17 - Components, Connectors, and Configurations - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/17 - Components, Connectors, and Configurations - lang_en_vs5.srt deleted file mode 100644 index 5fc4df3..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/17 - Components, Connectors, and Configurations - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,250 --> 00:00:02,350 -And let's start with software components. A - -2 -00:00:02,350 --> 00:00:06,700 -software component is an architectural entity that encapsulates - -3 -00:00:06,700 --> 00:00:09,940 -a subset of the system's functionality and or - -4 -00:00:09,940 --> 00:00:13,180 -the system's data. So basically components typically provide - -5 -00:00:13,180 --> 00:00:16,100 -application specific services. In addition to that, a - -6 -00:00:16,100 --> 00:00:19,650 -software component also restricts access to that subset - -7 -00:00:19,650 --> 00:00:23,570 -via an explicitly defined interface. And, in addition, - -8 -00:00:23,570 --> 00:00:25,610 -which I'm not showing here, a component - -9 -00:00:25,610 --> 00:00:28,010 -can also have explicitly defined dependencies - -10 -00:00:28,010 --> 00:00:30,990 -on its required execution environment. In complex - -11 -00:00:30,990 --> 00:00:33,680 -systems, interactions might become more important and - -12 -00:00:33,680 --> 00:00:36,220 -challenging than functionality. And this is why - -13 -00:00:36,220 --> 00:00:40,000 -connectors are very important architectural elements. A - -14 -00:00:40,000 --> 00:00:42,935 -software connector is an architectural building block - -15 -00:00:42,935 --> 00:00:46,990 -tasked with effecting and regulating interactions among - -16 -00:00:46,990 --> 00:00:50,980 -components. So basically, connectors typically provide application - -17 -00:00:50,980 --> 00:00:54,610 -independent interaction facilities. And it's worth noting here - -18 -00:00:54,610 --> 00:00:57,530 -that in many software systems, connectors might simply be - -19 -00:00:57,530 --> 00:01:01,140 -procedure calls or shared data accesses. So all constants - -20 -00:01:01,140 --> 00:01:03,589 -that we're familiar with. But consider that much more - -21 -00:01:03,589 --> 00:01:06,690 -sophisticated and complex connectors are also possible. And - -22 -00:01:06,690 --> 00:01:10,310 -components and connectors are composed in a specific way - -23 -00:01:10,310 --> 00:01:13,510 -in a given system architecture to accomplish that system's - -24 -00:01:13,510 --> 00:01:17,400 -objective And this is expressed through an architectural configuration. - -25 -00:01:17,400 --> 00:01:21,070 -More precisely, an architectural configuration, or topology, is a - -26 -00:01:21,070 --> 00:01:25,630 -set of specific associations between the components and connectors - -27 -00:01:25,630 --> 00:01:28,380 -of a software system's architecture. So now, let's look - -28 -00:01:28,380 --> 00:01:30,880 -at an example that brings all of this together. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/18 - Configuration Example - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/18 - Configuration Example - lang_en_vs5.srt deleted file mode 100644 index 775f11c..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/18 - Configuration Example - lang_en_vs5.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,180 --> 00:00:02,880 -What I'm showing here is what an architectural configuration of - -2 -00:00:02,880 --> 00:00:05,460 -a system might look like in practice. And as you - -3 -00:00:05,460 --> 00:00:08,560 -can see, the configuration includes a set of components, which - -4 -00:00:08,560 --> 00:00:12,200 -are these rectangles over here. The components have various kinds of - -5 -00:00:12,200 --> 00:00:15,460 -ports, which are the ones marked here on the components - -6 -00:00:15,460 --> 00:00:17,760 -with different graphical representations. And - -7 -00:00:17,760 --> 00:00:19,760 -the components communicate through various - -8 -00:00:19,760 --> 00:00:22,860 -types of connectors, which are the grey elements here which - -9 -00:00:22,860 --> 00:00:25,570 -as you can see are used to connect the different components. - -10 -00:00:25,570 --> 00:00:28,180 -And something else that you can notice by looking at - -11 -00:00:28,180 --> 00:00:30,720 -this configuration is the fact that you can also have - -12 -00:00:30,720 --> 00:00:34,980 -hierarchically decomposable components. For example, if you look at the strategy - -13 -00:00:34,980 --> 00:00:39,250 -analyzer component, you can see that it has three subcomponents: one, - -14 -00:00:39,250 --> 00:00:42,110 -two, and three and two internal connectors as part of - -15 -00:00:42,110 --> 00:00:44,832 -it. And it is worth recalling here that a component - -16 -00:00:44,832 --> 00:00:47,152 -diagram as we said when first discussed in UML in - -17 -00:00:47,152 --> 00:00:51,230 -the course, can also be used to represent an architectural configuration. - -18 -00:00:51,230 --> 00:00:52,920 -So sometimes you will see architectural - -19 -00:00:52,920 --> 00:00:56,250 -configurations represented as UML component diagrams. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/19 - Deployment Architectural Perspective - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/19 - Deployment Architectural Perspective - lang_en_vs5.srt deleted file mode 100644 index 1cc7d89..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/19 - Deployment Architectural Perspective - lang_en_vs5.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,180 --> 00:00:03,100 -A system cannot fulfill its purpose until it is - -2 -00:00:03,100 --> 00:00:06,727 -deployed. And deploying a system involves physically placing the - -3 -00:00:06,727 --> 00:00:09,960 -system's executable modules on the hardware devices on which - -4 -00:00:09,960 --> 00:00:12,490 -they are supposed to run. So when you do that, - -5 -00:00:12,490 --> 00:00:16,132 -you're basically mapping your components and connectors to specific - -6 -00:00:16,132 --> 00:00:19,810 -hardware elements. Here in this diagram, for instance, I'm - -7 -00:00:19,810 --> 00:00:22,160 -showing the same components that we saw in the - -8 -00:00:22,160 --> 00:00:25,400 -previous diagram, but we see them deployed on a laptop, - -9 -00:00:25,400 --> 00:00:28,620 -which is depicted here in this way, and on two - -10 -00:00:28,620 --> 00:00:32,820 -smartphones that are represented here, or PDAs, if you wish. - -11 -00:00:32,820 --> 00:00:34,730 -So why do we this, why do we create - -12 -00:00:34,730 --> 00:00:38,540 -a deployment perspective for our architecture? Well, because the deployment - -13 -00:00:38,540 --> 00:00:41,710 -view of an architecture can be critical in assessing whether - -14 -00:00:41,710 --> 00:00:44,920 -the system will be able to satisfy its requirement. Because - -15 -00:00:44,920 --> 00:00:47,860 -doing this mapping allows you to discover and assess other - -16 -00:00:47,860 --> 00:00:50,840 -characteristics of your system that you might not have considered - -17 -00:00:50,840 --> 00:00:53,440 -up to now. For instance, using a deployment view like this - -18 -00:00:53,440 --> 00:00:57,030 -one and knowing the characteristics of the hardware devices, one might - -19 -00:00:57,030 --> 00:01:00,056 -be able to assess the system in terms of available memory. - -20 -00:01:00,056 --> 00:01:02,610 -Is there going to be enough memory available to run the system, - -21 -00:01:02,610 --> 00:01:06,140 -for example, on this device? Power consumption. Is the power consumption - -22 -00:01:06,140 --> 00:01:09,270 -profile going to be larger than what the device can handle? - -23 -00:01:09,270 --> 00:01:12,580 -Or again the required network bandwidth. Does the system have enough - -24 -00:01:12,580 --> 00:01:16,170 -network bandwidth to enable the required interactions? And so on. So all - -25 -00:01:16,170 --> 00:01:19,140 -of these characteristics, all of these qualities, you can assess when - -26 -00:01:19,140 --> 00:01:22,730 -you do this final mapping of the components to the hardware elements. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt deleted file mode 100644 index 40fa57c..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt +++ /dev/null @@ -1,499 +0,0 @@ -1 -00:00:00,220 --> 00:00:02,900 -Because the topic of today's lecture is software architecture, - -2 -00:00:02,900 --> 00:00:05,390 -it seemed appropriate to start the lesson by asking a - -3 -00:00:05,390 --> 00:00:08,960 -world expert on this topic, what is software architecture, and - -4 -00:00:08,960 --> 00:00:11,570 -why it is important. To do that, let's fly to - -5 -00:00:11,570 --> 00:00:14,910 -California, and more precisely, Los Angeles, and visit Professor - -6 -00:00:14,910 --> 00:00:19,540 -Nenad Medvidovic. Hi, I'm here visiting Professor Nenad Medvidovic from - -7 -00:00:19,540 --> 00:00:22,310 -the University of Southern California. And Neno is one of - -8 -00:00:22,310 --> 00:00:25,250 -the world experts in software architecture, actually one of the - -9 -00:00:25,250 --> 00:00:28,300 -authors of, of a recent book which is, sort of the - -10 -00:00:28,300 --> 00:00:31,660 -book in software architecture. What I would like to discuss with - -11 -00:00:31,660 --> 00:00:34,500 -Neno is the concept of software architecture and its importance. Because - -12 -00:00:34,500 --> 00:00:37,520 -people are very familiar with the idea and the cost of the - -13 -00:00:37,520 --> 00:00:41,240 -design. And software architecture is something is very related to that, - -14 -00:00:41,240 --> 00:00:43,690 -but is less known. So I would like for Nenad to - -15 -00:00:43,690 --> 00:00:46,350 -elaborate on that, and tell us why is it important to - -16 -00:00:46,350 --> 00:00:49,880 -focus also on this specific you know, architectural aspects of the software. - -17 -00:00:49,880 --> 00:00:50,380 ->> When you - -18 -00:00:50,380 --> 00:00:53,220 -build any software system, even a simple, relatively simple - -19 -00:00:53,220 --> 00:00:56,840 -one. You're going to go through, a process of making - -20 -00:00:56,840 --> 00:01:00,070 -many, many design decisions. Hundreds or thousands sometimes even tens - -21 -00:01:00,070 --> 00:01:03,140 -of thousands of design decisions, so any program that you - -22 -00:01:03,140 --> 00:01:06,090 -write at some point you get to deciding what - -23 -00:01:06,090 --> 00:01:09,385 -the interface of a particular method is going to be. - -24 -00:01:09,385 --> 00:01:12,170 -Are you're going to put in a parameter that is - -25 -00:01:12,170 --> 00:01:15,530 -an integer or a float. When you're writing your routine - -26 -00:01:15,530 --> 00:01:17,400 -about some sort you have to decide whether you're - -27 -00:01:17,400 --> 00:01:18,900 -going to use a static data structure or a - -28 -00:01:18,900 --> 00:01:22,410 -dynamic data structure. All these things are design decisions. - -29 -00:01:22,410 --> 00:01:25,770 -Many of them however, will typically, in the average - -30 -00:01:25,770 --> 00:01:29,030 -case, not really impact the success of your system - -31 -00:01:29,030 --> 00:01:31,640 -and the long term well-being of your system. But - -32 -00:01:31,640 --> 00:01:35,390 -typically the things that software engineers start struggling with - -33 -00:01:35,390 --> 00:01:40,760 -are other design decisions. Design decisions that are the equivalent - -34 -00:01:40,760 --> 00:01:42,080 -of load baring walls in a building - -35 -00:01:42,080 --> 00:01:42,660 ->> Mm hm - -36 -00:01:42,660 --> 00:01:43,950 ->> These are the things that, if you - -37 -00:01:43,950 --> 00:01:45,960 -don't get them right, or if you compromise - -38 -00:01:45,960 --> 00:01:50,190 -them, will in fact potentially impact how the - -39 -00:01:50,190 --> 00:01:54,300 -system operates. They might result in failures of different - -40 -00:01:54,300 --> 00:01:56,780 -kinds. They may result in a system that - -41 -00:01:56,780 --> 00:01:59,460 -is not easily maintainable and so forth. In - -42 -00:01:59,460 --> 00:02:01,680 -a sense, to make a long story short, - -43 -00:02:01,680 --> 00:02:05,888 -architectural design decisions are really the principle design decisions - -44 -00:02:05,888 --> 00:02:07,900 -in your system. These are the things that are - -45 -00:02:07,900 --> 00:02:10,550 -very important. All of the other design decisions you - -46 -00:02:10,550 --> 00:02:13,520 -could sort of tag with being important, but they're - -47 -00:02:13,520 --> 00:02:17,730 -sort of below this very important or highly important threshold. - -48 -00:02:17,730 --> 00:02:21,400 ->> So if you need to change a low level design decision, sometimes - -49 -00:02:21,400 --> 00:02:23,970 -it's kind of easy to do. It might change a little structure. Is it - -50 -00:02:23,970 --> 00:02:27,140 -the case that you know, being the architecture is sort of the pillar of - -51 -00:02:27,140 --> 00:02:29,020 -the software, is that going to be much - -52 -00:02:29,020 --> 00:02:32,380 -more difficult to change an architectural decision? - -53 -00:02:32,380 --> 00:02:34,400 -And architecture is deemed to be you know, - -54 -00:02:34,400 --> 00:02:36,120 -say if you start with the wrong architecture the - -55 -00:02:36,120 --> 00:02:39,510 -software is going to, you know, necessarily be unsuccessful. - -56 -00:02:39,510 --> 00:02:41,320 -Or you can also do something that is better. - -57 -00:02:41,320 --> 00:02:46,070 ->> A system could be successful and very poorly architected. Just - -58 -00:02:46,070 --> 00:02:50,630 -like a building or an airplane or a car, any other - -59 -00:02:50,630 --> 00:02:54,700 -engineering artifact could be successful but poorly architected. So success we - -60 -00:02:54,700 --> 00:02:57,440 -can separated from this, but the, the point that you make in - -61 -00:02:57,440 --> 00:03:00,530 -asking this question is an important one. The - -62 -00:03:00,530 --> 00:03:04,260 -non-architectural design decisions, should be on the - -63 -00:03:04,260 --> 00:03:06,250 -average, there are exceptions and we need to - -64 -00:03:06,250 --> 00:03:09,580 -acknowledge that there is no one size fits all - -65 -00:03:09,580 --> 00:03:11,640 -type of solution for anything in software engineering - -66 -00:03:11,640 --> 00:03:15,060 -really. But on the average, the non-architectural design decisions, - -67 -00:03:15,060 --> 00:03:17,650 -should be much easier to make. So the - -68 -00:03:17,650 --> 00:03:22,600 -scale of the consequences of making such a change. - -69 -00:03:22,600 --> 00:03:25,880 -Really can vary from very minor, highly localized - -70 -00:03:25,880 --> 00:03:29,670 -to very important and sometimes, even system wide. - -71 -00:03:29,670 --> 00:03:33,570 ->> To conclude, I just like to ask you about some concept that is - -72 -00:03:33,570 --> 00:03:35,110 -we here about a lot. Which is - -73 -00:03:35,110 --> 00:03:37,430 -architectural erosion. Since, we're talking about in with - -74 -00:03:37,430 --> 00:03:39,760 -fine architecture and software evolution. So, what is, - -75 -00:03:39,760 --> 00:03:42,090 -exactly, an architectural erosion and why does that - -76 -00:03:42,090 --> 00:03:47,600 -happen? So, to go back to our non software metaphors. Imagine you buy a car. - -77 -00:03:47,600 --> 00:03:49,810 -And your car has four wheels, it has a steering wheel, it has - -78 -00:03:49,810 --> 00:03:53,700 -a nice chassis, it looks pretty nice. At one point, you end up - -79 -00:03:53,700 --> 00:03:54,950 -replacing its 150 horsepower engine with - -80 -00:03:54,950 --> 00:03:56,800 -a 250 horsepower engine because that's what - -81 -00:03:56,800 --> 00:04:01,510 -you want. And you start putting a spoiler on the back of the car - -82 -00:04:01,510 --> 00:04:04,680 -and then you replace the headlights. And then you replace the side view - -83 -00:04:04,680 --> 00:04:08,000 -mirrors with smaller ones because you want your car to be more aerodynamic. - -84 -00:04:08,000 --> 00:04:10,620 -And then you start tinkering with other things, like you cut the, maybe - -85 -00:04:10,620 --> 00:04:13,380 -the roof of the car because you want to turn it into a convertible, - -86 -00:04:13,380 --> 00:04:15,990 -et cetera. And in the end, what you have is - -87 -00:04:15,990 --> 00:04:19,810 -a car that is still your car. Looks very different, It's - -88 -00:04:19,810 --> 00:04:23,650 -structural and behavioral properties are very different And, what you - -89 -00:04:23,650 --> 00:04:27,260 -might find is that the car doesn't handle nearly as well. - -90 -00:04:27,260 --> 00:04:29,670 -For example, in a very sharp turn it might not - -91 -00:04:29,670 --> 00:04:31,910 -be able to negotiate a steep hill as well. Because you - -92 -00:04:31,910 --> 00:04:35,760 -pretty much changed it all along the way. Architectural erosion in - -93 -00:04:35,760 --> 00:04:38,620 -the case of a software system is the exact same thing - -94 -00:04:38,620 --> 00:04:41,480 -with one huge caveat. Very few, if any of us, - -95 -00:04:41,480 --> 00:04:44,970 -will ever put a new engine into our car or tinker - -96 -00:04:44,970 --> 00:04:47,390 -with the structural soundness of the car by cutting off the - -97 -00:04:47,390 --> 00:04:50,260 -roof etc. In a software system we do it all the - -98 -00:04:50,260 --> 00:04:53,530 -time. We'll add a feature. We'll change one bit of the - -99 -00:04:53,530 --> 00:04:57,088 -user interface here. We'll port it to a new platform, some - -100 -00:04:57,088 --> 00:05:00,990 -kind of a, a mobile platform, for example. And pretty soon, - -101 -00:05:00,990 --> 00:05:03,750 -what you end up with is really a software system that, - -102 -00:05:03,750 --> 00:05:06,990 -that is maybe a distant relative of your original - -103 -00:05:06,990 --> 00:05:10,500 -system. It is a mutant in many ways, because often - -104 -00:05:10,500 --> 00:05:12,986 -times these little tinkerings happen on a one off - -105 -00:05:12,986 --> 00:05:15,610 -basis. There is no over-arching vision of how you should - -106 -00:05:15,610 --> 00:05:19,060 -do this. So, you are basically going through a - -107 -00:05:19,060 --> 00:05:21,980 -subsequent set of steps where you are making locally optimal - -108 -00:05:21,980 --> 00:05:25,240 -decisions for any one of these changes and what - -109 -00:05:25,240 --> 00:05:29,140 -you might end up finding is that the globally optimal - -110 -00:05:29,140 --> 00:05:32,100 -behavior of the system is badly compromised. The structural - -111 -00:05:32,100 --> 00:05:34,952 -soundness in a sense of the system badly compromised. - -112 -00:05:34,952 --> 00:05:38,510 -The non-functional properties of the system could be seriously - -113 -00:05:38,510 --> 00:05:42,390 -affected. This is how security flaws creep into systems. This - -114 -00:05:42,390 --> 00:05:44,250 -is how reliability flaws. This is how we use - -115 -00:05:44,250 --> 00:05:48,420 -the usability of a system often times suffers. And most - -116 -00:05:48,420 --> 00:05:50,920 -importantly for software engineers, the people who actually build the - -117 -00:05:50,920 --> 00:05:54,950 -software, the maintainability of the system becomes a huge problem. - -118 -00:05:54,950 --> 00:05:59,130 -Because now you're looking at this thing, it's got all these various appendages, - -119 -00:05:59,130 --> 00:06:03,170 -its original design has pretty badly eroded and yet somehow you have to - -120 -00:06:03,170 --> 00:06:06,850 -figure out how to keep fixing it. Making sure that it operates in - -121 -00:06:06,850 --> 00:06:11,380 -a continuous fashion because many of these systems live for 20, 30, 40 years. - -122 -00:06:11,380 --> 00:06:13,840 ->> Thank you so much for your insight; it is a perfect - -123 -00:06:13,840 --> 00:06:16,500 -introduction for our lesson. So we'll get to the lesson now. And. - -124 -00:06:16,500 --> 00:06:17,920 ->> Thank you very much. - -125 -00:06:17,920 --> 00:06:18,300 ->> Thank you. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/20 - Architectural Styles - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/20 - Architectural Styles - lang_en_vs5.srt deleted file mode 100644 index b4ee115..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/20 - Architectural Styles - lang_en_vs5.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,210 --> 00:00:01,569 -The last topic I want to cover in - -2 -00:00:01,569 --> 00:00:04,939 -this lesson is architectural styles. So, let's see - -3 -00:00:04,939 --> 00:00:07,400 -what those architectural styles are. There are certain - -4 -00:00:07,400 --> 00:00:10,240 -design choices that when applied in a given context - -5 -00:00:10,240 --> 00:00:14,420 -regularly result in solutions with superior properties. What - -6 -00:00:14,420 --> 00:00:17,290 -this means is that, compared to other possible alternatives, - -7 -00:00:17,290 --> 00:00:20,952 -these solutions are more elegant, effective, efficient, dependable, - -8 -00:00:20,952 --> 00:00:25,560 -evolve-able, scale-able, and so on. Architectural styles capture exactly - -9 -00:00:25,560 --> 00:00:28,490 -these solutions. They capture idioms that we can - -10 -00:00:28,490 --> 00:00:30,870 -use when designing a system. For a more formal - -11 -00:00:30,870 --> 00:00:34,160 -definition, let's look how Mary Shaw and David Garlan - -12 -00:00:34,160 --> 00:00:37,480 -define a architectural style. They say that an architectural - -13 -00:00:37,480 --> 00:00:40,000 -style defines a family of systems in terms - -14 -00:00:40,000 --> 00:00:43,550 -of a pattern of structural organization; a vocabulary of - -15 -00:00:43,550 --> 00:00:47,880 -components and connectors and constraints on how these components - -16 -00:00:47,880 --> 00:00:50,620 -and connectors can be combined. So in summary we - -17 -00:00:50,620 --> 00:00:53,650 -can say that an architectural style is a named collection - -18 -00:00:53,650 --> 00:00:57,680 -of architectural design decisions applicable in a given context. And I - -19 -00:00:57,680 --> 00:01:00,100 -want to stress that it is important to study and - -20 -00:01:00,100 --> 00:01:04,670 -know these architectural styles for several reasons. Because knowing them allows - -21 -00:01:04,670 --> 00:01:07,660 -us to avoid reinventing the wheel. It also allows us - -22 -00:01:07,660 --> 00:01:10,330 -to choose the right solution to a known problem and in - -23 -00:01:10,330 --> 00:01:12,910 -some cases it even allows us to move on and - -24 -00:01:12,910 --> 00:01:16,400 -discover even more advanced styles if we know the basic ones. - -25 -00:01:16,400 --> 00:01:19,340 -So we should be familiar with architectural styles, what - -26 -00:01:19,340 --> 00:01:22,000 -they are, and in which context they work, and - -27 -00:01:22,000 --> 00:01:23,800 -in which context they do not work. So as - -28 -00:01:23,800 --> 00:01:26,090 -to be able to apply them in the right situations. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/21 - Types of Architectural Styles - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/21 - Types of Architectural Styles - lang_en_vs5.srt deleted file mode 100644 index 05011c7..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/21 - Types of Architectural Styles - lang_en_vs5.srt +++ /dev/null @@ -1,239 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,410 -So what does it mean to know architectural styles? There - -2 -00:00:02,410 --> 00:00:06,390 -are many many, many architectural styles. So we cannot cover them - -3 -00:00:06,390 --> 00:00:08,730 -all here. What I want to do instead is, I want to - -4 -00:00:08,730 --> 00:00:10,960 -mention a few of those. And then I want to go in - -5 -00:00:10,960 --> 00:00:13,300 -more depth, on one of them. So the first item I - -6 -00:00:13,300 --> 00:00:17,420 -want to mention is pipes and filters. And pipes and filters indicate - -7 -00:00:17,420 --> 00:00:21,110 -an architectural style in which a chain of processing elements, which - -8 -00:00:21,110 --> 00:00:25,410 -can be processes, threads, co-routines, is arranged so that the output - -9 -00:00:25,410 --> 00:00:28,420 -of each element is the input of the next one - -10 -00:00:28,420 --> 00:00:31,840 -and usually with some buffering in between consecutive elements. A - -11 -00:00:31,840 --> 00:00:34,120 -typical example of this, if you're familiar with Unix are - -12 -00:00:34,120 --> 00:00:37,900 -Unix pipes, that you can use to concatenate Unix commands. - -13 -00:00:37,900 --> 00:00:40,310 -Another style I want to mention is the event driven - -14 -00:00:40,310 --> 00:00:43,540 -one. An event driven system typically consists of event - -15 -00:00:43,540 --> 00:00:46,590 -emittors, like the alarm over here, and event consumers, like - -16 -00:00:46,590 --> 00:00:50,720 -the fire truck, down here, and consumers are notified when events - -17 -00:00:50,720 --> 00:00:53,810 -of interest occurr and have the responsibility of reacting - -18 -00:00:53,810 --> 00:00:56,676 -to those events. A typical example will be a GUI, - -19 -00:00:56,676 --> 00:00:59,950 -in which widgets generate events and listeners listen to those - -20 -00:00:59,950 --> 00:01:02,550 -events and react to them. For example, they react to - -21 -00:01:02,550 --> 00:01:05,060 -the push of a button. A very commonly used - -22 -00:01:05,060 --> 00:01:09,250 -architectural style is Publish-subscribe, represented by the paper boy. Over - -23 -00:01:09,250 --> 00:01:12,420 -here. And this is an architectural style in which senders - -24 -00:01:12,420 --> 00:01:15,870 -of messages, they're called publishers, do not send messages directly - -25 -00:01:15,870 --> 00:01:19,330 -to specific recievers. Instead, they publish messages with one - -26 -00:01:19,330 --> 00:01:22,530 -or more associated texts without knowledge of who will - -27 -00:01:22,530 --> 00:01:26,810 -receive such messages. Similarly subscribers will express interest in - -28 -00:01:26,810 --> 00:01:29,340 -one or more tags. And will only receive messages of - -29 -00:01:29,340 --> 00:01:32,095 -interest according to such tags. A typical example of - -30 -00:01:32,095 --> 00:01:35,240 -a publish-subscribe system, will be Twitter. And I'm pretty - -31 -00:01:35,240 --> 00:01:36,835 -sure that most of you are familiar with the - -32 -00:01:36,835 --> 00:01:41,170 -client-server architecture. In which computers in a network, assume one - -33 -00:01:41,170 --> 00:01:43,930 -of two roles. The server provides the resources and - -34 -00:01:43,930 --> 00:01:47,630 -functionality. And the client initiates contact with the server, - -35 -00:01:47,630 --> 00:01:50,920 -and requests the use of those resources and functionality. - -36 -00:01:50,920 --> 00:01:53,340 -Also in this case, a typical example would be - -37 -00:01:53,340 --> 00:01:56,470 -email, in which an email server provides email storage - -38 -00:01:56,470 --> 00:01:59,390 -and management capabilities, and an email client will use - -39 -00:01:59,390 --> 00:02:02,580 -those capabilities. You may also be familiar with peer-to-peer, - -40 -00:02:02,580 --> 00:02:06,530 -or P2P, systems. A P2P system is a type - -41 -00:02:06,530 --> 00:02:10,850 -of decentralized and distributed network system in which individual nodes - -42 -00:02:10,850 --> 00:02:14,220 -in the network, that are called peers, act as independent - -43 -00:02:14,220 --> 00:02:17,940 -agents that are both suppliers and consumers of resources. This - -44 -00:02:17,940 --> 00:02:20,700 -is in contrast to the centralized client-server model, where client - -45 -00:02:20,700 --> 00:02:23,660 -nodes interact with the central authority. And I'm not going to - -46 -00:02:23,660 --> 00:02:26,030 -say anything more about peer-to-peer, because I'm going to show you - -47 -00:02:26,030 --> 00:02:28,940 -two examples, of peer-to-peer systems in the rest of the - -48 -00:02:28,940 --> 00:02:32,040 -lesson. And you probably have at least heard of rest. - -49 -00:02:32,040 --> 00:02:33,990 -Which in this case is not an invitation to - -50 -00:02:33,990 --> 00:02:36,970 -relax as the graphic might indicate. But rather stands for - -51 -00:02:36,970 --> 00:02:41,400 -Representational State Transfer. REST is a hybrid architectural style - -52 -00:02:41,400 --> 00:02:45,150 -for distributed hypermedia systems, that is derived from several other - -53 -00:02:45,150 --> 00:02:48,210 -network based architectural styles. And that is characterized by - -54 -00:02:48,210 --> 00:02:51,970 -uniform connector interface, and even if I'm not going to say - -55 -00:02:51,970 --> 00:02:54,230 -anything else about the rest, I wanted to mention - -56 -00:02:54,230 --> 00:02:57,440 -it, because it is an extremely well known architectural style. - -57 -00:02:57,440 --> 00:02:59,300 -And the reason for this is that REST is - -58 -00:02:59,300 --> 00:03:03,310 -very widely used, because it is basically the architectural style - -59 -00:03:03,310 --> 00:03:06,050 -that governs the world wide web. So we use it - -60 -00:03:06,050 --> 00:03:08,330 -all the time when we browse the internet, for instance. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/22 - Architectural Styles Quiz - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/22 - Architectural Styles Quiz - lang_en_vs4.srt deleted file mode 100644 index 2e8c051..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/22 - Architectural Styles Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,27 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,630 -Consider now the following architectural styles - -2 -00:00:02,630 --> 00:00:04,356 -that we just saw: pipes and filters, - -3 -00:00:04,356 --> 00:00:09,310 -event-driven, publish-subscribe, client-server, peer-to-peer, and rest. - -4 -00:00:09,310 --> 00:00:11,150 -I'm showing you here, a list of - -5 -00:00:11,150 --> 00:00:15,220 -four different systems, and I would like for you to mark here which - -6 -00:00:15,220 --> 00:00:18,750 -architectural style, or styles, characterize Each of - -7 -00:00:18,750 --> 00:00:21,510 -these systems. Again, mark all that apply. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/23 - Architectural Styles Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/23 - Architectural Styles Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index d48320b..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/23 - Architectural Styles Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,680 -Okay, let's start with the Android Operating System. The Android - -2 -00:00:02,680 --> 00:00:07,170 -system, heavily based on the generation and handling of events, - -3 -00:00:07,170 --> 00:00:10,640 -so it is mostly an event driven system. However, it - -4 -00:00:10,640 --> 00:00:13,870 -also has some elements of publish, subscribe, in the way - -5 -00:00:13,870 --> 00:00:17,480 -elements in the system can register for elements of interest. - -6 -00:00:17,480 --> 00:00:20,570 -So we can mark both styles here. So what about - -7 -00:00:20,570 --> 00:00:23,449 -Skype? We haven't discussed Skype yet. So here we probably - -8 -00:00:23,449 --> 00:00:25,019 -had to take a little bit of a wild guess. - -9 -00:00:25,019 --> 00:00:27,068 -But as we will see in more detail in the - -10 -00:00:27,068 --> 00:00:29,736 -rest of the lesson. Skype is mainly a peer to - -11 -00:00:29,736 --> 00:00:34,035 -peer architecture, with some minimal elements of a client server - -12 -00:00:34,035 --> 00:00:37,770 -architecture. For example, when you start Skype and sign in - -13 -00:00:37,770 --> 00:00:40,420 -to a conceptually centralized server. So let's move to the - -14 -00:00:40,420 --> 00:00:42,930 -World Wide Web. As we just discussed, the Word Wide - -15 -00:00:42,930 --> 00:00:46,255 -Web is based on a rest architecture. And because rest - -16 -00:00:46,255 --> 00:00:50,170 -style, is a hybrid derived from other architectural styles, including the - -17 -00:00:50,170 --> 00:00:53,960 -client server architectural styles. Both of those styles apply here. - -18 -00:00:53,960 --> 00:00:57,465 -And finally Dropbox is by and large, a client server - -19 -00:00:57,465 --> 00:01:01,904 -architecture. As conceptually, we upload our documents to a Dropbox - -20 -00:01:01,904 --> 00:01:05,370 -central server, and get the files from the same server. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/24 - P2P Architectures - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/24 - P2P Architectures - lang_en_vs5.srt deleted file mode 100644 index 927c773..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/24 - P2P Architectures - lang_en_vs5.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,110 -We're not going to be able to study indepth - -2 -00:00:02,110 --> 00:00:05,590 -any of the architectural styles that we just discussed. However, I - -3 -00:00:05,590 --> 00:00:08,790 -want to at least discuss two representative examples of P2P - -4 -00:00:08,790 --> 00:00:12,100 -architectures. Because, these are systems that you probably used, or at - -5 -00:00:12,100 --> 00:00:14,090 -least, you used one of them. And, they will allow - -6 -00:00:14,090 --> 00:00:17,590 -me to highlight some interesting points. So, as we just mentioned, - -7 -00:00:17,590 --> 00:00:22,450 -P2P systems are decentralized resource sharing and discovery systems. And the - -8 -00:00:22,450 --> 00:00:25,370 -two systems that I want to discuss, and that are representative - -9 -00:00:25,370 --> 00:00:29,630 -of this kind of architectures, are Napster and Skype. And you may or - -10 -00:00:29,630 --> 00:00:32,920 -may not be familiar with Napster, but I'm pretty sure that you know Skype. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/25 - Napster Example - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/25 - Napster Example - lang_en_vs4.srt deleted file mode 100644 index d3ab75b..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/25 - Napster Example - lang_en_vs4.srt +++ /dev/null @@ -1,231 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,160 -So let's start by considering Napster. In it's first - -2 -00:00:03,160 --> 00:00:07,210 -incarnation, Napster was a peer-to-peer file sharing system. And - -3 -00:00:07,210 --> 00:00:10,200 -it was mostly used, actually, to illegally share mp3s. - -4 -00:00:10,200 --> 00:00:12,630 -Which is also why it got sued and later - -5 -00:00:12,630 --> 00:00:16,129 -on, it basically ceased operations. But nevertheless, I think - -6 -00:00:16,129 --> 00:00:19,710 -Napster is an interesting example of mixed architecture. And - -7 -00:00:19,710 --> 00:00:22,020 -I'm going to illustrate the way Napster works by showing - -8 -00:00:22,020 --> 00:00:25,820 -you, here, the basic configuration of Napster and the interactions - -9 -00:00:25,820 --> 00:00:28,950 -between its elements. So let's look at how such interaction - -10 -00:00:28,950 --> 00:00:32,250 -can take place for the three peers shown here. And - -11 -00:00:32,250 --> 00:00:34,430 -in this case Peer A and B are the only - -12 -00:00:34,430 --> 00:00:37,290 -ones really involved in the action. So let's look at - -13 -00:00:37,290 --> 00:00:40,700 -a typical sequence of events for the Napster system. We - -14 -00:00:40,700 --> 00:00:44,340 -have Peer A that will start by registering, here, with - -15 -00:00:44,340 --> 00:00:47,530 -the content directory. Peer B will also register with the - -16 -00:00:47,530 --> 00:00:50,970 -content directory. And when these two peers register, the content directory - -17 -00:00:50,970 --> 00:00:54,370 -will know what kind of content they can provide. Later on, - -18 -00:00:54,370 --> 00:00:57,660 -Peer A will request a song. And one first observation that - -19 -00:00:57,660 --> 00:01:00,550 -we can make, based on this interaction, is the fact that, - -20 -00:01:00,550 --> 00:01:03,900 -up to now, this is a purely client-server system. This is - -21 -00:01:03,900 --> 00:01:06,530 -the client. This is the client. And this is the server. - -22 -00:01:06,530 --> 00:01:10,320 -And the interaction is a typical client-server interaction. But now we're - -23 -00:01:10,320 --> 00:01:12,410 -at the point in which things start to change a little - -24 -00:01:12,410 --> 00:01:16,008 -bit. At this point, after Peer A has requested the song, - -25 -00:01:16,008 --> 00:01:18,820 -the peer and content directory will look up its - -26 -00:01:18,820 --> 00:01:22,730 -gigantic index and will see that Peer B actually has - -27 -00:01:22,730 --> 00:01:24,850 -the song that Peer A requested. So it will - -28 -00:01:24,850 --> 00:01:27,690 -send to Peer A a handle that Peer A can - -29 -00:01:27,690 --> 00:01:31,052 -use to connect directly to Peer B. So this - -30 -00:01:31,052 --> 00:01:34,540 -is where the system is no longer a client-server system. - -31 -00:01:34,540 --> 00:01:37,890 -Because at this point, the two peers are connected directly. - -32 -00:01:37,890 --> 00:01:41,000 -So at this point, we have a peer-to-peer interaction. And, - -33 -00:01:41,000 --> 00:01:43,770 -after getting the request from Peer A, then Peer B - -34 -00:01:43,770 --> 00:01:47,170 -will start sending the content to Peer A. And I said - -35 -00:01:47,170 --> 00:01:50,660 -earlier that one of the useful things about representing an - -36 -00:01:50,660 --> 00:01:52,440 -architecture and interaction within an - -37 -00:01:52,440 --> 00:01:54,580 -architecture graphically, is the fact that - -38 -00:01:54,580 --> 00:01:57,550 -it allows you to spot possible problems. And in this - -39 -00:01:57,550 --> 00:02:00,666 -case, by representing the Napster architecture in this way, and by - -40 -00:02:00,666 --> 00:02:03,300 -studying how things work, we can see that there's an - -41 -00:02:03,300 --> 00:02:06,010 -issue with the architecture of Napster that will not make this - -42 -00:02:06,010 --> 00:02:10,020 -architecture scale. As some of you might have already noticed, this peer - -43 -00:02:10,020 --> 00:02:13,720 -and content directory is a single point of failure, and is very - -44 -00:02:13,720 --> 00:02:17,230 -likely to cause problems when the number of peers grows too large. - -45 -00:02:17,230 --> 00:02:19,890 -Because at that point, there are going to be too many requests to - -46 -00:02:19,890 --> 00:02:22,840 -the peer and content directory, and the peer and content directory is - -47 -00:02:22,840 --> 00:02:25,460 -unlikely to be able to keep up with all the requests. So - -48 -00:02:25,460 --> 00:02:27,840 -some changes in the architecture will have to be made. In the - -49 -00:02:27,840 --> 00:02:31,310 -case of Napster, we didn't see this problem occurring because, as I said - -50 -00:02:31,310 --> 00:02:34,420 -earlier, Napster got sued and ceased operation before the problem - -51 -00:02:34,420 --> 00:02:37,650 -actually manifested. Now looking at the system for an architecture-style - -52 -00:02:37,650 --> 00:02:40,560 -perspective, we can see that Napster was a hybrid architecture - -53 -00:02:40,560 --> 00:02:43,920 -with both client-server and peer-to-peer elements. And something I would - -54 -00:02:43,920 --> 00:02:45,870 -like to stress here, is that this is not at - -55 -00:02:45,870 --> 00:02:49,400 -all uncommon. So in real world nontrivial architectures, it is - -56 -00:02:49,400 --> 00:02:52,470 -very common to see multiple styles used in the same - -57 -00:02:52,470 --> 00:02:56,209 -system. The next system that we will consider, Skype, is instead, - -58 -00:02:56,209 --> 00:02:59,885 -an example of a well-designed, almost purely peer-to-peer system. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/26 - Skype Example - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/26 - Skype Example - lang_en_vs5.srt deleted file mode 100644 index 2118c73..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/26 - Skype Example - lang_en_vs5.srt +++ /dev/null @@ -1,287 +0,0 @@ -1 -00:00:00,220 --> 00:00:03,040 -So even if you're too young to have used Napster, - -2 -00:00:03,040 --> 00:00:06,150 -I'm pretty sure that most of you know and use Skype, - -3 -00:00:06,150 --> 00:00:10,180 -a Voice Over IP and instant messaging service. Many of - -4 -00:00:10,180 --> 00:00:13,790 -you, however, probably don't know how Skype works. To understand that, - -5 -00:00:13,790 --> 00:00:16,360 -let's have a look at Skype's architecture, which I'm sketching - -6 -00:00:16,360 --> 00:00:19,890 -here, and which is a peer-to-peer architecture with a small twist. - -7 -00:00:19,890 --> 00:00:22,300 -So first of all, by looking at the architecture we can - -8 -00:00:22,300 --> 00:00:25,600 -see that whereas Napster was a client-server system with an element - -9 -00:00:25,600 --> 00:00:29,960 -of peer-to-peer, Skype is a much more decentralized system. Why - -10 -00:00:29,960 --> 00:00:31,940 -is that? Well, if we look here, we can see - -11 -00:00:31,940 --> 00:00:34,720 -that there is a login server -- this node over - -12 -00:00:34,720 --> 00:00:38,670 -here -- and that means that every Skype user has to register - -13 -00:00:38,670 --> 00:00:42,000 -with this centralized service. But that's the only interaction of - -14 -00:00:42,000 --> 00:00:44,930 -this kind within Skype. After you log in, all you - -15 -00:00:44,930 --> 00:00:47,580 -get is a connection through a super node like this - -16 -00:00:47,580 --> 00:00:50,760 -one. So, what are super nodes? Super nodes are highly reliable - -17 -00:00:50,760 --> 00:00:54,680 -nodes with high bandwidth that are not behind a firewall - -18 -00:00:54,680 --> 00:00:58,180 -and that runs Skype regularly, which means that nodes that shut - -19 -00:00:58,180 --> 00:01:01,540 -down Skype occasionally will not qualify as super nodes. And one - -20 -00:01:01,540 --> 00:01:04,239 -interesting thing about super nodes is that they're not owned by - -21 -00:01:04,239 --> 00:01:07,990 -Skype. They're just regular nodes that get promoted by Skype to - -22 -00:01:07,990 --> 00:01:11,500 -super nodes, and that know about each other. So basically Skype - -23 -00:01:11,500 --> 00:01:13,710 -has an algorithm that looks at the nodes in the system - -24 -00:01:13,710 --> 00:01:15,880 -and decides whether a node can be a super node or - -25 -00:01:15,880 --> 00:01:18,932 -not based on its characteristics. So now that we've discussed - -26 -00:01:18,932 --> 00:01:22,040 -super nodes, let's see what will happen if peer two wanted - -27 -00:01:22,040 --> 00:01:25,091 -to communicate with peer three. So let's represent this by - -28 -00:01:25,091 --> 00:01:27,956 -creating a dashed line between peer two and peer three. In - -29 -00:01:27,956 --> 00:01:30,980 -this case, peer two will contact this super node, which - -30 -00:01:30,980 --> 00:01:33,750 -is super node A. And super node A, based on its - -31 -00:01:33,750 --> 00:01:36,570 -knowledge of the Skype network and the position of the super - -32 -00:01:36,570 --> 00:01:40,930 -nodes, will contact and route the communication through super node C, - -33 -00:01:40,930 --> 00:01:44,100 -which will in turn route the communication to peer three. - -34 -00:01:44,100 --> 00:01:46,620 -And in that way peer two and peer three will be - -35 -00:01:46,620 --> 00:01:50,740 -able to communicate with each other. And this will happen just - -36 -00:01:50,740 --> 00:01:53,970 -as if peer two and peer three were connected directly, as - -37 -00:01:53,970 --> 00:01:57,760 -peers, even though the communication goes through two super nodes. Another - -38 -00:01:57,760 --> 00:02:00,470 -thing that is important to know about the behavior of Skype - -39 -00:02:00,470 --> 00:02:03,760 -is that, if the link between super nodes A and C - -40 -00:02:03,760 --> 00:02:05,950 -were to go down. So let's assume that there is a - -41 -00:02:05,950 --> 00:02:10,840 -problem with this link, then Skype will automatically, or automagically - -42 -00:02:10,840 --> 00:02:14,550 -reroute the communication through super node B, which will in - -43 -00:02:14,550 --> 00:02:17,950 -turn reroute it super node C, which will again reroute - -44 -00:02:17,950 --> 00:02:20,020 -to peer three. So peer two and three will still - -45 -00:02:20,020 --> 00:02:22,550 -be connected, but this time they will be going through - -46 -00:02:22,550 --> 00:02:25,620 -three super nodes. And just in case you wondered, this - -47 -00:02:25,620 --> 00:02:28,620 -is exactly what happens when you are talking over Skype. - -48 -00:02:28,620 --> 00:02:31,790 -The quality of the communication degrades, and you are reconnected. - -49 -00:02:31,790 --> 00:02:34,880 -So there is this rerouting going on through different nodes. So - -50 -00:02:34,880 --> 00:02:37,640 -although this architecture is more effective than the Napster's one, it - -51 -00:02:37,640 --> 00:02:40,640 -is not without problems. For example, you might remember that a - -52 -00:02:40,640 --> 00:02:44,640 -few years ago, Skype went down for about 36 hours. And - -53 -00:02:44,640 --> 00:02:47,880 -later on it was discovered that the cause was the algorithm - -54 -00:02:47,880 --> 00:02:51,460 -used by Skype to determine which nodes could be super nodes. - -55 -00:02:51,460 --> 00:02:54,330 -And remember, as I said, that one requirement for these nodes - -56 -00:02:54,330 --> 00:02:57,130 -is that have to up all the time. So what happened - -57 -00:02:57,130 --> 00:03:00,420 -is most of the super nodes were running on Windows machines, - -58 -00:03:00,420 --> 00:03:03,820 -and Microsoft pushed a critical patch that required a reboot to - -59 -00:03:03,820 --> 00:03:06,860 -be installed. So a large number of machines, and therefore a - -60 -00:03:06,860 --> 00:03:10,150 -large number of super nodes were down roughly at the same - -61 -00:03:10,150 --> 00:03:13,980 -time throughout the globe. And Skype's algorithm for determining super nodes - -62 -00:03:13,980 --> 00:03:17,230 -didn't have enough nodes to work with. So the whole system - -63 -00:03:17,230 --> 00:03:19,790 -crashed and burned. So the message I want to give here, - -64 -00:03:19,790 --> 00:03:22,340 -is that when you have a large peer to peer distributed - -65 -00:03:22,340 --> 00:03:24,650 -system, such as this one, such as Skype, - -66 -00:03:24,650 --> 00:03:27,200 -these kind of perfect storms can happen. Because you - -67 -00:03:27,200 --> 00:03:29,560 -are not really in control. Because the control - -68 -00:03:29,560 --> 00:03:33,170 -is distributed. So the algorithms become more complex. So - -69 -00:03:33,170 --> 00:03:35,140 -to wrap up our Skype example, in case - -70 -00:03:35,140 --> 00:03:37,280 -you are interested, Skype then fixed the issue by - -71 -00:03:37,280 --> 00:03:39,950 -changing the algorithm for identifying super nodes. And - -72 -00:03:39,950 --> 00:03:44,084 -more recently actually, Skype ditched peer-to-peer super nodes altogether. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/27 - Takeaway Message - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/27 - Takeaway Message - lang_en_vs5.srt deleted file mode 100644 index 9cd15c3..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/27 - Takeaway Message - lang_en_vs5.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,620 -And I want to conclude this lesson with three takeaway - -2 -00:00:02,620 --> 00:00:06,190 -messages. The first one is that having an effective architecture is - -3 -00:00:06,190 --> 00:00:09,450 -fundamental in a software project. Or as I say here, - -4 -00:00:09,450 --> 00:00:13,050 -a great architecture is a ticket to a successful project. To - -5 -00:00:13,050 --> 00:00:15,290 -put it in a different way, although a great architecture - -6 -00:00:15,290 --> 00:00:17,940 -does not guarantee that your project will be successful, having a - -7 -00:00:17,940 --> 00:00:21,930 -poor architecture will make it much more difficult for your project - -8 -00:00:21,930 --> 00:00:25,280 -to be successful. The second message is that an architecture cannot - -9 -00:00:25,280 --> 00:00:28,120 -come about in a vacuum. You need to understand - -10 -00:00:28,120 --> 00:00:30,550 -the domain of the problem that you're trying to solve - -11 -00:00:30,550 --> 00:00:33,480 -in order to define an architectural solution that fits the - -12 -00:00:33,480 --> 00:00:37,220 -characteristics of the problem. So a great architecture reflects a - -13 -00:00:37,220 --> 00:00:40,500 -deep understanding of the problem domain. And finally, a great - -14 -00:00:40,500 --> 00:00:44,630 -architecture is likely to combine aspects of several simpler architectures. - -15 -00:00:44,630 --> 00:00:47,880 -It is typical for engineers to see problems that are - -16 -00:00:47,880 --> 00:00:50,590 -new, but such that parts of the problems have already - -17 -00:00:50,590 --> 00:00:53,540 -been solved by someone else. An effective engineer should - -18 -00:00:53,540 --> 00:00:56,270 -therefore, first of all, know what is out there, - -19 -00:00:56,270 --> 00:00:59,760 -know the solution space. Second, an engineer should understand - -20 -00:00:59,760 --> 00:01:02,420 -what has worked well and what has failed miserably in - -21 -00:01:02,420 --> 00:01:05,870 -similar occasions in the past. And finally, an effective - -22 -00:01:05,870 --> 00:01:10,100 -engineer should be able to suitably combine existing solutions appropriately - -23 -00:01:10,100 --> 00:01:12,870 -to come up with an effective overall solution for - -24 -00:01:12,870 --> 00:01:15,750 -the specific problem at hand. And this is just as - -25 -00:01:15,750 --> 00:01:18,960 -true in the context of software architectures. When defining a software - -26 -00:01:18,960 --> 00:01:22,330 -architecture, you should innovate only as much as you need to and - -27 -00:01:22,330 --> 00:01:24,850 -reuse as much as you can. As we said early in the - -28 -00:01:24,850 --> 00:01:27,770 -lesson, by doing so, that is, by innovating only as much as - -29 -00:01:27,770 --> 00:01:30,100 -you need to and reusing as much as you can, you will - -30 -00:01:30,100 --> 00:01:32,960 -be able to avoid reinventing the wheel. You will be able to - -31 -00:01:32,960 --> 00:01:37,320 -choose the right solution to known problems. And identify suitable solutions for - -32 -00:01:37,320 --> 00:01:40,925 -new problems. So ultimately, you will be able to realize an effective - -33 -00:01:40,925 --> 00:01:44,080 -software architecture that will help the success of your project. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/3 - What is Software Architecture? - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/3 - What is Software Architecture? - lang_en_vs6.srt deleted file mode 100644 index 8689e43..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/3 - What is Software Architecture? - lang_en_vs6.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,460 -After this interesting conversation with Neno, let me start - -2 -00:00:02,460 --> 00:00:06,060 -the lesson by defining what a software architecture is. - -3 -00:00:06,060 --> 00:00:07,600 -And to do that, I'm going to use two - -4 -00:00:07,600 --> 00:00:11,030 -seminal definitions. The first one is from Dewayne Perry - -5 -00:00:11,030 --> 00:00:13,990 -and Alex Wolf. And they define a software architecture - -6 -00:00:13,990 --> 00:00:17,940 -as elements, form and rationale. In this definition, the - -7 -00:00:17,940 --> 00:00:21,300 -elements are the what, which means the processes, data, - -8 -00:00:21,300 --> 00:00:25,430 -and connectors that compose a software architecture. The form - -9 -00:00:25,430 --> 00:00:27,780 -is the how, the set of properties of - -10 -00:00:27,780 --> 00:00:32,030 -in relationships among these elements. And, finally, the rationale - -11 -00:00:32,030 --> 00:00:35,390 -is the why, the justification for the elements and - -12 -00:00:35,390 --> 00:00:38,440 -their relationships. The second definition I want to use - -13 -00:00:38,440 --> 00:00:40,710 -is from Mary Shaw and David Garland. And - -14 -00:00:40,710 --> 00:00:43,480 -they defined a software architecture as a level of - -15 -00:00:43,480 --> 00:00:47,300 -design that involves four main things, a description of - -16 -00:00:47,300 --> 00:00:50,860 -elements from which these systems are built, the interactions - -17 -00:00:50,860 --> 00:00:54,800 -among those elements, the patterns that guide their composition, and - -18 -00:00:54,800 --> 00:00:58,320 -finally, the constraints on these patterns. As you can see, these - -19 -00:00:58,320 --> 00:01:01,420 -definitions are fairly similar and there are many more alternative - -20 -00:01:01,420 --> 00:01:04,870 -definitions of software architecture. In fact, if we try to search - -21 -00:01:04,870 --> 00:01:08,540 -the term software architecture, we get over two million entries. - -22 -00:01:08,540 --> 00:01:10,670 -And if we look at the images in the results of - -23 -00:01:10,670 --> 00:01:13,110 -the search this is what we get. And I like this - -24 -00:01:13,110 --> 00:01:16,120 -sort of graphical depiction because it gives you a clear idea - -25 -00:01:16,120 --> 00:01:19,300 -the software architecture are prevalent concept, given the number of - -26 -00:01:19,300 --> 00:01:22,600 -results. But they also show you clearly, that software architecture are - -27 -00:01:22,600 --> 00:01:25,550 -complex entities, if you look at some of these pictures. - -28 -00:01:25,550 --> 00:01:28,930 -And ultimately, they show that software architecture are presented in all - -29 -00:01:28,930 --> 00:01:31,700 -kinds of ways including in 3D, if you look at this - -30 -00:01:31,700 --> 00:01:34,970 -picture. We cannot clearly cover all of these definitions in one - -31 -00:01:34,970 --> 00:01:37,340 -lesson. So what I will do instead, is to introduce - -32 -00:01:37,340 --> 00:01:40,750 -a very general definition that encompasses most of the existing ones. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/4 - General Definition of SWA - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/4 - General Definition of SWA - lang_en_vs6.srt deleted file mode 100644 index 13042a7..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/4 - General Definition of SWA - lang_en_vs6.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,240 -I'm going to define a software systems architecture as - -2 -00:00:03,240 --> 00:00:07,660 -the set of principal design decisions about the system. Where - -3 -00:00:07,660 --> 00:00:10,950 -principal here, implies a degree of importance, that grants - -4 -00:00:10,950 --> 00:00:14,810 -a design decision architectural status. And the point here, as - -5 -00:00:14,810 --> 00:00:17,060 -we discussed with Neno early on, is that when - -6 -00:00:17,060 --> 00:00:20,210 -building a system, we make tons of design decisions, and - -7 -00:00:20,210 --> 00:00:22,470 -most of them do not affect the architecture of - -8 -00:00:22,470 --> 00:00:25,270 -the system. For example, the effect of choosing a for - -9 -00:00:25,270 --> 00:00:27,640 -loop, instead of a while loop, in the code, or the - -10 -00:00:27,640 --> 00:00:30,140 -fact of deciding that we are going to use data structure A - -11 -00:00:30,140 --> 00:00:33,620 -instead of data structure B. Some decisions however, do affect the - -12 -00:00:33,620 --> 00:00:37,470 -architecture of the system. And in some cases the distinction between these - -13 -00:00:37,470 --> 00:00:40,600 -two kinds of design decisions is clear. In some other cases - -14 -00:00:40,600 --> 00:00:43,340 -it is much fuzzier and it depends on the context. The - -15 -00:00:43,340 --> 00:00:46,000 -bottom line here, is that if you believe that something is - -16 -00:00:46,000 --> 00:00:50,380 -an important design decision, that becomes an architectural decision. That is a - -17 -00:00:50,380 --> 00:00:53,960 -decision that impacts a system's architecture. In this spirit, - -18 -00:00:53,960 --> 00:00:56,650 -we can see a software architecture as the blueprint - -19 -00:00:56,650 --> 00:00:58,390 -for a software system, that we can use to - -20 -00:00:58,390 --> 00:01:01,320 -construct and evolve the system. And the key point - -21 -00:01:01,320 --> 00:01:05,300 -about software architecture is that this blueprint encompasses every - -22 -00:01:05,300 --> 00:01:08,600 -facet of the system under development. It encompasses its - -23 -00:01:08,600 --> 00:01:11,540 -structure, of course, but not only. It also involves - -24 -00:01:11,540 --> 00:01:15,420 -the behavior of the system, the interactions within the system, - -25 -00:01:15,420 --> 00:01:18,880 -and the non-functional properties of the system. And we will see - -26 -00:01:18,880 --> 00:01:21,960 -how this happens in the rest of the lesson. Another important - -27 -00:01:21,960 --> 00:01:25,590 -point about software architecture is that there is a temporal aspect - -28 -00:01:25,590 --> 00:01:27,570 -to it. And the point here is that you don't build the - -29 -00:01:27,570 --> 00:01:30,660 -software architecture in a single shot, but you do it iteratively, - -30 -00:01:30,660 --> 00:01:34,100 -over time. So, basically, you go from having no architecture to - -31 -00:01:34,100 --> 00:01:37,330 -your final architecture. So, at any point in time, there is - -32 -00:01:37,330 --> 00:01:40,550 -a software architecture, but it will change over time. And this happens - -33 -00:01:40,550 --> 00:01:44,780 -because design decisions are made, unmade and changed over a system's lifetime. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/5 - Prescriptive vs Descriptive Architecture - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/5 - Prescriptive vs Descriptive Architecture - lang_en_vs5.srt deleted file mode 100644 index 11ecd46..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/5 - Prescriptive vs Descriptive Architecture - lang_en_vs5.srt +++ /dev/null @@ -1,51 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,200 -We can look at the software architecture from two - -2 -00:00:02,200 --> 00:00:07,120 -main standpoints. There are prescriptive and descriptive software architectures. - -3 -00:00:07,120 --> 00:00:09,900 -So what does that mean? A prescriptive architecture captures - -4 -00:00:09,900 --> 00:00:12,620 -the design decisions that are made prior to the - -5 -00:00:12,620 --> 00:00:15,398 -system's construction. This is what we normally call the - -6 -00:00:15,398 --> 00:00:18,280 -as-conceived software architecture. Conversely, - -7 -00:00:18,280 --> 00:00:20,550 -a descriptive architecture describes how - -8 -00:00:20,550 --> 00:00:23,010 -the system has actually been built. So it's based - -9 -00:00:23,010 --> 00:00:25,860 -on observing the system as it is and extracting - -10 -00:00:25,860 --> 00:00:28,200 -the architecture from the observation. This is what we call - -11 -00:00:28,200 --> 00:00:31,890 -the as-implemented software architecture. And one key point here is - -12 -00:00:31,890 --> 00:00:35,780 -that often, these two architectures, the prescriptive and the descriptive - -13 -00:00:35,780 --> 00:00:39,290 -architectures end up being different. So let's see why that happens. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/6 - Architectural Evolution - lang_en_vs5.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/6 - Architectural Evolution - lang_en_vs5.srt deleted file mode 100644 index edcf77e..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/6 - Architectural Evolution - lang_en_vs5.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,810 -To do that let's look at how architectural evolution - -2 -00:00:02,810 --> 00:00:06,880 -occurs in practice. Ideally when a system evolves, its prescriptive - -3 -00:00:06,880 --> 00:00:09,340 -architecture should be modified first. Just like when you - -4 -00:00:09,340 --> 00:00:12,170 -modify a building. You change the blueprint and then you - -5 -00:00:12,170 --> 00:00:13,940 -change the actual building. You don't go the other - -6 -00:00:13,940 --> 00:00:17,820 -way around. In software, unfortunately this rarely ever happens in - -7 -00:00:17,820 --> 00:00:21,706 -practice. In practice the system, and therefore it's descriptive - -8 -00:00:21,706 --> 00:00:25,150 -architecture are often directly modified. Like in this case that - -9 -00:00:25,150 --> 00:00:27,870 -I'm showing here. So what happens is that the architecture - -10 -00:00:27,870 --> 00:00:32,259 -as conceived does not change. Whereas the architecture as implemented, does - -11 -00:00:32,259 --> 00:00:35,600 -change. And therefore these two things start diverging. And this really - -12 -00:00:35,600 --> 00:00:38,720 -happens for a number of reasons. So I'm just going to list - -13 -00:00:38,720 --> 00:00:41,740 -a few of those reasons here. In some cases it - -14 -00:00:41,740 --> 00:00:45,620 -just happens for plain sloppiness. I need to make this modification - -15 -00:00:45,620 --> 00:00:47,290 -and I don't really want to go back and look at - -16 -00:00:47,290 --> 00:00:50,610 -the prescriptive architecture modified. I'm just going to make the change, and - -17 -00:00:50,610 --> 00:00:53,800 -maybe I'll fix the description later. And then you never really get - -18 -00:00:53,800 --> 00:00:56,950 -to it. In other cases you do this because of the perception - -19 -00:00:56,950 --> 00:01:00,290 -of short deadlines. If you have to do something by this afternoon, - -20 -00:01:00,290 --> 00:01:01,300 -you're not going through a four - -21 -00:01:01,300 --> 00:01:03,410 -month software architecture review, you normally just - -22 -00:01:03,410 --> 00:01:06,460 -get to it, and do it. In some cases a prescriptive architecture - -23 -00:01:06,460 --> 00:01:09,510 -is not even present, so there's a lack of documentation. So in these - -24 -00:01:09,510 --> 00:01:12,450 -cases, clearly, you cannot go and modify something that does not even - -25 -00:01:12,450 --> 00:01:15,880 -exist, and so you jump directly to the code and start modifying that. - -26 -00:01:15,880 --> 00:01:18,280 -And as I said there's many, many more - -27 -00:01:18,280 --> 00:01:21,080 -other reasons why that happen. But important point here is - -28 -00:01:21,080 --> 00:01:23,770 -that it does happen and it does happen often - -29 -00:01:23,770 --> 00:01:27,250 -and the result is that prescriptive and descriptive architectures diverge. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/7 - Architectural Degradation - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/7 - Architectural Degradation - lang_en_vs6.srt deleted file mode 100644 index 2313f82..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/7 - Architectural Degradation - lang_en_vs6.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,790 -And there are two important and related concepts that - -2 -00:00:02,790 --> 00:00:04,790 -have to do with the way software architecture - -3 -00:00:04,790 --> 00:00:08,109 -evolves. The first one is Architectural Drift, which is - -4 -00:00:08,109 --> 00:00:12,140 -the introduction of architectural design decisions that are orthogonal to - -5 -00:00:12,140 --> 00:00:15,870 -a system's prescriptive architecture. That is, they're not included - -6 -00:00:15,870 --> 00:00:20,080 -in, encompassed by, or implied by the prescriptive architecture. - -7 -00:00:20,080 --> 00:00:22,300 -And the result of Architectural Drift is that you - -8 -00:00:22,300 --> 00:00:25,220 -start from a clean architecture, like the one that I'm - -9 -00:00:25,220 --> 00:00:28,830 -showing here, and then you start adding pieces without following a clear plan. - -10 -00:00:28,830 --> 00:00:32,229 -Like, for example, here, we add an additional room here, but we don't really - -11 -00:00:32,229 --> 00:00:34,380 -do it in the right way so we need to add something else - -12 -00:00:34,380 --> 00:00:37,090 -to keep it stable. And then maybe we want some more room so we - -13 -00:00:37,090 --> 00:00:40,310 -add a tent. And then another side of the house, it doesn't really - -14 -00:00:40,310 --> 00:00:43,540 -follow the same architecture but it doesn't matter, we just put it there because - -15 -00:00:43,540 --> 00:00:46,690 -we want to expand. And maybe then we want to put something classic - -16 -00:00:46,690 --> 00:00:48,210 -there, even though it doesn't really fit - -17 -00:00:48,210 --> 00:00:50,520 -the overall design and the overall architecture. - -18 -00:00:50,520 --> 00:00:52,160 -So I think you get my point, the fact - -19 -00:00:52,160 --> 00:00:56,210 -that the architecture then becomes unnecessarily complex, hard to understand - -20 -00:00:56,210 --> 00:00:58,410 -and ultimately awkward, just like the one that I'm - -21 -00:00:58,410 --> 00:01:00,880 -showing here, that goes from the original building into this - -22 -00:01:00,880 --> 00:01:04,870 -final monstrosity. The second concept is Architectural Erosion, which - -23 -00:01:04,870 --> 00:01:08,560 -is the introduction of architectural design decisions that violate a - -24 -00:01:08,560 --> 00:01:12,070 -system prescriptive architecture. So in this case, that we were - -25 -00:01:12,070 --> 00:01:14,070 -introducing decisions that were orthogonal, - -26 -00:01:14,070 --> 00:01:15,580 -here, were introducing this decisions - -27 -00:01:15,580 --> 00:01:17,410 -that don't comply with the prescriptive - -28 -00:01:17,410 --> 00:01:20,140 -architecture. And the result of Architectural Erosion - -29 -00:01:20,140 --> 00:01:22,590 -is typically a poor architecture an - -30 -00:01:22,590 --> 00:01:24,550 -architecture that is going to have problems in - -31 -00:01:24,550 --> 00:01:27,040 -the future. So both Architectural Drift - -32 -00:01:27,040 --> 00:01:29,640 -and Architectural Erosion take you away in - -33 -00:01:29,640 --> 00:01:32,940 -different ways from what you think your software architecture is or should be. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/8 - Architectural Recovery - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/8 - Architectural Recovery - lang_en_vs4.srt deleted file mode 100644 index 6104ae0..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/8 - Architectural Recovery - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,180 --> 00:00:03,560 -And sometimes, architectural drift and erosion gets you so - -2 -00:00:03,560 --> 00:00:06,450 -far away from the point where your software architecture should - -3 -00:00:06,450 --> 00:00:10,476 -be, that your architecture is completely degraded. And at this - -4 -00:00:10,476 --> 00:00:13,290 -point, you have two main options. The first option is - -5 -00:00:13,290 --> 00:00:17,140 -to keep frantically tweaking the code. And this normally leads - -6 -00:00:17,140 --> 00:00:20,370 -to disaster. Why? Because you only make things worse. You - -7 -00:00:20,370 --> 00:00:22,570 -don't know exactly what you are changing and therefore, you're - -8 -00:00:22,570 --> 00:00:25,570 -basically stabbing in the dark, trying to fix your system. - -9 -00:00:25,570 --> 00:00:27,580 -The other possiblity is that you can try to - -10 -00:00:27,580 --> 00:00:29,830 -determine the software system architecture - -11 -00:00:29,830 --> 00:00:31,710 -from its implementation level artifacts, - -12 -00:00:31,710 --> 00:00:34,520 -so you try to derive what the architecture is - -13 -00:00:34,520 --> 00:00:36,610 -and try to fix it, once you have derived the - -14 -00:00:36,610 --> 00:00:39,266 -architecture. And this is what is normally called, architectural - -15 -00:00:39,266 --> 00:00:44,210 -recovery, determining a software architecture from an implementation and fixing - -16 -00:00:44,210 --> 00:00:46,410 -it. And as you can imagine, this is normally - -17 -00:00:46,410 --> 00:00:49,330 -a more recommended way to go than the first solution. diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/9 - Architectural Recovery Quiz - lang_en_vs4.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/9 - Architectural Recovery Quiz - lang_en_vs4.srt deleted file mode 100644 index 0750374..0000000 --- a/usth/ICT2.7/P3L1 Software Architecture Subtitles/9 - Architectural Recovery Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,070 -Now that we discussed some important concepts about - -2 -00:00:03,070 --> 00:00:05,060 -software architectures, I would like for you to - -3 -00:00:05,060 --> 00:00:07,290 -tell me which of the following sentences is - -4 -00:00:07,290 --> 00:00:11,420 -true. Prescriptive architecture and descriptive architecture are typically the - -5 -00:00:11,420 --> 00:00:15,970 -same. Architectural drift results in unnecessarily complex architectures. - -6 -00:00:15,970 --> 00:00:20,320 -Architectural erosion is less problematic than architectural drift. And - -7 -00:00:20,320 --> 00:00:22,660 -the best way to improve a degraded architecture, - -8 -00:00:22,660 --> 00:00:25,250 -is to keep fixing the code until the system - -9 -00:00:25,250 --> 00:00:29,270 -starts looking and behaving as expected. Which of these sentences is true? diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/1 - Introduction - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/1 - Introduction - lang_en.srt deleted file mode 100644 index f6386ed..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/1 - Introduction - lang_en.srt +++ /dev/null @@ -1,88 +0,0 @@ -1 -00:00:00,430 --> 00:00:05,994 -Hello and welcome to a tale of analysis and design, featuring - -2 -00:00:05,994 --> 00:00:10,809 -Spencer Rugaber, as the librarian, and Alex Orso, - -3 -00:00:10,809 --> 00:00:15,779 -as the software engineer. [SOUND] - -4 -00:00:15,779 --> 00:00:21,520 ->> Hi! I'm here waiting for Spencer, my librarian friend. He needs some - -5 -00:00:21,520 --> 00:00:25,470 -help developing an information system for a library. So I asked him to write - -6 -00:00:25,470 --> 00:00:29,669 -down the requirements for the libra... Oh, [SOUND] that must be him. - -7 -00:00:29,669 --> 00:00:30,850 ->> Hello Alex. - -8 -00:00:30,850 --> 00:00:32,470 ->> Hey Spencer. How's it going? - -9 -00:00:32,470 --> 00:00:34,690 ->> Good. Did you get those requirements I emailed you? - -10 -00:00:34,690 --> 00:00:36,890 ->> Oh, you emailed them. Now let me check. - -11 -00:00:36,890 --> 00:00:38,780 -And, by the way, get some coffee for you here. - -12 -00:00:38,780 --> 00:00:39,880 ->> Thank you very much. - -13 -00:00:41,840 --> 00:00:46,790 ->> Oh yeah. They're right here. Let me see. Oh, good. Oh, yeah, - -14 -00:00:46,790 --> 00:00:50,580 -good. We have, what we need. So the, the way I like to do - -15 -00:00:50,580 --> 00:00:52,500 -this is. I like to start by - -16 -00:00:52,500 --> 00:00:55,430 -looking at the requirements and identifying the nouns - -17 -00:00:55,430 --> 00:00:57,530 -in the requirements, because those tell us - -18 -00:00:57,530 --> 00:01:00,080 -the kind of the relevant elements in the, - -19 -00:01:00,080 --> 00:01:03,360 -in the requirements. So if you don't mind we can start looking at those and - -20 -00:01:03,360 --> 00:01:07,070 -you can tell me you know, whether the ones that I am identifying make sense or not. - -21 -00:01:07,070 --> 00:01:07,920 ->> Sounds good. - -22 -00:01:07,920 --> 00:01:08,500 ->> All right. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/10 - Debriefing - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/10 - Debriefing - lang_en.srt deleted file mode 100644 index cc76d09..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/10 - Debriefing - lang_en.srt +++ /dev/null @@ -1,104 +0,0 @@ -1 -00:00:00,210 --> 00:00:02,200 ->> So Spencer, now that we went through - -2 -00:00:02,200 --> 00:00:05,340 -this process and, I'd just like to hear - -3 -00:00:05,340 --> 00:00:07,090 -whether you enjoyed it, whether you think it - -4 -00:00:07,090 --> 00:00:09,640 -was useful. What are your thoughts? - -5 -00:00:09,640 --> 00:00:11,661 ->> Well, ti was very interesting. I not only - -6 -00:00:11,661 --> 00:00:16,541 -learned something about computers and about how you design information systems - -7 -00:00:16,541 --> 00:00:19,713 -in UML, but I, it was interesting. I also learned something - -8 -00:00:19,713 --> 00:00:25,290 -interesting about the library. And things that, that I knew but - -9 -00:00:25,290 --> 00:00:27,920 -I never really, explicitly written down. - -10 -00:00:27,920 --> 00:00:28,099 ->> Uh-huh. - -11 -00:00:28,099 --> 00:00:32,280 ->> Came up during the course of doing this. And I think I now - -12 -00:00:32,280 --> 00:00:35,800 -much better understand what this information system that you're - -13 -00:00:35,800 --> 00:00:38,590 -going to build for us, is really all about. - -14 -00:00:38,590 --> 00:00:40,480 ->> Okay, well, I mean, I'm very happy that you say - -15 -00:00:40,480 --> 00:00:43,040 -that, because I really believe that, you know, doing this kind - -16 -00:00:43,040 --> 00:00:46,870 -of analysis and design exercises really helps you figuring out whether - -17 -00:00:46,870 --> 00:00:50,480 -there's any issues with the requirements. So for example, you can find - -18 -00:00:50,480 --> 00:00:53,580 -out whether there's any missing information, or maybe conflicting - -19 -00:00:53,580 --> 00:00:56,820 -information. And I think that's exactly what happened today. - -20 -00:00:56,820 --> 00:01:01,120 -So I'm very glad to hear that it worked for you. That you enjoyed it. I hope you - -21 -00:01:01,120 --> 00:01:03,690 -enjoyed it as well. And I strongly encourage you - -22 -00:01:03,690 --> 00:01:06,000 -to do this kind of exercises for different kinds - -23 -00:01:06,000 --> 00:01:08,630 -of systems. So as you can become more familiar - -24 -00:01:08,630 --> 00:01:12,410 -with analysis and design techniques. So, any final thoughts? - -25 -00:01:12,410 --> 00:01:15,440 ->> I look forward to receiving your delivered software. - -26 -00:01:15,440 --> 00:01:16,440 ->> All right. Will do. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/2 - Analyzing Requirements - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/2 - Analyzing Requirements - lang_en.srt deleted file mode 100644 index 909fb2d..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/2 - Analyzing Requirements - lang_en.srt +++ /dev/null @@ -1,579 +0,0 @@ -1 -00:00:00,220 --> 00:00:04,900 -Okay so let me start underlining these nouns, and I'll start - -2 -00:00:04,900 --> 00:00:07,810 -identifying the ones that are relevant, and I'll ask you some - -3 -00:00:07,810 --> 00:00:10,550 -questions or you can ask me questions if - -4 -00:00:10,550 --> 00:00:14,666 -you see something that doesn't make sense to you. Good enough. - -5 -00:00:14,666 --> 00:00:17,650 ->> okay, let's see, patron. It seems to - -6 -00:00:17,650 --> 00:00:19,670 -me that patron is definitely an important entity. - -7 -00:00:19,670 --> 00:00:20,808 ->> That's, that's what its all about. - -8 -00:00:20,808 --> 00:00:23,270 ->> Okay, all right, so actually, the way - -9 -00:00:23,270 --> 00:00:25,750 -I'm going to do this, I'm going to take all these relevant - -10 -00:00:25,750 --> 00:00:28,610 -entities and I'm going to start putting them into what I call a class - -11 -00:00:28,610 --> 00:00:32,450 -diagram. So you don't really need to know what that is exactly, but imagine - -12 -00:00:32,450 --> 00:00:37,150 -this being a, a diagram in which I'm drawing, I represent in all development - -13 -00:00:37,150 --> 00:00:42,260 -items as rectangles with a given name and, and then later on some attributes. - -14 -00:00:42,260 --> 00:00:42,660 ->> Okay. - -15 -00:00:42,660 --> 00:00:44,055 ->> Okay, and I'm, I'm just going to put - -16 -00:00:44,055 --> 00:00:45,600 -them there. So I'm going to start with patron. - -17 -00:00:45,600 --> 00:00:48,420 -I'm going to create one class for the - -18 -00:00:48,420 --> 00:00:50,250 -patron. I'm going to give it the name patron. - -19 -00:00:51,380 --> 00:00:54,120 -And by the way, assuming that you'd probably figure out, it's important that we - -20 -00:00:54,120 --> 00:00:57,430 -represent, we use the right names so that it's clear when we're looking at - -21 -00:00:57,430 --> 00:01:00,790 -the class diagram what we're referring to, so I'll just use the, the nouns - -22 -00:01:00,790 --> 00:01:06,520 -themselves as names. Okay, library card seems to be also a relevant element. - -23 -00:01:06,520 --> 00:01:08,072 ->> Every patron has a library card. - -24 -00:01:08,072 --> 00:01:09,530 ->> All right, perfect, so we'll just - -25 -00:01:09,530 --> 00:01:12,880 -create a library card here. And let's see. - -26 -00:01:12,880 --> 00:01:16,530 -As, as long as they're in the system. And I saw that there's a system - -27 -00:01:16,530 --> 00:01:19,000 -here, this concept of system, this concept - -28 -00:01:19,000 --> 00:01:22,076 -of library. And based on my experience, normally, - -29 -00:01:22,076 --> 00:01:26,574 -those are kind of in an overarching themes. So this is really what we are - -30 -00:01:26,574 --> 00:01:28,597 -modeling. So the only - -31 -00:01:28,597 --> 00:01:30,297 -thing that will make a difference is - -32 -00:01:30,297 --> 00:01:34,120 -if there were more than one library or more than one system. Is that the case? - -33 -00:01:34,120 --> 00:01:36,740 ->> We just want one system for our one library - -34 -00:01:36,740 --> 00:01:38,770 ->> Okay so, in this case I won't even represent - -35 -00:01:38,770 --> 00:01:41,540 -those because basically what I'm representing is the system and - -36 -00:01:41,540 --> 00:01:41,990 -the library. - -37 -00:01:41,990 --> 00:01:42,740 ->> I understand, I understand. - -38 -00:01:42,740 --> 00:01:44,420 - -39 -00:01:44,420 --> 00:01:48,350 -Okay and then, oh name, address and phone - -40 -00:01:48,350 --> 00:01:51,510 -number are interesting because these are important entities, - -41 -00:01:51,510 --> 00:01:53,180 -but this seems like, you know, they're not - -42 -00:01:53,180 --> 00:01:56,550 -entities in themselves, so they're more attributes - -43 -00:01:56,550 --> 00:01:58,070 -of something else. I would imagine that - -44 -00:01:58,070 --> 00:02:00,080 -this is the way you identify, or these - -45 -00:02:00,080 --> 00:02:01,860 -are elements that are important for the patron? - -46 -00:02:01,860 --> 00:02:04,880 ->> That's what we take down when we issue the cards. - -47 -00:02:04,880 --> 00:02:06,800 ->> Okay. Perfect. So, I'm going to - -48 -00:02:06,800 --> 00:02:09,710 -take those and make those attributes of the patron, which means - -49 -00:02:09,710 --> 00:02:12,350 -that I'm going to take the class that I created before, and I'm - -50 -00:02:12,350 --> 00:02:16,430 -just going to write them down here so that they're represented and, - -51 -00:02:16,430 --> 00:02:19,360 -and we know that these are kind of what characterizes the patron. - -52 -00:02:19,360 --> 00:02:20,070 ->> Gotcha. - -53 -00:02:20,070 --> 00:02:25,540 ->> Okay? And then, I guess similar consideration for the library - -54 -00:02:25,540 --> 00:02:28,750 -card number. So this is to be associated with the library card? - -55 -00:02:28,750 --> 00:02:29,902 ->> It's printed right on it. - -56 -00:02:29,902 --> 00:02:32,180 ->> All right, so we'll put this as - -57 -00:02:32,180 --> 00:02:38,130 -an attribute of the library card, then. And then, in addition, at any particular point - -58 -00:02:38,130 --> 00:02:43,630 -in time. Okay, so time seems to be a relevant entity right, - -59 -00:02:43,630 --> 00:02:47,880 -because time seems to occur several times in this description. For example, I - -60 -00:02:47,880 --> 00:02:53,940 -think you guys keep track of how long a book has been loaned, right? - -61 -00:02:53,940 --> 00:02:54,300 ->> Right. - -62 -00:02:54,300 --> 00:02:57,270 ->> And there's some time associated also here. - -63 -00:02:57,270 --> 00:02:58,380 ->> And a children's age. - -64 -00:02:58,380 --> 00:02:59,760 ->> Oh yeah. The children's age here that - -65 -00:02:59,760 --> 00:03:02,200 -I didn't see before. Yeah. So, what - -66 -00:03:02,200 --> 00:03:03,800 -I'm going to do, I'm going to represent this in - -67 -00:03:03,800 --> 00:03:05,520 -a sort of generic way, as a date. - -68 -00:03:05,520 --> 00:03:06,520 ->> Okay. - -69 -00:03:06,520 --> 00:03:08,380 ->> These are kind of, kind of classes, utility - -70 -00:03:08,380 --> 00:03:10,880 -classes we call them, that are normally in every system. - -71 -00:03:10,880 --> 00:03:10,970 ->> Okay. - -72 -00:03:10,970 --> 00:03:13,060 ->> So I'm just going to put it down here - -73 -00:03:13,060 --> 00:03:14,940 -as a utility class that will be used - -74 -00:03:14,940 --> 00:03:18,780 -by different elements in the diagram. Okay, so - -75 -00:03:18,780 --> 00:03:23,070 -I want to calculate the items. So the items also - -76 -00:03:23,070 --> 00:03:25,230 -I mean I for what I know about libraries they - -77 -00:03:25,230 --> 00:03:28,490 -seem to be pretty relevant elements, right? So these are all - -78 -00:03:28,490 --> 00:03:31,305 ->> This is what we check out, this is what we're for. - -79 -00:03:31,305 --> 00:03:34,459 ->> Okay, so then items definitely will become a - -80 -00:03:34,459 --> 00:03:37,349 -class, and then we have a due. Oh there's also - -81 -00:03:37,349 --> 00:03:39,730 -this concept of fines. I guess that seems to be - -82 -00:03:39,730 --> 00:03:42,330 -important. Right? You guys give fines to people who are late. - -83 -00:03:42,330 --> 00:03:42,700 ->> Right, right. - -84 -00:03:42,700 --> 00:03:49,160 ->> Right, collect fines and so on. So we create a fine class down here and - -85 -00:03:49,160 --> 00:03:54,150 -the children. So children are special customers, right? It's - -86 -00:03:55,240 --> 00:03:56,890 -their age makes a difference? Is that the way it works? - -87 -00:03:56,890 --> 00:03:58,950 ->> Right. They, they can only check out a few books. - -88 -00:03:58,950 --> 00:04:01,410 ->> Okay. So I'll create them a special - -89 -00:04:01,410 --> 00:04:03,170 -kind of case, a special kind of customer so - -90 -00:04:03,170 --> 00:04:06,000 -I just create here a class for children. And - -91 -00:04:06,000 --> 00:04:08,682 -I can see that they're categorized by their age. - -92 -00:04:08,682 --> 00:04:09,340 ->> Right. - -93 -00:04:09,340 --> 00:04:13,160 ->> So I'll just put the age here as an attribute of the child. - -94 -00:04:14,220 --> 00:04:15,712 -And, okay, so the next one is - -95 -00:04:15,712 --> 00:04:19,653 -restriction. And restriction is kind of tricky because just - -96 -00:04:19,653 --> 00:04:22,010 -to be sort of a general concept. I mean, - -97 -00:04:22,010 --> 00:04:24,915 -in a sense, all of those are restrictions, right? - -98 -00:04:24,915 --> 00:04:28,250 ->> Right, this is just another one of these requirements. - -99 -00:04:28,250 --> 00:04:31,180 ->> Oh, okay, so, so we don't need to represent it explicitly, right? - -100 -00:04:31,180 --> 00:04:31,430 ->> Right, right. - -101 -00:04:31,430 --> 00:04:34,390 ->> It's just telling us how the children, yeah, okay, right; this is - -102 -00:04:34,390 --> 00:04:39,151 -just another requirement, so I just won't consider that for now. And oh, - -103 -00:04:39,151 --> 00:04:43,444 -I see that these books and audio video materials, I guess these - -104 -00:04:43,444 --> 00:04:48,902 -are things that the patrons can check out, right? - -105 -00:04:48,902 --> 00:04:50,725 ->> Those are some of the items, right. - -106 -00:04:50,725 --> 00:04:53,770 ->> There are two - -107 -00:04:53,770 --> 00:04:56,380 -more down here, right? Reference books and magazines? - -108 -00:04:56,380 --> 00:04:57,990 ->> But, they can't be checked - -109 -00:04:57,990 --> 00:04:59,270 -out, but they're definitely in the library. - -110 -00:04:59,270 --> 00:05:01,338 ->> Okay, so then I'm going to represent all of those - -111 -00:05:01,338 --> 00:05:04,180 -actually, now. So, I'm going to have books, I'm going to have audio - -112 -00:05:04,180 --> 00:05:07,990 -video materials, reference books, and magazines. And - -113 -00:05:07,990 --> 00:05:12,150 -I'm just going to have those as classes. Then, - -114 -00:05:12,150 --> 00:05:14,060 -okay here we have week, and we - -115 -00:05:14,060 --> 00:05:16,630 -already represented this general concept of time, so - -116 -00:05:16,630 --> 00:05:23,270 -week will be represented by the date class as well. And oh, I see best sellers. - -117 -00:05:23,270 --> 00:05:27,520 -So best sellers are also, I guess, items that can be checked out, right? - -118 -00:05:27,520 --> 00:05:28,150 ->> Right. - -119 -00:05:28,150 --> 00:05:29,330 ->> Okay, so I'll - -120 -00:05:29,330 --> 00:05:32,900 -just represent those as a class as well and an additional item that - -121 -00:05:32,900 --> 00:05:38,480 -is relevant for the library. And the limit, this is also a time limit, right? - -122 -00:05:38,480 --> 00:05:39,150 ->> Right. - -123 -00:05:39,150 --> 00:05:41,500 ->> So it can also be represented with a, with a class. - -124 -00:05:43,860 --> 00:05:47,380 -Oh, here we have cents, and for cents, same consideration that made - -125 -00:05:47,380 --> 00:05:50,430 -for time. This is kind of the money, is a general concept - -126 -00:05:50,430 --> 00:05:54,240 -that in all currency, many, in many IT systems. So, I'm, I'm - -127 -00:05:54,240 --> 00:05:57,430 -going to just have a money class here, which is another utility class. - -128 -00:05:57,430 --> 00:05:57,740 ->> Okay - -129 -00:05:57,740 --> 00:06:04,000 ->> Okay, and, oh, here I have value, so value is a property. - -130 -00:06:04,000 --> 00:06:09,320 -Let me look again at the requirement. Oh, it's the value of the item. So value - -131 -00:06:09,320 --> 00:06:11,450 -I'm going to put in the item as an attribute. Okay? - -132 -00:06:11,450 --> 00:06:13,120 ->> Okay. That's how much it cost us. - -133 -00:06:13,120 --> 00:06:14,090 ->> Okay. Perfect. - -134 -00:06:14,090 --> 00:06:18,400 ->> Seems like we got them all. Right? Anything I forgot? - -135 -00:06:18,400 --> 00:06:19,640 ->> That looks like it. - -136 -00:06:19,640 --> 00:06:22,580 ->> Okay, so this one, what I'd like to do. We have a kind of - -137 -00:06:22,580 --> 00:06:26,890 -a first take, first cut at the class diagram. I'd like to kind of - -138 -00:06:26,890 --> 00:06:31,480 -move to that and go through the different classes with you. And I'll ask - -139 -00:06:31,480 --> 00:06:33,440 -you some questions again. And you can - -140 -00:06:33,440 --> 00:06:34,510 -tell me whether there is something that - -141 -00:06:34,510 --> 00:06:36,894 -jumps at you that's not right. And - -142 -00:06:36,894 --> 00:06:38,930 -then we're going to try to refine that. - -143 -00:06:38,930 --> 00:06:39,180 ->> Okay - -144 -00:06:39,180 --> 00:06:39,510 ->> Okay. - -145 -00:06:39,510 --> 00:06:39,800 ->> Sounds good. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/3 - Refining Classes and Attributes - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/3 - Refining Classes and Attributes - lang_en.srt deleted file mode 100644 index 271c2fd..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/3 - Refining Classes and Attributes - lang_en.srt +++ /dev/null @@ -1,535 +0,0 @@ -1 -00:00:00,880 --> 00:00:03,920 -Okay, so this is our first, class diagram. - -2 -00:00:03,920 --> 00:00:06,260 ->> So, let me ask you something about. - -3 -00:00:06,260 --> 00:00:06,520 ->> Okay. - -4 -00:00:06,520 --> 00:00:08,930 ->> What we've done so far. I also sent, in what - -5 -00:00:08,930 --> 00:00:14,490 -I sent you, I also had some stories about how the actual - -6 -00:00:14,490 --> 00:00:16,400 ->> Library is used. You asked me to do - -7 -00:00:16,400 --> 00:00:18,950 -that and are we going to take, use that here? - -8 -00:00:20,160 --> 00:00:23,300 ->> Glad you asked actually. yeah. Those are, you know, what we call use - -9 -00:00:23,300 --> 00:00:25,940 -cases, or what we will use as scenarios kind of things that we will - -10 -00:00:25,940 --> 00:00:28,340 -use to derive use cases. And they're also a very good - -11 -00:00:28,340 --> 00:00:31,450 -way of extracting requirements. We're not going to look at them right - -12 -00:00:31,450 --> 00:00:33,890 -now because now, because we're more working on kind of the static - -13 -00:00:33,890 --> 00:00:37,860 -structure of the system. But after we're done with the class diagram, - -14 -00:00:37,860 --> 00:00:40,700 -you know, we will do it at a different time. But - -15 -00:00:40,700 --> 00:00:43,410 -we're going to use those to see how the - -16 -00:00:43,410 --> 00:00:45,850 -libraries actually use them, and see whether we can get more - -17 -00:00:45,850 --> 00:00:49,000 -information that we can use to refine our requirements based on that. - -18 -00:00:49,000 --> 00:00:49,770 ->> Okay. - -19 -00:00:49,770 --> 00:00:51,020 ->> Okay, - -20 -00:00:51,020 --> 00:00:52,940 -So, for now, we'll just focus in on the, - -21 -00:00:52,940 --> 00:00:54,630 -structure, but, just so you know, I'm, - -22 -00:00:54,630 --> 00:00:55,870 -I'm glad you sent them, because they were going - -23 -00:00:55,870 --> 00:00:57,380 -very useful as well. - -24 -00:00:59,410 --> 00:01:00,840 -Okay. So let's see. Well, first of all, let - -25 -00:01:00,840 --> 00:01:03,030 -me, seems like that this is already pretty crowded, - -26 -00:01:03,030 --> 00:01:06,770 -right? We have a number of, classes. So let's - -27 -00:01:06,770 --> 00:01:10,580 -see if there's, some class that may be superfluous and - -28 -00:01:10,580 --> 00:01:13,310 -we can model in a different way. So, for - -29 -00:01:13,310 --> 00:01:16,360 -example, you, while, while thinking of this I was thinking, - -30 -00:01:16,360 --> 00:01:19,450 -the library card, it doesn't really contain much - -31 -00:01:19,450 --> 00:01:22,736 -information, right? So is it basically just the number? - -32 -00:01:22,736 --> 00:01:23,948 - -33 -00:01:23,948 --> 00:01:30,760 -The card has a number on it. We have a separate vendor that does that for us so. - -34 -00:01:30,760 --> 00:01:30,810 ->> Oh. - -35 -00:01:30,810 --> 00:01:33,270 ->> We don't need, it doesn't need to be part of this system, - -36 -00:01:33,270 --> 00:01:35,450 -we just have to make sure that every patron has a library card. - -37 -00:01:35,450 --> 00:01:37,670 ->> Okay, so basically for you, in a sense, the library - -38 -00:01:37,670 --> 00:01:41,560 -card is just an ID that gets associated with a patron. - -39 -00:01:41,560 --> 00:01:42,120 ->> That's right. - -40 -00:01:42,120 --> 00:01:45,380 ->> So I think that the best way to represent this, I mean, unless you - -41 -00:01:45,380 --> 00:01:47,000 -need an entity because you are creating it - -42 -00:01:47,000 --> 00:01:49,160 -yourself, but it seems like you are not. - -43 -00:01:49,160 --> 00:01:52,710 -I would just remove this one and I would like to put this, - -44 -00:01:52,710 --> 00:01:56,020 -basically to take the library card number and add it to the pattern. - -45 -00:01:56,020 --> 00:01:57,100 ->> Okay, makes sense. - -46 -00:01:57,100 --> 00:02:03,000 ->> Okay, so I'll add it here. And as - -47 -00:02:03,000 --> 00:02:06,160 -an additional attribute. Okay, and it will eliminate this class. - -48 -00:02:06,160 --> 00:02:06,410 ->> Okay. - -49 -00:02:06,410 --> 00:02:07,580 ->> Okay. - -50 -00:02:09,690 --> 00:02:11,700 -Oh, and, wait a second, so I guess - -51 -00:02:11,700 --> 00:02:13,940 -also the child needs a library card number, right? - -52 -00:02:13,940 --> 00:02:18,320 ->> Child needs a library card number, but let me ask you about that. Is, - -53 -00:02:18,320 --> 00:02:22,050 -is child a separate class, or is it just another kind of patron? - -54 -00:02:22,050 --> 00:02:24,920 ->> Oh, I see, I see. Because, yeah, it - -55 -00:02:24,920 --> 00:02:28,490 -is sort of a special patron, right? And, so - -56 -00:02:28,490 --> 00:02:31,730 -maybe we should, maybe we should represent it as - -57 -00:02:31,730 --> 00:02:35,640 -a kind of a refinement of the patron. - -58 -00:02:35,640 --> 00:02:38,730 -Hm, but then that made me think. So what is - -59 -00:02:38,730 --> 00:02:42,510 -the only thing that characterizes children? Is it just the age? - -60 -00:02:42,510 --> 00:02:47,440 ->> Well, if they're, that they can't check out more than five books. - -61 -00:02:47,440 --> 00:02:48,890 ->> Okay. And the, and the only difference is the - -62 -00:02:48,890 --> 00:02:52,010 -fact that they are less than, you know, twelve years old. - -63 -00:02:52,010 --> 00:02:52,710 ->> Twelve or less, right. - -64 -00:02:52,710 --> 00:02:56,090 ->> Twelve or less. So, I guess, you know, I would probably - -65 -00:02:56,090 --> 00:03:01,120 -like to represent this by making the age explicit in the patron rather - -66 -00:03:01,120 --> 00:03:04,730 -than to represent it as a class. And I'll tell you why, - -67 -00:03:04,730 --> 00:03:08,300 -because one, one of the issues, and you know, that might happen - -68 -00:03:08,300 --> 00:03:13,070 -again, is that, basically, there are patrons that are children. And they're - -69 -00:03:13,070 --> 00:03:17,130 -no longer children, when they come you know 13 or older right. - -70 -00:03:17,130 --> 00:03:18,100 ->> Right. - -71 -00:03:18,100 --> 00:03:21,990 ->> And if we represent them with a separate class in a sense, then we - -72 -00:03:21,990 --> 00:03:26,620 -cannot really change the type of an instance of these classes. - -73 -00:03:26,620 --> 00:03:28,920 -So we're left to kind of destroy the patron, create - -74 -00:03:28,920 --> 00:03:31,190 -a new one, so that means we also have to transfer - -75 -00:03:31,190 --> 00:03:33,510 -any history we want to keep history and so on. - -76 -00:03:33,510 --> 00:03:35,680 -So I, I think I kind of like better the idea - -77 -00:03:35,680 --> 00:03:39,560 -that I represent the age exclusively in - -78 -00:03:39,560 --> 00:03:42,700 -the patron, and then I'll behave differently, based on whether the - -79 -00:03:42,700 --> 00:03:45,910 -patron is 12 years old, or younger, or 13 or, - -80 -00:03:45,910 --> 00:03:49,600 -13 or older. This, do you see any problem with that? - -81 -00:03:49,600 --> 00:03:51,210 ->> It makes things a little simpler. - -82 -00:03:51,210 --> 00:03:51,490 ->> Okay, - -83 -00:03:51,490 --> 00:03:53,550 -and we actually, it allows us also to eliminate - -84 -00:03:53,550 --> 00:03:56,450 -one class here. So I'm going to proceed this way. - -85 -00:03:56,450 --> 00:03:59,450 -I'm going to eliminate the children class, and I'm going to - -86 -00:03:59,450 --> 00:04:03,600 -put the age in the patron. Okay, and let me - -87 -00:04:03,600 --> 00:04:07,020 -see. But in this spirit, actually, something else that jumps - -88 -00:04:07,020 --> 00:04:09,740 -at me is this idea of the bestseller, because I - -89 -00:04:09,740 --> 00:04:11,850 -kind of feel like, we might have the same - -90 -00:04:11,850 --> 00:04:15,085 -problem. So, what is the story? What is a bestseller. - -91 -00:04:15,085 --> 00:04:16,850 ->> Well it's - -92 -00:04:16,850 --> 00:04:20,750 -an item that we want to restrict how - -93 -00:04:20,750 --> 00:04:23,896 -long people can keep, because there is such demand for it. - -94 -00:04:23,896 --> 00:04:26,880 ->> I see, and so basically a book that's a - -95 -00:04:26,880 --> 00:04:30,450 -bestseller, like the New York Times bestseller, is a bestseller forever? - -96 -00:04:30,450 --> 00:04:32,683 ->> No, no, no it's hot for - -97 -00:04:32,683 --> 00:04:35,940 -awhile, and then it becomes just a regular item. - -98 -00:04:35,940 --> 00:04:38,318 ->> I see. Hm. Then I guess it's a - -99 -00:04:38,318 --> 00:04:40,349 -similar situation to the one I was mentioning before, right? - -100 -00:04:40,349 --> 00:04:40,980 ->> Okay. - -101 -00:04:40,980 --> 00:04:41,800 ->> That if we have a book, - -102 -00:04:41,800 --> 00:04:44,530 -it will kind of have to change its type if it becomes a best seller. - -103 -00:04:44,530 --> 00:04:47,218 -Then we have to change its type again, if it's no longer a best seller. - -104 -00:04:47,218 --> 00:04:47,790 ->> Right. - -105 -00:04:47,790 --> 00:04:48,920 ->> So it seems to me that a better - -106 -00:04:48,920 --> 00:04:52,150 -way to represent this, is just to eliminate this BestSeller - -107 -00:04:52,150 --> 00:04:55,060 -class and instead, I'm going to put the best seller - -108 -00:04:55,060 --> 00:04:58,190 -attribute, which would just be a Boolean in the book. - -109 -00:04:58,190 --> 00:05:00,190 ->> Okay, what do you mean by Boolean? - -110 -00:05:00,190 --> 00:05:02,280 ->> Right. We don't know what Boolean is, right? The Boolean is - -111 -00:05:02,280 --> 00:05:04,940 -basically just a number. It can have two values, right? True or false. - -112 -00:05:04,940 --> 00:05:05,380 ->> Okay. - -113 -00:05:05,380 --> 00:05:06,830 ->> So we usually, normally use it - -114 -00:05:06,830 --> 00:05:09,510 -in this in this case. Imagine one, zero, - -115 -00:05:09,510 --> 00:05:10,970 -right? Then it's just kind of the basic. - -116 -00:05:10,970 --> 00:05:11,120 ->> Okay. - -117 -00:05:11,120 --> 00:05:12,250 ->> You know, the bits, right? - -118 -00:05:12,250 --> 00:05:12,590 ->> Okay. - -119 -00:05:12,590 --> 00:05:14,730 ->> So, this is just telling us, it's like a flag - -120 -00:05:14,730 --> 00:05:16,672 -that is telling this book is a best seller, or not. - -121 -00:05:16,672 --> 00:05:17,053 ->> Okay. - -122 -00:05:17,053 --> 00:05:20,920 ->> It's very easy to change this value and make a book a best - -123 -00:05:20,920 --> 00:05:22,880 -seller or not a best seller, than - -124 -00:05:22,880 --> 00:05:26,210 -just creating and destroying instances of these classes. - -125 -00:05:26,210 --> 00:05:27,135 ->> Okay, makes sense. - -126 -00:05:27,135 --> 00:05:32,630 ->> Okay, so at this point, this already looks better, right? Because we have, - -127 -00:05:32,630 --> 00:05:35,590 -less classes, and I think we did, yeah, we - -128 -00:05:35,590 --> 00:05:38,775 -did some serious cleanup. That's good. Okay, so now that - -129 -00:05:38,775 --> 00:05:40,975 -we eliminated some of this, what I would like to - -130 -00:05:40,975 --> 00:05:42,845 -do, as I said, we are going to both clean - -131 -00:05:42,845 --> 00:05:45,222 -up, but also refine. I would like to go - -132 -00:05:45,222 --> 00:05:48,826 -back to our, requirements and see whether we can identify - -133 -00:05:48,826 --> 00:05:52,566 -additional attributes for this, class that maybe are not as - -134 -00:05:52,566 --> 00:05:55,120 -obvious as the one that we saw so far, okay? - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/4 - Adding Attributes - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/4 - Adding Attributes - lang_en.srt deleted file mode 100644 index 0a48aae..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/4 - Adding Attributes - lang_en.srt +++ /dev/null @@ -1,352 +0,0 @@ -1 -00:00:00,240 --> 00:00:02,880 -Okay, so let me look at the requirements and - -2 -00:00:05,500 --> 00:00:09,150 -it's something that I can see here that we didn't point out before is that - -3 -00:00:09,150 --> 00:00:13,540 -there seems to be clearly some concept of a due date. And I'm telling you why - -4 -00:00:13,540 --> 00:00:17,610 -I'm saying that because here, for example, I notice that it says when items are - -5 -00:00:17,610 --> 00:00:22,580 -due. We mention overdue several times, so is - -6 -00:00:22,580 --> 00:00:24,410 -this something we need to keep track of? - -7 -00:00:24,410 --> 00:00:27,510 ->> Yeah remember when we used to stamp them on the books? In the stamp pad? - -8 -00:00:27,510 --> 00:00:28,240 ->> Oh yeah yeah yeah! Oh course! - -9 -00:00:28,240 --> 00:00:30,600 ->> Right? Yeah we definitely keep track of, - -10 -00:00:30,600 --> 00:00:32,390 -the system has to keep track of when books are due. - -11 -00:00:32,390 --> 00:00:35,300 ->> Okay. So it seems to me that one good way - -12 -00:00:35,300 --> 00:00:39,660 -of doing that is by basically adding an attribute to the, item. - -13 -00:00:39,660 --> 00:00:40,590 ->> Okay. - -14 -00:00:40,590 --> 00:00:41,910 ->> And I'll just call it due date. - -15 -00:00:41,910 --> 00:00:42,400 ->> Okay. - -16 -00:00:42,400 --> 00:00:45,360 ->> So basically for each item in case it's loaned - -17 -00:00:45,360 --> 00:00:48,315 -there will be this attribute that will contain the value of - -18 -00:00:48,315 --> 00:00:48,520 ->> Okay. - -19 -00:00:48,520 --> 00:00:55,710 ->> Of when, when the item is due. And then, something else that I noticed - -20 -00:00:55,710 --> 00:00:58,734 -here is that down here, it seems like - -21 -00:00:58,734 --> 00:01:00,900 -the requirements are saying that an item can - -22 -00:01:00,900 --> 00:01:04,190 -be renewed only once. So, I guess, that's - -23 -00:01:04,190 --> 00:01:05,933 -something we need to keep track of, right? - -24 -00:01:05,933 --> 00:01:06,056 ->> Yeah. - -25 -00:01:06,056 --> 00:01:06,700 ->> The system needs to know. - -26 -00:01:06,700 --> 00:01:08,360 ->> We have to know whether they've renewed it or not. - -27 -00:01:08,360 --> 00:01:14,132 ->> Okay so, I'll do a similar thing here. I think I want to go and add a an - -28 -00:01:14,132 --> 00:01:19,140 -attribute that we'd call number of times renewed, and add it to the item class. - -29 -00:01:19,140 --> 00:01:19,760 ->> Okay. - -30 -00:01:19,760 --> 00:01:21,140 ->> And this is kind of more generic - -31 -00:01:21,140 --> 00:01:23,180 -than what you need, because here it says only once, but - -32 -00:01:23,180 --> 00:01:25,800 -let's say that in the future you want to allow it to, - -33 -00:01:25,800 --> 00:01:28,690 -kind of renew twice, you'll be able to use these attributes again - -34 -00:01:28,690 --> 00:01:31,090 -because, we can just count how many times it was renewed. Okay? - -35 -00:01:31,090 --> 00:01:31,680 ->> Makes sense. - -36 -00:01:31,680 --> 00:01:35,980 ->> Alright. And one last thing I want to point out. - -37 -00:01:35,980 --> 00:01:38,310 -And this seems obvious but I'm going to check with - -38 -00:01:38,310 --> 00:01:43,150 -you anyways. And seems like there is a basically the - -39 -00:01:43,150 --> 00:01:46,090 -need to keep track of whether an item is checked - -40 -00:01:46,090 --> 00:01:48,210 -out or not. If you look at the text here, - -41 -00:01:48,210 --> 00:01:51,080 -the requirements here, I can see that check out and checked out are - -42 -00:01:51,080 --> 00:01:55,070 -mentioned five times. So, I'm assuming that that's something also - -43 -00:01:55,070 --> 00:01:58,080 -that we want to know about an item, whether it's checked out or not. - -44 -00:01:58,080 --> 00:01:59,970 ->> We have to keep track of whether they're checked out. - -45 -00:01:59,970 --> 00:02:01,930 ->> Okay, so I'll add an - -46 -00:02:01,930 --> 00:02:04,340 -additional attribute there. So I'm going to again go - -47 -00:02:04,340 --> 00:02:06,480 -back to the diagram and I'm - -48 -00:02:06,480 --> 00:02:10,139 -just going to write here also the checked out attribute. - -49 -00:02:12,260 --> 00:02:14,590 -And, I think that's it as far as I'm - -50 -00:02:14,590 --> 00:02:16,330 -concerned. Is there anything that you think is missing? - -51 -00:02:16,330 --> 00:02:21,077 ->> Well, I do have a question. Would checked out, - -52 -00:02:21,077 --> 00:02:27,140 -better not be the case that someone can check out a reference book. - -53 -00:02:27,140 --> 00:02:28,400 ->> Oh, I see, I see. - -54 -00:02:28,400 --> 00:02:30,120 ->> Okay. I mean, it's only the books and - -55 -00:02:30,120 --> 00:02:31,780 -the audio visual material that can be checked out. - -56 -00:02:31,780 --> 00:02:37,790 ->> Right, right, right. Okay, so I, I guess, well the way I will fix that is, - -57 -00:02:37,790 --> 00:02:42,300 -I'll probably put yet another attribute in the item class, and I'll - -58 -00:02:42,300 --> 00:02:45,860 -call it loanable. And basically, this attribute is just telling us whether - -59 -00:02:45,860 --> 00:02:49,580 -an item is loanable or not. So, when it's not true and - -60 -00:02:49,580 --> 00:02:53,480 -loanable is not on. Basically, that item can be checked out. - -61 -00:02:53,480 --> 00:02:55,174 ->> Okay. And, the system would know this. - -62 -00:02:55,174 --> 00:02:56,450 ->> The system will know that. - -63 -00:02:56,450 --> 00:02:57,160 ->> And prevent it from happening. - -64 -00:02:57,160 --> 00:02:58,240 ->> And prevent it from happening. Okay? - -65 -00:02:58,240 --> 00:02:58,750 ->> Alright. - -66 -00:02:58,750 --> 00:03:02,918 ->> Perfect. So, we're going to do that and, any other objections, - -67 -00:03:02,918 --> 00:03:04,035 -any other? - -68 -00:03:04,035 --> 00:03:05,730 ->> No, that was my question. - -69 -00:03:05,730 --> 00:03:08,040 ->> Okay, perfect, so what I'm going to do next, I - -70 -00:03:08,040 --> 00:03:11,130 -mean, I haven't mentioned that yet, but you know classes right - -71 -00:03:11,130 --> 00:03:12,890 -now we just looked at the attributes right that give - -72 -00:03:12,890 --> 00:03:16,140 -you sort of the state of the class. And there's something - -73 -00:03:16,140 --> 00:03:19,185 -else, there's a second part of the class that is kind of - -74 -00:03:19,185 --> 00:03:22,520 -an orthogonal aspect, which is what the class can do. And we - -75 -00:03:22,520 --> 00:03:25,640 -call those operations. So normally these kinds also have operations, I - -76 -00:03:25,640 --> 00:03:28,000 -guess you know it would make sense to you as well. - -77 -00:03:28,000 --> 00:03:30,070 -And one way, one very natural way to - -78 -00:03:30,070 --> 00:03:33,310 -identify operations is to look at the requirements and - -79 -00:03:33,310 --> 00:03:36,850 -look for verbs. Because verbs associated with an item - -80 -00:03:36,850 --> 00:03:38,480 -will tell you basically what the item can do. - -81 -00:03:38,480 --> 00:03:38,900 ->> Okay. - -82 -00:03:38,900 --> 00:03:41,250 ->> So I, I'd like to go back to the requirements and - -83 -00:03:41,250 --> 00:03:45,110 -start, the same way in which we underlined, nouns, we're going to underline - -84 -00:03:45,110 --> 00:03:49,340 -verbs and we're going to see which ones of those verbs actually represent - -85 -00:03:49,340 --> 00:03:53,120 -actions that we want to represent explicitly, we want to model explicitly in - -86 -00:03:53,120 --> 00:03:53,950 -our class diagram. - -87 -00:03:53,950 --> 00:03:54,490 ->> Okay. - -88 -00:03:54,490 --> 00:03:54,750 ->> Okay. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/5 - Identifying Operations - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/5 - Identifying Operations - lang_en.srt deleted file mode 100644 index 74ca388..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/5 - Identifying Operations - lang_en.srt +++ /dev/null @@ -1,304 +0,0 @@ -1 -00:00:00,460 --> 00:00:03,276 ->> And before we get started actually, I'd like to mention that there's - -2 -00:00:03,276 --> 00:00:05,124 -just, you know, FYI, there's different kinds - -3 -00:00:05,124 --> 00:00:06,708 -of verbs because what I'm looking for - -4 -00:00:06,708 --> 00:00:10,099 -is really action verbs. So verb, verbs that clearly express an action that - -5 -00:00:10,099 --> 00:00:13,580 -can tell me that, you know, what, for example, an item could do, 'kay? - -6 -00:00:13,580 --> 00:00:13,820 ->> Okay? - -7 -00:00:13,820 --> 00:00:16,620 ->> Not the verbs that represent, for example, relationships, 'kay? - -8 -00:00:16,620 --> 00:00:17,076 ->> Okay. - -9 -00:00:17,076 --> 00:00:19,080 ->> So, and the, there, and the ones - -10 -00:00:19,080 --> 00:00:22,020 -that I've identified und, underlined here actually, I, - -11 -00:00:22,020 --> 00:00:26,158 -I underlined complete sentences so that you kind of we can look at the verbs in - -12 -00:00:26,158 --> 00:00:29,150 -in context. And the first one is this - -13 -00:00:29,150 --> 00:00:30,850 -sentence that says that the library may need - -14 -00:00:30,850 --> 00:00:33,190 -to know or to calculate the items a - -15 -00:00:33,190 --> 00:00:35,790 -patron has checked out, when they are due, and - -16 -00:00:35,790 --> 00:00:38,860 -any outstanding overdue fines. So I, I will - -17 -00:00:38,860 --> 00:00:41,430 -imagine that this is representing a situation in - -18 -00:00:41,430 --> 00:00:44,224 -which you bring up a patron's record and - -19 -00:00:44,224 --> 00:00:46,131 -you start looking up this information. Is that [CROSSTALK] - -20 -00:00:46,131 --> 00:00:50,970 ->> The, the patron often wants to know what they have currently checked out. - -21 -00:00:50,970 --> 00:00:51,044 ->> Oh, - -22 -00:00:51,044 --> 00:00:51,282 -alright. - -23 -00:00:51,282 --> 00:00:53,260 ->> Or when are their due or how much they're owed or. - -24 -00:00:53,260 --> 00:00:55,100 ->> Oh, in fact, and then now that you mentioned it, - -25 -00:00:55,100 --> 00:00:57,500 -I think you sent me. One of the scenarios you sent - -26 -00:00:57,500 --> 00:00:59,400 -me had to do with that, right, with the patron coming - -27 -00:00:59,400 --> 00:01:01,930 -in and asking for this information. So yeah, and it makes - -28 -00:01:01,930 --> 00:01:05,025 -a lot of sense. So what I'm going to do, I'm going to - -29 -00:01:05,025 --> 00:01:10,520 -model this by adding this three operations to the patron method. - -30 -00:01:10,520 --> 00:01:13,410 -The first one, I'm going to call, itemsCheckedOut and, basically, it's an - -31 -00:01:13,410 --> 00:01:16,520 -operation, but you don't need to, you know, understand the implementation - -32 -00:01:16,520 --> 00:01:18,820 -details, but when you call this operation, it will - -33 -00:01:18,820 --> 00:01:21,770 -give you back exactly this information, so the items - -34 -00:01:21,770 --> 00:01:23,864 -that are checked out by that patron. The second - -35 -00:01:23,864 --> 00:01:25,965 -one, I'm going to call it whenDue. That will tell you - -36 -00:01:25,965 --> 00:01:29,080 -basically when a, when an item is due. And - -37 -00:01:29,080 --> 00:01:32,550 -the third one is going to be called the outstandingOverdueFines and, - -38 -00:01:32,550 --> 00:01:34,510 -you know, as the name says, it's going to tell - -39 -00:01:34,510 --> 00:01:36,860 -you what are the outstanding overdue fines for that patron. - -40 -00:01:36,860 --> 00:01:37,300 ->> Okay. - -41 -00:01:37,300 --> 00:01:39,306 ->> And as you might notice I mean, - -42 -00:01:39,306 --> 00:01:41,843 -I, I'm going to separate the, the, the attributes - -43 -00:01:41,843 --> 00:01:44,085 -from the operations by having a separate kind - -44 -00:01:44,085 --> 00:01:46,386 -of subrectangle so, in this way, it's clear - -45 -00:01:46,386 --> 00:01:48,274 -what is attribute and what is, what is - -46 -00:01:48,274 --> 00:01:51,000 -an attribute and what's an, what's an operation. - -47 -00:01:51,000 --> 00:01:51,420 ->> Gotcha. - -48 -00:01:51,420 --> 00:01:57,540 ->> And let me see then. Okay, for the - -49 -00:01:57,540 --> 00:02:00,040 -second one you can see that that patron can check - -50 -00:02:00,040 --> 00:02:02,990 -out books and audio visual materials. So I guess, - -51 -00:02:02,990 --> 00:02:06,880 -similarly you, you build kind of the record for a patron. - -52 -00:02:06,880 --> 00:02:09,150 -The patron will give you an item and you will record - -53 -00:02:09,150 --> 00:02:11,020 -the fact that the patron is kind of checking it out. - -54 -00:02:11,020 --> 00:02:15,730 ->> Right. And is that operation related to this, - -55 -00:02:15,730 --> 00:02:18,150 -the checked out attribute that we did a minute ago? - -56 -00:02:18,150 --> 00:02:21,495 ->> It is actually because what will happen then again, you know, if we jump - -57 -00:02:21,495 --> 00:02:24,975 -ahead a little bit would be that every time you invoke this operation. So I'm - -58 -00:02:24,975 --> 00:02:26,810 -going to represent this as a checkOut operation - -59 -00:02:26,810 --> 00:02:28,896 -for the patron. Every time you invoke this, - -60 -00:02:28,896 --> 00:02:31,920 -you will also have to say something about the item and so we will also - -61 -00:02:31,920 --> 00:02:35,700 -flip kind of that that, that build information in the, in the, in the item. - -62 -00:02:35,700 --> 00:02:36,904 ->> Okay. - -63 -00:02:36,904 --> 00:02:39,680 ->> Mm, 'kay? And, and finally, here, I can see that - -64 -00:02:39,680 --> 00:02:42,660 -a patron can request a book or an audio video item Is - -65 -00:02:42,660 --> 00:02:46,240 -not currently in. So I guess this is referring to items that - -66 -00:02:46,240 --> 00:02:48,980 -are already checked out but for which there is interest. Is that? - -67 -00:02:48,980 --> 00:02:54,770 ->> Right. So, particularly, the popular items the patrons want to get on - -68 -00:02:54,770 --> 00:02:57,140 -the list so that they get notified when it comes back in and. - -69 -00:02:57,140 --> 00:02:57,204 ->> Oh. - -70 -00:02:57,204 --> 00:02:57,730 ->> And check it out. - -71 -00:02:57,730 --> 00:03:00,570 ->> I see. I see. Okay. Then I'm going to do - -72 -00:03:00,570 --> 00:03:04,400 -the same thing here. I'm, I'm going to add this method, - -73 -00:03:04,400 --> 00:03:08,510 -which I'm going to call request and I'm going to put it - -74 -00:03:08,510 --> 00:03:11,340 -here in the list of the methods in the list. - -75 -00:03:11,340 --> 00:03:11,450 ->> Okay. - -76 -00:03:11,450 --> 00:03:12,810 ->> Of operations for the, for the patron, okay? - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/6 - Adding Relationships - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/6 - Adding Relationships - lang_en.srt deleted file mode 100644 index d47ef80..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/6 - Adding Relationships - lang_en.srt +++ /dev/null @@ -1,488 +0,0 @@ -1 -00:00:00,420 --> 00:00:02,740 -OK I like the way this class diagram is - -2 -00:00:02,740 --> 00:00:05,850 -coming along. So at this point I think we - -3 -00:00:05,850 --> 00:00:08,300 -have all the classes that we need. For each - -4 -00:00:08,300 --> 00:00:12,250 -class we specified the attributes or the characteristics of the - -5 -00:00:12,250 --> 00:00:15,150 -class. And we also specified the operations so we - -6 -00:00:15,150 --> 00:00:18,710 -know what the class can do And, I like to - -7 -00:00:18,710 --> 00:00:22,110 -kind of move forward on this, but I first - -8 -00:00:22,110 --> 00:00:25,690 -want to see that you're fine with the class structure. - -9 -00:00:25,690 --> 00:00:27,500 -So that's the way the class structure is going - -10 -00:00:27,500 --> 00:00:29,880 -to be in terms of attributes and operations. So anything - -11 -00:00:29,880 --> 00:00:34,910 -that bothers you? Well, one thing I didn't understand - -12 -00:00:34,910 --> 00:00:38,090 -is how come you put check out over where - -13 -00:00:38,090 --> 00:00:40,350 -the patron when it's really the item being checked - -14 -00:00:40,350 --> 00:00:46,280 -out? Right. Okay. So that actually is you know, is a perfect - -15 -00:00:46,280 --> 00:00:48,030 -segway for the next thing that really wanted - -16 -00:00:48,030 --> 00:00:50,780 -to model. Because what you're talking about is basically a - -17 -00:00:50,780 --> 00:00:54,100 -relationship between two classes which is something we haven't touched on - -18 -00:00:54,100 --> 00:00:57,582 -yet. So we haven't, haven't looked at individual classes. But now, it - -19 -00:00:57,582 --> 00:01:00,720 -is typical, now we are looking more at requirements, we're starting to - -20 -00:01:00,720 --> 00:01:04,800 -find more things about our system, and what you're pointed out right - -21 -00:01:04,800 --> 00:01:08,370 -now is the fact that patron and item are somehow related. So - -22 -00:01:08,370 --> 00:01:11,020 -this checkout operation is not really something that belongs only on in - -23 -00:01:11,020 --> 00:01:13,660 -the patron, because it needs to know about the item. And it - -24 -00:01:13,660 --> 00:01:15,790 -doesn't belong only on the item because it needs to know about - -25 -00:01:15,790 --> 00:01:19,640 -the patron. So, it's something that associates the patron and - -26 -00:01:19,640 --> 00:01:22,600 -the item. Okay. And that's exactly the way we call - -27 -00:01:22,600 --> 00:01:24,630 -in the UML which is the notation that we're using - -28 -00:01:24,630 --> 00:01:29,060 -here this kind of relationship. So, we're going to represent that - -29 -00:01:29,060 --> 00:01:32,820 -by drawing a line between these two classes that tells - -30 -00:01:32,820 --> 00:01:35,220 -us there is an association. And we're also going to - -31 -00:01:35,220 --> 00:01:37,890 -give a name to this. Since this refers to the - -32 -00:01:37,890 --> 00:01:40,280 -fact of checking out items. We're just going to call - -33 -00:01:40,280 --> 00:01:43,794 -it, checkout. Gotcha. And notice that this basically you - -34 -00:01:43,794 --> 00:01:48,500 -know,eventually will end up kind of replacing this attribute. Because - -35 -00:01:48,500 --> 00:01:51,780 -the existence of this association will tell us that - -36 -00:01:51,780 --> 00:01:53,932 -this is checked out. We're, we're not going to, you know, - -37 -00:01:53,932 --> 00:01:55,428 -do it right now, but in the final cleanup - -38 -00:01:55,428 --> 00:01:58,750 -or the diagram, this name will disappear. Okay. Okay. - -39 -00:01:58,750 --> 00:02:02,190 -And so since we started talking about relationships and - -40 -00:02:02,190 --> 00:02:05,280 -associations, is there any other kind of relationship that you - -41 -00:02:05,280 --> 00:02:08,805 -see here? Well, what you just did with checked - -42 -00:02:08,805 --> 00:02:12,009 -out is, it seems similar to the whole issue - -43 -00:02:12,009 --> 00:02:16,090 -of requests. It is, it is. So a request - -44 -00:02:16,090 --> 00:02:19,580 -is something else that happens in both, you know, in - -45 -00:02:19,580 --> 00:02:22,090 -the patron and in the item, it involves both. - -46 -00:02:22,090 --> 00:02:24,070 -And in fact in a request, I would definitely - -47 -00:02:24,070 --> 00:02:26,950 -represent this as an additional association. So I will - -48 -00:02:26,950 --> 00:02:30,730 -just draw an another line between these two that represent - -49 -00:02:30,730 --> 00:02:33,804 -that specific kind of relationship and I will call it - -50 -00:02:33,804 --> 00:02:37,330 -request. So that indicates that this association refers to a - -51 -00:02:37,330 --> 00:02:41,660 -request that also connects the patron with an item. Okay. - -52 -00:02:41,660 --> 00:02:45,710 -And, let's see. Any, anything else that jumps at you? - -53 -00:02:45,710 --> 00:02:47,590 -Yeah, well, how about all these ones down at the - -54 -00:02:47,590 --> 00:02:50,080 -bottom? I mean book and item's got to be - -55 -00:02:50,080 --> 00:02:52,920 -related, right? A book is a kind of item, And - -56 -00:02:52,920 --> 00:02:55,860 -audiovisual... are there associations between them? Can you repeat - -57 -00:02:55,860 --> 00:02:58,790 -that, you said that the book, yeah? Is - -58 -00:02:58,790 --> 00:03:02,550 -a kind of item. Perfect, that's exactly what we're - -59 -00:03:02,550 --> 00:03:04,700 -modeling next, which is, this, what we call the - -60 -00:03:04,700 --> 00:03:07,900 -is-a relationship. So you said, a book is an item? - -61 -00:03:07,900 --> 00:03:13,346 -A book is an item. And, we can model that in the diagram. So, we do that - -62 -00:03:13,346 --> 00:03:17,409 -using another kind of relationship between the classes. So - -63 -00:03:17,409 --> 00:03:21,210 -we're going to represent that as a specialization we call it. - -64 -00:03:21,210 --> 00:03:24,890 -And, a specialization is indicated in this way. Okay? - -65 -00:03:24,890 --> 00:03:27,410 -With this arrow at the end, so a solid - -66 -00:03:27,410 --> 00:03:30,800 -with this kind of arrow at the end. And - -67 -00:03:30,800 --> 00:03:34,160 -we can do the same for book, magazine, reference book - -68 -00:03:34,160 --> 00:03:36,200 -and audiovisual material. So we're all going to connect, - -69 -00:03:36,200 --> 00:03:37,950 -we're going to connect all of them, to the - -70 -00:03:37,950 --> 00:03:43,190 -item, using the same kind of connection. And now - -71 -00:03:43,190 --> 00:03:47,200 -that we have connected all these four, with item - -72 -00:03:47,200 --> 00:03:50,620 -and indicated them in subclasses. That's something else that we can - -73 -00:03:50,620 --> 00:03:54,370 -do. So we can make this kind of cleaner. And I'll - -74 -00:03:54,370 --> 00:03:56,360 -tell you what I mean by that. So now we have - -75 -00:03:56,360 --> 00:04:00,190 -this loanable attribute that refers to item, but it seems to - -76 -00:04:00,190 --> 00:04:03,100 -me from what you were saying before, that loanable is not - -77 -00:04:03,100 --> 00:04:05,490 -really an attribute of an item. Right? It's more of a - -78 -00:04:05,490 --> 00:04:09,240 -characteristic of the type of item. Right. Is that right? Right. - -79 -00:04:09,240 --> 00:04:13,120 -Books, and audio/visual are loanable but the others aren't. - -80 -00:04:13,120 --> 00:04:16,450 -Okay, and so representing it here, it's okay to, - -81 -00:04:16,450 --> 00:04:20,579 -it will work. But it's not really right so from - -82 -00:04:20,579 --> 00:04:23,590 -the style standpoint it doesn't really you know, - -83 -00:04:23,590 --> 00:04:26,100 -it's not the best way of modeling this. What we're going to - -84 -00:04:26,100 --> 00:04:30,130 -do instead, we're going to use this specialization relationship to make - -85 -00:04:30,130 --> 00:04:33,000 -that more explicit. To make it cleaner. Okay, so what - -86 -00:04:33,000 --> 00:04:35,300 -I'm doing here is I'm going to take this hierarchy - -87 -00:04:35,300 --> 00:04:38,130 -of classes, this is just on two levels now, and I'm - -88 -00:04:38,130 --> 00:04:40,380 -going to kind of make it a little richer. - -89 -00:04:40,380 --> 00:04:43,470 -So I'm going to add an intermediate set of - -90 -00:04:43,470 --> 00:04:45,756 -classes. And in particular I'm going to have these two - -91 -00:04:45,756 --> 00:04:48,306 -classes that I'm going to call non loanable item and loanable - -92 -00:04:48,306 --> 00:04:51,790 -item. So, they're both items but they tell me - -93 -00:04:51,790 --> 00:04:55,490 -clearly that some items are loanable and some items - -94 -00:04:55,490 --> 00:04:59,392 -are not. Okay. Okay. And then I'm simply going to - -95 -00:04:59,392 --> 00:05:03,192 -put book and audio video material as subclasses of loanable - -96 -00:05:03,192 --> 00:05:07,980 -item and reference book and magazine as subclasses of non-loanable - -97 -00:05:07,980 --> 00:05:10,510 -item. So, if we look at this diagram now it's - -98 -00:05:10,510 --> 00:05:13,650 -pretty clear what is loanable and what is not. And - -99 -00:05:13,650 --> 00:05:16,070 -it's actually is a very clean, much cleaner - -100 -00:05:16,070 --> 00:05:18,980 -design. And, and I see you've, gotten rid of - -101 -00:05:18,980 --> 00:05:21,560 -the loanable attribute, too. I did. Because at - -102 -00:05:21,560 --> 00:05:24,130 -this point this is already represented by the fact of - -103 -00:05:24,130 --> 00:05:28,570 -having these two classes. And actually, something else that I did - -104 -00:05:28,570 --> 00:05:31,820 -is that I moved all these attributes, value, - -105 -00:05:31,820 --> 00:05:34,220 -due date, renewed and checked out, that makes - -106 -00:05:34,220 --> 00:05:37,452 -sense only for loanable item. From item to - -107 -00:05:37,452 --> 00:05:40,450 -loanable item. So at this point, this really - -108 -00:05:40,450 --> 00:05:42,600 -is telling me that, you know, these - -109 -00:05:42,600 --> 00:05:46,410 -characteristics are just meaningful for the loanable item, - -110 -00:05:46,410 --> 00:05:53,800 -and not for the other ones. Well, speaking of that, the way that you got the - -111 -00:05:53,800 --> 00:05:57,270 -lines going in the diagram here is you still have - -112 -00:05:57,270 --> 00:05:59,920 -request and checked out going to item, even though you - -113 -00:05:59,920 --> 00:06:02,610 -can't request non loanable Items. You can't check out non - -114 -00:06:02,610 --> 00:06:05,630 -loanable Items. Oh, you were right actually. You got me on - -115 -00:06:05,630 --> 00:06:10,940 -that one. You're exactly right. So this associations are between - -116 -00:06:10,940 --> 00:06:13,440 -the two wrong classes. So, I guess, at this point, - -117 -00:06:13,440 --> 00:06:16,450 -you can probably go and fix the diagram yourself. Well, - -118 -00:06:16,450 --> 00:06:19,120 -can we just make the lines go from patron to loanable - -119 -00:06:19,120 --> 00:06:21,640 -item instead of to item? That's exactly the way in which we - -120 -00:06:21,640 --> 00:06:25,550 -are going to fix it. So, we're going to move these two associations down - -121 -00:06:25,550 --> 00:06:29,190 -here. And at this point, this will represent the right relationships in - -122 -00:06:29,190 --> 00:06:31,850 -the, in the diagram, and in the system. Makes sense to me. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/7 - Refining Relationships - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/7 - Refining Relationships - lang_en.srt deleted file mode 100644 index 44f9165..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/7 - Refining Relationships - lang_en.srt +++ /dev/null @@ -1,188 +0,0 @@ -1 -00:00:00,350 --> 00:00:03,460 -Spencer, I gotta tell you, I'm impressed. - -2 -00:00:03,460 --> 00:00:05,441 -You're getting very good at this. So, why - -3 -00:00:05,441 --> 00:00:07,190 -don't you go wild and continue, there - -4 -00:00:07,190 --> 00:00:09,240 -anything else you think we can improve here? - -5 -00:00:09,240 --> 00:00:11,800 ->> Well something was bothering - -6 -00:00:11,800 --> 00:00:14,600 -me, that what happens if there's more - -7 -00:00:14,600 --> 00:00:19,110 -than one book with the same title and somebody puts in a request? - -8 -00:00:19,110 --> 00:00:25,360 ->> Oh, I see. That's a good point. So basically what you are telling me is - -9 -00:00:25,360 --> 00:00:28,630 -there's kind of a difference between an item and - -10 -00:00:28,630 --> 00:00:30,660 -the title, so the title is kind of a more - -11 -00:00:30,660 --> 00:00:32,940 -general concept, in a sense. So if you can - -12 -00:00:32,940 --> 00:00:35,830 -have multiple copies of a given title, is that right? - -13 -00:00:35,830 --> 00:00:38,460 ->> Yeah, we have five copies of Tom Sawyer, and the - -14 -00:00:38,460 --> 00:00:42,810 -persons, the patrons, really putting in a request for any Tom Sawyer. - -15 -00:00:42,810 --> 00:00:45,332 ->> They don't want like copy number three of Tom Sawyer, right? They want, - -16 -00:00:45,332 --> 00:00:50,530 -they want to read Tom Sawyer. Okay and I can represent that. So, in which - -17 -00:00:50,530 --> 00:00:55,230 -I suggest we do that, and you can tell me whether it makes sense to you is by - -18 -00:00:55,230 --> 00:00:59,650 -introducing an additional class, which I call Title. And - -19 -00:00:59,650 --> 00:01:02,614 -that represents exactly the concept that you're mentioning. So - -20 -00:01:02,614 --> 00:01:04,666 -this is a title which represents some - -21 -00:01:04,666 --> 00:01:09,180 -specific content. That is not related to a specific - -22 -00:01:09,180 --> 00:01:12,110 -physical element. Like it can be rated to multiple, - -23 -00:01:12,110 --> 00:01:15,520 -physical elements. So basically I'm going to create this title. - -24 -00:01:15,520 --> 00:01:18,100 -And then I'm going to create a relationship between - -25 -00:01:18,100 --> 00:01:20,500 -the title and the item. And what - -26 -00:01:20,500 --> 00:01:22,530 -the relationship is telling me, the the association - -27 -00:01:22,530 --> 00:01:25,512 -between these two in this case. Is an association, - -28 -00:01:25,512 --> 00:01:30,320 -that we call aggregation. So it's a special kind of association, that basically - -29 -00:01:30,320 --> 00:01:35,450 -indicates that an item of this type, so a title can - -30 -00:01:35,450 --> 00:01:40,692 -consist of a multiple elements of this type of multiple items. - -31 -00:01:40,692 --> 00:01:42,710 -So it's telling me that one title can - -32 -00:01:42,710 --> 00:01:45,700 -consist of multiple items, and I'm going to indicate - -33 -00:01:45,700 --> 00:01:48,560 -it with this annotation, which is a this - -34 -00:01:49,700 --> 00:01:53,200 -diamond at the top of the association. - -35 -00:01:53,200 --> 00:01:55,570 ->> And so we can move our request - -36 -00:01:55,570 --> 00:01:57,510 -line, up from loanable item to - -37 -00:01:57,510 --> 00:01:59,010 -title, because that's what they're really requesting. - -38 -00:01:59,010 --> 00:02:00,710 ->> Definitely, definitely, and in fact, - -39 -00:02:00,710 --> 00:02:02,420 -you know, that represents exactly the situation - -40 -00:02:02,420 --> 00:02:06,350 -that you are mentioning, at this point when the patron makes a request. - -41 -00:02:06,350 --> 00:02:12,240 -It makes a request to a title and not to a loanable item. And then, and - -42 -00:02:12,240 --> 00:02:15,420 -when the actual loan will take place, - -43 -00:02:15,420 --> 00:02:18,420 -then that will be connected to a specific item. - -44 -00:02:18,420 --> 00:02:20,090 ->> Right. Okay that makes sense. - -45 -00:02:20,090 --> 00:02:20,388 ->> Makes sense? - -46 -00:02:20,388 --> 00:02:20,779 ->> Yeah. - -47 -00:02:20,779 --> 00:02:21,214 ->> Okay, good. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/8 - Refining the Class Diagram - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/8 - Refining the Class Diagram - lang_en.srt deleted file mode 100644 index 1e47ea6..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/8 - Refining the Class Diagram - lang_en.srt +++ /dev/null @@ -1,328 +0,0 @@ -1 -00:00:00,260 --> 00:00:01,720 -Okay, so let me see if - -2 -00:00:01,720 --> 00:00:07,930 -anything changed after we did this last modification. - -3 -00:00:07,930 --> 00:00:09,530 -Acutally, there is someting that I would like - -4 -00:00:09,530 --> 00:00:12,120 -to do here. Because looking at this a little - -5 -00:00:12,120 --> 00:00:15,560 -bit more, I noticed that there are two - -6 -00:00:15,560 --> 00:00:18,760 -attributes, renewed and due date. That we have in - -7 -00:00:18,760 --> 00:00:21,640 -loanable Item, right? But they don't seem to - -8 -00:00:21,640 --> 00:00:25,590 -be really, attributes or characteristics of loanable Item. - -9 -00:00:25,590 --> 00:00:29,150 -They're more of the characteristics of the association between the - -10 -00:00:29,150 --> 00:00:31,450 -Loanable Item and the patron. Wouldn't you agree? - -11 -00:00:32,470 --> 00:00:34,230 ->> Well, yeah, it's not like you could - -12 -00:00:34,230 --> 00:00:37,644 -only renew a book once in it's entire history. - -13 -00:00:37,644 --> 00:00:41,220 ->> Right. Exactly, exactly. So, that's why what l like - -14 -00:00:41,220 --> 00:00:43,970 -to do is I would like to move those out of loanable - -15 -00:00:43,970 --> 00:00:48,020 -item. And actually there is a construct that we can use - -16 -00:00:48,020 --> 00:00:50,710 -to express this. It's called, we haven't seen it yet, but it's - -17 -00:00:50,710 --> 00:00:52,780 -a special kind of class. It's called an association - -18 -00:00:52,780 --> 00:00:55,480 -class. So, it's a class that is connected to - -19 -00:00:55,480 --> 00:00:57,730 -a specific association. So what we can do - -20 -00:00:57,730 --> 00:01:00,730 -here, we can create this class, which I'm going to - -21 -00:01:00,730 --> 00:01:05,200 -call checked out. I'm going to, associate it with - -22 -00:01:05,200 --> 00:01:09,520 -this, association. I'm going to connect it with this association. And - -23 -00:01:09,520 --> 00:01:11,620 -then I'm going to move the due date and the - -24 -00:01:11,620 --> 00:01:16,300 -renewed attributes From the LoanableItem here in this checked - -25 -00:01:16,300 --> 00:01:18,520 -out class. So in this way, seems to me that - -26 -00:01:18,520 --> 00:01:20,910 -it makes it very explicit for somebody looking at this - -27 -00:01:20,910 --> 00:01:25,530 -class diagram, that these characteristics are characteristics of the loan, - -28 -00:01:25,530 --> 00:01:28,200 -and not of the elements involved in the loan. - -29 -00:01:28,200 --> 00:01:33,410 ->> Can you do the same thing with Fine, isn't Fine a property of the - -30 -00:01:33,410 --> 00:01:36,740 -loan? Yeah, actually is right because - -31 -00:01:36,740 --> 00:01:39,120 -a fine is a fine for a specific loan, right? - -32 -00:01:39,120 --> 00:01:39,910 ->> That's correct. - -33 -00:01:39,910 --> 00:01:41,950 ->> Okay, so yeah. Then we can do that. - -34 -00:01:41,950 --> 00:01:45,900 -We don't need to represent fine as a class, we can just transform - -35 -00:01:45,900 --> 00:01:49,460 -that into an attribute that we can put into the checked out association class. - -36 -00:01:49,460 --> 00:01:50,560 ->> Gotcha. - -37 -00:01:50,560 --> 00:01:52,760 ->> Anything else? - -38 -00:01:52,760 --> 00:01:57,990 ->> Yeah. It occurred to me that there's another thing that happens in one - -39 -00:01:57,990 --> 00:02:00,260 -of my scenarios, I put down - -40 -00:02:00,260 --> 00:02:02,770 -about the patron actually returning an item. - -41 -00:02:02,770 --> 00:02:07,620 ->> Right. Okay, so we would probably need an additional operation, - -42 -00:02:07,620 --> 00:02:08,550 -I guess, for the patron. - -43 -00:02:08,550 --> 00:02:08,990 ->> Right. - -44 -00:02:08,990 --> 00:02:11,310 ->> So, okay, so what I'm going to do, that's pretty easy - -45 -00:02:11,310 --> 00:02:15,350 -to do, I'm just going to add the return operation here in the - -46 -00:02:15,350 --> 00:02:19,310 -patron, and when that happens, that will mean that I'll get rid - -47 -00:02:19,310 --> 00:02:23,490 -of this association class because the item is returned. Is that right? - -48 -00:02:23,490 --> 00:02:27,060 ->> Well, what happens if somebody drops the - -49 -00:02:27,060 --> 00:02:29,400 -book in the book drop, but doesn't pay the, - -50 -00:02:29,400 --> 00:02:31,050 -if it's overdue and doesn't pay the fine? - -51 -00:02:31,050 --> 00:02:32,700 -Will that get rid of the information about what - -52 -00:02:32,700 --> 00:02:33,040 -they owe? - -53 -00:02:33,040 --> 00:02:37,960 ->> Oh, I see. So you can have the item being available, but you still - -54 -00:02:37,960 --> 00:02:42,510 -want to know whether there is any pending fines on the book. - -55 -00:02:42,510 --> 00:02:44,390 ->> Uh-huh, and how much those fines are. - -56 -00:02:44,390 --> 00:02:46,340 ->> And how do you compute how much it is? - -57 -00:02:47,420 --> 00:02:52,710 ->> It's how many days it was, from the time it was - -58 -00:02:52,710 --> 00:02:58,170 -due, to when they returned it. I see. OK. - -59 -00:02:58,170 --> 00:03:00,380 -So you know what we can do? I think - -60 -00:03:00,380 --> 00:03:03,690 -we can put an additional attribute in the checked out - -61 -00:03:03,690 --> 00:03:07,190 -class and I'm going to call it when returned and - -62 -00:03:07,190 --> 00:03:10,200 -that item will have either a special value or it - -63 -00:03:10,200 --> 00:03:12,040 -will contain the date in which the book was - -64 -00:03:12,040 --> 00:03:14,520 -returned. So in this way you should be able to - -65 -00:03:14,520 --> 00:03:18,040 -keep this in the system until it's paid, and also to compute - -66 -00:03:18,040 --> 00:03:19,970 -how much the fine is. Is that working? - -67 -00:03:19,970 --> 00:03:23,210 ->> So the special value is for a normal situation when they - -68 -00:03:23,210 --> 00:03:25,880 -haven't, they don't owe anything and haven't returned it yet. - -69 -00:03:25,880 --> 00:03:28,080 ->> Exactly so that will tell us that, - -70 -00:03:28,080 --> 00:03:29,970 -that the loan is still active basically. - -71 -00:03:29,970 --> 00:03:30,500 ->> Great. - -72 -00:03:30,500 --> 00:03:31,480 ->> Does that work for you? - -73 -00:03:31,480 --> 00:03:35,200 ->> Yes. And you know, I like this. I mean, I feel pretty good - -74 -00:03:35,200 --> 00:03:38,490 -about it. I think we have a nice class diagram. So what I'd like to - -75 -00:03:38,490 --> 00:03:43,280 -do is just go off and clean it up a little bit, and put it - -76 -00:03:43,280 --> 00:03:48,640 -in an IDE so I can pretty print it and rearrange things a little bit. - -77 -00:03:48,640 --> 00:03:50,080 -And then I'd like to sit down again and - -78 -00:03:50,080 --> 00:03:52,730 -just go through it for a last time. And - -79 -00:03:52,730 --> 00:03:54,900 -for some final considerations. So if you don't mind - -80 -00:03:54,900 --> 00:03:56,880 -we will take a ten minute break and reconvene here. - -81 -00:03:56,880 --> 00:03:57,500 ->> That's fine. - -82 -00:03:57,500 --> 00:03:57,990 ->> Alright. - diff --git a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/9 - Final Considerations - lang_en.srt b/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/9 - Final Considerations - lang_en.srt deleted file mode 100644 index 0dbfccd..0000000 --- a/usth/ICT2.7/P3L2 A Tale of Analysis and Design Subtitles/9 - Final Considerations - lang_en.srt +++ /dev/null @@ -1,196 +0,0 @@ -1 -00:00:00,140 --> 00:00:03,202 -Okay. So this is what I've done as you see, - -2 -00:00:03,202 --> 00:00:06,130 -it looks a little nicer than it was before. And I didn't - -3 -00:00:06,130 --> 00:00:08,530 -really change that much. I just made a few changes, so - -4 -00:00:08,530 --> 00:00:11,560 -I just wanted to point them out to you, so that you - -5 -00:00:11,560 --> 00:00:13,690 -know what they are. And the main thing, one of the - -6 -00:00:13,690 --> 00:00:18,210 -main things I did is really to introduce these derived attributes. So - -7 -00:00:18,210 --> 00:00:19,860 -these are attributes that are basically - -8 -00:00:19,860 --> 00:00:22,520 -computed. Based on some other attributes. - -9 -00:00:22,520 --> 00:00:26,010 -Okay, they don't have a value themselves, but their value is computed. - -10 -00:00:26,010 --> 00:00:28,900 -And I used two. The first one is age. So - -11 -00:00:28,900 --> 00:00:31,930 -basically we know the age of the patron based on - -12 -00:00:31,930 --> 00:00:34,920 -the birthday, of the patron. So you guys, I don't - -13 -00:00:34,920 --> 00:00:37,150 -know if you have that information currently in the system. - -14 -00:00:37,150 --> 00:00:38,480 ->> No, we'll have to add that to the - -15 -00:00:38,480 --> 00:00:40,280 -form patrons fill out, when they get their card. - -16 -00:00:40,280 --> 00:00:42,255 ->> Is that, that an issue? Can you do it? - -17 -00:00:42,255 --> 00:00:44,130 ->> No yes, we, we can easily do that. - -18 -00:00:44,130 --> 00:00:46,670 ->> Okay, so then, perfect. So we'll do it that way. I think it's - -19 -00:00:46,670 --> 00:00:51,310 -a, in a little cleaner. And similarly, since you told me that the fine - -20 -00:00:51,310 --> 00:00:54,480 -was computed based on the amount of days that an - -21 -00:00:54,480 --> 00:00:58,310 -item was late. The patron was late returning the item, then I - -22 -00:00:58,310 --> 00:01:02,010 -also added this as a derived attribute that is computed based on - -23 -00:01:02,010 --> 00:01:05,140 -the due date and when the item is actually returned. - -24 -00:01:05,140 --> 00:01:05,780 ->> Makes sense. - -25 -00:01:05,780 --> 00:01:08,389 ->> Makes sense? Okay. And the rest - -26 -00:01:08,389 --> 00:01:10,590 -is kind of really minor things. So the, the only one I - -27 -00:01:10,590 --> 00:01:14,340 -want to point out is I didn't, you know, discuss that with - -28 -00:01:14,340 --> 00:01:17,260 -you before, but I added this, which is called cardinality - -29 -00:01:17,260 --> 00:01:20,700 -for some of these relationships. And what they say is basically - -30 -00:01:20,700 --> 00:01:25,360 -is how many elements are involved in the relationship. - -31 -00:01:25,360 --> 00:01:26,580 ->> So, you mean the stars? - -32 -00:01:26,580 --> 00:01:27,960 ->> Yeah, like the stars and the one... - -33 -00:01:27,960 --> 00:01:28,290 ->> Okay. - -34 -00:01:28,290 --> 00:01:31,380 ->> Here for example, this is telling you that for each item there - -35 -00:01:31,380 --> 00:01:35,490 -is only one title. And that for each title, there are multiple items. - -36 -00:01:35,490 --> 00:01:36,490 ->> So, star means many. - -37 -00:01:36,490 --> 00:01:37,716 ->> Stars mean many, yeah. - -38 -00:01:37,716 --> 00:01:39,045 ->> Okay, go you. - -39 -00:01:39,045 --> 00:01:42,321 ->> Sorry that's kind of computer science lingo - we use the star - -40 -00:01:42,321 --> 00:01:45,500 -for that kind of stuff. And, similarly, for the patron, it's - -41 -00:01:45,500 --> 00:01:48,510 -telling me that, you know, each patron can have multiple, can - -42 -00:01:48,510 --> 00:01:52,550 -request multiple titles, and that the same title can be requested - -43 -00:01:52,550 --> 00:01:55,650 -by multiple patrons, which I think is the way the system works. - -44 -00:01:55,650 --> 00:01:59,080 ->> Right. So except for these minor changes, - -45 -00:01:59,080 --> 00:02:01,850 -we already had a pretty good model in our hands, so - -46 -00:02:01,850 --> 00:02:04,620 -I think is a, we can finalize this and then just - -47 -00:02:04,620 --> 00:02:07,350 -move to the low level design and then implementation, and be - -48 -00:02:07,350 --> 00:02:07,970 -done with the system. - -49 -00:02:07,970 --> 00:02:08,979 ->> Sounds good. - diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 152b961..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,230 --> 00:00:04,560 -In the last lesson, we talked about design, and we saw how difficult it can - -2 -00:00:04,560 --> 00:00:10,010 -be to come up with a good and effective design for a given software system. To - -3 -00:00:10,010 --> 00:00:12,620 -help address these difficulties, we will discuss - -4 -00:00:12,620 --> 00:00:16,560 -design patterns, which can support design activities by - -5 -00:00:16,560 --> 00:00:20,710 -providing general, reusable solutions to commonly occurring design - -6 -00:00:20,710 --> 00:00:25,410 -problems. Similar to architectural styles, design patterns can - -7 -00:00:25,410 --> 00:00:30,400 -help developers build better designed systems by reusing design solutions that - -8 -00:00:30,400 --> 00:00:33,730 -worked well in the past and by building on those solutions. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/10 - Choosing a Pattern - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/10 - Choosing a Pattern - lang_en_vs5.srt deleted file mode 100644 index f273441..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/10 - Choosing a Pattern - lang_en_vs5.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,150 --> 00:00:03,200 -But with so many patterns, how do we choose a pattern? So - -2 -00:00:03,200 --> 00:00:05,970 -this is a possible approach that you can follow. First of all, you - -3 -00:00:05,970 --> 00:00:09,140 -want to make sure that you understand your design context. You understand - -4 -00:00:09,140 --> 00:00:12,800 -what you're designing and what are the issues involved with this design. What - -5 -00:00:12,800 --> 00:00:15,200 -are the problems that you need to solve. At this point, you - -6 -00:00:15,200 --> 00:00:17,160 -can examine the patterns catalog, or,if - -7 -00:00:17,160 --> 00:00:18,750 -you're already familiar with the catalog, just - -8 -00:00:18,750 --> 00:00:22,430 -think about the possible patterns that you could use. Once you identify - -9 -00:00:22,430 --> 00:00:25,440 -the patterns that you can use, you also want to study them and - -10 -00:00:25,440 --> 00:00:29,090 -study the related patterns. So normally if you look at any pattern catalog, - -11 -00:00:29,090 --> 00:00:32,229 -for each pattern there will also be a list of related patterns. So - -12 -00:00:32,229 --> 00:00:35,010 -you can also look at those to see whether maybe some of those - -13 -00:00:35,010 --> 00:00:38,370 -might be more applicable. And finally, once you identify the pattern that you - -14 -00:00:38,370 --> 00:00:41,360 -think is appropriate, you will apply that pattern. When you do that, just - -15 -00:00:41,360 --> 00:00:44,850 -be mindful that there are pitfalls in the use of patterns. One obvious - -16 -00:00:44,850 --> 00:00:47,490 -one is the fact that you might select the wrong pattern and make - -17 -00:00:47,490 --> 00:00:50,460 -your design worse instead of better. The second one is that if you - -18 -00:00:50,460 --> 00:00:52,560 -get too excited about patterns, then you - -19 -00:00:52,560 --> 00:00:54,850 -might be abusing patterns, so just using too - -20 -00:00:54,850 --> 00:00:56,370 -many patterns, and end up with a design - -21 -00:00:56,370 --> 00:00:58,980 -that is more complicated rather than less complicated. - -22 -00:00:58,980 --> 00:01:01,890 -So always be careful, spend the time to figure out which one is the right - -23 -00:01:01,890 --> 00:01:03,577 -pattern to apply, and make sure that you - -24 -00:01:03,577 --> 00:01:05,190 -don't use patterns that you don't actually need. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/11 - Choosing a Pattern Quiz - lang_en_vs4.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/11 - Choosing a Pattern Quiz - lang_en_vs4.srt deleted file mode 100644 index 76a78e0..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/11 - Choosing a Pattern Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,780 -Now that we've discussed how to choose a pattern. Imagine that - -2 -00:00:02,780 --> 00:00:05,210 -you have to write a class that can have only one - -3 -00:00:05,210 --> 00:00:08,090 -instance. So to satisfy this requirement, I would like for you - -4 -00:00:08,090 --> 00:00:10,720 -to pick one of the design patterns that we discussed in - -5 -00:00:10,720 --> 00:00:14,580 -this lesson, and write the code here that satisfies that requirement. - -6 -00:00:14,580 --> 00:00:16,270 -And when you write the code, please make sure that your - -7 -00:00:16,270 --> 00:00:21,140 -class has only one method, without counting possible constructors, and that - -8 -00:00:21,140 --> 00:00:25,120 -the class is called Singleton. And write your class right here. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/12 - Choosing a Pattern Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/12 - Choosing a Pattern Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index c348a2c..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/12 - Choosing a Pattern Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,220 --> 00:00:01,750 -As we discussed in the class the right thing to - -2 -00:00:01,750 --> 00:00:05,050 -do here was to use the factory pattern. So here is - -3 -00:00:05,050 --> 00:00:07,910 -a possible code to solve the problem. Of course that there - -4 -00:00:07,910 --> 00:00:11,220 -are different possible solutions. So what we did for this code - -5 -00:00:11,220 --> 00:00:16,210 -was to first create a private, static, Singleton object called - -6 -00:00:16,210 --> 00:00:19,340 -instance, which is the one that will keep track of the - -7 -00:00:19,340 --> 00:00:22,250 -only instance that can be created on the class. Then we - -8 -00:00:22,250 --> 00:00:25,750 -define the default constructor, the constructor that doesn't take any parameter - -9 -00:00:25,750 --> 00:00:29,900 -as private. In this way other classes cannot create instances - -10 -00:00:29,900 --> 00:00:33,310 -of Singleton without calling our factory method, and finally we - -11 -00:00:33,310 --> 00:00:35,650 -create the factory method. And the factory method is very - -12 -00:00:35,650 --> 00:00:38,600 -simple. The method will first check whether an instance of - -13 -00:00:38,600 --> 00:00:40,970 -the class was already created. If it was created, it - -14 -00:00:40,970 --> 00:00:44,010 -would just return that instance. Otherwise, it will create a - -15 -00:00:44,010 --> 00:00:47,550 -new instance and assign it to that instance member variable - -16 -00:00:47,550 --> 00:00:50,960 -and then return the newly created instance. So with this code - -17 -00:00:50,960 --> 00:00:53,540 -you're guaranteed that other classes cannot bypass the factory - -18 -00:00:53,540 --> 00:00:56,530 -method, because the default constructor is private. And the that - -19 -00:00:56,530 --> 00:00:59,600 -the factory method will create one and only one instance - -20 -00:00:59,600 --> 00:01:02,020 -of the class, which is exactly what our requirements were. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/13 - Negative Design Patterns - lang_en_vs4.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/13 - Negative Design Patterns - lang_en_vs4.srt deleted file mode 100644 index 6433019..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/13 - Negative Design Patterns - lang_en_vs4.srt +++ /dev/null @@ -1,51 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,210 -To conclude this lesson, I want to discuss the - -2 -00:00:02,210 --> 00:00:06,170 -concept of negative design patterns, that is, patterns that should - -3 -00:00:06,170 --> 00:00:09,600 -be avoided. Interestingly, negative patterns were also mentioned in - -4 -00:00:09,600 --> 00:00:12,950 -Christopher Alexander's book, so in the first formulation of patterns. - -5 -00:00:12,950 --> 00:00:16,219 -So negative design pattern are basically guidelines on how - -6 -00:00:16,219 --> 00:00:19,689 -not to do things. In consoles with patterns, the guidelines - -7 -00:00:19,689 --> 00:00:21,920 -on how to do things. So basically, what the negative - -8 -00:00:21,920 --> 00:00:25,170 -design patterns do is, they enable recurring design defects to - -9 -00:00:25,170 --> 00:00:28,070 -be avoided. And as we will see in this class extensively, - -10 -00:00:28,070 --> 00:00:30,080 -in mini-course four, negative patterns are - -11 -00:00:30,080 --> 00:00:33,380 -also called anti-patterns or bad smells, - -12 -00:00:33,380 --> 00:00:36,540 -or bad code smells. So in mini-course four we will see several - -13 -00:00:36,540 --> 00:00:39,480 -examples of bad smells and what we can do to eliminate them. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/2 - History of Design Patterns - lang_en_vs6.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/2 - History of Design Patterns - lang_en_vs6.srt deleted file mode 100644 index 5fbb886..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/2 - History of Design Patterns - lang_en_vs6.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,780 -Let's start our decision of design patterns by looking - -2 -00:00:02,780 --> 00:00:05,280 -at the history of patterns. As you know, I like - -3 -00:00:05,280 --> 00:00:07,810 -to give this sort of historical perspective on how and - -4 -00:00:07,810 --> 00:00:10,600 -when concepts were defined. In this case, we have to - -5 -00:00:10,600 --> 00:00:14,830 -go back to 1977, when Christopher Alexander, an American professor - -6 -00:00:14,830 --> 00:00:18,300 -of architecture at UC Berkeley, introduces the idea of patterns, - -7 -00:00:18,300 --> 00:00:21,700 -successful solutions to problems, in his book called a Pattern - -8 -00:00:21,700 --> 00:00:25,640 -Language. The book contains about 250 patterns. And the idea - -9 -00:00:25,640 --> 00:00:27,700 -is that occupants of a building should be able - -10 -00:00:27,700 --> 00:00:30,110 -to design it. And the patterns in the book provide - -11 -00:00:30,110 --> 00:00:32,368 -a way to do that. And this idea of design - -12 -00:00:32,368 --> 00:00:35,964 -patterns, so, a formal way of documenting successful solutions to - -13 -00:00:35,964 --> 00:00:41,200 -problems, inspired several other disciplines. In particular, in 1987, - -14 -00:00:41,200 --> 00:00:44,810 -Ward Cunningham and Kent Beck leveraged this idea of Alexander's - -15 -00:00:44,810 --> 00:00:48,360 -patterns in the context of an object oriented language. - -16 -00:00:48,360 --> 00:00:50,840 -And in this specific the language was Smalltalk. - -17 -00:00:50,840 --> 00:00:52,666 -Some of you might know the language. So what Cunningham - -18 -00:00:54,492 --> 00:00:56,320 -and Beck did, was to create a 5 pattern - -19 -00:00:56,320 --> 00:00:59,880 -language for guiding novice Smalltalk programmers. So they did - -20 -00:00:59,880 --> 00:01:03,090 -an experiment and had several developers using their patterns, and - -21 -00:01:03,090 --> 00:01:06,330 -the experiment was extremely successful. The users were able to - -22 -00:01:06,330 --> 00:01:09,940 -create elegant designs using the provided patterns. And in case - -23 -00:01:09,940 --> 00:01:12,210 -you are interested in reading about it, Cunningham and Beck - -24 -00:01:12,210 --> 00:01:15,660 -reported the results in the article, Using Pattern Languages for - -25 -00:01:15,660 --> 00:01:17,940 -Object Oriented Programs, which was published at the - -26 -00:01:17,940 --> 00:01:21,854 -International Conference on Object Oriented Programming, Systems, Languages, and - -27 -00:01:21,854 --> 00:01:25,390 -Applications, also called OOPSLA, in 1987. At the - -28 -00:01:25,390 --> 00:01:28,480 -same time, Eric Gamma was working on his dissertation, - -29 -00:01:28,480 --> 00:01:31,030 -whose topic was the importance of patterns and - -30 -00:01:31,030 --> 00:01:34,430 -how to capture them. Between 1987 and 1992, there - -31 -00:01:34,430 --> 00:01:37,520 -were several workshops related to design patterns. And - -32 -00:01:37,520 --> 00:01:40,740 -in 1992, Jim Coplien compiled a catalog of C++ - -33 -00:01:40,740 --> 00:01:43,140 -items, which are some sort of patterns, and - -34 -00:01:43,140 --> 00:01:45,130 -he listed this catalog of patterns in his - -35 -00:01:45,130 --> 00:01:48,720 -book, which was titled Advanced C++ Programming Styles - -36 -00:01:48,720 --> 00:01:52,952 -and Idioms. Finally, in 1993 and 1994, there were - -37 -00:01:52,952 --> 00:01:56,160 -several additional workshops focused on patterns. And this - -38 -00:01:56,160 --> 00:01:59,625 -workshop brought together many patterns folks, including these - -39 -00:01:59,625 --> 00:02:03,040 -4 guys, Erich Gamma, Richard Helm, Ralph Johnson, - -40 -00:02:03,040 --> 00:02:06,040 -and John Vlissides. These guys are also known as - -41 -00:02:06,040 --> 00:02:08,970 -the gang of 4. And the result of this collaboration was the - -42 -00:02:08,970 --> 00:02:11,840 -famous book Design Patterns: Elements of - -43 -00:02:11,840 --> 00:02:14,320 -Reusable Object Oriented Software. So this - -44 -00:02:14,320 --> 00:02:17,640 -is basically The Book on design patterns. If you want to buy - -45 -00:02:17,640 --> 00:02:19,780 -a book on design pattern, this is the one you should get. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/3 - Patterns Catalogue - lang_en_vs4.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/3 - Patterns Catalogue - lang_en_vs4.srt deleted file mode 100644 index 764a309..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/3 - Patterns Catalogue - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,230 --> 00:00:03,380 -This book contains a patterns catalog which is - -2 -00:00:03,380 --> 00:00:06,725 -a number of design patterns classified by purpose. And - -3 -00:00:06,725 --> 00:00:09,122 -there are five main classes of patterns. There are - -4 -00:00:09,122 --> 00:00:11,890 -fundamental patterns which are the basic patterns. There are - -5 -00:00:11,890 --> 00:00:15,170 -creational patterns which are the patterns that support object - -6 -00:00:15,170 --> 00:00:18,290 -creation. Then there are structural patterns and these are - -7 -00:00:18,290 --> 00:00:22,090 -patterns that help compose objects, put objects together. The - -8 -00:00:22,090 --> 00:00:25,280 -next class of patterns are behavioral patterns and these - -9 -00:00:25,280 --> 00:00:28,840 -are patterns that are mostly focused on realizing interactions - -10 -00:00:28,840 --> 00:00:32,820 -among different objects. Finally, there are concurrency patterns and these - -11 -00:00:32,820 --> 00:00:36,400 -are patterns that support, as the name says, concurrency, so - -12 -00:00:36,400 --> 00:00:39,700 -they're more related to concurrency aspects. And for each of - -13 -00:00:39,700 --> 00:00:43,560 -these classes there are a number of specific patterns, and - -14 -00:00:43,560 --> 00:00:46,130 -here I'm just listing some of them. Clearly we cannot - -15 -00:00:46,130 --> 00:00:48,740 -cover in one lesson all of these patterns, but what - -16 -00:00:48,740 --> 00:00:50,440 -I want to do is to cover at least a few - -17 -00:00:50,440 --> 00:00:52,670 -of those to give an idea of what patterns are and - -18 -00:00:52,670 --> 00:00:55,430 -how they can be used. In particular, we will see in - -19 -00:00:55,430 --> 00:00:59,200 -detail the Factory Method Pattern and the Strategy Pattern. And we - -20 -00:00:59,200 --> 00:01:01,590 -will also discuss a few more patterns at a higher level. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/4 - Pattern Format - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/4 - Pattern Format - lang_en_vs5.srt deleted file mode 100644 index 7df86c0..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/4 - Pattern Format - lang_en_vs5.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,180 --> 00:00:02,711 -So let's start by seeing how patterns are defined. So - -2 -00:00:02,711 --> 00:00:05,620 -what is the format of the pattern definitions. If we look - -3 -00:00:05,620 --> 00:00:08,000 -at the Gang of Four's book we can see that these - -4 -00:00:08,000 --> 00:00:11,630 -definitions contain a lot of information. In fact, what I'm listing - -5 -00:00:11,630 --> 00:00:14,980 -here is just a subset of this information. In this lesson, - -6 -00:00:14,980 --> 00:00:17,510 -what I want to do is to focus on four essential - -7 -00:00:17,510 --> 00:00:21,480 -elements of a design pattern. It's name, the intent which is - -8 -00:00:21,480 --> 00:00:25,270 -the goal of the pattern. The pattern's applicability which is the - -9 -00:00:25,270 --> 00:00:28,040 -list of situations or context in which the - -10 -00:00:28,040 --> 00:00:31,560 -pattern is applicable. I also want to cover the structure - -11 -00:00:31,560 --> 00:00:34,700 -and participants. Which is the static model that describes - -12 -00:00:34,700 --> 00:00:37,870 -the elements, so normally the classes or the object - -13 -00:00:37,870 --> 00:00:39,900 -involved in the pattern. In addition to that - -14 -00:00:39,900 --> 00:00:41,400 -the structure also describes - -15 -00:00:41,400 --> 00:00:44,420 -the relationships, responsibilities and collaborations - -16 -00:00:44,420 --> 00:00:47,264 -among these classes or objects. Finally what I want - -17 -00:00:47,264 --> 00:00:50,560 -to cover is sample code. So examples that illustrate - -18 -00:00:50,560 --> 00:00:51,490 -the use of patterns. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/5 - Factory Method Pattern - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/5 - Factory Method Pattern - lang_en_vs5.srt deleted file mode 100644 index c7ebddd..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/5 - Factory Method Pattern - lang_en_vs5.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,012 --> 00:00:02,350 -Let's now look at the first design pattern that we - -2 -00:00:02,350 --> 00:00:05,700 -will discuss, the factory method pattern. And I'm going to start - -3 -00:00:05,700 --> 00:00:09,220 -by discussing the intent of the pattern and its applicability. - -4 -00:00:09,220 --> 00:00:12,210 -As far as the intent is concerned, the factory method pattern - -5 -00:00:12,210 --> 00:00:16,690 -allows for creating objects without specifying their class, by invoking - -6 -00:00:16,690 --> 00:00:19,370 -what we call a factory method. And what that is, is - -7 -00:00:19,370 --> 00:00:22,680 -a method whose main goal is to create class instances. - -8 -00:00:22,680 --> 00:00:25,510 -So when is this pattern useful? So when is it applicable? - -9 -00:00:25,510 --> 00:00:28,080 -For example, it is applicable in cases in which a class - -10 -00:00:28,080 --> 00:00:31,890 -cannot anticipate the type of object it must create. That is, - -11 -00:00:31,890 --> 00:00:34,800 -the type of an object is not known at compile time, - -12 -00:00:34,800 --> 00:00:37,800 -is not known until the code runs. A typical example of - -13 -00:00:37,800 --> 00:00:40,500 -this, are frameworks. So if you ever used a framework, you - -14 -00:00:40,500 --> 00:00:44,280 -will know that, normally, frameworks only know about interfaces and abstract - -15 -00:00:44,280 --> 00:00:47,450 -classes. So the exact type of the objects of these classes - -16 -00:00:47,450 --> 00:00:50,840 -is only known at runtime. The second case in which the factory - -17 -00:00:50,840 --> 00:00:53,835 -method pattern is applicable, is when a class wants its - -18 -00:00:53,835 --> 00:00:57,160 -subclasses to specify the type of objects it creates. And we'll - -19 -00:00:57,160 --> 00:00:59,920 -see an example of this in a minute. Finally, factory - -20 -00:00:59,920 --> 00:01:03,580 -method patterns are applicable when a class needs control over the - -21 -00:01:03,580 --> 00:01:06,760 -creation of its objects. And in this case, one possible - -22 -00:01:06,760 --> 00:01:09,380 -example is when there is a limit on the number of - -23 -00:01:09,380 --> 00:01:12,930 -objects that can be created. Special example, it's a singleton. If - -24 -00:01:12,930 --> 00:01:15,840 -you're familiar with a singleton, a singleton is a class for - -25 -00:01:15,840 --> 00:01:18,930 -which only one instance can be created. The factory method pattern - -26 -00:01:18,930 --> 00:01:21,760 -is perfect in these cases, because it allows to control how many - -27 -00:01:21,760 --> 00:01:24,640 -objects get created. So in this case, it would allow the creation - -28 -00:01:24,640 --> 00:01:27,290 -only of a single object. And from the second time that it - -29 -00:01:27,290 --> 00:01:30,040 -is invoked, it will just return the object that was previously - -30 -00:01:30,040 --> 00:01:33,700 -created. Now let's go ahead and see how this pattern actually works, - -31 -00:01:33,700 --> 00:01:37,100 -and let's do that by discussing the structure and the participants for - -32 -00:01:37,100 --> 00:01:41,330 -the pattern. The structure that is represented here, using the UML notation, - -33 -00:01:41,330 --> 00:01:45,530 -includes three classes, the Creator, the ConcreteCreator, - -34 -00:01:45,530 --> 00:01:48,000 -and the Product. The Creator provides the - -35 -00:01:48,000 --> 00:01:50,710 -interface for the factory method. So this - -36 -00:01:50,710 --> 00:01:53,200 -here, is the interface for the factory method - -37 -00:01:53,200 --> 00:01:55,950 -that, when invoked, returns an object of - -38 -00:01:55,950 --> 00:01:59,440 -type Product. The ConcreteCreator provides the actual - -39 -00:01:59,440 --> 00:02:02,350 -method for creating the Product. So this - -40 -00:02:02,350 --> 00:02:06,170 -method is a concrete implementation of this interface. - -41 -00:02:06,170 --> 00:02:10,630 -Finally, the Product is the object created by the factory method. So - -42 -00:02:10,630 --> 00:02:12,350 -summarizing, we have the interface for - -43 -00:02:12,350 --> 00:02:14,300 -the factory method, the actual implementation of - -44 -00:02:14,300 --> 00:02:17,540 -the summary method, and the object that is created by the factory method, - -45 -00:02:17,540 --> 00:02:21,020 -when it is invoked. So let's look at an example of this pattern. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/6 - Factory Method Pattern Example - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/6 - Factory Method Pattern Example - lang_en_vs5.srt deleted file mode 100644 index 2812c39..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/6 - Factory Method Pattern Example - lang_en_vs5.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,220 --> 00:00:03,260 -The example I'm going to use consists of a class called - -2 -00:00:03,260 --> 00:00:07,380 -ImageReaderFactory which provides the factory method which is this one; - -3 -00:00:07,380 --> 00:00:10,250 -createImageReader. As you can see the method takes an InputStream - -4 -00:00:10,250 --> 00:00:13,570 -as input and returns an object of type ImageReader, and it's - -5 -00:00:13,570 --> 00:00:15,645 -static so that we can invoke it even if we - -6 -00:00:15,645 --> 00:00:18,390 -don't have an instance of the ImageReaderFactory. So what does the - -7 -00:00:18,390 --> 00:00:22,275 -method do? Well the method first invokes, getImageType, passing the - -8 -00:00:22,275 --> 00:00:25,780 -InputStream as a parameter and this method figures out the type - -9 -00:00:25,780 --> 00:00:28,820 -of the image that is stored in this Inputstream and it's - -10 -00:00:28,820 --> 00:00:32,740 -an integer. Then, based on the value of this integer, the - -11 -00:00:32,740 --> 00:00:35,352 -method does one of several things. If the image type is - -12 -00:00:35,352 --> 00:00:38,970 -a GIF, it will invoke the constructor for GifReader passing the - -13 -00:00:38,970 --> 00:00:41,610 -stream as a parameter. And what will happen is that the - -14 -00:00:41,610 --> 00:00:44,450 -GIF reader will read a GIF from the stream, create a - -15 -00:00:44,450 --> 00:00:47,887 -corresponding object and return it. So in this case, the ImageReader - -16 -00:00:47,887 --> 00:00:51,460 -object return will be the object representing a GIF as appropriate. - -17 -00:00:51,460 --> 00:00:54,610 -Similarly, if the image type is JPEG, then the method will - -18 -00:00:54,610 --> 00:00:58,579 -invoke the constructor for JPEG Reader and in this case, this constructor - -19 -00:00:58,579 --> 00:01:01,981 -will read from the stream a JPEG, create a corresponding object - -20 -00:01:01,981 --> 00:01:05,640 -and return it. And so on for different types of images. So - -21 -00:01:05,640 --> 00:01:07,880 -why is this a situation in which it is appropriate to - -22 -00:01:07,880 --> 00:01:11,100 -use the factory method pattern? One, because it corresponds exactly to the - -23 -00:01:11,100 --> 00:01:14,250 -cases that we saw before, of applicability. This is a case - -24 -00:01:14,250 --> 00:01:16,560 -in which we don't know the type of the object that we - -25 -00:01:16,560 --> 00:01:20,080 -need to create until we run the code, because it depends - -26 -00:01:20,080 --> 00:01:22,530 -on the value of the InputStream. It depends on the content - -27 -00:01:22,530 --> 00:01:25,590 -of the InputStream. So, until we read the InputStream, we cannot - -28 -00:01:25,590 --> 00:01:28,380 -figure out whether we need to create a GIF, a JPEG or - -29 -00:01:28,380 --> 00:01:30,780 -some other type of image. So in this case, we want to - -30 -00:01:30,780 --> 00:01:33,630 -do, we want to simply delegate to this classes the creation of - -31 -00:01:33,630 --> 00:01:35,610 -the object, once we know what type of object needs to - -32 -00:01:35,610 --> 00:01:38,790 -be created. So perfect example of application of a factory method pattern. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/7 - Strategy Pattern - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/7 - Strategy Pattern - lang_en_vs5.srt deleted file mode 100644 index 288b8d6..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/7 - Strategy Pattern - lang_en_vs5.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,230 --> 00:00:02,110 -The second pattern I want to discuss is the - -2 -00:00:02,110 --> 00:00:05,050 -strategy pattern, which provides a way to configure a - -3 -00:00:05,050 --> 00:00:07,900 -class with one of many behaviors. What does that - -4 -00:00:07,900 --> 00:00:11,040 -mean? Well, more precisely, this pattern allows for defining - -5 -00:00:11,040 --> 00:00:15,330 -a family of algorithms, encapsulating them into separate classes, - -6 -00:00:15,330 --> 00:00:17,900 -so each algorithm in one class, and making these - -7 -00:00:17,900 --> 00:00:21,490 -classes interchangeable, but providing a common interface for all - -8 -00:00:21,490 --> 00:00:25,350 -the encapsulated algorithms. So in essence, the intent of - -9 -00:00:25,350 --> 00:00:29,250 -a strategy pattern is to allow for switching between - -10 -00:00:29,250 --> 00:00:33,490 -different algorithms for accomplishing a given task. For example, imagine - -11 -00:00:33,490 --> 00:00:36,610 -having different sorting algorithms with different space or time - -12 -00:00:36,610 --> 00:00:38,800 -tradeoffs. You might want to be able to have them - -13 -00:00:38,800 --> 00:00:42,670 -all available and use different ones in different situations. - -14 -00:00:42,670 --> 00:00:44,820 -And this pattern is applicable not only when we have - -15 -00:00:44,820 --> 00:00:47,260 -different variants of an algorithm, but also when we - -16 -00:00:47,260 --> 00:00:51,690 -have many related classes that differ only in their behavior. - -17 -00:00:51,690 --> 00:00:53,640 -So let's get more concrete and see how this is - -18 -00:00:53,640 --> 00:00:55,960 -done. And I'm going to do it as before, by - -19 -00:00:55,960 --> 00:00:59,700 -discussing the structure and the participants for this strategy pattern. - -20 -00:00:59,700 --> 00:01:02,540 -In this case, we have 3 types of participants for this - -21 -00:01:02,540 --> 00:01:07,210 -pattern, the context, the algorithm, and the concrete strategies. There - -22 -00:01:07,210 --> 00:01:09,580 -can be as many as the number of behaviors that - -23 -00:01:09,580 --> 00:01:12,300 -I need to implement. So, let's see what those are. - -24 -00:01:12,300 --> 00:01:16,690 -The context is the interface to the outside world. It maintains - -25 -00:01:16,690 --> 00:01:19,180 -a reference to the current algorithm and allows for - -26 -00:01:19,180 --> 00:01:22,860 -updating this reference at run time. So, basically the outside - -27 -00:01:22,860 --> 00:01:26,370 -world will invoke the functionality provided by the different algorithms, - -28 -00:01:26,370 --> 00:01:29,170 -by using this interface. And depending on which algorithm is - -29 -00:01:29,170 --> 00:01:31,640 -currently selected, that's the one that will be executed when - -30 -00:01:31,640 --> 00:01:35,920 -the functionality is involved. The algorithm, also called the strategy, - -31 -00:01:35,920 --> 00:01:37,970 -so that's where the pattern gets its name, Is the - -32 -00:01:37,970 --> 00:01:42,130 -common interface for the different algorithims. So all the algorithms - -33 -00:01:42,130 --> 00:01:46,690 -implement this interface. Finally, the concrete strategies are the - -34 -00:01:46,690 --> 00:01:49,920 -actual implementations of the algorithms. So if I have 10 - -35 -00:01:49,920 --> 00:01:53,030 -different variants of my algorithm, I will implement 10 different - -36 -00:01:53,030 --> 00:01:56,550 -concrete strategies. They will all be implementations of this interface. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/8 - Strategy Pattern Example & Demo - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/8 - Strategy Pattern Example & Demo - lang_en_vs5.srt deleted file mode 100644 index 6d298d0..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/8 - Strategy Pattern Example & Demo - lang_en_vs5.srt +++ /dev/null @@ -1,511 +0,0 @@ -1 -00:00:00,130 --> 00:00:03,320 -Now let's see how this whole thing works in practice by - -2 -00:00:03,320 --> 00:00:06,800 -using an example. We're going to consider a program that takes as - -3 -00:00:06,800 --> 00:00:10,450 -input a text file and produce it as output, a filtered - -4 -00:00:10,450 --> 00:00:14,170 -file. So basically it outputs a subset of the content of - -5 -00:00:14,170 --> 00:00:16,928 -this text file based on some filter. And we're going to have - -6 -00:00:16,928 --> 00:00:19,440 -four different types of filters. So the first one is - -7 -00:00:19,440 --> 00:00:21,680 -not filtering which means that the whole content of the text - -8 -00:00:21,680 --> 00:00:25,320 -file will be produced on the output. The second filter will output - -9 -00:00:25,320 --> 00:00:27,990 -only words that starts with t. So you'll take the text file - -10 -00:00:27,990 --> 00:00:30,540 -and simply ignore all of the words that do not start with - -11 -00:00:30,540 --> 00:00:33,130 -t. So in the output we'll have only those words that starts - -12 -00:00:33,130 --> 00:00:36,030 -with letter t. The third filter will produce in the output only - -13 -00:00:36,030 --> 00:00:39,180 -words that are longer than five characters. So all the other words - -14 -00:00:39,180 --> 00:00:43,740 -will be simply disregarded. And finally, the four filter will produce as - -15 -00:00:43,740 --> 00:00:47,630 -output only words in the text file that are palindromes, and in - -16 -00:00:47,630 --> 00:00:50,590 -case you don't know what a palindrome is, a palindrome is a word - -17 -00:00:50,590 --> 00:00:52,700 -that is the same whether you read it from left - -18 -00:00:52,700 --> 00:00:55,800 -to right or from right to left. For example, the - -19 -00:00:55,800 --> 00:00:58,480 -word kayak, you can read it in this direction, or - -20 -00:00:58,480 --> 00:01:00,740 -in this direction, and it's exactly the same word. So - -21 -00:01:00,740 --> 00:01:03,560 -let's see how this program could be implemented using a - -22 -00:01:03,560 --> 00:01:05,980 -strategy pattern. And let's do it for real as a - -23 -00:01:05,980 --> 00:01:10,100 -demo. What we're looking at here is the editor page - -24 -00:01:10,100 --> 00:01:15,520 -for Eclipse, open with the strategy pattern implementation for our example. - -25 -00:01:15,520 --> 00:01:17,130 -So what I'm going to do is that, I'm going to look at a - -26 -00:01:17,130 --> 00:01:20,310 -different part of implementation. And you will see that, you know, despite - -27 -00:01:20,310 --> 00:01:23,420 -the fact that it's slightly longer, it's really fairly simple, it's kind - -28 -00:01:23,420 --> 00:01:26,230 -of a straightforward implementation of what we just saw. As I just - -29 -00:01:26,230 --> 00:01:29,820 -said, what we are doing is basically building the strategy patterns that - -30 -00:01:29,820 --> 00:01:34,330 -allows for changing the strategies with which we're filtering an input file. - -31 -00:01:34,330 --> 00:01:37,380 -And we have different strategies, we'll look at those in detail, and - -32 -00:01:37,380 --> 00:01:41,050 -we said that the three participants for this pattern are the context, - -33 -00:01:41,050 --> 00:01:43,650 -the algorithm, which is the general interface and then the concrete - -34 -00:01:43,650 --> 00:01:47,270 -strategies, which are the concrete implementations of this algorithm. So let's - -35 -00:01:47,270 --> 00:01:49,790 -start by looking at the context. Which is this class here. - -36 -00:01:49,790 --> 00:01:52,960 -And as you can see it contains a reference at the current - -37 -00:01:52,960 --> 00:01:56,240 -strategy. We call this the check strategy, which is basically our - -38 -00:01:56,240 --> 00:01:59,910 -filter, and when the context is created by default it sets a - -39 -00:01:59,910 --> 00:02:02,890 -strategy to the old strategy. The old strategy is the one - -40 -00:02:02,890 --> 00:02:06,380 -that accepts all the input, so basically it doesn't filter out anything. - -41 -00:02:06,380 --> 00:02:08,320 -And we said that the context is the interface to the - -42 -00:02:08,320 --> 00:02:10,889 -outside world, right? So it has to provide the outside world - -43 -00:02:10,889 --> 00:02:14,140 -with a way of selecting the strategy, the specific algorithm to - -44 -00:02:14,140 --> 00:02:16,850 -be used, and it does that in this case by providing - -45 -00:02:16,850 --> 00:02:21,360 -this change strategy method. This method takes a strategy as input, - -46 -00:02:21,360 --> 00:02:24,930 -and simply replaces the current strategy with the one specified as - -47 -00:02:24,930 --> 00:02:28,035 -a parameter. And at this point, the context also will perform - -48 -00:02:28,035 --> 00:02:31,830 -the filtering. The filtering is pretty straightforward, so what it does is - -49 -00:02:31,830 --> 00:02:34,620 -that it opens a file that is passed as a parameter - -50 -00:02:34,620 --> 00:02:37,450 -so that this the file, the input file to be filtered. And - -51 -00:02:37,450 --> 00:02:40,560 -then it reads the file line by line and then splits - -52 -00:02:40,560 --> 00:02:43,620 -the lines into its composing words and then for each word in - -53 -00:02:43,620 --> 00:02:46,480 -each line, what it will do, it will basically invoke the - -54 -00:02:46,480 --> 00:02:50,270 -check method in the current strategy, which is basically the filtering method - -55 -00:02:50,270 --> 00:02:53,580 -and if the check method returns true, which basically means that - -56 -00:02:53,580 --> 00:02:57,150 -the word should be printed, it prints the word. Otherwise, it'll just - -57 -00:02:57,150 --> 00:03:00,480 -skip it. So basically the filter will return false for all the - -58 -00:03:00,480 --> 00:03:03,470 -words that have to be filtered out. Okay? This is the basic - -59 -00:03:03,470 --> 00:03:06,770 -way in which context works. Let's see how this is used in - -60 -00:03:06,770 --> 00:03:10,660 -our main method. The main method simply creates the context, reads the input file - -61 -00:03:10,660 --> 00:03:12,910 -from the arguments, and then what he does is simply as a - -62 -00:03:12,910 --> 00:03:16,720 -demonstration, it will perform the filtering using all the different filters. So - -63 -00:03:16,720 --> 00:03:19,310 -starting from the default one, which is the one that basically doesn't - -64 -00:03:19,310 --> 00:03:22,150 -do any filtering that reports all words, then it will switch to the - -65 -00:03:22,150 --> 00:03:25,400 -algorithm, that only considers the words that start with t, and - -66 -00:03:25,400 --> 00:03:28,880 -it will do that by invoking a change strategy and passing this - -67 -00:03:28,880 --> 00:03:30,890 -strategy as the argument, and then - -68 -00:03:30,890 --> 00:03:32,760 -performing the actual filtering through context. - -69 -00:03:32,760 --> 00:03:35,040 -And it will do exactly the same for the strategy that only - -70 -00:03:35,040 --> 00:03:37,540 -prints words that are longer than five and the one that - -71 -00:03:37,540 --> 00:03:40,460 -only prints words that are palindromes. So now let's look at the - -72 -00:03:40,460 --> 00:03:44,090 -actual algorithm. This is the interface, the algorithm interface. And you can - -73 -00:03:44,090 --> 00:03:47,080 -see that the only thing that the interface provides is this method, - -74 -00:03:47,080 --> 00:03:49,760 -which is the check method, that takes a string as input and will - -75 -00:03:49,760 --> 00:03:52,470 -return a boolean. So, basically, it's the boolean that we were seeing before. - -76 -00:03:52,470 --> 00:03:55,010 -The one that is true for the words that have to be printed - -77 -00:03:55,010 --> 00:03:57,490 -and false for the ones that have to be filtered out. Now, we have - -78 -00:03:57,490 --> 00:04:01,250 -all the different implementations of the algorithm, the simplest one is the all - -79 -00:04:01,250 --> 00:04:05,110 -algorithm, the simple return is always true, so all the words will be printed. - -80 -00:04:05,110 --> 00:04:08,740 -The second one starts with t, and again, without looking at the details - -81 -00:04:08,740 --> 00:04:10,660 -of implementations that don't really matter, what - -82 -00:04:10,660 --> 00:04:12,390 -it does is basically check that - -83 -00:04:12,390 --> 00:04:15,111 -the first character is t, and returns true in that case and - -84 -00:04:15,111 --> 00:04:17,720 -false otherwise. Similarly, for the LongerThan5 - -85 -00:04:17,720 --> 00:04:19,380 -algorithm, also in this case, this - -86 -00:04:19,380 --> 00:04:23,000 -will implement the check strategy interface, and the check will be performed - -87 -00:04:23,000 --> 00:04:25,980 -by checking that the word is longer than five characters and returning - -88 -00:04:25,980 --> 00:04:29,440 -true in that case and false otherwise. And finally the Palindrome check - -89 -00:04:29,440 --> 00:04:32,240 -is a little more complicated, but basically it just checks whether the - -90 -00:04:32,240 --> 00:04:35,190 -word is a Palindrome and returns true in that case. Okay, so - -91 -00:04:35,190 --> 00:04:37,950 -as I said, it doesn't really matter too much what is the specific - -92 -00:04:37,950 --> 00:04:40,630 -implementations of these matters. What matters is that we have - -93 -00:04:40,630 --> 00:04:44,150 -a general interface for the algorithm and then any different concrete - -94 -00:04:44,150 --> 00:04:48,130 -implementations of the algorithm that implement different strategies. So again, - -95 -00:04:48,130 --> 00:04:50,730 -this allows you to change the behavior of your class without - -96 -00:04:50,730 --> 00:04:53,420 -changing class. So we have this context class that does - -97 -00:04:53,420 --> 00:04:57,015 -different things when the filter method in invoked, depending on what - -98 -00:04:57,015 --> 00:04:59,930 -is the current strategy. So the behavior of the class can - -99 -00:04:59,930 --> 00:05:03,310 -change dynamically, and it changes dynamically every time that we change - -100 -00:05:03,310 --> 00:05:06,300 -the strategy. At this point, the way this whole thing works should - -101 -00:05:06,300 --> 00:05:08,430 -be clear, so what we're going to do is that we're going to go to - -102 -00:05:08,430 --> 00:05:12,010 -our console, and we're actually going to run the strategy pattern and see - -103 -00:05:12,010 --> 00:05:15,710 -what happens. So here I have a file, it's called foo.txt. And if - -104 -00:05:15,710 --> 00:05:18,290 -we look at the content of foo, you can see that it - -105 -00:05:18,290 --> 00:05:21,190 -says that this is just a test to assess how well this program - -106 -00:05:21,190 --> 00:05:24,430 -performs when used on files of text. And since it checks for - -107 -00:05:24,430 --> 00:05:28,560 -palindromes, we will also insert one such word, level. Level is a palindrome, - -108 -00:05:28,560 --> 00:05:31,042 -because you can read it from both sides. Okay, so let's - -109 -00:05:31,042 --> 00:05:33,657 -see what happens when we run our code. So we're going to - -110 -00:05:33,657 --> 00:05:36,900 -run java pattern.strategy.StrategyPattern which is - -111 -00:05:36,900 --> 00:05:38,550 -our class, and we going to fetch - -112 -00:05:38,550 --> 00:05:41,460 -foo.txt as an input, and let's go back to the beginning - -113 -00:05:41,460 --> 00:05:43,980 -of the output to see what happened exactly. You can see - -114 -00:05:43,980 --> 00:05:48,040 -here that for the default strategy, which was the old strategy, - -115 -00:05:48,040 --> 00:05:50,810 -the whole file is printed, so every word is printed. This - -116 -00:05:50,810 --> 00:05:53,485 -is just a test to assess and so on and so forth, - -117 -00:05:53,485 --> 00:05:57,290 -as expected. For the filter that only prints words that - -118 -00:05:57,290 --> 00:06:00,230 -start with t, only words that start with t are printed, - -119 -00:06:00,230 --> 00:06:04,180 -again, as expected. Similarly, for the filter that only prints words - -120 -00:06:04,180 --> 00:06:06,970 -that are longer than 5, and finally for the one that prints - -121 -00:06:06,970 --> 00:06:09,540 -palindromes. And here you can see that we actually have two - -122 -00:06:09,540 --> 00:06:12,410 -because the way in which this is implemented we'll also consider - -123 -00:06:12,410 --> 00:06:15,300 -single letter words as palindromes because you can read them from - -124 -00:06:15,300 --> 00:06:18,450 -both sides. But you definitely will also have level in the output. - -125 -00:06:18,450 --> 00:06:21,040 -And in case you want to play with this code yourself, I - -126 -00:06:21,040 --> 00:06:24,600 -have made this code and also the implementation for examples of other - -127 -00:06:24,600 --> 00:06:28,440 -design partners available as a compressed archive. And the archive is accessible - -128 -00:06:28,440 --> 00:06:31,120 -through a URL that is provided in the notes for the cost. diff --git a/usth/ICT2.7/P3L3 Design Patterns Subtitles/9 - Other Common Patterns - lang_en_vs5.srt b/usth/ICT2.7/P3L3 Design Patterns Subtitles/9 - Other Common Patterns - lang_en_vs5.srt deleted file mode 100644 index 756f38f..0000000 --- a/usth/ICT2.7/P3L3 Design Patterns Subtitles/9 - Other Common Patterns - lang_en_vs5.srt +++ /dev/null @@ -1,295 +0,0 @@ -1 -00:00:00,060 --> 00:00:03,460 -Before concluding this lesson, let's look at a few more patterns. And - -2 -00:00:03,460 --> 00:00:05,880 -although it will take too long to cover them in detail, I - -3 -00:00:05,880 --> 00:00:08,986 -would like to at least mention and quickly discuss a few more - -4 -00:00:08,986 --> 00:00:12,080 -of these more commonly-used patterns. In fact, some of the patterns that - -5 -00:00:12,080 --> 00:00:15,400 -I will discuss, you might have used yourself. Maybe without knowing their - -6 -00:00:15,400 --> 00:00:18,300 -name or the fact that they were design patterns. So let's start - -7 -00:00:18,300 --> 00:00:21,660 -with a Visitor pattern, which is a way of separating an algorithm - -8 -00:00:21,660 --> 00:00:25,150 -from an object structure on which it operates. And a practical result - -9 -00:00:25,150 --> 00:00:28,010 -of this separation is the ability to add the new operation - -10 -00:00:28,010 --> 00:00:31,680 -to exist in object structures, without modifying the structures. So, basically - -11 -00:00:31,680 --> 00:00:34,540 -what this pattern does, is to allow for defining and easily - -12 -00:00:34,540 --> 00:00:37,870 -modifying set of operations to perform on the objects of the collection. - -13 -00:00:37,870 --> 00:00:40,570 -And the typical usage of this is, for example, when you're - -14 -00:00:40,570 --> 00:00:43,140 -visiting a graph, or a set of objects, and you want - -15 -00:00:43,140 --> 00:00:46,090 -to perform some operations on these objects. By using a visitor - -16 -00:00:46,090 --> 00:00:48,410 -pattern, you can decouple the operation - -17 -00:00:48,410 --> 00:00:50,830 -from the objects. Although not straightforward, - -18 -00:00:50,830 --> 00:00:53,360 -this pattern is very, very useful. So, I really encourage you - -19 -00:00:53,360 --> 00:00:56,060 -to look at it in more detail and get familiar with it. - -20 -00:00:56,060 --> 00:00:59,040 -The second pattern I want to mention is the decorator pattern. - -21 -00:00:59,040 --> 00:01:02,820 -The decorator pattern is basically a wrapper that adds functionality to a - -22 -00:01:02,820 --> 00:01:05,030 -class. So the way in which it works, is that you - -23 -00:01:05,030 --> 00:01:08,230 -will take a class, you will build a class that basically wraps - -24 -00:01:08,230 --> 00:01:12,250 -this class. So it reproduces the functionality of the original class, but - -25 -00:01:12,250 --> 00:01:15,900 -it also adds some functionality. And for all the functionality that was - -26 -00:01:15,900 --> 00:01:18,750 -already in the original class, it will simply invoke this - -27 -00:01:18,750 --> 00:01:21,080 -functionality and for the new one, you will implement it - -28 -00:01:21,080 --> 00:01:24,510 -using the services of the class. And a nice property - -29 -00:01:24,510 --> 00:01:26,760 -of the decorator pattern is that it's stackable. So you can - -30 -00:01:26,760 --> 00:01:30,210 -add decorators on decorators on decorators, and further increase the - -31 -00:01:30,210 --> 00:01:34,052 -functionality provided by your class. The iterator is another very - -32 -00:01:34,052 --> 00:01:37,810 -commonly-used pattern. And, you probably use this one yourself because, - -33 -00:01:37,810 --> 00:01:41,090 -it's also part of many standard libraries. What the iterator allows - -34 -00:01:41,090 --> 00:01:44,220 -you to do, is basically to access elements of a collection - -35 -00:01:44,220 --> 00:01:47,490 -without knowing the underlying representation. So the iterator will allow you - -36 -00:01:47,490 --> 00:01:50,630 -to just go through a set of objects without worrying about - -37 -00:01:50,630 --> 00:01:53,200 -how the objects are stored. So you basically just ask the - -38 -00:01:53,200 --> 00:01:55,810 -iterator to give you the first object, the next object and - -39 -00:01:55,810 --> 00:02:00,130 -so on. Another very commonly-used pattern is the observer pattern. And - -40 -00:02:00,130 --> 00:02:02,650 -this pattern is very useful when you have an object of - -41 -00:02:02,650 --> 00:02:06,190 -interest and a set of other objects that are interested in - -42 -00:02:06,190 --> 00:02:09,240 -the changes that might occur in this first object. So - -43 -00:02:09,240 --> 00:02:12,690 -what the observer pattern allows you to do is to register - -44 -00:02:12,690 --> 00:02:15,460 -these objects, so that they let the system know that - -45 -00:02:15,460 --> 00:02:18,690 -they're interested in changes in this first object. And then, every - -46 -00:02:18,690 --> 00:02:20,840 -time that there is a change, these other objects will - -47 -00:02:20,840 --> 00:02:23,030 -be automatically notified. So basically, - -48 -00:02:23,030 --> 00:02:25,290 -the observer pattern allows for notifying - -49 -00:02:25,290 --> 00:02:29,310 -dependents when an object of interest changes. If you want - -50 -00:02:29,310 --> 00:02:32,020 -an example of this, just think about the file system and - -51 -00:02:32,020 --> 00:02:35,870 -imagine having a folder. All the views of this folder will - -52 -00:02:35,870 --> 00:02:37,970 -want to be notified every time that there's a change in - -53 -00:02:37,970 --> 00:02:40,720 -the folder because they need to refresh. So instead of continuously - -54 -00:02:40,720 --> 00:02:44,390 -checking the state of the folder, they will just register and basically - -55 -00:02:44,390 --> 00:02:47,430 -say, hey, we're interested in knowing when something changes in this - -56 -00:02:47,430 --> 00:02:50,320 -folder. And when something changes in the folder, they will be automatically - -57 -00:02:50,320 --> 00:02:53,300 -notified. So it will be some sort of a push notification - -58 -00:02:53,300 --> 00:02:56,590 -instead of a pull notification, if you are familiar with that terminology. - -59 -00:02:56,590 --> 00:03:00,020 -Finally the proxy pattern is a pattern in which a surrogate - -60 -00:03:00,020 --> 00:03:04,370 -controls access to an object. In other words, we have our object, - -61 -00:03:04,370 --> 00:03:07,220 -and we have our proxy here. So all the requests to the - -62 -00:03:07,220 --> 00:03:09,950 -object will go through the proxy that will then forward them. And - -63 -00:03:09,950 --> 00:03:12,020 -all the responses from the object will also go through the - -64 -00:03:12,020 --> 00:03:15,580 -proxy. They will then forward them to the original requester. So what - -65 -00:03:15,580 --> 00:03:18,710 -the proxy allows you to do is to control how this object, - -66 -00:03:18,710 --> 00:03:22,180 -that is behind the proxy, is actually accessed, for example, by filtering - -67 -00:03:22,180 --> 00:03:24,500 -some calls. So in a sense, the proxy allows use - -68 -00:03:24,500 --> 00:03:27,470 -for masking some of the functionality of the object that - -69 -00:03:27,470 --> 00:03:31,070 -is behind the proxy. And there's many, many, many more - -70 -00:03:31,070 --> 00:03:34,424 -useful patterns. That can help you when designing and implementing - -71 -00:03:34,424 --> 00:03:37,220 -the system. So once more, I really encourage you to - -72 -00:03:37,220 --> 00:03:38,740 -have a look at the book, to look at the - -73 -00:03:38,740 --> 00:03:41,570 -resources online, and to really get more familiar with these - -74 -00:03:41,570 --> 00:03:43,890 -patterns, and to try to use them in your everyday work. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 4abf070..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,770 --> 00:00:02,830 -In the previous lessons of this mini-course, - -2 -00:00:02,830 --> 00:00:06,620 -we discussed high level design, or architecture, - -3 -00:00:06,620 --> 00:00:12,380 -low level design, and design patterns. Now, we're going to see how we can put - -4 -00:00:12,380 --> 00:00:15,380 -this and also others software engineering activities - -5 -00:00:15,380 --> 00:00:18,436 -together in the context of a UML-based - -6 -00:00:18,436 --> 00:00:21,820 -process model, the unified software process, or - -7 -00:00:21,820 --> 00:00:25,580 -USP. We will discuss how USP was defined, - -8 -00:00:25,580 --> 00:00:30,492 -its main characteristics, its phases, and how we can apply it in practice. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/10 - Iterative and Incremental - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/10 - Iterative and Incremental - lang_en_vs6.srt deleted file mode 100644 index e542660..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/10 - Iterative and Incremental - lang_en_vs6.srt +++ /dev/null @@ -1,147 +0,0 @@ -1 -00:00:00,190 --> 00:00:03,100 -We just saw two of the three distinguishing aspects of - -2 -00:00:03,100 --> 00:00:05,800 -the rational unified process. The fact that it is used - -3 -00:00:05,800 --> 00:00:08,810 -case driven and the fact that it is architecture centric. - -4 -00:00:08,810 --> 00:00:11,950 -The third and final distinguished aspect of R.U.P. is that - -5 -00:00:11,950 --> 00:00:15,210 -it is iterative and incremental. So let's see what that - -6 -00:00:15,210 --> 00:00:18,870 -means by considering the lifetime of a software project. Basically, - -7 -00:00:18,870 --> 00:00:22,120 -the lifetime of a rational unified process consists of a - -8 -00:00:22,120 --> 00:00:24,920 -series of cycles, such as the ones that are represented here. - -9 -00:00:24,920 --> 00:00:28,070 -Cycle one, cycle two, through cycle n. And as - -10 -00:00:28,070 --> 00:00:30,990 -you can see, these cycles can also be called increments. - -11 -00:00:30,990 --> 00:00:33,280 -And each one of the cycles involves all of - -12 -00:00:33,280 --> 00:00:36,700 -the main phases of software development. In addition, each cycle - -13 -00:00:36,700 --> 00:00:39,700 -results in a product release which can be internal - -14 -00:00:39,700 --> 00:00:43,210 -or external. More precisely, each cycle terminates with a product - -15 -00:00:43,210 --> 00:00:46,340 -release that includes a complete set of artifacts for - -16 -00:00:46,340 --> 00:00:50,150 -the project. That means code, manuals, use cases, non-functional - -17 -00:00:50,150 --> 00:00:52,840 -specification, test cases, and so on. So, I've just - -18 -00:00:52,840 --> 00:00:55,760 -said, that each cycle involves all of the main phases - -19 -00:00:55,760 --> 00:00:59,440 -of software development. Specifically, each cycle is further divided - -20 -00:00:59,440 --> 00:01:04,040 -in four phases. Inception, elaboration, construction and transition. In a - -21 -00:01:04,040 --> 00:01:06,290 -minute, we will look at each one of these - -22 -00:01:06,290 --> 00:01:08,840 -phases in detail and see how they relate to the - -23 -00:01:08,840 --> 00:01:12,150 -traditional activities of software development. Before that, I want - -24 -00:01:12,150 --> 00:01:15,760 -to mention the last level of these iterations, which happens - -25 -00:01:15,760 --> 00:01:20,330 -within these individual phases More precisely, inside each of these - -26 -00:01:20,330 --> 00:01:24,230 -phases, there might be multiple iterations. So what are these - -27 -00:01:24,230 --> 00:01:28,070 -iterations? Well, basically, each iteration corresponds to a group of - -28 -00:01:28,070 --> 00:01:30,550 -use cases that are selected so as to deal with - -29 -00:01:30,550 --> 00:01:33,200 -the most important risks first. So if you have a - -30 -00:01:33,200 --> 00:01:35,510 -set of use cases that you're considering, which means that - -31 -00:01:35,510 --> 00:01:37,450 -you have a set of features that you need to - -32 -00:01:37,450 --> 00:01:41,260 -implement, you will select for each iteration the most risky - -33 -00:01:41,260 --> 00:01:44,720 -ones that you still haven't realized, and realize them in that - -34 -00:01:44,720 --> 00:01:47,720 -iteration. And then continue in the following iterations with less and - -35 -00:01:47,720 --> 00:01:50,980 -less risky ones. So basically what happens in the end is - -36 -00:01:50,980 --> 00:01:52,960 -that essentially each iteration extends - -37 -00:01:52,960 --> 00:01:55,220 -the functionality beyond the previous iteration. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/11 - Cycle Example - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/11 - Cycle Example - lang_en_vs6.srt deleted file mode 100644 index af70543..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/11 - Cycle Example - lang_en_vs6.srt +++ /dev/null @@ -1,147 +0,0 @@ -1 -00:00:00,230 --> 00:00:02,590 -To make this a little more concrete, let's look at - -2 -00:00:02,590 --> 00:00:07,466 -an example involving cycles, phases, and iterations. Let's assume that we - -3 -00:00:07,466 --> 00:00:10,250 -have to develop a banking IT system. The first possible - -4 -00:00:10,250 --> 00:00:12,730 -cycle for such a system could be one in which we - -5 -00:00:12,730 --> 00:00:16,280 -implement the basic withdrawal facilities. What this means is that, - -6 -00:00:16,280 --> 00:00:18,400 -at the end of this cycle, there will be the release - -7 -00:00:18,400 --> 00:00:22,130 -of the product that implements this piece of functionality. But notice - -8 -00:00:22,130 --> 00:00:25,500 -that this will not be the only product release because within - -9 -00:00:25,500 --> 00:00:28,580 -the cycle, we will perform also the four phases that - -10 -00:00:28,580 --> 00:00:31,020 -we mentioned before, inception, elaboration, - -11 -00:00:31,020 --> 00:00:33,550 -construction, and transition. And within each - -12 -00:00:33,550 --> 00:00:36,980 -of these phases, we might have multiple iterations. And at the - -13 -00:00:36,980 --> 00:00:39,710 -end of each iteration, we will also have a product release. - -14 -00:00:39,710 --> 00:00:41,790 -Which in this case, will be an internal one. As - -15 -00:00:41,790 --> 00:00:44,690 -you can see, the iterative nature is really inherent in the - -16 -00:00:44,690 --> 00:00:48,030 -unified rational process. So, now let's clean up here, and let's - -17 -00:00:48,030 --> 00:00:50,814 -see what some other possible cycles could be for our banking - -18 -00:00:50,814 --> 00:00:54,070 -IT system. Here, I'm showing two possible additional ones. The first - -19 -00:00:54,070 --> 00:00:57,800 -one, cycle two, which will develop the account and system management. And - -20 -00:00:57,800 --> 00:01:00,230 -the third one, cycle three, which will develop the full account - -21 -00:01:00,230 --> 00:01:04,620 -management and cross selling. Similarly to cycle one, also these cycles will - -22 -00:01:04,620 --> 00:01:07,570 -produce a product, both at the end of the cycle, and - -23 -00:01:07,570 --> 00:01:10,740 -within the cycle in the different phases. And there's a few more - -24 -00:01:10,740 --> 00:01:13,150 -things to note. So the first one, is that each cycle - -25 -00:01:13,150 --> 00:01:15,900 -focuses on a different part of the system. So what you will - -26 -00:01:15,900 --> 00:01:19,350 -do, when you use the rational unified process, you will select a - -27 -00:01:19,350 --> 00:01:23,320 -subset of use cases that you want to realize within your cycle. - -28 -00:01:23,320 --> 00:01:26,640 -And the final product for that cycle, will be a product that - -29 -00:01:26,640 --> 00:01:30,190 -realizes those use cases. This is the first aspect. The second one, - -30 -00:01:30,190 --> 00:01:33,290 -is that these cycles, as you can see, are slightly overlapping. So - -31 -00:01:33,290 --> 00:01:35,880 -it is not the case that you finish a cycle, and then - -32 -00:01:35,880 --> 00:01:37,580 -you start the next one. So there is a little bit of - -33 -00:01:37,580 --> 00:01:41,250 -overlap among cycles, and we'll talk about that more. And finally, - -34 -00:01:41,250 --> 00:01:43,600 -I want to stress one more that each cycle - -35 -00:01:43,600 --> 00:01:46,960 -contains four phases, and each one of these phases might - -36 -00:01:46,960 --> 00:01:49,890 -be further splayed in iterations. So that's kind of a - -37 -00:01:49,890 --> 00:01:52,610 -high level view of how the whole process will work. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/12 - Phases within a Cycle - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/12 - Phases within a Cycle - lang_en_vs5.srt deleted file mode 100644 index c58be49..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/12 - Phases within a Cycle - lang_en_vs5.srt +++ /dev/null @@ -1,199 +0,0 @@ -1 -00:00:00,240 --> 00:00:02,505 -Now let's go back to the phases within a cycle. - -2 -00:00:02,505 --> 00:00:04,930 -because I want to show you how they relate to traditional - -3 -00:00:04,930 --> 00:00:08,196 -activities of software development. Because this is the first time that - -4 -00:00:08,196 --> 00:00:12,066 -we talk about inception, elaboration, construction and transition. So we will - -5 -00:00:12,066 --> 00:00:14,859 -know what they mean, in terms of the traditional software - -6 -00:00:14,859 --> 00:00:18,380 -development. So I'm going to first discuss these relations and then - -7 -00:00:18,380 --> 00:00:22,198 -I'm going to talk about each individual phase in further detail. - -8 -00:00:22,198 --> 00:00:25,570 -So I'm going to start by representing the four RUP phases here - -9 -00:00:25,570 --> 00:00:29,810 -with possible internal iterations. I1, E1 and E2, C1, - -10 -00:00:29,810 --> 00:00:32,490 -C2, and so on. And just as a reference, this - -11 -00:00:32,490 --> 00:00:34,670 -is the way in which time will progress. So we - -12 -00:00:34,670 --> 00:00:37,890 -will start with inception and we will finish with transition. - -13 -00:00:37,890 --> 00:00:39,710 -So what I'm want to do now is to show the - -14 -00:00:39,710 --> 00:00:43,930 -actual, traditional, software development activities here on the left. And - -15 -00:00:43,930 --> 00:00:46,970 -I also want to show you, using this diagram, how these - -16 -00:00:46,970 --> 00:00:51,610 -activities are actually performed in each of the RUP phases. - -17 -00:00:51,610 --> 00:00:54,540 -So, let's see what this representation means. Basically, what - -18 -00:00:54,540 --> 00:00:58,410 -I'm showing here, is that requirements engineering actually starts in - -19 -00:00:58,410 --> 00:01:00,480 -the inception phase. So, you can see the height - -20 -00:01:00,480 --> 00:01:03,090 -of this bar as the amount of effort devoted to - -21 -00:01:03,090 --> 00:01:05,890 -this activity in this specific phase. So you can - -22 -00:01:05,890 --> 00:01:09,950 -see that requirements engineering starts in inception phase, is mostly - -23 -00:01:09,950 --> 00:01:13,210 -performed in the elaboration phase, and then it continues, - -24 -00:01:13,210 --> 00:01:16,820 -although to a lesser extent, throughout all phases up until - -25 -00:01:16,820 --> 00:01:18,570 -the end of the transition. But the bulk is really - -26 -00:01:18,570 --> 00:01:22,940 -performed here in the elaboration phase. Similarly, if we consider analysis - -27 -00:01:22,940 --> 00:01:25,450 -and design, we can see that analysis and design are - -28 -00:01:25,450 --> 00:01:29,510 -mainly performed in the elaboration phase. But a considerable amount of - -29 -00:01:29,510 --> 00:01:31,900 -it also continues in the construction phase, and then it - -30 -00:01:31,900 --> 00:01:34,514 -kind of phases out. So there's very little of that done - -31 -00:01:34,514 --> 00:01:37,300 -in the transition phase. Looking now at implementation, you can see - -32 -00:01:37,300 --> 00:01:41,190 -that the implementation happens mostly in the construction phase, which is, - -33 -00:01:41,190 --> 00:01:45,460 -unsurprisingly, the phase that is mostly concerned with actual code development, - -34 -00:01:45,460 --> 00:01:47,620 -as we will see in a minute. Testing, on the other - -35 -00:01:47,620 --> 00:01:50,990 -hand, is performed throughout most phases, with, peaks in some specific - -36 -00:01:50,990 --> 00:01:54,260 -point, for example, at the end of some iterations, like here - -37 -00:01:54,260 --> 00:01:57,880 -and here. To conclude, we have the business modeling activity that - -38 -00:01:57,880 --> 00:02:00,160 -happens mainly in the inception and a little bit in the - -39 -00:02:00,160 --> 00:02:04,100 -elaboration phase and the deployment activity which happens a little bit - -40 -00:02:04,100 --> 00:02:06,420 -throughout, but the bulk of it is really in the transition - -41 -00:02:06,420 --> 00:02:08,699 -phase, which is actually the phase that has to do - -42 -00:02:08,699 --> 00:02:12,070 -with deployment and then maintenance. So I hope this kind - -43 -00:02:12,070 --> 00:02:14,970 -of high level view gives you a better understanding of - -44 -00:02:14,970 --> 00:02:17,940 -what is the mapping between these new phases and, the - -45 -00:02:17,940 --> 00:02:21,760 -typical software development activities that we are more familiar with. - -46 -00:02:21,760 --> 00:02:24,360 -So to further this understanding, later in the lesson, I'm - -47 -00:02:24,360 --> 00:02:28,220 -also going to talk about these specific phases individually. First, however, - -48 -00:02:28,220 --> 00:02:31,610 -I want to spend a little more time discussing what happens - -49 -00:02:31,610 --> 00:02:35,200 -inside each one of these iterations, just to make sure - -50 -00:02:35,200 --> 00:02:38,410 -that we are all understand what an iteration is exactly. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/13 - Iterations - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/13 - Iterations - lang_en_vs5.srt deleted file mode 100644 index fbdc2b0..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/13 - Iterations - lang_en_vs5.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,420 --> 00:00:03,520 -So what happens, exactly, within an iteration? In - -2 -00:00:03,520 --> 00:00:07,680 -almost every iteration, developers perform the following activities. - -3 -00:00:07,680 --> 00:00:10,830 -So they identify which pieces of functionality this - -4 -00:00:10,830 --> 00:00:14,450 -iteration will develop, will implement. After doing that, they - -5 -00:00:14,450 --> 00:00:17,240 -will create a design, for the considered use - -6 -00:00:17,240 --> 00:00:19,640 -cases, and they will do that guided by the - -7 -00:00:19,640 --> 00:00:22,334 -chosen architecture. So the set of use cases - -8 -00:00:22,334 --> 00:00:25,666 -plus the architectural guidelines will result in a design - -9 -00:00:25,666 --> 00:00:29,035 -for the selected use cases. Once the design is defined, - -10 -00:00:29,035 --> 00:00:32,060 -then the developers will implement the design, which will result - -11 -00:00:32,060 --> 00:00:35,430 -in a set of software components. They will then verify - -12 -00:00:35,430 --> 00:00:38,992 -the components against the use cases to make sure that the - -13 -00:00:38,992 --> 00:00:41,740 -components satisfy the use cases, they suitably realize the use - -14 -00:00:41,740 --> 00:00:43,995 -cases. And they will do that through testing or some - -15 -00:00:43,995 --> 00:00:47,730 -other verification and validation activity. Finally, after verifying that the - -16 -00:00:47,730 --> 00:00:51,320 -code actually implements the use cases, they will release a product, - -17 -00:00:51,320 --> 00:00:53,840 -which also represent the end of the iteration. And notice that - -18 -00:00:53,840 --> 00:00:56,370 -what I put here is an icon for the world, - -19 -00:00:56,370 --> 00:00:59,330 -in double quotes. Because in many cases the release will be - -20 -00:00:59,330 --> 00:01:02,050 -just an internal release or maybe a release that will just - -21 -00:01:02,050 --> 00:01:04,813 -go to some of the stakeholders so that they can provide - -22 -00:01:04,813 --> 00:01:07,040 -feedback on that. Okay. So it doesn't have to be an - -23 -00:01:07,040 --> 00:01:09,080 -external release. It doesn't have to be a release to the - -24 -00:01:09,080 --> 00:01:12,270 -world. But it is, nevertheless, a release of a software product. . diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/14 - Iterative Approach Quiz - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/14 - Iterative Approach Quiz - lang_en_vs5.srt deleted file mode 100644 index d4b7808..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/14 - Iterative Approach Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,182 --> 00:00:02,850 -So now, since we're talking about the incremental and iterative - -2 -00:00:02,850 --> 00:00:05,950 -nature of the Rational Unified Process, let's have a quiz on - -3 -00:00:05,950 --> 00:00:09,460 -the benefits of iterative approaches. So I'd like for you to tell - -4 -00:00:09,460 --> 00:00:12,710 -me what are these benefits. Is one benefit the fact that - -5 -00:00:12,710 --> 00:00:16,129 -iterative approaches keep developers busy or maybe that they give developers - -6 -00:00:16,129 --> 00:00:19,480 -early feedback, that they allow for doing the same thing over - -7 -00:00:19,480 --> 00:00:22,930 -and over in an iterative way. Maybe they also minimize the - -8 -00:00:22,930 --> 00:00:25,210 -risk of developing the wrong system. Can they be used to - -9 -00:00:25,210 --> 00:00:27,170 -improve planning, or is it the benefit - -10 -00:00:27,170 --> 00:00:30,160 -that they accommodate evolving requirements. Also, in this - -11 -00:00:30,160 --> 00:00:34,360 -case, I would like for you to check all the answers that you think are correct. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/15 - Iterative Approach Quiz Solution - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/15 - Iterative Approach Quiz Solution - lang_en_vs5.srt deleted file mode 100644 index 6e69cec..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/15 - Iterative Approach Quiz Solution - lang_en_vs5.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,180 --> 00:00:01,740 -Okay so let's look at the first one. Well I - -2 -00:00:01,740 --> 00:00:04,760 -don't think that the fact of keeping developers busy is really - -3 -00:00:04,760 --> 00:00:08,020 -one of the highlights or the main benefits of iterative - -4 -00:00:08,020 --> 00:00:12,310 -approaches. Developers are really busy without any need for additional help. - -5 -00:00:12,310 --> 00:00:14,950 -So I will just not mark this one. The second - -6 -00:00:14,950 --> 00:00:19,280 -one conversely is definitely one of the advantages of iterative approaches. - -7 -00:00:19,280 --> 00:00:21,710 -So the fact that iterative approaches give the developers a early - -8 -00:00:21,710 --> 00:00:25,890 -feedback, is a great advantage which has in turn additional advantages. - -9 -00:00:25,890 --> 00:00:29,340 -For example, it increases the project tempo, so it gives the developers - -10 -00:00:29,340 --> 00:00:32,350 -not busy but more focused. It's easier to be focused when you - -11 -00:00:32,350 --> 00:00:35,790 -have a short term deadline, or a short term goal - -12 -00:00:35,790 --> 00:00:38,670 -rather than a release that is planned in six months or even - -13 -00:00:38,670 --> 00:00:42,420 -later. Another advantage of this early feedback is the fact that developers - -14 -00:00:42,420 --> 00:00:45,390 -are rewarded for their efforts so, there is sort of an immediate - -15 -00:00:45,390 --> 00:00:48,360 -rewards because you can see the results of your effort instead of - -16 -00:00:48,360 --> 00:00:51,310 -having to wait a long time to see such results. And last, - -17 -00:00:51,310 --> 00:00:55,126 -but not least the fact of getting early feedback also minimizes - -18 -00:00:55,126 --> 00:00:58,570 -the risks of developing the wrong system. So why is that? - -19 -00:00:58,570 --> 00:01:01,820 -Well because getting early feedback will also allow us to find - -20 -00:01:01,820 --> 00:01:05,140 -out whether we're going in the wrong direction early in the development process - -21 -00:01:05,140 --> 00:01:08,460 -rather than at the end. And therefore, will minimize this risk. - -22 -00:01:08,460 --> 00:01:10,760 -Going back to the previous question, yeah, I don't think that, you - -23 -00:01:10,760 --> 00:01:12,960 -know, doing the same thing over and over is a great - -24 -00:01:12,960 --> 00:01:16,170 -advantage. And in fact, iterative approaches do not do the same thing - -25 -00:01:16,170 --> 00:01:18,940 -over and over. So they keep iterating, but they keep - -26 -00:01:18,940 --> 00:01:21,930 -augmenting the amount of functionality in the system. They don't - -27 -00:01:21,930 --> 00:01:24,960 -just repeat the same thing. As for improving planning, actually - -28 -00:01:24,960 --> 00:01:27,980 -improving planning is not really a strength of these approaches, - -29 -00:01:27,980 --> 00:01:30,880 -because sometimes the number of iterations is hard to predict, - -30 -00:01:30,880 --> 00:01:33,050 -so it's hard to do a natural planning when you - -31 -00:01:33,050 --> 00:01:36,440 -are using an iterative approach. So finally, are iterative approaches - -32 -00:01:36,440 --> 00:01:38,700 -good for accomodating evolving requirements? - -33 -00:01:38,700 --> 00:01:41,630 -Most definitely. First, iterative approaches, and - -34 -00:01:41,630 --> 00:01:44,590 -in particular, the one that we're discussing consider requirements - -35 -00:01:44,590 --> 00:01:47,900 -incrementally, so they can better incorporate your requirements. So if - -36 -00:01:47,900 --> 00:01:51,030 -there are new requirements, it's easier to accommodate them using - -37 -00:01:51,030 --> 00:01:55,210 -an iterative approach. Second, these approaches realize a few requirements - -38 -00:01:55,210 --> 00:01:57,740 -at a time. Something from the most risky ones, as - -39 -00:01:57,740 --> 00:02:00,600 -we said. So any problem with those risky requirements will - -40 -00:02:00,600 --> 00:02:04,220 -be discovered early, and suitable course corrections could be taken. - -41 -00:02:04,220 --> 00:02:06,850 -So in case you still have doubts about iterative approaches, - -42 -00:02:06,850 --> 00:02:08,460 -it might be worth it to go back to - -43 -00:02:08,460 --> 00:02:11,390 -mini course number one, lesson number two to discuss the - -44 -00:02:11,390 --> 00:02:14,620 -life cycle models. Because we talk about iterative approaches - -45 -00:02:14,620 --> 00:02:17,770 -and their advantages and their characteristics there in some detail. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/16 - Inception Phase - lang_en_vs4.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/16 - Inception Phase - lang_en_vs4.srt deleted file mode 100644 index 60ab80a..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/16 - Inception Phase - lang_en_vs4.srt +++ /dev/null @@ -1,323 +0,0 @@ -1 -00:00:00,175 --> 00:00:03,510 -Let's talk a little bit more about phases. The rational unified - -2 -00:00:03,510 --> 00:00:07,050 -process phases are fundamental aspects of this process and which just touched - -3 -00:00:07,050 --> 00:00:09,200 -on them so we just give a quick overview. And I want to - -4 -00:00:09,200 --> 00:00:12,010 -look at these phases in a little more detail. So, what I'm - -5 -00:00:12,010 --> 00:00:14,960 -going to do is, for each phase, I'm going to discuss what it is, - -6 -00:00:14,960 --> 00:00:18,310 -what it produces and how is the result of the phase suppose - -7 -00:00:18,310 --> 00:00:21,910 -to be,. Assessed, and what are the consequences of this assessment. So - -8 -00:00:21,910 --> 00:00:25,350 -let's start with the first phase, the inception phase. The first phase - -9 -00:00:25,350 --> 00:00:27,920 -goes from the idea of the product to the - -10 -00:00:27,920 --> 00:00:30,990 -vision of the end product. What this involves is basically - -11 -00:00:30,990 --> 00:00:34,230 -to delimiting the project scope. And making the business case - -12 -00:00:34,230 --> 00:00:37,040 -for the product presented. Why is it worth doing? What - -13 -00:00:37,040 --> 00:00:39,870 -are the success criteria? What are the main risks? What - -14 -00:00:39,870 --> 00:00:43,690 -resources will be needed? And so on, specifically these phases - -15 -00:00:43,690 --> 00:00:47,310 -answer three main questions. The first one is, what are - -16 -00:00:47,310 --> 00:00:51,330 -the major users or actors, to use the UML terminology. - -17 -00:00:51,330 --> 00:00:53,450 -And what will the system do for them? To - -18 -00:00:53,450 --> 00:00:56,780 -answer this, these phases produce a simplified use-case model where - -19 -00:00:56,780 --> 00:01:00,480 -only a few use-cases are represented and described. So this - -20 -00:01:00,480 --> 00:01:03,390 -is a sort of initial use-case model. The second question - -21 -00:01:03,390 --> 00:01:05,610 -is about the architecture, what could be an architecture - -22 -00:01:05,610 --> 00:01:08,370 -for the system? So in this phase we will normally - -23 -00:01:08,370 --> 00:01:12,420 -also develop a tentative architecture. So an initial architecture that - -24 -00:01:12,420 --> 00:01:16,540 -describes the most crucial subsystems. Finally this phase also answers - -25 -00:01:16,540 --> 00:01:18,890 -the question, what is the plan and how much - -26 -00:01:18,890 --> 00:01:21,620 -will it cost? To answer this question. This phase will - -27 -00:01:21,620 --> 00:01:24,930 -identify the main risks for the project and also produce - -28 -00:01:24,930 --> 00:01:28,600 -a rough plan with estimates for resources, initial planning for - -29 -00:01:28,600 --> 00:01:32,820 -the phases and dates and milestones. Specifically, the inception phase - -30 -00:01:32,820 --> 00:01:36,370 -generates several deliverables. It is very important that you pay - -31 -00:01:36,370 --> 00:01:39,600 -attention so that you understand what this deliberate approach are. - -32 -00:01:39,600 --> 00:01:42,320 -Starting from the first one, which is the vision document. - -33 -00:01:42,320 --> 00:01:44,800 -And this is a document that provides a general - -34 -00:01:44,800 --> 00:01:48,420 -vision of the core projects requirements, key features and main - -35 -00:01:48,420 --> 00:01:51,890 -constraints. Together with this, the inception phase also produces an - -36 -00:01:51,890 --> 00:01:54,900 -initial use case model, as I just mentioned. So this - -37 -00:01:54,900 --> 00:01:57,720 -is a use case model that includes an initial set - -38 -00:01:57,720 --> 00:02:00,670 -of use cases, and then will be later refined. Two - -39 -00:02:00,670 --> 00:02:04,300 -additional variables are the initial project glossary, which describes the - -40 -00:02:04,300 --> 00:02:07,330 -main terms, using the project and their meaning, and the - -41 -00:02:07,330 --> 00:02:10,229 -initial business case which includes business context. And - -42 -00:02:10,229 --> 00:02:13,470 -success criteria. Yet another deliverable for the inception phase - -43 -00:02:13,470 --> 00:02:15,770 -is the initial project plan, which shows the - -44 -00:02:15,770 --> 00:02:20,650 -phases, iterations, roles of the participants, schedule and initial - -45 -00:02:20,650 --> 00:02:23,610 -estimates. In addition, the inception phase also produces - -46 -00:02:23,610 --> 00:02:26,810 -a risk assessment document, which describes the main risks - -47 -00:02:26,810 --> 00:02:29,970 -and counters measures for this risk. Finally, and this - -48 -00:02:29,970 --> 00:02:32,430 -is an optional deliverable, in the sense that it, - -49 -00:02:32,430 --> 00:02:34,990 -it might or might not be produced, depending on the specific - -50 -00:02:34,990 --> 00:02:37,870 -project. As part of the inception phase we might also generate - -51 -00:02:37,870 --> 00:02:41,780 -1 or more prototypes. For example, we might develop prototypes to - -52 -00:02:41,780 --> 00:02:45,590 -address some specific risks that we have identified or to show some - -53 -00:02:45,590 --> 00:02:48,380 -specific aspect of the system of which we are unsure to - -54 -00:02:48,380 --> 00:02:51,910 -the stakeholders. So basically all the typical users of prototypes that - -55 -00:02:51,910 --> 00:02:54,600 -we discussed before. So when we're done with the inception phase - -56 -00:02:54,600 --> 00:02:58,300 -we hit the first milestone for the cycle we are currently performing. - -57 -00:02:58,300 --> 00:03:00,600 -And so there are some evaluation criteria that will tell - -58 -00:03:00,600 --> 00:03:03,640 -us whether we can consider the inception phase concluded or not. - -59 -00:03:03,640 --> 00:03:06,840 -And the first of this criteria is stakeholder concurrence, which - -60 -00:03:06,840 --> 00:03:10,510 -means that all the stakeholders must agree on the scope, definition, - -61 -00:03:10,510 --> 00:03:13,510 -and cost schedule estimates for the projects. The second criteria - -62 -00:03:13,510 --> 00:03:17,040 -needs requirements understanding, out of the initial primary use cases that - -63 -00:03:17,040 --> 00:03:20,380 -we have identified so far, the right one for our system. - -64 -00:03:20,380 --> 00:03:23,760 -And other criteria is the credibility of the cost schedule estimates, - -65 -00:03:23,760 --> 00:03:28,280 -the priorities, defined the risks identifies and the countermeasures for - -66 -00:03:28,280 --> 00:03:31,590 -those risks, and the development process that we're following. Finally, in - -67 -00:03:31,590 --> 00:03:34,000 -the case we produce prototypes as part of the inceptional - -68 -00:03:34,000 --> 00:03:37,520 -phase, this will also be evaluated and assessed to judge the - -69 -00:03:37,520 --> 00:03:39,960 -overall outcome of the phase. So what happens if the - -70 -00:03:39,960 --> 00:03:43,170 -project fails to pass this milestone? So if the outcome of - -71 -00:03:43,170 --> 00:03:46,020 -the inception phase is considered to be inadequate with respect - -72 -00:03:46,020 --> 00:03:48,642 -to one or more of these criteria. Well at this point, - -73 -00:03:48,642 --> 00:03:51,240 -since we're kind of an initial phase of the cycle - -74 -00:03:51,240 --> 00:03:54,370 -the project may be cancelled or considerably re-thought. So to - -75 -00:03:54,370 --> 00:03:57,610 -summarize all of these in one sentence the Inception Phase - -76 -00:03:57,610 --> 00:04:00,320 -is the phase in which we produce. Then you shall vision, - -77 -00:04:00,320 --> 00:04:04,750 -used case model, project plan, risk assessment and possibly, prototypes - -78 -00:04:04,750 --> 00:04:07,290 -for the project. And we have to make sure, that - -79 -00:04:07,290 --> 00:04:10,680 -all of this deliverables satisfy a set of criteria, so - -80 -00:04:10,680 --> 00:04:13,770 -that we can continue on the project. And otherwise, we'll either - -81 -00:04:13,770 --> 00:04:17,160 -cancel the project or rethink its scope, or other aspects of it. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/17 - Elaboration Phase - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/17 - Elaboration Phase - lang_en_vs5.srt deleted file mode 100644 index 1025b2c..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/17 - Elaboration Phase - lang_en_vs5.srt +++ /dev/null @@ -1,215 +0,0 @@ -1 -00:00:00,350 --> 00:00:02,400 -Now that we've discussed the inception phase, let's move - -2 -00:00:02,400 --> 00:00:04,180 -on to the second phase of RUP, which is - -3 -00:00:04,180 --> 00:00:07,280 -the elaboration phase. And there are four main goals - -4 -00:00:07,280 --> 00:00:10,900 -and activities for the elaboration phase. Analyzing the problem domain - -5 -00:00:10,900 --> 00:00:13,690 -to get a better understanding of the domain. Establishing - -6 -00:00:13,690 --> 00:00:17,840 -a solid architectural foundation for the project. Eliminating the highest - -7 -00:00:17,840 --> 00:00:21,454 -risk elements which basically means addressing the most critical - -8 -00:00:21,454 --> 00:00:25,590 -use cases. And finally, refine the plan of activities and estimates - -9 -00:00:25,590 --> 00:00:28,250 -of resources to complete the project. The outcome - -10 -00:00:28,250 --> 00:00:31,310 -of the elaboration phase reflects these activities and also - -11 -00:00:31,310 --> 00:00:34,440 -in this case produces several artifacts. The first one - -12 -00:00:34,440 --> 00:00:38,700 -is an almost complete use case model with all use cases - -13 -00:00:38,700 --> 00:00:42,560 -and actors identified and most use case descriptions developed. - -14 -00:00:42,560 --> 00:00:44,070 -As part of this phase we also identify a - -15 -00:00:44,070 --> 00:00:47,550 -set of what we called supplementary requirements. So these - -16 -00:00:47,550 --> 00:00:50,685 -are basically all the requirements that are not associated - -17 -00:00:50,685 --> 00:00:53,483 -with a use case. And these sets includes in particular all - -18 -00:00:53,483 --> 00:00:56,110 -non-functional requirements such as security, - -19 -00:00:56,110 --> 00:00:58,630 -reliability, maintainability and so on. So - -20 -00:00:58,630 --> 00:01:00,770 -all the ones that are relevant for the system that - -21 -00:01:00,770 --> 00:01:02,280 -you're developing. We mentioned before - -22 -00:01:02,280 --> 00:01:04,410 -that the software architecture is developed - -23 -00:01:04,410 --> 00:01:07,220 -in an incremental way, so it's not created at once. - -24 -00:01:07,220 --> 00:01:09,650 -And this is exactly what happens in the elaboration phase, that - -25 -00:01:09,650 --> 00:01:12,990 -we take the initial architecture that was defined in the inception - -26 -00:01:12,990 --> 00:01:16,280 -phase and we refine it until we get to a software - -27 -00:01:16,280 --> 00:01:19,400 -architecture which is complete. And that is part of the - -28 -00:01:19,400 --> 00:01:22,410 -deliverables for this phase. And the list continues, so let - -29 -00:01:22,410 --> 00:01:25,020 -me make some room. In addition to producing a complete - -30 -00:01:25,020 --> 00:01:28,270 -architecture for our system, in the elaboration phase we also - -31 -00:01:28,270 --> 00:01:32,130 -define the lower-level design for the system. And, therefore, as - -32 -00:01:32,130 --> 00:01:35,560 -part of this phase, we produce as deliverables a design - -33 -00:01:35,560 --> 00:01:38,000 -model, and together with that, a complete set of test - -34 -00:01:38,000 --> 00:01:41,770 -cases, and an executable prototype. We also produce a revised - -35 -00:01:41,770 --> 00:01:44,390 -project plan. Now that we have more information about the - -36 -00:01:44,390 --> 00:01:47,120 -project we can refine the various estimates and the various - -37 -00:01:47,120 --> 00:01:50,020 -pieces of information in the project plan. And also an - -38 -00:01:50,020 --> 00:01:54,160 -updated risk assessment document. Finally, in this phase we also generate - -39 -00:01:54,160 --> 00:01:57,680 -a preliminary user manual that describes to the users how - -40 -00:01:57,680 --> 00:02:00,350 -the system can be used and should be used. So now - -41 -00:02:00,350 --> 00:02:03,630 -let's see what are the evaluation criteria for the elaboration - -42 -00:02:03,630 --> 00:02:06,880 -phase which is our second milestone. So I'm just going to list - -43 -00:02:06,880 --> 00:02:09,400 -them here. The first one is whether the vision - -44 -00:02:09,400 --> 00:02:12,620 -and the architecture are stable or they're still changing so - -45 -00:02:12,620 --> 00:02:15,680 -did we converge into a final complete vision for the - -46 -00:02:15,680 --> 00:02:18,620 -system? Does the prototype show that the major risks that - -47 -00:02:18,620 --> 00:02:22,090 -we have identified have been resolved or at least addressed - -48 -00:02:22,090 --> 00:02:25,390 -in this phase? Is the project plan sufficiently detailed and - -49 -00:02:25,390 --> 00:02:29,030 -accurate? Do all stakeholders agree that the vision can be - -50 -00:02:29,030 --> 00:02:32,320 -achieved with the current plan? Is the actual resource expenditure - -51 -00:02:32,320 --> 00:02:35,840 -versus the planned expenditure acceptable? So now we study consumer - -52 -00:02:35,840 --> 00:02:39,120 -resources and therefore we can check whether our estimates were - -53 -00:02:39,120 --> 00:02:41,964 -correct. And also in this case the project might be - -54 -00:02:41,964 --> 00:02:45,730 -cancelled or considerably reshaped if it fails to pass this milestone. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/18 - Construction Phase - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/18 - Construction Phase - lang_en_vs5.srt deleted file mode 100644 index 70051fd..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/18 - Construction Phase - lang_en_vs5.srt +++ /dev/null @@ -1,247 +0,0 @@ -1 -00:00:00,230 --> 00:00:03,170 -So if the elaboration phase is successful, we then move - -2 -00:00:03,170 --> 00:00:06,560 -to the construction phase, which is our third phase. And - -3 -00:00:06,560 --> 00:00:09,550 -the construction phase is basically the phase in which most - -4 -00:00:09,550 --> 00:00:13,860 -of the actual development occurs. In short, all the features considered - -5 -00:00:13,860 --> 00:00:17,360 -are developed. So we'll continue with our car metaphor that - -6 -00:00:17,360 --> 00:00:19,310 -we used for the prototype. And in this case we - -7 -00:00:19,310 --> 00:00:22,390 -will have our complete car ready. Not only the features - -8 -00:00:22,390 --> 00:00:25,940 -are developed but they're also thoroughly tested. So we have performed - -9 -00:00:25,940 --> 00:00:29,490 -quality assurance. We have verified and validated the software, - -10 -00:00:29,490 --> 00:00:32,580 -the system and we know that it works correctly. Or - -11 -00:00:32,580 --> 00:00:34,620 -at least that it works correctly as far as - -12 -00:00:34,620 --> 00:00:37,850 -we can tell. So, in general, the construction phase is - -13 -00:00:37,850 --> 00:00:39,760 -the phase in which there is a shift in - -14 -00:00:39,760 --> 00:00:42,640 -emphasis from intellectual property development - -15 -00:00:42,640 --> 00:00:45,460 -to product development. From ideas - -16 -00:00:45,460 --> 00:00:47,650 -to products. So, what is the outcome of the - -17 -00:00:47,650 --> 00:00:51,250 -construction phase? Well, basically the construction phrase produces a product - -18 -00:00:51,250 --> 00:00:54,520 -that is ready to be deployed to the users. Specifically, - -19 -00:00:54,520 --> 00:00:57,570 -the phase generates the following outcomes. First of all, at the - -20 -00:00:57,570 --> 00:01:00,150 -end of this phase, all the use cases have been - -21 -00:01:00,150 --> 00:01:03,220 -realized with traceability information. What does that mean? It means that - -22 -00:01:03,220 --> 00:01:06,640 -not only all the functionality expressed by the use cases - -23 -00:01:06,640 --> 00:01:10,240 -have been implemented, but also that we have traceability information from - -24 -00:01:10,240 --> 00:01:13,530 -the use cases, to the different artifacts. So for example, - -25 -00:01:13,530 --> 00:01:16,780 -we know which part of the design realizes which use case. - -26 -00:01:16,780 --> 00:01:19,230 -We know which part of the implementation is related to a - -27 -00:01:19,230 --> 00:01:22,150 -given use case. Which use cases were derived from a use - -28 -00:01:22,150 --> 00:01:24,390 -case, and so on and so forth. And in this way - -29 -00:01:24,390 --> 00:01:28,310 -we can trace our requirements throughout the system. Throughout the different - -30 -00:01:28,310 --> 00:01:32,162 -artifacts that were developed during the software process. As we were - -31 -00:01:32,162 --> 00:01:35,790 -saying, we also have complete software product here, which is integrated - -32 -00:01:35,790 --> 00:01:39,240 -on all the needed platforms. Since the system, the software product, - -33 -00:01:39,240 --> 00:01:42,200 -has to be thoroughly tested, we will also have a complete - -34 -00:01:42,200 --> 00:01:44,900 -set of results for our tests. As part of this - -35 -00:01:44,900 --> 00:01:47,980 -phase, we will also finalize the user manual, so you'll have - -36 -00:01:47,980 --> 00:01:51,050 -a user manual ready to be provided to the users, and - -37 -00:01:51,050 --> 00:01:53,700 -ready to be used. And finally, we will have a complete - -38 -00:01:53,700 --> 00:01:58,370 -set of artifacts that include design documents, code, test cases, and - -39 -00:01:58,370 --> 00:02:00,440 -so on and so forth, so basically all of the artifacts - -40 -00:02:00,440 --> 00:02:04,240 -that have been produced during the development process. So roughly speaking, - -41 -00:02:04,240 --> 00:02:07,280 -we can consider the product that is produced at the end - -42 -00:02:07,280 --> 00:02:10,570 -of this phase as a typical beta release. So in case - -43 -00:02:10,570 --> 00:02:12,920 -you're not familiar with that, a beta release is an initial - -44 -00:02:12,920 --> 00:02:16,050 -release normally meant for a selected subset of users. So it - -45 -00:02:16,050 --> 00:02:19,250 -is something that is not quite yet ready for primetime, but - -46 -00:02:19,250 --> 00:02:22,540 -almost. So let's see also in this case, what are the evaluation - -47 -00:02:22,540 --> 00:02:25,740 -criteria for the construction phase. So how do we assess, that - -48 -00:02:25,740 --> 00:02:29,620 -this third milestone has been accomplished, successfully? We pretty much have - -49 -00:02:29,620 --> 00:02:32,510 -a complete product ready to be shipped right? So the first question - -50 -00:02:32,510 --> 00:02:35,260 -we want to ask is, whether the product is stable and mature - -51 -00:02:35,260 --> 00:02:37,910 -enough to be deployed to users. At the end of this - -52 -00:02:37,910 --> 00:02:40,510 -phase it has to be. Are the stakeholders ready for the - -53 -00:02:40,510 --> 00:02:44,160 -transition into the user community? Are we ready to go from development - -54 -00:02:44,160 --> 00:02:45,450 -to production? Are the actual - -55 -00:02:45,450 --> 00:02:48,060 -resource expenditures versus the planned expenditures - -56 -00:02:48,060 --> 00:02:50,890 -still acceptable? So what this means is that at this point we - -57 -00:02:50,890 --> 00:02:54,660 -can really assess whether our estimates were accurate enough with respect - -58 -00:02:54,660 --> 00:02:57,740 -to what we actually spent for the project up to this point. - -59 -00:02:57,740 --> 00:03:00,390 -So unless we can answer in a positive way to - -60 -00:03:00,390 --> 00:03:03,790 -all these questions, the transition might be postponed by one release. - -61 -00:03:03,790 --> 00:03:05,930 -Because that means that we're still not ready to go - -62 -00:03:05,930 --> 00:03:08,660 -to the market. We're still not ready to deploy our product. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/19 - Transition Phase - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/19 - Transition Phase - lang_en_vs5.srt deleted file mode 100644 index e09b6fc..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/19 - Transition Phase - lang_en_vs5.srt +++ /dev/null @@ -1,231 +0,0 @@ -1 -00:00:00,300 --> 00:00:02,080 -But if we are ready to go to the market, - -2 -00:00:02,080 --> 00:00:04,800 -if we are ready to deploy our product, then we can - -3 -00:00:04,800 --> 00:00:07,160 -move to the transition phase, which has mainly to do - -4 -00:00:07,160 --> 00:00:10,360 -with deployment and maintainence of a system. So what are the - -5 -00:00:10,360 --> 00:00:12,950 -main activities in the transition phase? As we discussed in - -6 -00:00:12,950 --> 00:00:16,280 -our initial lessons, in most real world cases, there are issues - -7 -00:00:16,280 --> 00:00:20,820 -that manifest themselves after deployment, when we release our software and - -8 -00:00:20,820 --> 00:00:22,870 -actual users interact with the - -9 -00:00:22,870 --> 00:00:26,230 -software. Specifically, users might report failures - -10 -00:00:26,230 --> 00:00:28,965 -that they experienced while using the system. So, what we call - -11 -00:00:28,965 --> 00:00:33,120 -bug reports. Or they might report improvements they might want to see - -12 -00:00:33,120 --> 00:00:36,798 -in the software. So typically these will be new feature requests. And - -13 -00:00:36,798 --> 00:00:40,270 -in addition, there might be issues that don't come necessarily from the - -14 -00:00:40,270 --> 00:00:42,734 -users but that are related to the fact that our system - -15 -00:00:42,734 --> 00:00:45,920 -has to operate, has to work in a new execution environment. For - -16 -00:00:45,920 --> 00:00:48,930 -example, the new version of an operating system, or the new version - -17 -00:00:48,930 --> 00:00:51,474 -of a set of libraries. When this happens, we have to address - -18 -00:00:51,474 --> 00:00:55,020 -these issues by performing maintenance. Specifically, corrective maintenance - -19 -00:00:55,020 --> 00:00:58,900 -for bug reports, perfective maintenance, for feature requests, and - -20 -00:00:58,900 --> 00:01:02,270 -adaptive maintenance, for environment changes. And the result of - -21 -00:01:02,270 --> 00:01:04,319 -this is that we will have a new release - -22 -00:01:04,319 --> 00:01:06,550 -of the software. Other activities that are performed in - -23 -00:01:06,550 --> 00:01:10,480 -this phase include training, customer service, and providing help-line - -24 -00:01:10,480 --> 00:01:13,350 -assistance. Finally, if you remember what we saw when - -25 -00:01:13,350 --> 00:01:16,810 -we were looking at the banking IT system example, - -26 -00:01:16,810 --> 00:01:21,300 -the cycles within a development are not necessarily completely dis-joined, but - -27 -00:01:21,300 --> 00:01:23,940 -they might overlap a little bit. So something else that might - -28 -00:01:23,940 --> 00:01:26,650 -happen in the transition phase is that a new cycle may - -29 -00:01:26,650 --> 00:01:29,020 -start. So there might be some activities that are related to - -30 -00:01:29,020 --> 00:01:32,190 -the fact that we're starting to think about the new cycle. - -31 -00:01:32,190 --> 00:01:35,150 -So now let's see what kind of outcome these activities will - -32 -00:01:35,150 --> 00:01:38,410 -produce. The first one is a complete project with all the - -33 -00:01:38,410 --> 00:01:41,820 -artifacts that we mentioned before. Another outcome is that the product will - -34 -00:01:41,820 --> 00:01:44,090 -be actually in use. So the product will be in the - -35 -00:01:44,090 --> 00:01:46,870 -hands of the users and the users will start using it, will - -36 -00:01:46,870 --> 00:01:49,760 -start interacting with it, for real, not just in a beta testing - -37 -00:01:49,760 --> 00:01:53,260 -setting. Another outcome will be a lesson learnt. What worked. What didn't - -38 -00:01:53,260 --> 00:01:56,240 -work. What should we do different in the next cycle or in - -39 -00:01:56,240 --> 00:01:59,446 -the next development? And this is a very important part of the - -40 -00:01:59,446 --> 00:02:01,651 -whole process, because it;s what provides - -41 -00:02:01,651 --> 00:02:04,378 -feedback between cycles, and between projects. - -42 -00:02:04,378 --> 00:02:07,018 -And as we said before, in case we have a next released - -43 -00:02:07,018 --> 00:02:09,478 -planned or a next cycle coming up, we might want to - -44 -00:02:09,478 --> 00:02:12,922 -start planning for the next release. So another outcome will be - -45 -00:02:12,922 --> 00:02:15,783 -the plan for the next release. So similar to the other - -46 -00:02:15,783 --> 00:02:19,147 -phases, also for the transition phase, we have a milestone, which - -47 -00:02:19,147 --> 00:02:21,733 -is the fourth milestone in this case. And therefore we - -48 -00:02:21,733 --> 00:02:25,061 -have evaluation criteria for the transition phase that will define whether - -49 -00:02:25,061 --> 00:02:28,530 -we've reached the milestone or not. And in this case, one - -50 -00:02:28,530 --> 00:02:32,040 -important assessment is whether the user is satisfied. So users are - -51 -00:02:32,040 --> 00:02:34,370 -actually using our product now, so we can get feedback - -52 -00:02:34,370 --> 00:02:36,260 -from them, we can see whether the product makes them - -53 -00:02:36,260 --> 00:02:40,390 -happy or not. And we continue assessing whether our expenditures - -54 -00:02:40,390 --> 00:02:43,460 -are fine with respect to our estimates. And in this case, - -55 -00:02:43,460 --> 00:02:46,882 -problems with this milestone might lead to further maintenance of - -56 -00:02:46,882 --> 00:02:48,840 -the system. So for example, we might need to produce - -57 -00:02:48,840 --> 00:02:51,460 -a new release to address some of the issues that - -58 -00:02:51,460 --> 00:02:54,410 -the users identified, as we discussed a couple of minutes ago. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/2 - History of RUP - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/2 - History of RUP - lang_en_vs6.srt deleted file mode 100644 index 83a656b..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/2 - History of RUP - lang_en_vs6.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,320 --> 00:00:02,252 -As I just said, today we're going to talk about the - -2 -00:00:02,252 --> 00:00:04,876 -Rational Unified Process. And you know that I like to provide - -3 -00:00:04,876 --> 00:00:07,632 -the historical perspective of the topics that we cover in class - -4 -00:00:07,632 --> 00:00:10,070 -and this lesson is no exception. So let's see a little bit - -5 -00:00:10,070 --> 00:00:12,500 -of history of RUP. To do that we have to go - -6 -00:00:12,500 --> 00:00:17,620 -back to 1997 when Rational defined six best practices for modern software - -7 -00:00:17,620 --> 00:00:20,930 -engineering. So let's look at what these practices were. The first - -8 -00:00:20,930 --> 00:00:25,330 -practice involved developing in an iterative way with risk as the primary - -9 -00:00:25,330 --> 00:00:27,700 -iteration driver. The second practice had to do - -10 -00:00:27,700 --> 00:00:31,375 -with managing requirements, including updating them and keeping - -11 -00:00:31,375 --> 00:00:34,570 -traceability information between requirements and other software - -12 -00:00:34,570 --> 00:00:37,675 -artifacts. Practice number three was to employ a - -13 -00:00:37,675 --> 00:00:40,830 -component-based architecture. What that means is to have - -14 -00:00:40,830 --> 00:00:43,540 -a high level design that focuses on cooperating - -15 -00:00:43,540 --> 00:00:46,780 -components that are nevertheless very cohesive and highly - -16 -00:00:46,780 --> 00:00:50,710 -decoupled. Modeling software visually is another key aspect - -17 -00:00:50,710 --> 00:00:53,250 -of the rational unified process. And the key concept - -18 -00:00:53,250 --> 00:00:56,070 -here is to use visual diagrams, and in particular UML - -19 -00:00:56,070 --> 00:00:58,520 -visual diagrams, in a very extensive way so as - -20 -00:00:58,520 --> 00:01:01,950 -to make artifacts easier to understand and agree upon among - -21 -00:01:01,950 --> 00:01:04,849 -stakeholders. And the fact that the process is defined - -22 -00:01:04,849 --> 00:01:08,510 -in an iterative way, allows for performing quality assurance activities - -23 -00:01:08,510 --> 00:01:11,430 -in a continuous way. So it allows for continuously - -24 -00:01:11,430 --> 00:01:13,860 -verifying quality throughout the development - -25 -00:01:13,860 --> 00:01:16,220 -process. Finally, change management and - -26 -00:01:16,220 --> 00:01:18,750 -control were also at the center of the rational - -27 -00:01:18,750 --> 00:01:22,100 -approach These six practices, that I just mentioned were - -28 -00:01:22,100 --> 00:01:24,740 -the starting point for the development of the Rational - -29 -00:01:24,740 --> 00:01:27,300 -Unified Process, which is what we're going to discuss next. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/20 - Phases and Iterations - lang_en_vs4.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/20 - Phases and Iterations - lang_en_vs4.srt deleted file mode 100644 index 01689f9..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/20 - Phases and Iterations - lang_en_vs4.srt +++ /dev/null @@ -1,107 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,210 -So now I would like to wrap up this lesson - -2 -00:00:02,210 --> 00:00:05,720 -by going back to our discussion of rational unified process - -3 -00:00:05,720 --> 00:00:08,630 -phases and iterations. So to do that I'm going to bring - -4 -00:00:08,630 --> 00:00:12,480 -back the presentation that I used before, the summary representation - -5 -00:00:12,480 --> 00:00:16,840 -about phases and traditional software engineering activities. And I want to - -6 -00:00:16,840 --> 00:00:19,720 -use this representation to stress and discuss a couple of - -7 -00:00:19,720 --> 00:00:22,140 -things. Mainly I want to recap it because I think - -8 -00:00:22,140 --> 00:00:25,480 -it is very important. What is the relation between the rational - -9 -00:00:25,480 --> 00:00:29,270 -unified process, and the traditional software engineering phases, and software - -10 -00:00:29,270 --> 00:00:31,540 -engineering activities? And I like to do it now that - -11 -00:00:31,540 --> 00:00:33,648 -we have discussed the phases in a little more detail. - -12 -00:00:33,648 --> 00:00:35,920 -So I want to make sure that it is clear by now - -13 -00:00:35,920 --> 00:00:39,660 -how and when the traditional software engineering activities, the ones - -14 -00:00:39,660 --> 00:00:42,620 -listed here, take place in the context of the RUP - -15 -00:00:42,620 --> 00:00:45,850 -phases, the four listed up here. For instance, it should - -16 -00:00:45,850 --> 00:00:50,410 -be clear why implementation takes place mainly in the construction phase. - -17 -00:00:50,410 --> 00:00:54,140 -Why requirements engineering is prominent in the elaboration phase - -18 -00:00:54,140 --> 00:00:58,290 -and why deployment activities occur mostly in the transition phase, - -19 -00:00:58,290 --> 00:01:00,120 -and so on. So it should be clear now - -20 -00:01:00,120 --> 00:01:03,930 -why the activities are so distributed in the four phases. - -21 -00:01:03,930 --> 00:01:06,130 -It should also be clear that although there is - -22 -00:01:06,130 --> 00:01:09,350 -normally one main phase for each activity, the activities really - -23 -00:01:09,350 --> 00:01:12,550 -span multiple phases. Which is actually one of the interesting - -24 -00:01:12,550 --> 00:01:15,580 -aspect of RUP. So the fact that you're not really - -25 -00:01:15,580 --> 00:01:19,700 -done with an activity even in later phases. Why? Well, because that allows - -26 -00:01:19,700 --> 00:01:22,070 -you, in subsequent iterations, to address - -27 -00:01:22,070 --> 00:01:24,370 -problems that came up in previous iterations. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/3 - Key Features of RUP - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/3 - Key Features of RUP - lang_en_vs6.srt deleted file mode 100644 index 74dc52a..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/3 - Key Features of RUP - lang_en_vs6.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,300 --> 00:00:03,450 -So let's start by seeing how these activities and principles - -2 -00:00:03,450 --> 00:00:06,640 -are reflected in the key features of the Rational Unified - -3 -00:00:06,640 --> 00:00:10,010 -Process. First of all, the Rational Unified Process is a - -4 -00:00:10,010 --> 00:00:13,700 -software process model. So if you recall our introductory lessons, - -5 -00:00:13,700 --> 00:00:16,670 -that means two main things. The first one is that - -6 -00:00:16,670 --> 00:00:19,200 -it defines an order of phases that have to be - -7 -00:00:19,200 --> 00:00:21,970 -followed in the software process. And the second thing is - -8 -00:00:21,970 --> 00:00:25,420 -that it also prescribes transition criteria, so when to go - -9 -00:00:25,420 --> 00:00:28,030 -from one phase to the next. The second key - -10 -00:00:28,030 --> 00:00:31,290 -feature of RUP is that it is component based. And - -11 -00:00:31,290 --> 00:00:33,810 -also in this case, this implies two main things. - -12 -00:00:33,810 --> 00:00:36,410 -The first one is that a software system is defined - -13 -00:00:36,410 --> 00:00:39,420 -and built as a set of software components. So - -14 -00:00:39,420 --> 00:00:43,110 -software components are the building blocks of our software system. - -15 -00:00:43,110 --> 00:00:45,550 -And the second one is that there must be well-defined - -16 -00:00:45,550 --> 00:00:48,440 -interfaces between these components, interfaces - -17 -00:00:48,440 --> 00:00:50,750 -through which these components communicate. - -18 -00:00:50,750 --> 00:00:53,020 -In addition, the Rational Unified Process is - -19 -00:00:53,020 --> 00:00:56,080 -tightly related to UML. And in particular, it - -20 -00:00:56,080 --> 00:00:58,820 -relies extensively on UML for its notation, and - -21 -00:00:58,820 --> 00:01:02,120 -with respect to its basic principles. Finally, the - -22 -00:01:02,120 --> 00:01:05,140 -three main distinguishing aspects of the Rational Unified - -23 -00:01:05,140 --> 00:01:09,830 -Process are that it is use-case driven, architecture-centric - -24 -00:01:09,830 --> 00:01:12,680 -and iterative and incremental. So let's now look - -25 -00:01:12,680 --> 00:01:15,565 -in more detail at these three distinguishing aspects, - -26 -00:01:15,565 --> 00:01:17,540 -and we're going to look at each one of them individually. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/4 - UML Quiz - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/4 - UML Quiz - lang_en_vs5.srt deleted file mode 100644 index 4f4af17..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/4 - UML Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,440 -Before doing that though, let's have a quiz to check whether you remember - -2 -00:00:03,440 --> 00:00:07,160 -the basics of UML. Since we're going to talk about use cases, I want - -3 -00:00:07,160 --> 00:00:10,040 -to ask you, what is the difference between a use case and a - -4 -00:00:10,040 --> 00:00:13,330 -use case model. So here are the possible answers, and you can mark - -5 -00:00:13,330 --> 00:00:16,710 -more than one. First one is that only use case models include actors. - -6 -00:00:16,710 --> 00:00:19,150 -The second is that they are the same thing. The third one is - -7 -00:00:19,150 --> 00:00:22,000 -that a use case model is a set of use cases. The fourth - -8 -00:00:22,000 --> 00:00:24,950 -one says that a use case is a set of use case models. - -9 -00:00:24,950 --> 00:00:26,520 -Finally, the last one says that use cases - -10 -00:00:26,520 --> 00:00:29,650 -are a dynamic representation, whereas use case models - -11 -00:00:29,650 --> 00:00:31,880 -are a static representation of a system. So - -12 -00:00:31,880 --> 00:00:33,810 -mark all the answers that you think are correct. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/5 - UML Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/5 - UML Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index c107545..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/5 - UML Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,350 -And the correct answer, in this case it's only one, - -2 -00:00:02,350 --> 00:00:04,720 -is that a use case model is a set of use - -3 -00:00:04,720 --> 00:00:07,390 -cases. So a use case model is simply a collection of - -4 -00:00:07,390 --> 00:00:10,790 -use cases that represent different pieces of functionality for the system. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/6 - UML Quiz - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/6 - UML Quiz - lang_en_vs6.srt deleted file mode 100644 index c2627aa..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/6 - UML Quiz - lang_en_vs6.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,330 --> 00:00:02,650 -So, since we are talking about use case diagrams, I also want - -2 -00:00:02,650 --> 00:00:05,593 -to ask you, what are use case diagrams used for? So, what - -3 -00:00:05,593 --> 00:00:08,600 -are they good for? Why are they useful within a software process? - -4 -00:00:08,600 --> 00:00:12,130 -Also in this case, I'm providing several possible answers. They are not really - -5 -00:00:12,130 --> 00:00:15,420 -used for anything. Or, they can be used to prioritize requirements. Or, - -6 -00:00:15,420 --> 00:00:18,220 -maybe they can be used for user interface design. They can be - -7 -00:00:18,220 --> 00:00:20,280 -used during requirements elicitation. They can - -8 -00:00:20,280 --> 00:00:21,890 -be used for code optimization. And - -9 -00:00:21,890 --> 00:00:25,570 -finally, they can be used for test case design. Also, in this case, - -10 -00:00:25,570 --> 00:00:28,650 -I would like you to mark all the answers that you think are correct. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/7 - UML Quiz Solution - lang_en_vs6.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/7 - UML Quiz Solution - lang_en_vs6.srt deleted file mode 100644 index c201e96..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/7 - UML Quiz Solution - lang_en_vs6.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,910 -In this case there are multiple, correct answers. So you should have - -2 -00:00:02,910 --> 00:00:05,800 -marked several of those. So let's go through the list. Well this - -3 -00:00:05,800 --> 00:00:08,970 -is definitely not true. They are used for something. The second answer, - -4 -00:00:08,970 --> 00:00:11,880 -is a correct one, because you can order, the use cases that - -5 -00:00:11,880 --> 00:00:13,320 -you planned to realize, according to - -6 -00:00:13,320 --> 00:00:15,580 -your prioritization criteria. So basically what - -7 -00:00:15,580 --> 00:00:19,100 -you're doing you're prioritizing either in terms of functionality. So you, you - -8 -00:00:19,100 --> 00:00:21,680 -can decide which piece of functionality you want to realize first in - -9 -00:00:21,680 --> 00:00:25,430 -your system. Or you can also prioritize based on the actors involved. - -10 -00:00:25,430 --> 00:00:27,530 -Maybe there are some actors, maybe there are some user - -11 -00:00:27,530 --> 00:00:30,580 -roles that you want to support before others, and we'll - -12 -00:00:30,580 --> 00:00:33,580 -see some examples of that. The next correct question is - -13 -00:00:33,580 --> 00:00:37,190 -that they can be used for requirements elicitation. Why? Well - -14 -00:00:37,190 --> 00:00:40,130 -because used cases express what the system is supposed to - -15 -00:00:40,130 --> 00:00:43,490 -do for each user. They're an ideal way to collect, - -16 -00:00:43,490 --> 00:00:47,110 -represent, and check functional requirements. And we'll also get back - -17 -00:00:47,110 --> 00:00:50,700 -to this. And finally, use cases can definitely be used - -18 -00:00:50,700 --> 00:00:54,160 -for test case design. So why is that? Because each - -19 -00:00:54,160 --> 00:00:58,500 -use case represents a scenario of interaction between users and the - -20 -00:00:58,500 --> 00:01:03,470 -system. So testers can very naturally construct test cases based - -21 -00:01:03,470 --> 00:01:06,570 -on use cases. And in addition, and most importantly, they can - -22 -00:01:06,570 --> 00:01:09,320 -do that even in the absence of code that realizes - -23 -00:01:09,320 --> 00:01:11,490 -a use case. So they can do it as soon as - -24 -00:01:11,490 --> 00:01:13,740 -they have the requirements. They don't have to wait until the - -25 -00:01:13,740 --> 00:01:16,150 -code is ready. So this is not very a important point. - -26 -00:01:16,150 --> 00:01:18,400 -So you can have your test cases ready even before - -27 -00:01:18,400 --> 00:01:21,150 -writing the code. And now for completeness. Even though this is - -28 -00:01:21,150 --> 00:01:23,787 -not listed in the quiz. I also want to mention two - -29 -00:01:23,787 --> 00:01:27,040 -additional uses for use cases. The first one is that use - -30 -00:01:27,040 --> 00:01:30,080 -cases can be used to estimate effort as we will discuss - -31 -00:01:30,080 --> 00:01:32,710 -in more detail in mini course four, when we talk about - -32 -00:01:32,710 --> 00:01:35,770 -agile software development. And they can also be used by - -33 -00:01:35,770 --> 00:01:38,290 -customers to assess requirements. Which - -34 -00:01:38,290 --> 00:01:41,170 -is another fundamentally important role of - -35 -00:01:41,170 --> 00:01:44,640 -the use cases. They provide a common language between the customers - -36 -00:01:44,640 --> 00:01:47,850 -and the developers which makes it easier to collect the right requirements. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/8 - Use Case Driven - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/8 - Use Case Driven - lang_en_vs5.srt deleted file mode 100644 index 14ddaab..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/8 - Use Case Driven - lang_en_vs5.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,370 -Now let's go back to the distinguishing aspects of - -2 -00:00:02,370 --> 00:00:04,710 -RUP, starting from the first one. That is, that the - -3 -00:00:04,710 --> 00:00:08,170 -rational unified process is use-case driven. So let's see what - -4 -00:00:08,170 --> 00:00:11,310 -that means. Generally speaking, we can see a system as - -5 -00:00:11,310 --> 00:00:14,500 -something that performs a sequence of actions in response to - -6 -00:00:14,500 --> 00:00:18,100 -user inputs. So the user submits some requests, or requests - -7 -00:00:18,100 --> 00:00:22,140 -some functionality, and the system responds to those requests. Use - -8 -00:00:22,140 --> 00:00:25,750 -cases, as we just said, capture exactly this interaction and - -9 -00:00:25,750 --> 00:00:28,620 -answer the question, what is the system supposed to do - -10 -00:00:28,620 --> 00:00:32,150 -for each user? So, this is a very important point. - -11 -00:00:32,150 --> 00:00:34,160 -So they can represent what a system can do for - -12 -00:00:34,160 --> 00:00:37,240 -each of the different types of users of the system. - -13 -00:00:37,240 --> 00:00:39,430 -For this reason, and as we will see in more - -14 -00:00:39,430 --> 00:00:42,430 -detail, in the rational unified process, use cases are a - -15 -00:00:42,430 --> 00:00:46,680 -central element of the whole development life cycle. From requirements - -16 -00:00:46,680 --> 00:00:51,360 -engineering, all the way through the process until testing and maintenance. - -17 -00:00:51,360 --> 00:00:54,620 -So, once more, use cases are used to support and - -18 -00:00:54,620 --> 00:00:58,162 -help each one of these phases in the rational unified process. diff --git a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/9 - Architecture Centric - lang_en_vs5.srt b/usth/ICT2.7/P3L4 Unified Software Process Subtitles/9 - Architecture Centric - lang_en_vs5.srt deleted file mode 100644 index b0f5487..0000000 --- a/usth/ICT2.7/P3L4 Unified Software Process Subtitles/9 - Architecture Centric - lang_en_vs5.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,180 --> 00:00:02,760 -The second distinguishing aspect of RUP is that it - -2 -00:00:02,760 --> 00:00:06,290 -is architecture-centric. As we saw in the first lesson - -3 -00:00:06,290 --> 00:00:09,340 -of this mini-course, a software architecture is a view - -4 -00:00:09,340 --> 00:00:12,740 -of the entire system that represents all high level - -5 -00:00:12,740 --> 00:00:15,710 -principal design decisions. Another way to see this is - -6 -00:00:15,710 --> 00:00:18,640 -by saying that use cases define the function of - -7 -00:00:18,640 --> 00:00:22,220 -the system, where as architecture defines the form of - -8 -00:00:22,220 --> 00:00:25,260 -the system. Use cases give the functionality, architecture tells - -9 -00:00:25,260 --> 00:00:28,670 -you how the system should be structured to provide the functionality. - -10 -00:00:28,670 --> 00:00:31,000 -So how do we define a software architecture in the rational - -11 -00:00:31,000 --> 00:00:33,730 -unified process. Also in this case this happens through - -12 -00:00:33,730 --> 00:00:37,340 -a sort of a iterative process. We start by creating a rough - -13 -00:00:37,340 --> 00:00:40,070 -outline of the system. And in this case we do it - -14 -00:00:40,070 --> 00:00:44,260 -independently from the functionality. So this is just the general structure - -15 -00:00:44,260 --> 00:00:46,770 -of the system. For example, we model aspects such as the - -16 -00:00:46,770 --> 00:00:50,840 -platform on which the system will run, the overall style. For example, - -17 -00:00:50,840 --> 00:00:52,780 -whether it's a client server or a peer to peer - -18 -00:00:52,780 --> 00:00:56,450 -system and so on. We then use the key use cases - -19 -00:00:56,450 --> 00:01:00,550 -in our use case diagram to define the main subsystems of - -20 -00:01:00,550 --> 00:01:03,470 -my architecture. For example, in the case of a banking IT - -21 -00:01:03,470 --> 00:01:07,150 -system, one of these subsystems might be the withdrawal system. So - -22 -00:01:07,150 --> 00:01:09,410 -what will happen in that case is that we will have - -23 -00:01:09,410 --> 00:01:13,240 -some use case that refers to the withdrawal activity, and by - -24 -00:01:13,240 --> 00:01:16,470 -analyzing that use case, we'll realize that we need a subsystem - -25 -00:01:16,470 --> 00:01:19,810 -that implements that piece of functionality. So again, we use - -26 -00:01:19,810 --> 00:01:22,680 -the key use cases to identify and define the key - -27 -00:01:22,680 --> 00:01:26,290 -subsystems for my architecture. So once we have that we - -28 -00:01:26,290 --> 00:01:30,510 -keep refining the architecture by using additional use cases. So - -29 -00:01:30,510 --> 00:01:33,030 -considering more and more pieces of functionality that will help - -30 -00:01:33,030 --> 00:01:35,430 -us to refine the architecture of the system and also - -31 -00:01:35,430 --> 00:01:39,260 -leveraging our increasing understanding of the system that we're modeling. - -32 -00:01:39,260 --> 00:01:41,470 -And this will continue until we are happy with the - -33 -00:01:41,470 --> 00:01:42,550 -architecture that we define. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/1 - Lesson Overview - lang_en_vs5.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/1 - Lesson Overview - lang_en_vs5.srt deleted file mode 100644 index df7cdbe..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/1 - Lesson Overview - lang_en_vs5.srt +++ /dev/null @@ -1,91 +0,0 @@ -1 -00:00:00,700 --> 00:00:03,682 -Hello, and welcome back. In the previous - -2 -00:00:03,682 --> 00:00:07,160 -mini course we covered software design, discussed the - -3 -00:00:07,160 --> 00:00:10,020 -UML and the unified software process, and worked - -4 -00:00:10,020 --> 00:00:12,160 -on a complex project in which we developed - -5 -00:00:12,160 --> 00:00:16,020 -a distributed software system. In this mini course, - -6 -00:00:16,020 --> 00:00:17,900 -which is the last one for this class, - -7 -00:00:17,900 --> 00:00:21,080 -we will cover my very favorite topic, software - -8 -00:00:21,080 --> 00:00:24,850 -testing or more generally, software verification and validation. - -9 -00:00:25,860 --> 00:00:28,850 -So why do I love software testing? Well, - -10 -00:00:28,850 --> 00:00:32,430 -I love it because it is extremely important. It - -11 -00:00:32,430 --> 00:00:38,330 -is very challenging and it is fun but only if you do it in the right way. - -12 -00:00:38,330 --> 00:00:40,900 -In the upcoming lessons we will discuss why - -13 -00:00:40,900 --> 00:00:44,710 -software verification is important, why software testing, which is - -14 -00:00:44,710 --> 00:00:47,730 -a specific type of verification, is important, and - -15 -00:00:47,730 --> 00:00:50,730 -what are the main techniques for performing software testing. - -16 -00:00:51,910 --> 00:00:54,866 -We will also discuss test-driven development and agile methods, - -17 -00:00:54,866 --> 00:00:57,780 -in which we'll lose some of the rigidity of - -18 -00:00:57,780 --> 00:01:01,340 -the earlier processes and turn things around by writing - -19 -00:01:01,340 --> 00:01:04,260 -tests before we write the code and then writing - -20 -00:01:04,260 --> 00:01:08,280 -code that makes the test pass. Finally, we will - -21 -00:01:08,280 --> 00:01:10,750 -perform a project, in which you get to apply - -22 -00:01:10,750 --> 00:01:14,010 -most of the principles and practices of agile development - -23 -00:01:14,010 --> 00:01:17,430 -in a realistic scenario. So let's jump right in. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/10 - Verification Approaches - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/10 - Verification Approaches - lang_en_vs4.srt deleted file mode 100644 index a671818..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/10 - Verification Approaches - lang_en_vs4.srt +++ /dev/null @@ -1,239 +0,0 @@ -1 -00:00:00,320 --> 00:00:01,630 -Now that we got out of the way this - -2 -00:00:01,630 --> 00:00:04,460 -initial set of basic definitions. Let's go back to our - -3 -00:00:04,460 --> 00:00:08,770 -main concept, which is software verification. We said that software - -4 -00:00:08,770 --> 00:00:11,730 -is buggy, and because software is buggy, we need to - -5 -00:00:11,730 --> 00:00:14,690 -verify the software as much as we can. But how - -6 -00:00:14,690 --> 00:00:17,960 -can we verify software? There are several ways to verify - -7 -00:00:17,960 --> 00:00:21,150 -a software system. Among those, we will discuss four mainstream - -8 -00:00:21,150 --> 00:00:25,410 -approaches. The first one is testing, also called dynamic verification. - -9 -00:00:25,410 --> 00:00:29,400 -The second approach is static verification. The third approach is - -10 -00:00:29,400 --> 00:00:33,000 -inspections. And finally, we're going to consider a fourth approach which is - -11 -00:00:33,000 --> 00:00:36,090 -formal proofs of correctness. So what I'm going to do - -12 -00:00:36,090 --> 00:00:39,570 -next, I'm going to first provide an overview of these approaches and - -13 -00:00:39,570 --> 00:00:41,930 -then discuss some of them in more depth and please - -14 -00:00:41,930 --> 00:00:44,430 -note that although we will discuss all four approaches we will - -15 -00:00:44,430 --> 00:00:47,350 -spend most of our time on software testing. As software - -16 -00:00:47,350 --> 00:00:50,850 -testing is the most popular and most used approach in industry. - -17 -00:00:50,850 --> 00:00:53,050 -So let's start with our overview and in particular - -18 -00:00:53,050 --> 00:00:58,050 -with testing. Testing a software system means exercising the system - -19 -00:00:58,050 --> 00:01:01,680 -to try to make it fail. More precisely, let's consider - -20 -00:01:01,680 --> 00:01:04,440 -a program. Its input domain, which is the set of - -21 -00:01:04,440 --> 00:01:06,990 -all the possible inputs for the program and, its output - -22 -00:01:06,990 --> 00:01:09,470 -domain, which is a set of all the possible corresponding - -23 -00:01:09,470 --> 00:01:13,010 -outputs. Given this context, we can define what a test - -24 -00:01:13,010 --> 00:01:16,360 -case is. A test case is a pair that consists - -25 -00:01:16,360 --> 00:01:19,090 -of a, an input from the input domain D, - -26 -00:01:19,090 --> 00:01:22,620 -and then, expected output O from the output domain. - -27 -00:01:22,620 --> 00:01:25,950 -And O is the element in the output domain - -28 -00:01:25,950 --> 00:01:29,670 -that a correct software would produce when ran against I. - -29 -00:01:29,670 --> 00:01:32,170 -We can also define the concept of test suite, - -30 -00:01:32,170 --> 00:01:34,840 -which is a set of test cases, and we're going to - -31 -00:01:34,840 --> 00:01:37,730 -use these two concepts of test case and test - -32 -00:01:37,730 --> 00:01:41,400 -suite quite a bit in the rest of the lessons. - -33 -00:01:41,400 --> 00:01:44,980 -Subject verification, tries to identify specific classes of problems - -34 -00:01:44,980 --> 00:01:47,620 -in the program. Such as null pointer dereferences. And - -35 -00:01:47,620 --> 00:01:49,750 -unlike testing, what it does is that it does - -36 -00:01:49,750 --> 00:01:53,610 -not just consider individual inputs, it instead considers all - -37 -00:01:53,610 --> 00:01:56,594 -possible inputs for the program. So it consider in - -38 -00:01:56,594 --> 00:01:59,366 -a sense all possible executions of the program and - -39 -00:01:59,366 --> 00:02:02,402 -all possible behaviors of the program, that's why we - -40 -00:02:02,402 --> 00:02:06,560 -save the verification unlike testing it's complete. The 3rd technique - -41 -00:02:06,560 --> 00:02:08,755 -we are going to consider is inspections, - -42 -00:02:08,755 --> 00:02:12,804 -and inspections are also called reviews or walkthroughs. - -43 -00:02:12,804 --> 00:02:15,010 -And unlike the previous techniques, inspections are a - -44 -00:02:15,010 --> 00:02:18,660 -human intensive activity, more precisely, they are a - -45 -00:02:18,660 --> 00:02:22,520 -manual and group activity in which several - -46 -00:02:22,520 --> 00:02:25,700 -people from the organization that developed the software, - -47 -00:02:25,700 --> 00:02:29,190 -look at the code or other artifacts developed - -48 -00:02:29,190 --> 00:02:31,888 -during the software production and try to identify - -49 -00:02:31,888 --> 00:02:35,950 -defects in these artifacts. And interestingly inspections - -50 -00:02:35,950 --> 00:02:37,580 -have been shown to be quite effective in - -51 -00:02:37,580 --> 00:02:39,820 -practice and that's the reason why they're used - -52 -00:02:39,820 --> 00:02:42,550 -quite widely in the industry. Finally, the last - -53 -00:02:42,550 --> 00:02:45,100 -technique I want to mention is Formal - -54 -00:02:45,100 --> 00:02:49,650 -Proof (of correctness). Given a software specification, and - -55 -00:02:49,650 --> 00:02:53,370 -actually a formal specification, so a document that - -56 -00:02:53,370 --> 00:02:57,410 -formally defines and specifies the behavior, the expected - -57 -00:02:57,410 --> 00:03:00,320 -behavior of the program. A form of proof of - -58 -00:03:00,320 --> 00:03:05,400 -correctness proves that the program being verified, actually implements - -59 -00:03:05,400 --> 00:03:07,922 -the program specification and it does that through a - -60 -00:03:07,922 --> 00:03:12,880 -sophisticated mathematical analysis of the specifications and of the code. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/11 - Pros and Cons of Approaches - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/11 - Pros and Cons of Approaches - lang_en_vs4.srt deleted file mode 100644 index 36a58ee..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/11 - Pros and Cons of Approaches - lang_en_vs4.srt +++ /dev/null @@ -1,195 +0,0 @@ -1 -00:00:00,230 --> 00:00:02,870 -The four different techniques that we just discussed have - -2 -00:00:02,870 --> 00:00:06,120 -a number of pros and cons. So next we - -3 -00:00:06,120 --> 00:00:08,780 -are going to discuss the main pros and cons - -4 -00:00:08,780 --> 00:00:11,140 -for these techniques, so as to be able to compare - -5 -00:00:11,140 --> 00:00:14,330 -them. When testing is concerned the main positive about - -6 -00:00:14,330 --> 00:00:17,600 -this technique is that it does not generate false - -7 -00:00:17,600 --> 00:00:21,740 -alarms. In other words, it doesn't generate false positives. - -8 -00:00:21,740 --> 00:00:25,180 -What that means, is that when testing generates a failure, - -9 -00:00:25,180 --> 00:00:27,230 -that means that there is an actual problem in the - -10 -00:00:27,230 --> 00:00:30,060 -code. The main limitation of testing, however, is that it - -11 -00:00:30,060 --> 00:00:33,680 -is highly incomplete. Consider again the picture that we drew - -12 -00:00:33,680 --> 00:00:36,430 -a little earlier. The one representing the input domain of - -13 -00:00:36,430 --> 00:00:39,430 -the program being tested. Even in the best scenario, testing - -14 -00:00:39,430 --> 00:00:44,050 -can consider only a tiny fraction of the problem domain, - -15 -00:00:44,050 --> 00:00:47,430 -and therefor a tiny fraction of the program's behavior, and - -16 -00:00:47,430 --> 00:00:50,308 -we'll say a lot more about that in the following lessons. - -17 -00:00:50,308 --> 00:00:53,780 -Static verification, unlike testing, has the main advantage - -18 -00:00:53,780 --> 00:00:57,320 -that it considers all program behaviors. If we - -19 -00:00:57,320 --> 00:01:00,370 -look back at our diagram, whereas testing will - -20 -00:01:00,370 --> 00:01:04,010 -select only a few of those inputs, static verification - -21 -00:01:04,010 --> 00:01:07,120 -will consider them all. Unfortunately, however, this comes - -22 -00:01:07,120 --> 00:01:08,990 -with a price. Due to limitation of this - -23 -00:01:08,990 --> 00:01:11,490 -kind of analysis and due to infeasibility issues, - -24 -00:01:11,490 --> 00:01:15,260 -static verifiation considers not only all the possible behaviours, - -25 -00:01:15,260 --> 00:01:18,870 -but also some impossible behaviors. And what that means is - -26 -00:01:18,870 --> 00:01:22,472 -that static gratificaition can generate false positives. And this is, - -27 -00:01:22,472 --> 00:01:24,590 -in fact, the main issue with static verification techniques. As - -28 -00:01:24,590 --> 00:01:28,550 -we will further discuss later in the class, static verification can - -29 -00:01:28,550 --> 00:01:31,280 -generate results that are not true. For example, it might - -30 -00:01:31,280 --> 00:01:33,970 -report a possible no point of the refernce that cannot - -31 -00:01:33,970 --> 00:01:37,590 -actually occur in practice. The strongest point about inspections is - -32 -00:01:37,590 --> 00:01:40,950 -that, when they're done in a rigorous way, they're systematic and - -33 -00:01:40,950 --> 00:01:43,420 -they result in a thorough analysis of the code. - -34 -00:01:43,420 --> 00:01:46,840 -They are nevertheless a manual process, a human process. - -35 -00:01:46,840 --> 00:01:49,890 -So they're not formal and their effectiveness may depend - -36 -00:01:49,890 --> 00:01:53,560 -on the specific people performing the inspection. So its results - -37 -00:01:53,560 --> 00:01:57,150 -can be subjective. Finally, the main pro about formal - -38 -00:01:57,150 --> 00:02:01,090 -proofs of correctness is that they provide strong guarantees. - -39 -00:02:01,090 --> 00:02:03,740 -They can guarantee that the program is correct, which - -40 -00:02:03,740 --> 00:02:06,280 -is not something that any of the other approaches can - -41 -00:02:06,280 --> 00:02:09,505 -do, including study verification. But the main limitation of - -42 -00:02:09,505 --> 00:02:12,680 -formal proofs is that they need a form of specification, - -43 -00:02:12,680 --> 00:02:15,750 -a complete mathematical description of the expected behavior of - -44 -00:02:15,750 --> 00:02:19,060 -the whole program, and unfortunately such a specification is rarely - -45 -00:02:19,060 --> 00:02:21,920 -available, and it is very complex to build one. - -46 -00:02:21,920 --> 00:02:25,170 -In addition, it is also very complex, and possibly expensive, - -47 -00:02:25,170 --> 00:02:27,720 -to prove that the program corresponds to a specification. - -48 -00:02:27,720 --> 00:02:30,990 -That is a process that requires strong mathematical skills and, - -49 -00:02:30,990 --> 00:02:32,551 -therefore, a very specialized personnel. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/12 - Verification Approaches Quiz - lang_en_vs5.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/12 - Verification Approaches Quiz - lang_en_vs5.srt deleted file mode 100644 index a5aa4f7..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/12 - Verification Approaches Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,240 --> 00:00:02,570 -So let's have another simple quiz, and we're going to - -2 -00:00:02,570 --> 00:00:05,490 -have our developer Brett introducing the quiz. And the - -3 -00:00:05,490 --> 00:00:07,900 -starting point for this quiz is the fact that - -4 -00:00:07,900 --> 00:00:11,970 -today, quality assurance, or verification, if you wish, is mostly - -5 -00:00:11,970 --> 00:00:15,730 -testing. That is, testing is the most commonly used - -6 -00:00:15,730 --> 00:00:19,550 -activity to perform software verification. So now, I'm going to show - -7 -00:00:19,550 --> 00:00:22,310 -you a quote, 50% of my company employees are - -8 -00:00:22,310 --> 00:00:25,691 -testers and the rest spends 50% of their time testing, - -9 -00:00:25,691 --> 00:00:27,347 -so I want to ask you, who said - -10 -00:00:27,347 --> 00:00:29,664 -that? I'm going to give you some possibilities. Was - -11 -00:00:29,664 --> 00:00:34,215 -that Yogi Berra, Steve Jobs, Henry Ford, Bill - -12 -00:00:34,215 --> 00:00:37,360 -Gates or Frank Gehry? Take your best guess. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/13 - Verification Approaches Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/13 - Verification Approaches Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index b8a0076..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/13 - Verification Approaches Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,11 +0,0 @@ -1 -00:00:00,260 --> 00:00:04,090 -And the correct answer is Bill Gates. So this gives you an idea of how - -2 -00:00:04,090 --> 00:00:07,070 -important testing is in Microsoft in particular, - -3 -00:00:07,070 --> 00:00:09,350 -but in many other software companies in general. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/14 - Testing Introduction - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/14 - Testing Introduction - lang_en_vs4.srt deleted file mode 100644 index 70df565..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/14 - Testing Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,119 +0,0 @@ -1 -00:00:00,340 --> 00:00:02,290 -So let's talk more about testing, as we said a - -2 -00:00:02,290 --> 00:00:06,500 -little earlier in the lesson, testing means executing the program on - -3 -00:00:06,500 --> 00:00:09,400 -a sample of the input domain, that is of all - -4 -00:00:09,400 --> 00:00:12,210 -the possible input data and I really want to stress that - -5 -00:00:12,210 --> 00:00:16,190 -this sample is tiny sample of the input domain. There - -6 -00:00:16,190 --> 00:00:19,154 -are two important aspects of testing that I'm want to mention here, - -7 -00:00:19,154 --> 00:00:22,360 -there first one is that testing is a dynamic technique. And - -8 -00:00:22,360 --> 00:00:25,370 -what that means is that the program must be executed in - -9 -00:00:25,370 --> 00:00:28,130 -order to perform testing. The second important point is that - -10 -00:00:28,130 --> 00:00:32,040 -testing is an optimistic approximation. And what does it mean - -11 -00:00:32,040 --> 00:00:35,590 -to be optimistic? Well, it means that the program under - -12 -00:00:35,590 --> 00:00:38,820 -test is exercised with a very small subset of all the - -13 -00:00:38,820 --> 00:00:41,260 -possible inputs as we just said. And this is done - -14 -00:00:41,260 --> 00:00:45,150 -under the assumption that the behavior with any other input - -15 -00:00:45,150 --> 00:00:47,770 -is consistent with the behavior shown for the selected subset - -16 -00:00:47,770 --> 00:00:51,140 -of input data, that is why it is an optimistic approach. - -17 -00:00:51,140 --> 00:00:54,620 -Another concept that I want to mention explicitly, is the - -18 -00:00:54,620 --> 00:00:57,930 -concept of successful test. And I'm going to do that, - -19 -00:00:57,930 --> 00:01:01,260 -using another quote. This one from Goodenough and Gerhart - -20 -00:01:01,260 --> 00:01:03,850 -in their paper Towards a Theory of Test Data Selection, - -21 -00:01:03,850 --> 00:01:06,420 -and what the quote says is that a test - -22 -00:01:06,420 --> 00:01:10,000 -is successful if the program fails. And this might sound - -23 -00:01:10,000 --> 00:01:13,650 -counterintuitive, but the point here is that testing cannot - -24 -00:01:13,650 --> 00:01:16,490 -prove the absence of errors, but only reveal their presence. - -25 -00:01:16,490 --> 00:01:21,550 -If a set of tests does not produce any failure, we are either in the extremely - -26 -00:01:21,550 --> 00:01:24,050 -unlikely case of a correct program, or in - -27 -00:01:24,050 --> 00:01:26,650 -the very likely situation of a bad set of - -28 -00:01:26,650 --> 00:01:30,932 -tests that are not able to reveal failures of the program. And that is why we - -29 -00:01:30,932 --> 00:01:32,730 -say that the test is successful if you - -30 -00:01:32,730 --> 00:01:35,110 -can show that there are problems in the program. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/15 - Testing Granularity Levels - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/15 - Testing Granularity Levels - lang_en_vs4.srt deleted file mode 100644 index 83df7ea..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/15 - Testing Granularity Levels - lang_en_vs4.srt +++ /dev/null @@ -1,275 +0,0 @@ -1 -00:00:00,160 --> 00:00:03,050 -And before I start talking about specific testing techniques, there's - -2 -00:00:03,050 --> 00:00:05,490 -something else that I want to discuss, which is Testing - -3 -00:00:05,490 --> 00:00:09,090 -Granularity Levels. So let's consider a software system, a system - -4 -00:00:09,090 --> 00:00:12,310 -made out of components that interact with one another. So the - -5 -00:00:12,310 --> 00:00:15,000 -first level that we consider in testing is called Unit - -6 -00:00:15,000 --> 00:00:18,490 -Testing, which is the testing of the individual units or modules - -7 -00:00:18,490 --> 00:00:20,690 -in isolation. The next step, is to see there are - -8 -00:00:20,690 --> 00:00:25,340 -multiple modules and their interactions. And this is called Integration Testing. - -9 -00:00:25,340 --> 00:00:28,650 -So, integration testing is the testing of the interactions among - -10 -00:00:28,650 --> 00:00:31,460 -different modules. And it can be performed according to different - -11 -00:00:31,460 --> 00:00:34,260 -strategies. Depending on the order in which the modules are - -12 -00:00:34,260 --> 00:00:37,570 -integrated and on whether we integrate one module at a time - -13 -00:00:37,570 --> 00:00:40,510 -or multiple modules together, all at once. And in this - -14 -00:00:40,510 --> 00:00:43,240 -latter case, we call this kind of integration testing, the one that - -15 -00:00:43,240 --> 00:00:47,640 -integrates all the modules at once, Big Bang integration testing. - -16 -00:00:47,640 --> 00:00:50,520 -And after performing integration testing, the next step is to test - -17 -00:00:50,520 --> 00:00:52,750 -the complete system as a whole. And this level of - -18 -00:00:52,750 --> 00:00:56,190 -testing is normally called, System Testing. So system testing in the - -19 -00:00:56,190 --> 00:00:59,560 -testing of the complete system and it includes both functional and - -20 -00:00:59,560 --> 00:01:03,250 -non functional testing. We will discuss functional and non functional testing - -21 -00:01:03,250 --> 00:01:05,575 -in details in the next two lessons. But I just - -22 -00:01:05,575 --> 00:01:08,330 -want to give you an idea of what they are intuitively. Functional - -23 -00:01:08,330 --> 00:01:12,250 -tests are the test that aim to verify the functionality provided - -24 -00:01:12,250 --> 00:01:15,680 -by the system. For example if you consider the function double - -25 -00:01:15,680 --> 00:01:17,840 -value that we saw earlier in the lesson, a - -26 -00:01:17,840 --> 00:01:20,660 -functional test will try to assess that that function - -27 -00:01:20,660 --> 00:01:23,970 -is producing the right value given a specific input. - -28 -00:01:23,970 --> 00:01:26,826 -Conversely, no functional test are the one that target, as - -29 -00:01:26,826 --> 00:01:30,540 -surprisingly, no functional properties of the system. For example, - -30 -00:01:30,540 --> 00:01:34,060 -no functional test will include performance tests, load tests, - -31 -00:01:34,060 --> 00:01:37,310 -robustness tests. In general, no functional tests will try - -32 -00:01:37,310 --> 00:01:41,410 -to assess different qualities of the system, such as reliability, - -33 -00:01:41,410 --> 00:01:45,970 -maintainability, usability, so basically, all the ilities that you can - -34 -00:01:45,970 --> 00:01:49,760 -think about. In addition to these three basic testing levels, there - -35 -00:01:49,760 --> 00:01:51,830 -are two more levels that I want to consider and that - -36 -00:01:51,830 --> 00:01:55,150 -I want to discuss. And they both involve the whole system. - -37 -00:01:55,150 --> 00:01:57,610 -And the first one is Acceptance Testing which is the - -38 -00:01:57,610 --> 00:02:01,320 -validation of the software against the Customer requirements. So this is - -39 -00:02:01,320 --> 00:02:04,090 -the testing that makes sure that the system does what the - -40 -00:02:04,090 --> 00:02:06,720 -customer wants it to do. And the last type of testing - -41 -00:02:06,720 --> 00:02:09,729 -that I want to mention is Regression Testing. And regression testing - -42 -00:02:09,729 --> 00:02:13,260 -is the type of testing or retesting, that we perform every time - -43 -00:02:13,260 --> 00:02:15,540 -that we change our system. And we need to make sure - -44 -00:02:15,540 --> 00:02:19,060 -that the changes behave as intended and that the unchanged code is - -45 -00:02:19,060 --> 00:02:22,680 -not negatively affected by the modification, by these changes. In fact, - -46 -00:02:22,680 --> 00:02:25,070 -what can happen when you modify the code is that parts of - -47 -00:02:25,070 --> 00:02:28,120 -the code that are related to the changes, are actually affected - -48 -00:02:28,120 --> 00:02:32,110 -by the changes, and start misbehaving. And we call those regression errors. - -49 -00:02:32,110 --> 00:02:35,080 -And regression errors, are very common. For example, you're probably - -50 -00:02:35,080 --> 00:02:38,070 -familiar with the situation in which, one software update is - -51 -00:02:38,070 --> 00:02:41,350 -released, and just a few days later, another software update - -52 -00:02:41,350 --> 00:02:44,640 -is released. In many cases that happens because the first update - -53 -00:02:44,640 --> 00:02:47,760 -was containing regression errors. So the changes in the code - -54 -00:02:47,760 --> 00:02:51,100 -that broke some functionality, that resulted in failures on the user's - -55 -00:02:51,100 --> 00:02:53,940 -machine and in bug reports and therefore that caused further - -56 -00:02:53,940 --> 00:02:57,090 -maintenance, further bug fixes, and a release on a new version. - -57 -00:02:57,090 --> 00:02:59,790 -Something else I'd like to mention about regression testing, is that - -58 -00:02:59,790 --> 00:03:02,535 -regression testing is one of the main causes why software maintenance is - -59 -00:03:02,535 --> 00:03:05,679 -so expensive. And that's also why researchers have invested a great - -60 -00:03:05,679 --> 00:03:07,481 -deal of effort into refining regression - -61 -00:03:07,481 --> 00:03:09,495 -testing techniques that can make regression - -62 -00:03:09,495 --> 00:03:12,599 -testing more effective and more efficient. So let me leave you, - -63 -00:03:12,599 --> 00:03:15,129 -with a little piece of advice which is try to automate as - -64 -00:03:15,129 --> 00:03:19,470 -much as possible regression testing. For example use scripts, use tools, make - -65 -00:03:19,470 --> 00:03:22,660 -sure to save your harness, make sure to save your input, and - -66 -00:03:22,660 --> 00:03:24,820 -outputs for the test, because you want to be able - -67 -00:03:24,820 --> 00:03:27,680 -to rerun your test, at a push of a button as - -68 -00:03:27,680 --> 00:03:29,750 -much as possible every time you change your code, to - -69 -00:03:29,750 --> 00:03:32,560 -avoid the presence of regression errors in the code you release. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/16 - Alpha and Beta Testing - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/16 - Alpha and Beta Testing - lang_en_vs4.srt deleted file mode 100644 index f81f551..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/16 - Alpha and Beta Testing - lang_en_vs4.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,510 --> 00:00:02,754 -All the testing levels that we've seen so far is what - -2 -00:00:02,754 --> 00:00:06,058 -we can call developer's testing. So that's testing that is performed - -3 -00:00:06,058 --> 00:00:09,649 -either within the testing organization, or by somebody who's doing like - -4 -00:00:09,649 --> 00:00:13,520 -third-party testers on behalf of the testing organization. But there are two - -5 -00:00:13,520 --> 00:00:16,280 -other kinds of testing that are worth mentioning that are also - -6 -00:00:16,280 --> 00:00:19,600 -related to testing phases and these are alpha and beta testing. - -7 -00:00:19,600 --> 00:00:23,050 -Alpha testing is the testing performed by distributing a software system - -8 -00:00:23,050 --> 00:00:26,000 -ready to be released to a set of users that are internal - -9 -00:00:26,000 --> 00:00:29,480 -to the organization that developed the software. So you can consider these - -10 -00:00:29,480 --> 00:00:32,460 -users as, if you pass me the term, guinea pigs that will - -11 -00:00:32,460 --> 00:00:35,170 -use an early version of the code and will likely discover errors - -12 -00:00:35,170 --> 00:00:37,850 -that escaped testing and will have made it to the field if - -13 -00:00:37,850 --> 00:00:41,390 -not caught. Beta testing is the next step after alpha testing, in - -14 -00:00:41,390 --> 00:00:44,530 -which the software is released to a selected subset of users, in - -15 -00:00:44,530 --> 00:00:47,770 -this case, outside your organization. And also in this case, the users - -16 -00:00:47,770 --> 00:00:51,110 -are likely to discover latent errors in the code before it is officially - -17 -00:00:51,110 --> 00:00:54,240 -released to the broader user population, so before we have an - -18 -00:00:54,240 --> 00:00:56,850 -actual product release. So you may wonder why do we need - -19 -00:00:56,850 --> 00:00:59,360 -to do both alpha and beta testing. Why not just one - -20 -00:00:59,360 --> 00:01:02,980 -of the two? The reason is that alpha testing is performed - -21 -00:01:02,980 --> 00:01:06,730 -to iron out the very obvious issues that still escape testing, - -22 -00:01:06,730 --> 00:01:09,610 -but we want to do that before involving people outside your - -23 -00:01:09,610 --> 00:01:12,730 -organization. And the rationale is that alpha testers have a higher - -24 -00:01:12,730 --> 00:01:16,710 -tolerance for problems than beta testers, who expect a mostly working system. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/17 - Black and White Box Testing Introduction - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/17 - Black and White Box Testing Introduction - lang_en_vs4.srt deleted file mode 100644 index c61e331..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/17 - Black and White Box Testing Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,115 +0,0 @@ -1 -00:00:00,370 --> 00:00:02,520 -We're almost at the end of this lesson. In the - -2 -00:00:02,520 --> 00:00:05,520 -next two lessons we're going to talk about two main families - -3 -00:00:05,520 --> 00:00:07,800 -of testing techniques, black-box testing - -4 -00:00:07,800 --> 00:00:10,340 -techniques, and white-box testing techniques. So, - -5 -00:00:10,340 --> 00:00:12,730 -what I want to do before getting into the discussion of the - -6 -00:00:12,730 --> 00:00:15,385 -specific techniques in this families. I want to give you an - -7 -00:00:15,385 --> 00:00:19,440 -overview of what black-box testing and white-box testing are. Black box - -8 -00:00:19,440 --> 00:00:21,950 -testing is the kind of testing in which we consider the - -9 -00:00:21,950 --> 00:00:25,570 -software as a closed box. That's why it's called black box. - -10 -00:00:25,570 --> 00:00:27,770 -So we don't look inside the software, we don't want to - -11 -00:00:27,770 --> 00:00:30,131 -look at the code. We just going to look at the description - -12 -00:00:30,131 --> 00:00:33,210 -of the software. So this is the testing that is based - -13 -00:00:33,210 --> 00:00:36,100 -on a description of the software, which is what we normally - -14 -00:00:36,100 --> 00:00:39,690 -call the specification for the software. And what black box testing - -15 -00:00:39,690 --> 00:00:44,040 -tries to do is to cover as much specified behavior as - -16 -00:00:44,040 --> 00:00:47,290 -possible, and the main limitation black box testing and the reason - -17 -00:00:47,290 --> 00:00:51,540 -why this is complimentary to white-box testing is that it cannot reveal - -18 -00:00:51,540 --> 00:00:56,590 -errors due to implementation details. Conversely, white-box testing - -19 -00:00:56,590 --> 00:00:58,430 -is the kind of testing that looks inside the - -20 -00:00:58,430 --> 00:01:00,360 -box. So looks at the code and how - -21 -00:01:00,360 --> 00:01:02,760 -the code is written and uses this information to - -22 -00:01:02,760 --> 00:01:06,300 -perform the testing. So white-box testing is based - -23 -00:01:06,300 --> 00:01:09,120 -on the code, its goal is to cover as - -24 -00:01:09,120 --> 00:01:13,210 -much coded behavior in this case, as possible, and - -25 -00:01:13,210 --> 00:01:17,100 -its limitation is that unlike black-box testing, it can't - -26 -00:01:17,100 --> 00:01:21,880 -reveal errors due to missing paths. Where missing paths are - -27 -00:01:21,880 --> 00:01:25,250 -a part of a software specification that are not implemented and - -28 -00:01:25,250 --> 00:01:27,320 -the reason why you can not reveal them is because - -29 -00:01:27,320 --> 00:01:29,790 -it is focused on the code and not on the specification. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/18 - Black Box Testing Example - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/18 - Black Box Testing Example - lang_en_vs4.srt deleted file mode 100644 index dab72eb..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/18 - Black Box Testing Example - lang_en_vs4.srt +++ /dev/null @@ -1,135 +0,0 @@ -1 -00:00:00,500 --> 00:00:03,185 -To give you a slightly better understanding of the differences - -2 -00:00:03,185 --> 00:00:06,300 -between black-box testing and white-box testing, I am going to provide you - -3 -00:00:06,300 --> 00:00:10,040 -a couple of simple examples that illustrate the, the strengths and - -4 -00:00:10,040 --> 00:00:12,920 -limitations of these two techniques. So, in this case, let's start - -5 -00:00:12,920 --> 00:00:15,750 -with black-box testing, so we're only working with this specification. - -6 -00:00:15,750 --> 00:00:18,540 -So, let's say that our specification says that this is a - -7 -00:00:18,540 --> 00:00:23,550 -program that inputs an integer value and prints it. And implementation, - -8 -00:00:23,550 --> 00:00:25,900 -we don't know because we're working at the black box level. - -9 -00:00:25,900 --> 00:00:28,710 -If we wanted to test this function according to its - -10 -00:00:28,710 --> 00:00:32,060 -specification, what we will probably do is to select a positive - -11 -00:00:32,060 --> 00:00:35,370 -integer, a negative integer, and the zero as test inputs - -12 -00:00:35,370 --> 00:00:37,840 -and see how the program behaves for these inputs. So let - -13 -00:00:37,840 --> 00:00:41,500 -me now show you a possible implementation for this specification. - -14 -00:00:41,500 --> 00:00:44,590 -What I'm showing here is this function that we called print - -15 -00:00:44,590 --> 00:00:48,010 -NumBytes, which takes the parameter and prints it. And one thing - -16 -00:00:48,010 --> 00:00:50,905 -that we notice right away is that, although in the specification, - -17 -00:00:50,905 --> 00:00:53,960 -numbers that are less than 1024 and numbers that - -18 -00:00:53,960 --> 00:00:57,320 -are greater or equal to 1024 are exactly equivalent from - -19 -00:00:57,320 --> 00:01:01,020 -the specification standpoint. They're however treated differently in the - -20 -00:01:01,020 --> 00:01:04,140 -code, so the developer decided that the program was just - -21 -00:01:04,140 --> 00:01:06,200 -going to print the value of the parameter if it's - -22 -00:01:06,200 --> 00:01:09,300 -less than 1024. But it was actually divided by 1024 - -23 -00:01:09,300 --> 00:01:13,560 -and printing it with a kilobyte mark after it - -24 -00:01:13,560 --> 00:01:16,170 -if you are greater than 1024. And notice that here, - -25 -00:01:16,170 --> 00:01:19,370 -there is a problem. The developer, just a number 124, instead - -26 -00:01:19,370 --> 00:01:22,840 -of 1024. So there's probably a typo in this point in the - -27 -00:01:22,840 --> 00:01:26,260 -code. So this is a case in which by simply doing black-box - -28 -00:01:26,260 --> 00:01:28,750 -testing, so by simply looking at the specific issue, we might miss - -29 -00:01:28,750 --> 00:01:31,510 -this problem. Because we have no reason to consider numbers that are - -30 -00:01:31,510 --> 00:01:34,780 -less than 1024 or greater than 1024. However if we were to - -31 -00:01:34,780 --> 00:01:38,010 -look at the code, so operating at white-box manner, we will right - -32 -00:01:38,010 --> 00:01:41,340 -away see that we need to have a test case that checks - -33 -00:01:41,340 --> 00:01:44,880 -the program when the parameter is greater than 1024. And we will find - -34 -00:01:44,880 --> 00:01:47,300 -the problem right away. So now let me show you a dual example. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/19 - White Box Testing Example - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/19 - White Box Testing Example - lang_en_vs4.srt deleted file mode 100644 index 896f9b1..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/19 - White Box Testing Example - lang_en_vs4.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,080 --> 00:00:03,086 -In this case we focus on white box testing. So consider now this - -2 -00:00:03,086 --> 00:00:06,556 -other function, called fun. And let's assume that we want to test this function - -3 -00:00:06,556 --> 00:00:09,777 -without having a specification. So without knowing exactly what it needs to do. - -4 -00:00:09,777 --> 00:00:12,996 -But just by looking at the code. So we will try to do the - -5 -00:00:12,996 --> 00:00:16,030 -problem in this case is to try to just execute all the statements. - -6 -00:00:16,030 --> 00:00:18,995 -In the function. And notice I will talk extensively of what does it - -7 -00:00:18,995 --> 00:00:22,560 -means to do white box testing later on in the next, two classes. - -8 -00:00:22,560 --> 00:00:25,560 -So if that's our goal, if our goal is to cover all the statements, - -9 -00:00:25,560 --> 00:00:27,670 -any input will really do. So any test case - -10 -00:00:27,670 --> 00:00:30,250 -will excecute all statements in the code. And we'll a - -11 -00:00:30,250 --> 00:00:33,801 -complete, you know, white-box testing coverage for the program. - -12 -00:00:33,801 --> 00:00:35,865 -Imagine that I now give you a specification for this - -13 -00:00:35,865 --> 00:00:39,071 -function. And what the specification says is that this - -14 -00:00:39,071 --> 00:00:43,232 -function inputs an integer parameter, param, and returns half of - -15 -00:00:43,232 --> 00:00:45,860 -its value, if param is even, and its value - -16 -00:00:45,860 --> 00:00:50,740 -unchanged otherwise. That means if param is odd. So looking - -17 -00:00:50,740 --> 00:00:54,320 -at this specification, we can clearly see that the function fun - -18 -00:00:54,320 --> 00:00:57,740 -works correctly only for even integers, and it doesn't work for - -19 -00:00:57,740 --> 00:01:00,570 -odd integers. Because it computes. Half of the value of the - -20 -00:01:00,570 --> 00:01:04,410 -parameter and returns it every time, no matter what param is. So - -21 -00:01:04,410 --> 00:01:07,320 -this is a case in which white box testing could easily - -22 -00:01:07,320 --> 00:01:10,620 -miss the problem, because as we said any input will exercise - -23 -00:01:10,620 --> 00:01:12,900 -the code. It's just by chance that we could reveal one - -24 -00:01:12,900 --> 00:01:15,750 -that revealed the problem in the code. Conversely if we were to - -25 -00:01:15,750 --> 00:01:19,520 -work, in a black box manner. Typically looking at the specification, we - -26 -00:01:19,520 --> 00:01:22,390 -will select at least one odd, and one even input number to - -27 -00:01:22,390 --> 00:01:25,010 -exercise all of the specified behavior. And we will find the problem - -28 -00:01:25,010 --> 00:01:28,110 -right away. So these two examples are just very small examples, and - -29 -00:01:28,110 --> 00:01:30,910 -they're kind of, you know, stretched. But these kind of issues occur - -30 -00:01:30,910 --> 00:01:33,680 -on a much bigger scale and in much more subtle ways in - -31 -00:01:33,680 --> 00:01:36,970 -real world software. And so what this examples do is to show - -32 -00:01:36,970 --> 00:01:41,270 -you, how black box and white box tests are really complimentary techniques. - -33 -00:01:41,270 --> 00:01:43,130 -So in the next two lessions we will explore - -34 -00:01:43,130 --> 00:01:45,130 -these two types of techniques in detail. We will - -35 -00:01:45,130 --> 00:01:48,020 -see different kinds of white box and black box - -36 -00:01:48,020 --> 00:01:50,670 -testing. And we'll talk about their strengths and the mutations diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/2 - Introduction - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/2 - Introduction - lang_en_vs4.srt deleted file mode 100644 index 1a25089..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/2 - Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,280 --> 00:00:02,750 -So let me start with some examples that motivate the - -2 -00:00:02,750 --> 00:00:06,330 -need for very fine software. The first example I want to - -3 -00:00:06,330 --> 00:00:09,580 -use is the famous Arian five. And if you remember - -4 -00:00:09,580 --> 00:00:13,060 -that's a rocket that exploded not too long after departure. - -5 -00:00:13,060 --> 00:00:15,800 -Because of a software error. And even without going to - -6 -00:00:15,800 --> 00:00:19,400 -such dramatic examples. I'm sure you're all familiar with this - -7 -00:00:19,400 --> 00:00:22,470 -kind of situation. Or this one, or again in this - -8 -00:00:22,470 --> 00:00:26,070 -one. And here I'm not really picking on any specific organization, - -9 -00:00:26,070 --> 00:00:32,280 -operating system or software. The point I want to make is that software is - -10 -00:00:32,280 --> 00:00:34,730 -buggy. In fact, a federal report from - -11 -00:00:34,730 --> 00:00:37,810 -a few years ago assessed that software bugs - -12 -00:00:37,810 --> 00:00:41,300 -are costing the US economy, $60 billion - -13 -00:00:41,300 --> 00:00:44,120 -every year. In addition, studies have shown that - -14 -00:00:44,120 --> 00:00:47,810 -software contains on average one to five - -15 -00:00:47,810 --> 00:00:51,472 -bugs every 1000 lines of code. Building 100% - -16 -00:00:51,472 --> 00:00:55,940 -correct mass-market software is just impossible. And if - -17 -00:00:55,940 --> 00:00:58,270 -this is the case, what can we do? - -18 -00:00:58,270 --> 00:01:03,520 -What we need to do is to verify software as much as possible. In this part of - -19 -00:01:03,520 --> 00:01:05,750 -the course, we will discuss how we can - -20 -00:01:05,750 --> 00:01:09,480 -do this. We will discuss different alternative ways - -21 -00:01:09,480 --> 00:01:13,980 -of very fine software systems. With particular attention - -22 -00:01:13,980 --> 00:01:16,570 -to the most common type of verification. Which is - -23 -00:01:16,570 --> 00:01:19,470 -software testing. Before doing that however, let - -24 -00:01:19,470 --> 00:01:21,090 -me go over some basic terms that are - -25 -00:01:21,090 --> 00:01:23,190 -commonly used. And I have to say, - -26 -00:01:23,190 --> 00:01:26,330 -often misused in the context of software verification. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/3 - Failure, Fault, and Error - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/3 - Failure, Fault, and Error - lang_en_vs4.srt deleted file mode 100644 index e6459c0..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/3 - Failure, Fault, and Error - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,390 --> 00:00:03,460 -The first term I want to define, is failure. - -2 -00:00:03,460 --> 00:00:09,080 -A failure is an observable incorrect behavior of the software. - -3 -00:00:09,080 --> 00:00:10,910 -It is conceptually related to the behavior of the - -4 -00:00:10,910 --> 00:00:13,910 -program, rather than its code. The second term I want - -5 -00:00:13,910 --> 00:00:17,600 -to introduce is fault, which is also called bug. - -6 -00:00:17,600 --> 00:00:20,540 -And the fault or bug, is an incorrect piece of - -7 -00:00:20,540 --> 00:00:22,780 -code. In other words, a fault is related to - -8 -00:00:22,780 --> 00:00:25,900 -the code. And is a necessary, but not sufficient condition - -9 -00:00:25,900 --> 00:00:28,160 -for the occurrence of a failure. The final - -10 -00:00:28,160 --> 00:00:30,880 -term I want to introduce is, error. Where an - -11 -00:00:30,880 --> 00:00:33,630 -error is the cause of a fault. It is - -12 -00:00:33,630 --> 00:00:36,990 -usually a human error, which can be conceptual. A - -13 -00:00:36,990 --> 00:00:39,620 -typo or something along those lines. And know that - -14 -00:00:39,620 --> 00:00:43,422 -this terminology, failure, fault and error, is the official - -15 -00:00:43,422 --> 00:00:46,945 -[UNKNOWN] terminology. So you cannot go wrong if you - -16 -00:00:46,945 --> 00:00:51,282 -use it. Now, let me illustrate the difference between - -17 -00:00:51,282 --> 00:00:57,153 -failure, fault and error. Using a small example. What I'm showing here is - -18 -00:00:57,153 --> 00:01:00,876 -a small function that, as you can see from its name, takes an - -19 -00:01:00,876 --> 00:01:04,920 -integer parameter i. And is supposed to double the value of i, and - -20 -00:01:04,920 --> 00:01:08,420 -return it. As we can clearly see, this is not what the function does. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/4 - Failure, Fault, and Error Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/4 - Failure, Fault, and Error Quiz - lang_en_vs4.srt deleted file mode 100644 index 03f6a6a..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/4 - Failure, Fault, and Error Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,900 -So now I have a few questions for you. And so we use, as - -2 -00:00:02,900 --> 00:00:07,350 -usual, our developer Janet to introduce a quiz. And the first question I want to - -3 -00:00:07,350 --> 00:00:11,710 -ask you is the following. A call to double passing three as a parameter returns - -4 -00:00:11,710 --> 00:00:16,149 -the value nine. What is this? Is that a failure, a fault, or an error? diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/5 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/5 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 1bcde7f..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/5 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,440 --> 00:00:06,614 -The fact that the call to double three returns nine instead of six is clearly - -2 -00:00:06,614 --> 00:00:13,000 -a failure because it is an observable incorrect behavior of the program. - -3 -00:00:13,000 --> 00:00:16,110 -So let me remind you that the failure is conceptually related to the - -4 -00:00:16,110 --> 00:00:20,076 -behavior of the program, to the way the program acts and not its code. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/6 - Failure, Fault, and Error Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/6 - Failure, Fault, and Error Quiz - lang_en_vs4.srt deleted file mode 100644 index f51ac9f..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/6 - Failure, Fault, and Error Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,19 +0,0 @@ -1 -00:00:00,310 --> 00:00:02,690 -So now, let me ask you a second question. We just saw that we - -2 -00:00:02,690 --> 00:00:04,640 -can, reveal a failure in the program - -3 -00:00:04,640 --> 00:00:06,640 -by calling double with parameter three. Where - -4 -00:00:06,640 --> 00:00:09,750 -is the fault that causes such failure in the program? So I want you - -5 -00:00:09,750 --> 00:00:12,900 -to write the number of the line of code that, that contains the fault. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/7 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/7 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index bc55603..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/7 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,190 --> 00:00:02,404 -Before telling you what the right answer is, let - -2 -00:00:02,404 --> 00:00:04,240 -me remind you that the fault is related to - -3 -00:00:04,240 --> 00:00:06,508 -the code, and is a necessary, but not sufficient - -4 -00:00:06,508 --> 00:00:09,560 -condition for the occurrence of a failure. So in this - -5 -00:00:09,560 --> 00:00:12,450 -case, a single faulty line is responsible for the - -6 -00:00:12,450 --> 00:00:17,435 -failure, which is line three. So the correct answer, is - -7 -00:00:17,435 --> 00:00:20,700 -three. At line three, the program computes i times - -8 -00:00:20,700 --> 00:00:23,080 -i, instead of i times 2, as it should do. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/8 - Failure, Fault, and Error Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/8 - Failure, Fault, and Error Quiz - lang_en_vs4.srt deleted file mode 100644 index 18515a6..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/8 - Failure, Fault, and Error Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,370 --> 00:00:02,090 -So, I want to ask you one last question about - -2 -00:00:02,090 --> 00:00:05,480 -this problem. What is the error that cause the fault - -3 -00:00:05,480 --> 00:00:08,180 -at line three? Remember that an error is the - -4 -00:00:08,180 --> 00:00:11,010 -cause of a fault and it's usually a human error. diff --git a/usth/ICT2.7/P4L1 General Concepts Subtitles/9 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L1 General Concepts Subtitles/9 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 56db4c1..0000000 --- a/usth/ICT2.7/P4L1 General Concepts Subtitles/9 - Failure, Fault, and Error Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,350 --> 00:00:02,740 -And I apologize, but this was a tricky question that - -2 -00:00:02,740 --> 00:00:06,770 -we cannot really answer. We really have no way to - -3 -00:00:06,770 --> 00:00:08,860 -know what the error was. It could have been a - -4 -00:00:08,860 --> 00:00:13,240 -typo, an erroneous copy and paste operation, or even worse - -5 -00:00:13,240 --> 00:00:16,079 -a conceptual error. In case a developer did not know - -6 -00:00:16,079 --> 00:00:19,910 -what it means to double a number. Unfortunately though, the - -7 -00:00:19,910 --> 00:00:22,200 -developer is the only one who could actually answer this - -8 -00:00:22,200 --> 00:00:25,610 -question. So even though we cannot really answer this question, - -9 -00:00:25,610 --> 00:00:28,000 -having it help us think about how the - -10 -00:00:28,000 --> 00:00:31,000 -error is in fact related to human behavior. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 09a8f10..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,320 --> 00:00:02,620 -In the previous lesson, we discussed the fundamental - -2 -00:00:02,620 --> 00:00:06,380 -concepts behind software verification in general, and software testing - -3 -00:00:06,380 --> 00:00:09,470 -in particular. In this lesson, we will discuss - -4 -00:00:09,470 --> 00:00:12,310 -one of the two main testing approaches. Black box - -5 -00:00:12,310 --> 00:00:16,180 -testing, also called functional testing. We will cover - -6 -00:00:16,180 --> 00:00:19,180 -the main characteristic of black box testing, its pros - -7 -00:00:19,180 --> 00:00:22,260 -and cons, and discuss some commonly used black - -8 -00:00:22,260 --> 00:00:25,350 -box testing techniques. We will conclude the lesson with - -9 -00:00:25,350 --> 00:00:28,520 -a practical exercise in which we will apply a specific black - -10 -00:00:28,520 --> 00:00:32,520 -box testing technique to a real program. We will derive test - -11 -00:00:32,520 --> 00:00:34,980 -cases for the program and assess how the use of a - -12 -00:00:34,980 --> 00:00:38,690 -systematic approach, in contrast to a brute force approach, can help. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/10 - Test Data Selection Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/10 - Test Data Selection Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 418ed91..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/10 - Test Data Selection Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,79 +0,0 @@ -1 -00:00:00,025 --> 00:00:02,900 -Okay, so now we're going to answer the question. So if we want - -2 -00:00:02,900 --> 00:00:06,520 -to consider all these inputs, and run them all on the software, - -3 -00:00:06,520 --> 00:00:09,490 -let's see how it will work. Let's assume that these are, 32 - -4 -00:00:09,490 --> 00:00:12,280 -bit integers. So at this point what we will have is, a - -5 -00:00:12,280 --> 00:00:15,130 -number of combination, which is 2 to the 32, times 2 to - -6 -00:00:15,130 --> 00:00:18,390 -the 32. They're two integers. This is equal to 2 to the - -7 -00:00:18,390 --> 00:00:21,910 -64, which in turn, is more or less equal, to 10 to - -8 -00:00:21,910 --> 00:00:25,110 -the 19. So 10 to the 19 is the number of tests that - -9 -00:00:25,110 --> 00:00:27,960 -we need to run to cover the whole domain. Now let's assume - -10 -00:00:27,960 --> 00:00:31,400 -that we can run one test per nanosecond. So what that means - -11 -00:00:31,400 --> 00:00:34,290 -is that we can run 10 to the 9 tests per second, - -12 -00:00:34,290 --> 00:00:37,240 -and that's a lot. If we do the math, that results in 10 - -13 -00:00:37,240 --> 00:00:40,750 -to the 10 seconds over all, because we have 10 to the - -14 -00:00:40,750 --> 00:00:43,760 -19 tests, we could run 10 to the 9 tests per second - -15 -00:00:43,760 --> 00:00:46,630 -so, we do the math, and we can run all these tests - -16 -00:00:46,630 --> 00:00:50,340 -in 10 to the 10 seconds. And what that corresponds to, it's about - -17 -00:00:50,340 --> 00:00:54,470 -600 years, so a lot of time. So even for such - -18 -00:00:54,470 --> 00:00:57,710 -a simple problem, a problem that takes two integers and adds them, - -19 -00:00:57,710 --> 00:01:00,990 -it will take more than 500 years to test it exhaustively. So - -20 -00:01:00,990 --> 00:01:04,690 -the bottom line here is that we just can't do exhaustive testing. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/11 - Why Not Random Testing? - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/11 - Why Not Random Testing? - lang_en_vs4.srt deleted file mode 100644 index a91af45..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/11 - Why Not Random Testing? - lang_en_vs4.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,310 --> 00:00:02,250 -So then maybe what we can do is just to - -2 -00:00:02,250 --> 00:00:05,720 -pick our test inputs randomly so to do what is called - -3 -00:00:05,720 --> 00:00:08,850 -random testing. And what that means is that we pick the - -4 -00:00:08,850 --> 00:00:11,720 -inputs to test just as we pick a number by rolling - -5 -00:00:11,720 --> 00:00:15,410 -a set of dice randomly. And this will have several advantages. - -6 -00:00:15,410 --> 00:00:18,780 -First, we will pick inputs uniformly. So if we use a - -7 -00:00:18,780 --> 00:00:21,790 -uniform distribution as the basis for our random testing, we will - -8 -00:00:21,790 --> 00:00:25,540 -make no preferences. In other words, all inputs will be considered - -9 -00:00:25,540 --> 00:00:28,324 -equal, of equal value. And what that means in turn, is - -10 -00:00:28,324 --> 00:00:32,640 -that random testing eliminates designer bias. So what does designer bias - -11 -00:00:32,640 --> 00:00:36,030 -mean? Designer bias is the problem of making the same assumption, - -12 -00:00:36,030 --> 00:00:38,570 -when we read the specification and we interpret it and when we - -13 -00:00:38,570 --> 00:00:42,100 -develop test cases. Which means that the developer might develop code, - -14 -00:00:42,100 --> 00:00:44,930 -assuming a given behavior of the user. And we may write - -15 -00:00:44,930 --> 00:00:47,520 -tests, making the same assumptions. And the problem, of course, is - -16 -00:00:47,520 --> 00:00:50,690 -even worse if it's the same person that develops the code and - -17 -00:00:50,690 --> 00:00:53,730 -writes the test cases. With random testing, the problem is gone, - -18 -00:00:53,730 --> 00:00:57,440 -because we just pick randomly what our inputs will be. So - -19 -00:00:57,440 --> 00:01:00,180 -why not do in random? The problem is that when testing, - -20 -00:01:00,180 --> 00:01:03,610 -we are looking for a needle in a haystack. Actually, multiple - -21 -00:01:03,610 --> 00:01:06,620 -needles in multiple haystacks, if we want to be precise. So, - -22 -00:01:06,620 --> 00:01:09,500 -random approaches are not necessarily the best way to go about - -23 -00:01:09,500 --> 00:01:12,430 -it, because we might just be looking in all the wrong - -24 -00:01:12,430 --> 00:01:15,760 -places. So let me show you this, using a different representation - -25 -00:01:15,760 --> 00:01:18,000 -for the haystack. What I'm showing here is a grid, and - -26 -00:01:18,000 --> 00:01:22,130 -imagine this grid just expanding indefinitely outside the screen, and this grid - -27 -00:01:22,130 --> 00:01:26,120 -represents the domain for the program, so each box in the grid, - -28 -00:01:26,120 --> 00:01:29,050 -each square in the grid, it's a possible input. So what happens - -29 -00:01:29,050 --> 00:01:32,670 -with bugs is that bugs are very scarce in this grid. Maybe - -30 -00:01:32,670 --> 00:01:35,070 -there is a bug here, so that means that there is a - -31 -00:01:35,070 --> 00:01:38,090 -bug, than an input, in this point we'll reveal. And maybe there - -32 -00:01:38,090 --> 00:01:40,820 -is another bug that will be triggered by an input over here. - -33 -00:01:40,820 --> 00:01:44,570 -So imagine this spread out over this infinite grid. Its very unlikely - -34 -00:01:44,570 --> 00:01:47,440 -that just by picking randomly that we will be able to get to - -35 -00:01:47,440 --> 00:01:50,910 -these two points. Fortunately not all is lost, there is a silver lining. - -36 -00:01:50,910 --> 00:01:53,410 -So we need to look a little more in depth into this grid. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/12 - Partition Testing - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/12 - Partition Testing - lang_en_vs4.srt deleted file mode 100644 index b91462c..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/12 - Partition Testing - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,570 -So let me use a slightly expanded version of this - -2 -00:00:02,570 --> 00:00:05,560 -grid. Although we're indeed looking at a needle in a haystack. - -3 -00:00:05,560 --> 00:00:09,560 -And failing inputs are generally sparse, very sparse, in the input - -4 -00:00:09,560 --> 00:00:12,890 -domain. However, they tend to be dense in some parts of - -5 -00:00:12,890 --> 00:00:15,860 -the domain. Like here or here. So how can we leverage - -6 -00:00:15,860 --> 00:00:18,920 -this? The fact that the failures are dense in some subdomains? - -7 -00:00:18,920 --> 00:00:22,290 -As it turns out, the domain is naturally split into partitions. - -8 -00:00:22,290 --> 00:00:25,340 -Where partitions are areas of the domain that are treated homogeneously - -9 -00:00:25,340 --> 00:00:28,070 -by the software. And this is what happens, that normally, - -10 -00:00:28,070 --> 00:00:31,020 -failures tend to be dense in this partitions. So the way - -11 -00:00:31,020 --> 00:00:34,000 -to leverage this characteristic of failures, is that we don't know - -12 -00:00:34,000 --> 00:00:36,950 -want to pick inputs randomly, in the input domain. Just here - -13 -00:00:36,950 --> 00:00:39,460 -and there. Rather we want to do two things. First we - -14 -00:00:39,460 --> 00:00:43,300 -want to identify partitions of our domain. And second we want - -15 -00:00:43,300 --> 00:00:46,950 -to select inputs from each partition. And by doing so, we - -16 -00:00:46,950 --> 00:00:50,300 -can dramatically increase our chances to reveal faults in the code. - -17 -00:00:50,300 --> 00:00:54,170 -So the name that is normally used for this process, is partition testing. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/13 - Partition Testing Example - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/13 - Partition Testing Example - lang_en_vs4.srt deleted file mode 100644 index 6738346..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/13 - Partition Testing Example - lang_en_vs4.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,969 -So let's look at how this will work with an example. - -2 -00:00:02,969 --> 00:00:06,210 -I'm going to use this simple program that takes two inputs. The - -3 -00:00:06,210 --> 00:00:08,790 -first input is a string, str, and the second one is - -4 -00:00:08,790 --> 00:00:11,575 -an integer, size. And the problem is called split. And as - -5 -00:00:11,575 --> 00:00:14,363 -the name says what it does is to take this string, - -6 -00:00:14,363 --> 00:00:17,491 -str, and split it into sub string, into chunks of size - -7 -00:00:17,491 --> 00:00:21,550 -characters each. So how do we identify some possible partitions for - -8 -00:00:21,550 --> 00:00:25,620 -this program? If we consider the input size, we can identify - -9 -00:00:25,620 --> 00:00:29,630 -three neutral partitions which are size less than 0. For example, - -10 -00:00:29,630 --> 00:00:32,259 -we want to test how the program behaves. But if we pass an - -11 -00:00:32,259 --> 00:00:36,100 -incorrect size, size equal to 0, which is also a partition. In - -12 -00:00:36,100 --> 00:00:39,390 -this case, a partition with a single element. And the third case - -13 -00:00:39,390 --> 00:00:42,540 -is size greater than 0, which I will consider to be - -14 -00:00:42,540 --> 00:00:44,960 -kind of the standard case. And actually let me do a, you - -15 -00:00:44,960 --> 00:00:48,220 -know, slight aggression so when I was talking about designer bias. So - -16 -00:00:48,220 --> 00:00:50,630 -this is a case in which designer bias might not make you - -17 -00:00:50,630 --> 00:00:53,050 -think of using size less than 0 because you read the - -18 -00:00:53,050 --> 00:00:56,210 -spec. And you sort of assume that the size will be positive. - -19 -00:00:56,210 --> 00:00:58,556 -Whereas the right thing to do when we test is to consider - -20 -00:00:58,556 --> 00:01:01,700 -the complete domain rather than just parts of it. So now let's - -21 -00:01:01,700 --> 00:01:04,760 -look at string, str, and let's see what kind of sub - -22 -00:01:04,760 --> 00:01:06,538 -domains we could identify for this - -23 -00:01:06,538 --> 00:01:08,670 -parameter. And notice another important aspect - -24 -00:01:08,670 --> 00:01:12,290 -here is that we treat each different part of the input independently, - -25 -00:01:12,290 --> 00:01:15,760 -which also helps breaking down the problem. One interesting sub domain is - -26 -00:01:15,760 --> 00:01:18,980 -the domain that includes all the strings whose length is less than - -27 -00:01:18,980 --> 00:01:22,310 -size. So all the strings that will not be displayed. Another subdomain - -28 -00:01:22,310 --> 00:01:25,000 -is all the strings with length which is between the value of - -29 -00:01:25,000 --> 00:01:28,350 -size and twice the value of size. A third subdomain is the one - -30 -00:01:28,350 --> 00:01:31,820 -including all the strings whose length is greater than twice the value - -31 -00:01:31,820 --> 00:01:35,140 -of size. And we can continue and identify more and more subdomain. - -32 -00:01:35,140 --> 00:01:38,350 -The key thing here is that we have to do that based - -33 -00:01:38,350 --> 00:01:41,180 -on the domain. So we need to adapt what we just did here - -34 -00:01:41,180 --> 00:01:44,620 -based on, on the specific domain involved and on the type - -35 -00:01:44,620 --> 00:01:47,190 -of data in this domain. So at this point we said that - -36 -00:01:47,190 --> 00:01:49,630 -there were two steps. One was to identify the subdomains and - -37 -00:01:49,630 --> 00:01:52,990 -the second one was to pick values in this subdomain. The values - -38 -00:01:52,990 --> 00:01:55,320 -that we'll actually use for the testing. In this case, we - -39 -00:01:55,320 --> 00:01:58,218 -do not want to just pick any value. Rather we want to - -40 -00:01:58,218 --> 00:01:59,871 -pick values that are particularly - -41 -00:01:59,871 --> 00:02:02,710 -interesting, particularly representative. So what does - -42 -00:02:02,710 --> 00:02:05,800 -that mean? Well, we're going to do that based on an intuitive idea. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/14 - Boundary Values - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/14 - Boundary Values - lang_en_vs4.srt deleted file mode 100644 index 3d54ad4..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/14 - Boundary Values - lang_en_vs4.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,590 -So let's go back again to our domain, with - -2 -00:00:02,590 --> 00:00:06,580 -all the sub-domains identified. And the basic idea, or the - -3 -00:00:06,580 --> 00:00:09,750 -intuitive idea I was talking about, is that errors tend - -4 -00:00:09,750 --> 00:00:12,425 -to occur at the boundary of a domain, or a - -5 -00:00:12,425 --> 00:00:15,510 -sub-domain. Like in this case. And why? Because these - -6 -00:00:15,510 --> 00:00:19,360 -are the cases that are less understood by the developers. - -7 -00:00:19,360 --> 00:00:22,155 -Like for example, the last iteration of a loop, or - -8 -00:00:22,155 --> 00:00:25,150 -a special value like zero for integers. So if this - -9 -00:00:25,150 --> 00:00:29,590 -is true, what we want to do is to select inputs at these - -10 -00:00:29,590 --> 00:00:32,189 -boundaries. And this is complementary to partition - -11 -00:00:32,189 --> 00:00:34,270 -testing, in the sense that partition testing - -12 -00:00:34,270 --> 00:00:38,160 -will identify the partitions in which we want to select inputs, and boundary - -13 -00:00:38,160 --> 00:00:40,570 -testing. So the selection of boundary values - -14 -00:00:40,570 --> 00:00:43,060 -will help select inputs in these partitions. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/15 - Boundary Values Example - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/15 - Boundary Values Example - lang_en_vs4.srt deleted file mode 100644 index b344802..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/15 - Boundary Values Example - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,200 --> 00:00:03,320 -So now let's go back to our split example. Let me - -2 -00:00:03,320 --> 00:00:05,790 -rearrange things a little bit to make more room. So now I'm - -3 -00:00:05,790 --> 00:00:09,160 -going to put the domains for size and for strength one next to - -4 -00:00:09,160 --> 00:00:12,210 -the other. So let's look at what some possible inputs will be - -5 -00:00:12,210 --> 00:00:15,140 -for the sub domains that we identified when we use the idea - -6 -00:00:15,140 --> 00:00:17,790 -of selecting input of the boundary. If we look at the first - -7 -00:00:17,790 --> 00:00:21,860 -subdomain, size less than zero, one reasonable input is, size equals to - -8 -00:00:21,860 --> 00:00:25,360 -minus 1, because minus 1 is the boundary value for the domain - -9 -00:00:25,360 --> 00:00:28,530 -of the integers less than zero. If we look at the third - -10 -00:00:28,530 --> 00:00:32,119 -subdomain, possibly interesting case is the one of size of equal to - -11 -00:00:32,119 --> 00:00:34,900 -1, for the same reasoning that we used for the previous subdomain, - -12 -00:00:34,900 --> 00:00:37,670 -for size less than zero. And, let's try to select another one - -13 -00:00:37,670 --> 00:00:40,870 -for this subdomain, for the integers greater than zero. If there is - -14 -00:00:40,870 --> 00:00:44,200 -a concept of maximal integer, we can select that one as our - -15 -00:00:44,200 --> 00:00:47,140 -boundary value. And of course we could select much more, but this - -16 -00:00:47,140 --> 00:00:50,630 -is just to give you an idea. Other possible inputs. One interesting - -17 -00:00:50,630 --> 00:00:53,310 -example for the first one, string with length less than - -18 -00:00:53,310 --> 00:00:57,690 -size will be a string with length size minus one. Again - -19 -00:00:57,690 --> 00:01:00,240 -this is the boundary value for this domain. And we could - -20 -00:01:00,240 --> 00:01:03,500 -continue in this way like for example selecting a string who's - -21 -00:01:03,500 --> 00:01:07,310 -length is exactly size as a boundary value for this - -22 -00:01:07,310 --> 00:01:10,490 -other domain. Instant one, and we look back actually to this - -23 -00:01:10,490 --> 00:01:12,940 -example and look at it in a more extensive way when - -24 -00:01:12,940 --> 00:01:15,690 -we actually talk about a specific method for doing this kind - -25 -00:01:15,690 --> 00:01:16,340 -of process. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/16 - Deriving Test Case Specifications - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/16 - Deriving Test Case Specifications - lang_en_vs4.srt deleted file mode 100644 index 5164f1a..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/16 - Deriving Test Case Specifications - lang_en_vs4.srt +++ /dev/null @@ -1,199 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,790 -Now, let's go back to our systematic functional testing - -2 -00:00:02,790 --> 00:00:05,540 -approach and all the steps in this process. So - -3 -00:00:05,540 --> 00:00:07,680 -far we've seen the first step and the second - -4 -00:00:07,680 --> 00:00:10,340 -step. Now we're going to look at this step in which, - -5 -00:00:10,340 --> 00:00:13,290 -once we have identified the values of interest, we - -6 -00:00:13,290 --> 00:00:18,110 -derive test case specifications for these values, or using these - -7 -00:00:18,110 --> 00:00:21,300 -values. And the test case specification defines how the - -8 -00:00:21,300 --> 00:00:25,230 -values should be put together when actually testing the system. - -9 -00:00:25,230 --> 00:00:29,110 -And test case specification describe how these values should be put - -10 -00:00:29,110 --> 00:00:32,360 -together when testing the system. So let me go back one more - -11 -00:00:32,360 --> 00:00:34,780 -time to our split program, so that we can use the - -12 -00:00:34,780 --> 00:00:37,450 -information that we already computed. At this point what we have is - -13 -00:00:37,450 --> 00:00:41,670 -some possible inputs for "string," our first parameter, and for "size," - -14 -00:00:41,670 --> 00:00:44,410 -our second parameter. And we want to put them together, to generate - -15 -00:00:44,410 --> 00:00:47,080 -the description of what the test case should be. So let - -16 -00:00:47,080 --> 00:00:50,420 -me once more rearrange this a little bit. I first remove the - -17 -00:00:50,420 --> 00:00:53,360 -description of the subdomains, because we won't use them in this step. - -18 -00:00:53,360 --> 00:00:55,800 -And I moved out the set of all our possible inputs, that we're - -19 -00:00:55,800 --> 00:00:59,470 -going to combine to create the test case specification. And one possible way - -20 -00:00:59,470 --> 00:01:03,320 -of doing that is simply to combine the values for the first parameter, - -21 -00:01:03,320 --> 00:01:06,370 -and the values for the second parameter. So the Cartesian product. So - -22 -00:01:06,370 --> 00:01:09,060 -if we do that, what we will obtain is, for example, if we - -23 -00:01:09,060 --> 00:01:12,470 -consider the first possible input, size is equal to minus 1, we can - -24 -00:01:12,470 --> 00:01:15,510 -combine it with these two possible inputs for string, and we will get - -25 -00:01:15,510 --> 00:01:18,680 -size is equal to minus 1 string with length minus 2, or - -26 -00:01:18,680 --> 00:01:21,680 -size is equal to minus 1 string with length minus 1. And we'll - -27 -00:01:21,680 --> 00:01:24,200 -go back in a second to see what this means. Now if we - -28 -00:01:24,200 --> 00:01:27,510 -consider the second possible value for size, size is equal to one, we - -29 -00:01:27,510 --> 00:01:30,260 -also have two cases so the first one in this case that will - -30 -00:01:30,260 --> 00:01:34,030 -be considered a string with length zero. So the antistring. And we can - -31 -00:01:34,030 --> 00:01:37,410 -continue combining this value, but one thing I want to point out is - -32 -00:01:37,410 --> 00:01:40,570 -that if we just go in this straight forward and brute force sort - -33 -00:01:40,570 --> 00:01:43,390 -of way, we will obtain many combinations that don't make any sense, - -34 -00:01:43,390 --> 00:01:46,500 -like for example, this combination which doesn't make any sense because we can - -35 -00:01:46,500 --> 00:01:50,410 -not create the string with length minus 2. Similar for this combination, because - -36 -00:01:50,410 --> 00:01:53,190 -then by the same token, we cannot raise things with length minus 1. - -37 -00:01:53,190 --> 00:01:55,730 -And so there's a lot of cases that we will have to eliminate - -38 -00:01:55,730 --> 00:01:59,380 -afterwards. So what we're going to see in a few minutes is a possible - -39 -00:01:59,380 --> 00:02:02,970 -way in which we can avoid producing these meaningless cases. And at the - -40 -00:02:02,970 --> 00:02:06,380 -same time, keep under control, the number of test cases that we generate. - -41 -00:02:06,380 --> 00:02:09,070 -So lets go back for the last time to our steps - -42 -00:02:09,070 --> 00:02:11,980 -for systematic functional testing. What we just did was to derive - -43 -00:02:11,980 --> 00:02:15,040 -test case specification from a set of relevant inputs. The following - -44 -00:02:15,040 --> 00:02:18,420 -step is to use these test case specifications to generate actual test - -45 -00:02:18,420 --> 00:02:21,170 -cases. And this is normally a fairly mechanical step in the - -46 -00:02:21,170 --> 00:02:23,900 -sense that we just have to instantiate what is in the test - -47 -00:02:23,900 --> 00:02:27,970 -case specification as actual test cases. And it's really dependent on - -48 -00:02:27,970 --> 00:02:32,300 -the specific type of partitions and values identified on the specific context. - -49 -00:02:32,300 --> 00:02:35,100 -So instead of looking at that here in the, in the abstract, - -50 -00:02:35,100 --> 00:02:37,480 -I'm going to show you with an example later on, in the lesson. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/17 - Category Partition Method - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/17 - Category Partition Method - lang_en_vs4.srt deleted file mode 100644 index 938e80c..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/17 - Category Partition Method - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,200 --> 00:00:03,690 -What we will discuss next is a specific black-box testing - -2 -00:00:03,690 --> 00:00:07,240 -approach. So a specific instance of the general approach that - -3 -00:00:07,240 --> 00:00:10,814 -we just saw. And this approach is the category-partition method, - -4 -00:00:10,814 --> 00:00:13,418 -and was defined by Ostrand & Balcer in 1988 in - -5 -00:00:13,418 --> 00:00:16,760 -an article to the peer [UNKNOWN] communication of the ACM. - -6 -00:00:16,760 --> 00:00:19,490 -So this is a method for going from a specification, - -7 -00:00:19,490 --> 00:00:21,370 -a description of the system, to a set of test - -8 -00:00:21,370 --> 00:00:26,170 -cases like any other black-box testing approach by following six steps. - -9 -00:00:26,170 --> 00:00:28,370 -So let's look at what these steps are. The first - -10 -00:00:28,370 --> 00:00:31,850 -step is to identify independently testable features and this is - -11 -00:00:31,850 --> 00:00:33,870 -a step that we are familiar with because its exactly - -12 -00:00:33,870 --> 00:00:36,950 -the same step that we performed in the generic black box - -13 -00:00:36,950 --> 00:00:39,480 -testing approach that we just discussed. The second step is - -14 -00:00:39,480 --> 00:00:42,250 -to identify categories. Then the next step is to partition - -15 -00:00:42,250 --> 00:00:45,070 -categories into choices. Identify constraints - -16 -00:00:45,070 --> 00:00:47,530 -among choices. Produce and evaluate - -17 -00:00:47,530 --> 00:00:51,330 -test case specifications. And finally, the sixth step is to generate - -18 -00:00:51,330 --> 00:00:54,100 -test cases from test case specifications. So two of - -19 -00:00:54,100 --> 00:00:56,970 -the key elements in these six steps are the two - -20 -00:00:56,970 --> 00:00:59,430 -that give the name to the technique so the identification - -21 -00:00:59,430 --> 00:01:02,240 -of the categories and the partition of these categories into - -22 -00:01:02,240 --> 00:01:04,810 -choices. What we're going to do next is to go - -23 -00:01:04,810 --> 00:01:07,670 -and look at each one of the steps independently, except - -24 -00:01:07,670 --> 00:01:10,285 -for the first one. Because we're already familiar with that - -25 -00:01:10,285 --> 00:01:12,650 -step, and this method doesn't really add much to it. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/18 - Identify Categories - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/18 - Identify Categories - lang_en_vs4.srt deleted file mode 100644 index a1eb4dd..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/18 - Identify Categories - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,980 -In the second step of the category partition technique, the goal is - -2 -00:00:02,980 --> 00:00:05,630 -to Identify Categories. Where categories are - -3 -00:00:05,630 --> 00:00:08,650 -characteristics of each input element. So - -4 -00:00:08,650 --> 00:00:11,490 -let me illustrate what that means using an example. And to do - -5 -00:00:11,490 --> 00:00:14,440 -that I'm going to use again the example of the split program, as - -6 -00:00:14,440 --> 00:00:16,830 -we are already familiar with it and we kind of already played - -7 -00:00:16,830 --> 00:00:20,110 -with it. When we were talking about the generic black box approach. - -8 -00:00:20,110 --> 00:00:22,293 -So let me bring back the program, and let me remind you - -9 -00:00:22,293 --> 00:00:25,440 -that what the program does is to take two inputs, a string and - -10 -00:00:25,440 --> 00:00:28,560 -the size, and it breaks down the string into chunks, - -11 -00:00:28,560 --> 00:00:31,300 -whose length is size. If we look at the split program - -12 -00:00:31,300 --> 00:00:34,330 -there are two input elements, str and size so we going to - -13 -00:00:34,330 --> 00:00:37,930 -identify categories for these two. So starting from str, what are - -14 -00:00:37,930 --> 00:00:41,228 -the interesting characteristics of the string? In, in this step - -15 -00:00:41,228 --> 00:00:44,948 -you're going to use your domain knowledge, your understanding of what a - -16 -00:00:44,948 --> 00:00:47,986 -string is, and for example we might identify the length of - -17 -00:00:47,986 --> 00:00:50,528 -the string and the content of the string as the two - -18 -00:00:50,528 --> 00:00:53,840 -main characteristics that we want to focus on. If we now - -19 -00:00:53,840 --> 00:00:57,540 -move our focus to size, the only characteristic I can really - -20 -00:00:57,540 --> 00:01:00,340 -think of for an integer is its value. So that's what - -21 -00:01:00,340 --> 00:01:02,470 -I'm going to mark here. So at the end of the step - -22 -00:01:02,470 --> 00:01:05,030 -what we have is that we have two categories. So two - -23 -00:01:05,030 --> 00:01:08,930 -interesting characteristics for the string input str, which are the length - -24 -00:01:08,930 --> 00:01:12,940 -and the content. And one category for the integer input size - -25 -00:01:12,940 --> 00:01:16,480 -which is its value. And notice that there's not only one solution. - -26 -00:01:16,480 --> 00:01:18,200 -So there's not only one possibility. - -27 -00:01:18,200 --> 00:01:20,384 -So that the specific characteristics that you - -28 -00:01:20,384 --> 00:01:22,800 -will identify are somehow subjective. But the - -29 -00:01:22,800 --> 00:01:25,630 -important point is that you identify characteristics - -30 -00:01:25,630 --> 00:01:29,259 -that are meaningful and they sort of cover the main aspects of the - -31 -00:01:29,259 --> 00:01:31,200 -inputs, which is the case for the - -32 -00:01:31,200 --> 00:01:33,440 -categories that we've identified in this example. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/19 - Partition Categories into Choices - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/19 - Partition Categories into Choices - lang_en_vs4.srt deleted file mode 100644 index a411c30..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/19 - Partition Categories into Choices - lang_en_vs4.srt +++ /dev/null @@ -1,151 +0,0 @@ -1 -00:00:00,230 --> 00:00:03,250 -Now we move to the next step, which involves partitioning the - -2 -00:00:03,250 --> 00:00:07,680 -categories that we just identified into choices. And these choices are the - -3 -00:00:07,680 --> 00:00:11,930 -interesting cases for each category. So the interesting subdomains for each one - -4 -00:00:11,930 --> 00:00:14,810 -of these categories. So once more, lets look at that using our - -5 -00:00:14,810 --> 00:00:18,110 -example, the split program. So lets start by considering length. What are - -6 -00:00:18,110 --> 00:00:20,710 -the interesting cases when we think about the length of a string? - -7 -00:00:20,710 --> 00:00:23,220 -Some of those we already saw, one interesting case is the case - -8 -00:00:23,220 --> 00:00:26,190 -of the length of size zero, so a string with no characters. - -9 -00:00:26,190 --> 00:00:29,030 -Another interesting case is the one in which the length of the - -10 -00:00:29,030 --> 00:00:31,780 -string is size minus one, so the string is just one character - -11 -00:00:31,780 --> 00:00:34,610 -short of the size at which it will be cut by the - -12 -00:00:34,610 --> 00:00:38,160 -split program. And we can continue along these lines, so we will select - -13 -00:00:38,160 --> 00:00:42,950 -size, size plus one, size twice the value of size minus one, - -14 -00:00:42,950 --> 00:00:45,560 -and so on and so forth. But even without listing all of - -15 -00:00:45,560 --> 00:00:47,500 -those, I'm sure you get the idea of what it means to - -16 -00:00:47,500 --> 00:00:49,780 -identify this interesting cases. Let's see - -17 -00:00:49,780 --> 00:00:51,702 -the movements that are considering the content. - -18 -00:00:51,702 --> 00:00:53,990 -So without the interesting cases when we think about the content - -19 -00:00:53,990 --> 00:00:56,520 -of the string. So possible interesting case is the string that - -20 -00:00:56,520 --> 00:01:00,660 -contains only spaces. Why? Well maybe because a split is written - -21 -00:01:00,660 --> 00:01:04,290 -spaces in a special way. Similarly a string that contains special - -22 -00:01:04,290 --> 00:01:06,780 -characters, like non printable characters, - -23 -00:01:06,780 --> 00:01:09,020 -like tabulation characters, new line might - -24 -00:01:09,020 --> 00:01:12,240 -also be an interesting case, something that we want to test. Also - -25 -00:01:12,240 --> 00:01:14,280 -in this case we could continue and go on and on. - -26 -00:01:14,280 --> 00:01:17,250 -So basically here you just want to put all the interesting cases - -27 -00:01:17,250 --> 00:01:20,010 -that you can think of when you consider the content - -28 -00:01:20,010 --> 00:01:22,440 -of a string. Now let's move to the value as the - -29 -00:01:22,440 --> 00:01:25,740 -next category. So the value of the input size. And - -30 -00:01:25,740 --> 00:01:29,280 -here we might want to consider a size zero, special case, a - -31 -00:01:29,280 --> 00:01:33,640 -normal situation, like size greater than zero, another special case, - -32 -00:01:33,640 --> 00:01:36,420 -size less than zero or maxint. And these are, if you - -33 -00:01:36,420 --> 00:01:39,420 -remember, I accepted the cases that we consider when we look - -34 -00:01:39,420 --> 00:01:42,350 -at this example, before. And also here we can continue and - -35 -00:01:42,350 --> 00:01:43,970 -go on and on. So, at the end of the - -36 -00:01:43,970 --> 00:01:46,860 -step, what we have is a set of interesting cases - -37 -00:01:46,860 --> 00:01:49,220 -for each one of the categories, and now we can - -38 -00:01:49,220 --> 00:01:51,150 -start to think about how we want to combine them. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt deleted file mode 100644 index 2af56c5..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,450 --> 00:00:03,400 -As we said at the end of the previous lesson, black-box testing is - -2 -00:00:03,400 --> 00:00:06,230 -the testing of the software when we look at it as a black box, - -3 -00:00:06,230 --> 00:00:09,110 -as a closed box, without looking at it inside, without looking at the - -4 -00:00:09,110 --> 00:00:10,750 -code. And there are several advantages in - -5 -00:00:10,750 --> 00:00:12,680 -using black-box testing. So let me recap - -6 -00:00:12,680 --> 00:00:15,590 -those advantages, some of which we already mentioned, and let me also expand - -7 -00:00:15,590 --> 00:00:18,220 -on that a little bit. The first advantage of when I mentioned is that - -8 -00:00:18,220 --> 00:00:22,760 -black box focuses on the domain, on the input domain of the software. And - -9 -00:00:22,760 --> 00:00:25,750 -as such, we can use it to make sure that we are actually covering - -10 -00:00:25,750 --> 00:00:28,400 -this domain, that we are actually covering the important behaviors of - -11 -00:00:28,400 --> 00:00:32,200 -the software. A second advantage is that black box testing does not - -12 -00:00:32,200 --> 00:00:35,402 -need the code. What that means is that you can perform early - -13 -00:00:35,402 --> 00:00:38,801 -test design. So you can start designing and writing your test cases, - -14 -00:00:38,801 --> 00:00:41,423 -even before writing your code, so that when the code is - -15 -00:00:41,423 --> 00:00:44,520 -ready, we can test it right away. And that helps prevent a - -16 -00:00:44,520 --> 00:00:48,054 -problem that is very typical in real life software development, which is - -17 -00:00:48,054 --> 00:00:50,790 -getting an idea of the project and having no time to create - -18 -00:00:50,790 --> 00:00:53,040 -the tests. In this way, we already have the tests, so - -19 -00:00:53,040 --> 00:00:56,170 -we just have to run them. Another advantage is that black-box testing - -20 -00:00:56,170 --> 00:00:59,530 -can catch logic defects, because it focuses on the description of what - -21 -00:00:59,530 --> 00:01:02,440 -the software should do, and therefore on its logic. If we derive - -22 -00:01:02,440 --> 00:01:05,250 -test cases from such description, then we can catch these kind of - -23 -00:01:05,250 --> 00:01:07,510 -problems. And finally, black-box testing is - -24 -00:01:07,510 --> 00:01:09,900 -applicable at all granularity levels, which - -25 -00:01:09,900 --> 00:01:13,490 -means that we can use black-box testing in unit testing, integration testing, - -26 -00:01:13,490 --> 00:01:16,290 -system testing, and so on. We can use it at all levels. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/20 - Identify Constraints Among Choices - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/20 - Identify Constraints Among Choices - lang_en_vs4.srt deleted file mode 100644 index 0278cc8..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/20 - Identify Constraints Among Choices - lang_en_vs4.srt +++ /dev/null @@ -1,239 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,080 -Something that we saw when we were looking at the split - -2 -00:00:02,080 --> 00:00:05,760 -program before is that if we just combine the interesting values that - -3 -00:00:05,760 --> 00:00:08,490 -we identify, we might end up with a lot of cases. - -4 -00:00:08,490 --> 00:00:11,030 -And I mentioned that we, we're going to look at some way of - -5 -00:00:11,030 --> 00:00:13,720 -addressing that problem. And this is exactly what happens in the - -6 -00:00:13,720 --> 00:00:17,420 -next step of the category partition method, in which we identify constraints - -7 -00:00:17,420 --> 00:00:20,510 -among choices. And why do we identify these constraints? We do - -8 -00:00:20,510 --> 00:00:23,440 -that to eliminate meaningless combinations of - -9 -00:00:23,440 --> 00:00:25,460 -inputs. If you remember, for example, - -10 -00:00:25,460 --> 00:00:27,260 -we had the case in which we were trying to - -11 -00:00:27,260 --> 00:00:30,110 -create a string with a size less than 0, which - -12 -00:00:30,110 --> 00:00:32,930 -doesn't make any sense. And very importantly, we also do - -13 -00:00:32,930 --> 00:00:37,070 -that to reduce the number of test cases. Because every time - -14 -00:00:37,070 --> 00:00:40,930 -we constrain one of the possible choices, we eliminate possible - -15 -00:00:40,930 --> 00:00:43,250 -test cases, so we can use it to keep under - -16 -00:00:43,250 --> 00:00:45,960 -control the number of tests that we generate. There are - -17 -00:00:45,960 --> 00:00:47,571 -three types of properties. The - -18 -00:00:47,571 --> 00:00:50,610 -pair property...if, error properties, and properties - -19 -00:00:50,610 --> 00:00:52,610 -of type single. So we're going to look at what these - -20 -00:00:52,610 --> 00:00:56,230 -properties mean, using, once more, our example of the split program. - -21 -00:00:56,230 --> 00:00:58,750 -In particular, we're going to use some of the choices that we - -22 -00:00:58,750 --> 00:01:02,080 -identified earlier. So let's look, for example, at choice 0, for - -23 -00:01:02,080 --> 00:01:04,599 -category length of the string. All we can say is that, - -24 -00:01:04,599 --> 00:01:07,860 -if the length is 0, this define a special property of - -25 -00:01:07,860 --> 00:01:11,160 -the string. And that was specified in this way by saying - -26 -00:01:11,160 --> 00:01:15,610 -that this identifies property zerovalue. So every time that we use - -27 -00:01:15,610 --> 00:01:19,080 -this choice, zerovalue is defined. At this point, we can use - -28 -00:01:19,080 --> 00:01:20,550 -this to exclude some meaningless - -29 -00:01:20,550 --> 00:01:23,170 -combinations. For instance, consider special characters. - -30 -00:01:23,170 --> 00:01:25,130 -If we have a string of length 0, which means a - -31 -00:01:25,130 --> 00:01:26,850 -string with no characters. Obviously, there - -32 -00:01:26,850 --> 00:01:28,760 -cannot be special characters. So, considering - -33 -00:01:28,760 --> 00:01:31,020 -this combination will just be a waste of time. So what - -34 -00:01:31,020 --> 00:01:33,770 -we do is that we specify next to this choice, that we - -35 -00:01:33,770 --> 00:01:36,360 -will only consider this if length is not 0. And we - -36 -00:01:36,360 --> 00:01:41,110 -do this by saying that we consider this only if not zerovalue. - -37 -00:01:41,110 --> 00:01:43,970 -So, if zerovalue is not defined. So this pair is an - -38 -00:01:43,970 --> 00:01:47,640 -example of a property...if case. Define a property and use that - -39 -00:01:47,640 --> 00:01:49,770 -property. Now let's look at a case in which we might - -40 -00:01:49,770 --> 00:01:52,580 -want to use an error property. For instance, when we look at - -41 -00:01:52,580 --> 00:01:56,480 -the category value for the input size, the choice value less - -42 -00:01:56,480 --> 00:01:59,510 -than 0 is an erroneous choice. So it's a choice that - -43 -00:01:59,510 --> 00:02:02,630 -we selected to test a possibly erroneous situation, so we can - -44 -00:02:02,630 --> 00:02:06,160 -mark this as an error property. And what that means is that - -45 -00:02:06,160 --> 00:02:09,949 -when generating a combination of choices, we will consider this only - -46 -00:02:09,949 --> 00:02:12,990 -once because we assume that we just want to test this error condition - -47 -00:02:12,990 --> 00:02:16,260 -once. Finally, the single property is a property that we use - -48 -00:02:16,260 --> 00:02:19,050 -when we want to limit the number of test cases. And it's - -49 -00:02:19,050 --> 00:02:21,900 -similar as an effect to error. It just has a different - -50 -00:02:21,900 --> 00:02:24,410 -meaning. So what we do when we use the single property is - -51 -00:02:24,410 --> 00:02:27,420 -that we're saying that this choice, we want to use in only - -52 -00:02:27,420 --> 00:02:31,120 -one combination. So don't combine it multiple times. And that, of course, - -53 -00:02:31,120 --> 00:02:34,260 -given the combinatorial nature of the problem, cuts down dramatically - -54 -00:02:34,260 --> 00:02:36,370 -the number of test cases. And we might use, for - -55 -00:02:36,370 --> 00:02:39,500 -instance, the single property for maxint, which means that we - -56 -00:02:39,500 --> 00:02:41,890 -will only have one test case in which the size is - -57 -00:02:41,890 --> 00:02:44,300 -equal to maxint. We're actually going to see a demo - -58 -00:02:44,300 --> 00:02:46,880 -on this topic so we'll have more chances of seeing how - -59 -00:02:46,880 --> 00:02:49,370 -properties work in practice and how good they are at - -60 -00:02:49,370 --> 00:02:53,022 -eliminating meaningless combinations and at reducing the number of test cases. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/21 - Produce and Evaluate Test Case Specifications - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/21 - Produce and Evaluate Test Case Specifications - lang_en_vs4.srt deleted file mode 100644 index ebf8098..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/21 - Produce and Evaluate Test Case Specifications - lang_en_vs4.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,130 --> 00:00:03,200 -Before getting to our demo, we still have two steps to consider. - -2 -00:00:03,200 --> 00:00:06,570 -The first step corresponds to the identification of the test case specifications - -3 -00:00:06,570 --> 00:00:09,890 -in our general systematic approach. And in fact, it's called produce and - -4 -00:00:09,890 --> 00:00:13,410 -evaluate test case specifications. This is a step than can be completely - -5 -00:00:13,410 --> 00:00:16,590 -automated given the results of the previous steps. And the final result - -6 -00:00:16,590 --> 00:00:19,860 -of this step is the production of a set of test frames. - -7 -00:00:19,860 --> 00:00:22,820 -Where a test frame is the specification of a test. Let me - -8 -00:00:22,820 --> 00:00:25,330 -show you an example of this. What we are looking at here - -9 -00:00:25,330 --> 00:00:28,380 -is a test frame for the program split. Test frames are normally - -10 -00:00:28,380 --> 00:00:31,460 -identified by a sequence number. But in this case we are looking at - -11 -00:00:31,460 --> 00:00:34,290 -the 30th six test frame. And what they do is simply to - -12 -00:00:34,290 --> 00:00:38,280 -specify the characteristic of the inputs for that test. In this case, since - -13 -00:00:38,280 --> 00:00:40,920 -we have two inputs, we have two entries, the first one for - -14 -00:00:40,920 --> 00:00:44,010 -string str tells us that the length of the string has to be - -15 -00:00:44,010 --> 00:00:47,840 -size minus 1, and that the string has to contain special characters. And - -16 -00:00:47,840 --> 00:00:50,380 -for size, it tells us that the value of size has to be - -17 -00:00:50,380 --> 00:00:53,340 -greater than zero. As the title says, this step is meant - -18 -00:00:53,340 --> 00:00:56,790 -to produce but also evaluate the case specification. What does it mean - -19 -00:00:56,790 --> 00:01:00,070 -to evaluate? One of the advantages of this approach is that we - -20 -00:01:00,070 --> 00:01:03,420 -can easily use it to assess how many test frames and therefore - -21 -00:01:03,420 --> 00:01:06,120 -how many test cases we will generate with the current least - -22 -00:01:06,120 --> 00:01:09,340 -of categories, choices and constraints. And the beauty of this is that - -23 -00:01:09,340 --> 00:01:12,320 -if the number is too large we can just add additional constraints - -24 -00:01:12,320 --> 00:01:15,840 -and reduce it. And given then the step is automated we just - -25 -00:01:15,840 --> 00:01:19,030 -add constraints push a button and we get our new set of - -26 -00:01:19,030 --> 00:01:21,580 -test frames. And again we can have a wait it either go - -27 -00:01:21,580 --> 00:01:24,560 -hat or add more constraints if we need to further reduce it - -28 -00:01:24,560 --> 00:01:26,320 -and this is something else that we will see in our demo. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/22 - Generate Test Cases from Test Case Specifications - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/22 - Generate Test Cases from Test Case Specifications - lang_en_vs4.srt deleted file mode 100644 index 7d74ae3..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/22 - Generate Test Cases from Test Case Specifications - lang_en_vs4.srt +++ /dev/null @@ -1,91 +0,0 @@ -1 -00:00:00,135 --> 00:00:01,935 -So we get to the last step of the technique in - -2 -00:00:01,935 --> 00:00:05,142 -which once we have generated test case specifications. We create test - -3 -00:00:05,142 --> 00:00:09,180 -cases starting from this specifications. This step mainly consists in a - -4 -00:00:09,180 --> 00:00:12,840 -simple instantiation of frames and it's final result is a set of - -5 -00:00:12,840 --> 00:00:16,840 -concrete tests. For our example, test frame number 36 that we - -6 -00:00:16,840 --> 00:00:19,270 -just saw, this will be the resulting test case, which has - -7 -00:00:19,270 --> 00:00:21,490 -the same ID, so that we can track it and will - -8 -00:00:21,490 --> 00:00:25,520 -specify to concrete values, not just the specification for the input elements. - -9 -00:00:25,520 --> 00:00:29,130 -So string STR will have this value. And the integer size - -10 -00:00:29,130 --> 00:00:31,720 -will have this value. And these two values satisfy what this - -11 -00:00:31,720 --> 00:00:35,260 -test case specification was. Which was, having a string contain special - -12 -00:00:35,260 --> 00:00:38,760 -characters. Here, we have two special characters, like the new line - -13 -00:00:38,760 --> 00:00:41,900 -and the tab. And, we have a size which is greater - -14 -00:00:41,900 --> 00:00:44,430 -than zero, in particular, okay? And this is a test case - -15 -00:00:44,430 --> 00:00:46,880 -that we can actually run on our code. That we can - -16 -00:00:46,880 --> 00:00:50,730 -run on the split program. So, to summarize, we perform six steps - -17 -00:00:50,730 --> 00:00:54,400 -in which we went from a high level description of what the program does, to a - -18 -00:00:54,400 --> 00:00:56,070 -set of concrete test cases. And this is - -19 -00:00:56,070 --> 00:00:57,880 -one of those test cases. So what, what we're - -20 -00:00:57,880 --> 00:01:00,210 -going to do next, we're going to do a mini-demo, - -21 -00:01:00,210 --> 00:01:02,260 -in which we do this for real. We take - -22 -00:01:02,260 --> 00:01:05,440 -the program, we identify categories, choices, constraints, and - -23 -00:01:05,440 --> 00:01:07,800 -we actually generate test frames and then test cases. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/23 - Category Partition Demo - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/23 - Category Partition Demo - lang_en_vs4.srt deleted file mode 100644 index 51c2e52..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/23 - Category Partition Demo - lang_en_vs4.srt +++ /dev/null @@ -1,867 +0,0 @@ -1 -00:00:01,290 --> 00:00:03,210 -In this demo, we're going to do exactly what we - -2 -00:00:03,210 --> 00:00:06,370 -did just now in the lesson. We're going to use - -3 -00:00:06,370 --> 00:00:09,250 -the category partition method to go from a high-level - -4 -00:00:09,250 --> 00:00:12,930 -description of a piece of software of a program to - -5 -00:00:12,930 --> 00:00:15,512 -a set of test cases for that program. To - -6 -00:00:15,512 --> 00:00:17,640 -do that, we're going to use a simple tool. So - -7 -00:00:17,640 --> 00:00:21,040 -I'm going to show you here the tool that is - -8 -00:00:21,040 --> 00:00:26,380 -called a tsl generator right here. This tool is available - -9 -00:00:26,380 --> 00:00:28,520 -to you, so you can look in the class notes to - -10 -00:00:28,520 --> 00:00:31,900 -see information on how to download it. And together with the tool, - -11 -00:00:31,900 --> 00:00:34,890 -we are also going to provide a manual for the tool, and - -12 -00:00:34,890 --> 00:00:37,680 -a set of files that I'm going to use in this demo. So - -13 -00:00:37,680 --> 00:00:40,420 -you should be able to do exactly what I'm doing. So - -14 -00:00:40,420 --> 00:00:45,110 -again, all of those are available from the class notes. So specifically, - -15 -00:00:45,110 --> 00:00:48,390 -today we're going to write test cases for the grep program. So in - -16 -00:00:48,390 --> 00:00:51,970 -case you're familiar with the grep utility, this is a simplified version - -17 -00:00:51,970 --> 00:00:55,060 -of that utility. So basically the grep utility allows you - -18 -00:00:55,060 --> 00:00:58,410 -to search a file for the occurrences of a given - -19 -00:00:58,410 --> 00:01:01,552 -pattern. So you can invoke it, as it's shown here - -20 -00:01:01,552 --> 00:01:05,570 -in the synopsis, by executing grep, the pattern that you're - -21 -00:01:05,570 --> 00:01:08,310 -looking for, and the filename in which you want to - -22 -00:01:08,310 --> 00:01:10,300 -look for the pattern. And let me read the description - -23 -00:01:10,300 --> 00:01:13,650 -of the grep utility. The grep utility searches files for - -24 -00:01:13,650 --> 00:01:17,110 -a pattern and brings all lines that contain that pattern - -25 -00:01:17,110 --> 00:01:20,900 -on the standard output. A line that contains multiple occurrences of - -26 -00:01:20,900 --> 00:01:24,350 -the pattern is printed only once. The pattern is any sequence - -27 -00:01:24,350 --> 00:01:27,700 -of characters. To include a blank in the pattern, the entire - -28 -00:01:27,700 --> 00:01:31,060 -pattern must be enclosed in single quotes. To include a quote - -29 -00:01:31,060 --> 00:01:34,420 -sign in the pattern, the quote sign must be escaped, which - -30 -00:01:34,420 --> 00:01:36,260 -means that we have to put a slash in front of - -31 -00:01:36,260 --> 00:01:39,290 -the quotes sign. And in general, it is safest to enclose - -32 -00:01:39,290 --> 00:01:42,210 -the entire pattern in single quotes. So this is our high - -33 -00:01:42,210 --> 00:01:45,420 -level description for the program, for the softer system, that - -34 -00:01:45,420 --> 00:01:47,270 -we need to test. So now let me show you - -35 -00:01:47,270 --> 00:01:50,600 -what a possible set of categories and partitions could be - -36 -00:01:50,600 --> 00:01:53,770 -for this program. So what I have here is a - -37 -00:01:53,770 --> 00:01:58,080 -file, a textual file, which contains all the categories and - -38 -00:01:58,080 --> 00:02:02,760 -partitions for the elements that are relevant for my program. - -39 -00:02:02,760 --> 00:02:05,240 -In particular, when we look at the file, we can - -40 -00:02:05,240 --> 00:02:07,809 -see that the file can be characterized by its size. - -41 -00:02:08,889 --> 00:02:12,160 -And in this case, I've got two choices. The file can - -42 -00:02:12,160 --> 00:02:16,050 -be empty or not empty. The second characteristic of the file - -43 -00:02:16,050 --> 00:02:19,490 -that I'm considering is the number of occurrences of the pattern - -44 -00:02:19,490 --> 00:02:22,320 -in the file. And I'm considering that the pattern might not occur - -45 -00:02:22,320 --> 00:02:25,780 -in the file or it might occur once, or multiple times. - -46 -00:02:25,780 --> 00:02:28,264 -I'm not going to go through the rest of the file because we - -47 -00:02:28,264 --> 00:02:31,234 -already covered how to apply the category partition method in the - -48 -00:02:31,234 --> 00:02:34,226 -lesson. So if you had doubts about that, about the method and - -49 -00:02:34,226 --> 00:02:36,952 -how to apply, you might want to go back and watch again the - -50 -00:02:36,952 --> 00:02:40,040 -lesson. What I want to show you here is how you can go - -51 -00:02:40,040 --> 00:02:43,670 -from this information that you have here, that we have derived by - -52 -00:02:43,670 --> 00:02:47,020 -applying the, the first steps of the method, to a set of - -53 -00:02:47,020 --> 00:02:50,650 -test frames, and then, a set of test packs. So to do - -54 -00:02:50,650 --> 00:02:53,240 -that we're going to use the tool that I just mentioned. So let - -55 -00:02:53,240 --> 00:02:56,670 -me bring back my terminal. So first of all, let's see how - -56 -00:02:56,670 --> 00:02:59,570 -we can run the tool. So you have a manual that will explain - -57 -00:02:59,570 --> 00:03:02,180 -all the details on how to build the file that we're - -58 -00:03:02,180 --> 00:03:04,350 -going to feed the tool. So what is the format and so - -59 -00:03:04,350 --> 00:03:07,780 -on. Here I'm just going to see how I can run the - -60 -00:03:07,780 --> 00:03:10,828 -tool. So first of all, let me point out that this was - -61 -00:03:10,828 --> 00:03:15,028 -developed together by professors from the University of California Irvine and - -62 -00:03:15,028 --> 00:03:18,020 -Oregon State University. And as you can see, we can run - -63 -00:03:18,020 --> 00:03:20,968 -TSL generator and specify that we want to see the main - -64 -00:03:20,968 --> 00:03:24,361 -page. So in this case if we run it this, this way, - -65 -00:03:24,361 --> 00:03:27,723 -you'll have some basic information on how to run - -66 -00:03:27,723 --> 00:03:30,720 -the tool. And from the main page you can see - -67 -00:03:30,720 --> 00:03:33,520 -that you can specify the minus c flag and in - -68 -00:03:33,520 --> 00:03:37,360 -this case the TSL generator will report the number of - -69 -00:03:37,360 --> 00:03:41,410 -test frames generated without writing them to output. For - -70 -00:03:41,410 --> 00:03:43,828 -example, you might want to use this as we will do - -71 -00:03:43,828 --> 00:03:46,308 -to see how many tests that you will generate with - -72 -00:03:46,308 --> 00:03:49,630 -a current set of category partitions and choices. The minus - -73 -00:03:49,630 --> 00:03:52,620 -s option will bring the result of the TSL - -74 -00:03:52,620 --> 00:03:55,620 -generator on the standard output. And finally, you can - -75 -00:03:55,620 --> 00:03:58,330 -use minus o to specify an output file, where - -76 -00:03:58,330 --> 00:04:01,010 -to put the output of the program. So let's - -77 -00:04:01,010 --> 00:04:05,070 -at first run our TSL generator by specifying the - -78 -00:04:05,070 --> 00:04:08,620 -minus c option and by bypassing our current set - -79 -00:04:08,620 --> 00:04:11,860 -of category partitions and choices. Okay, so let me - -80 -00:04:11,860 --> 00:04:15,140 -remind you that what the, the tool will do - -81 -00:04:15,140 --> 00:04:17,790 -is what we will do manually. Otherwise, which is - -82 -00:04:17,790 --> 00:04:20,380 -to combine all these choices so as to have one - -83 -00:04:20,380 --> 00:04:23,305 -test case for each combination. So if we do - -84 -00:04:23,305 --> 00:04:27,412 -that, you can see that the tool tells us that - -85 -00:04:27,412 --> 00:04:32,383 -we will generate 7776 test frames in this case. - -86 -00:04:32,383 --> 00:04:34,660 -And this seems to be a little too much for - -87 -00:04:34,660 --> 00:04:36,868 -a program as small as the one that we are - -88 -00:04:36,868 --> 00:04:40,341 -testing. And assume for instance that we don't have the - -89 -00:04:40,341 --> 00:04:43,149 -resources to run this many test cases for, for - -90 -00:04:43,149 --> 00:04:46,518 -the grep program. In addition, consider that in this case, - -91 -00:04:46,518 --> 00:04:50,356 -we're computing all possible combinations of choices. And there's going to - -92 -00:04:50,356 --> 00:04:52,384 -be some combination that do not make sense as we - -93 -00:04:52,384 --> 00:04:54,945 -discussed in the lesson. So what we might want to - -94 -00:04:54,945 --> 00:04:57,051 -do in this case is to go back to our - -95 -00:04:57,051 --> 00:05:03,120 -spec and start adding constraints to eliminate this meaningless combination. - -96 -00:05:03,120 --> 00:05:05,980 -So I'm going to show you the result of doing that. - -97 -00:05:05,980 --> 00:05:08,690 -And I'm going to show you a few examples. - -98 -00:05:08,690 --> 00:05:11,670 -For example here, when the file is empty, I'm going to - -99 -00:05:11,670 --> 00:05:15,010 -define this property empty file. And how am I - -100 -00:05:15,010 --> 00:05:18,490 -going to use this property? Well for example here, it - -101 -00:05:18,490 --> 00:05:20,760 -doesn't make sense to consider the case in which - -102 -00:05:20,760 --> 00:05:24,660 -we have one or many occurrences of the pattern in - -103 -00:05:24,660 --> 00:05:27,020 -the file if the file is empty. Therefore I'm - -104 -00:05:27,020 --> 00:05:31,650 -going to tell the tool that it should consider this specific - -105 -00:05:31,650 --> 00:05:35,780 -choice only if the file is not empty, only if - -106 -00:05:35,780 --> 00:05:38,660 -empty file is not defined. And that will skip, for - -107 -00:05:38,660 --> 00:05:41,330 -example, all of the combinations in which the file is - -108 -00:05:41,330 --> 00:05:44,171 -empty. And I'm trying to generate the test case that has - -109 -00:05:44,171 --> 00:05:46,364 -one occurrence of the pattern in the file, which is - -110 -00:05:46,364 --> 00:05:49,355 -simply not possible. For another example, in case I have - -111 -00:05:49,355 --> 00:05:52,824 -an empty pattern, I define the property empty pattern. And - -112 -00:05:52,824 --> 00:05:56,725 -then I avoid the choices that involve the pattern in case - -113 -00:05:56,725 --> 00:05:59,820 -the pattern is empty. because, for example, I cannot - -114 -00:05:59,820 --> 00:06:03,900 -have quotes in a pattern that is empty. For example, - -115 -00:06:03,900 --> 00:06:06,760 -it doesn't make sense to have blanks. So, one or - -116 -00:06:06,760 --> 00:06:10,250 -more blanks if the pattern is empty. So I'm going to - -117 -00:06:10,250 --> 00:06:14,180 -specify again that this choice should be considered only if - -118 -00:06:14,180 --> 00:06:16,140 -we don't have an empty pattern. And so on and - -119 -00:06:16,140 --> 00:06:20,080 -so forth. So now after I edit these constraints, I - -120 -00:06:20,080 --> 00:06:21,890 -can go back and compute again the number of test - -121 -00:06:21,890 --> 00:06:23,970 -frames and therefore the test cases that will be - -122 -00:06:23,970 --> 00:06:27,530 -generated with these constraints. So let me go again - -123 -00:06:27,530 --> 00:06:30,381 -to my terminal. Okay, so now I'm going to run - -124 -00:06:30,381 --> 00:06:34,061 -my TSL generator again, and I'm going to run it on - -125 -00:06:34,061 --> 00:06:37,389 -the second version of this file. And you can - -126 -00:06:37,389 --> 00:06:40,546 -see that I reduced the, the number of test frames - -127 -00:06:40,546 --> 00:06:43,889 -from about 7800 to about 1700. So it's quite - -128 -00:06:43,889 --> 00:06:46,967 -a, quite a big reduction by eliminating all these combinations - -129 -00:06:46,967 --> 00:06:49,540 -that do not make sense. But let's assume again that - -130 -00:06:49,540 --> 00:06:52,040 -we want to reduce this further so that we don't want to - -131 -00:06:52,040 --> 00:06:55,610 -generate those many test frames and therefore test cases. So - -132 -00:06:55,610 --> 00:06:58,660 -what can we do? We go back to our spec. And - -133 -00:06:58,660 --> 00:07:02,280 -in this case, we start adding error constraints. So if - -134 -00:07:02,280 --> 00:07:05,200 -you remember what we said in the lesson, error constraints are - -135 -00:07:05,200 --> 00:07:08,310 -constraints that indicate a choice that has to do with an - -136 -00:07:08,310 --> 00:07:11,980 -erroneous behaviour. For example, an erroneous input provided to the problem. - -137 -00:07:11,980 --> 00:07:15,210 -So here for instance, we're indicating the presence - -138 -00:07:15,210 --> 00:07:20,060 -of incorrectly enclosing quotes as an error choice. Same - -139 -00:07:20,060 --> 00:07:22,270 -thing if there's no file corresponding to the - -140 -00:07:22,270 --> 00:07:23,970 -name that we provide to the tool, we say - -141 -00:07:23,970 --> 00:07:26,760 -that this corresponds to an error. So how - -142 -00:07:26,760 --> 00:07:29,130 -is the tool going to use this information? It uses - -143 -00:07:29,130 --> 00:07:33,980 -this information by producing only one combination that involves - -144 -00:07:33,980 --> 00:07:37,270 -error choices, instead of combining them with other choices. - -145 -00:07:37,270 --> 00:07:39,780 -So let's see what happens after we added this - -146 -00:07:39,780 --> 00:07:43,370 -error constraints. So we go back to our console - -147 -00:07:43,370 --> 00:07:46,920 -once more. And in this case, we want to run - -148 -00:07:46,920 --> 00:07:50,910 -the TSL generator with the version of the, of my - -149 -00:07:50,910 --> 00:07:53,900 -file that contains the area of constraints. And again, - -150 -00:07:53,900 --> 00:07:56,390 -I reduce quite a bit the number of test frames. - -151 -00:07:56,390 --> 00:07:59,110 -So now I have only 562 test frames that - -152 -00:07:59,110 --> 00:08:02,660 -will be generated by using the file that I provided. - -153 -00:08:02,660 --> 00:08:05,460 -So for the last time, let's assume that we really want - -154 -00:08:05,460 --> 00:08:07,780 -to cut down the number of test frames or the number of - -155 -00:08:07,780 --> 00:08:10,380 -test cases. So once more, we go back to our file, and - -156 -00:08:10,380 --> 00:08:12,980 -at this point what we can add is the final type of - -157 -00:08:12,980 --> 00:08:14,170 -constraints that we have, which are - -158 -00:08:14,170 --> 00:08:17,245 -single constraints. And single constraints are - -159 -00:08:17,245 --> 00:08:21,360 -basically indicated choices that we don't want to combine with other choices. - -160 -00:08:21,360 --> 00:08:24,210 -So they have the same effect of the error constraints, but they - -161 -00:08:24,210 --> 00:08:28,120 -have a different meaning, so they do not indicate choices that corresponds - -162 -00:08:28,120 --> 00:08:29,860 -to an error. In other words, I can use a - -163 -00:08:29,860 --> 00:08:35,280 -single constraints to identify choices that I want to test only once. - -164 -00:08:35,280 --> 00:08:38,510 -So for example in this case, I might decide that I - -165 -00:08:38,510 --> 00:08:42,520 -want to have only one test frame that tests my program - -166 -00:08:42,520 --> 00:08:44,420 -with a file being empty and I can do the - -167 -00:08:44,420 --> 00:08:47,370 -same for other choices. So basically I can continue adding this - -168 -00:08:47,370 --> 00:08:50,400 -single constraint until I get down to the number of test - -169 -00:08:50,400 --> 00:08:53,410 -frames and therefore the number of test cases that I want. - -170 -00:08:53,410 --> 00:08:57,770 -So now let's go back once more to our console. And so now if we run - -171 -00:08:59,060 --> 00:09:04,450 -using this file as input, you can see that we have 35 test frames generated. So - -172 -00:09:04,450 --> 00:09:07,750 -this is a fairly low number of test cases, so we might decide that we want to - -173 -00:09:07,750 --> 00:09:13,380 -go ahead and write these test frames to a file. So now let's open this file - -174 -00:09:15,990 --> 00:09:25,500 -that we just generated. And as you can see here, I have exactly 35 test frames, - -175 -00:09:26,670 --> 00:09:30,900 -as expected. Some of those correspond to the single and error cases. So in this - -176 -00:09:30,900 --> 00:09:33,330 -case, the only choice that I have indicated - -177 -00:09:33,330 --> 00:09:35,690 -is the one that corresponds to the single - -178 -00:09:35,690 --> 00:09:38,310 -or error constraint. What is for the other - -179 -00:09:38,310 --> 00:09:42,170 -ones? I actually have the whole test spec. - -180 -00:09:42,170 --> 00:09:45,530 -So let's pick one just to give you an example. - -181 -00:09:45,530 --> 00:09:48,440 -In this case, that's frame number 15 that will correspond to - -182 -00:09:48,440 --> 00:09:51,910 -test case number 15. And here you can see that - -183 -00:09:51,910 --> 00:09:55,280 -we have all the information. So this is a test specification. - -184 -00:09:55,280 --> 00:09:57,560 -All the information that we need to generate the corresponding - -185 -00:09:57,560 --> 00:09:59,760 -test. We know that we need a file that is not - -186 -00:09:59,760 --> 00:10:03,810 -empty. That we need to have one occurrence of the pattern - -187 -00:10:03,810 --> 00:10:07,580 -in the file. One occurrence of the pattern in one line. - -188 -00:10:08,680 --> 00:10:10,360 -The position of the pattern in the file can - -189 -00:10:10,360 --> 00:10:13,740 -be any position. The length of the pattern must - -190 -00:10:13,740 --> 00:10:16,640 -be more than one character. The pattern should not - -191 -00:10:16,640 --> 00:10:20,140 -be enclosed in quotes. There should be one white - -192 -00:10:20,140 --> 00:10:24,460 -space, one quote within the pattern, and finally the - -193 -00:10:24,460 --> 00:10:27,230 -file that would pass through the program should exist. - -194 -00:10:27,230 --> 00:10:29,680 -So the file should be present. So I can - -195 -00:10:29,680 --> 00:10:33,950 -easily transform all of this into an actual test case. - -196 -00:10:33,950 --> 00:10:35,540 -And notice that even though we're not, we're not - -197 -00:10:35,540 --> 00:10:38,420 -going to do it here. In cases like this, it might - -198 -00:10:38,420 --> 00:10:42,190 -even be possible to automatically generate the test cases - -199 -00:10:42,190 --> 00:10:45,020 -from the test specifications because, here for example, here it - -200 -00:10:45,020 --> 00:10:48,150 -should be relatively straight forward to parse these test - -201 -00:10:48,150 --> 00:10:52,450 -specifications and generate test cases accordingly. So, just to summarize, - -202 -00:10:52,450 --> 00:10:55,910 -what we have done is to go from one high-level - -203 -00:10:55,910 --> 00:10:58,880 -description of a program to a set of categories, partitions, - -204 -00:10:58,880 --> 00:11:01,820 -and choices for that program. Then we have combined them - -205 -00:11:01,820 --> 00:11:04,930 -in different ways, adding more and more constraints to reduce the - -206 -00:11:04,930 --> 00:11:07,600 -number of combinations until we ended up with the right number - -207 -00:11:07,600 --> 00:11:09,650 -of test cases, so the number of test cases that we - -208 -00:11:09,650 --> 00:11:14,630 -were fine generating. We generated the corresponding test specifications. And at - -209 -00:11:14,630 --> 00:11:17,340 -that point, we could just go ahead, generate the test case, - -210 -00:11:17,340 --> 00:11:20,660 -and test our application. So, and you can see how this - -211 -00:11:20,660 --> 00:11:23,720 -can result in a much more thorough testing of your application. - -212 -00:11:23,720 --> 00:11:27,890 -Because instead of reading this description and just trying to come up with test - -213 -00:11:27,890 --> 00:11:33,900 -cases for it, we can break down the process in steps that are easy to perform - -214 -00:11:33,900 --> 00:11:36,960 -individually. They can be automated as much - -215 -00:11:36,960 --> 00:11:38,600 -as possible. And they will end up with - -216 -00:11:38,600 --> 00:11:40,380 -a set of test cases that will test - -217 -00:11:40,380 --> 00:11:42,790 -all the interests and aspects of your application. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/24 - Model Based Testing - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/24 - Model Based Testing - lang_en_vs4.srt deleted file mode 100644 index 3d41cd9..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/24 - Model Based Testing - lang_en_vs4.srt +++ /dev/null @@ -1,83 +0,0 @@ -1 -00:00:00,370 --> 00:00:02,950 -What we just saw with the category-partition method, is a - -2 -00:00:02,950 --> 00:00:05,530 -specific instance of this systematic - -3 -00:00:05,530 --> 00:00:08,230 -functional testing approach. So specific instance - -4 -00:00:08,230 --> 00:00:10,900 -of the steps that we represented here. And, as I - -5 -00:00:10,900 --> 00:00:13,100 -mentioned earlier on, this is not the only way in which - -6 -00:00:13,100 --> 00:00:16,700 -you can generate test cases, starting from a functional specification. - -7 -00:00:16,700 --> 00:00:20,190 -In particular, this step, in which we identified relevant inputs and - -8 -00:00:20,190 --> 00:00:23,390 -then we combine them to generate test case specifications, can also - -9 -00:00:23,390 --> 00:00:25,490 -be done in different ways. And, we're going to look at one - -10 -00:00:25,490 --> 00:00:28,170 -of these ways. Which is through the construction of a - -11 -00:00:28,170 --> 00:00:31,040 -model. And, the reason why I want to talk about models. - -12 -00:00:31,040 --> 00:00:34,090 -Is because, model based testing is also, fairly popular in - -13 -00:00:34,090 --> 00:00:37,680 -industry. And fairly used in practice. In model based testing, the - -14 -00:00:37,680 --> 00:00:41,150 -way in which we go from specifications, to test cases, - -15 -00:00:41,150 --> 00:00:44,220 -is through the construction of a model. Where a model is - -16 -00:00:44,220 --> 00:00:47,670 -an abstract representation of the software under test. Also in - -17 -00:00:47,670 --> 00:00:50,860 -this case there are many possible models, that we can use. - -18 -00:00:50,860 --> 00:00:52,180 -And what we're going to do, we're going to focus - -19 -00:00:52,180 --> 00:00:54,370 -on a specific kind of model. And I'll - -20 -00:00:54,370 --> 00:00:57,010 -just point you to additional sources of information, - -21 -00:00:57,010 --> 00:00:59,070 -in case you're interested in seeing other examples. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/25 - Finite State Machines - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/25 - Finite State Machines - lang_en_vs4.srt deleted file mode 100644 index 26f2fd7..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/25 - Finite State Machines - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,320 -The model that we will consider, is a very well - -2 -00:00:02,320 --> 00:00:05,330 -known one. Which is finite state machines. And you might have - -3 -00:00:05,330 --> 00:00:08,320 -seen them before. At a high level, a state machine is - -4 -00:00:08,320 --> 00:00:11,990 -a graph in which nodes represent states of the system. For - -5 -00:00:11,990 --> 00:00:15,650 -example, in this case, state 1, state 2, and state 3. - -6 -00:00:15,650 --> 00:00:19,950 -Edges represent transitions between states. For instance, in this case we - -7 -00:00:19,950 --> 00:00:22,850 -have one edge from state 1, to state 2. That means - -8 -00:00:22,850 --> 00:00:25,640 -that the system can go from state 1, to state 2. - -9 -00:00:25,640 --> 00:00:29,530 -And finally, the labels on the edges represent events - -10 -00:00:29,530 --> 00:00:32,800 -and actions. For example, what this label means is that - -11 -00:00:32,800 --> 00:00:35,400 -the system goes from state three to state two - -12 -00:00:35,400 --> 00:00:39,140 -when event five occurs. And when going from state three - -13 -00:00:39,140 --> 00:00:42,190 -to state two, it generates action four. And does - -14 -00:00:42,190 --> 00:00:45,430 -reacher model, sir reacher's kind of state machines, but we're - -15 -00:00:45,430 --> 00:00:48,160 -just going to stick to this ones which are enough. For - -16 -00:00:48,160 --> 00:00:50,760 -our purpose. So how do we build such a final - -17 -00:00:50,760 --> 00:00:53,530 -state machine starting from a specification? The first thing - -18 -00:00:53,530 --> 00:00:56,660 -we need to do is to identify the system's boundaries - -19 -00:00:56,660 --> 00:00:59,250 -and the input and output to the system. Once we - -20 -00:00:59,250 --> 00:01:01,960 -have done that, we can identify, within the boundaries of - -21 -00:01:01,960 --> 00:01:06,070 -the system, the relevant states and transitions. So we split - -22 -00:01:06,070 --> 00:01:09,670 -this single state We'll refine it into several states. And - -23 -00:01:09,670 --> 00:01:12,640 -we also identify how the system can go from one - -24 -00:01:12,640 --> 00:01:16,830 -state to another. Including which inputs cause which transition, and - -25 -00:01:16,830 --> 00:01:19,350 -which result in outputs we can obtain. To - -26 -00:01:19,350 --> 00:01:21,810 -better illustrate that, let's look at a concrete example. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/26 - Finite State Machines Example - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/26 - Finite State Machines Example - lang_en_vs4.srt deleted file mode 100644 index f889057..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/26 - Finite State Machines Example - lang_en_vs4.srt +++ /dev/null @@ -1,251 +0,0 @@ -1 -00:00:00,140 --> 00:00:03,010 -In this example, we're going to start from an informal specification, and the - -2 -00:00:03,010 --> 00:00:06,670 -specification is the one shown here in file spec.txt. This is the - -3 -00:00:06,670 --> 00:00:10,210 -specification for the maintenance function in a specific system. So what we're - -4 -00:00:10,210 --> 00:00:13,630 -doing is that we're taking the description of the functionality of a system, - -5 -00:00:13,630 --> 00:00:16,219 -and we're building a model, in this case a final state machine - -6 -00:00:16,219 --> 00:00:18,710 -for it. And there is no need to look at all the details - -7 -00:00:18,710 --> 00:00:21,350 -for this specification, but I want to point out that if you - -8 -00:00:21,350 --> 00:00:25,640 -look at the way the specification is written, we can identify specific cases - -9 -00:00:25,640 --> 00:00:28,210 -that we need to take into account. Like here if something - -10 -00:00:28,210 --> 00:00:31,920 -happens, something else will follow. Again, if something happens something else - -11 -00:00:31,920 --> 00:00:35,690 -will follow. So we have multiple choices here. Here will determine - -12 -00:00:35,690 --> 00:00:38,140 -the next steps and so on. So all we have to - -13 -00:00:38,140 --> 00:00:42,420 -do is to go through this process, identify these cases and - -14 -00:00:42,420 --> 00:00:45,300 -then build a machine that represents these cases. For the spec - -15 -00:00:45,300 --> 00:00:47,830 -that we just consider this is the state machine that will - -16 -00:00:47,830 --> 00:00:50,960 -result. Again there is no need to go through all the details, - -17 -00:00:50,960 --> 00:00:53,090 -but what I want to point out is that we have - -18 -00:00:53,090 --> 00:00:55,710 -a set of states. So for instance, we have state zero, - -19 -00:00:55,710 --> 00:00:58,380 -which is no maintenance, and if a request comes in, the - -20 -00:00:58,380 --> 00:01:01,350 -system will move, and the system wait for pickup. Then if - -21 -00:01:01,350 --> 00:01:04,400 -the pickup actually occurs, the system will move to the repair - -22 -00:01:04,400 --> 00:01:07,540 -state, and so on and so forth. So this is just - -23 -00:01:07,540 --> 00:01:13,070 -a more systematic representation of what was in the former specification. - -24 -00:01:13,070 --> 00:01:16,160 -And I will argue that this is much easier to understand at - -25 -00:01:16,160 --> 00:01:19,170 -least for somebody who has to develop tests for this system. In - -26 -00:01:19,170 --> 00:01:21,770 -fact what we're going to see next is how we can go from that - -27 -00:01:21,770 --> 00:01:24,790 -representation to a set of test cases. And the way which we do - -28 -00:01:24,790 --> 00:01:28,950 -it is by covering the behaviors represented by defining state machine. And we - -29 -00:01:28,950 --> 00:01:31,500 -can decide how we want to cover them. For example we might want - -30 -00:01:31,500 --> 00:01:35,080 -to cover all the states. So we might want to identify paths in - -31 -00:01:35,080 --> 00:01:38,310 -the state machine that go through all the states in the machine. Like - -32 -00:01:38,310 --> 00:01:41,840 -the one I just draw or this one, this one and this one. - -33 -00:01:41,840 --> 00:01:44,900 -So if we consider these four test cases, we can see that all the - -34 -00:01:44,900 --> 00:01:48,470 -states in my system or at least all the states that I have identified - -35 -00:01:48,470 --> 00:01:51,450 -are covered. I might want to go a little further, and decide that I - -36 -00:01:51,450 --> 00:01:54,210 -don't only want to cover all of the states, but I want to cover, all - -37 -00:01:54,210 --> 00:01:57,930 -of the transitions, because, it makes sense to visit a state, when coming from - -38 -00:01:57,930 --> 00:02:00,380 -different states. And, if I want to do that, and I look at the - -39 -00:02:00,380 --> 00:02:03,440 -test cases that I generated so far, I can see that there is one - -40 -00:02:03,440 --> 00:02:06,910 -transition, the one here, that is not covered. And, the same can be said for - -41 -00:02:06,910 --> 00:02:09,210 -the two transitions here. So what I can decide to do is - -42 -00:02:09,210 --> 00:02:13,370 -to generate another test case, that covers those or extend an existing one. - -43 -00:02:13,370 --> 00:02:16,500 -For instance, I could extend this test case by adding a visit to - -44 -00:02:16,500 --> 00:02:20,760 -the state, before going back to these two. Alternatively, I could also generate - -45 -00:02:20,760 --> 00:02:24,390 -new test cases, such as this one. To cover the missing transitions. - -46 -00:02:24,390 --> 00:02:26,350 -And once I have these test cases, I can express them in a - -47 -00:02:26,350 --> 00:02:29,860 -clearer way by simply specifying what are the states that they cover. I'm - -48 -00:02:29,860 --> 00:02:31,990 -just going to give you a couple of examples. Say, if we look - -49 -00:02:31,990 --> 00:02:34,280 -at the last one that I added, which will be test case - -50 -00:02:34,280 --> 00:02:37,190 -number five, I just need to specify that it will go through state - -51 -00:02:37,190 --> 00:02:41,090 -zero, which is this one, five, which is this one, six, and - -52 -00:02:41,090 --> 00:02:43,130 -then back to zero. And I can do the same for the other - -53 -00:02:43,130 --> 00:02:46,500 -test cases. So this will be my complete set of test cases. - -54 -00:02:46,500 --> 00:02:50,060 -So the bottom line here is that it is much harder to build - -55 -00:02:50,060 --> 00:02:53,080 -a set of test cases that will cover the behavior of an informal - -56 -00:02:53,080 --> 00:02:56,970 -description. But by going through a model, so by building in this case, - -57 -00:02:56,970 --> 00:03:01,700 -a finite state machine for that description, we can, in a much easier way, see - -58 -00:03:01,700 --> 00:03:04,100 -what the behaviors of interest of the system - -59 -00:03:04,100 --> 00:03:05,960 -are, and try to cover them. And there - -60 -00:03:05,960 --> 00:03:07,400 -is again in the spirit of breaking - -61 -00:03:07,400 --> 00:03:09,950 -down a complex problem into smaller steps that - -62 -00:03:09,950 --> 00:03:11,620 -we can better manage, which in the end, - -63 -00:03:11,620 --> 00:03:14,450 -results in a more efficient and effective testing. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/27 - Finite State Machines Considerations - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/27 - Finite State Machines Considerations - lang_en_vs4.srt deleted file mode 100644 index 64c2c00..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/27 - Finite State Machines Considerations - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,100 --> 00:00:03,060 -There are some important considerations I want to make on final state - -2 -00:00:03,060 --> 00:00:06,410 -machines. And more in general, on model based testing. The first one - -3 -00:00:06,410 --> 00:00:10,600 -is about applicability. Testing based on final state machines is a very - -4 -00:00:10,600 --> 00:00:13,890 -general approach, that we can apply in a number of contexts. And in - -5 -00:00:13,890 --> 00:00:16,510 -particular, if you are working with UML, you have state machines for - -6 -00:00:16,510 --> 00:00:19,720 -free. Because state charts are nothing else but a special kind of - -7 -00:00:19,720 --> 00:00:22,210 -state machine. So you can apply the technique that we just saw - -8 -00:00:22,210 --> 00:00:26,010 -directly on state charts, and try to cover their states and their transitions. - -9 -00:00:26,010 --> 00:00:29,980 -Another important point is that abstraction is key. You have to find the - -10 -00:00:29,980 --> 00:00:33,280 -right level of abstraction. The bigger the system, the more you have to - -11 -00:00:33,280 --> 00:00:36,130 -abstract if you want to represent it with a model, and in particular, with - -12 -00:00:36,130 --> 00:00:38,710 -the final state machine. So it's like having a slider, and you have - -13 -00:00:38,710 --> 00:00:41,840 -to decide where you want to move on that slider. The more you represent, - -14 -00:00:41,840 --> 00:00:44,700 -the more complex your system is going to be and the more thorough your - -15 -00:00:44,700 --> 00:00:48,110 -testing is going to be but also more expensive. The less you represent the - -16 -00:00:48,110 --> 00:00:51,330 -less expensive testing is going to be, but also testing might not be as - -17 -00:00:51,330 --> 00:00:53,500 -thorough as it would be otherwise. So you have to find - -18 -00:00:53,500 --> 00:00:56,150 -the right balance between abstracting the weight too much and abstracting - -19 -00:00:56,150 --> 00:00:59,840 -the weight too little. And finally there are many other approaches. - -20 -00:00:59,840 --> 00:01:02,840 -So we just scratched the surface, and we just saw one possible - -21 -00:01:02,840 --> 00:01:05,760 -approach. But for instance, other models that you can use are - -22 -00:01:05,760 --> 00:01:09,780 -decision tables, flow graphs and even historical models. Models that can - -23 -00:01:09,780 --> 00:01:13,560 -guide your testing based on problems that occurred in your system - -24 -00:01:13,560 --> 00:01:16,500 -in the past. And also, in this case, I'm going to put pointers - -25 -00:01:16,500 --> 00:01:18,460 -to additional materials in the class notes. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/28 - Summary - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/28 - Summary - lang_en_vs4.srt deleted file mode 100644 index 1b68b9f..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/28 - Summary - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,110 --> 00:00:01,600 -Now we are at the end of this lesson, and I - -2 -00:00:01,600 --> 00:00:04,450 -just want to wrap it up by summarizing what we've seen. We talked - -3 -00:00:04,450 --> 00:00:06,340 -about black-box testing, the testing of - -4 -00:00:06,340 --> 00:00:08,760 -software based on a functional specification, - -5 -00:00:08,760 --> 00:00:11,510 -a description of the software rather than its code. We saw a - -6 -00:00:11,510 --> 00:00:15,500 -systematic way of doing that, that allows for breaking down the problem - -7 -00:00:15,500 --> 00:00:19,140 -of testing software, so the problem of going from this functional specification - -8 -00:00:19,140 --> 00:00:22,540 -to a set of test cases into smaller steps, more manageable steps. - -9 -00:00:22,540 --> 00:00:25,466 -And we saw two main ways of doing this. One by identifying - -10 -00:00:25,466 --> 00:00:28,304 -relevant inputs for the main features in the system - -11 -00:00:28,304 --> 00:00:31,802 -and then deriving test case specifications and test cases from - -12 -00:00:31,802 --> 00:00:34,180 -this set of inputs. And the second way by - -13 -00:00:34,180 --> 00:00:36,780 -building a model for the main features of the system - -14 -00:00:36,780 --> 00:00:39,210 -and then using this model to decide how to - -15 -00:00:39,210 --> 00:00:41,680 -test the system. In the next lesson, we are going - -16 -00:00:41,680 --> 00:00:44,440 -to discuss, how to do testing by looking inside the - -17 -00:00:44,440 --> 00:00:47,716 -box? So, how to do testing in a white-box fashion. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/3 - Systematic Functional Testing Approach - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/3 - Systematic Functional Testing Approach - lang_en_vs4.srt deleted file mode 100644 index 75da7e8..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/3 - Systematic Functional Testing Approach - lang_en_vs4.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,690 -So what is the starting point of black box testing? Black - -2 -00:00:02,690 --> 00:00:06,010 -box testing start from a description of the software or as we - -3 -00:00:06,010 --> 00:00:09,590 -call it, a functional specification. And the final result of black - -4 -00:00:09,590 --> 00:00:12,760 -box testing is a set of test cases, a set of actual - -5 -00:00:12,760 --> 00:00:16,410 -inputs and corresponding outputs that we can use to exercise our - -6 -00:00:16,410 --> 00:00:19,030 -code and to try to find defects in our code. So the - -7 -00:00:19,030 --> 00:00:22,060 -question is, how do we get from functional specification to test - -8 -00:00:22,060 --> 00:00:25,510 -cases? Doing these derivations, so going from this description to a concrete - -9 -00:00:25,510 --> 00:00:28,550 -set of tests, is a very complex analytical process. - -10 -00:00:28,550 --> 00:00:31,220 -And normally brute force generation is not a good - -11 -00:00:31,220 --> 00:00:34,430 -idea because it's inefficient and ineffective. What we want - -12 -00:00:34,430 --> 00:00:37,540 -to do instead is to have a systematic approach to - -13 -00:00:37,540 --> 00:00:40,250 -derive test cases from a functional specification. What a - -14 -00:00:40,250 --> 00:00:43,970 -systematic approach does is to simplify the overall problem by - -15 -00:00:43,970 --> 00:00:48,320 -dividing the process into elementary steps. In particular, in - -16 -00:00:48,320 --> 00:00:50,520 -this case, we will perform three main steps. The first - -17 -00:00:50,520 --> 00:00:55,790 -step is to identify independently testable features. Individual features in - -18 -00:00:55,790 --> 00:00:57,600 -the soft hood that we can test. And we're going to - -19 -00:00:57,600 --> 00:00:59,990 -expand on each one of these steps in the next - -20 -00:00:59,990 --> 00:01:02,490 -part of the lesson. The following step is once we have - -21 -00:01:02,490 --> 00:01:06,000 -these independently testable features to identify what are the relevant - -22 -00:01:06,000 --> 00:01:08,590 -inputs. So what are the inputs or the behavior that is - -23 -00:01:08,590 --> 00:01:11,610 -worth testing for these features. Next once we have these - -24 -00:01:11,610 --> 00:01:13,020 -inputs, we're going to derive test - -25 -00:01:13,020 --> 00:01:15,770 -specifications. And test case specifications are - -26 -00:01:15,770 --> 00:01:19,490 -description of the test cases that we can then use - -27 -00:01:19,490 --> 00:01:23,270 -to generate actual test cases. And proceeding in this way, - -28 -00:01:23,270 --> 00:01:26,050 -by this steps, has many advantages. It allows for the - -29 -00:01:26,050 --> 00:01:29,920 -coupling different activities. It allows for dividing brain intensive steps from - -30 -00:01:29,920 --> 00:01:32,240 -steps that can be automated, which is a great advantage. - -31 -00:01:32,240 --> 00:01:34,980 -And also we will see, it allows you for monitoring - -32 -00:01:34,980 --> 00:01:38,040 -the testing process. So to figure out whether your testing - -33 -00:01:38,040 --> 00:01:41,000 -process is going as expected, for example, if you're generating too - -34 -00:01:41,000 --> 00:01:44,160 -many test cases. Or you're generating the number of test cases that your - -35 -00:01:44,160 --> 00:01:47,880 -amount of resources available allows you to run. So let's start by looking - -36 -00:01:47,880 --> 00:01:51,230 -at the first step of this process in which our goal is to - -37 -00:01:51,230 --> 00:01:54,820 -go from a Functional Specification to a set of features that we can - -38 -00:01:54,820 --> 00:01:57,700 -test in the software. So what we want to do is to identify all - -39 -00:01:57,700 --> 00:02:00,290 -of the feature of the software. And why do we want to do this? - -40 -00:02:00,290 --> 00:02:02,650 -Well you know, in the spirit of breaking down the complexity of the - -41 -00:02:02,650 --> 00:02:06,170 -problem, it does not make sense to just try to devise test cases for - -42 -00:02:06,170 --> 00:02:08,750 -all the features of the software at once. For any non-trivial - -43 -00:02:08,750 --> 00:02:11,980 -software, that's a humongous problem, and something that we cannot really - -44 -00:02:11,980 --> 00:02:16,300 -handle effectively. A much better way is to identify independently testable - -45 -00:02:16,300 --> 00:02:19,100 -features and consider one of them at a time when generating tests. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/4 - Overview Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/4 - Overview Quiz - lang_en_vs4.srt deleted file mode 100644 index dda3144..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/4 - Overview Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,740 --> 00:00:02,780 -So, now I want to do a little quiz about - -2 -00:00:02,780 --> 00:00:05,530 -identifying testable features. Let's consider - -3 -00:00:05,530 --> 00:00:07,700 -this simple problem called printSum. - -4 -00:00:07,700 --> 00:00:09,680 -We won't see the implementation because we are doing black-box - -5 -00:00:09,680 --> 00:00:12,780 -testing. And all we need to know is that printSum takes - -6 -00:00:12,780 --> 00:00:15,550 -two integers, a and b, and prints the sum of - -7 -00:00:15,550 --> 00:00:17,540 -these two numbers. So what I want to ask, is - -8 -00:00:17,540 --> 00:00:20,700 -how many independently testable features do we have here? Do - -9 -00:00:20,700 --> 00:00:24,860 -we have one, two, three features? Or more than three features? diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/5 - Overview Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/5 - Overview Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 5503f98..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/5 - Overview Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,360 --> 00:00:03,760 -Sum is a very simple program, that only does one thing, - -2 -00:00:03,760 --> 00:00:07,540 -summing two number, adding two numbers. So the answer in this - -3 -00:00:07,540 --> 00:00:10,640 -case, it's one. There's only one feature that we can test - -4 -00:00:10,640 --> 00:00:14,060 -in PrintSum. So let's look at the slightly more interesting example. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/6 - Overview Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/6 - Overview Quiz - lang_en_vs4.srt deleted file mode 100644 index 96c643e..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/6 - Overview Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,19 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,469 -Let's look at this spreadsheet. I'm pretty sure most of you - -2 -00:00:02,469 --> 00:00:05,990 -are familiar with what a spreadsheet is and have used them before. - -3 -00:00:05,990 --> 00:00:08,119 -So now I'm going to ask the same question, which is I'd - -4 -00:00:08,119 --> 00:00:10,480 -like you to identify three possible - -5 -00:00:10,480 --> 00:00:13,190 -independently testable features for a spreadsheet. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/7 - Overview Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/7 - Overview Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 88e7cd5..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/7 - Overview Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,190 --> 00:00:03,030 -In this case there's not really a right answer because there's - -2 -00:00:03,030 --> 00:00:05,750 -many, many features that you could identify in a piece of - -3 -00:00:05,750 --> 00:00:08,655 -software as complex as a, a spreadsheet. So I'm just going - -4 -00:00:08,655 --> 00:00:11,900 -to give you three examples. So one could be the cell merging - -5 -00:00:11,900 --> 00:00:14,950 -operation. So the operation in which we merge two cells in - -6 -00:00:14,950 --> 00:00:18,550 -the spreadsheet. Another example could be chart creation, so I might want - -7 -00:00:18,550 --> 00:00:21,370 -to test the feature that allows you to create charts in - -8 -00:00:21,370 --> 00:00:23,310 -your spreadsheets. Yet another example could - -9 -00:00:23,310 --> 00:00:25,540 -be the test of statistical functions, - -10 -00:00:25,540 --> 00:00:29,350 -so the function that allows you to do various statistical calculations on - -11 -00:00:29,350 --> 00:00:32,650 -the numbers in your cells. And as I said there's many, many - -12 -00:00:32,650 --> 00:00:35,900 -more example that we could use. But the key thing I want - -13 -00:00:35,900 --> 00:00:38,770 -to convey here is the fact that there is no way you - -14 -00:00:38,770 --> 00:00:42,020 -can look at a spreadsheet with all the functionality that it provides - -15 -00:00:42,020 --> 00:00:44,160 -and just go and test it. The first step, what you need - -16 -00:00:44,160 --> 00:00:47,430 -to do first, is to identify which ones are the pieces of - -17 -00:00:47,430 --> 00:00:50,620 -functionality that I can test individually. So that's why this is the - -18 -00:00:50,620 --> 00:00:52,310 -first step in black-box testing. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/8 - Test Data Selection - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/8 - Test Data Selection - lang_en_vs4.srt deleted file mode 100644 index 51aaffe..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/8 - Test Data Selection - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,230 --> 00:00:03,550 -Once we have identified Independently Testable Features, the next step is to - -2 -00:00:03,550 --> 00:00:07,720 -identify the Relevant Inputs for each one of these features. And there are - -3 -00:00:07,720 --> 00:00:10,420 -many ways to do that. So, what we're going to do, instead of - -4 -00:00:10,420 --> 00:00:13,770 -looking at them all, is that we're just going to focus on two different - -5 -00:00:13,770 --> 00:00:16,239 -ways of doing it. And they are fairly general ways. So, they - -6 -00:00:16,239 --> 00:00:19,910 -are applicable to a number of situations. And in addition, what I will - -7 -00:00:19,910 --> 00:00:22,190 -do, I will point you to other sources in which you can - -8 -00:00:22,190 --> 00:00:25,530 -look at different ways of doing this in the class notes. The problem - -9 -00:00:25,530 --> 00:00:28,390 -of identifying relevant inputs for some Software or some feature - -10 -00:00:28,390 --> 00:00:31,930 -of it is called Test Data Selection and can be expressed - -11 -00:00:31,930 --> 00:00:35,040 -as followed. Let's consider our software as usual we have - -12 -00:00:35,040 --> 00:00:38,190 -our Input Domain, which is the set of inputs for all - -13 -00:00:38,190 --> 00:00:40,980 -the software. And again as usual, we have our Output - -14 -00:00:40,980 --> 00:00:44,050 -Domain, which is the set of corresponding outlets for these inputs. - -15 -00:00:44,050 --> 00:00:47,450 -So the question here is, how can we select a meaningful - -16 -00:00:47,450 --> 00:00:50,920 -set of inputs in my domain? And of course corresponding outputs - -17 -00:00:50,920 --> 00:00:53,240 -because we know that test cases are an input, plus an - -18 -00:00:53,240 --> 00:00:56,900 -expected output. So how can we select interesting inputs for our - -19 -00:00:56,900 --> 00:01:00,040 -software? So a set of inputs that, after we run them - -20 -00:01:00,040 --> 00:01:02,950 -on the software, if the software behaves correctly, we'll have enough - -21 -00:01:02,950 --> 00:01:07,060 -confidence that the software is correctly implemented. So one possible idea - -22 -00:01:07,060 --> 00:01:09,830 -is, hey, why don't we just test them all? We just - -23 -00:01:09,830 --> 00:01:12,800 -do exhaustive testing. We do all the inputs, nowadays we have - -24 -00:01:12,800 --> 00:01:16,290 -powerful machines, we have a lot of computational power in the cloud. - -25 -00:01:16,290 --> 00:01:17,890 -Why not just doing it? So to answer that - -26 -00:01:17,890 --> 00:01:20,480 -question, what I'm going to do? I'm going to use another quiz. diff --git a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/9 - Test Data Selection Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/9 - Test Data Selection Quiz - lang_en_vs4.srt deleted file mode 100644 index 9ffead6..0000000 --- a/usth/ICT2.7/P4L2 Black-Box Testing Subtitles/9 - Test Data Selection Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,200 --> 00:00:02,180 -So I'm going to ask you something. Which is if - -2 -00:00:02,180 --> 00:00:04,750 -we consider again our function print sum, the one - -3 -00:00:04,750 --> 00:00:06,760 -that takes two integers and prints the sum. How - -4 -00:00:06,760 --> 00:00:09,300 -long would it take to exhaustively test this function? And - -5 -00:00:09,300 --> 00:00:10,950 -this is a very simple one. There's just two - -6 -00:00:10,950 --> 00:00:13,240 -inputs, right? So we can just enumerate them all. - -7 -00:00:13,240 --> 00:00:15,950 -And put them throw them at the computer form, - -8 -00:00:15,950 --> 00:00:18,440 -and wait for the results. How long would that take? diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 64f1576..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,570 -In the previous lesson we discussed black box - -2 -00:00:02,570 --> 00:00:05,120 -testing, which is the testing performed based on a - -3 -00:00:05,120 --> 00:00:08,760 -description of the software, but without considering any of - -4 -00:00:08,760 --> 00:00:12,440 -software's internal details. In this lesson, we will discuss - -5 -00:00:12,440 --> 00:00:15,490 -the counterpart of black box testing, which is called - -6 -00:00:15,490 --> 00:00:20,590 -unsurprisingly white box testing or structural testing. And just - -7 -00:00:20,590 --> 00:00:22,780 -like we did for black box testing, we will - -8 -00:00:22,780 --> 00:00:25,740 -cover the main characteristics of white box testing and - -9 -00:00:25,740 --> 00:00:30,620 -this casts the most commonly used white box testing techniques. We - -10 -00:00:30,620 --> 00:00:33,650 -will conclude the lesson with the discussion of the main strengths and - -11 -00:00:33,650 --> 00:00:37,540 -limitations of white box testing. So that you will know, when to - -12 -00:00:37,540 --> 00:00:40,950 -use it? How to use it? And what to expect from it? diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/10 - Statement Coverage Quiz Solution - lang_en_vs7.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/10 - Statement Coverage Quiz Solution - lang_en_vs7.srt deleted file mode 100644 index c18d579..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/10 - Statement Coverage Quiz Solution - lang_en_vs7.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,210 --> 00:00:01,900 -To get the answer to this question, I'm - -2 -00:00:01,900 --> 00:00:03,540 -going to ask you to be a little patient, and - -3 -00:00:03,540 --> 00:00:05,120 -to wait until the end of the lesson. - -4 -00:00:05,120 --> 00:00:06,792 -Because there are a couple of more topics that - -5 -00:00:06,792 --> 00:00:08,244 -I want to cover, before I actually get in - -6 -00:00:08,244 --> 00:00:10,210 -to this. Nevertheless, I wanted to ask you right - -7 -00:00:10,210 --> 00:00:11,880 -away, because I wanted you to think about - -8 -00:00:11,880 --> 00:00:13,560 -this, before you see the rest of the lesson. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/11 - Control Flow Graphs - lang_en_vs5.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/11 - Control Flow Graphs - lang_en_vs5.srt deleted file mode 100644 index 83d5860..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/11 - Control Flow Graphs - lang_en_vs5.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,320 --> 00:00:03,450 -Let's look at the code for PrintSum in a slightly different way - -2 -00:00:03,450 --> 00:00:06,140 -by making something explicit. If we go through the code, we can - -3 -00:00:06,140 --> 00:00:08,578 -see that the, the code does something in that case, if the - -4 -00:00:08,578 --> 00:00:11,720 -result greater then zero, does something else if the result is not - -5 -00:00:11,720 --> 00:00:14,890 -greater than zero but is less than zero, and otherwise in the - -6 -00:00:14,890 --> 00:00:17,800 -case in which neither of these two conditions is true. Nothing really - -7 -00:00:17,800 --> 00:00:19,090 -happens. So we're going to make that - -8 -00:00:19,090 --> 00:00:21,290 -explicit, we're going to say here, otherwise - -9 -00:00:21,290 --> 00:00:25,430 -do nothing, which is exactly our problem, the code does nothing, in this - -10 -00:00:25,430 --> 00:00:28,380 -case where it should do something. So now, let's look again in - -11 -00:00:28,380 --> 00:00:31,470 -our test cases, let's consider the first one, and I'm going to go a - -12 -00:00:31,470 --> 00:00:34,410 -little faster in this case, because we already saw what happens If - -13 -00:00:34,410 --> 00:00:37,890 -we execute the first test case, we get to this point, we execute - -14 -00:00:37,890 --> 00:00:40,710 -this statement, and then we just jump to the end, as we - -15 -00:00:40,710 --> 00:00:44,020 -saw. Now we, if we execute the second test case, we do the - -16 -00:00:44,020 --> 00:00:46,740 -same, we get to the else statement, the condition for the if is - -17 -00:00:46,740 --> 00:00:50,770 -true, and therefore we execute this statement. And we never reached this point - -18 -00:00:50,770 --> 00:00:53,320 -for either of the test cases. So how can we express - -19 -00:00:53,320 --> 00:00:56,470 -this? In order to do that, I'm going to introduce a very useful - -20 -00:00:56,470 --> 00:01:00,450 -concept. The concept of control flow graphs. The control flow graphs - -21 -00:01:00,450 --> 00:01:03,310 -is just a representation for the code that is very convenient when - -22 -00:01:03,310 --> 00:01:06,030 -we run our reason about the code and its structure. And - -23 -00:01:06,030 --> 00:01:09,910 -it's a fairly simple one that represents statement with notes and the - -24 -00:01:09,910 --> 00:01:12,900 -flow of control within the code with edges. So here's an - -25 -00:01:12,900 --> 00:01:16,180 -example of control flow graph for this code. There is the entry - -26 -00:01:16,180 --> 00:01:19,790 -point of the code right here, then our statement in which we - -27 -00:01:19,790 --> 00:01:23,320 -assign the result of A plus B to variable result. Our if - -28 -00:01:23,320 --> 00:01:25,720 -statement and as you can see the if statement it's got two - -29 -00:01:25,720 --> 00:01:28,930 -branches coming out of it, because based on the outcome of this - -30 -00:01:28,930 --> 00:01:32,376 -predicate we will go one way or the other. In fact normally - -31 -00:01:32,376 --> 00:01:36,000 -what we do, we will label this edges accordingly. So for example, - -32 -00:01:36,000 --> 00:01:38,580 -here we will say that this is the label to be executed - -33 -00:01:38,580 --> 00:01:41,470 -when the predicate is true. And this is the label that is executed - -34 -00:01:41,470 --> 00:01:44,120 -when the predicate is false. Now, at this point, similar - -35 -00:01:44,120 --> 00:01:47,080 -thing, statement five which corresponds with this one, we have another - -36 -00:01:47,080 --> 00:01:49,650 -if statement and if that statement is true, then we get - -37 -00:01:49,650 --> 00:01:51,830 -to this point and if it's false, we get to this - -38 -00:01:51,830 --> 00:01:54,370 -point. So as you can see, this graph represents my - -39 -00:01:54,370 --> 00:01:57,040 -code, in a much more intuitive way, because I can see - -40 -00:01:57,040 --> 00:02:00,650 -right away where the control flows, while I execute the code. - -41 -00:02:00,650 --> 00:02:01,730 -So we're going to use this - -42 -00:02:01,730 --> 00:02:04,430 -representation to introduce further coverage criteria. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/12 - Branch Coverage - lang_en_vs3.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/12 - Branch Coverage - lang_en_vs3.srt deleted file mode 100644 index a1dedad..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/12 - Branch Coverage - lang_en_vs3.srt +++ /dev/null @@ -1,267 +0,0 @@ -1 -00:00:00,400 --> 00:00:03,780 -So now that we know what the CFG is, let's see how we can get into a count, - -2 -00:00:03,780 --> 00:00:07,860 -that else part, that is missing in our example code by introducing a new - -3 -00:00:07,860 --> 00:00:10,480 -kind of coverage. Branch coverage. As usual, - -4 -00:00:10,480 --> 00:00:13,550 -I'm going to describe branch coverage in terms of test requirements and - -5 -00:00:13,550 --> 00:00:17,100 -coverage measure. So starting from test requirements. The test requirement for - -6 -00:00:17,100 --> 00:00:21,080 -branch coverage are the branches in the program. In other words, - -7 -00:00:21,080 --> 00:00:25,240 -the goal of branch coverage is to execute all of the branches in the program. - -8 -00:00:25,240 --> 00:00:28,370 -The coverage measure is defined accordingly as the number of branches - -9 -00:00:28,370 --> 00:00:33,150 -executed by my test cases over the total number of branches in the program. And - -10 -00:00:33,150 --> 00:00:37,020 -let me remind you that branches are the outgoing edges from a decision point. - -11 -00:00:37,020 --> 00:00:40,410 -Therefore, an if statement, a switch statement, a while statement. - -12 -00:00:40,410 --> 00:00:44,400 -Any note in the c of g that has got more than one outgoing edge. - -13 -00:00:44,400 --> 00:00:48,170 -Those edges are called branches. So let's look at that using our example. So - -14 -00:00:48,170 --> 00:00:51,690 -now we're looking back at our printSum example. And in addition to the code, - -15 -00:00:51,690 --> 00:00:54,440 -I also want to represent the CFG for the program. So - -16 -00:00:54,440 --> 00:00:58,590 -let's start by looking at how many branches we have in our code. Which means how - -17 -00:00:58,590 --> 00:01:02,070 -many test requirements we have. And in this case there are two decision points. - -18 -00:01:02,070 --> 00:01:04,940 -The first one that corresponds to the first if, and the second one that - -19 -00:01:04,940 --> 00:01:10,100 -corresponds to the second if. So we have one, two, three, and four branches. So - -20 -00:01:10,100 --> 00:01:13,880 -now, let's bring back our current set of test cases. We had two test cases. - -21 -00:01:13,880 --> 00:01:17,440 -The one's that, with which we achieved a 100% statement coverage. And - -22 -00:01:17,440 --> 00:01:21,140 -let's see what happens in terms of branch coverage when we run these test cases. - -23 -00:01:21,140 --> 00:01:24,110 -I start from the first one, when we execute it, we follow the code, - -24 -00:01:24,110 --> 00:01:27,890 -we get to this decision point because the predicate in the if statement is true. - -25 -00:01:27,890 --> 00:01:30,770 -We follow the true branch, therefore we get here and then, - -26 -00:01:30,770 --> 00:01:34,970 -we exit from the program. So, in this case, we covered one of the branches, - -27 -00:01:34,970 --> 00:01:40,710 -which means that we got to 25% coverage. Now when we run the second test case, - -28 -00:01:40,710 --> 00:01:44,160 -again we follow this path. We get to this, the first if and - -29 -00:01:44,160 --> 00:01:47,730 -in this case the predicate of the if is false. Therefore, we go this way. - -30 -00:01:47,730 --> 00:01:51,160 -We reach the second predicate, the second if. The result is true, so - -31 -00:01:51,160 --> 00:01:55,490 -we follow the true branch and therefore, we cover these additional two branches. - -32 -00:01:55,490 --> 00:01:59,900 -So at this point, we are at 75% branch coverage. So what - -33 -00:01:59,900 --> 00:02:04,070 -happens is that we're missing this branch. For now, the inputs that we consider, - -34 -00:02:04,070 --> 00:02:07,740 -this branch is executed. Therefore, we need to add an additional test case. And - -35 -00:02:07,740 --> 00:02:11,600 -that this case that we need, is one for which this predicate is false and this - -36 -00:02:11,600 --> 00:02:15,680 -predicate is false. The simplest possibility in this case is the test case for - -37 -00:02:15,680 --> 00:02:20,170 -which A is equal to 0 and B is equal to 0. If we execute this test case, - -38 -00:02:20,170 --> 00:02:24,250 -our execution again followed this path, follows the fourth branch here. - -39 -00:02:24,250 --> 00:02:28,090 -And in this case, because result is not less than zero either, will follow - -40 -00:02:28,090 --> 00:02:33,090 -this branch as well. And therefore, we will reach our 100% branch coverage. And - -41 -00:02:33,090 --> 00:02:35,820 -this covered the problem. Something that I would like to clarify before we - -42 -00:02:35,820 --> 00:02:40,920 -move to the next topic, is that 100% coverage does not provide any guarantee of - -43 -00:02:40,920 --> 00:02:44,530 -finding the problems in the code. All we saw so far is the fact that by - -44 -00:02:44,530 --> 00:02:48,580 -testing more thoroughly we have more chances of finding a problem in the code. - -45 -00:02:48,580 --> 00:02:51,680 -But it doesn't matter which kind of coverage we utilize, and how much - -46 -00:02:51,680 --> 00:02:55,440 -coverage we achieve. There's always a chance that we might miss something. And - -47 -00:02:55,440 --> 00:02:59,760 -I will get back to this later on in the lesson. I just mentioned the fact that - -48 -00:02:59,760 --> 00:03:03,910 -we tested more fully when we went from statement coverage to branch coverage. - -49 -00:03:03,910 --> 00:03:06,900 -What does that mean exactly? To explain that, I'm going to introduce the concept - -50 -00:03:06,900 --> 00:03:11,420 -of test criteria subsumption. One test criteria subsumes another criteria when - -51 -00:03:11,420 --> 00:03:16,760 -all the tests widths that satisfy that criteria will also satisfy the other one. - -52 -00:03:16,760 --> 00:03:18,740 -So let me show you that with statement and - -53 -00:03:18,740 --> 00:03:23,220 -branch coverage. If we identify a test width that achieves 100% branch coverage, - -54 -00:03:23,220 --> 00:03:27,780 -the same test width will also achieve, necessarily, 100% statement coverage. - -55 -00:03:27,780 --> 00:03:31,290 -That's what happened for our example, and also what happens in general, - -56 -00:03:31,290 --> 00:03:35,660 -because branch coverage is a stronger criteria than statement coverage. - -57 -00:03:35,660 --> 00:03:39,670 -There is no way to cover all the branches without covering all the statements. - -58 -00:03:39,670 --> 00:03:43,480 -It is not true that any test results satisfies statement coverage will also - -59 -00:03:43,480 --> 00:03:47,040 -satisfy branch coverage. And, in fact, we just saw a counter example. - -60 -00:03:47,040 --> 00:03:50,569 -When we look at the printSum code. We had a test where there was achieving 100% - -61 -00:03:50,569 --> 00:03:53,910 -statement coverage and was not achieving 100% branch coverage. Therefore, - -62 -00:03:53,910 --> 00:03:58,301 -in this case we have a substantial relation in this direction. Branch coverage, - -63 -00:03:58,301 --> 00:04:02,860 -subsumes statement coverage. What it also means is that normally, or in general, - -64 -00:04:02,860 --> 00:04:06,910 -it is more expensive to achieve branch coverage than achieve statement coverage, - -65 -00:04:06,910 --> 00:04:09,490 -because achieving branch coverage requires the generation of - -66 -00:04:09,490 --> 00:04:13,770 -a larger number of test cases. So what this relation means is that - -67 -00:04:13,770 --> 00:04:17,779 -branch coverage is stronger than statement coverage but also more expensive. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/13 - Condition Coverage - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/13 - Condition Coverage - lang_en_vs4.srt deleted file mode 100644 index bba72fc..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/13 - Condition Coverage - lang_en_vs4.srt +++ /dev/null @@ -1,191 +0,0 @@ -1 -00:00:00,470 --> 00:00:03,046 -What I'm going to do next is to introduce a few additional - -2 -00:00:03,046 --> 00:00:06,350 -coverage criteria using a slightly more complex example, but still a - -3 -00:00:06,350 --> 00:00:09,370 -pretty simple one. What I'm showing here is a program that - -4 -00:00:09,370 --> 00:00:12,145 -reads two real numbers, x and y. And then, if x - -5 -00:00:12,145 --> 00:00:15,148 -is equal to 0 or y is greater than 0, it - -6 -00:00:15,148 --> 00:00:19,360 -computes y as y divided by x. Otherwise, it computes x - -7 -00:00:19,360 --> 00:00:22,110 -as y plus 2, then it writes the value of x, - -8 -00:00:22,110 --> 00:00:25,730 -the value of y, and it terminates. Let's also introduce a CFG - -9 -00:00:25,730 --> 00:00:29,160 -for the program. As you can see, the CFG represents the statements - -10 -00:00:29,160 --> 00:00:31,900 -in the code and their control flow. And in this case, I made - -11 -00:00:31,900 --> 00:00:35,800 -explicit over the branches what are the conditions under which those branches - -12 -00:00:35,800 --> 00:00:38,530 -are taken to make it simpler to look at the example. Let's assume - -13 -00:00:38,530 --> 00:00:41,280 -that we have two tests for this code that are shown here. - -14 -00:00:41,280 --> 00:00:44,286 -For the first one, the inputs are 5 and 5. For the second - -15 -00:00:44,286 --> 00:00:47,610 -one, 5 and minus 5. If we consider branch coverage for this code - -16 -00:00:47,610 --> 00:00:50,990 -and we consider the two test cases, for the first one this condition - -17 -00:00:50,990 --> 00:00:53,440 -is true. Because x is not equal to 0 but y - -18 -00:00:53,440 --> 00:00:56,660 -is greater than 0. And therefore, we will follow this tree branch. - -19 -00:00:56,660 --> 00:00:59,640 -For the second one, the condition is false. Because x is not - -20 -00:00:59,640 --> 00:01:03,200 -equal to 0 and y is not greater than 0. Therefore, the - -21 -00:01:03,200 --> 00:01:05,990 -negation of it is true and we will follow this branch. In - -22 -00:01:05,990 --> 00:01:09,530 -other words, these two test cases achieve 100% branch coverage on this - -23 -00:01:09,530 --> 00:01:12,120 -code. If we look at the code though, we can see that - -24 -00:01:12,120 --> 00:01:15,879 -there is the possibility of making this code fail. Consider this statement, - -25 -00:01:15,879 --> 00:01:18,147 -if x is equal to 0, we could have a division - -26 -00:01:18,147 --> 00:01:21,710 -by 0. However, these two test cases, despite the fact that - -27 -00:01:21,710 --> 00:01:25,008 -they achieved 100% branch coverage, will not rebuild this problem. So - -28 -00:01:25,008 --> 00:01:27,564 -how can we be more thorough? I'll let you think about it - -29 -00:01:27,564 --> 00:01:29,964 -for a second, so think about how can we test more - -30 -00:01:29,964 --> 00:01:33,260 -thoroughly, in a more complete way, this code. So, in a way - -31 -00:01:33,260 --> 00:01:37,220 -that goes beyond branch coverage. And the answer is that we - -32 -00:01:37,220 --> 00:01:41,250 -can make each condition true and false. Instead of just considering the - -33 -00:01:41,250 --> 00:01:44,570 -whole predicate here. And that's exactly what is required by - -34 -00:01:44,570 --> 00:01:47,480 -the next criteria that we're going to consider which is condition - -35 -00:01:47,480 --> 00:01:49,880 -coverage. We're going to define it as usual in terms of - -36 -00:01:49,880 --> 00:01:53,070 -test requirements and coverage measure. In this case, the test - -37 -00:01:53,070 --> 00:01:57,540 -requirements for condition coverage are the individual conditions in the - -38 -00:01:57,540 --> 00:02:00,510 -program. So we want each condition in the program to - -39 -00:02:00,510 --> 00:02:03,900 -be both true and false first time execution. So the - -40 -00:02:03,900 --> 00:02:06,420 -way in which we can measure that is by measuring the - -41 -00:02:06,420 --> 00:02:09,150 -number of conditions that were both true and false - -42 -00:02:09,150 --> 00:02:11,580 -when we executed our tests over the total number - -43 -00:02:11,580 --> 00:02:14,180 -of conditions. And that gives us the percentage of - -44 -00:02:14,180 --> 00:02:17,270 -coverage that we achieved for condition coverage. Again, if you - -45 -00:02:17,270 --> 00:02:18,638 -want to look at this criteria in the form - -46 -00:02:18,638 --> 00:02:21,245 -of a question. The question would be, has each boolean - -47 -00:02:21,245 --> 00:02:25,480 -sub-expression, which means every condition in every predicate, evaluated - -48 -00:02:25,480 --> 00:02:28,010 -both to true and false when we run our tests. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/14 - Subsumption Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/14 - Subsumption Quiz - lang_en_vs4.srt deleted file mode 100644 index de78093..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/14 - Subsumption Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,220 -So now that we introduced an additional criterion, - -2 -00:00:02,220 --> 00:00:04,290 -let's have a quiz to see whether everybody - -3 -00:00:04,290 --> 00:00:06,410 -understood the concept of subsumption. We know that - -4 -00:00:06,410 --> 00:00:09,490 -branch coverage subsumes statement coverage, but what about condition - -5 -00:00:09,490 --> 00:00:12,230 -coverage? Does it subsume branch coverage? Is it - -6 -00:00:12,230 --> 00:00:13,720 -the case that all of the test which - -7 -00:00:13,720 --> 00:00:16,980 -satisfy condition coverage will also satisfy branch coverage? - -8 -00:00:16,980 --> 00:00:19,160 -Think about it, and answer either yes or no. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/15 - Subsumption Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/15 - Subsumption Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 87140c9..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/15 - Subsumption Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,7 +0,0 @@ -1 -00:00:00,170 --> 00:00:02,475 -In this case, the answer is no, and I'm - -2 -00:00:02,475 --> 00:00:04,650 -going to show you an example of this in a minute. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/16 - Branch and Condition Coverage - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/16 - Branch and Condition Coverage - lang_en_vs4.srt deleted file mode 100644 index 143a534..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/16 - Branch and Condition Coverage - lang_en_vs4.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,052 --> 00:00:03,407 -Let's go back to our test criteria subsumption representation, where - -2 -00:00:03,407 --> 00:00:06,770 -we already had branch coverage and statement coverage. In this case, - -3 -00:00:06,770 --> 00:00:09,350 -if we want to add condition coverage to this page, we - -4 -00:00:09,350 --> 00:00:12,050 -have to put it here on this side, with no relationship - -5 -00:00:12,050 --> 00:00:15,830 -of subsumption with either branch coverage or statement coverage, which - -6 -00:00:15,830 --> 00:00:19,270 -means that the criteria are not comparable. So now let's consider - -7 -00:00:19,270 --> 00:00:22,108 -again our last example, and let's use a different test - -8 -00:00:22,108 --> 00:00:25,060 -with this time. We still have two tests, but the first - -9 -00:00:25,060 --> 00:00:27,575 -one has x is equal to 0 and y is equal to minus - -10 -00:00:27,575 --> 00:00:30,370 -5. And the second one, x is equal to 5 and y is - -11 -00:00:30,370 --> 00:00:33,350 -equal to 5 as well. Let's see what happens in terms of condition - -12 -00:00:33,350 --> 00:00:36,740 -coverage, when we run these tests. If we look at the first condition, x - -13 -00:00:36,740 --> 00:00:39,820 -is equal to 0. It is both true, for the first test case, - -14 -00:00:39,820 --> 00:00:43,240 -and false for the second one. As for the second condition, y greater - -15 -00:00:43,240 --> 00:00:45,800 -than 0, it is false for the first test case and true for - -16 -00:00:45,800 --> 00:00:47,770 -the second one. Therefore we've achieved a - -17 -00:00:47,770 --> 00:00:50,400 -100% condition coverage with these two tests. - -18 -00:00:50,400 --> 00:00:54,020 -But what about branch coverage? If we consider the whole predicate, - -19 -00:00:54,020 --> 00:00:56,620 -instead of just the individual conditions, let's see what happens for the - -20 -00:00:56,620 --> 00:00:59,090 -two test cases. If we look at the first one, because - -21 -00:00:59,090 --> 00:01:02,200 -x is equal to 0, the overall predicate is true. As for - -22 -00:01:02,200 --> 00:01:05,750 -the second one, because the second condition is true, the overall - -23 -00:01:05,750 --> 00:01:09,110 -predicate is true. In other words, despite the fact that we're exercising - -24 -00:01:09,110 --> 00:01:12,520 -all the possible values for the two conditions, the overall predicate is - -25 -00:01:12,520 --> 00:01:16,540 -always true. And therefore, we're covering only one of the two branches. - -26 -00:01:16,540 --> 00:01:19,591 -So our coverage will be 50%. This is the reason - -27 -00:01:19,591 --> 00:01:22,231 -why normally the two criteria that we just saw, decision - -28 -00:01:22,231 --> 00:01:26,205 -coverage, and condition coverage are considered together. And the resulting - -29 -00:01:26,205 --> 00:01:30,320 -criterion is called branch and condition coverage, or also decision - -30 -00:01:30,320 --> 00:01:33,030 -and condition coverage. At this point the test requirements and - -31 -00:01:33,030 --> 00:01:35,590 -the coverage measure should be pretty straight forward, because they're - -32 -00:01:35,590 --> 00:01:38,120 -just considering the two criteria together. As far as the - -33 -00:01:38,120 --> 00:01:39,960 -requirements are concerned, they include - -34 -00:01:39,960 --> 00:01:41,880 -all the branches and individual conditions - -35 -00:01:41,880 --> 00:01:44,580 -in the program. Where as the coverage measure is computed - -36 -00:01:44,580 --> 00:01:49,180 -considering both coverage measures, both branch coverage and condition coverage. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/17 - Subsumption Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/17 - Subsumption Quiz - lang_en_vs4.srt deleted file mode 100644 index 9d99495..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/17 - Subsumption Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,810 -Let's have another quick quiz about Subsumption. If we - -2 -00:00:02,810 --> 00:00:06,720 -consider Branch and Condition Coverage, does it subsume Branch Coverage, - -3 -00:00:06,720 --> 00:00:09,512 -and therefore Statement Coverage? Or in other words, does branch - -4 -00:00:09,512 --> 00:00:12,750 -and condition coverage imply branch coverage? Answer yes, or no. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/18 - Subsumption Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/18 - Subsumption Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index c836f04..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/18 - Subsumption Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,19 +0,0 @@ -1 -00:00:00,150 --> 00:00:01,880 -In this case it should be clear that the - -2 -00:00:01,880 --> 00:00:05,640 -answer is yes, because branch and condition coverage actually includes - -3 -00:00:05,640 --> 00:00:08,580 -branch coverage. Therefore, by definition, any test rate that - -4 -00:00:08,580 --> 00:00:10,505 -satisfies branch and condition coverage - -5 -00:00:10,505 --> 00:00:12,664 -will necessarily satisfy branch coverage. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/19 - Test Criteria Subsumption - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/19 - Test Criteria Subsumption - lang_en_vs4.srt deleted file mode 100644 index f40ccdf..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/19 - Test Criteria Subsumption - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,280 --> 00:00:03,400 -So we can now update our test criteria subsumption. We start - -2 -00:00:03,400 --> 00:00:06,700 -from this situation in which there are no relationship between condition - -3 -00:00:06,700 --> 00:00:09,650 -coverage, branch coverage and statement coverage. And when we add branch - -4 -00:00:09,650 --> 00:00:12,160 -and condition coverage, we can mark the fact that branch and - -5 -00:00:12,160 --> 00:00:14,470 -condition coverage subsumes branch coverage - -6 -00:00:14,470 --> 00:00:16,370 -and also subsumes condition coverage, for - -7 -00:00:16,370 --> 00:00:19,660 -the same reason. Therefore, this is a stronger criterion than both - -8 -00:00:19,660 --> 00:00:23,100 -branch coverage and condition coverage, and of course indirectly also soft - -9 -00:00:23,100 --> 00:00:25,330 -statement coverage. So once more, to make sure we are all - -10 -00:00:25,330 --> 00:00:29,255 -on the same page, if I develop a test rate that satisfies branch and condition - -11 -00:00:29,255 --> 00:00:31,380 -coverage, the same test will satisfy also - -12 -00:00:31,380 --> 00:00:35,210 -branch coverage, statement coverage and condition coverage, necessarily. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt deleted file mode 100644 index c032d40..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/2 - Overview - lang_en_vs4.srt +++ /dev/null @@ -1,167 +0,0 @@ -1 -00:00:00,420 --> 00:00:03,860 -In the last lesson, we talked about black-box testing or functional testing, - -2 -00:00:03,860 --> 00:00:06,110 -which is the kind of testing that you perform when you just - -3 -00:00:06,110 --> 00:00:09,860 -look at the description of the software. Today we're going to cover white-box - -4 -00:00:09,860 --> 00:00:12,490 -testing, which is the kind of testing that we perform when we - -5 -00:00:12,490 --> 00:00:15,800 -open up the box. We look inside the program, and we actually - -6 -00:00:15,800 --> 00:00:19,490 -test it based on its code. And there is one basic assumption - -7 -00:00:19,490 --> 00:00:22,320 -behind the idea of white-box testing, which is a very intuitive one, - -8 -00:00:22,320 --> 00:00:26,080 -and the assumption is that executing the faulty statement is a necessary - -9 -00:00:26,080 --> 00:00:29,380 -condition for revealing a fault. In other words, if there is - -10 -00:00:29,380 --> 00:00:31,690 -a bug in the program there is no way were going to be - -11 -00:00:31,690 --> 00:00:34,490 -able to find this bug or this fault, if we don't execute - -12 -00:00:34,490 --> 00:00:37,110 -the statement that contains it. Which makes a lot of sense. As - -13 -00:00:37,110 --> 00:00:40,240 -we did for black-box testing, we're going to start by summarizing what - -14 -00:00:40,240 --> 00:00:43,650 -are the main advantages of white-box testing. The main advantage is that - -15 -00:00:43,650 --> 00:00:48,050 -it's based on the code, and as such, the quality of white-box - -16 -00:00:48,050 --> 00:00:51,760 -testing can be measured objectively. And what I mean here by objectively - -17 -00:00:51,760 --> 00:00:54,390 -is that if you think about black-box testing In many - -18 -00:00:54,390 --> 00:00:57,630 -cases, there were subjective decisions, there were had to be made - -19 -00:00:57,630 --> 00:01:00,830 -in order to define tests in a black-box fashion. In the - -20 -00:01:00,830 --> 00:01:03,990 -case of white-box testing, because everything is based on the quota, - -21 -00:01:03,990 --> 00:01:07,965 -we don't have to make such subjective decisions. And similarly, because - -22 -00:01:07,965 --> 00:01:10,680 -white-box testing is based on the code, it can be measured - -23 -00:01:10,680 --> 00:01:14,250 -automatically. So we can build tools and actually there are tools, - -24 -00:01:14,250 --> 00:01:16,860 -and there's plenty of tools, that can be measured, the level - -25 -00:01:16,860 --> 00:01:19,670 -of white-box testing can be achieved in a fully automated way. - -26 -00:01:19,670 --> 00:01:21,620 -And we're going to see some of them in the course of the - -27 -00:01:21,620 --> 00:01:24,600 -class. Another advantage of white-box testing is that it can be - -28 -00:01:24,600 --> 00:01:27,700 -used to compare test suites. So if you have two alternative sets - -29 -00:01:27,700 --> 00:01:30,270 -of tests that you can use to assess the quality of - -30 -00:01:30,270 --> 00:01:34,360 -your software, white-box testing techniques can tell you which one of these - -31 -00:01:34,360 --> 00:01:37,580 -two test suites is likely to be more effective in testing - -32 -00:01:37,580 --> 00:01:42,350 -your code. And finally, white-box testing allows for covering the coded behavior - -33 -00:01:42,350 --> 00:01:44,470 -of the software. What that means is that if there is - -34 -00:01:44,470 --> 00:01:47,680 -some mistake in the code and is not obvious by looking at - -35 -00:01:47,680 --> 00:01:50,300 -the specification of the code, white box testing might be able - -36 -00:01:50,300 --> 00:01:53,330 -to catch it, because it tries to exercise the code. There's many - -37 -00:01:53,330 --> 00:01:56,430 -different kinds of white box testing, there are control flow based - -38 -00:01:56,430 --> 00:02:00,550 -techniques, data flow based techniques, and fault based techniques. And for each - -39 -00:02:00,550 --> 00:02:04,030 -one of these family of techniques there are many variations. So - -40 -00:02:04,030 --> 00:02:07,450 -this field is very, very broad. In this lesson we will talk - -41 -00:02:07,450 --> 00:02:09,110 -about white-box testing by focusing - -42 -00:02:09,110 --> 00:02:11,910 -mainly on control-flow based testing techniques. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/20 - B&C Coverage Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/20 - B&C Coverage Quiz - lang_en_vs4.srt deleted file mode 100644 index 6f5c9a1..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/20 - B&C Coverage Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,35 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,969 -So let's have another quiz using the example that we just - -2 -00:00:02,969 --> 00:00:06,660 -used. This one is about achieving 100% branch and condition coverage. So - -3 -00:00:06,660 --> 00:00:08,850 -let me bring back the two tests cases that we just saw, - -4 -00:00:08,850 --> 00:00:11,420 -and as we saw a few minutes ago, these tests cases do - -5 -00:00:11,420 --> 00:00:15,540 -not achieve 100% branch and condition coverage despite the fact that they - -6 -00:00:15,540 --> 00:00:19,430 -achieve 100% condition coverage. So both conditions are both true and false, - -7 -00:00:19,430 --> 00:00:21,820 -for these test cases. So what I want you to do is - -8 -00:00:21,820 --> 00:00:25,630 -to add a test case, to achieve 100% branch and condition coverages. - -9 -00:00:25,630 --> 00:00:29,740 -So specify the test case by writing here the value for x, and the value for y. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/21 - B&C Coverage Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/21 - B&C Coverage Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 2b6fe4b..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/21 - B&C Coverage Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,190 --> 00:00:03,010 -Obviously there are many possible tests that we can use to - -2 -00:00:03,010 --> 00:00:05,910 -reach 100% branch and condition coverage. So I'm just going to show a - -3 -00:00:05,910 --> 00:00:08,740 -possible one, which is x equal to 3 and y is - -4 -00:00:08,740 --> 00:00:11,410 -equal to negative 2. If we specify this as case, you can - -5 -00:00:11,410 --> 00:00:14,900 -see that the overall condition is false, because neither x is - -6 -00:00:14,900 --> 00:00:17,990 -equal to 0 nor y is greater than 0. Therefore we will - -7 -00:00:17,990 --> 00:00:22,420 -follow the false, false branch, and achieve 100% branch and condition coverage - -8 -00:00:22,420 --> 00:00:25,400 -for this code. And we might require to be even more thorough, - -9 -00:00:25,400 --> 00:00:28,690 -that all the combinations of our conditions inside each - -10 -00:00:28,690 --> 00:00:31,790 -decision, inside each predicate, are tested. Which is what is - -11 -00:00:31,790 --> 00:00:36,010 -called, multiple condition coverage. But because of the way - -12 -00:00:36,010 --> 00:00:39,050 -this criterion is defined, it is combinatorial, becuse you have - -13 -00:00:39,050 --> 00:00:42,220 -to consider all the possible combinations of conditions. And - -14 -00:00:42,220 --> 00:00:45,210 -therefore it's extremely expensive, to the point of being impractical. - -15 -00:00:45,210 --> 00:00:47,610 -So instead of defining that criterion, we're going to find - -16 -00:00:47,610 --> 00:00:51,000 -another one which finds a good trade off between thoroughness - -17 -00:00:51,000 --> 00:00:52,815 -of the tests and their cost. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/22 - MC DC Coverage - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/22 - MC DC Coverage - lang_en_vs4.srt deleted file mode 100644 index 1a971f9..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/22 - MC DC Coverage - lang_en_vs4.srt +++ /dev/null @@ -1,307 +0,0 @@ -1 -00:00:00,120 --> 00:00:03,880 -And this criterion is called Modified Condition/Decision Coverage, - -2 -00:00:03,880 --> 00:00:07,750 -also called MC/DC. This criterion is very important because - -3 -00:00:07,750 --> 00:00:10,330 -it is often required for safety critical applications. - -4 -00:00:10,330 --> 00:00:13,920 -For example, the FAA, the Federal Aviation Administration, requires - -5 -00:00:13,920 --> 00:00:15,980 -for all the software that runs on commercial - -6 -00:00:15,980 --> 00:00:19,420 -airplanes to be tested according to the Modified Condition/Decision - -7 -00:00:19,420 --> 00:00:22,015 -Coverage. So what is the key idea behind the - -8 -00:00:22,015 --> 00:00:25,270 -MC/DC criterion? It is to test only the important - -9 -00:00:25,270 --> 00:00:28,710 -combinations of conditions instead of all of them, and limit - -10 -00:00:28,710 --> 00:00:32,189 -the testing cost by excluding the other combinations. And the way - -11 -00:00:32,189 --> 00:00:34,950 -in which it works is by extending branch and decision - -12 -00:00:34,950 --> 00:00:38,860 -coverage with the requirement that each condition should affect the decision - -13 -00:00:38,860 --> 00:00:41,940 -outcome independently. So let's see what this means with an - -14 -00:00:41,940 --> 00:00:45,030 -example that will also show you how you can reduce the - -15 -00:00:45,030 --> 00:00:46,940 -number of combinations in this way. I am going to - -16 -00:00:46,940 --> 00:00:50,460 -show you an example of how MC/DC works using this predicate - -17 -00:00:50,460 --> 00:00:53,870 -which consists of three conditions. a, b, and c, which are all - -18 -00:00:53,870 --> 00:00:57,070 -in and, so the overall predicate is a and b and c. - -19 -00:00:57,070 --> 00:00:58,980 -The first thing I'm going to do is to show you how - -20 -00:00:58,980 --> 00:01:03,370 -many test cases we will need to satisfy the multiple condition coverage - -21 -00:01:03,370 --> 00:01:06,440 -for this simple predicate. Which means, how many test cases we will - -22 -00:01:06,440 --> 00:01:09,780 -need to test all the possible combinations of true and false values - -23 -00:01:09,780 --> 00:01:12,740 -for these conditions. So I'm going to populate this table. And as you - -24 -00:01:12,740 --> 00:01:15,870 -can see, at the end we have eight test cases. Each test case - -25 -00:01:15,870 --> 00:01:18,650 -tests a different combination of values for a, b, and c. - -26 -00:01:18,650 --> 00:01:21,200 -I'm also showing, for each test case, the outcome of the overall - -27 -00:01:21,200 --> 00:01:23,930 -predicate. So, for example, if we look at the first one, the - -28 -00:01:23,930 --> 00:01:27,200 -first test case, will be such that a is true, b is - -29 -00:01:27,200 --> 00:01:30,210 -true, and c is true. And therefore, the overall outcome of - -30 -00:01:30,210 --> 00:01:34,360 -the predicate is true. Now lets consider the first condition, a. As - -31 -00:01:34,360 --> 00:01:36,300 -I said a minute ago, what we want to test are the - -32 -00:01:36,300 --> 00:01:39,160 -important combination. Which are the comibatinos - -33 -00:01:39,160 --> 00:01:41,930 -in which a single condition independently - -34 -00:01:41,930 --> 00:01:45,610 -effects the outcome of the overall predicate. So if we consider a - -35 -00:01:45,610 --> 00:01:48,490 -and we look at this possible set of this cases. Let's try to - -36 -00:01:48,490 --> 00:01:51,850 -find two test cases such that the only difference between the two - -37 -00:01:51,850 --> 00:01:54,960 -test cases is the value of a, and the overall outcome of the - -38 -00:01:54,960 --> 00:01:57,790 -predicate is different. If we look at the table, we can see - -39 -00:01:57,790 --> 00:02:00,920 -that this is true for test cases one and five. If we look - -40 -00:02:00,920 --> 00:02:04,030 -at these two cases, we can see that the overall of the predicate - -41 -00:02:04,030 --> 00:02:07,420 -in the two cases is true and false, and that the only difference - -42 -00:02:07,420 --> 00:02:10,720 -between the value of the conditions in the value of a. So - -43 -00:02:10,720 --> 00:02:13,990 -these test cases satisfy exactly what we wanted. There are two test - -44 -00:02:13,990 --> 00:02:18,270 -cases in which the value of a independently decides the overall value - -45 -00:02:18,270 --> 00:02:21,380 -of the predicate. What we do, therefore, is to add these first - -46 -00:02:21,380 --> 00:02:24,740 -two test cases to our set of tests down here. Now let's - -47 -00:02:24,740 --> 00:02:27,520 -focus on b and let's try to find two test cases such - -48 -00:02:27,520 --> 00:02:30,280 -that the value of b is the only value that changes between - -49 -00:02:30,280 --> 00:02:32,450 -the two test cases, but the overall value of the predicate is - -50 -00:02:32,450 --> 00:02:34,980 -different, the same thing we did for a. And in this case, - -51 -00:02:34,980 --> 00:02:37,610 -we can see that if we select test case number one, and test - -52 -00:02:37,610 --> 00:02:40,420 -case number three, we have exactly that situation. b is true in the - -53 -00:02:40,420 --> 00:02:44,250 -first case, false in the second one, a and c don't change, but - -54 -00:02:44,250 --> 00:02:46,830 -the overall value of the predicate changes. And now you can notice - -55 -00:02:46,830 --> 00:02:50,720 -something else. That even though we selected two test cases, tested two values, - -56 -00:02:50,720 --> 00:02:53,950 -one we already had. So, we only need three test cases overall to - -57 -00:02:53,950 --> 00:02:57,730 -test a and b according to MC/DC. Now, let's look at our last - -58 -00:02:57,730 --> 00:03:00,510 -condition, c. At this point, we know the game, so we - -59 -00:03:00,510 --> 00:03:02,780 -just have to look for two test cases that satisfy our - -60 -00:03:02,780 --> 00:03:06,380 -requirements. And in this case, one and two are suitable candidates. - -61 -00:03:06,380 --> 00:03:08,820 -And once more, because we already have one, we just have to - -62 -00:03:08,820 --> 00:03:11,070 -add two to our list. So as you can see from - -63 -00:03:11,070 --> 00:03:14,730 -this example, we went from having eight test cases needed to cover - -64 -00:03:14,730 --> 00:03:18,600 -all the possible combinations of conditions to only four test cases - -65 -00:03:18,600 --> 00:03:22,880 -to satisfy the MC/DC criteria. So let's see where MC/DC stands in - -66 -00:03:22,880 --> 00:03:25,510 -our substantion hierarchy. This is what we had so far - -67 -00:03:25,510 --> 00:03:28,430 -in the hierarchy and this is where the MC/DC criterion will - -68 -00:03:28,430 --> 00:03:31,930 -stand. MC/DC criterion is stronger than branch and condition coverage. - -69 -00:03:31,930 --> 00:03:35,210 -Why? Because it requires every single condition to be true and - -70 -00:03:35,210 --> 00:03:38,400 -false. And therefore, this section was a condition coverage criteria. - -71 -00:03:38,400 --> 00:03:41,610 -And it also requires every predicate to be true and false - -72 -00:03:41,610 --> 00:03:44,425 -and therefore, this section is branch coverage. And in addition, - -73 -00:03:44,425 --> 00:03:47,790 -it's got the additional requirements that the true and false values, - -74 -00:03:47,790 --> 00:03:50,330 -all the conditions have to also decide the overall - -75 -00:03:50,330 --> 00:03:53,190 -value of the predicate. So it's stronger. Which is more - -76 -00:03:53,190 --> 00:03:56,130 -thorough than branch and condition coverage and, as usual, - -77 -00:03:56,130 --> 00:03:59,380 -also stronger than branch coverage, statement coverage, and condition coverage. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/23 - Other Criteria - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/23 - Other Criteria - lang_en_vs4.srt deleted file mode 100644 index 27bf0fe..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/23 - Other Criteria - lang_en_vs4.srt +++ /dev/null @@ -1,275 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,900 -As I mentioned at the beginning of the class, there are many, many, - -2 -00:00:02,900 --> 00:00:06,150 -many, white box criteria. And we're not going to have time to cover them - -3 -00:00:06,150 --> 00:00:08,000 -all. So what I like to do now is just to give you - -4 -00:00:08,000 --> 00:00:11,290 -the flavor, of some other criteria by just mentioning them, and saying a - -5 -00:00:11,290 --> 00:00:13,740 -couple of things, about the way they work. And the first one I - -6 -00:00:13,740 --> 00:00:15,370 -want to mention is path coverage. And - -7 -00:00:15,370 --> 00:00:17,800 -in path coverage, the test requirements are - -8 -00:00:17,800 --> 00:00:21,220 -all the paths in the program. So what that means is that to - -9 -00:00:21,220 --> 00:00:25,250 -satisfy this criteria, we need to generate enough test cases such that all - -10 -00:00:25,250 --> 00:00:27,230 -the paths in my program are covered. As you can - -11 -00:00:27,230 --> 00:00:31,970 -imagine this is incredibly expensive because any nontrivial program has got - -12 -00:00:31,970 --> 00:00:34,280 -a virtual infinite number of paths and therefore we will - -13 -00:00:34,280 --> 00:00:36,910 -need a virtual infinite number of test cases to satisfy the - -14 -00:00:36,910 --> 00:00:39,950 -path coverage criteria. Another family of criteria I want to mention - -15 -00:00:39,950 --> 00:00:43,970 -are data-flow coverage criteria and in data-flow coverage criteria, the focus - -16 -00:00:43,970 --> 00:00:47,480 -shifts from the coverage of individual elements in the code to - -17 -00:00:47,480 --> 00:00:50,320 -the coverage of pairs of elements. And in particular the coverage - -18 -00:00:50,320 --> 00:00:53,770 -of Statements, in which the content of some memory locations - -19 -00:00:53,770 --> 00:00:56,920 -modified, and statements in which the content of the same - -20 -00:00:56,920 --> 00:00:59,860 -memory location is used. So in this way, our test - -21 -00:00:59,860 --> 00:01:03,030 -will exercise the assignments of values to memory, and the - -22 -00:01:03,030 --> 00:01:06,020 -usage of those assignments,. Finally, I want to mention mutation - -23 -00:01:06,020 --> 00:01:09,150 -coverage. And this is a fairly different and new idea, - -24 -00:01:09,150 --> 00:01:11,910 -so the key concept in mutation coverage is that we - -25 -00:01:11,910 --> 00:01:16,156 -want to evaluate the goodness of our test by modifying the code. - -26 -00:01:16,156 --> 00:01:18,704 -For example here in this small I'm, I'm showing that I might - -27 -00:01:18,704 --> 00:01:21,820 -change it. An if statement from K greater than 9, to K - -28 -00:01:21,820 --> 00:01:24,310 -greater than or equal to 9. And the reason why I want to - -29 -00:01:24,310 --> 00:01:27,750 -do that, is that if I generate enough mutants, enough variation of - -30 -00:01:27,750 --> 00:01:30,340 -my program, then I can use them to assess how good are - -31 -00:01:30,340 --> 00:01:34,330 -my tests at distinguishing the original program and the mutants. And because - -32 -00:01:34,330 --> 00:01:37,430 -I'm changing the code based on the way I expect to introduce - -33 -00:01:37,430 --> 00:01:41,370 -errors in the code, the more my test can identify mutants, the better - -34 -00:01:41,370 --> 00:01:44,140 -they are at identifying real faults. This is a very high - -35 -00:01:44,140 --> 00:01:46,470 -level [UNKNOWN], but just to give you the intuition and the idea - -36 -00:01:46,470 --> 00:01:50,210 -behind these criteria, and I'm going to provide as usual, additional pointers - -37 -00:01:50,210 --> 00:01:52,930 -to go in more depth on these topics in the notes of - -38 -00:01:52,930 --> 00:01:55,170 -the class. So now, let's go back to our test criteria - -39 -00:01:55,170 --> 00:01:59,310 -subsumption hierarchy, and see how all of these criteria fit together in - -40 -00:01:59,310 --> 00:02:02,663 -this context. Let me start with multiple condition coverage. As we saw, - -41 -00:02:02,663 --> 00:02:06,740 -MC/DC is sort of as [UNKNOWN] way of doing multiple condition coverage - -42 -00:02:06,740 --> 00:02:09,229 -in the sense that it doesn't consider all the combinations, - -43 -00:02:09,229 --> 00:02:11,460 -but only the ones that are more likely to matter. - -44 -00:02:11,460 --> 00:02:14,930 -And as such, MC/DC exercises a subset of the elements - -45 -00:02:14,930 --> 00:02:16,220 -of the multiple condition coverage - -46 -00:02:16,220 --> 00:02:18,760 -exercises. And therefore, multiple condition coverage - -47 -00:02:18,760 --> 00:02:22,060 -is more thorough than MC/DC and subsumption, and it's also - -48 -00:02:22,060 --> 00:02:26,300 -as we saw incredibly more expensive. Path coverage subsumes branch coverage, - -49 -00:02:26,300 --> 00:02:28,090 -because if I cover all of the paths in the - -50 -00:02:28,090 --> 00:02:32,140 -code, I necessarily cover all the branches. However, it doesn't subsume - -51 -00:02:32,140 --> 00:02:34,130 -multiple condition coverage, MC/CD, or - -52 -00:02:34,130 --> 00:02:35,910 -branch and condition coverage. Because this - -53 -00:02:35,910 --> 00:02:38,590 -criteria, have additional requirements involving - -54 -00:02:38,590 --> 00:02:39,940 -the conditions of the predicate that - -55 -00:02:39,940 --> 00:02:42,730 -path coverage does not have. As for data-flow coverage criteria and - -56 -00:02:42,730 --> 00:02:45,010 -mutation coverage criteria, there really no - -57 -00:02:45,010 --> 00:02:46,860 -relation with the other criteria, because - -58 -00:02:46,860 --> 00:02:49,710 -they look at different aspects, of the code. So they're not - -59 -00:02:49,710 --> 00:02:52,220 -really comparable, and therefore we're just going to put them on the - -60 -00:02:52,220 --> 00:02:55,000 -side, without any relationship with the other ones. The reason why - -61 -00:02:55,000 --> 00:02:57,300 -I want to represent them all anyways is because I want to make - -62 -00:02:57,300 --> 00:02:59,950 -an important distinction between these different criteria. And - -63 -00:02:59,950 --> 00:03:02,690 -that's the distinction between practical criteria, which are - -64 -00:03:02,690 --> 00:03:05,490 -criteria that are actually not too expansive to - -65 -00:03:05,490 --> 00:03:08,790 -be used in real scenarios. And theoretical criteria, which - -66 -00:03:08,790 --> 00:03:11,590 -are criteria that are useful in theory from - -67 -00:03:11,590 --> 00:03:14,140 -the conceptual standpoint, but they're not really applicable - -68 -00:03:14,140 --> 00:03:16,540 -in practice because they're too expansive, because they - -69 -00:03:16,540 --> 00:03:19,460 -require basically too many test cases to be satisfied. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/24 - Review Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/24 - Review Quiz - lang_en_vs4.srt deleted file mode 100644 index 3f1d6ee..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/24 - Review Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,160 --> 00:00:04,260 -White box testing, in general, and coverage criteria in particular, involve some - -2 -00:00:04,260 --> 00:00:07,550 -subtle concepts, so before I conclude this lesson, I want to have a - -3 -00:00:07,550 --> 00:00:10,960 -few more quizzes to make sure that we all understand these concepts. - -4 -00:00:10,960 --> 00:00:13,610 -The first one involves a very simple piece of code, a straight line - -5 -00:00:13,610 --> 00:00:16,540 -of code, three statements, in which we simply read an integer and - -6 -00:00:16,540 --> 00:00:20,180 -then prints 10 divided by the value of that integer minus 3. Now, - -7 -00:00:20,180 --> 00:00:22,250 -let's imagine that we have a test where there consists of three - -8 -00:00:22,250 --> 00:00:25,250 -test cases for this code, and what I'm showing in the test cases - -9 -00:00:25,250 --> 00:00:28,580 -is the input and the expected output. So for the first one, - -10 -00:00:28,580 --> 00:00:31,280 -the input is 1, and I expect the output to be minus 5. - -11 -00:00:31,280 --> 00:00:34,480 -For the second one, the input is minus 1, I'm expecting to - -12 -00:00:34,480 --> 00:00:37,120 -have 2.5. And for the third one, the input is 0, and I'm - -13 -00:00:37,120 --> 00:00:42,440 -expecting to have minus 3.3333 as the result. Now the first question - -14 -00:00:42,440 --> 00:00:45,180 -I want to ask, is if we considered this test suite, and we - -15 -00:00:45,180 --> 00:00:48,050 -run it on the code, does it achieve path coverage? And remember - -16 -00:00:48,050 --> 00:00:50,960 -that path coverage is one of the strongest coverage criteria that we saw. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/25 - Review Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/25 - Review Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 19d1177..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/25 - Review Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,7 +0,0 @@ -1 -00:00:00,180 --> 00:00:04,040 -And the answer in this case is clearly yes. In fact, any input will really - -2 -00:00:04,040 --> 00:00:07,430 -achieve path coverage for this code because there is only one path in the code. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/26 - Review Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/26 - Review Quiz - lang_en_vs4.srt deleted file mode 100644 index a07e712..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/26 - Review Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,108 --> 00:00:03,890 -But now want to ask a different question which is, does this test reveal - -2 -00:00:03,890 --> 00:00:07,760 -the fault at line three? Clearly, here there is a possible problem, because - -3 -00:00:07,760 --> 00:00:10,440 -if we pass the right input, we can have a division by zero. - -4 -00:00:10,440 --> 00:00:13,760 -Is that revealed if we run this test within the code? Yes or no? diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/27 - Review Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/27 - Review Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 9945694..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/27 - Review Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,340 --> 00:00:03,581 -And the answer is no. So even path coverage's stronger criteria - -2 -00:00:03,581 --> 00:00:06,376 -that we saw is not enough to reveal this problem. And why - -3 -00:00:06,376 --> 00:00:08,526 -is that? So let me go back to a concept that - -4 -00:00:08,526 --> 00:00:12,491 -I mentioned in a previous lesson, the cost of exhaustive testing. Exhaustive - -5 -00:00:12,491 --> 00:00:15,236 -testing is really the only way in which we can exercise - -6 -00:00:15,236 --> 00:00:18,230 -all of the possible behaviors of a program. So we can say - -7 -00:00:18,230 --> 00:00:21,884 -even though it might sound like topology, that only exhaustive testing is - -8 -00:00:21,884 --> 00:00:25,710 -exhausted. All the coverage criteria that we saw are just process and - -9 -00:00:25,710 --> 00:00:30,900 -just approximation of a complete test. So test is a best effort kind - -10 -00:00:30,900 --> 00:00:33,180 -of activity. Coverage criteria help you assess - -11 -00:00:33,180 --> 00:00:35,430 -how well you tested but once more, - -12 -00:00:35,430 --> 00:00:40,060 -test can only reveal issues, can only reveal problems. You can never show the - -13 -00:00:40,060 --> 00:00:42,530 -absence of problems. And that's something is - -14 -00:00:42,530 --> 00:00:44,377 -important to remember when we do testing. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/28 - Review Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/28 - Review Quiz - lang_en_vs4.srt deleted file mode 100644 index d6dd40a..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/28 - Review Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,290 --> 00:00:03,220 -Now let's do another quiz considering a slightly different piece - -2 -00:00:03,220 --> 00:00:05,050 -of code. In this case we have five layers of - -3 -00:00:05,050 --> 00:00:08,684 -code. We have a variable i, a variable j. Variable - -4 -00:00:08,684 --> 00:00:11,620 -j is read from the input. And then based on - -5 -00:00:11,620 --> 00:00:14,500 -this predicate, we either print the value of i or - -6 -00:00:14,500 --> 00:00:16,850 -simply exit. And what I want to know from you is - -7 -00:00:16,850 --> 00:00:19,990 -whether you can create a test suite to achieve statement - -8 -00:00:19,990 --> 00:00:22,660 -coverage for this simple piece of code. Yes or no? diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/29 - Review Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/29 - Review Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 1e3228c..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/29 - Review Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,119 +0,0 @@ -1 -00:00:00,230 --> 00:00:02,520 -And the answer in this case is no. And - -2 -00:00:02,520 --> 00:00:05,480 -the reason for this is because this code is - -3 -00:00:05,480 --> 00:00:08,950 -unreachable. This is dead code because no matter the - -4 -00:00:08,950 --> 00:00:12,560 -value of j, this condition will always be false because - -5 -00:00:12,560 --> 00:00:14,770 -i will always be 0. And notice that this - -6 -00:00:14,770 --> 00:00:17,670 -is a small example, but another important truth is - -7 -00:00:17,670 --> 00:00:22,520 -that any non-trivial program contains dead or unreachable code, - -8 -00:00:22,520 --> 00:00:25,610 -code that no matter how well we test our system, - -9 -00:00:25,610 --> 00:00:28,450 -we will never be able to exercise. Why is that? Various - -10 -00:00:28,450 --> 00:00:31,030 -reasons. For example, defensive programming or, - -11 -00:00:31,030 --> 00:00:33,600 -for example, developing for future releases. - -12 -00:00:33,600 --> 00:00:36,320 -So there might be pieces of code that are added, but they're - -13 -00:00:36,320 --> 00:00:39,380 -still not activated. They're still not invoked by any other part of - -14 -00:00:39,380 --> 00:00:41,970 -the code because of modifications to the code. There are some - -15 -00:00:41,970 --> 00:00:44,480 -parts that were executed before and in the new version of the - -16 -00:00:44,480 --> 00:00:47,915 -program, they are no longer exercised. They are no longer executable. But - -17 -00:00:47,915 --> 00:00:50,760 -they still remain in the code base. And this is a very, - -18 -00:00:50,760 --> 00:00:54,560 -very normal situation for this reason and many more. And this is - -19 -00:00:54,560 --> 00:00:56,790 -an important concept because this affects - -20 -00:00:56,790 --> 00:00:58,760 -the very meaning of coverage measures. If - -21 -00:00:58,760 --> 00:01:01,225 -there is some unreachable code, we will never be able to reach - -22 -00:01:01,225 --> 00:01:04,709 -100% code coverage. And in fact, if you remember, at the beginning of - -23 -00:01:04,709 --> 00:01:07,380 -the lesson, we discussed this concept and asked you why you think - -24 -00:01:07,380 --> 00:01:10,470 -that, in the industry, the target for coverage is not 100% but less - -25 -00:01:10,470 --> 00:01:12,850 -that that. And that's the answer, to account for the fact that there - -26 -00:01:12,850 --> 00:01:15,890 -are infeasibility problems that I have to take into account when I test - -27 -00:01:15,890 --> 00:01:19,920 -the code, infeasible paths, unexecutable statements, conditions that can never - -28 -00:01:19,920 --> 00:01:22,780 -be true, and so on. So most criteria, if not - -29 -00:01:22,780 --> 00:01:24,620 -all, are affected, and we need to take that into - -30 -00:01:24,620 --> 00:01:27,270 -account when we try to achieve a given coverage target. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/3 - Coverage Criteria Intro - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/3 - Coverage Criteria Intro - lang_en_vs4.srt deleted file mode 100644 index b1a38a7..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/3 - Coverage Criteria Intro - lang_en_vs4.srt +++ /dev/null @@ -1,171 +0,0 @@ -1 -00:00:00,320 --> 00:00:04,059 -So let's start our lesson on white docs testing by considering again the - -2 -00:00:04,059 --> 00:00:07,470 -program PrintSum. If you remember, this is the same program that we used when - -3 -00:00:07,470 --> 00:00:10,300 -we were talking about black box testing. It's the program that takes two - -4 -00:00:10,300 --> 00:00:14,050 -integers, A and B, and produces, as a result, the sum of the two. - -5 -00:00:14,050 --> 00:00:16,570 -And when we were looking at this problem in the context of black - -6 -00:00:16,570 --> 00:00:17,760 -box testing, we did not look at - -7 -00:00:17,760 --> 00:00:19,700 -implementation. But that's exactly what we're going to - -8 -00:00:19,700 --> 00:00:22,090 -do now. So we're going to open the box and look at how the - -9 -00:00:22,090 --> 00:00:25,700 -code is implemented. And as you can see, the programmer was kind of creative. - -10 -00:00:25,700 --> 00:00:28,670 -Because instead of just adding the two numbers and printing them, he - -11 -00:00:28,670 --> 00:00:32,080 -or she also decided to print them in a specific color depending - -12 -00:00:32,080 --> 00:00:36,840 -on whether they were positive numbers or negative numbers. So positive results - -13 -00:00:36,840 --> 00:00:40,040 -are printed in red and negative results are printed in blue. And as - -14 -00:00:40,040 --> 00:00:41,970 -you can see by looking at the code we can see some - -15 -00:00:41,970 --> 00:00:45,150 -interesting cases that we might want to test. For instance you can - -16 -00:00:45,150 --> 00:00:48,190 -see that there are two decisions made here. So we might decide - -17 -00:00:48,190 --> 00:00:51,100 -that this is an interesting case and therefore we want to test it. - -18 -00:00:51,100 --> 00:00:53,770 -Similarly we might look at this other case and we might - -19 -00:00:53,770 --> 00:00:56,465 -also decide that this is another interesting case and therefore we - -20 -00:00:56,465 --> 00:00:58,970 -want to test this one as well. So let's discuss this - -21 -00:00:58,970 --> 00:01:01,480 -in a slightly more formal way by introducing the concept of - -22 -00:01:01,480 --> 00:01:05,110 -coverage criteria which are really the essence of why box testing. - -23 -00:01:05,110 --> 00:01:08,930 -First of all coverage criteria are defined in terms of test - -24 -00:01:08,930 --> 00:01:13,460 -requirements where test requirements are the elements, the entities in the - -25 -00:01:13,460 --> 00:01:16,250 -code that we need to exercise. That we need to execute - -26 -00:01:16,250 --> 00:01:18,690 -in order to satisfy the criteria. And we'll see plenty - -27 -00:01:18,690 --> 00:01:21,430 -of examples of that. And normally, when I apply a coverage - -28 -00:01:21,430 --> 00:01:24,810 -criterion, my result is a set of test specifications. And we - -29 -00:01:24,810 --> 00:01:26,540 -already saw test specifications. Those - -30 -00:01:26,540 --> 00:01:29,540 -are basically descriptions, specifications, of how - -31 -00:01:29,540 --> 00:01:32,786 -the tests should be in order to satisfy the requirements. And - -32 -00:01:32,786 --> 00:01:36,210 -they also result in actual test cases, which are instantiations of - -33 -00:01:36,210 --> 00:01:39,470 -the test specifications. And again this is exactly analogous to what - -34 -00:01:39,470 --> 00:01:41,830 -we saw when we were talking about the black box testing. - -35 -00:01:41,830 --> 00:01:43,960 -So let's see what this means by going back to our - -36 -00:01:43,960 --> 00:01:46,680 -example. A minute ago, we looked at the print sum code - -37 -00:01:46,680 --> 00:01:50,000 -and we identified two interesting cases for our code. And those - -38 -00:01:50,000 --> 00:01:53,430 -are exactly our test requirements. So we have a first test - -39 -00:01:53,430 --> 00:01:57,840 -requirement here, which is the execution of this particular statement and - -40 -00:01:57,840 --> 00:02:01,500 -a second requirement here and this one corresponds to the execution - -41 -00:02:01,500 --> 00:02:04,580 -of this other statement. So for this example there are two - -42 -00:02:04,580 --> 00:02:06,920 -things that we need to do in order to satisfy our - -43 -00:02:06,920 --> 00:02:10,100 -coverage requirements. Execute this statement and execute this statement. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/30 - Summary - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/30 - Summary - lang_en_vs4.srt deleted file mode 100644 index 264491d..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/30 - Summary - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,190 --> 00:00:02,800 -Now let me conclude the lesson by summarizing a few important - -2 -00:00:02,800 --> 00:00:06,840 -aspects of white-box testing. The first important aspect is that white-box - -3 -00:00:06,840 --> 00:00:09,770 -testing works on a formal model. The code itself are models - -4 -00:00:09,770 --> 00:00:12,430 -derived from the code. So when we do white-box testing, we - -5 -00:00:12,430 --> 00:00:15,160 -don't need to make subjective decision, for example, on the level - -6 -00:00:15,160 --> 00:00:18,890 -of obstruction of our models. Normally, we simply represent what's there. - -7 -00:00:18,890 --> 00:00:22,010 -And so what we will obtain are objective, results and objective - -8 -00:00:22,010 --> 00:00:25,400 -measures. As I also said at the beginning, coverage criteria allows - -9 -00:00:25,400 --> 00:00:28,790 -us to compare different test suites, different sets of tests, - -10 -00:00:28,790 --> 00:00:31,780 -because I can measure the coverage achieved by one test suite - -11 -00:00:31,780 --> 00:00:34,280 -and by the other, and then decide which one to use - -12 -00:00:34,280 --> 00:00:37,400 -based on this measure. And again, remember, these measures aren't perfect, - -13 -00:00:37,400 --> 00:00:40,700 -but they at least give you an objective number, an objective - -14 -00:00:40,700 --> 00:00:44,470 -measure of the likely effectiveness of your tests. So even though - -15 -00:00:44,470 --> 00:00:48,130 -achieving 100% coverage does not mean that you identify all the - -16 -00:00:48,130 --> 00:00:50,710 -problems in the code for sure. If your level of coverage - -17 -00:00:50,710 --> 00:00:53,700 -is 10%, for example, for stemen coverage. That means that - -18 -00:00:53,700 --> 00:00:57,360 -you haven't exercised 90% of your code, and therefore the trouble - -19 -00:00:57,360 --> 00:01:00,565 -is in a piece of software that is inadequately tested - -20 -00:01:00,565 --> 00:01:03,600 -and likely to be of inadequate quality. We also saw that - -21 -00:01:03,600 --> 00:01:07,370 -there are two broad classes of coverage criteria, practical criteria - -22 -00:01:07,370 --> 00:01:10,430 -that we can actually use, and theoretical criteria that are interesting - -23 -00:01:10,430 --> 00:01:13,410 -from a conceptual standpoint, but that they are totally impractical. - -24 -00:01:13,410 --> 00:01:16,170 -They are too expensive to be used on real world software. - -25 -00:01:16,170 --> 00:01:18,350 -And finally, as we also said at the beginning, - -26 -00:01:18,350 --> 00:01:20,820 -one of the great things about white box testing and - -27 -00:01:20,820 --> 00:01:23,910 -coverage criteria, is that they are fully automatable. There are - -28 -00:01:23,910 --> 00:01:27,380 -tools that can take your code, instrument it automatically. And - -29 -00:01:27,380 --> 00:01:29,050 -when you run your test cases, they will tell - -30 -00:01:29,050 --> 00:01:31,330 -you, what is the level of coverage that you achieve - -31 -00:01:31,330 --> 00:01:34,410 -with your test at no cost for you. So there's - -32 -00:01:34,410 --> 00:01:36,763 -really no reason not to measure coverage of your code. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/4 - Coverage Criteria Intro Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/4 - Coverage Criteria Intro Quiz - lang_en_vs4.srt deleted file mode 100644 index 2adce93..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/4 - Coverage Criteria Intro Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,620 --> 00:00:03,310 -Now let's see if we are all on the same page - -2 -00:00:03,310 --> 00:00:07,180 -on the concept of testing specifications, and we're going to do that through - -3 -00:00:07,180 --> 00:00:09,280 -a quiz. What I would like for you to do is to - -4 -00:00:09,280 --> 00:00:12,830 -tell me, what are some possible test specifications that will satisfy the - -5 -00:00:12,830 --> 00:00:15,380 -requirements that we just saw? And I want you to express this - -6 -00:00:15,380 --> 00:00:17,270 -specification in terms of constraints on - -7 -00:00:17,270 --> 00:00:19,166 -the inputs. Which means, what constraints - -8 -00:00:19,166 --> 00:00:23,130 -should the input satisfy in order for this statement to be executed, - -9 -00:00:23,130 --> 00:00:26,210 -and this statement to be executed, and you can write your answer - -10 -00:00:26,210 --> 00:00:27,510 -here in these two slots. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/5 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/5 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 2a1ff16..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/5 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,560 -To satisfy our first requirements, we need to find an - -2 -00:00:02,560 --> 00:00:06,300 -input that causes the execution of this statement. Because this statement - -3 -00:00:06,300 --> 00:00:09,080 -is executed only when result is greater than zero, our - -4 -00:00:09,080 --> 00:00:12,815 -test requirement is that a plus b must be greater than - -5 -00:00:12,815 --> 00:00:16,219 -0. When this is satisfied, this statement is executed therefore - -6 -00:00:16,219 --> 00:00:19,960 -any test case that implements this specification will cause the execution - -7 -00:00:19,960 --> 00:00:22,770 -of this statement. Similarly if we want to cover this statement - -8 -00:00:22,770 --> 00:00:25,220 -which is our second requirement we need to have a result - -9 -00:00:25,220 --> 00:00:27,370 -that is less than 0. Again, the result is equal - -10 -00:00:27,370 --> 00:00:29,490 -to a plus b, so all we need to do - -11 -00:00:29,490 --> 00:00:32,450 -is find the test case such that a plus b - -12 -00:00:32,450 --> 00:00:34,700 -is less than 0. So this is pretty straight forward. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/6 - Coverage Criteria Intro Quiz - lang_en_vs3.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/6 - Coverage Criteria Intro Quiz - lang_en_vs3.srt deleted file mode 100644 index 42b5720..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/6 - Coverage Criteria Intro Quiz - lang_en_vs3.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,220 --> 00:00:03,780 -So, now that we have our test specifications. Test specification number one that - -2 -00:00:03,780 --> 00:00:06,740 -says that a plus b must be greater than zero. And test specification - -3 -00:00:06,740 --> 00:00:09,990 -number two, for which a plus b must be less than zero. I'd - -4 -00:00:09,990 --> 00:00:12,580 -like to do another small quiz and ask you to write some test - -5 -00:00:12,580 --> 00:00:16,440 -cases that will implement these specifications. And I want you to write the - -6 -00:00:16,440 --> 00:00:19,780 -test cases in this format. I want you to specify for each one - -7 -00:00:19,780 --> 00:00:22,300 -of the test cases, what is the value of a that you need - -8 -00:00:22,300 --> 00:00:25,160 -to use. What is the value of b that you need to use. - -9 -00:00:25,160 --> 00:00:28,200 -And since a test case, I like to remind you, is - -10 -00:00:28,200 --> 00:00:30,960 -not just a set of inputs. But is the set of - -11 -00:00:30,960 --> 00:00:34,050 -inputs plus expected output? I also want you to specify, what - -12 -00:00:34,050 --> 00:00:37,040 -is the expected output for these test cases? And in particular, - -13 -00:00:37,040 --> 00:00:39,540 -since we have two characteristics of the output, one is the - -14 -00:00:39,540 --> 00:00:41,630 -color of the output and the other one is the actual - -15 -00:00:41,630 --> 00:00:44,040 -value. I want you to specify for each test case, what - -16 -00:00:44,040 --> 00:00:46,790 -is the expected output color and what is the expected value? diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/7 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/7 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 749a57e..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/7 - Coverage Criteria Intro Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,87 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,360 -In this case like in many other cases, there's not just a - -2 -00:00:02,360 --> 00:00:05,550 -single right answer because you can build many test cases that will - -3 -00:00:05,550 --> 00:00:09,730 -satisfy this test specification. So for example, we could pick value 3 - -4 -00:00:09,730 --> 00:00:13,640 -for a and value 9 for b. Those satisfy the specification because a - -5 -00:00:13,640 --> 00:00:16,400 -plus b is equal to 12 and therefore is greater than 0, - -6 -00:00:16,400 --> 00:00:19,470 -and therefore this is a test case that implements this test specification. - -7 -00:00:19,470 --> 00:00:21,960 -And in terms of results, what we expect to see is in - -8 -00:00:21,960 --> 00:00:25,200 -the case of a result greater than 0, the caller should be red, - -9 -00:00:25,200 --> 00:00:28,109 -and the upper value should be 12. And obviously for this test - -10 -00:00:28,109 --> 00:00:30,971 -specification, we just need to pick two inputs such that the sum - -11 -00:00:30,971 --> 00:00:33,674 -of the two inputs is less than 0. So for example, we - -12 -00:00:33,674 --> 00:00:37,125 -could pick minus 5 and minus 8. The output color in this - -13 -00:00:37,125 --> 00:00:40,230 -case is going to be blue, and the output value is going to be - -14 -00:00:40,230 --> 00:00:43,780 -minus 13. So, what we just saw is basically how we can - -15 -00:00:43,780 --> 00:00:47,060 -go from a piece of code to a set of requirements, which - -16 -00:00:47,060 --> 00:00:50,260 -are the interesting aspects of the code that we want to exercise. How we - -17 -00:00:50,260 --> 00:00:52,800 -can satisfy the requirements by finding - -18 -00:00:52,800 --> 00:00:54,700 -the right test specifications, and then how - -19 -00:00:54,700 --> 00:00:58,450 -we can initiate the test specifications into actual test cases. And this is - -20 -00:00:58,450 --> 00:01:01,010 -what we will do in general when doing white books testing. And we'll - -21 -00:01:01,010 --> 00:01:02,520 -do things likely different way, depending on - -22 -00:01:02,520 --> 00:01:04,230 -the specific criteria that we are considering. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/8 - Statement Coverage - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/8 - Statement Coverage - lang_en_vs4.srt deleted file mode 100644 index 23cfb0a..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/8 - Statement Coverage - lang_en_vs4.srt +++ /dev/null @@ -1,291 +0,0 @@ -1 -00:00:00,270 --> 00:00:03,080 -Now that we saw this overview of white-box testing, I'd like - -2 -00:00:03,080 --> 00:00:06,270 -to start talking about specific coverage criterion. And I'm going to start - -3 -00:00:06,270 --> 00:00:09,010 -with the first one, which is Statement Coverage. This criterion is - -4 -00:00:09,010 --> 00:00:12,355 -going to be characterized by two aspects, the first one is which - -5 -00:00:12,355 --> 00:00:15,580 -are the Test requirements for the criteria and the second one - -6 -00:00:15,580 --> 00:00:18,830 -is how we measure Coverage for that criteria. In the case - -7 -00:00:18,830 --> 00:00:22,200 -of statement coverage, these test requirements are all the statements in - -8 -00:00:22,200 --> 00:00:25,804 -the program. So this is the basic, the first the, the simplest - -9 -00:00:25,804 --> 00:00:29,860 -coverage criteria in the white-box arena. Let me remind you the assumption - -10 -00:00:29,860 --> 00:00:33,280 -that we made at the beginning. White-box testing is based on the assumption - -11 -00:00:33,280 --> 00:00:35,990 -that if there isn't a faulty element in the code, we need - -12 -00:00:35,990 --> 00:00:38,390 -to exercise it. We need to execute it, in order to find the - -13 -00:00:38,390 --> 00:00:41,260 -fault. And that's exactly what statement coverage does. If there is a - -14 -00:00:41,260 --> 00:00:44,450 -statement that is faulty in the code, we need to exercise it, in - -15 -00:00:44,450 --> 00:00:47,490 -order to find the fault. And therefore, a good measure of how well - -16 -00:00:47,490 --> 00:00:51,480 -we exercise the code, is the ratio of the number of executed statements. - -17 -00:00:51,480 --> 00:00:54,950 -So all the statements that my test cases executed, to the total - -18 -00:00:54,950 --> 00:00:58,570 -number of statements in the program. The higher this number, the better - -19 -00:00:58,570 --> 00:01:01,870 -I exercise my code. And we can also look at coverage criterion - -20 -00:01:01,870 --> 00:01:04,290 -in terms of questions. So what is the questions they were trying - -21 -00:01:04,290 --> 00:01:06,940 -to answer when we look at a specific set of test cases - -22 -00:01:06,940 --> 00:01:09,870 -and we assess the statement coverage that they achieved. And the question - -23 -00:01:09,870 --> 00:01:13,440 -is whether each statement in the program has been executed. So, statement - -24 -00:01:13,440 --> 00:01:16,920 -coverage is satisfied when all the statements in the program have been executed. - -25 -00:01:16,920 --> 00:01:19,640 -And we can satisfy to different degrees and the degrees to which it's - -26 -00:01:19,640 --> 00:01:23,320 -satisfied is measured by this value. So now let's go ahead and measure - -27 -00:01:23,320 --> 00:01:27,250 -statement coverage on our printSum example. What I'm going to show down here is - -28 -00:01:27,250 --> 00:01:30,500 -this progress bar in which we show the amount of coverage, the percentage of - -29 -00:01:30,500 --> 00:01:33,060 -coverage achieved. So what this means is that the, if I get to - -30 -00:01:33,060 --> 00:01:36,680 -this point I've covered 25% of the statements in the code. And my goal - -31 -00:01:36,680 --> 00:01:39,160 -is to get up here to cover all the statements in the code. - -32 -00:01:39,160 --> 00:01:42,000 -We have two test cases for this code. The first one that we just - -33 -00:01:42,000 --> 00:01:45,700 -saw, consists of the inputs a equal to 3 and b equal - -34 -00:01:45,700 --> 00:01:48,200 -to 9, and the second one has the inputs a is equal to - -35 -00:01:48,200 --> 00:01:50,840 -minus 5 and b is equal to minus 8. So now let's see - -36 -00:01:50,840 --> 00:01:53,450 -what happens when we run this test case. When we run this test - -37 -00:01:53,450 --> 00:01:56,920 -case, I'm going to show you by highlighting in the code the parts that - -38 -00:01:56,920 --> 00:02:00,430 -we cover when we start executing the code. We cover the first statement, - -39 -00:02:00,430 --> 00:02:01,910 -then we always execute the second - -40 -00:02:01,910 --> 00:02:04,180 -statement, which computes the result, we continue - -41 -00:02:04,180 --> 00:02:07,070 -the execution, we get to the if statement. If the result is greater - -42 -00:02:07,070 --> 00:02:10,038 -than zero, in this case our result is 12 because we - -43 -00:02:10,038 --> 00:02:12,360 -are working with the inputs 3 and 9, and therefore we - -44 -00:02:12,360 --> 00:02:15,710 -execute the true part of the if, we execute the statement. - -45 -00:02:15,710 --> 00:02:18,850 -And at this point, we just jump to the end. Because we - -46 -00:02:18,850 --> 00:02:21,530 -do not execute the else part of the statement, since we - -47 -00:02:21,530 --> 00:02:24,240 -have executed a true one, and therefore, we cover this final - -48 -00:02:24,240 --> 00:02:27,534 -statement. So at the end of the execution of this test - -49 -00:02:27,534 --> 00:02:32,313 -case, we cover one, two, three, four, five statement out of seven - -50 -00:02:32,313 --> 00:02:36,299 -which is roughly speaking 71%. So we can mark in here - -51 -00:02:36,299 --> 00:02:39,779 -that we more or less got to 71% of coverage for - -52 -00:02:39,779 --> 00:02:42,719 -this code. Now let's look at what happens when we execute - -53 -00:02:42,719 --> 00:02:45,700 -test case number two. In this case again, we execute the - -54 -00:02:45,700 --> 00:02:48,660 -first statement, the second statement, the third statement. In this case - -55 -00:02:48,660 --> 00:02:52,010 -though, the first statement, when it evaluates the value of result, - -56 -00:02:52,010 --> 00:02:54,250 -it sees that the result is not greater than zero because - -57 -00:02:54,250 --> 00:02:57,590 -our inputs are minus five and minus eight. Therefore, you will execute - -58 -00:02:57,590 --> 00:03:00,090 -line number five. And because the result is less than - -59 -00:03:00,090 --> 00:03:02,810 -zero, you will also execute line number six. So, at - -60 -00:03:02,810 --> 00:03:05,230 -this point, all of the statements in our code are - -61 -00:03:05,230 --> 00:03:09,360 -executed and therefore, we achieved a 100% statement coverage, which - -62 -00:03:09,360 --> 00:03:13,090 -was our goal. Before looking at other kinds of coverage, - -63 -00:03:13,090 --> 00:03:16,060 -let's see how our statement coverage is used in practice. - -64 -00:03:16,060 --> 00:03:19,170 -First of all, statement coverage is the most used kind - -65 -00:03:19,170 --> 00:03:22,830 -of coverage criterion in industry. Normally for company that uses - -66 -00:03:22,830 --> 00:03:27,200 -statement coverage, the typical coverage target is 80-90%, which - -67 -00:03:27,200 --> 00:03:29,690 -mean the outcome of the test should be such - -68 -00:03:29,690 --> 00:03:32,770 -that 80-90% of the statements are exercised at the - -69 -00:03:32,770 --> 00:03:34,880 -end of testing. So at this point, you might - -70 -00:03:34,880 --> 00:03:36,850 -be wondering, why don't we just shoot for 100%? - -71 -00:03:36,850 --> 00:03:38,580 -Why don't we try to cover all of the - -72 -00:03:38,580 --> 00:03:40,050 -code? We just saw that we could do it. - -73 -00:03:40,050 --> 00:03:41,730 -And so I'm going to ask you the same question. diff --git a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/9 - Statement Coverage Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L3 White-Box Testing Subtitles/9 - Statement Coverage Quiz - lang_en_vs4.srt deleted file mode 100644 index 893fe06..0000000 --- a/usth/ICT2.7/P4L3 White-Box Testing Subtitles/9 - Statement Coverage Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,15 +0,0 @@ -1 -00:00:00,100 --> 00:00:01,540 -so, I would like to hear from you. Why - -2 -00:00:01,540 --> 00:00:03,850 -do you think that we don't aim normally at - -3 -00:00:03,850 --> 00:00:05,939 -100 % college but, slightly less than that and - -4 -00:00:05,939 --> 00:00:07,560 -I want you to put your answer right here. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index 2e839f9..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,270 --> 00:00:02,880 -In previous lessons, we covered testing principles and - -2 -00:00:02,880 --> 00:00:06,610 -techniques. In this lesson, we will discuss a - -3 -00:00:06,610 --> 00:00:09,550 -type of software process that is heavily based - -4 -00:00:09,550 --> 00:00:12,812 -on the use of testing. The agile development - -5 -00:00:12,812 --> 00:00:17,310 -process. Also called test-driven development. To do that, - -6 -00:00:17,310 --> 00:00:19,290 -we will revisit some of the assumptions that - -7 -00:00:19,290 --> 00:00:21,490 -led to the definition of the more traditional - -8 -00:00:21,490 --> 00:00:24,030 -software processes. The ones that we discussed so far. - -9 -00:00:25,440 --> 00:00:27,690 -We will see how, when some of these assumptions are - -10 -00:00:27,690 --> 00:00:30,210 -no longer valid, we can change the way in which we - -11 -00:00:30,210 --> 00:00:32,560 -look at software processes. And we can change the way - -12 -00:00:32,560 --> 00:00:36,120 -in which we look at software development in general. We will - -13 -00:00:36,120 --> 00:00:40,250 -discuss how this changing perspective, lets us rethink software processes - -14 -00:00:40,250 --> 00:00:43,520 -and make them more agile and better suited for context in - -15 -00:00:43,520 --> 00:00:46,120 -which changes are the norm and we need to adapt - -16 -00:00:46,120 --> 00:00:50,535 -fast. In particular, we will discuss two processes that apply the - -17 -00:00:50,535 --> 00:00:53,570 -principles of agile software development and that are commonly - -18 -00:00:53,570 --> 00:00:59,170 -used in industry. Extreme programming, also called XP, and Scrum. - -19 -00:00:59,170 --> 00:01:01,560 -[BLANK_AUDIO] diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/10 - Refactoring - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/10 - Refactoring - lang_en_vs4.srt deleted file mode 100644 index 800ffb5..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/10 - Refactoring - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,469 -A couple of minutes ago we talked about the fact that well, we - -2 -00:00:02,469 --> 00:00:05,260 -might need to change our design a lot, so how we going to do - -3 -00:00:05,260 --> 00:00:08,540 -that, that's going to be expensive. Well it's not very expensive, if we can - -4 -00:00:08,540 --> 00:00:10,876 -do efficient refactoring. Which is another - -5 -00:00:10,876 --> 00:00:13,120 -one of the important xp practices. And - -6 -00:00:13,120 --> 00:00:15,280 -what does it mean to refactor? It means to take a piece of - -7 -00:00:15,280 --> 00:00:19,530 -code who's design might be suboptimal, because for example, we evolved it, we - -8 -00:00:19,530 --> 00:00:22,600 -didn't take into account that from the beginning some of the features that - -9 -00:00:22,600 --> 00:00:25,110 -had to be added later, probably because we didn't even know about this - -10 -00:00:25,110 --> 00:00:28,200 -feature, because the requirements evolved. So we're going to take this piece - -11 -00:00:28,200 --> 00:00:31,870 -of code and we're going to restructure it, so that it becomes simple - -12 -00:00:31,870 --> 00:00:34,070 -and maintainable. Developers are expected to - -13 -00:00:34,070 --> 00:00:35,590 -refactor as soon as opportunities for - -14 -00:00:35,590 --> 00:00:39,530 -improvement, are found. And that happens for example, before adding some code. - -15 -00:00:39,530 --> 00:00:41,730 -You might look at the code that you're about to modify, or - -16 -00:00:41,730 --> 00:00:43,850 -to which you are about to add parts, and say can we - -17 -00:00:43,850 --> 00:00:47,060 -change the program to make the addition simple, that has maintainability or - -18 -00:00:47,060 --> 00:00:50,220 -we can do it after adding some code to our code base. - -19 -00:00:50,220 --> 00:00:52,730 -We might look at the code, the resulting code, and say well - -20 -00:00:52,730 --> 00:00:55,770 -can we make the program simpler? Was the running all the tests - -21 -00:00:55,770 --> 00:00:57,920 -and the key point here is that we don't want to refactor on - -22 -00:00:57,920 --> 00:01:01,580 -speculation, but we want to refactor on demand, on the system, and the - -23 -00:01:01,580 --> 00:01:04,840 -process needed. Again the goal is just to keep the code simple - -24 -00:01:04,840 --> 00:01:07,680 -and maintainable, not to over do it. And as I mentioned before - -25 -00:01:07,680 --> 00:01:10,810 -we're going to have a whole lesson, the next lesson on refactoring. So - -26 -00:01:10,810 --> 00:01:13,470 -we're going to go in more depth in the discussion of this topic. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/11 - Pair Programming - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/11 - Pair Programming - lang_en_vs4.srt deleted file mode 100644 index ad48828..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/11 - Pair Programming - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,530 -The next practice I want to discuss is a very important one - -2 -00:00:02,530 --> 00:00:05,750 -in XP, and also one of the scandal, controversial, and it's - -3 -00:00:05,750 --> 00:00:08,390 -the practice of pair programming. What does it mean? It means - -4 -00:00:08,390 --> 00:00:11,790 -that all production code is written with two people looking at one - -5 -00:00:11,790 --> 00:00:15,170 -machine. And not that they're, they're working with one keyboard and - -6 -00:00:15,170 --> 00:00:18,450 -one mouse or they're not just interfering and writing on each other's - -7 -00:00:18,450 --> 00:00:20,920 -code. And the way in which that happens is by playing - -8 -00:00:20,920 --> 00:00:25,180 -different roles at different times. So the two developers alternate between the - -9 -00:00:25,180 --> 00:00:29,080 -role of programming and strategizing, where strategizing means, for example, - -10 -00:00:29,080 --> 00:00:31,660 -looking at the code that has been written and thinking whether - -11 -00:00:31,660 --> 00:00:34,420 -that would work. Or what other tests that are not there - -12 -00:00:34,420 --> 00:00:37,050 -might not work, given the way the code is being written. - -13 -00:00:37,050 --> 00:00:39,300 -Or maybe looking at the code from a, you know, slightly - -14 -00:00:39,300 --> 00:00:42,380 -detached perspective and trying to figure out whether the code can - -15 -00:00:42,380 --> 00:00:46,900 -be made simpler, more maintainable, more efficient. And interestingly, there are - -16 -00:00:46,900 --> 00:00:48,440 -measurements, there are studies that - -17 -00:00:48,440 --> 00:00:50,340 -suggest that development productivity with pair - -18 -00:00:50,340 --> 00:00:52,550 -programming is similar to that of two people - -19 -00:00:52,550 --> 00:00:55,080 -working independently. And that answers one of the - -20 -00:00:55,080 --> 00:00:57,740 -main objections against pair programming, which is why - -21 -00:00:57,740 --> 00:00:59,840 -should I put two developers together, which is - -22 -00:00:59,840 --> 00:01:01,860 -going to cut their productivity in half. It is - -23 -00:01:01,860 --> 00:01:04,390 -not. Studies shows that that does not happen. - -24 -00:01:04,390 --> 00:01:06,380 -And that the resulting code can actually benefit - -25 -00:01:06,380 --> 00:01:08,350 -from the fact that two developers are working together. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/12 - Continuous Integration - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/12 - Continuous Integration - lang_en_vs4.srt deleted file mode 100644 index d40bda6..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/12 - Continuous Integration - lang_en_vs4.srt +++ /dev/null @@ -1,111 +0,0 @@ -1 -00:00:00,280 --> 00:00:02,980 -An important practice to get all of this to work is - -2 -00:00:02,980 --> 00:00:05,230 -continuous integration, which means integrating and - -3 -00:00:05,230 --> 00:00:06,770 -testing every few hours, or a - -4 -00:00:06,770 --> 00:00:10,390 -day at most, because we don't want problems to pile up and - -5 -00:00:10,390 --> 00:00:13,060 -to be discovered too late when there are too many of them - -6 -00:00:13,060 --> 00:00:16,020 -to fix. So what goes on here is a cycle. And the - -7 -00:00:16,020 --> 00:00:19,380 -cycle starts with the developer's programming, as soon as the developers are - -8 -00:00:19,380 --> 00:00:22,050 -done modifying the code and they have a stable version they will - -9 -00:00:22,050 --> 00:00:25,380 -run the local tests. If the local tests fail, the developers will - -10 -00:00:25,380 --> 00:00:28,350 -go back to programming to fix their code and possibly add - -11 -00:00:28,350 --> 00:00:31,990 -new code as needed, and this cycle, mini cycle will continue - -12 -00:00:31,990 --> 00:00:35,000 -until all the local tests pass. At that point the developers - -13 -00:00:35,000 --> 00:00:37,960 -can integrate their code with the code of other developers. And they - -14 -00:00:37,960 --> 00:00:41,220 -can run test for the integrated system, and when they run - -15 -00:00:41,220 --> 00:00:44,830 -this test again there are two possibilities. The test might fail, and - -16 -00:00:44,830 --> 00:00:47,160 -if the test fails you broke it, and therefore you'll have - -17 -00:00:47,160 --> 00:00:50,710 -to fix it. So developers will have to go back and modify - -18 -00:00:50,710 --> 00:00:54,010 -the system and again going through the cycle of running the local - -19 -00:00:54,010 --> 00:00:55,900 -tests, integrating, and running the systems - -20 -00:00:55,900 --> 00:00:57,890 -tests. Conversely, if all the systems - -21 -00:00:57,890 --> 00:01:00,150 -tests pass, then at that point the code is good to go - -22 -00:01:00,150 --> 00:01:02,500 -and it is integrated into the system. And it will be the problem - -23 -00:01:02,500 --> 00:01:05,370 -of some other developers if something breaks because at the time you - -24 -00:01:05,370 --> 00:01:09,530 -integrated your code, the code was compiling, running and passing the tests - -25 -00:01:09,530 --> 00:01:12,495 -successfully. So again, if we do this every few hours or every - -26 -00:01:12,495 --> 00:01:15,740 -day, we can find problems very early, and we can avoid the situations - -27 -00:01:15,740 --> 00:01:18,105 -in which we have many different changes coming from - -28 -00:01:18,105 --> 00:01:21,290 -many different developers in a integration nightmare as a result. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/13 - On Site Customer - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/13 - On Site Customer - lang_en_vs4.srt deleted file mode 100644 index a95cc07..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/13 - On Site Customer - lang_en_vs4.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,060 --> 00:00:03,500 -The last practice I want to mention is on-site customer, and what - -2 -00:00:03,500 --> 00:00:07,590 -that means is that literally the customer is an actual member of - -3 -00:00:07,590 --> 00:00:10,310 -the team. So the customer will sit with the team and will - -4 -00:00:10,310 --> 00:00:13,546 -bring requirements to the team and discuss the requirements with them. So - -5 -00:00:13,546 --> 00:00:16,461 -the typical objection to this practice is the fact that it's just - -6 -00:00:16,461 --> 00:00:19,640 -impossible in the real world. There is no way that the customer - -7 -00:00:19,640 --> 00:00:22,550 -can have one person staying with the team all the time, and - -8 -00:00:22,550 --> 00:00:25,130 -the answer to that objection is that if the system is not - -9 -00:00:25,130 --> 00:00:28,700 -worth the time of one customer then maybe the system is not worth building. In - -10 -00:00:28,700 --> 00:00:30,530 -other words, if you're investing tons of - -11 -00:00:30,530 --> 00:00:33,440 -dollars, tons of money in building a system, - -12 -00:00:33,440 --> 00:00:36,870 -you might just as well invest a little more and have one of the people - -13 -00:00:36,870 --> 00:00:39,080 -in the customer's organization stay with the - -14 -00:00:39,080 --> 00:00:41,450 -team and be involved in the whole process. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/14 - Requirements Engineering - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/14 - Requirements Engineering - lang_en_vs4.srt deleted file mode 100644 index 7a00887..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/14 - Requirements Engineering - lang_en_vs4.srt +++ /dev/null @@ -1,139 +0,0 @@ -1 -00:00:00,210 --> 00:00:02,680 -Now that we saw what the main values and practices - -2 -00:00:02,680 --> 00:00:05,200 -of XP are, I want to go back for a minute - -3 -00:00:05,200 --> 00:00:08,800 -to discussion of requirements engineering in XP. In XP, user - -4 -00:00:08,800 --> 00:00:12,180 -requirements are expressed as scenarios or user stories, as we already - -5 -00:00:12,180 --> 00:00:15,500 -discussed. These are written by customers on cards, and what - -6 -00:00:15,500 --> 00:00:18,550 -the development team does is to take these cards, take these - -7 -00:00:18,550 --> 00:00:22,240 -users stories and break them down into implementation tasks. And - -8 -00:00:22,240 --> 00:00:25,310 -those implementation tasks are then used as a basis for scheduling - -9 -00:00:25,310 --> 00:00:29,210 -cost estimates. So given these estimates, and based on their priorities, - -10 -00:00:29,210 --> 00:00:31,770 -the customer will choose the stories that will be included in - -11 -00:00:31,770 --> 00:00:34,980 -the next release, in the next iteration. And at this point, - -12 -00:00:34,980 --> 00:00:39,220 -the corresponding cards will be taken by the developers and the, - -13 -00:00:39,220 --> 00:00:42,380 -the task will be performed, and the relative, and the corresponding - -14 -00:00:42,380 --> 00:00:44,350 -card will be developed. And just to give an idea of - -15 -00:00:44,350 --> 00:00:47,330 -the order of magnitude, if you consider a few months project, - -16 -00:00:47,330 --> 00:00:50,390 -there might be 50 to 100 user stories for a project of - -17 -00:00:50,390 --> 00:00:52,820 -that duration. So, now let me give you an example of what - -18 -00:00:52,820 --> 00:00:55,630 -the story card might look like, and I'm going to do it using - -19 -00:00:55,630 --> 00:00:58,930 -a story card for document downloading and you can really do all of - -20 -00:00:58,930 --> 00:01:00,780 -this, basically as seeing what the - -21 -00:01:00,780 --> 00:01:03,440 -scenario is, downloading and printing an article. - -22 -00:01:03,440 --> 00:01:06,590 -And it describes basically what happens when you do that, what is - -23 -00:01:06,590 --> 00:01:09,530 -the scenario. First, you select the article that you want from a displayed - -24 -00:01:09,530 --> 00:01:12,760 -list. You then have to tell the system how you will pay for - -25 -00:01:12,760 --> 00:01:15,680 -it. This can either be through a subscription, through a company account or - -26 -00:01:15,680 --> 00:01:18,670 -by credit card, and so on. So what developers do, they take - -27 -00:01:18,670 --> 00:01:22,020 -this story card, and they break it down in to development tasks. - -28 -00:01:22,020 --> 00:01:25,100 -So, here I'm showing you some examples of task cards for the - -29 -00:01:25,100 --> 00:01:28,360 -user story that we just saw. In particular I'm showing three task cards - -30 -00:01:28,360 --> 00:01:30,740 -and if we look at the third one, there is a name - -31 -00:01:30,740 --> 00:01:34,260 -for the task, which is implement payment collection. So this is the development - -32 -00:01:34,260 --> 00:01:37,600 -task that we have the perform and here, there's a description of - -33 -00:01:37,600 --> 00:01:41,240 -what that developed code should do. And notice that, you know, the task - -34 -00:01:41,240 --> 00:01:44,400 -card can even be more. explicit than this, more - -35 -00:01:44,400 --> 00:01:47,450 -specific than this, and talk about actual development tasks. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/15 - Testing Strategy - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/15 - Testing Strategy - lang_en_vs4.srt deleted file mode 100644 index af5ee6c..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/15 - Testing Strategy - lang_en_vs4.srt +++ /dev/null @@ -1,147 +0,0 @@ -1 -00:00:00,360 --> 00:00:03,320 -As you probably realized by now, at job development, it's a - -2 -00:00:03,320 --> 00:00:06,280 -lot about testing. So there is a lot of emphasis on - -3 -00:00:06,280 --> 00:00:09,420 -testing. Testing first, te, testing early. So that's the reason why - -4 -00:00:09,420 --> 00:00:12,710 -I also want to discuss what is the testing strategy in XP. - -5 -00:00:12,710 --> 00:00:14,820 -So first of all what is the basic principle? The basic - -6 -00:00:14,820 --> 00:00:18,770 -principle is that testing is Coded confidence. You write your test - -7 -00:00:18,770 --> 00:00:22,150 -cases and then you can run them anytime you want. And - -8 -00:00:22,150 --> 00:00:25,540 -if they pass, they'll give you confidence that your code is behaving - -9 -00:00:25,540 --> 00:00:27,920 -the way it's expected. If they don't pass on the other - -10 -00:00:27,920 --> 00:00:30,870 -hand, you'll know that there's something to fix. Another important concept is - -11 -00:00:30,870 --> 00:00:34,600 -that test might be isolated and automated. So both the running and - -12 -00:00:34,600 --> 00:00:37,400 -the checking of the tests has to be automated for all of - -13 -00:00:37,400 --> 00:00:39,830 -this to work. And there are two types of tests. The first - -14 -00:00:39,830 --> 00:00:43,170 -type of test is unit tests, that are created by the programmers, - -15 -00:00:43,170 --> 00:00:45,830 -and they're created by looking at the task cards. The task cards - -16 -00:00:45,830 --> 00:00:48,410 -describe what they implemented, functionality should - -17 -00:00:48,410 --> 00:00:50,740 -do, and therefore allows the developers. - -18 -00:00:50,740 --> 00:00:53,970 -The right test that can test this functionality. That can - -19 -00:00:53,970 --> 00:00:57,000 -check that the code's correctly implemented functionality. And as we - -20 -00:00:57,000 --> 00:01:00,670 -said, you should really test every meaninful feature. So, for - -21 -00:01:00,670 --> 00:01:04,250 -example, you should test every meaningful method in your classes. - -22 -00:01:04,250 --> 00:01:08,490 -You should put specific attention to possibly complex implementations, special - -23 -00:01:08,490 --> 00:01:11,100 -cases or specific problems that you might think of. while - -24 -00:01:11,100 --> 00:01:13,110 -reading the task cards. In some cases, when you do - -25 -00:01:13,110 --> 00:01:15,800 -refactoring, you might also want to write test cases specific - -26 -00:01:15,800 --> 00:01:18,300 -to that refactoring. But we'll say more about that. So this - -27 -00:01:18,300 --> 00:01:20,610 -was for the first kind of tests that are involved in - -28 -00:01:20,610 --> 00:01:23,650 -the, in the XP process. The second kind of tests are - -29 -00:01:23,650 --> 00:01:27,710 -the system tests, also called acceptance tests. And those tests involve - -30 -00:01:27,710 --> 00:01:30,920 -the customer. So basically what happens is that the customer provides - -31 -00:01:30,920 --> 00:01:33,760 -the test cases for their stores and then the development team - -32 -00:01:33,760 --> 00:01:37,630 -transforms those into actual automated tests. So these are tests created - -33 -00:01:37,630 --> 00:01:40,700 -by the developers. They run very quickly and they run very frequently. - -34 -00:01:40,700 --> 00:01:43,120 -These are tests developed with the help, with the - -35 -00:01:43,120 --> 00:01:46,170 -involvement of the customer they run longer. And run less - -36 -00:01:46,170 --> 00:01:48,710 -frequently, they run every time the system is integrated. - -37 -00:01:48,710 --> 00:01:50,890 -According to the cycle we saw a few minutes ago. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/16 - Testing Strategy Quiz - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/16 - Testing Strategy Quiz - lang_en_vs4.srt deleted file mode 100644 index c26e977..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/16 - Testing Strategy Quiz - lang_en_vs4.srt +++ /dev/null @@ -1,47 +0,0 @@ -1 -00:00:00,130 --> 00:00:02,776 -Now that we are done discussing XP Extreme Programming, I - -2 -00:00:02,776 --> 00:00:04,612 -would like to have a quiz, in which I make - -3 -00:00:04,612 --> 00:00:06,772 -sure that some of the concepts behind XP are well - -4 -00:00:06,772 --> 00:00:10,040 -understood. So, I'm going to ask you which of the following statements - -5 -00:00:10,040 --> 00:00:13,390 -about Extreme Programming are true, and here are the statements. - -6 -00:00:13,390 --> 00:00:17,700 -Because of pair programming, XP requires twice the number of developers. - -7 -00:00:17,700 --> 00:00:21,260 -In XP, code is rarely changed after being written. XP - -8 -00:00:21,260 --> 00:00:25,200 -follows the test driven development, or TDD, paradigm. The customer does - -9 -00:00:25,200 --> 00:00:27,560 -not need to provide any requirements in XP. - -10 -00:00:27,560 --> 00:00:31,120 -XP is an iterative software development process. So I - -11 -00:00:31,120 --> 00:00:32,700 -would like for you to mark all of - -12 -00:00:32,700 --> 00:00:35,020 -the statements that you think are true about XP. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/17 - Testing Strategy Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/17 - Testing Strategy Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index b60861f..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/17 - Testing Strategy Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,120 --> 00:00:02,600 -The first statement is false. It is not true - -2 -00:00:02,600 --> 00:00:04,840 -that because of pair programming, we need twice as many - -3 -00:00:04,840 --> 00:00:08,039 -developers. In fact that there is some evidence that even - -4 -00:00:08,039 --> 00:00:11,700 -though in pair programming we have two developers working together, - -5 -00:00:11,700 --> 00:00:15,175 -that the overall efficiency of the programmers is not really - -6 -00:00:15,175 --> 00:00:19,080 -affected by use of this practice. In XP, code is - -7 -00:00:19,080 --> 00:00:23,280 -rarely changed after being written. This is also definitely false. - -8 -00:00:23,280 --> 00:00:25,233 -In fact in XP there is a lot of emphasis - -9 -00:00:25,233 --> 00:00:27,879 -on change on the fact that the code can be changed, - -10 -00:00:27,879 --> 00:00:30,462 -it can be resigned, because of the fact when we do - -11 -00:00:30,462 --> 00:00:32,793 -that, we have a set of these cases that we can - -12 -00:00:32,793 --> 00:00:35,439 -use to check right away that the code still works as - -13 -00:00:35,439 --> 00:00:39,850 -expected. So again in XP, it's all about steering rather than - -14 -00:00:39,850 --> 00:00:43,430 -just driving down one fixed direction. And therefore, the code can - -15 -00:00:43,430 --> 00:00:46,580 -be changed. So this statement is false. It is definitely true - -16 -00:00:46,580 --> 00:00:50,950 -that XP follows the test driven development paradigm. In XP we first - -17 -00:00:50,950 --> 00:00:53,320 -write tests, and then we write the code, which is - -18 -00:00:53,320 --> 00:00:55,980 -exactly what TDD is about. It is not true that - -19 -00:00:55,980 --> 00:00:58,740 -the customer does not need to provide requirements in XP. - -20 -00:00:58,740 --> 00:01:02,020 -The customer does provide requirements in the form of user - -21 -00:01:02,020 --> 00:01:04,879 -stories, and the user stories are the starting point of - -22 -00:01:04,879 --> 00:01:09,370 -the development process. Finally, XP is definitely an iterative software - -23 -00:01:09,370 --> 00:01:12,500 -development process. In fact, we saw that XP is based - -24 -00:01:12,500 --> 00:01:16,100 -on subsequent iterations of the same cycle, in which we - -25 -00:01:16,100 --> 00:01:18,110 -select from a set of story cards, or user - -26 -00:01:18,110 --> 00:01:21,270 -stories, the stories that we want to implement in the - -27 -00:01:21,270 --> 00:01:24,250 -next iteration. Based on that we develop task cards, - -28 -00:01:24,250 --> 00:01:26,060 -and then we use the task cards to write this - -29 -00:01:26,060 --> 00:01:28,400 -case and then to write code. And we continue - -30 -00:01:28,400 --> 00:01:31,140 -this cycle in an iterative way until we are done - -31 -00:01:31,140 --> 00:01:33,030 -with all the story cards, and all the user - -32 -00:01:33,030 --> 00:01:36,612 -stories, so definitely XP is an iterative software development process. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/18 - Scrum Intro - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/18 - Scrum Intro - lang_en_vs4.srt deleted file mode 100644 index 4d8eab6..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/18 - Scrum Intro - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,220 --> 00:00:02,830 -Before concluding this class on java development, I want to - -2 -00:00:02,830 --> 00:00:06,330 -talk about another process that is very popular these days, and - -3 -00:00:06,330 --> 00:00:09,990 -it's used in many companies, which is called Scrum. Which similar - -4 -00:00:09,990 --> 00:00:13,370 -to XP is another agile development process, and I'm going to - -5 -00:00:13,370 --> 00:00:16,400 -start by discussing what the Scrum actors are. There's three - -6 -00:00:16,400 --> 00:00:19,490 -main kinds of actors. The first one is the product owner, - -7 -00:00:19,490 --> 00:00:22,590 -which means the customer. The product owner is mainly responsible for - -8 -00:00:22,590 --> 00:00:25,460 -the product back log, where the product back log is basically - -9 -00:00:25,460 --> 00:00:27,660 -the list of things that have to be done, the - -10 -00:00:27,660 --> 00:00:30,670 -back log in fact for the project. And that is - -11 -00:00:30,670 --> 00:00:33,640 -analogous to the user stories to be realized in XP, - -12 -00:00:33,640 --> 00:00:36,190 -that we just saw. So what the product owner does is - -13 -00:00:36,190 --> 00:00:39,310 -to clearly express these back log items, and to also - -14 -00:00:39,310 --> 00:00:42,680 -order them by value, so they can be prioritized. The second - -15 -00:00:42,680 --> 00:00:45,680 -actor is the team. The team is responsible for delivering - -16 -00:00:45,680 --> 00:00:48,012 -shippable increments to estimate the - -17 -00:00:48,012 --> 00:00:50,600 -back log items. It's normally self-organized, - -18 -00:00:50,600 --> 00:00:53,055 -consists of four to nine people, and it's what you - -19 -00:00:53,055 --> 00:00:56,180 -would consider normally as the main development team in a - -20 -00:00:56,180 --> 00:00:59,080 -project. And finally we have the Scrum master. The Scrum - -21 -00:00:59,080 --> 00:01:02,860 -master is the person who's responsible for the overall Scrum process, - -22 -00:01:02,860 --> 00:01:05,980 -so he or she has to remove obstacles, facilitate events, - -23 -00:01:05,980 --> 00:01:08,668 -helps communications, and so on. So you you can see - -24 -00:01:08,668 --> 00:01:11,013 -the Scrum master as sort of a manager or the - -25 -00:01:11,013 --> 00:01:15,059 -person who's got oversight, or the supervisor of the Scrum process. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/19 - High Level Scrum Process - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/19 - High Level Scrum Process - lang_en_vs4.srt deleted file mode 100644 index d646b4e..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/19 - High Level Scrum Process - lang_en_vs4.srt +++ /dev/null @@ -1,215 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,200 -So I want to conclude this lesson by providing a high - -2 -00:00:02,200 --> 00:00:05,790 -level view of this scrum process. The process is represented here, - -3 -00:00:05,790 --> 00:00:07,939 -and as you can see it has several components. We're going to - -4 -00:00:07,939 --> 00:00:09,860 -go through all of them one at a time. We're going to - -5 -00:00:09,860 --> 00:00:13,110 -start with a product backlog. Product backlog is the single source - -6 -00:00:13,110 --> 00:00:17,420 -of requirements, for the process. They're order by value raised priority - -7 -00:00:17,420 --> 00:00:21,110 -necessity, so that all of this characteristics can be taken into - -8 -00:00:21,110 --> 00:00:25,920 -account when selecting which backlog items to consider for the next iteration. - -9 -00:00:25,920 --> 00:00:28,710 -It's a living list in the sense that backlog items - -10 -00:00:28,710 --> 00:00:31,020 -can be added or removed. And it's not really defined - -11 -00:00:31,020 --> 00:00:33,200 -as we just said, by the product owner. In the - -12 -00:00:33,200 --> 00:00:36,260 -sprint planning, what happens is that the next increment or - -13 -00:00:36,260 --> 00:00:40,180 -the next sprint is defined. So basically, the backlog items - -14 -00:00:40,180 --> 00:00:43,348 -of interest are selected based on the characteristics we just - -15 -00:00:43,348 --> 00:00:46,890 -mentioned: value, [UNKNOWN], priority, and necessity. And the items are - -16 -00:00:46,890 --> 00:00:50,950 -converted into tasks and estimated. So the result is this sprint - -17 -00:00:50,950 --> 00:00:54,240 -backlog, which is the set of backlog items that will - -18 -00:00:54,240 --> 00:00:57,650 -be completed during the next sprint. The sprint is an actual - -19 -00:00:57,650 --> 00:01:01,040 -iteration of this scrum process. It's got a main part - -20 -00:01:01,040 --> 00:01:04,730 -that lasts two to four weeks, and within this main part, - -21 -00:01:04,730 --> 00:01:08,150 -there are many daily scrums that last 24 hours. So - -22 -00:01:08,150 --> 00:01:11,260 -let's see how this work. A daily scrum is typically characterized - -23 -00:01:11,260 --> 00:01:13,960 -by a 50-minute meeting at the beginning of the day - -24 -00:01:13,960 --> 00:01:16,220 -for the team to sync, and what happens during the meeting - -25 -00:01:16,220 --> 00:01:19,010 -is that there is a discussion of the accomplishments since - -26 -00:01:19,010 --> 00:01:21,210 -the last meeting. A to do list for the next - -27 -00:01:21,210 --> 00:01:24,210 -meeting is produced, and there is also an obstacle analysis. - -28 -00:01:24,210 --> 00:01:27,690 -So if some problem appear, they're discussing the daily scrum, and - -29 -00:01:27,690 --> 00:01:30,905 -possible solutions are proposed. At the end of the two - -30 -00:01:30,905 --> 00:01:34,840 -four-week cycle, there is a sprint review and retrospective. The sprint - -31 -00:01:34,840 --> 00:01:37,440 -review normally consists of a four hour meeting. In the - -32 -00:01:37,440 --> 00:01:41,270 -meeting, the product owner assesses the accomplishment for the specific sprint, - -33 -00:01:41,270 --> 00:01:44,020 -and the team discusses issues that were encountered and solved. - -34 -00:01:44,020 --> 00:01:46,530 -There is typically a demo of the deliverable for that - -35 -00:01:46,530 --> 00:01:48,810 -sprint. And at that point, the product owner will also - -36 -00:01:48,810 --> 00:01:52,610 -discuss the backlogs. And together with the team they will decide - -37 -00:01:52,610 --> 00:01:56,230 -what to do next. In the retrospective conversely what happens - -38 -00:01:56,230 --> 00:01:59,140 -is there is more focus on the process. So the - -39 -00:01:59,140 --> 00:02:02,010 -goal of that part of the meeting is discussing possible - -40 -00:02:02,010 --> 00:02:04,850 -process improvements. To identify them - -41 -00:02:04,850 --> 00:02:07,140 -and if promising improvements are identified - -42 -00:02:07,140 --> 00:02:10,810 -try to plan how to implement those improvements and use them - -43 -00:02:10,810 --> 00:02:13,790 -in the next iterations. And something else that might happen at - -44 -00:02:13,790 --> 00:02:16,720 -the end of a sprint is that if the product increment - -45 -00:02:16,720 --> 00:02:19,210 -is good enough as it reach the state in which it - -46 -00:02:19,210 --> 00:02:22,660 -can be actually shipped that will result in a release that - -47 -00:02:22,660 --> 00:02:25,730 -is not just internal. To show the product owner the progress - -48 -00:02:25,730 --> 00:02:28,510 -that can also be deployed and actually used in production. So - -49 -00:02:28,510 --> 00:02:32,650 -one final consideration is that as you can see, XP and scrum - -50 -00:02:32,650 --> 00:02:35,340 -are fairly similar, and that's because they're both agile development - -51 -00:02:35,340 --> 00:02:37,930 -processes. So the main thing to keep in mind is that - -52 -00:02:37,930 --> 00:02:40,620 -they both implement and enforce - -53 -00:02:40,620 --> 00:02:44,380 -those ideas, values, practices, and characteristics - -54 -00:02:44,380 --> 00:02:47,600 -that we saw when we discussed agile development process in general. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/2 - Cost of Change - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/2 - Cost of Change - lang_en_vs4.srt deleted file mode 100644 index 3b5a261..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/2 - Cost of Change - lang_en_vs4.srt +++ /dev/null @@ -1,207 +0,0 @@ -1 -00:00:00,290 --> 00:00:03,500 -We will start our discussion about test written and development by going - -2 -00:00:03,500 --> 00:00:06,790 -back to a softer life cycle to examine a little bit ago - -3 -00:00:06,790 --> 00:00:09,460 -which is the waterfall life cycle. And if you remember, that was - -4 -00:00:09,460 --> 00:00:12,980 -a totally rigid process in which we were preparing documents and we - -5 -00:00:12,980 --> 00:00:16,570 -were not studying any phase before the previous one was finished. And - -6 -00:00:16,570 --> 00:00:19,710 -once a phase was finished, we were really going back to it. - -7 -00:00:19,710 --> 00:00:22,110 -So today we are going to examine how it is possible to go - -8 -00:00:22,110 --> 00:00:25,320 -from such a rigid process to an agile one, in which we can - -9 -00:00:25,320 --> 00:00:27,800 -better deal with changes. So remember what we saw in the - -10 -00:00:27,800 --> 00:00:31,510 -first lesson when Barry Boehm stated that the cost of change - -11 -00:00:31,510 --> 00:00:35,830 -grows exponentially with time. So if we imagine to have time - -12 -00:00:35,830 --> 00:00:39,400 -over here on the x-axis and cost on the y-axis, we - -13 -00:00:39,400 --> 00:00:41,650 -can see the cost that will go up more or less - -14 -00:00:41,650 --> 00:00:44,325 -this way. And what that means is finding a problem while - -15 -00:00:44,325 --> 00:00:47,890 -collecting requirements will cost you much less than finding a problem - -16 -00:00:47,890 --> 00:00:50,830 -in the analysis phase, which in turn, will cost you less - -17 -00:00:50,830 --> 00:00:53,130 -than finding a problem during design, and so on for - -18 -00:00:53,130 --> 00:00:56,110 -the subsequent phases. So if this is the case, and cost - -19 -00:00:56,110 --> 00:00:59,450 -is really growing this fast as we proceed in our process, - -20 -00:00:59,450 --> 00:01:01,530 -what should we do? The key thing is to discover errors - -21 -00:01:01,530 --> 00:01:04,700 -early before they become expensive, which in turn means doing a - -22 -00:01:04,700 --> 00:01:09,420 -lot of upfront planning. And because models are cheaper to modify - -23 -00:01:09,420 --> 00:01:13,150 -in code, we're willing to make large investments in upfront analysis - -24 -00:01:13,150 --> 00:01:16,150 -and design models. And only after we have built and checked - -25 -00:01:16,150 --> 00:01:18,750 -these models, we're going to go ahead and build the code. In - -26 -00:01:18,750 --> 00:01:20,178 -other words, we are following - -27 -00:01:20,178 --> 00:01:23,140 -a waterfall mentality. However, something definitely - -28 -00:01:23,140 --> 00:01:26,510 -changed in the last 30 years. For example, 30 years ago, - -29 -00:01:26,510 --> 00:01:28,770 -we needed to walk down the hall, submit a deck of - -30 -00:01:28,770 --> 00:01:31,490 -cards to an operator, and wait a day for our program - -31 -00:01:31,490 --> 00:01:34,280 -to run and produce some results. Today we can leverage the - -32 -00:01:34,280 --> 00:01:37,820 -computational power of the cloud. Computers used to be very slow - -33 -00:01:37,820 --> 00:01:42,322 -and very expensive. Today, computer are a thousand times faster and - -34 -00:01:42,322 --> 00:01:44,380 -a thousand times cheaper than what they used to be. In - -35 -00:01:44,380 --> 00:01:47,530 -particular, if you think about the compile and test cycle, that has - -36 -00:01:47,530 --> 00:01:51,110 -gone from days to seconds. Now we can change our code, compile - -37 -00:01:51,110 --> 00:01:54,460 -it, run it our tests, all in a matter of instants, something - -38 -00:01:54,460 --> 00:01:57,660 -that was unthinkable before. Finally, developers in the past had to - -39 -00:01:57,660 --> 00:02:01,380 -do a lot of tasks manually in a very time-consuming way and - -40 -00:02:01,380 --> 00:02:04,220 -often in a very painful way. Today, on the contrary, we can - -41 -00:02:04,220 --> 00:02:07,540 -now automate a lot of these tasks. We have high level programming - -42 -00:02:07,540 --> 00:02:11,890 -languages, version control systems, smart ideas. Basically a whole set of tools - -43 -00:02:11,890 --> 00:02:15,110 -that can help developers. And they can make them more efficient. In - -44 -00:02:15,110 --> 00:02:18,440 -general, what that means is, it's easy to change, much easier than - -45 -00:02:18,440 --> 00:02:21,310 -what it was before. So maybe if we take all that into account, - -46 -00:02:21,310 --> 00:02:23,430 -the cost of change can be flat. So if we go back - -47 -00:02:23,430 --> 00:02:26,580 -to our diagram, the one in which we showed the cost with - -48 -00:02:26,580 --> 00:02:29,930 -respect to the project time, maybe instead of having this kind of - -49 -00:02:29,930 --> 00:02:32,740 -curve, we might have a different kind of curve. Maybe the curve is - -50 -00:02:32,740 --> 00:02:36,020 -more like this one. So maybe we can make all of this happen, as long as - -51 -00:02:36,020 --> 00:02:38,440 -we use tools, practices and principles in the - -52 -00:02:38,440 --> 00:02:40,170 -right way. And we're going to see what that means. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/3 - Agile Software Development - lang_en_vs7.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/3 - Agile Software Development - lang_en_vs7.srt deleted file mode 100644 index 38fe4c3..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/3 - Agile Software Development - lang_en_vs7.srt +++ /dev/null @@ -1,159 +0,0 @@ -1 -00:00:00,150 --> 00:00:03,250 -And assuming that cost is flat that we can really lower that - -2 -00:00:03,250 --> 00:00:06,590 -curve then teher are a few interesting consequences. First of all upfront - -3 -00:00:06,590 --> 00:00:10,330 -work becomes a liability, we pay for speculative work some of which - -4 -00:00:10,330 --> 00:00:13,320 -is likely to be wrong. Some of which we are likely to undo - -5 -00:00:13,320 --> 00:00:16,870 -and the reason for ambiguity and volability for example in requirements then - -6 -00:00:16,870 --> 00:00:19,310 -it's good to delay We don't want to plan for something that - -7 -00:00:19,310 --> 00:00:22,380 -might never happen, to invest resources in something that we might have - -8 -00:00:22,380 --> 00:00:25,170 -to throw away later on. In general, if cost is flat it is - -9 -00:00:25,170 --> 00:00:28,820 -cost effective to delay all decisions until the last possible - -10 -00:00:28,820 --> 00:00:30,990 -moment and only pay for what we use, so to - -11 -00:00:30,990 --> 00:00:34,550 -speak. In other words, there is value in waiting, time - -12 -00:00:34,550 --> 00:00:37,810 -answers questions and removes uncertainty. And we want to take advantage - -13 -00:00:37,810 --> 00:00:40,610 -of that. This and other considerations led to the birth - -14 -00:00:40,610 --> 00:00:44,590 -of Agile Softer Development. Specifically for those of you who are - -15 -00:00:44,590 --> 00:00:47,200 -interested in a little bit of history. In February 2001 - -16 -00:00:47,200 --> 00:00:50,430 -a group of software developers, 17 of them, met to discuss - -17 -00:00:50,430 --> 00:00:53,950 -lightweight development methods and published Manifesto for Agile - -18 -00:00:53,950 --> 00:00:57,630 -Software Developement. Which introduces and defines the concept of - -19 -00:00:57,630 --> 00:01:00,990 -agile software development, or agile methods. In a - -20 -00:01:00,990 --> 00:01:03,770 -nutshell, agile methods aim at flat cost and a - -21 -00:01:03,770 --> 00:01:06,190 -decrease in traditional overhead by following a set - -22 -00:01:06,190 --> 00:01:09,400 -of important principles. Our first principle is to focus - -23 -00:01:09,400 --> 00:01:11,700 -on the code, rather than the design, to avoid - -24 -00:01:11,700 --> 00:01:16,080 -unnecessary changes. Another principle is to focus on people, - -25 -00:01:16,080 --> 00:01:20,100 -value people over process, and make sure to reward people. - -26 -00:01:20,100 --> 00:01:22,990 -In addition agile methods are all based on iterative approaches to - -27 -00:01:22,990 --> 00:01:26,310 -software development, to deliver working software quickly, and to be - -28 -00:01:26,310 --> 00:01:29,230 -evolve it Just as quickly based on feedback. And feedback can - -29 -00:01:29,230 --> 00:01:31,740 -come from many sources, in particular, it'll come from the - -30 -00:01:31,740 --> 00:01:34,500 -customer, it'll be customer feedback. And to be able to do - -31 -00:01:34,500 --> 00:01:38,040 -so, agile methods need to involve the customer throughout the development - -32 -00:01:38,040 --> 00:01:41,260 -process. Finally, there are two more principles I want to mention. - -33 -00:01:41,260 --> 00:01:43,620 -Which are cornerstones of agile methods. The first - -34 -00:01:43,620 --> 00:01:46,520 -one is the expectation that requirements will change, and - -35 -00:01:46,520 --> 00:01:48,010 -therefore, we need to be able to handle some - -36 -00:01:48,010 --> 00:01:50,570 -changes. We can't count on the requirements to be - -37 -00:01:50,570 --> 00:01:52,890 -still and unmutable. And the last principle is - -38 -00:01:52,890 --> 00:01:56,430 -the mentality of simplicity. Simple design and simple code - -39 -00:01:56,430 --> 00:01:58,810 -and so on. But be careful, because simple does - -40 -00:01:58,810 --> 00:02:02,060 -not mean inadequate, but rather, as simple as possible. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/4 - Extreme Programming (XP) - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/4 - Extreme Programming (XP) - lang_en_vs4.srt deleted file mode 100644 index 62cc2fa..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/4 - Extreme Programming (XP) - lang_en_vs4.srt +++ /dev/null @@ -1,179 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,490 -So now let's talk about a specific agile method, which - -2 -00:00:02,490 --> 00:00:05,850 -is also one of the first ones, extreme programming, also called - -3 -00:00:05,850 --> 00:00:08,430 -XP. And to introduce XP, I'm going to start with - -4 -00:00:08,430 --> 00:00:12,520 -a quote. The quote says XP is a lightweight methodology for - -5 -00:00:12,520 --> 00:00:16,180 -small to medium sized teams developing software in the face - -6 -00:00:16,180 --> 00:00:19,770 -of vague or rapidly-changing requirements. And this is a quote from - -7 -00:00:19,770 --> 00:00:23,010 -Kent Beck the American Software Engineer that created extreme programming. - -8 -00:00:23,010 --> 00:00:25,630 -And by the way Beck was one of the original 17 - -9 -00:00:25,630 --> 00:00:29,570 -developers who signed the manifesto in 2001. And as you can see - -10 -00:00:29,570 --> 00:00:31,940 -we are still talking about the methodology. So we are not just - -11 -00:00:31,940 --> 00:00:35,760 -talking about going out and just start writing software. There are principles. - -12 -00:00:35,760 --> 00:00:38,130 -And there are practices that we need to follow, but we're going - -13 -00:00:38,130 --> 00:00:40,330 -to do it in a much more agile, and a much more - -14 -00:00:40,330 --> 00:00:43,720 -flexible ways than we did for our software processes. And also note - -15 -00:00:43,720 --> 00:00:45,340 -that the vague and rapidly changing - -16 -00:00:45,340 --> 00:00:47,190 -requirements are explicitly mentioned, because this - -17 -00:00:47,190 --> 00:00:51,130 -is really one of the important parts about all of this agile methodologies. - -18 -00:00:51,130 --> 00:00:54,780 -so what is XP? XP is a. Lightweight. Humanistic. - -19 -00:00:54,780 --> 00:00:58,250 -Discipline. Of software development. It is lightweight because it doesn't - -20 -00:00:58,250 --> 00:01:02,190 -overburden the developers with an invasive process. So process - -21 -00:01:02,190 --> 00:01:04,510 -is kept to a minimum. It's humanistic because as we - -22 -00:01:04,510 --> 00:01:07,760 -said, it's centered on people. People, developers, customers, are - -23 -00:01:07,760 --> 00:01:10,520 -at the center of the process. It's a discipline, as - -24 -00:01:10,520 --> 00:01:12,870 -we said, it includes practices that we to Follow. - -25 -00:01:12,870 --> 00:01:16,470 -And finally, is of course about software development. Software development - -26 -00:01:16,470 --> 00:01:19,530 -is a key point of the whole method. In XP, developing - -27 -00:01:19,530 --> 00:01:22,910 -is like driving, imagine having a road, a wind road, we need - -28 -00:01:22,910 --> 00:01:25,110 -to able to drive our car down the road, take the - -29 -00:01:25,110 --> 00:01:29,640 -abrupt turns, react promptly to changes, for example obstacles on the road. - -30 -00:01:29,640 --> 00:01:32,610 -So, in a nutshell, change is the only constant. Eyes always - -31 -00:01:32,610 --> 00:01:34,980 -have to be on the road and it's about steering and not - -32 -00:01:34,980 --> 00:01:38,110 -pointing, and XP is trying to do the same thing, while creating - -33 -00:01:38,110 --> 00:01:42,190 -softer systems. In XP we need to adopt a mentality of sufficiency, - -34 -00:01:42,190 --> 00:01:44,820 -what does that mean? How would you program if you had all - -35 -00:01:44,820 --> 00:01:48,010 -the time in the world? No time constraints at all, you will probably - -36 -00:01:48,010 --> 00:01:51,090 -write tests instead of skipping them, because there's no more resources. You - -37 -00:01:51,090 --> 00:01:53,200 -will probably restructure your code often, - -38 -00:01:53,200 --> 00:01:55,210 -because you see opportunities to improve it, - -39 -00:01:55,210 --> 00:01:57,300 -and you will take them. And you will probably talk to fellow - -40 -00:01:57,300 --> 00:02:00,910 -programmers and with the customer, interact with them, and this is actually the - -41 -00:02:00,910 --> 00:02:04,700 -kind of mentality that XP is trying to promote and agile processes - -42 -00:02:04,700 --> 00:02:07,760 -in general. And we will see that the following some of the practices - -43 -00:02:07,760 --> 00:02:11,250 -that XP is advocating, you can actually achieve these goals and you can - -44 -00:02:11,250 --> 00:02:12,840 -actually behave in this way. And the - -45 -00:02:12,840 --> 00:02:15,010 -development process is going to benefit overall. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/5 - XP's Values, Principles, and Practices - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/5 - XP's Values, Principles, and Practices - lang_en_vs4.srt deleted file mode 100644 index d12e73d..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/5 - XP's Values, Principles, and Practices - lang_en_vs4.srt +++ /dev/null @@ -1,151 +0,0 @@ -1 -00:00:00,218 --> 00:00:03,030 -Next I'm going to go over some of the XP's values - -2 -00:00:03,030 --> 00:00:05,870 -and principles that I just hinted on earlier in the lesson. - -3 -00:00:05,870 --> 00:00:08,820 -The first one, the first important value is communication. There - -4 -00:00:08,820 --> 00:00:12,350 -is no good project without good communication. And XP tries to - -5 -00:00:12,350 --> 00:00:15,470 -keep the right communication flowing and it uses several practices - -6 -00:00:15,470 --> 00:00:18,890 -to do that. It's got practices based on and require information - -7 -00:00:18,890 --> 00:00:21,950 -and in general share the information. For example, pair programming. - -8 -00:00:21,950 --> 00:00:25,140 -And we're going to say more about that. User stories, customer involvement, - -9 -00:00:25,140 --> 00:00:28,240 -all activities that help communication, - -10 -00:00:28,240 --> 00:00:30,440 -that faster communication. Another important - -11 -00:00:30,440 --> 00:00:33,420 -principle that we already saw, is simplicity. And the motto here - -12 -00:00:33,420 --> 00:00:35,680 -is live for today without worrying too much about the - -13 -00:00:35,680 --> 00:00:38,230 -future. When you have to do something, look for the simplest - -14 -00:00:38,230 --> 00:00:40,580 -thing that works. And the emphasis here is on, that - -15 -00:00:40,580 --> 00:00:43,520 -works. We want to build something simple, but not something stupid. - -16 -00:00:43,520 --> 00:00:47,090 -Feedback. That's extremely important in XP, and it occurs at - -17 -00:00:47,090 --> 00:00:50,560 -different levels, and it is used to drive changes. For example, - -18 -00:00:50,560 --> 00:00:53,910 -developers write test cases. And that's immediate feedback. If your test cases - -19 -00:00:53,910 --> 00:00:56,140 -fail, there's something wrong with the code. Or there's something that you - -20 -00:00:56,140 --> 00:00:59,690 -still haven't developed. Developers also estimate new stories right away as soon - -21 -00:00:59,690 --> 00:01:02,060 -as they get them from the customers and that's immediate feedback to - -22 -00:01:02,060 --> 00:01:05,515 -the customer. And finally, on a slightly longer time frame, customers and - -23 -00:01:05,515 --> 00:01:07,820 -tester develop together functional system test - -24 -00:01:07,820 --> 00:01:09,600 -cases to assess the overall system. - -25 -00:01:09,600 --> 00:01:12,100 -And also in this case, that's a great way to provide feedback - -26 -00:01:12,100 --> 00:01:15,850 -and by the way, also to help communication. And finally, courage, the courage - -27 -00:01:15,850 --> 00:01:18,860 -to throw away code if it doesn't work. To change it if you - -28 -00:01:18,860 --> 00:01:21,710 -find a way to improve it. To fix it if you find a problem. - -29 -00:01:21,710 --> 00:01:24,300 -To try out new things if you think that they might work better - -30 -00:01:24,300 --> 00:01:27,410 -than what you have right now. Now, that we can build and test systems - -31 -00:01:27,410 --> 00:01:30,150 -very quickly, we can be much braver than what we were before. So - -32 -00:01:30,150 --> 00:01:33,790 -how do we accomplish all that? And what are XP's practices that are going to - -33 -00:01:33,790 --> 00:01:37,750 -help us follow these principles and adhere to those values? These are some - -34 -00:01:37,750 --> 00:01:40,900 -of XP practices. There are more, but those are the ones that I'd like - -35 -00:01:40,900 --> 00:01:44,240 -to discuss in a little more depth, individually. Incremental planning, - -36 -00:01:44,240 --> 00:01:48,230 -small releases, simple design, test first, refactoring. We will actually - -37 -00:01:48,230 --> 00:01:51,680 -have a whole lesson next on refactoring. Pair programming, continuous - -38 -00:01:51,680 --> 00:01:55,240 -integration, and on-site customer. So let's start with incremental planning. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/6 - Incremental Planning - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/6 - Incremental Planning - lang_en_vs4.srt deleted file mode 100644 index faf25db..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/6 - Incremental Planning - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,140 --> 00:00:03,390 -Incremental planning is based on the idea that requirements are recorded - -2 -00:00:03,390 --> 00:00:07,260 -on story cards, sort of use cases or scenarios that the customer - -3 -00:00:07,260 --> 00:00:10,450 -provides. So the first step in incremental planning is to select - -4 -00:00:10,450 --> 00:00:14,120 -user stories for a given release, and which stories exactly to include - -5 -00:00:14,120 --> 00:00:16,975 -depends on the time available and on the priority. For example, - -6 -00:00:16,975 --> 00:00:19,147 -scenarios that we might want to realize right away because they are - -7 -00:00:19,147 --> 00:00:22,110 -particular important for the customer. After we select user stories for - -8 -00:00:22,110 --> 00:00:25,200 -the release, we break stories i to tasks. So what we do, - -9 -00:00:25,200 --> 00:00:29,260 -we take the user stories and we identify specific development tasks - -10 -00:00:29,260 --> 00:00:32,320 -that we need to perform in order to realize these stories. Once - -11 -00:00:32,320 --> 00:00:34,780 -we know our tasks, we can plan our release. And at - -12 -00:00:34,780 --> 00:00:38,050 -that point, we can develop, integrate and test our code. And of - -13 -00:00:38,050 --> 00:00:41,170 -course, this is more kind of an iterative process right here, - -14 -00:00:41,170 --> 00:00:44,250 -so we do this many times. When we're ready, when we accomplish - -15 -00:00:44,250 --> 00:00:46,990 -all of our tasks, all of our tests pass and we're happy, - -16 -00:00:46,990 --> 00:00:50,410 -we release this software. At the point, the released software is evaluated - -17 -00:00:50,410 --> 00:00:53,250 -by us, by the customer, and we can reiterate. We can - -18 -00:00:53,250 --> 00:00:56,360 -continue the process, select more stories and continue it this way. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/7 - Small Releases - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/7 - Small Releases - lang_en_vs4.srt deleted file mode 100644 index 0437621..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/7 - Small Releases - lang_en_vs4.srt +++ /dev/null @@ -1,95 +0,0 @@ -1 -00:00:00,210 --> 00:00:02,790 -The first practice that we just saw goes together with - -2 -00:00:02,790 --> 00:00:06,320 -small releases practice. This idea that instead of having a big - -3 -00:00:06,320 --> 00:00:09,390 -release at the end of a long development cycle, we try - -4 -00:00:09,390 --> 00:00:12,610 -to release very often. And there are many advantages to small - -5 -00:00:12,610 --> 00:00:15,260 -releases and to releasing often. The first one is that - -6 -00:00:15,260 --> 00:00:18,980 -we deliver real business value on a very short cycle. And - -7 -00:00:18,980 --> 00:00:22,070 -what that means is that we get business value sooner, and - -8 -00:00:22,070 --> 00:00:25,550 -that in turn increase our customer confidence and makes the customer - -9 -00:00:25,550 --> 00:00:29,040 -more happy. So more releases also mean rapid feedback. We - -10 -00:00:29,040 --> 00:00:32,420 -release the software soon, we get feedback from the customer soon, - -11 -00:00:32,420 --> 00:00:34,710 -and we can in this way do exactly what we - -12 -00:00:34,710 --> 00:00:38,510 -were saying before, steer instead of driving, adapt weekly to possible - -13 -00:00:38,510 --> 00:00:41,680 -changes in the requirements. We avoid working for six months - -14 -00:00:41,680 --> 00:00:43,970 -on a project and find out six months later that the - -15 -00:00:43,970 --> 00:00:46,950 -customer wanted something else and we got the wrong requirements. In - -16 -00:00:46,950 --> 00:00:50,610 -addition having small releases, so seeing your product deployed and released - -17 -00:00:50,610 --> 00:00:54,040 -soon produces a sense of accomplishment for the developers. - -18 -00:00:54,040 --> 00:00:57,000 -And in addition, it also reduces risk because again, - -19 -00:00:57,000 --> 00:00:58,640 -if we're going down the wrong path, we will - -20 -00:00:58,640 --> 00:01:00,730 -know right away. If we're late, we will know right - -21 -00:01:00,730 --> 00:01:03,370 -away. So these are just additional advantages of having - -22 -00:01:03,370 --> 00:01:06,140 -this quick cycle and more releases. And finally, as we - -23 -00:01:06,140 --> 00:01:09,130 -also said before, we can quickly adapt in the - -24 -00:01:09,130 --> 00:01:12,540 -case our requirements change our code to the new requirements. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/8 - Simple Design - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/8 - Simple Design - lang_en_vs4.srt deleted file mode 100644 index 3a8962c..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/8 - Simple Design - lang_en_vs4.srt +++ /dev/null @@ -1,63 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,790 -The next practice is simple design. We want to avoid - -2 -00:00:02,790 --> 00:00:07,330 -creating a huge complicated possibly cumbersome design at the beginning of - -3 -00:00:07,330 --> 00:00:09,730 -the project. What we want to have instead is just - -4 -00:00:09,730 --> 00:00:14,580 -enough design to meet the requirements, so no duplicated functionality, fewest - -5 -00:00:14,580 --> 00:00:17,910 -possible classes and methods in general, just the amount of - -6 -00:00:17,910 --> 00:00:20,860 -design that we need to get our system to work. So - -7 -00:00:20,860 --> 00:00:23,012 -one might object that to for designing that way we - -8 -00:00:23,012 --> 00:00:25,210 -will have to change the code a lot, we will need - -9 -00:00:25,210 --> 00:00:27,300 -to adapt the design as the code evolves, - -10 -00:00:27,300 --> 00:00:29,180 -and that's exactly the point. That's what we will - -11 -00:00:29,180 --> 00:00:31,670 -do. XP is all about changing and adapting, - -12 -00:00:31,670 --> 00:00:34,850 -changing your design, changing your code, refactoring. And with - -13 -00:00:34,850 --> 00:00:37,420 -the fact that we have test cases throughout - -14 -00:00:37,420 --> 00:00:39,770 -the development process, we can do that with confidence. - -15 -00:00:39,770 --> 00:00:41,220 -Because if we break something we will know - -16 -00:00:41,220 --> 00:00:43,590 -right away, which leads us to the next practice. diff --git a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/9 - Test First Development - lang_en_vs4.srt b/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/9 - Test First Development - lang_en_vs4.srt deleted file mode 100644 index b2a461b..0000000 --- a/usth/ICT2.7/P4L4 Agile Development Methods Subtitles/9 - Test First Development - lang_en_vs4.srt +++ /dev/null @@ -1,59 +0,0 @@ -1 -00:00:00,040 --> 00:00:03,610 -Which is test-first development. The key idea is that any program - -2 -00:00:03,610 --> 00:00:07,210 -feature that doesn't have an automatic test simply does not exist. If - -3 -00:00:07,210 --> 00:00:09,430 -there is a feature, you need to write a test for the - -4 -00:00:09,430 --> 00:00:13,630 -feature before. So, what developers do is to create unit tests for - -5 -00:00:13,630 --> 00:00:17,420 -each such piece of functionality even before the functionality is implemented. - -6 -00:00:17,420 --> 00:00:19,720 -And of course, when you run this test, they will fail. But - -7 -00:00:19,720 --> 00:00:22,190 -the beauty of it is that, as you write your code and - -8 -00:00:22,190 --> 00:00:25,680 -you add more and more fractionality to the feature that you're developing, - -9 -00:00:25,680 --> 00:00:27,820 -these test cases are going to start to pass. - -10 -00:00:27,820 --> 00:00:30,190 -And that's extremely rewarding because it gives you immediate - -11 -00:00:30,190 --> 00:00:32,530 -feedback, again feedback on the fact that you're - -12 -00:00:32,530 --> 00:00:34,530 -developing the code in the right way. As soon - -13 -00:00:34,530 --> 00:00:37,000 -as you write it, you will know. And if you write a piece of code and the - -14 -00:00:37,000 --> 00:00:38,550 -test says still fail, that means that the - -15 -00:00:38,550 --> 00:00:40,140 -code is not doing what it's supposed to do. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/1 - Lesson Overview - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/1 - Lesson Overview - lang_en_vs4.srt deleted file mode 100644 index bab48c0..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/1 - Lesson Overview - lang_en_vs4.srt +++ /dev/null @@ -1,71 +0,0 @@ -1 -00:00:00,140 --> 00:00:02,220 -In the previous lesson, we discussed agile - -2 -00:00:02,220 --> 00:00:05,689 -software development. Its principles and practices. And two - -3 -00:00:05,689 --> 00:00:10,060 -specific agile processes. XP and Scrub. In - -4 -00:00:10,060 --> 00:00:12,230 -this lesson, we will introduce a practice that - -5 -00:00:12,230 --> 00:00:15,020 -is of fundamental importance in the context - -6 -00:00:15,020 --> 00:00:20,120 -of agile software development. Software refactoring. Software refactoring - -7 -00:00:20,120 --> 00:00:22,030 -is the process of taking a program and - -8 -00:00:22,030 --> 00:00:25,040 -transforming it to make it better. That is, - -9 -00:00:25,040 --> 00:00:27,240 -to make it easier to understand, make it - -10 -00:00:27,240 --> 00:00:29,880 -more maintainable, and in general to improve its - -11 -00:00:29,880 --> 00:00:34,300 -design. Specifically, we will discuss what the refactoring - -12 -00:00:34,300 --> 00:00:37,680 -is and why it is important? When to perform - -13 -00:00:37,680 --> 00:00:40,980 -refactoring, and when not to perform refactoring? And - -14 -00:00:40,980 --> 00:00:44,520 -how to perform refactoring in a fully automated way, - -15 -00:00:44,520 --> 00:00:47,293 -using tools. We will also introduce the concept - -16 -00:00:47,293 --> 00:00:50,040 -of bad smells, where a bad smell, in software, - -17 -00:00:50,040 --> 00:00:53,323 -is the indication that there might be something wrong with - -18 -00:00:53,323 --> 00:00:56,890 -the code that might call for the application of refactoring. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/10 - Consolidate Conditional Expression Solution - lang_en_vs3.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/10 - Consolidate Conditional Expression Solution - lang_en_vs3.srt deleted file mode 100644 index 89f2722..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/10 - Consolidate Conditional Expression Solution - lang_en_vs3.srt +++ /dev/null @@ -1,55 +0,0 @@ -1 -00:00:00,080 --> 00:00:03,230 -So the resulting code will be like this. As you can see here, - -2 -00:00:03,230 --> 00:00:06,602 -now I don't have the conditionals any longer, but I just have a call to - -3 -00:00:06,602 --> 00:00:09,938 -this notEligibleForDisability method. And this makes the code so - -4 -00:00:09,938 --> 00:00:14,092 -much clearer, because if I just need to understand how disabilityAmount works, - -5 -00:00:14,092 --> 00:00:17,945 -I can clearly see there is an initial check that is actually checking whether - -6 -00:00:17,945 --> 00:00:22,030 -an employee's eligible for disabilities or not. And if the check is false, so - -7 -00:00:22,030 --> 00:00:26,180 -if the employee's eligible, then I'll just perform the rest of the computation. - -8 -00:00:26,180 --> 00:00:27,710 -Otherwise I'll simply return zero. - -9 -00:00:27,710 --> 00:00:30,500 -So if I don't need to understand the details of this check, - -10 -00:00:30,500 --> 00:00:33,630 -I can simply look at this method and understand it all. And if I need to look at - -11 -00:00:33,630 --> 00:00:36,990 -the details I can just go, and look at the implementation of this method, - -12 -00:00:36,990 --> 00:00:39,600 -and I will get exactly the same information that I have here. But I'm sort of - -13 -00:00:39,600 --> 00:00:43,220 -separating the concerns, and making the code overall more understandable, and - -14 -00:00:43,220 --> 00:00:46,160 -therefore more maintainable, which is the main goal of refactoring. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en-us_vs2.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en-us_vs2.srt deleted file mode 100644 index ef89eb8..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en-us_vs2.srt +++ /dev/null @@ -1,263 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,740 -Let's now see a related refactoring, which is the - -2 -00:00:02,740 --> 00:00:06,200 -decompose conditional refactoring. What happens here is that in some - -3 -00:00:06,200 --> 00:00:08,980 -cases, the complexity of the conditional logic in a program - -4 -00:00:08,980 --> 00:00:12,040 -can make a method hard to read and understand. Specifically - -5 -00:00:12,040 --> 00:00:15,760 -we might have one or more particularly complex conditional - -6 -00:00:15,760 --> 00:00:18,580 -statements. And similar to what we discussed for the previous - -7 -00:00:18,580 --> 00:00:21,630 -refactoring, the conditional, if it's too complex, might tell you - -8 -00:00:21,630 --> 00:00:25,170 -what happens, but obscure why it happens. To address this - -9 -00:00:25,170 --> 00:00:27,520 -issue, you can do a similar thing to what we did in - -10 -00:00:27,520 --> 00:00:31,800 -the previous refactoring. You can transform the condition into a method and then - -11 -00:00:31,800 --> 00:00:35,260 -replace the condition with a call to that method. And if you give - -12 -00:00:35,260 --> 00:00:37,930 -the right name to the method, as we saw in the last example, - -13 -00:00:37,930 --> 00:00:41,730 -that can make the code much clearer and much easier to understand. In - -14 -00:00:41,730 --> 00:00:44,360 -addition here you can also do something else. Let's assume that those are - -15 -00:00:44,360 --> 00:00:47,430 -the then and else part of the conditional are complex. We can do - -16 -00:00:47,430 --> 00:00:50,180 -the same thing with them. So what we can do, we can modify - -17 -00:00:50,180 --> 00:00:53,570 -the then and else part of the conditional by extracting the corresponding - -18 -00:00:53,570 --> 00:00:57,070 -code, making also that one into a method, suitably naming the method, - -19 -00:00:57,070 --> 00:00:59,930 -and then having the call to the method only in the then - -20 -00:00:59,930 --> 00:01:03,540 -and else part of the conditional statement. So let's see how that works - -21 -00:01:03,540 --> 00:01:06,940 -with an example. Here we have the matter that computes some charge. - -22 -00:01:06,940 --> 00:01:10,350 -And it computes the charge based on some corrective uses of the date - -23 -00:01:10,350 --> 00:01:12,930 -that is provided as input, or it's imagined or is just, you - -24 -00:01:12,930 --> 00:01:15,410 -know, one of the fields in the class. So as you can see, - -25 -00:01:15,410 --> 00:01:18,140 -there is a conditional here that checks that if the - -26 -00:01:18,140 --> 00:01:21,535 -dates is before the beginning of the summer, so before summer - -27 -00:01:21,535 --> 00:01:25,180 -start. Or it's after the summer end. Then it compute - -28 -00:01:25,180 --> 00:01:29,152 -the charge using some winterRate. Otherwise, if we are in the - -29 -00:01:29,152 --> 00:01:32,288 -summer, it will compute the quantity, the charge using a - -30 -00:01:32,288 --> 00:01:35,440 -summerRate. And this is just a small example, so it might - -31 -00:01:35,440 --> 00:01:37,990 -not look that complex. But, you know, just project this on - -32 -00:01:37,990 --> 00:01:40,458 -more realistic code, on larger code. You can end up with - -33 -00:01:40,458 --> 00:01:43,656 -the conditions that are hard to understand. And even in this case, even - -34 -00:01:43,656 --> 00:01:45,944 -such a small piece of code, you have to kind of look at - -35 -00:01:45,944 --> 00:01:48,752 -the conditionals, figure out what does it mean for the date to be - -36 -00:01:48,752 --> 00:01:51,800 -before the summer start and after the summer end. We can make this much - -37 -00:01:51,800 --> 00:01:54,780 -clearer. So, how can we do it? By applying this refactoring as we - -38 -00:01:54,780 --> 00:01:56,190 -described. Let's see what happens when - -39 -00:01:56,190 --> 00:01:58,380 -I apply the decompose conditionals refactoring to - -40 -00:01:58,380 --> 00:02:01,530 -this method. The first thing I will do is to take this condition, - -41 -00:02:01,530 --> 00:02:05,640 -create a method that perform exactly the same check, give it a meaningful name. - -42 -00:02:05,640 --> 00:02:09,380 -In this case I called it notSummer, which is pretty self-explanatory, and then - -43 -00:02:09,380 --> 00:02:12,340 -replacing the condition with a call to that matter. As you can see - -44 -00:02:12,340 --> 00:02:15,230 -here, there's a clear improvement in the code, because here I just need - -45 -00:02:15,230 --> 00:02:17,810 -to look at this statement and I see right away that the check. What - -46 -00:02:17,810 --> 00:02:20,680 -the check is doing is just checking whether the date is in the - -47 -00:02:20,680 --> 00:02:24,320 -summer or not. So, much easier than having to interpret this condition. And - -48 -00:02:24,320 --> 00:02:26,910 -the second thing I do is to take the code that computes the - -49 -00:02:26,910 --> 00:02:28,600 -charge and also in this case, creating - -50 -00:02:28,600 --> 00:02:31,028 -suitable methods that compute the winterCharge and - -51 -00:02:31,028 --> 00:02:34,838 -the summerCharge. And I called them exactly winterCharge and summerCharge which - -52 -00:02:34,838 --> 00:02:38,278 -again is self explanatory. And then I replace this computation with - -53 -00:02:38,278 --> 00:02:40,710 -a call to that method. So again, when I look at - -54 -00:02:40,710 --> 00:02:43,280 -this code, I can clearly see that the charge is computed - -55 -00:02:43,280 --> 00:02:46,570 -using some sort of winterCharge calculation and then using some sort - -56 -00:02:46,570 --> 00:02:50,490 -of summerCharge calculation. And if I don't want to know how - -57 -00:02:50,490 --> 00:02:52,670 -this is exactly computed, that's all I need to know to - -58 -00:02:52,670 --> 00:02:56,100 -understand what this method does. Easier and faster than looking at - -59 -00:02:56,100 --> 00:02:57,970 -this method and figuring out what it does. And if - -60 -00:02:57,970 --> 00:02:59,950 -I need to look at the details, exactly like in the - -61 -00:02:59,950 --> 00:03:01,550 -previous case, I can just go and look at the - -62 -00:03:01,550 --> 00:03:04,170 -implementation of winterCharge and summerCharge. But I will be looking at - -63 -00:03:04,170 --> 00:03:06,980 -that in its specific context. So, without having to understand - -64 -00:03:06,980 --> 00:03:09,760 -everything at once. So in this way, you make it clear - -65 -00:03:09,760 --> 00:03:12,840 -both why you're doing something, because it is notSummer, and - -66 -00:03:12,840 --> 00:03:16,300 -what exactly you're doing. You're computing a winterCharge, or a summerCharge. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en_vs8.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en_vs8.srt deleted file mode 100644 index ef89eb8..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/11 - Decompose Conditionals - lang_en_vs8.srt +++ /dev/null @@ -1,263 +0,0 @@ -1 -00:00:00,080 --> 00:00:02,740 -Let's now see a related refactoring, which is the - -2 -00:00:02,740 --> 00:00:06,200 -decompose conditional refactoring. What happens here is that in some - -3 -00:00:06,200 --> 00:00:08,980 -cases, the complexity of the conditional logic in a program - -4 -00:00:08,980 --> 00:00:12,040 -can make a method hard to read and understand. Specifically - -5 -00:00:12,040 --> 00:00:15,760 -we might have one or more particularly complex conditional - -6 -00:00:15,760 --> 00:00:18,580 -statements. And similar to what we discussed for the previous - -7 -00:00:18,580 --> 00:00:21,630 -refactoring, the conditional, if it's too complex, might tell you - -8 -00:00:21,630 --> 00:00:25,170 -what happens, but obscure why it happens. To address this - -9 -00:00:25,170 --> 00:00:27,520 -issue, you can do a similar thing to what we did in - -10 -00:00:27,520 --> 00:00:31,800 -the previous refactoring. You can transform the condition into a method and then - -11 -00:00:31,800 --> 00:00:35,260 -replace the condition with a call to that method. And if you give - -12 -00:00:35,260 --> 00:00:37,930 -the right name to the method, as we saw in the last example, - -13 -00:00:37,930 --> 00:00:41,730 -that can make the code much clearer and much easier to understand. In - -14 -00:00:41,730 --> 00:00:44,360 -addition here you can also do something else. Let's assume that those are - -15 -00:00:44,360 --> 00:00:47,430 -the then and else part of the conditional are complex. We can do - -16 -00:00:47,430 --> 00:00:50,180 -the same thing with them. So what we can do, we can modify - -17 -00:00:50,180 --> 00:00:53,570 -the then and else part of the conditional by extracting the corresponding - -18 -00:00:53,570 --> 00:00:57,070 -code, making also that one into a method, suitably naming the method, - -19 -00:00:57,070 --> 00:00:59,930 -and then having the call to the method only in the then - -20 -00:00:59,930 --> 00:01:03,540 -and else part of the conditional statement. So let's see how that works - -21 -00:01:03,540 --> 00:01:06,940 -with an example. Here we have the matter that computes some charge. - -22 -00:01:06,940 --> 00:01:10,350 -And it computes the charge based on some corrective uses of the date - -23 -00:01:10,350 --> 00:01:12,930 -that is provided as input, or it's imagined or is just, you - -24 -00:01:12,930 --> 00:01:15,410 -know, one of the fields in the class. So as you can see, - -25 -00:01:15,410 --> 00:01:18,140 -there is a conditional here that checks that if the - -26 -00:01:18,140 --> 00:01:21,535 -dates is before the beginning of the summer, so before summer - -27 -00:01:21,535 --> 00:01:25,180 -start. Or it's after the summer end. Then it compute - -28 -00:01:25,180 --> 00:01:29,152 -the charge using some winterRate. Otherwise, if we are in the - -29 -00:01:29,152 --> 00:01:32,288 -summer, it will compute the quantity, the charge using a - -30 -00:01:32,288 --> 00:01:35,440 -summerRate. And this is just a small example, so it might - -31 -00:01:35,440 --> 00:01:37,990 -not look that complex. But, you know, just project this on - -32 -00:01:37,990 --> 00:01:40,458 -more realistic code, on larger code. You can end up with - -33 -00:01:40,458 --> 00:01:43,656 -the conditions that are hard to understand. And even in this case, even - -34 -00:01:43,656 --> 00:01:45,944 -such a small piece of code, you have to kind of look at - -35 -00:01:45,944 --> 00:01:48,752 -the conditionals, figure out what does it mean for the date to be - -36 -00:01:48,752 --> 00:01:51,800 -before the summer start and after the summer end. We can make this much - -37 -00:01:51,800 --> 00:01:54,780 -clearer. So, how can we do it? By applying this refactoring as we - -38 -00:01:54,780 --> 00:01:56,190 -described. Let's see what happens when - -39 -00:01:56,190 --> 00:01:58,380 -I apply the decompose conditionals refactoring to - -40 -00:01:58,380 --> 00:02:01,530 -this method. The first thing I will do is to take this condition, - -41 -00:02:01,530 --> 00:02:05,640 -create a method that perform exactly the same check, give it a meaningful name. - -42 -00:02:05,640 --> 00:02:09,380 -In this case I called it notSummer, which is pretty self-explanatory, and then - -43 -00:02:09,380 --> 00:02:12,340 -replacing the condition with a call to that matter. As you can see - -44 -00:02:12,340 --> 00:02:15,230 -here, there's a clear improvement in the code, because here I just need - -45 -00:02:15,230 --> 00:02:17,810 -to look at this statement and I see right away that the check. What - -46 -00:02:17,810 --> 00:02:20,680 -the check is doing is just checking whether the date is in the - -47 -00:02:20,680 --> 00:02:24,320 -summer or not. So, much easier than having to interpret this condition. And - -48 -00:02:24,320 --> 00:02:26,910 -the second thing I do is to take the code that computes the - -49 -00:02:26,910 --> 00:02:28,600 -charge and also in this case, creating - -50 -00:02:28,600 --> 00:02:31,028 -suitable methods that compute the winterCharge and - -51 -00:02:31,028 --> 00:02:34,838 -the summerCharge. And I called them exactly winterCharge and summerCharge which - -52 -00:02:34,838 --> 00:02:38,278 -again is self explanatory. And then I replace this computation with - -53 -00:02:38,278 --> 00:02:40,710 -a call to that method. So again, when I look at - -54 -00:02:40,710 --> 00:02:43,280 -this code, I can clearly see that the charge is computed - -55 -00:02:43,280 --> 00:02:46,570 -using some sort of winterCharge calculation and then using some sort - -56 -00:02:46,570 --> 00:02:50,490 -of summerCharge calculation. And if I don't want to know how - -57 -00:02:50,490 --> 00:02:52,670 -this is exactly computed, that's all I need to know to - -58 -00:02:52,670 --> 00:02:56,100 -understand what this method does. Easier and faster than looking at - -59 -00:02:56,100 --> 00:02:57,970 -this method and figuring out what it does. And if - -60 -00:02:57,970 --> 00:02:59,950 -I need to look at the details, exactly like in the - -61 -00:02:59,950 --> 00:03:01,550 -previous case, I can just go and look at the - -62 -00:03:01,550 --> 00:03:04,170 -implementation of winterCharge and summerCharge. But I will be looking at - -63 -00:03:04,170 --> 00:03:06,980 -that in its specific context. So, without having to understand - -64 -00:03:06,980 --> 00:03:09,760 -everything at once. So in this way, you make it clear - -65 -00:03:09,760 --> 00:03:12,840 -both why you're doing something, because it is notSummer, and - -66 -00:03:12,840 --> 00:03:16,300 -what exactly you're doing. You're computing a winterCharge, or a summerCharge. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/12 - Extract Class - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/12 - Extract Class - lang_en_vs4.srt deleted file mode 100644 index 07c93ed..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/12 - Extract Class - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,100 --> 00:00:02,890 -We are now going to talk about the extract class refactoring. When a - -2 -00:00:02,890 --> 00:00:06,040 -softer system evolves, we might end up with classes that really do the - -3 -00:00:06,040 --> 00:00:09,210 -work of more than one class because we keep adding functionality to - -4 -00:00:09,210 --> 00:00:11,010 -the class. Therefore also they're too - -5 -00:00:11,010 --> 00:00:13,160 -big, too complicated. In particular, we might - -6 -00:00:13,160 --> 00:00:15,250 -end up with a class that is doing the work of two - -7 -00:00:15,250 --> 00:00:18,890 -classes. Typical examples are classes with many methods and quite a lot of - -8 -00:00:18,890 --> 00:00:22,520 -data, quite a lot of fields. In this case, it's normally good idea - -9 -00:00:22,520 --> 00:00:25,120 -to split the class into two, so what you will do, you will - -10 -00:00:25,120 --> 00:00:28,700 -create a new class and move there the relevant fields and methods from - -11 -00:00:28,700 --> 00:00:31,700 -the original class. So as to have two classes, each one implementing a - -12 -00:00:31,700 --> 00:00:34,900 -piece of the functionality. Let's look at an example. In this case we're - -13 -00:00:34,900 --> 00:00:38,850 -going to use a UML like representation for the class. We have this class Person - -14 -00:00:38,850 --> 00:00:41,769 -that ends up representing also a phone number. And imagine that we add - -15 -00:00:41,769 --> 00:00:44,500 -up these pieces, you know, a little bit at the time so we end - -16 -00:00:44,500 --> 00:00:47,430 -up with something that really is doing the job of the person and - -17 -00:00:47,430 --> 00:00:50,490 -of the phone number. So what we can do, we can actually do exactly - -18 -00:00:50,490 --> 00:00:52,650 -what we described here. We split this class - -19 -00:00:52,650 --> 00:00:55,470 -into a Person class, and the Phone Number class. - -20 -00:00:55,470 --> 00:00:57,440 -And then we establish a use relation, so we - -21 -00:00:57,440 --> 00:00:59,470 -have a reference of the phone number class into - -22 -00:00:59,470 --> 00:01:01,960 -this class. And by separating the telephone number behavior - -23 -00:01:01,960 --> 00:01:04,680 -into its own class, I once more improved the - -24 -00:01:04,680 --> 00:01:06,980 -structure of the code, because now I have classes - -25 -00:01:06,980 --> 00:01:09,070 -that are more cohesive, and do exactly one thing. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/13 - Inline Class - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/13 - Inline Class - lang_en_vs4.srt deleted file mode 100644 index a7f7f2f..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/13 - Inline Class - lang_en_vs4.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,150 --> 00:00:03,825 -This new refactoring called inline class is the reverse of the extract class - -2 -00:00:03,825 --> 00:00:06,700 -refactoring. And know that this is kind of a general situation in the - -3 -00:00:06,700 --> 00:00:09,500 -sense that it is often the case that the refactoring also has a - -4 -00:00:09,500 --> 00:00:11,480 -reverse refactoring that does exactly the - -5 -00:00:11,480 --> 00:00:13,202 -opposite. So basically, un-dos, in a sense, - -6 -00:00:13,202 --> 00:00:16,830 -the operation of the other refactoring. In this case, the motivation for the - -7 -00:00:16,830 --> 00:00:19,760 -refactoring is that during system evolution, we might end up with one or - -8 -00:00:19,760 --> 00:00:22,530 -more classes that do not do much. In this case what you want - -9 -00:00:22,530 --> 00:00:25,350 -to do is to take the class that is not doing that much and - -10 -00:00:25,350 --> 00:00:28,740 -move its features into another class. And then delete the original class. - -11 -00:00:28,740 --> 00:00:31,010 -So lets use an example similar to the one we've used for - -12 -00:00:31,010 --> 00:00:34,000 -the previous refactoring to illustrate how this works. Here we have in - -13 -00:00:34,000 --> 00:00:37,750 -this case, two classes, person and office. And the person class is - -14 -00:00:37,750 --> 00:00:40,720 -using the office class, but this latter class, the office class, only - -15 -00:00:40,720 --> 00:00:44,000 -contains a phone number. So it doesn't really do that much. What - -16 -00:00:44,000 --> 00:00:47,020 -we can do is therefore to fold the office class into the - -17 -00:00:47,020 --> 00:00:50,470 -person class, by simply moving its only field into the class. And so - -18 -00:00:50,470 --> 00:00:53,260 -the result will be this person class that also contains the information - -19 -00:00:53,260 --> 00:00:56,600 -about the office number, and overall a simpler design for the code. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/14 - Extract Method - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/14 - Extract Method - lang_en_vs4.srt deleted file mode 100644 index 88769e0..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/14 - Extract Method - lang_en_vs4.srt +++ /dev/null @@ -1,163 +0,0 @@ -1 -00:00:00,060 --> 00:00:02,406 -The next re-factoring which is also the last one that we'll - -2 -00:00:02,406 --> 00:00:05,640 -see, extract method is one of the most commonly used re-factoring. As - -3 -00:00:05,640 --> 00:00:09,080 -it is applicable in many, many situations. The starting point is - -4 -00:00:09,080 --> 00:00:12,720 -a method that is too long and contains cohesive code fragments, that - -5 -00:00:12,720 --> 00:00:16,180 -really serve a single very specific purpose. So we start from - -6 -00:00:16,180 --> 00:00:19,270 -a cohesive code fragment in a large method. What we can do - -7 -00:00:19,270 --> 00:00:22,370 -in this case, is to create a method using that code fragment. - -8 -00:00:22,370 --> 00:00:25,620 -And then replacing the code fragment with a call to that method. - -9 -00:00:25,620 --> 00:00:28,390 -Let's look at this with an example. Here over this method called - -10 -00:00:28,390 --> 00:00:31,070 -print owing, and what it does, imagine that it does a lot - -11 -00:00:31,070 --> 00:00:33,850 -of operations here that I'm just not listing, and then it's got - -12 -00:00:33,850 --> 00:00:37,620 -a set of print statements. That are just printing a lot of details - -13 -00:00:37,620 --> 00:00:41,280 -about the owing information. And then again, a lot of code after - -14 -00:00:41,280 --> 00:00:44,270 -that. So what I could do in this case to simplify. The - -15 -00:00:44,270 --> 00:00:47,940 -method is to transform this set of statements. They are cohesive in - -16 -00:00:47,940 --> 00:00:51,120 -the sense that they do just one thing, they just print these details - -17 -00:00:51,120 --> 00:00:53,890 -into a method, and then I had, replace the statements with a - -18 -00:00:53,890 --> 00:00:56,740 -call to that method. Which is actually something similar to what we did - -19 -00:00:56,740 --> 00:00:59,900 -as part of some the previous re-factoring's. Here I'm showing the result. - -20 -00:00:59,900 --> 00:01:02,770 -So here is the method that I extracted. As you can see. It - -21 -00:01:02,770 --> 00:01:05,790 -contains the code that was previously here. I give you the meaningful - -22 -00:01:05,790 --> 00:01:09,080 -name, I called it printDetails so it's clear what it does. And now - -23 -00:01:09,080 --> 00:01:12,820 -the print owning method is simpler. Because I still have the remaining code - -24 -00:01:12,820 --> 00:01:17,200 -the one I didn't touch. But now this potentially long list of details. - -25 -00:01:17,200 --> 00:01:20,560 -Of prints, of details is not replaced by a single method code. - -26 -00:01:20,560 --> 00:01:23,550 -So a gain similar to the previous refactorings that we saw. If - -27 -00:01:23,550 --> 00:01:26,370 -we just look at the printing method, it's very easy to figure - -28 -00:01:26,370 --> 00:01:29,490 -out what this part does. Oh, print some details. And once more I - -29 -00:01:29,490 --> 00:01:33,060 -really want to stress this. If you don't care about how, this - -30 -00:01:33,060 --> 00:01:36,350 -is implemented and knowing that this print some details is enough. Then - -31 -00:01:36,350 --> 00:01:38,980 -you're done. You don't need to understand anything more. It's clear, it's - -32 -00:01:38,980 --> 00:01:42,430 -self explanatory. And if you'll need to look at what print details does, - -33 -00:01:42,430 --> 00:01:44,390 -you just go and look at print details. And you look at - -34 -00:01:44,390 --> 00:01:47,280 -it in isolation. So it's easier to understand what this does without having - -35 -00:01:47,280 --> 00:01:49,640 -to think the rest of the code. So once more the color we - -36 -00:01:49,640 --> 00:01:52,740 -factor in is just to improve your design, made the code more readable - -37 -00:01:52,740 --> 00:01:56,020 -Make the code more maintainable. And also keep in mind all of these, - -38 -00:01:56,020 --> 00:01:59,080 -are kind of small examples. You also always have to think about the - -39 -00:01:59,080 --> 00:02:02,560 -effect that this can have on larger codebases. It can really improve a - -40 -00:02:02,560 --> 00:02:05,280 -lot. The understandabililty, and maintainability of - -41 -00:02:05,280 --> 00:02:07,220 -your code. So in general, it's design. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt deleted file mode 100644 index 0559c88..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt +++ /dev/null @@ -1,599 +0,0 @@ -1 -00:00:00,090 --> 00:00:03,110 -So now we saw, this set of re-factoring's. They're nice, but - -2 -00:00:03,110 --> 00:00:06,260 -how can we actually perform re-factoring's? In some cases you'll have to - -3 -00:00:06,260 --> 00:00:08,430 -do it by hand. And you'll do it in that case in - -4 -00:00:08,430 --> 00:00:10,880 -small steps, so that you can check at every step that you - -5 -00:00:10,880 --> 00:00:14,180 -didn't introduce any area. But there's also many cases in which at - -6 -00:00:14,180 --> 00:00:17,640 -least for the more standard re-factoring's, you can just apply, you can - -7 -00:00:17,640 --> 00:00:21,530 -just use a tool that actually supports re-factoring. I'm going to show - -8 -00:00:21,530 --> 00:00:24,550 -you how that works, into a specific ID, Eclipse through a demo. - -9 -00:00:26,120 --> 00:00:28,425 -To show you how Eclipse, can help in performing - -10 -00:00:28,425 --> 00:00:31,880 -re-factoring, in an automated way, I just opened the Eclipse - -11 -00:00:31,880 --> 00:00:35,050 -editor and I maximized it. So that we can look - -12 -00:00:35,050 --> 00:00:36,810 -at the code more clearly. And as you can see - -13 -00:00:36,810 --> 00:00:39,551 -here, I have this class. It's called Re-factorable, it's a - -14 -00:00:39,551 --> 00:00:43,550 -pretty indicative name. And what we're going to do, we're going to - -15 -00:00:43,550 --> 00:00:47,840 -try to apply the extract method re-factoring to this class. - -16 -00:00:47,840 --> 00:00:51,060 -And in particular, to parts of this print owing method. - -17 -00:00:51,060 --> 00:00:54,090 -So this is a matter than will print owing's, - -18 -00:00:54,090 --> 00:00:56,160 -as the name says. And it will do several things - -19 -00:00:56,160 --> 00:00:59,180 -such as, for example, printing a banner first, then - -20 -00:00:59,180 --> 00:01:03,650 -calculating the outstanding debts, and then printing some details. So - -21 -00:01:03,650 --> 00:01:06,980 -the starting point for an extract method re-fractoring, is - -22 -00:01:06,980 --> 00:01:10,650 -the identification of some cohesive code fragment. And here, for - -23 -00:01:10,650 --> 00:01:12,970 -instance, we can see that, if we can see there, - -24 -00:01:12,970 --> 00:01:16,350 -these three print statements. They are basically printing some banner, - -25 -00:01:16,350 --> 00:01:18,530 -for the method. And I also put a comment here - -26 -00:01:18,530 --> 00:01:21,160 -just to make that even more explicit. So this is a - -27 -00:01:21,160 --> 00:01:23,970 -perfect case in which we might want to just extract - -28 -00:01:23,970 --> 00:01:27,220 -this part, create an independent method, so that we can make - -29 -00:01:27,220 --> 00:01:31,410 -the code more readable and maintainable. So I select, the - -30 -00:01:31,410 --> 00:01:33,320 -part of the code, that I want to put in my - -31 -00:01:33,320 --> 00:01:37,080 -method. I invoke the contextual menu, and as you can see - -32 -00:01:37,080 --> 00:01:41,287 -there is a re-factor entry here. Here are some re-factoring's [UNKNOWN], - -33 -00:01:41,287 --> 00:01:45,039 -re-factoring's that I can apply, and I'm going to select extract - -34 -00:01:45,039 --> 00:01:48,120 -method. When I do that, Eclipse is going to ask me to - -35 -00:01:48,120 --> 00:01:51,610 -specify a method name. I'll just call this one print - -36 -00:01:51,610 --> 00:01:54,260 -banner. And as you can see, as soon as I do - -37 -00:01:54,260 --> 00:01:57,310 -that, Eclipse will show me the preview, for the method - -38 -00:01:57,310 --> 00:02:01,010 -that will be generated. I'm going to leave the access modifier. To - -39 -00:02:01,010 --> 00:02:03,290 -public and I'm not going to change anything else. So, - -40 -00:02:03,290 --> 00:02:07,760 -now when I click Ok. As you can see Eclipse modified - -41 -00:02:07,760 --> 00:02:10,669 -my code so that now I have the Print Banner method - -42 -00:02:10,669 --> 00:02:14,050 -down here that does exactly what that piece of code was doing - -43 -00:02:14,050 --> 00:02:16,090 -before. And I just have an invocation of the Print Banner - -44 -00:02:16,090 --> 00:02:19,440 -method, up here, where the code was before. And of course, this - -45 -00:02:19,440 --> 00:02:21,830 -is something that we could have done by hand. It's pretty - -46 -00:02:21,830 --> 00:02:25,480 -easy to do, but it's even easier, to do it using Eclipse's - -47 -00:02:25,480 --> 00:02:29,040 -capabilities. And this will become even more apparent, when we consider slightly - -48 -00:02:29,040 --> 00:02:32,866 -more complex case. So here, if we look at this piece of - -49 -00:02:32,866 --> 00:02:35,234 -code for instance, we can that see this code - -50 -00:02:35,234 --> 00:02:38,264 -prints some details, about the always. And the reason - -51 -00:02:38,264 --> 00:02:41,351 -why this case is likely more complicated, is because - -52 -00:02:41,351 --> 00:02:45,210 -this code needs to know about the value of outstanding. - -53 -00:02:45,210 --> 00:02:49,130 -And whereas that underscore name, is a member of - -54 -00:02:49,130 --> 00:02:51,150 -the class, and therefore will be available to the - -55 -00:02:51,150 --> 00:02:55,110 -method. Outstanding is a locker variable, so a method - -56 -00:02:55,110 --> 00:02:58,310 -different from print, oh it wouldn't know anything about outstanding. - -57 -00:02:58,310 --> 00:03:00,070 -So let's see what happens when we try to apply - -58 -00:03:00,070 --> 00:03:03,460 -a re-factoring for this code. So we go again here - -59 -00:03:03,460 --> 00:03:06,410 -to the re-factor menu, we select extract method, we will - -60 -00:03:06,410 --> 00:03:10,080 -pick a name again. So let's call it [SOUND] print details, - -61 -00:03:10,080 --> 00:03:12,660 -since this is what the code does. And as you - -62 -00:03:12,660 --> 00:03:17,270 -can see here, Eclipse was able to figure out, that outstanding - -63 -00:03:17,270 --> 00:03:20,290 -has to be a parameter, of this method. So if - -64 -00:03:20,290 --> 00:03:23,340 -you look at the signature here, this will be very clear. - -65 -00:03:23,340 --> 00:03:26,270 -So outstanding has to be passed to the matter because - -66 -00:03:26,270 --> 00:03:29,230 -it's a locker variable of the print owing method. so - -67 -00:03:29,230 --> 00:03:32,600 -it will not be visible to the other methods otherwise. - -68 -00:03:32,600 --> 00:03:34,990 -So since eclipse figured it out, all I have to do, - -69 -00:03:34,990 --> 00:03:37,630 -is to press Ok. And at this point what I - -70 -00:03:37,630 --> 00:03:41,280 -will have here is my new method, for in details - -71 -00:03:41,280 --> 00:03:45,140 -that takes outstanding as a parameter. And does exactly what - -72 -00:03:45,140 --> 00:03:48,880 -the code was doing before. And here, where the code was, - -73 -00:03:48,880 --> 00:03:51,630 -I will have my print details invocation, with outstanding - -74 -00:03:51,630 --> 00:03:54,930 -as a parameter. So now, let's continue to extract methods. - -75 -00:03:54,930 --> 00:03:58,470 -And let's look at a even more complex case. which - -76 -00:03:58,470 --> 00:04:01,550 -is, the one involving this piece of code. So this - -77 -00:04:01,550 --> 00:04:03,900 -piece of code, as you can see, will calculate - -78 -00:04:03,900 --> 00:04:07,820 -the value of the outstanding debt. Will calculate the owing's, - -79 -00:04:07,820 --> 00:04:09,600 -and the way in which it does that, is by - -80 -00:04:09,600 --> 00:04:14,080 -considering all the orders, that are part of this enumeration. - -81 -00:04:14,080 --> 00:04:16,519 -That is the declared here, and it will - -82 -00:04:16,519 --> 00:04:20,769 -compute for each one, of these orders, the amount, - -83 -00:04:20,769 --> 00:04:23,520 -and then added to outstanding. So what is the - -84 -00:04:23,520 --> 00:04:26,160 -additional complication here? Well, the additional complication here is - -85 -00:04:26,160 --> 00:04:29,520 -that this code needs to know, not only - -86 -00:04:29,520 --> 00:04:33,220 -about outstanding. It also needs to know, about this - -87 -00:04:33,220 --> 00:04:36,160 -enumeration, because this one is also a local variable. - -88 -00:04:36,160 --> 00:04:39,140 -And in addition to that, this code also has - -89 -00:04:39,140 --> 00:04:43,280 -some side effects. So outstanding, is modified as a - -90 -00:04:43,280 --> 00:04:46,600 -consequence of the execution of this code. So how can - -91 -00:04:46,600 --> 00:04:49,120 -we do that in the extracted method? Well lets - -92 -00:04:49,120 --> 00:04:51,000 -see what the clips will do and what the clips - -93 -00:04:51,000 --> 00:04:53,950 -will suggest. It will try to again re-factor this - -94 -00:04:53,950 --> 00:04:58,030 -code and extract the method. In this case as you - -95 -00:04:58,030 --> 00:05:01,160 -can see. The clips does two things. First of all, - -96 -00:05:01,160 --> 00:05:04,180 -it figures out as before, that there are some parameters, - -97 -00:05:04,180 --> 00:05:07,650 -that are needed for this method to operate correctly. The - -98 -00:05:07,650 --> 00:05:11,600 -enumeration e, as we said, and the outstanding variable. In - -99 -00:05:11,600 --> 00:05:14,880 -addition, if you look at the method signature Eclipse will - -100 -00:05:14,880 --> 00:05:17,490 -also figure out that this method has to return, a - -101 -00:05:17,490 --> 00:05:21,530 -double value. So what does this value correspond to? This - -102 -00:05:21,530 --> 00:05:24,700 -value corresponds to a new value of outstanding. So if - -103 -00:05:24,700 --> 00:05:27,490 -we, give a name to this method, so we just - -104 -00:05:27,490 --> 00:05:29,620 -use the name, [SOUND] that I put in the comment - -105 -00:05:29,620 --> 00:05:33,510 -over there. We click Ok, and this will create - -106 -00:05:33,510 --> 00:05:36,560 -a method by extracting the code. And here, where the - -107 -00:05:36,560 --> 00:05:39,100 -method used to be, we will have that the - -108 -00:05:39,100 --> 00:05:43,169 -value of outstanding is updated. Based on the return value - -109 -00:05:43,169 --> 00:05:46,260 -of calculate outstanding. So in the end if we - -110 -00:05:46,260 --> 00:05:48,730 -look at this code, you can see that if we - -111 -00:05:48,730 --> 00:05:51,980 -just focus, on this code it's very easy to - -112 -00:05:51,980 --> 00:05:55,150 -understand what it does. It prints the banner, it calculates - -113 -00:05:55,150 --> 00:05:59,180 -an outstanding value, and then it prints some details. And - -114 -00:05:59,180 --> 00:06:01,520 -in case we don't care, as I said before, about the - -115 -00:06:01,520 --> 00:06:04,840 -details of what these methods do, we're done. And if we - -116 -00:06:04,840 --> 00:06:07,740 -care about the details we can look at each matter individually. - -117 -00:06:07,740 --> 00:06:10,580 -And get exactly the same information that we got before, - -118 -00:06:10,580 --> 00:06:13,650 -in a sort of a separation of concerns kind of way, - -119 -00:06:13,650 --> 00:06:16,420 -by focusing on one problem at a time. So now let - -120 -00:06:16,420 --> 00:06:19,345 -me do one last thing. So let me modify the code, - -121 -00:06:19,345 --> 00:06:23,170 -slightly. So i'm going to go back, to the version of - -122 -00:06:23,170 --> 00:06:25,610 -the code before re-factoring. So this is what we had. - -123 -00:06:25,610 --> 00:06:32,480 -And I'm going to add, an additional variable here, [SOUND] called count, - -124 -00:06:32,480 --> 00:06:38,870 -which I initialize to zero. Here I'm going to increase, [SOUND] - -125 -00:06:38,870 --> 00:06:41,360 -the value of count at every iteration. And - -126 -00:06:41,360 --> 00:06:44,570 -finally, here I'm going to print out the value - -127 -00:06:44,570 --> 00:06:50,130 -of count. Okay, now that I have this code up. So let's imagine that I - -128 -00:06:50,130 --> 00:06:55,665 -want to, again as I did before, extract this matter. So, I'm going to - -129 -00:06:55,665 --> 00:06:58,430 -give you a second. Have a look at this and see, if you see - -130 -00:06:58,430 --> 00:07:02,170 -any problem with that. Feel free to stop the video, if you need more time. - -131 -00:07:07,350 --> 00:07:11,440 -So the problem here is that I have two side effects. - -132 -00:07:11,440 --> 00:07:14,820 -Both outstanding and count are modified. And therefore it's not really - -133 -00:07:14,820 --> 00:07:19,600 -possible to extract this method, and preserve the semantics of this - -134 -00:07:19,600 --> 00:07:23,260 -code. Let's see if Eclipse will be able to figure that out. - -135 -00:07:26,130 --> 00:07:28,950 -And it does. If we try to extract the matter here, - -136 -00:07:28,950 --> 00:07:32,250 -you'll tell us that's an ambiguous return value. The selected block - -137 -00:07:32,250 --> 00:07:35,800 -contains more than one assignment to look at variables. And the - -138 -00:07:35,800 --> 00:07:40,170 -affected variables are outstanding, just a Double and Count which is - -139 -00:07:40,170 --> 00:07:44,780 -an integer. So it will refuse to extract the method. So - -140 -00:07:44,780 --> 00:07:46,470 -at this point if we wanted to do that we have - -141 -00:07:46,470 --> 00:07:48,650 -we'll have to do the re-factoring a different way, but I - -142 -00:07:48,650 --> 00:07:51,110 -don't really want to get there. I want to conclude here, - -143 -00:07:51,110 --> 00:07:53,440 -and I hope this this little demo helped you - -144 -00:07:53,440 --> 00:07:55,310 -realize how useful it can be to use an - -145 -00:07:55,310 --> 00:07:58,270 -id that supports re-factoring that can automate this important - -146 -00:07:58,270 --> 00:08:00,160 -task. And I also encourage you to try to play - -147 -00:08:00,160 --> 00:08:03,170 -with this, and try to use different re-factoring's, on - -148 -00:08:03,170 --> 00:08:05,480 -your code. So as to get familiar with the kind - -149 -00:08:05,480 --> 00:08:08,060 -of re-factoring's that are supported by the ID. And - -150 -00:08:08,060 --> 00:08:10,800 -also with the re-factoring's themselves and how should be used. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/16 - Extract Method Refactoring Quiz - lang_en_vs5.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/16 - Extract Method Refactoring Quiz - lang_en_vs5.srt deleted file mode 100644 index 07f5e44..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/16 - Extract Method Refactoring Quiz - lang_en_vs5.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,160 --> 00:00:02,580 -After the demo I would like to have a little quiz - -2 -00:00:02,580 --> 00:00:05,430 -about the extract method refactoring. And I would like to ask you - -3 -00:00:05,430 --> 00:00:08,910 -when is it appropriate to apply the extract method refactoring. Here I - -4 -00:00:08,910 --> 00:00:11,890 -have a set of possible scenarios. First one is when there is - -5 -00:00:11,890 --> 00:00:14,730 -duplicated code in two or more methods. When a class is too - -6 -00:00:14,730 --> 00:00:17,730 -large. When the names of two classes are too similar. Or when - -7 -00:00:17,730 --> 00:00:20,840 -a method is highly coupled with a class other than the one - -8 -00:00:20,840 --> 00:00:24,370 -where it is defined. So as usual, please mark all that apply. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/17 - Extract Method Refactoring Quiz Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/17 - Extract Method Refactoring Quiz Solution - lang_en_vs4.srt deleted file mode 100644 index 6545de0..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/17 - Extract Method Refactoring Quiz Solution - lang_en_vs4.srt +++ /dev/null @@ -1,83 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,000 -The first scenario is the typical case in which it is - -2 -00:00:03,000 --> 00:00:07,040 -recommended to use the extract method refactoring, when there is duplicated code - -3 -00:00:07,040 --> 00:00:09,190 -in two or more methods and we want to take this - -4 -00:00:09,190 --> 00:00:12,420 -code and factor is out, and basically have the two methods called - -5 -00:00:12,420 --> 00:00:14,960 -a third method, which is the one we create using the - -6 -00:00:14,960 --> 00:00:18,060 -refactoring. When a class is too large, normally we don't want to - -7 -00:00:18,060 --> 00:00:21,330 -apply the extract. Extract method. Instead, in this cases, it is - -8 -00:00:21,330 --> 00:00:22,900 -usually more appropriate to use the - -9 -00:00:22,900 --> 00:00:26,420 -extract class or extract subclass refactorings. - -10 -00:00:26,420 --> 00:00:29,750 -Analogously, when the names of two classes are too similar, extracting a - -11 -00:00:29,750 --> 00:00:32,729 -method will normally not help much. And all we need to do - -12 -00:00:32,729 --> 00:00:35,810 -in case having too similar names is actually a problem. Is to - -13 -00:00:35,810 --> 00:00:39,600 -rename one of the two classes, or both, if we wish. Finally, - -14 -00:00:39,600 --> 00:00:42,530 -it is definitely appropriate to apply the extract method of refactoring in - -15 -00:00:42,530 --> 00:00:45,900 -cases in which a method is highly coupled with a class other - -16 -00:00:45,900 --> 00:00:48,330 -than the one where it is defined. In this case, which we - -17 -00:00:48,330 --> 00:00:51,740 -will discuss also later in the lesson, the extract method of refactoring - -18 -00:00:51,740 --> 00:00:55,710 -allows us to extract part of the metal to With the other class. - -19 -00:00:55,710 --> 00:00:58,690 -Then we can take the matter that we just extracted and move it - -20 -00:00:58,690 --> 00:01:01,880 -to the class where it actually belongs. So the extract method is one - -21 -00:01:01,880 --> 00:01:05,560 -of the two refactorings that it is appropriate to apply in these cases. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/18 - Refactoring Risks - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/18 - Refactoring Risks - lang_en_vs4.srt deleted file mode 100644 index 0aae00c..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/18 - Refactoring Risks - lang_en_vs4.srt +++ /dev/null @@ -1,143 +0,0 @@ -1 -00:00:00,150 --> 00:00:02,520 -Now that we saw a number of refactorings, we also saw - -2 -00:00:02,520 --> 00:00:05,950 -how refactorings can be performed automatically within an ID, I'd like - -3 -00:00:05,950 --> 00:00:09,230 -to make you aware of some risks involved with the user - -4 -00:00:09,230 --> 00:00:12,510 -refactorings. Refactorings are a very powerful tool, but you also have to - -5 -00:00:12,510 --> 00:00:15,820 -be careful, first of all when you do more complex refactorings, - -6 -00:00:15,820 --> 00:00:18,540 -you may also introduce subtle faults. What, we don't really call - -7 -00:00:18,540 --> 00:00:21,040 -regression errors. You might change something in the class. You might - -8 -00:00:21,040 --> 00:00:23,140 -think that that's a behavior preserving - -9 -00:00:23,140 --> 00:00:25,200 -transformation when considering the whole code, - -10 -00:00:25,200 --> 00:00:27,860 -and instead your change is affecting the behavior of some of the - -11 -00:00:27,860 --> 00:00:30,980 -other parts of the code. So, it's introducing a regression that will cause - -12 -00:00:30,980 --> 00:00:32,670 -some other functionality, some other piece - -13 -00:00:32,670 --> 00:00:34,320 -of functionality some other feature, to - -14 -00:00:34,320 --> 00:00:37,190 -work incorrectly. So you always have to be careful, and as we saw - -15 -00:00:37,190 --> 00:00:39,750 -at the beginning one way to avoid that is to run tests. - -16 -00:00:39,750 --> 00:00:43,080 -Every time you make a refactoring every time you change your code and - -17 -00:00:43,080 --> 00:00:46,280 -refactor your code. So is to get the least some confidence in - -18 -00:00:46,280 --> 00:00:47,540 -the fact that your refactoring is - -19 -00:00:47,540 --> 00:00:50,290 -indeed behavior preserving. Also consider the refactoring - -20 -00:00:50,290 --> 00:00:54,680 -should not. Be abused. Refactoring should be performed when it's needed. It's - -21 -00:00:54,680 --> 00:00:57,570 -useful to improve the design of your code when you see problems - -22 -00:00:57,570 --> 00:00:59,680 -with the design of the code. Shouldn't just be applied for the - -23 -00:00:59,680 --> 00:01:02,720 -final code because you can apply, for example, easily within a tool. - -24 -00:01:02,720 --> 00:01:06,030 -So be careful not over doing it when you refactor. And for - -25 -00:01:06,030 --> 00:01:08,310 -the same reason that we mentioned at the beginning, you should be - -26 -00:01:08,310 --> 00:01:10,600 -particularly careful when you're using refactoring - -27 -00:01:10,600 --> 00:01:12,290 -for systems that are in production. - -28 -00:01:12,290 --> 00:01:15,260 -Because if you introduce a problem, before the system goes in production, - -29 -00:01:15,260 --> 00:01:16,750 -then you might be able to catch it earlier, - -30 -00:01:16,750 --> 00:01:19,780 -with testing. Or before it's released. But, if you introduce - -31 -00:01:19,780 --> 00:01:21,750 -a problem for a system in production, then you have - -32 -00:01:21,750 --> 00:01:24,440 -to issue a new version of the code. You'll be - -33 -00:01:24,440 --> 00:01:26,860 -affecting, you might be affecting some users, because the code - -34 -00:01:26,860 --> 00:01:29,050 -fails on their machine. So, you have to be twice - -35 -00:01:29,050 --> 00:01:31,190 -as careful, when you are doing refactoring, when you're changing - -36 -00:01:31,190 --> 00:01:33,010 -your code for a system that is already in production. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/19 - Cost of Refactoring - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/19 - Cost of Refactoring - lang_en_vs4.srt deleted file mode 100644 index e09868d..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/19 - Cost of Refactoring - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,080 --> 00:00:03,800 -Let's also talk about the cost of refactoring. Refactoring might be - -2 -00:00:03,800 --> 00:00:06,750 -free or almost free if you're using a tool to do refactoring - -3 -00:00:06,750 --> 00:00:08,570 -as we did in our demo. But that's not always the - -4 -00:00:08,570 --> 00:00:12,530 -case. In many cases, refactoring involves quite a bit of manual work - -5 -00:00:12,530 --> 00:00:16,309 -if you're doing some manual refactoring. And how much that costs - -6 -00:00:16,309 --> 00:00:19,460 -depends on how well the operations on the source code are supported. - -7 -00:00:19,460 --> 00:00:22,379 -You might have partial support from an ID. You might have complete - -8 -00:00:22,379 --> 00:00:25,017 -support, in which case it's greater. Or you might have no support, - -9 -00:00:25,017 --> 00:00:26,879 -in which case you have to be very careful about - -10 -00:00:26,879 --> 00:00:28,888 -how you change your code and how you check that you - -11 -00:00:28,888 --> 00:00:32,030 -didn't change the behavior of the code. There's also an additional - -12 -00:00:32,030 --> 00:00:34,460 -cost associated with refactoring. Remember - -13 -00:00:34,460 --> 00:00:36,990 -that refactoring relies heavily on testing - -14 -00:00:36,990 --> 00:00:39,808 -after each small step of refactoring. So you might have - -15 -00:00:39,808 --> 00:00:43,451 -to develop test cases, specifically to check your refactoring. And even - -16 -00:00:43,451 --> 00:00:47,163 -if you have an existing test because, for example, you're working - -17 -00:00:47,163 --> 00:00:50,235 -some agile context and therefore you develop a lot of UNIX - -18 -00:00:50,235 --> 00:00:53,550 -test cases before writing your code. And therefore you have a good - -19 -00:00:53,550 --> 00:00:56,635 -regression test with it you can use every time you modify your code. - -20 -00:00:56,635 --> 00:00:59,550 -Nevertheless, when you refactor and you change your code, you might need - -21 -00:00:59,550 --> 00:01:03,255 -to update your test so it's not only the development of the test - -22 -00:01:03,255 --> 00:01:05,379 -cases but also it's maintaining the test cases. And if you have - -23 -00:01:05,379 --> 00:01:07,970 -a lot of test cases, you have to maintain more test cases. So - -24 -00:01:07,970 --> 00:01:12,460 -that's a cost that is not directly visible but can affect quite - -25 -00:01:12,460 --> 00:01:15,800 -a bit the overall cost of refactoring and the overall cost of system - -26 -00:01:15,800 --> 00:01:18,342 -development therefore. And finally, you should not - -27 -00:01:18,342 --> 00:01:21,191 -under estimate the cost of documentation maintenance. - -28 -00:01:21,191 --> 00:01:24,241 -Applying refactoring may involve changes in interfaces, - -29 -00:01:24,241 --> 00:01:26,528 -names, for example, names of classes. And - -30 -00:01:26,528 --> 00:01:29,384 -when you make this kind of changes, you might need to update the documentation, - -31 -00:01:29,384 --> 00:01:30,890 -and that's also cost. It's something that - -32 -00:01:30,890 --> 00:01:32,900 -takes effort and therefore should be considered. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/2 - Introduction - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/2 - Introduction - lang_en_vs4.srt deleted file mode 100644 index a50a2e5..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/2 - Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,127 +0,0 @@ -1 -00:00:00,090 --> 00:00:02,790 -Let me start this lesson by discussing what is refactoring. - -2 -00:00:02,790 --> 00:00:06,590 -Refactoring is the process of applying transformation or refactoring to a - -3 -00:00:06,590 --> 00:00:09,320 -program. So as to obtain a refactor program. With an - -4 -00:00:09,320 --> 00:00:12,850 -improved design but with same functionality as the original program. So - -5 -00:00:12,850 --> 00:00:15,520 -key aspect of refactoring is the fact that refactoring should - -6 -00:00:15,520 --> 00:00:18,150 -be somatic to perserving So what is the main goal of - -7 -00:00:18,150 --> 00:00:22,030 -refactoring? The goal is to keep the program readable, understandable, and - -8 -00:00:22,030 --> 00:00:25,260 -maintainable as we evolve it. And to do this by eliminating - -9 -00:00:25,260 --> 00:00:28,530 -small problems soon, so that you can avoid big trouble later. And - -10 -00:00:28,530 --> 00:00:31,750 -I want to stress once more a key feature of refactoring, which - -11 -00:00:31,750 --> 00:00:34,790 -is the fact that it is behavior per serving. But how can - -12 -00:00:34,790 --> 00:00:38,130 -we ensure that the refactoring is behavior per serving? In other words, - -13 -00:00:38,130 --> 00:00:40,980 -how can we ensure that the program does the same thing before - -14 -00:00:40,980 --> 00:00:43,560 -and after applying a refactoring. So what we would like to do - -15 -00:00:43,560 --> 00:00:47,160 -is to have some guarantee that, that happens. And unfortunately in general, - -16 -00:00:47,160 --> 00:00:50,360 -there are no guarantees. But something we can do is to test - -17 -00:00:50,360 --> 00:00:53,690 -the code. For example, we can write tests that exercise the - -18 -00:00:53,690 --> 00:00:56,390 -parts of the program affected by the refactoring, and if we're in - -19 -00:00:56,390 --> 00:00:59,430 -a [INAUDIBLE] context, we might already have plenty of test cases - -20 -00:00:59,430 --> 00:01:01,914 -that exercise that part of the code. So we might just have - -21 -00:01:01,914 --> 00:01:04,780 -to rerun the test cases after the refactoring. And in fact, - -22 -00:01:04,780 --> 00:01:07,930 -that's a very advantageous situation, and that's a very good use of - -23 -00:01:07,930 --> 00:01:10,970 -existing test cases. And I want to make sure that you remember, - -24 -00:01:10,970 --> 00:01:15,500 -and that you beware that tests provide no guarantees. Testing can only - -25 -00:01:15,500 --> 00:01:18,990 -show the presence of defects, but cannot demonstrate their absence. - -26 -00:01:18,990 --> 00:01:21,090 -So we can use testing to get confidence in our - -27 -00:01:21,090 --> 00:01:23,990 -refactorings, but we can't really guarantee that the refactorings are - -28 -00:01:23,990 --> 00:01:26,820 -behavior preserving. I'd also like to point out that for some - -29 -00:01:26,820 --> 00:01:30,100 -simple refactoring, we can use a static analysis to actually - -30 -00:01:30,100 --> 00:01:33,160 -provide these guarantees. And in fact we will see examples of - -31 -00:01:33,160 --> 00:01:37,050 -such refactorings that are incorporated into IDs and that leverage - -32 -00:01:37,050 --> 00:01:40,070 -these kinds of analysis to perform refactoring in a safe way. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/20 - When Not To Refactor - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/20 - When Not To Refactor - lang_en_vs4.srt deleted file mode 100644 index 53938de..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/20 - When Not To Refactor - lang_en_vs4.srt +++ /dev/null @@ -1,103 +0,0 @@ -1 -00:00:00,088 --> 00:00:02,860 -Now I want to conclude this discussion on refactoring by telling you - -2 -00:00:02,860 --> 00:00:07,190 -when you should not refactor. One first clear case is when - -3 -00:00:07,190 --> 00:00:10,410 -your code is broken. I want to make it very clear, refactoring - -4 -00:00:10,410 --> 00:00:13,450 -is not a way to fix your code in terms of its - -5 -00:00:13,450 --> 00:00:16,250 -functionality. It's a way to improve the design of your code. - -6 -00:00:16,250 --> 00:00:19,040 -So if your code does not compile or does not run - -7 -00:00:19,040 --> 00:00:21,780 -in a stable way, it's probably better to throw it away - -8 -00:00:21,780 --> 00:00:25,250 -and rewrite it rather then trying to refactor it. By definition refactoring - -9 -00:00:25,250 --> 00:00:26,780 -should maintain the functionality of the - -10 -00:00:26,780 --> 00:00:28,360 -system. It should be behavior preserving. - -11 -00:00:28,360 --> 00:00:31,100 -So if the code was broken before, it, it's probably going to be broken - -12 -00:00:31,100 --> 00:00:33,950 -afterwards as well. You may also want to avoid refactoring when a - -13 -00:00:33,950 --> 00:00:37,370 -deadline is close. Well, first of all, because refactoring might take a long - -14 -00:00:37,370 --> 00:00:41,360 -time and therefore might introduce risks of being late for the deadline. - -15 -00:00:41,360 --> 00:00:44,555 -And also, because of what we said before about introducing problems, you don't - -16 -00:00:44,555 --> 00:00:47,780 -want to introduce problems that might take you time to fix right before a - -17 -00:00:47,780 --> 00:00:50,660 -deadline. So if the deadline is too close, you might want to avoid - -18 -00:00:50,660 --> 00:00:54,310 -refactoring the code at that point. And finally, do not refactor if there - -19 -00:00:54,310 --> 00:00:58,430 -is no reason to. As we said before, you should refactor on demand. You - -20 -00:00:58,430 --> 00:01:00,960 -see a problem with the design of your code, with the structure of your - -21 -00:01:00,960 --> 00:01:03,790 -code, it's okay to refactor. If the code is fine, there is no reason - -22 -00:01:03,790 --> 00:01:06,470 -to refactor. I know that refactoring is fine, but you don't want to do - -23 -00:01:06,470 --> 00:01:09,280 -it all the time. The next thing I want to discuss, after discussing when - -24 -00:01:09,280 --> 00:01:12,970 -not to refactor, is when to refactor without an indication that will tell us - -25 -00:01:12,970 --> 00:01:15,820 -that it's time to refactor the code. And that leads us to the discussion - -26 -00:01:15,820 --> 00:01:17,280 -of a very interesting concept. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/21 - Bad Smells - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/21 - Bad Smells - lang_en_vs4.srt deleted file mode 100644 index 240d37b..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/21 - Bad Smells - lang_en_vs4.srt +++ /dev/null @@ -1,99 +0,0 @@ -1 -00:00:00,070 --> 00:00:03,450 -The concept of bad smells. What are bad smells? Well, we - -2 -00:00:03,450 --> 00:00:06,700 -mentioned earlier that refactoring is typically applied when there is something - -3 -00:00:06,700 --> 00:00:09,130 -that does not look right, does not feel right in the - -4 -00:00:09,130 --> 00:00:12,260 -code. And that's exactly what bad smells are. Bad smells, or - -5 -00:00:12,260 --> 00:00:15,320 -code smells if you wish, are symptoms in the code of - -6 -00:00:15,320 --> 00:00:18,868 -a program that might indicate deeper problems. So there might be - -7 -00:00:18,868 --> 00:00:21,775 -parts of my system, classes in my systems, that just don't - -8 -00:00:21,775 --> 00:00:25,309 -smell right, and it feels like there's, there might be something wrong - -9 -00:00:25,309 --> 00:00:29,010 -with them. And if you are an experienced developer just like Brad, - -10 -00:00:29,010 --> 00:00:31,320 -you'll be able to figure out there is something wrong with the - -11 -00:00:31,320 --> 00:00:33,950 -classes. You'll be able to smell that there's something wrong and you'll - -12 -00:00:33,950 --> 00:00:36,880 -do something about it. And I want to mention one more, just to make - -13 -00:00:36,880 --> 00:00:39,270 -sure that we're all on the same page here. That these bad - -14 -00:00:39,270 --> 00:00:43,070 -smells are usually not bugs and don't prevent the program from functioning. They - -15 -00:00:43,070 --> 00:00:46,190 -however indicate weaknesses in the design of the system that might cause - -16 -00:00:46,190 --> 00:00:48,480 -problems during maintenance. In other words, - -17 -00:00:48,480 --> 00:00:50,440 -they might make the code less maintainable, - -18 -00:00:50,440 --> 00:00:53,650 -harder to understand, and so on. Just like refactorings, - -19 -00:00:53,650 --> 00:00:56,610 -there's also many possible different bad smells. So what - -20 -00:00:56,610 --> 00:00:59,160 -I'm providing here is just a possible list of - -21 -00:00:59,160 --> 00:01:02,190 -some very common bad smells. And you can find plenty - -22 -00:01:02,190 --> 00:01:04,349 -of information on this online. So what I want - -23 -00:01:04,349 --> 00:01:06,910 -to do next is just to cover before finishing the - -24 -00:01:06,910 --> 00:01:08,700 -lesson a few of those to show you some - -25 -00:01:08,700 --> 00:01:11,140 -examples of smells and what you can do about them. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/22 - Bad Smell Examples - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/22 - Bad Smell Examples - lang_en_vs4.srt deleted file mode 100644 index b26a698..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/22 - Bad Smell Examples - lang_en_vs4.srt +++ /dev/null @@ -1,263 +0,0 @@ -1 -00:00:00,100 --> 00:00:03,080 -The first example I want to mention is this called duplicated - -2 -00:00:03,080 --> 00:00:06,950 -code. So what happens here what the symptom is, is that you - -3 -00:00:06,950 --> 00:00:10,400 -have the same piece of code. The same fragment of code or - -4 -00:00:10,400 --> 00:00:14,570 -code structure replicated in more than one place. And that's pretty common - -5 -00:00:14,570 --> 00:00:16,880 -when we do for example copy and paste programming. Is something - -6 -00:00:16,880 --> 00:00:19,730 -that we mention at the beginning of the lessons. So for example - -7 -00:00:19,730 --> 00:00:22,780 -we are just instead reimplementing a piece of functionality we know we - -8 -00:00:22,780 --> 00:00:25,510 -already have. We simply copy from a different part of the code. - -9 -00:00:25,510 --> 00:00:27,760 -So what do you do if you have duplicated code? This can - -10 -00:00:27,760 --> 00:00:30,100 -be a problem over time because we might end up with a lot - -11 -00:00:30,100 --> 00:00:34,480 -of duplication in your system. You can use the extract method. Refactoring that - -12 -00:00:34,480 --> 00:00:37,610 -we just saw, and basically create a method that has exactly the same - -13 -00:00:37,610 --> 00:00:40,700 -function as this fragment of code and then replace the fragment of code - -14 -00:00:40,700 --> 00:00:43,030 -with an invocation to run and you will do it in all the - -15 -00:00:43,030 --> 00:00:47,520 -places where the code is duplicated. That simply finds the code and favors - -16 -00:00:47,520 --> 00:00:48,660 -reuse, because there can be more - -17 -00:00:48,660 --> 00:00:51,050 -places that benefit from that additional method. - -18 -00:00:51,050 --> 00:00:54,960 -Especially if it implements some popular piece of functionality. Another example - -19 -00:00:54,960 --> 00:00:57,930 -of best mal a typical one is the long method. So you - -20 -00:00:57,930 --> 00:01:00,530 -have a very long method with a lot of statements. And we - -21 -00:01:00,530 --> 00:01:03,570 -know that the longer procedure, the more difficult it is to understand - -22 -00:01:03,570 --> 00:01:05,650 -it and maintain it. So what I'm going to do in this - -23 -00:01:05,650 --> 00:01:08,690 -case is to factor in such as an extract method or a - -24 -00:01:08,690 --> 00:01:12,900 -decompose conditional to make the code simpler, shorten it. And extract some - -25 -00:01:12,900 --> 00:01:16,450 -of the functionality into other methods. So basically break down the method - -26 -00:01:16,450 --> 00:01:20,180 -in smaller methods that are more cohesive. Another typical example - -27 -00:01:20,180 --> 00:01:22,380 -of best mail which is something that can happen very - -28 -00:01:22,380 --> 00:01:25,720 -commonly during maintenance, is that you keep adding functionality to - -29 -00:01:25,720 --> 00:01:28,470 -a class and you end up with a large class. So - -30 -00:01:28,470 --> 00:01:32,410 -class is clearly to big. It contains too many fields - -31 -00:01:32,410 --> 00:01:35,620 -too many methods, and is just too complex to understand. This - -32 -00:01:35,620 --> 00:01:37,990 -case the obvious solution is to use the extract class - -33 -00:01:37,990 --> 00:01:42,230 -or subclass and basically break down the class in multiple classes. - -34 -00:01:42,230 --> 00:01:45,390 -Each one with a more cohesive piece of functionality. So, the - -35 -00:01:45,390 --> 00:01:46,930 -classes are more cohesive, are more - -36 -00:01:46,930 --> 00:01:48,360 -understandable, and the overall structure The - -37 -00:01:48,360 --> 00:01:52,440 -structure of the system is improved. Shotgun surgery is an interesting smell - -38 -00:01:52,440 --> 00:01:55,980 -and the case here is we are in a situation and you, - -39 -00:01:55,980 --> 00:01:58,270 -probably will happen to you, it definitely happened to me, in - -40 -00:01:58,270 --> 00:02:01,110 -which every time you make some kind of change to the system - -41 -00:02:01,110 --> 00:02:03,850 -you have to make many little changes. All over the place to - -42 -00:02:03,850 --> 00:02:07,280 -many different classes. And this can be a symptom of the fact - -43 -00:02:07,280 --> 00:02:11,080 -that the functionality is spread among these different classes. So - -44 -00:02:11,080 --> 00:02:13,610 -there's too much coupling between the classes and too little - -45 -00:02:13,610 --> 00:02:16,540 -cohesion within the classes. Also in this case you can - -46 -00:02:16,540 --> 00:02:19,540 -use refactoring, for example by using the move method or move - -47 -00:02:19,540 --> 00:02:22,650 -field or inline class to bring the pieces of related - -48 -00:02:22,650 --> 00:02:26,470 -functionality together. So that your resulting classes are more cohesive, you - -49 -00:02:26,470 --> 00:02:29,220 -reduce the dependencies between the different classes, and you address - -50 -00:02:29,220 --> 00:02:32,305 -this problem. Because at this point, each class is much more - -51 -00:02:32,305 --> 00:02:34,020 -self-contained and therefore it can be - -52 -00:02:34,020 --> 00:02:36,100 -modified by itself without having to affect - -53 -00:02:36,100 --> 00:02:38,560 -the rest of the system. The last smell I want to mention is - -54 -00:02:38,560 --> 00:02:42,040 -one I really like, is the feature envy, and it refers to a - -55 -00:02:42,040 --> 00:02:45,340 -method that seems more interested In a class other than the one it - -56 -00:02:45,340 --> 00:02:48,370 -belongs to. So for example this method is using a lot of public - -57 -00:02:48,370 --> 00:02:51,030 -fields of another class, is calling a lot of methods of the other - -58 -00:02:51,030 --> 00:02:53,830 -class. And so in this case the solution is really clear. What you - -59 -00:02:53,830 --> 00:02:57,420 -want to do it to perform the extract method refactoring and then the move - -60 -00:02:57,420 --> 00:02:59,680 -method refactoring so as to take the jealous - -61 -00:02:59,680 --> 00:03:01,210 -method out of the class where it doesn't - -62 -00:03:01,210 --> 00:03:04,770 -belong and get it home. To the class where it really belongs and once more the - -63 -00:03:04,770 --> 00:03:06,790 -effect of this is that you decrease the - -64 -00:03:06,790 --> 00:03:09,990 -coupling between the two classes and therefore you - -65 -00:03:09,990 --> 00:03:11,910 -have a better system and also you eliminate - -66 -00:03:11,910 --> 00:03:13,150 -the envy. Which is always a good thing. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/23 - Bad Smell Quiz - lang_en_vs3.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/23 - Bad Smell Quiz - lang_en_vs3.srt deleted file mode 100644 index 971d639..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/23 - Bad Smell Quiz - lang_en_vs3.srt +++ /dev/null @@ -1,31 +0,0 @@ -1 -00:00:00,100 --> 00:00:01,620 -So now, I would like for you to tell me - -2 -00:00:01,620 --> 00:00:04,810 -which of the following can be considered bad smells in - -3 -00:00:04,810 --> 00:00:07,320 -the context of refactoring. The fact that the program takes - -4 -00:00:07,320 --> 00:00:10,070 -too long to execute? The fact that method M in class - -5 -00:00:10,070 --> 00:00:12,460 -C is very long? Or the, the fact that Class - -6 -00:00:12,460 --> 00:00:16,120 -Cat and Dog are subclasses of class Animal? Or finally the - -7 -00:00:16,120 --> 00:00:18,960 -fact that every time we modify method M1 we also - -8 -00:00:18,960 --> 00:00:22,120 -need to modify method M2? So please mark all that apply. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/24 - Bad Smell Quiz Solution - lang_en_vs3.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/24 - Bad Smell Quiz Solution - lang_en_vs3.srt deleted file mode 100644 index 2773116..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/24 - Bad Smell Quiz Solution - lang_en_vs3.srt +++ /dev/null @@ -1,75 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,090 -So let's look at this one by one. The fact the program takes - -2 -00:00:03,090 --> 00:00:06,620 -too long to execute is not really a bad smell. It probably indicates - -3 -00:00:06,620 --> 00:00:08,800 -some problem with the code and the fact that we might need to - -4 -00:00:08,800 --> 00:00:11,420 -modify the code to make it more efficient, but it's not something that - -5 -00:00:11,420 --> 00:00:14,030 -we will normally classify it as a bad smell, so we're not going to - -6 -00:00:14,030 --> 00:00:17,850 -mark it. The second one, conversely, is definitely a bad smell. The fact - -7 -00:00:17,850 --> 00:00:21,700 -that the method is too long is a typical example of bad smell - -8 -00:00:21,700 --> 00:00:25,000 -and one in which we might want to apply some refactoring, for example, - -9 -00:00:25,000 --> 00:00:26,450 -the extract method or the - -10 -00:00:26,450 --> 00:00:29,240 -decomposed conditional refactorings. There's definitely - -11 -00:00:29,240 --> 00:00:32,159 -nothing wrong with the fact that the classes cat and dog - -12 -00:00:32,159 --> 00:00:35,600 -are subclasses of class animal. Actually, that sounds pretty appropriate, so - -13 -00:00:35,600 --> 00:00:38,270 -this is not a problem and definitely not a bad smell. - -14 -00:00:38,270 --> 00:00:40,990 -Whereas the fact that every time we modify method M1, - -15 -00:00:40,990 --> 00:00:44,210 -we also need to modify method some other method M2 as - -16 -00:00:44,210 --> 00:00:46,690 -a typical example of bad smell. So this can actually be - -17 -00:00:46,690 --> 00:00:50,590 -considered a specific example of what we just called "shotgun surgery." - -18 -00:00:50,590 --> 00:00:52,500 -So it is a case in which we might want to - -19 -00:00:52,500 --> 00:00:55,750 -use, for instance, the move method refactoring to fix the issue. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/3 - Introduction - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/3 - Introduction - lang_en_vs4.srt deleted file mode 100644 index 7631180..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/3 - Introduction - lang_en_vs4.srt +++ /dev/null @@ -1,27 +0,0 @@ -1 -00:00:00,120 --> 00:00:04,280 -So let's have a small quiz and see whether you can remember why can testing - -2 -00:00:04,280 --> 00:00:06,250 -guarantee that that a refactoring is behavior is - -3 -00:00:06,250 --> 00:00:08,590 -preserving. So why testing can only show the - -4 -00:00:08,590 --> 00:00:11,080 -absence of defects and not their presence? - -5 -00:00:11,080 --> 00:00:12,960 -Is that because testing and refactoring are different - -6 -00:00:12,960 --> 00:00:15,980 -activities? Because testing is inherently incomplete? Or, just - -7 -00:00:15,980 --> 00:00:19,560 -because testers are often inexperienced? Make your choice. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/4 - Introduction Solution - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/4 - Introduction Solution - lang_en_vs4.srt deleted file mode 100644 index 7888f8d..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/4 - Introduction Solution - lang_en_vs4.srt +++ /dev/null @@ -1,39 +0,0 @@ -1 -00:00:00,220 --> 00:00:03,180 -And the reason for this is because testing is inherently - -2 -00:00:03,180 --> 00:00:06,080 -incomplete. So let me re-size this a little bit, so that - -3 -00:00:06,080 --> 00:00:08,340 -I can make room for an illustration. And what I'm - -4 -00:00:08,340 --> 00:00:11,170 -going to show you here is just a reminder, that when we - -5 -00:00:11,170 --> 00:00:15,380 -test, we have a huge virtually infinite input domain, and - -6 -00:00:15,380 --> 00:00:17,956 -we have to derive from this input domain a few test - -7 -00:00:17,956 --> 00:00:21,330 -cases. By picking specific inputs in the domain, and of - -8 -00:00:21,330 --> 00:00:25,260 -course, corresponding outputs. And so what happens normally is that these - -9 -00:00:25,260 --> 00:00:28,280 -test cases represent the teeny tiny fraction of - -10 -00:00:28,280 --> 00:00:30,920 -the domain, and therefore testing is always incomplete. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/5 - Reasons to Refactor - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/5 - Reasons to Refactor - lang_en_vs4.srt deleted file mode 100644 index 1da50e6..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/5 - Reasons to Refactor - lang_en_vs4.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,230 --> 00:00:02,000 -We saw at the beginning of the lesson, what are the - -2 -00:00:02,000 --> 00:00:05,490 -goals of refactoring? Or what are the reasons ,why we need to - -3 -00:00:05,490 --> 00:00:09,130 -refactor in the first place? The first reason is that requirements - -4 -00:00:09,130 --> 00:00:12,370 -change, and when the requirements change, we often need to change our - -5 -00:00:12,370 --> 00:00:16,356 -design accordingly. In other cases if any of the requirements unchange, - -6 -00:00:16,356 --> 00:00:19,690 -we might need to improve our design. And this happens for many - -7 -00:00:19,690 --> 00:00:22,300 -reasons. For example, we need to add a new feature, we - -8 -00:00:22,300 --> 00:00:25,330 -want to make the code more maintainable, and also in general programmers - -9 -00:00:25,330 --> 00:00:28,110 -don't come up with the best design the first time. So they might - -10 -00:00:28,110 --> 00:00:31,130 -need to adapt it after the fact. And the final reason I want to - -11 -00:00:31,130 --> 00:00:33,040 -mention is sloppiness, and to some - -12 -00:00:33,040 --> 00:00:35,700 -extent laziness, of programmers. And a typical - -13 -00:00:35,700 --> 00:00:38,520 -example of this is something that we all have done, which is copy - -14 -00:00:38,520 --> 00:00:41,890 -and paste programming. So instead of rewriting a new piece of code, because - -15 -00:00:41,890 --> 00:00:44,620 -we know that there is some code in some other parts for the - -16 -00:00:44,620 --> 00:00:47,900 -program that does a similar thing, we'll just copy the code over. And - -17 -00:00:47,900 --> 00:00:51,080 -before we know, we end up with tons of copies of the same functionality. - -18 -00:00:51,080 --> 00:00:54,150 -And when that happens, a good way of consolidating that code and - -19 -00:00:54,150 --> 00:00:57,580 -extracting that functionality is to use refactoring, for example, by creating a - -20 -00:00:57,580 --> 00:01:01,080 -method or a class that provides the functionality. And we'll see specific - -21 -00:01:01,080 --> 00:01:03,830 -examples of that. A question I would like to ask at this - -22 -00:01:03,830 --> 00:01:07,330 -point of the class is whether you have used refactoring before? So - -23 -00:01:07,330 --> 00:01:09,690 -I want you to take a second and think about it. And - -24 -00:01:09,690 --> 00:01:12,590 -no matter what you're history is, if you ever coded I bet - -25 -00:01:12,590 --> 00:01:16,180 -you any money that the answer is yes, you have done refactoring. - -26 -00:01:16,180 --> 00:01:17,300 -What do I mean? I'm going to give you an - -27 -00:01:17,300 --> 00:01:19,610 -example. I'm sure you renamed the class or a - -28 -00:01:19,610 --> 00:01:22,190 -method or change the name of some variables in - -29 -00:01:22,190 --> 00:01:25,490 -the code before. That's refactoring. Even something as simple as - -30 -00:01:25,490 --> 00:01:28,030 -renaming a class is refactoring, because, for example, it - -31 -00:01:28,030 --> 00:01:30,230 -might help you making your code more understandable. And of - -32 -00:01:30,230 --> 00:01:32,520 -course I'll admit that in this case, this is - -33 -00:01:32,520 --> 00:01:35,690 -a trivial refactoring, and there are much more interesting ones. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/6 - History of Refactoring - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/6 - History of Refactoring - lang_en_vs4.srt deleted file mode 100644 index 3405b65..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/6 - History of Refactoring - lang_en_vs4.srt +++ /dev/null @@ -1,171 +0,0 @@ -1 -00:00:00,110 --> 00:00:02,340 -So if you follow my class so far, you know that - -2 -00:00:02,340 --> 00:00:04,570 -I like to give a little bit of history when I talk - -3 -00:00:04,570 --> 00:00:06,900 -about a specific topic. So I'm going to do the same also - -4 -00:00:06,900 --> 00:00:09,900 -in this case for refactoring. I'm going to start by mentioning, the fact - -5 -00:00:09,900 --> 00:00:13,440 -that refactoring is something that programmers have always done. I gave - -6 -00:00:13,440 --> 00:00:16,300 -you a trivial example just a minute ago of what refactoring is. - -7 -00:00:16,300 --> 00:00:18,080 -So even more complicated refactorings are - -8 -00:00:18,080 --> 00:00:20,880 -something that are commonplace for developers. - -9 -00:00:20,880 --> 00:00:23,110 -Somehow refactoring is especially important in - -10 -00:00:23,110 --> 00:00:25,240 -the context of object-oriented languages and - -11 -00:00:25,240 --> 00:00:28,080 -probably it's because the object-oriented features are well suited to - -12 -00:00:28,080 --> 00:00:31,640 -make designs flexible and reusable. Because of the fact that help - -13 -00:00:31,640 --> 00:00:35,120 -encapsulation, information hiding, and so they make it easier to - -14 -00:00:35,120 --> 00:00:38,330 -modify something without changing the functionality that it provides to the - -15 -00:00:38,330 --> 00:00:40,960 -outside world. However, you should keep in mind that refactoring - -16 -00:00:40,960 --> 00:00:44,330 -is really not specific to object oriented languages, you can also - -17 -00:00:44,330 --> 00:00:47,320 -refactor other languages, it's just more common to see it in - -18 -00:00:47,320 --> 00:00:50,450 -that context. So one of the first examples of a specific - -19 -00:00:50,450 --> 00:00:53,630 -discussion of what the refactorings are is Opdyke's PhD - -20 -00:00:53,630 --> 00:00:57,710 -thesis in 1990. Which discusses refactorings for small talk. - -21 -00:00:57,710 --> 00:00:59,360 -And some of you might be familiar with small - -22 -00:00:59,360 --> 00:01:02,600 -talk, which is a specific objectory language. And in - -23 -00:01:02,600 --> 00:01:06,590 -more recent times, refactoring's becoming increasing popular due to - -24 -00:01:06,590 --> 00:01:10,370 -lightweight development methodoogies, due to agile development, which is - -25 -00:01:10,370 --> 00:01:12,630 -something that we just discussed in this class. For - -26 -00:01:12,630 --> 00:01:15,830 -example, when we talked about extreme programming, we mentioned refactoring - -27 -00:01:15,830 --> 00:01:17,950 -a few times. And the reason why its so popular - -28 -00:01:17,950 --> 00:01:20,690 -is because re-factoring is one of the practices that help. - -29 -00:01:20,690 --> 00:01:24,780 -Making changes less expensive. And therefore adapt to changing requirements - -30 -00:01:24,780 --> 00:01:26,980 -and changing environments more quickly. - -31 -00:01:26,980 --> 00:01:29,140 -And continuing with historical perspective, one - -32 -00:01:29,140 --> 00:01:31,760 -of the milestones in the history of re-factoring [INAUDIBLE] is - -33 -00:01:31,760 --> 00:01:34,660 -a book by Martin Fowler. This is a book entitled - -34 -00:01:34,660 --> 00:01:37,610 -Improving the Design of Existing [INAUDIBLE]. And it contains a - -35 -00:01:37,610 --> 00:01:41,320 -catalog of refactorings, a list of bad smells, in code, and - -36 -00:01:41,320 --> 00:01:43,450 -we're going to see what that mean exactly. Nothing to - -37 -00:01:43,450 --> 00:01:45,570 -do with other kinds of bad smells. It talks about - -38 -00:01:45,570 --> 00:01:48,900 -guidelines on when to apply refactoring. And finally, which is - -39 -00:01:48,900 --> 00:01:52,540 -very useful, it provides example of code, before and after. - -40 -00:01:52,540 --> 00:01:54,660 -Applying the refactoring and we're going to use more of the - -41 -00:01:54,660 --> 00:01:57,190 -same style when discussing refactoring in the rest of this - -42 -00:01:57,190 --> 00:02:01,090 -lesson. More specifically what we're discussing next, are some examples - -43 -00:02:01,090 --> 00:02:05,130 -of refactoring and also some examples of code bad smells. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/7 - Types of Refactorings - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/7 - Types of Refactorings - lang_en_vs4.srt deleted file mode 100644 index b646b14..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/7 - Types of Refactorings - lang_en_vs4.srt +++ /dev/null @@ -1,43 +0,0 @@ -1 -00:00:00,170 --> 00:00:03,630 -There are many refactorings in Fowler's book, and what I'm - -2 -00:00:03,630 --> 00:00:06,480 -showing here is just a partial list. And we're not going to - -3 -00:00:06,480 --> 00:00:08,930 -have time to go through the complete list of refactorings, - -4 -00:00:08,930 --> 00:00:10,830 -so what I'm going to do instead, I'm just going to pick a - -5 -00:00:10,830 --> 00:00:13,870 -few of those, but I'm going to explain in more depth, - -6 -00:00:13,870 --> 00:00:16,600 -and for which I'm going to provide some examples. In particular, we're - -7 -00:00:16,600 --> 00:00:18,000 -going to talk about the collapse - -8 -00:00:18,000 --> 00:00:20,630 -hierarchy refactoring, the consolidate conditional - -9 -00:00:20,630 --> 00:00:23,600 -expressions, the decompose conditionals, extract - -10 -00:00:23,600 --> 00:00:25,418 -method, extract class, and inline class. - -11 -00:00:25,418 --> 00:00:29,420 -And we're going to see each of those individually in the rest of the lesson. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/8 - Collapse Hierarchy - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/8 - Collapse Hierarchy - lang_en_vs4.srt deleted file mode 100644 index 8711182..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/8 - Collapse Hierarchy - lang_en_vs4.srt +++ /dev/null @@ -1,67 +0,0 @@ -1 -00:00:00,110 --> 00:00:03,080 -The first refactoring we're going to see is the collapse hierarchy - -2 -00:00:03,080 --> 00:00:06,340 -refactoring. When a software system undergoes a number of changes, over - -3 -00:00:06,340 --> 00:00:09,730 -time the collapse hierarchy may become, let's say, sub-optimal. There are - -4 -00:00:09,730 --> 00:00:11,300 -several refactorings that address this - -5 -00:00:11,300 --> 00:00:13,200 -issue for example, refactorings that allow - -6 -00:00:13,200 --> 00:00:15,900 -you to move methods and fields up and down the class - -7 -00:00:15,900 --> 00:00:18,360 -hierarchy. So what happens when you apply a number of these - -8 -00:00:18,360 --> 00:00:22,360 -refactorings, is that a subclass might become too similar to its - -9 -00:00:22,360 --> 00:00:25,878 -superclass and might not be adding much value to the system. - -10 -00:00:25,878 --> 00:00:28,010 -In this case, it is a good idea to merge - -11 -00:00:28,010 --> 00:00:31,300 -the classes together. That's exactly what the Collapse Hierarchy refactoring - -12 -00:00:31,300 --> 00:00:34,600 -does. Imagine, for instance, that we have two classes: employee - -13 -00:00:34,600 --> 00:00:38,210 -and salesman. And that salesman is just so similar to - -14 -00:00:38,210 --> 00:00:40,380 -employee that it does not make sense to keep them - -15 -00:00:40,380 --> 00:00:43,870 -separated. In this case, you could merge the two classes, - -16 -00:00:43,870 --> 00:00:46,730 -so that at the end of the refactoring, only employee - -17 -00:00:46,730 --> 00:00:50,070 -is left. And the resulting structure of the system is improved. diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/9 - Consolidate Conditional Expression - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/9 - Consolidate Conditional Expression - lang_en_vs4.srt deleted file mode 100644 index be2b3fe..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/9 - Consolidate Conditional Expression - lang_en_vs4.srt +++ /dev/null @@ -1,131 +0,0 @@ -1 -00:00:00,070 --> 00:00:00,860 -We're now going to talk about - -2 -00:00:00,860 --> 00:00:03,390 -the consolidate conditional expression refactoring. - -3 -00:00:03,390 --> 00:00:05,730 -A common situation in code is that you have a set - -4 -00:00:05,730 --> 00:00:08,530 -of conditionals with the same result. What that means that - -5 -00:00:08,530 --> 00:00:12,090 -sometimes the code contains a series of conditional checks in which - -6 -00:00:12,090 --> 00:00:14,760 -each check is different, yet the resulting action is the - -7 -00:00:14,760 --> 00:00:18,440 -same. In these cases, the code could be improved by combining - -8 -00:00:18,440 --> 00:00:22,100 -the conditionals using, for example, and, and or, as connectors. So - -9 -00:00:22,100 --> 00:00:25,390 -as to have a single conditional check, with a single result. - -10 -00:00:25,390 --> 00:00:28,500 -At that point you can also extract those conditional into a - -11 -00:00:28,500 --> 00:00:32,310 -method. And replace the conditional with a call, to debt matter consolidating - -12 -00:00:32,310 --> 00:00:35,110 -the conditional code in this way can make the checks clearer - -13 -00:00:35,110 --> 00:00:38,170 -by showing that you're really making a single check rather than multiple - -14 -00:00:38,170 --> 00:00:41,150 -checks, and extracted that condition and having that matter instead of - -15 -00:00:41,150 --> 00:00:44,550 -a condition can clarify your code by explaining why you're doing a - -16 -00:00:44,550 --> 00:00:47,350 -given check, rather than how you're doing it. You can see an - -17 -00:00:47,350 --> 00:00:52,020 -example of that situation in this code, which is the disabilityAmount method. - -18 -00:00:52,020 --> 00:00:54,580 -As the name of the method says, the purpose of this code - -19 -00:00:54,580 --> 00:00:58,300 -is to compute the disability amount for a given, for example, employee. - -20 -00:00:58,300 --> 00:01:01,250 -And there is a set of initial checks in the methods whose - -21 -00:01:01,250 --> 00:01:05,090 -goal is to decide whether there's this disabilityAmount should be instead zero. - -22 -00:01:05,090 --> 00:01:07,750 -And as you can see, there's multiple conditions. For example, there's a - -23 -00:01:07,750 --> 00:01:10,630 -check about the seniority level, and about the number of months that - -24 -00:01:10,630 --> 00:01:14,350 -the employee's been disabled. So far, whether the employee is part time - -25 -00:01:14,350 --> 00:01:17,060 -and the outcome of all these check is always the same. If they're - -26 -00:01:17,060 --> 00:01:19,740 -true, if the check is satisfied then there is no disability - -27 -00:01:19,740 --> 00:01:22,564 -amount. So the disabilityAmount is zero. So what I will do - -28 -00:01:22,564 --> 00:01:25,986 -if I apply the consolidate conditional expression to this matter, is - -29 -00:01:25,986 --> 00:01:29,690 -that I will take these three conditionals. I will put them together - -30 -00:01:29,690 --> 00:01:32,772 -by saying basically that if seniority is less than 2 or - -31 -00:01:32,772 --> 00:01:36,524 -monthsDisabled is greater than 12 or isPartTime is true then the - -32 -00:01:36,524 --> 00:01:40,170 -return should be zero. And once I have this combined conditional, - -33 -00:01:40,170 --> 00:01:42,601 -as I see here, I will just extract that into a method. |