[usth/ICT2.7] Remove Udacity transcribes
This commit is contained in:
parent
dc6f57c3af
commit
8a7dfa0972
|
@ -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.
|
||||
|
|
@ -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?
|
||||
|
|
@ -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.
|
||||
|
|
@ -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?
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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].
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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?
|
|
@ -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.
|
|
@ -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?
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
File diff suppressed because it is too large
Load Diff
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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?
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue