diff options
Diffstat (limited to 'usth/ICT2.7/P1L1 Introduction and Overview Subtitles')
17 files changed, 1760 insertions, 0 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 new file mode 100644 index 0000000..aea69ae --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/1 - Introduction - lang_en.srt @@ -0,0 +1,40 @@ +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 new file mode 100644 index 0000000..b1f822e --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/10 - Software Development - lang_en.srt @@ -0,0 +1,108 @@ +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 new file mode 100644 index 0000000..98592eb --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/11 - Software Process - lang_en.srt @@ -0,0 +1,96 @@ +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 new file mode 100644 index 0000000..20ef47f --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/12 - Preliminary Questions - lang_en.srt @@ -0,0 +1,32 @@ +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 new file mode 100644 index 0000000..fe239c6 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/13 - Preliminary Questions Solution - lang_en.srt @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..936b50d --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/14 - Preliminary Questions - lang_en.srt @@ -0,0 +1,24 @@ +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 new file mode 100644 index 0000000..1a040e2 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/15 - Preliminary Questions Solution - lang_en.srt @@ -0,0 +1,32 @@ +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 new file mode 100644 index 0000000..7fc30ef --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/16 - Software Phases - lang_en.srt @@ -0,0 +1,100 @@ +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 new file mode 100644 index 0000000..077c0f8 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/17 - Tools of the Trade - lang_en.srt @@ -0,0 +1,160 @@ +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 new file mode 100644 index 0000000..858a75a --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt @@ -0,0 +1,572 @@ +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 new file mode 100644 index 0000000..f98f98f --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/3 - Software Failure Quiz - lang_en.srt @@ -0,0 +1,32 @@ +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 new file mode 100644 index 0000000..db633e2 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/4 - Software Failure Quiz Solution - lang_en.srt @@ -0,0 +1,48 @@ +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 new file mode 100644 index 0000000..6933222 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/5 - Discipline of Software Engineering - lang_en.srt @@ -0,0 +1,80 @@ +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 new file mode 100644 index 0000000..41061a5 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/6 - The Software Crisis - lang_en.srt @@ -0,0 +1,208 @@ +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 new file mode 100644 index 0000000..004a36c --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/7 - The Software Crisis Quiz - lang_en.srt @@ -0,0 +1,44 @@ +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 new file mode 100644 index 0000000..33f5c6c --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/8 - The Software Crisis Quiz Solution - lang_en.srt @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..0592078 --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/9 - Evidence of the Software Crisis - lang_en.srt @@ -0,0 +1,116 @@ +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. + |